17 #include <cdc/dbobjects/CDCCrossTalkClasses.h>
20 using std::upper_bound;
21 using std::equal_range;
49 Short_t ch8 = channel % 8;
67 const vector< pair<Short_t, asicChannel> >
getLibraryCrossTalk(Short_t channel, Short_t TDCin, Short_t ADCin, Short_t TOTin,
68 size_t entry = 0,
bool insertSignalToOutput =
false)
const
71 vector< pair<Short_t, asicChannel> > outRec;
72 auto prob = gRandom->Uniform();
76 if (insertSignalToOutput)
77 outRec.emplace_back(std::make_pair(channel,
asicChannel{TDCin, ADCin, TOTin}));
82 Short_t ch8 = channel % 8;
86 size_t size = std::distance(pADC.first, pADC.second);
95 val = gRandom->Integer(size);
99 bool recNotSet =
true;
105 if (pADC.first->Channel == ch8) {
106 rec = (pADC.first)->record;
109 if ((--pADC.first)->Channel == ch8) {
110 rec = (--pADC.first)->record;
113 B2WARNING(
"Could not find CDC Cross talk library entry for channel, ADC: " << channel <<
" " << ADCin);
114 if (insertSignalToOutput)
115 outRec.emplace_back(std::make_pair(channel,
asicChannel{TDCin, ADCin, TOTin}));
122 for (
auto p = pADC.first; p != pADC.second; ++p) {
131 B2ASSERT(
"CDC cross talk record not set", !recNotSet);
134 Short_t DeltaTDC = TDCin - rec[ch8].TDC;
136 if (abs(DeltaTDC) > 1000) {
137 B2WARNING(
"Large xTalk DeltaTDC=" << DeltaTDC);
143 for (
int i = 0; i < 8; i += 1) {
144 if (rec[i].TDC > 0) {
146 B2ASSERT(
"CDC Cross talk entry for the selected channel cannot be empty " << ch8 <<
" " << rec[ch8].TDC , rec[ch8].TDC > -1);
147 if (insertSignalToOutput)
148 outRec.emplace_back(std::make_pair(channel,
asicChannel{TDCin, ADCin, TOTin}));
150 Short_t TDCout = rec[i].TDC + DeltaTDC;
151 outRec.emplace_back(std::make_pair(i - ch8 + channel ,
asicChannel{TDCout, rec[i].ADC, rec[i].TOT}));
165 std::cout <<
"Content of CDCCrossTalkLibrary" << std::endl;
166 std::cout <<
"Size = " <<
m_library.size() <<
"\n";
167 if (verbosity < 1)
return;
169 for (
size_t i = 0 ; i <
m_library.size(); i += 1) {
171 std::cout <<
"ADC: " << adc <<
" CH: " << ch <<
" count: " << i <<
"\n";
172 std::cout <<
" TDC ADC TOT \n";
173 for (
auto rec : record) {
174 std::cout <<
" " << rec.TDC <<
" " << rec.ADC <<
" " << rec.TOT <<
"\n";
177 std::cout <<
"Probability of cross talk vs ADC: \n";
178 for (
size_t a = 0; a < 8196; a++) {
179 std::cout <<
"P(" << a <<
")=" <<
m_pCrossTalk[a] <<
"\n";
188 auto [adc, ch, record] =
m_library[entry];
189 std::cout <<
"ADC:" << adc <<
" CH: " << ch <<
" Size: " <<
m_library.size() <<
"\n";
190 std::cout <<
" TDC ADC TOT \n";
191 for (
auto rec : record) {
192 std::cout <<
" " << rec.TDC <<
" " << rec.ADC <<
" " << rec.TOT <<
"\n";
202 if (ADC < 0)
return 0;
203 if (ADC >= 8196)
return 1;