Skip to content

Commit 06ca4b5

Browse files
Merge pull request #641 from SBNSoftware/feature/hlay_crt_channel_status
CRT Channel Status
2 parents 1f26651 + 723bc8f commit 06ca4b5

8 files changed

Lines changed: 114 additions & 17 deletions

File tree

sbndcode/CRT/CRTReco/CRTStripHitProducer_module.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ std::vector<sbnd::crt::CRTStripHit> sbnd::crt::CRTStripHitProducer::CreateStripH
222222

223223
if(unix_diff < -1 || unix_diff > 1)
224224
{
225-
throw std::runtime_error("Unix timestamps differ by more than 1" + unix_diff);
225+
throw std::runtime_error(Form("Unix timestamps differ by more than 1 (%li)", unix_diff));
226226
}
227227

228228
if(unix_diff == 1)
@@ -254,6 +254,9 @@ std::vector<sbnd::crt::CRTStripHit> sbnd::crt::CRTStripHitProducer::CreateStripH
254254
const CRTSiPMGeo sipm1 = fCRTGeoAlg.GetSiPM(channel);
255255
const CRTSiPMGeo sipm2 = fCRTGeoAlg.GetSiPM(channel+1);
256256

257+
if(sipm1.status == CRTChannelStatus::kDeadChannel || sipm2.status == CRTChannelStatus::kDeadChannel)
258+
continue;
259+
257260
// Subtract channel pedestals
258261
const uint16_t adc1 = sipm1.pedestal < sipm_adcs[adc_i] ? sipm_adcs[adc_i] - sipm1.pedestal : 0;
259262
const uint16_t adc2 = sipm2.pedestal < sipm_adcs[adc_i+1] ? sipm_adcs[adc_i+1] - sipm2.pedestal : 0;

sbndcode/Calibration/CRT/CalibService/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ art_make(SERVICE_LIBRARIES
1212
art::Persistency_Provenance
1313
messagefacility::MF_MessageLogger
1414
ROOT::Core
15+
sbnobj::SBND_CRT
1516
)

sbndcode/Calibration/CRT/CalibService/CRTCalibService.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "fhiclcpp/ParameterSet.h"
1818
#include "art/Framework/Core/ModuleMacros.h"
1919
#include "art/Framework/Services/Registry/ServiceMacros.h"
20+
#include "sbnobj/SBND/CRT/CRTEnums.hh"
2021

2122
namespace SBND {
2223
class CRTCalibService;
@@ -34,12 +35,17 @@ class SBND::CRTCalibService {
3435

3536
double GetPedestalFromFEBMAC5AndChannel(unsigned int feb_mac5, unsigned int ch) const;
3637

38+
enum sbnd::crt::CRTChannelStatus GetChannelStatusFromFEBMAC5AndChannel(unsigned int feb_mac5,
39+
unsigned int ch) const;
40+
3741
private:
3842

3943
std::unordered_map<unsigned int, double> fTimingOffsetFromFEBMAC5;
4044

4145
std::unordered_map<unsigned int, std::unordered_map<unsigned int, double>> fPedestalFromFEBMAC5AndChannel;
4246

47+
std::unordered_map<unsigned int, std::unordered_map<unsigned int, sbnd::crt::CRTChannelStatus>> fChannelStatusFromFEBMAC5AndChannel;
48+
4349
};
4450

4551
DECLARE_ART_SERVICE(SBND::CRTCalibService, LEGACY)

sbndcode/Calibration/CRT/CalibService/CRTCalibService_service.cc

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ SBND::CRTCalibService::CRTCalibService(fhicl::ParameterSet const& pset)
1919
{
2020
const std::string timingOffsetFile = pset.get<std::string>("TimingOffsetFileName");
2121
const std::string pedestalFile = pset.get<std::string>("PedestalFileName");
22+
const std::string badChannelsFile = pset.get<std::string>("BadChannelsFileName");
2223

23-
std::string timingOffsetPath, pedestalPath;
24+
std::string timingOffsetPath, pedestalPath, badChannelsPath;
2425
cet::search_path sp("FW_SEARCH_PATH");
2526
sp.find_file(timingOffsetFile, timingOffsetPath);
2627
sp.find_file(pedestalFile, pedestalPath);
28+
sp.find_file(badChannelsFile, badChannelsPath);
2729

2830
if(timingOffsetPath.empty())
2931
{
@@ -37,9 +39,16 @@ SBND::CRTCalibService::CRTCalibService(fhicl::ParameterSet const& pset)
3739
throw cet::exception("File not found");
3840
}
3941

42+
if(badChannelsPath.empty())
43+
{
44+
std::cout << "SBND::CRTCalibService Input file " << badChannelsFile << " not found" << std::endl;
45+
throw cet::exception("File not found");
46+
}
47+
4048
std::cout << "SBND CRT Channel Map: Building map from files...\n"
4149
<< "\t Timing Offsets: " << timingOffsetFile << '\n'
42-
<< "\t Pedestals: " << pedestalFile << std::endl;
50+
<< "\t Pedestals: " << pedestalFile << '\n'
51+
<< "\t Bad Channels: " << badChannelsFile << std::endl;
4352

4453
std::ifstream timingOffsetStream(timingOffsetPath, std::ios::in);
4554
std::string line;
@@ -72,8 +81,49 @@ SBND::CRTCalibService::CRTCalibService(fhicl::ParameterSet const& pset)
7281

7382
fPedestalFromFEBMAC5AndChannel[mac5][ch] = pedestal;
7483
}
75-
84+
7685
pedestalStream.close();
86+
87+
std::ifstream badChannelsStream(badChannelsPath, std::ios::in);
88+
89+
while(std::getline(badChannelsStream, line))
90+
{
91+
std::stringstream linestream(line);
92+
93+
unsigned int mac5, ch;
94+
std::string status_string;
95+
96+
linestream
97+
>> mac5
98+
>> ch
99+
>> status_string;
100+
101+
sbnd::crt::CRTChannelStatus status = sbnd::crt::CRTChannelStatus::kGoodChannel;
102+
sbnd::crt::CRTChannelStatus status_pair = sbnd::crt::CRTChannelStatus::kGoodChannel;
103+
104+
if(status_string.compare("kDeadChannel") == 0)
105+
{
106+
status = sbnd::crt::CRTChannelStatus::kDeadChannel;
107+
status_pair = sbnd::crt::CRTChannelStatus::kDeadNeighbourChannel;
108+
}
109+
else if(status_string.compare("kQuietChannel") == 0)
110+
{
111+
status = sbnd::crt::CRTChannelStatus::kQuietChannel;
112+
status_pair = sbnd::crt::CRTChannelStatus::kQuietNeighbourChannel;
113+
}
114+
else
115+
{
116+
std::cout << "SBND::CRTCalibService unknown channel status " << status_string << std::endl;
117+
throw cet::exception("Unknown status");
118+
}
119+
120+
fChannelStatusFromFEBMAC5AndChannel[mac5][ch] = status;
121+
122+
unsigned int ch_pair = ch % 2 ? ch - 1 : ch + 1;
123+
fChannelStatusFromFEBMAC5AndChannel[mac5][ch_pair] = status_pair;
124+
}
125+
126+
badChannelsStream.close();
77127
}
78128

79129
SBND::CRTCalibService::CRTCalibService(fhicl::ParameterSet const& pset, art::ActivityRegistry&)
@@ -125,4 +175,20 @@ double SBND::CRTCalibService::GetPedestalFromFEBMAC5AndChannel(unsigned int feb_
125175
return subIter->second;
126176
}
127177

178+
enum sbnd::crt::CRTChannelStatus SBND::CRTCalibService::GetChannelStatusFromFEBMAC5AndChannel(unsigned int feb_mac5,
179+
unsigned int ch) const
180+
{
181+
auto iter = fChannelStatusFromFEBMAC5AndChannel.find(feb_mac5);
182+
183+
if(iter == fChannelStatusFromFEBMAC5AndChannel.end())
184+
return sbnd::crt::CRTChannelStatus::kGoodChannel;
185+
186+
auto subIter = iter->second.find(ch);
187+
188+
if(subIter == iter->second.end())
189+
return sbnd::crt::CRTChannelStatus::kGoodChannel;
190+
191+
return subIter->second;
192+
}
193+
128194
DEFINE_ART_SERVICE(SBND::CRTCalibService)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
182 30 kDeadChannel
2+
136 0 kDeadChannel
3+
160 29 kDeadChannel
4+
160 31 kDeadChannel
5+
55 8 kDeadChannel
6+
130 3 kDeadChannel
7+
82 27 kDeadChannel
8+
88 27 kDeadChannel
9+
131 18 kDeadChannel
10+
117 12 kDeadChannel
11+
109 11 kDeadChannel
12+
111 31 kDeadChannel
13+
77 2 kQuietChannel
14+
216 11 kQuietChannel

sbndcode/Calibration/CRT/CalibService/crt_calib_service.fcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ crt_calib_service:
44
{
55
TimingOffsetFileName: "SBNDCRTTimingOffsets_v1.txt"
66
PedestalFileName: "SBNDCRTPedestals_v2.txt"
7+
BadChannelsFileName: "SBNDCRTBadChannels_v1.txt"
78
}
89

910
END_PROLOG

sbndcode/Geometry/GeometryWrappers/CRTGeoAlg.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,22 +130,26 @@ namespace sbnd::crt {
130130
const uint32_t actualChannel0 = invert ? 31 - (2 * ads_i) : 2 * ads_i;
131131
const uint32_t actualChannel1 = invert ? actualChannel0 - 1 : actualChannel0 + 1;
132132

133-
uint32_t pedestal0 = 0;
134-
uint32_t pedestal1 = 0;
133+
uint32_t pedestal0 = 0;
134+
uint32_t pedestal1 = 0;
135+
CRTChannelStatus status0 = CRTChannelStatus::kGoodChannel;
136+
CRTChannelStatus status1 = CRTChannelStatus::kGoodChannel;
135137

136138
if(!fMC)
137139
{
138140
art::ServiceHandle<SBND::CRTCalibService> CalibService;
139141
pedestal0 = CalibService->GetPedestalFromFEBMAC5AndChannel(mac5, actualChannel0);
140142
pedestal1 = CalibService->GetPedestalFromFEBMAC5AndChannel(mac5, actualChannel1);
143+
status0 = CalibService->GetChannelStatusFromFEBMAC5AndChannel(mac5, actualChannel0);
144+
status1 = CalibService->GetChannelStatusFromFEBMAC5AndChannel(mac5, actualChannel1);
141145
}
142146

143147
const double gain0 = fDefaultGain;
144148
const double gain1 = fDefaultGain;
145149

146150
// Fill SiPM information
147-
CRTSiPMGeo sipm0 = CRTSiPMGeo(stripName, channel0, sipm0XYZWorld, pedestal0, gain0);
148-
CRTSiPMGeo sipm1 = CRTSiPMGeo(stripName, channel1, sipm1XYZWorld, pedestal1, gain1);
151+
CRTSiPMGeo sipm0 = CRTSiPMGeo(stripName, channel0, sipm0XYZWorld, pedestal0, gain0, status0);
152+
CRTSiPMGeo sipm1 = CRTSiPMGeo(stripName, channel1, sipm1XYZWorld, pedestal1, gain1, status1);
149153
fSiPMs.insert(std::pair<uint16_t, CRTSiPMGeo>(channel0, sipm0));
150154
fSiPMs.insert(std::pair<uint16_t, CRTSiPMGeo>(channel1, sipm1));
151155
}

sbndcode/Geometry/GeometryWrappers/CRTGeoAlg.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace sbnd::crt {
4545

4646
struct CRTSiPMGeo{
4747
CRTSiPMGeo(const std::string &_stripName, const uint32_t _channel, const geo::Point_t location,
48-
const uint32_t _pedestal, const double _gain)
48+
const uint32_t _pedestal, const double _gain, const CRTChannelStatus _status)
4949
{
5050
stripName = _stripName;
5151
channel = _channel;
@@ -54,16 +54,18 @@ namespace sbnd::crt {
5454
z = location.Z();
5555
pedestal = _pedestal;
5656
gain = _gain;
57+
status = _status;
5758
null = false;
5859
}
59-
std::string stripName;
60-
uint16_t channel;
61-
double x;
62-
double y;
63-
double z;
64-
bool null;
65-
uint32_t pedestal;
66-
double gain;
60+
std::string stripName;
61+
uint16_t channel;
62+
double x;
63+
double y;
64+
double z;
65+
bool null;
66+
uint32_t pedestal;
67+
CRTChannelStatus status;
68+
double gain;
6769
};
6870

6971
// CRT strip geometry struct contains dimensions and mother module

0 commit comments

Comments
 (0)