27 , fWorkHist(make_unique<TH1I>(Form(
"workhist_%p", digiTree),
"wh", SHRT_MAX - SHRT_MIN, SHRT_MIN, SHRT_MAX))
30 fWorkHist->SetDirectory(0);
33 printf(
"Error! Unable to read the trigger channel map!\n");
41 map<TString, TClonesArray*> brName2ptr;
43 TString& detName = record.name;
44 TClass* cl = detName.Contains(
"TQDC") ? BmnTrigWaveDigit::Class() : BmnTrigDigit::Class();
45 auto it = brName2ptr.find(detName);
46 if (it == brName2ptr.end()) {
47 TClonesArray* ar =
new TClonesArray(cl);
48 ar->SetName(detName.Data());
49 digiTree->Branch(detName.Data(), &ar);
50 trigArrays.push_back(ar);
51 record.branchArrayPtr = ar;
52 brName2ptr.insert(make_pair(detName, ar));
54 record.branchArrayPtr = it->second;
60 map<PlMapKey, BmnTrigParameters*>::iterator itPar = fPlacementMap.find(
PlMapKey(record.serial, record.slot));
61 if (itPar == fPlacementMap.end()) {
62 printf(
"CrateSeral %08X slot %u not found in the placement map!\n", record.serial, record.slot);
65 par->
name = record.name;
70 par->
ChannelMap[record.channel] = record.module;
72 par->
NegativeMap[record.channel] = record.isNegative;
74 for (
auto& el : fPlacementMap) {
85 std::function<
void(TString, TClonesArray*)> BranchRegFun)
87 , fWorkHist(make_unique<TH1I>(Form(
"workhist_%p", this),
"wh", SHRT_MAX - SHRT_MIN, SHRT_MIN, SHRT_MAX))
90 fWorkHist->SetDirectory(0);
93 printf(
"Error! Unable to read the trigger channel map!\n");
99 map<TString, TClonesArray*> brName2ptr;
101 TString& detName = record.name;
102 TClass* cl = detName.Contains(
"TQDC") ? BmnTrigWaveDigit::Class() : BmnTrigDigit::Class();
103 auto it = brName2ptr.find(detName);
104 if (it == brName2ptr.end()) {
105 TClonesArray* ar =
new TClonesArray(cl);
106 ar->SetName(detName.Data());
107 BranchRegFun(detName, ar);
109 trigArrays.push_back(ar);
110 record.branchArrayPtr = ar;
111 brName2ptr.insert(make_pair(detName, ar));
113 record.branchArrayPtr = it->second;
118 map<PlMapKey, BmnTrigParameters*>::iterator itPar = fPlacementMap.find(
PlMapKey(record.serial, record.slot));
119 if (itPar == fPlacementMap.end()) {
120 printf(
"CrateSeral %08X slot %u not found in the placement map!\n", record.serial, record.slot);
123 par->
name = record.name;
128 par->
ChannelMap[record.channel] = record.module;
130 par->
NegativeMap[record.channel] = record.isNegative;
132 for (
auto& el : fPlacementMap) {
140 TString PlMapFileName = TString(getenv(
"VMCWORKDIR")) + TString(
"/input/") + mappingFile;
141 LOGF(info,
"Reading Triggers placement mapping file %s...", PlMapFileName.Data());
143 pmFile.open(PlMapFileName.Data());
144 if (!pmFile.is_open()) {
145 cout <<
"Error opening map-file (" << PlMapFileName <<
")!" << endl;
150 UInt_t crateSerial, boardSerial;
154 pmFile >> dummy >> dummy >> dummy >> dummy >> dummy;
156 while (!pmFile.eof()) {
157 pmFile >> name >> hex >> crateSerial >> dec >> slot >> hex >> boardSerial >> dec >> isT0;
175 fMapFileName = TString(getenv(
"VMCWORKDIR")) + TString(
"/input/") + mappingFile;
176 LOGF(info,
"Reading Triggers strip mapping file %s...", fMapFileName.Data());
178 vector<string> trc_trigger_bits;
179 vector<string> scalers;
180 vector<string> configuration;
181 vector<string> t0_raw;
184 po::options_description desc(
"Options");
185 desc.add_options()(
"INPUTS.serial", po::value<string>(),
"TRC serial")(
186 "INPUTS.channels", po::value<vector<string>>(&trc_trigger_bits)->multitoken(),
"TRC trigger input signal bits")(
187 "SCALERS.channels", po::value<vector<string>>(&scalers)->multitoken(),
188 "Scaler channels")(
"TDC-CONFIGURATION.channels", po::value<vector<string>>(&configuration)->multitoken(),
189 "TDC configuration")(
"T0-RAW.virt_serial", po::value<string>(),
"T0 virtual serial")(
190 "T0-RAW.channels", po::value<vector<string>>(&t0_raw)->multitoken(),
"TDC configuration");
193 po::variables_map vm;
194 ifstream config_file(fMapFileName.Data(), ifstream::in);
195 if (!config_file.is_open()) {
196 printf(
"%s - file open error!\n", mappingFile.Data());
199 po::store(po::parse_config_file(config_file, desc), vm);
203 stringstream hs(vm[
"INPUTS.serial"].as<string>());
204 hs >> std::hex >> fTrcSerial;
205 LOGF(info,
"TRC serial %8X", fTrcSerial);
210 for (
auto it : trc_trigger_bits) {
211 istringstream ss(it);
212 ss >> tr_name >> bit;
213 fTrcBitMap[tr_name] = bit;
219 uint16_t scalers_ar_size(0);
220 for (
auto it : scalers) {
221 istringstream ss(it);
222 ss >> tr_name >> hex >> ser >> dec >> ch;
223 std::pair p_ser_ch = make_pair(ser, ch);
224 scalers2name_map.insert(make_pair(p_ser_ch, tr_name));
225 scalers2index_map.insert(make_pair(p_ser_ch, scalers_ar_size));
226 scalers_name2index_map.insert(make_pair(tr_name, scalers_ar_size));
227 scalers_index2name_map.push_back(tr_name);
229 name2scaler_map[tr_name] = p_ser_ch;
230 auto it_trc = fTrcBitMap.find(tr_name);
231 if (it_trc != fTrcBitMap.end())
232 trcIdx2scalerIdx.insert(make_pair(it_trc->second, scalers_ar_size));
234 LOGF(debug,
"msc[%15s] = (0x%08X : %2u)", tr_name.data(), name2scaler_map[tr_name].first,
235 name2scaler_map[tr_name].second);
241 for (
auto it : configuration) {
242 istringstream ss(it);
243 ss >> name >> mod >> hex >> ser >> dec >> slot >> ch >> neg;
254 fMap.push_back(record);
257 stringstream vs(vm[
"T0-RAW.virt_serial"].as<string>());
258 UInt_t t0_virt_serial;
259 vs >> std::hex >> t0_virt_serial;
260 LOGF(info,
"t0_virt_serial %0X", t0_virt_serial);
261 for (
auto it : t0_raw) {
262 istringstream ss(it);
263 ss >> tr_name >> mod >> ch;
264 fT0Map[make_pair(tr_name, mod)] = ch;
265 LOGF(debug,
"trig[%10s] mod %2u ch %3u", tr_name.data(), mod, ch);
328void BmnTrigRaw2Digit::ProcessWave(Short_t* iValue,
const UShort_t& nVals, Bool_t& isNeg)
363 std::vector<Double_t> times;
364 std::vector<Double_t> diff;
365 for (Int_t iAdc = 0; iAdc < adc->GetEntriesFast(); iAdc++) {
371 if (plIter == fPlacementMap.end())
381 for (Int_t iTdc = 0; iTdc < tdc->GetEntriesFast(); ++iTdc) {
389 times.push_back(time);
402 for (
auto& el : fPlacementMap)
404 el.second->t[
i] = -1.0;
405 for (Int_t iTdc = 0; iTdc < tdc->GetEntriesFast(); ++iTdc) {
408 if (plIter == fPlacementMap.end())
419 par->
t[rChannel] = time;
421 if (time < par->t[rChannel])
423 if (par->
t[rChannel] < 0)
429 Double_t tL = par->
t[rChannel];
431 par->
t[rChannel] = -1.0;
432 new ((*trigAr)[trigAr->GetEntriesFast()])
BmnTrigDigit(iMod, tL, tT - tL);