17#ifdef HAS_RNTUPLE_SUPPORT
19#include <ROOT/RNTupleModel.hxx>
20#include <ROOT/RNTupleWriter.hxx>
25#ifdef __USE_DATABASE__
26#include "QwParitySchema.h"
33#ifdef __USE_DATABASE__
54 elementlist.push_back(element);
56 detector_id.
fIndex = elementlist.size()-1;
69 elementlist.push_back(element);
71 detector_id.
fIndex = elementlist.size()-1;
84 elementlist.push_back(element);
91 elementlist.push_back(element);
93 detector_id.
fIndex = elementlist.size()-1;
103 elementlist.push_back(element);
104 detector_id.
fIndex = elementlist.size()-1;
105 return detector_id.
fIndex;
120 Bool_t ldebug=kFALSE;
122 TString varname, varvalue;
124 TString combotype, comboname, dev_name;
127 Bool_t combolistdecoded;
130 std::vector<TString> fDeviceName;
131 std::vector<TString> fProperty;
132 std::vector<TString> fType;
133 std::vector<Double_t> fQWeight;
134 std::vector<Double_t> fXWeight;
135 std::vector<Double_t> fYWeight;
136 Double_t sumQweights = 0.0;
138 std::vector<QwBeamDetectorID> clock_needed_list;
147 Int_t buffer_offset = 0;
156 if (mapstr.
ReturnValue(
"vqwk_buffer_offset",buffer_offset)) {
157 QwDebug <<
"QwBeamLine::LoadChannelMap: "
160 <<
"; vqwk_buffer_offset: " << buffer_offset <<
QwLog::endl;
166 if (varname==
"begin"){
170 combotype = varvalue;
171 combolistdecoded = kFALSE;
181 for(
size_t i=0;i<fDeviceName.size();i++)
182 sumQweights+=fabs(fQWeight[i]);
183 combolistdecoded = kTRUE;
188 if (mapstr.
PopValue(
"name",varvalue)) {
189 comboname = varvalue;
202 QwError <<
"QwBeamLine::LoadChannelMap: Unknown device: "
203 << dev_name <<
" used in "<< comboname
204 <<
". This combination will not be decoded!"
207 combolistdecoded = kTRUE;
211 fDeviceName.push_back(dev_name);
219 if(combotype ==
"combinedbpm"){
225 if(combotype ==
"energycalculator"){
226 fType.push_back(dettype);
236 localComboID.
fdetectorname=comboname(0,comboname.Sizeof()-1);
240 QwError <<
"QwBeamLine::LoadChannelMap: Unknown detector type: "
241 << combotype <<
", the detector "<<comboname<<
" will not be decoded "
247 if((localComboID.
fIndex==-1) && deviceok) {
257 for(
size_t i=0;i<fDeviceName.size();i++){
260 fQWeight[i],sumQweights );
274 for(
size_t i=0;i<fDeviceName.size();i++){
277 fStripline.at(index).get(), fQWeight[i],fXWeight[i],
278 fYWeight[i],sumQweights );
294 for(
size_t i=0;i<fDeviceName.size();i++){
324 if (! lineok)
continue;
326 localBeamDetectorID.
fIndex=
330 if(localBeamDetectorID.
fIndex==-1){
340 local_element = &(
fCavity.at(index));
348 local_element =
fBCM.at(index).get();
352 local_element =
fClock.at(index).get();
356 local_element = &(
fQPD.at(index));
365 QwDebug <<
"Try to push device "
367 <<
" (address=" << std::hex << local_element << std::dec
368 <<
") onto the clock_needed_list"
370 clock_needed_list.push_back(localBeamDetectorID);
382 std::unique_ptr<QwParameterFile> section;
383 std::vector<TString> publishinfo;
385 if (varvalue ==
"PUBLISH") {
387 while (section->ReadNextLine()) {
388 section->TrimComment();
389 section->TrimWhitespace();
390 for (
int ii = 0; ii < 4; ii++) {
391 varvalue = section->GetTypedNextToken<TString>();
392 if (varvalue.Length()) {
393 publishinfo.push_back(varvalue);
396 if (publishinfo.size() == 4)
411 std::cout<<
"QwBeamLine::Done with Load map channel \n";
419 std::string clockname;
420 for (
size_t i=0; i<clock_needed_list.size();i++ ) {
421 local_element =
GetElement(clock_needed_list[i]);
423 if (clockname.empty()){
424 QwWarning <<
"QwBeamLine::LoadChannelMap "
426 <<
" needs a reference clock, but the reference clock name is empty"
431 QwMessage <<
"QwBeamLine::LoadChannelMap "
432 <<
"Setting " <<
fClock.at(index).get()->GetElementName()
433 <<
" as the reference clock for channel "
438 QwWarning <<
"QwBeamLine::LoadChannelMap "
459 device_type.ToLower();
461 device_name.ToLower();
464 if (det_index == -1) {
469 TString channel_name;
478 channel_name.ToLower();
492 fBCM[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut),LLX,ULX,stabilitycut,burplevel);
503 QwMessage<<
"QwBeamLine:QwBPMStripline "<<channel_name<<
" "<<varvalue<<
" "<<stabilitycut<<
QwLog::endl;
505 fStripline[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
509 fQPD[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
513 fLinearArray[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
518 fCavity[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
524 fBCMCombo[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
529 fBPMCombo[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
536 fStripline[i].get()->SetEventCutMode(eventcut_flag);
538 for (
size_t i=0;i<
fQPD.size();i++)
539 fQPD[i].SetEventCutMode(eventcut_flag);
544 for (
size_t i=0;i<
fCavity.size();i++)
545 fCavity[i].SetEventCutMode(eventcut_flag);
547 for (
size_t i=0;i<
fBCM.size();i++)
548 fBCM[i].get()->SetEventCutMode(eventcut_flag);
550 for (
size_t i=0;i<
fClock.size();i++)
551 fClock[i].get()->SetEventCutMode(eventcut_flag);
557 fBCMCombo[i].get()->SetEventCutMode(eventcut_flag);
560 fBPMCombo[i].get()->SetEventCutMode(eventcut_flag);
574 Bool_t ldebug=kFALSE;
575 TString varname, varvalue;
578 TString devname,devtype;
580 Double_t devOffsetX = 0,devOffsetY = 0, devOffsetZ = 0;
581 Double_t devSENfactor = 0, devAlphaX = 0, devAlphaY = 0;
582 TString rotation_stat;
585 if(ldebug)std::cout<<
"QwBeamLine::LoadGeometryParameters("<< mapfile<<
")\n";
591 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
597 Bool_t notfound=kTRUE;
601 devtype.Remove(TString::kBoth,
' ');
604 devname.Remove(TString::kBoth,
' ');
607 QwError <<
"Error! Unknown detector type '"<<devtype
616 QwWarning <<
"Unrecognized detector name '" << devname
617 <<
"' in Geometry file. This may not be a problem, "
618 <<
"if we're using a reduced channel map."
638 std::cout<<
"####################\n";
639 std::cout<<
"! device type, device_name, Xoffset, Yoffset, Zoffset, BSEN scaling factor, AlpaX, AlpaY\n"<<std::endl;
645 <<devSENfactor <<
" / "
656 QwWarning <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm in qweak_beamline_geometry.map: "
663 TString localname =
fStripline.at(index).get()->GetElementName();
665 if(ldebug) std::cout<<
"element name =="<<localname
666 <<
"== to be compared to =="<<devname<<
"== \n";
668 if(localname==devname){
669 if(ldebug) std::cout<<
" I found the bpm !\n";
680 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown combined bpm in qweak_beamline_geometry.map: "
681 <<devname<<
" Check the combined bpm names!\n "
687 TString localname =
fBPMCombo.at(index).get()->GetElementName();
690 std::cout<<
"element name =="<<localname<<
"== to be compared to =="<<devname<<
"== \n";
692 if(localname==devname){
693 if(ldebug) std::cout<<
" I found the combinedbpm !\n";
694 fBPMCombo.at(index).get()->GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
701 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm : "
702 <<devname<<
" will not be assigned with geometry parameters. \n"
707 TString localname =
fCavity.at(index).GetElementName();
709 if(ldebug) std::cout<<
"element name =="<<localname
710 <<
"== to be compared to =="<<devname<<
"== \n";
712 if(localname==devname){
713 if(ldebug) std::cout<<
" I found the cavity bpm !\n";
714 fCavity.at(index).GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
721 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown QPD : "
722 <<devname<<
" will not be assigned with calibration factors. \n"
727 TString localname =
fQPD.at(index).GetElementName();
729 if(ldebug) std::cout<<
"element name =="<<localname
730 <<
"== to be compared to =="<<devname<<
"== \n";
732 if(localname==devname){
733 if(ldebug) std::cout<<
"I found the QPD !\n";
734 fQPD.at(index).GetCalibrationFactors(devAlphaX, devAlphaY);
738 else QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown device type : "<< devtype <<
739 ". Are you sure we have this in the beamline? I am skipping this."<<
QwLog::endl;
744 if(ldebug) std::cout <<
"line read in the geometry file = " << lineread<<
" \n";
756 Bool_t ldebug=kFALSE;
757 TString varname, varvalue;
760 TString devname, devtype;
763 if(ldebug) std::cout <<
"QwBeamLine::LoadMockDataParameters(" << mapfile <<
") \n" << std::endl;
771 if(ldebug) std::cout <<
"Line read so far = " << lineread <<
"\n" << std::endl;
779 devtype.Remove(TString::kBoth,
' ');
782 devname.Remove(TString::kBoth,
' ');
786 QwError <<
"Error! Unknown detector type '" << devtype <<
"' in MockDataParameters file!" <<
QwLog::endl;
792 QwWarning <<
"Unrecognized detector name '" << devname <<
"' in MockDataParameters file." <<
QwLog::endl;
806 Bool_t ldebug = kFALSE;
809 TString angle,xgain,ygain;
810 Double_t rotation_angle = 0;
814 token.Remove(TString::kBoth,
'\0');
816 if(token.Contains(
"unrotated")){
817 if(ldebug) std::cout<<
" unrotated "<<std::endl;
820 else if(token.Contains(
"rotation")){
824 if(token.Contains(
"=")){
825 angle = token.Remove(0,9);
826 rotation_angle = atof(angle);
827 if(ldebug) std::cout<<
"Rotation angle = "<<rotation_angle<<std::endl;
833 if(token.Contains(
"xgain")){
834 xgain = token.Remove(0,6);
835 if(ldebug) std::cout<<
" xgain ="<<xgain<<std::endl;
839 if(token.Contains(
"ygain")){
840 ygain = token.Remove(0,6);
841 if(ldebug) std::cout<<
" ygain ="<<ygain<<std::endl;
856 Bool_t ldebug=kFALSE;
860 if(ldebug)std::cout<<
"QwBeamLine::LoadInputParameters("<< pedestalfile<<
")\n";
868 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
876 varname.Remove(TString::kBoth,
' ');
883 Bool_t notfound=kTRUE;
890 TString localname =
fStripline[i].get()->GetSubElementName(j);
892 if(ldebug) std::cout<<
"Stripline element name =="<<localname
893 <<
"== to be compared to =="<<varname<<
"== \n";
894 if(localname==varname)
896 if(ldebug) std::cout<<
" I found it !\n";
897 fStripline[i].get()->SetSubElementPedestal(j,varped);
898 fStripline[i].get()->SetSubElementCalibrationFactor(j,varcal);
905 for(
size_t i=0;i<
fQPD.size();i++)
909 TString localname =
fQPD[i].GetSubElementName(j);
911 if(ldebug) std::cout<<
"QPD element name =="<<localname
912 <<
"== to be compared to =="<<varname<<
"== \n";
913 if(localname==varname)
915 if(ldebug) std::cout<<
" I found it !\n";
916 fQPD[i].SetSubElementPedestal(j,varped);
917 fQPD[i].SetSubElementCalibrationFactor(j,varcal);
928 TString localname =
fLinearArray[i]->GetSubElementName(j);
930 if(ldebug) std::cout<<
"LinearArray element name =="<<localname
931 <<
"== to be compared to =="<<varname<<
"== \n";
932 if(localname==varname)
934 if(ldebug) std::cout<<
" I found it !\n";
936 fLinearArray[i]->SetSubElementCalibrationFactor(j,varcal);
943 for(
size_t i=0;i<
fCavity.size();i++)
947 TString localname =
fCavity[i].GetSubElementName(j);
949 if(ldebug) std::cout<<
"Cavity element name =="<<localname
950 <<
"== to be compared to =="<<varname<<
"== \n";
951 if(localname==varname)
953 if(ldebug) std::cout<<
" I found it !\n";
954 fCavity[i].SetSubElementPedestal(j,varped);
955 fCavity[i].SetSubElementCalibrationFactor(j,varcal);
962 for(
size_t i=0;i<
fBCM.size();i++) {
963 if(
fBCM[i].get()->GetElementName()==varname)
965 fBCM[i].get()->SetPedestal(varped);
966 fBCM[i].get()->SetCalibrationFactor(varcal);
972 for(
size_t i=0;i<
fClock.size();i++) {
973 if(
fClock[i].get()->GetElementName()==varname)
975 fClock[i].get()->SetPedestal(varped);
976 fClock[i].get()->SetCalibrationFactor(varcal);
985 std::cout<<varname<<
" I found it ! "<<varcal<<
" ped. "<<varped<<
"\n";
996 if(ldebug) std::cout<<
" line read in the pedestal + cal file ="<<lineread<<
" \n";
1009 for (
size_t i = 0; i <
fStripline.size(); i++)
1011 fStripline[i].get()->RandomizeEventData(helicity, time);
1015 for (
size_t i = 0; i <
fCavity.size(); i++)
1019 for (
size_t i = 0; i <
fBCM.size(); i++)
1021 fBCM[i].get()->RandomizeEventData(helicity, time);
1031 fBCMCombo[i].get()->RandomizeEventData(helicity, time);
1035 fBCMCombo[i].get()->GetProjectedCharge(bcm);
1040 for (
size_t i=0; i<
fBPMCombo.size(); i++){
1041 fBPMCombo[i].get()->RandomizeEventData(helicity, time);
1046 fBPMCombo[i].get()->GetProjectedPosition(bpm);
1062 for (
size_t j=0; j<
fECalculator[i].GetNumberOfElements(); j++)
1082 std::vector<UInt_t> elements;
1104 std::vector<UInt_t> subbankheader;
1105 std::vector<UInt_t> rocheader;
1106 if (elements.size() > 0) {
1109 subbankheader.clear();
1110 subbankheader.push_back(elements.size() + 1);
1111 subbankheader.push_back((
fCurrentBank_ID << 16) | (0x01 << 8) | (1 & 0xff));
1116 rocheader.push_back(subbankheader.size() + elements.size() + 1);
1117 rocheader.push_back((
fCurrentROC_ID << 16) | (0x10 << 8) | (1 & 0xff));
1121 buffer.insert(buffer.end(), rocheader.begin(), rocheader.end());
1122 buffer.insert(buffer.end(), subbankheader.begin(), subbankheader.end());
1123 buffer.insert(buffer.end(), elements.begin(), elements.end());
1174 Bool_t lkDEBUG=kFALSE;
1177 if (index>=0 && num_words>0){
1180 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1181 <<
"Begin processing ROC" << roc_id
1182 <<
" and subbank "<<bank_id
1183 <<
" number of words="<<num_words<<std::endl;
1184 if (buffer[0]==0xf0f0f0f0 && num_words%2==1){
1187 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1188 <<
"Skipped padding word 0xf0f0f0f0 at beginning of buffer."
1201 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1202 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1214 std::cout<<
"found qpd data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1215 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1228 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1241 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1242 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1254 std::cout<<
"found bcm data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1255 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1266 std::cout<<
"found clock data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1267 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1278 std::cout<<
"found halo monitor data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1279 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1299 Bool_t status=kTRUE;
1301 for(
size_t i=0;i<
fBCM.size();i++){
1302 status &=
fBCM[i].get()->ApplySingleEventCuts();
1303 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->BCM[ "<<i
1304 <<
" , "<<
fBCM[i].get()->GetElementName()<<
" ] ******\n";
1307 for(
size_t i=0;i<
fClock.size();i++){
1308 status &=
fClock[i].get()->ApplySingleEventCuts();
1309 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->Clock[ "<<i
1310 <<
" , "<<
fClock[i].get()->GetElementName()<<
" ] ******\n";
1315 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->HaloMonitor[ "<<i
1316 <<
" , "<<
fHaloMonitor[i].GetElementName()<<
" ] ******\n";
1320 status &=
fStripline[i].get()->ApplySingleEventCuts();
1321 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMStripline[ "<<i
1322 <<
" , "<<
fStripline[i].get()->GetElementName()<<
" ] *****\n";
1326 for(
size_t i=0;i<
fQPD.size();i++){
1327 status &=
fQPD[i].ApplySingleEventCuts();
1328 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->QPD[ "<<i
1329 <<
" , "<<
fQPD[i].GetElementName()<<
" ] *****\n";
1332 status &=
fLinearArray[i].get()->ApplySingleEventCuts();
1333 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->LinearArray[ "<<i
1334 <<
" , "<<
fLinearArray[i]->GetElementName()<<
" ] *****\n";
1337 for(
size_t i=0;i<
fCavity.size();i++){
1338 status &=
fCavity[i].ApplySingleEventCuts();
1339 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMCavity[ "<<i
1340 <<
" , "<<
fCavity[i].GetElementName()<<
" ] *****\n";
1344 status &=
fBCMCombo[i].get()->ApplySingleEventCuts();
1345 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBCM[ "<<i
1346 <<
" , "<<
fBCMCombo[i].get()->GetElementName()<<
" ] ******\n";
1350 status &=
fBPMCombo[i].get()->ApplySingleEventCuts();
1351 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBPM[ "<<i
1352 <<
" , "<<
fBPMCombo[i].get()->GetElementName()<<
" ] ******\n";
1357 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->EnergyCalculator[ "<<i
1358 <<
" , "<<
fECalculator[i].GetElementName()<<
" ] ******\n";
1374 Bool_t burpstatus = kFALSE;
1378 for(
size_t i=0;i<input->
fClock.size();i++){
1380 burpstatus |= (this->
fClock[i].get())->CheckForBurpFail(input->
fClock[i].get());
1382 for(
size_t i=0;i<input->
fStripline.size();i++){
1386 for(
size_t i=0;i<input->
fQPD.size();i++){
1394 for(
size_t i=0;i<input->
fCavity.size();i++){
1398 for(
size_t i=0;i<input->
fBCM.size();i++){
1400 burpstatus |= (this->
fBCM[i].get())->CheckForBurpFail(input->
fBCM[i].get());
1402 for(
size_t i=0;i<input->
fBCMCombo.size();i++){
1404 burpstatus |= (this->
fBCMCombo[i].get())->CheckForBurpFail(input->
fBCMCombo[i].get());
1406 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
1408 burpstatus |= (this->
fBPMCombo[i].get())->CheckForBurpFail(input->
fBPMCombo[i].get());
1431 for(
size_t i=0;i<
fClock.size();i++){
1432 fClock[i].get()->PrintErrorCounters();
1435 for(
size_t i=0;i<
fBCM.size();i++){
1436 fBCM[i].get()->PrintErrorCounters();
1447 for(
size_t i=0;i<
fQPD.size();i++){
1448 fQPD[i].PrintErrorCounters();
1455 for(
size_t i=0;i<
fCavity.size();i++){
1456 fCavity[i].PrintErrorCounters();
1460 fBCMCombo[i].get()->PrintErrorCounters();
1464 fBPMCombo[i].get()->PrintErrorCounters();
1477 for(
size_t i=0;i<
fClock.size();i++){
1478 fClock[i].get()->IncrementErrorCounters();
1480 for(
size_t i=0;i<
fBCM.size();i++){
1481 fBCM[i].get()->IncrementErrorCounters();
1487 fStripline[i].get()->IncrementErrorCounters();
1489 for(
size_t i=0;i<
fQPD.size();i++){
1490 fQPD[i].IncrementErrorCounters();
1495 for(
size_t i=0;i<
fCavity.size();i++){
1496 fCavity[i].IncrementErrorCounters();
1499 fBCMCombo[i].get()->IncrementErrorCounters();
1502 fBPMCombo[i].get()->IncrementErrorCounters();
1513 UInt_t ErrorFlagtmp;
1515 for(
size_t i=0;i<
fBCM.size();i++){
1516 ErrorFlagtmp =
fBCM[i].get()->GetEventcutErrorFlag();
1517 ErrorFlag |=ErrorFlagtmp;
1520 ErrorFlag |=
fStripline[i].get()->GetEventcutErrorFlag();
1522 for(
size_t i=0;i<
fQPD.size();i++){
1523 ErrorFlag |=
fQPD[i].GetEventcutErrorFlag();
1526 ErrorFlag |=
fLinearArray[i].get()->GetEventcutErrorFlag();
1528 for(
size_t i=0;i<
fCavity.size();i++){
1529 ErrorFlag |=
fCavity[i].GetEventcutErrorFlag();
1532 ErrorFlag |=
fBCMCombo[i].get()->GetEventcutErrorFlag();
1535 ErrorFlag |=
fBPMCombo[i].get()->GetEventcutErrorFlag();
1549 UInt_t ErrorFlagtmp;
1551 for(
size_t i=0;i<
fBCM.size();i++){
1552 ErrorFlagtmp =
fBCM[i].get()->UpdateErrorFlag();
1553 ErrorFlag |=ErrorFlagtmp;
1556 ErrorFlag |=
fStripline[i].get()->UpdateErrorFlag();
1558 for(
size_t i=0;i<
fQPD.size();i++){
1559 ErrorFlag |=
fQPD[i].UpdateErrorFlag();
1564 for(
size_t i=0;i<
fCavity.size();i++){
1565 ErrorFlag |=
fCavity[i].UpdateErrorFlag();
1568 ErrorFlag |=
fBCMCombo[i].get()->UpdateErrorFlag();
1571 ErrorFlag |=
fBPMCombo[i].get()->UpdateErrorFlag();
1594 for(
size_t i=0;i<input->
fStripline.size();i++)
1596 for(
size_t i=0;i<input->
fQPD.size();i++)
1597 (this->
fQPD[i]).UpdateErrorFlag(&(input->
fQPD[i]));
1600 for(
size_t i=0;i<input->
fCavity.size();i++)
1602 for(
size_t i=0;i<input->
fBCM.size();i++){
1603 (this->
fBCM[i].get())->UpdateErrorFlag(input->
fBCM[i].get());
1605 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
1607 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
1626 for(
size_t i=0;i<
fClock.size();i++)
1627 fClock[i].get()->ProcessEvent();
1633 for(
size_t i=0;i<
fCavity.size();i++)
1636 for(
size_t i=0;i<
fBCM.size();i++){
1637 fBCM[i].get()->ProcessEvent();
1640 for(
size_t i=0;i<
fQPD.size();i++)
1680 Bool_t status = kTRUE;
1689 device_type.ToLower();
1690 device_prop.ToLower();
1695 if (device_type ==
"combobpm")
1697 else if (device_type ==
"combobcm")
1699 else if (device_type ==
"comboenergy")
1701 else if (device_type ==
"scaler")
1710 tmp_channel =
GetChannel(type_id,index,device_prop);
1714 if (tmp_channel == NULL) {
1715 QwError <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" not found" <<
QwLog::endl;
1718 QwDebug <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" found" <<
QwLog::endl;
1731 Bool_t status = kFALSE;
1734 std::vector<TString> publishinfo(4,TString(
""));
1735 publishinfo.at(0) = device_name;
1740 TString name = device_name;
1741 TString device_prop =
"value";
1742 if (device_name.EndsWith(
"WS")){
1743 name = device_name(0,device_name.Length()-2);
1745 }
else if (device_name.EndsWith(
"Q")){
1746 name = device_name(0,device_name.Length()-1);
1748 }
else if (device_name.EndsWith(
"XSlope")){
1749 name = device_name(0,device_name.Length()-6);
1751 }
else if (device_name.EndsWith(
"YSlope")){
1752 name = device_name(0,device_name.Length()-6);
1754 }
else if (device_name.EndsWith(
"X")){
1755 name = device_name(0,device_name.Length()-1);
1757 }
else if (device_name.EndsWith(
"Y")){
1758 name = device_name(0,device_name.Length()-1);
1770 publishinfo.at(3) = device_prop;
1776 tmp_channel =
GetChannel(type_id,index,publishinfo.at(3));
1790 for(
size_t i=0;i<
fClock.size();i++)
1791 fClock[i].get()->ClearEventData();
1794 for(
size_t i=0;i<
fCavity.size();i++)
1796 for(
size_t i=0;i<
fBCM.size();i++)
1798 for(
size_t i=0;i<
fQPD.size();i++)
1818 Bool_t ldebug=kFALSE;
1821 std::cout<<
"QwBeamLine::GetDetectorIndex\n";
1822 std::cout<<
"type_id=="<<type_id<<
" name="<<name<<
"\n";
1861 tmp_ptr = &(
fQPD.at(index));
1867 tmp_ptr =
fBCM.at(index).get();
1882 tmp_ptr = &(
fCavity.at(index));
1885 tmp_ptr =
fClock.at(index).get();
1888 TString loc=
"QwBeamLine::GetElement called by "
1889 +this->
GetName()+
" with invalid arguments: "
1892 throw std::invalid_argument(loc.Data());
1912 if (device_prop ==
"x")
1914 else if (device_prop ==
"y")
1916 else if (device_prop ==
"ef")
1920 if (device_prop ==
"x")
1922 else if (device_prop ==
"y")
1924 else if (device_prop ==
"ef")
1925 tmp_channel =
fBPMCombo.at(index)->GetEffectiveCharge();
1926 else if (device_prop ==
"xp")
1927 tmp_channel =
fBPMCombo.at(index)->GetAngleX();
1928 else if (device_prop ==
"yp")
1929 tmp_channel =
fBPMCombo.at(index)->GetAngleY();
1934 tmp_channel =
dynamic_cast<const VQwBCM*
>(
GetElement(TypeID,index))->GetCharge();
1940 tmp_channel =
fClock.at(index)->GetTime();
1942 TString loc=
"QwBeamLine::GetChannel called by "
1943 +this->
GetName()+
" with invalid arguments: "
1946 throw std::invalid_argument(loc.Data());
1956 for (std::vector<VQwBPM_ptr >::iterator stripline =
fStripline.begin(); stripline !=
fStripline.end(); ++stripline) {
1957 if ((*stripline).get()->GetElementName() == name) {
1958 return (*stripline).get();
1971 for (std::vector<QwBPMCavity>::iterator cavity =
fCavity.begin(); cavity !=
fCavity.end(); ++cavity) {
1972 if (cavity->GetElementName() == name) {
1986 if (!
fBCM.empty()) {
1987 for (std::vector<VQwBCM_ptr >::iterator bcm =
fBCM.begin(); bcm !=
fBCM.end(); ++bcm) {
1988 if ((*bcm).get()->GetElementName() == name) {
1989 return (*bcm).get();
2006 for (std::vector<VQwClock_ptr >::iterator clock =
fClock.begin(); clock !=
fClock.end(); ++clock) {
2007 if ((*clock).get()->GetElementName() == name) {
2008 return (*clock).get();
2025 for (std::vector<VQwBCM_ptr>::iterator cbcm =
fBCMCombo.begin(); cbcm !=
fBCMCombo.end(); ++cbcm) {
2026 if ((*cbcm).get()->GetElementName() == name) {
2027 return (*cbcm).get();
2043 for (std::vector<VQwBPM_ptr>::iterator cbpm =
fBPMCombo.begin(); cbpm !=
fBPMCombo.end(); ++cbpm) {
2044 if ((*cbpm).get()->GetElementName() == name) {
2045 return (*cbpm).get();
2060 if (ecal->GetElementName() == name) {
2081 if (halo->GetElementName() == name) {
2140 for(
size_t i=0;i<input->
fClock.size();i++)
2142 for(
size_t i=0;i<input->
fStripline.size();i++)
2144 for(
size_t i=0;i<input->
fQPD.size();i++)
2148 for(
size_t i=0;i<input->
fCavity.size();i++)
2150 for(
size_t i=0;i<input->
fBCM.size();i++)
2151 *(this->
fBCM[i].get())=*(input->
fBCM[i].get());
2154 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2156 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2165 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2184 for(
size_t i=0;i<input->
fClock.size();i++)
2186 for(
size_t i=0;i<input->
fStripline.size();i++)
2188 for(
size_t i=0;i<input->
fCavity.size();i++)
2190 for(
size_t i=0;i<input->
fQPD.size();i++)
2194 for(
size_t i=0;i<input->
fBCM.size();i++)
2195 *(this->
fBCM[i].get())+=*(input->
fBCM[i].get());
2198 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2200 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2209 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2227 for(
size_t i=0;i<input->
fClock.size();i++)
2229 for(
size_t i=0;i<input->
fStripline.size();i++)
2231 for(
size_t i=0;i<input->
fCavity.size();i++)
2233 for(
size_t i=0;i<input->
fQPD.size();i++)
2237 for(
size_t i=0;i<input->
fBCM.size();i++)
2238 *(this->
fBCM[i].get())-=*(input->
fBCM[i].get());
2241 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2243 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2252 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2270 for(
size_t i=0;i<innumer->
fClock.size();i++)
2271 this->
fClock[i].get()->Ratio(*(innumer->
fClock[i].get()),
2272 *(indenom->
fClock[i].get()));
2273 for(
size_t i=0;i<innumer->
fStripline.size();i++)
2276 for(
size_t i=0;i<innumer->
fCavity.size();i++)
2278 for(
size_t i=0;i<innumer->
fQPD.size();i++)
2283 for(
size_t i=0;i<innumer->
fBCM.size();i++)
2284 this->
fBCM[i].get()->Ratio(*(innumer->
fBCM[i].get()),
2285 *(indenom->
fBCM[i].get()));
2288 for(
size_t i=0;i<innumer->
fBCMCombo.size();i++)
2291 for(
size_t i=0;i<innumer->
fBPMCombo.size();i++)
2308 for(
size_t i=0;i<
fClock.size();i++)
fClock[i].get()->Scale(factor);
2313 for(
size_t i=0;i<
fBCM.size();i++)
fBCM[i].get()->Scale(factor);
2324 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->CalculateRunningAverage();
2329 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->CalculateRunningAverage();
2331 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
fBCMCombo[i].get()->CalculateRunningAverage();
2332 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
fBPMCombo[i].get()->CalculateRunningAverage();
2341 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->PrintValue();
2351 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->PrintValue();
2369 for (
size_t i = 0; i <
fClock.size(); i++)
2370 fClock[i].get()->AccumulateRunningSum(*(value->
fClock[i].get()), count, ErrorMask);
2371 for (
size_t i = 0; i <
fStripline.size(); i++)
2373 for (
size_t i = 0; i <
fCavity.size(); i++)
2375 for (
size_t i = 0; i <
fBCM.size(); i++)
2376 fBCM[i].get()->AccumulateRunningSum(*(value->
fBCM[i].get()), count, ErrorMask);
2377 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2378 fBCMCombo[i].get()->AccumulateRunningSum(*(value->
fBCMCombo[i].get()), count, ErrorMask);
2379 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2380 fBPMCombo[i].get()->AccumulateRunningSum(*(value->
fBPMCombo[i].get()), count, ErrorMask);
2383 for (
size_t i = 0; i <
fQPD.size(); i++)
2397 for (
size_t i = 0; i <
fClock.size(); i++)
2398 fClock[i].get()->DeaccumulateRunningSum(*(value->
fClock[i].get()), ErrorMask);
2399 for (
size_t i = 0; i <
fStripline.size(); i++)
2401 for (
size_t i = 0; i <
fCavity.size(); i++)
2403 for (
size_t i = 0; i <
fBCM.size(); i++)
2404 fBCM[i].get()->DeaccumulateRunningSum(*(value->
fBCM[i].get()), ErrorMask);
2405 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2407 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2409 for (
size_t i = 0; i <
fQPD.size(); i++)
2427 if(
typeid(*value)!=
typeid(*
this))
2441 else if(input->
fBCM.size()!=
fBCM.size())
2464 }
else if(input->
fQPD.size()!=
fQPD.size()){
2478 for(
size_t i=0;i<
fClock.size();i++)
2479 fClock[i].get()->ConstructHistograms(folder,prefix);
2482 fStripline[i].get()->ConstructHistograms(folder,prefix);
2484 for(
size_t i=0;i<
fQPD.size();i++)
2488 fLinearArray[i].get()->ConstructHistograms(folder,prefix);
2490 for(
size_t i=0;i<
fCavity.size();i++)
2493 for(
size_t i=0;i<
fBCM.size();i++)
2494 fBCM[i].get()->ConstructHistograms(folder,prefix);
2500 fBCMCombo[i].get()->ConstructHistograms(folder,prefix);
2503 fBPMCombo[i].get()->ConstructHistograms(folder,prefix);
2513 for(
size_t i=0;i<
fClock.size();i++)
2514 fClock[i].get()->FillHistograms();
2517 for(
size_t i=0;i<
fQPD.size();i++)
2521 for(
size_t i=0;i<
fCavity.size();i++)
2523 for(
size_t i=0;i<
fBCM.size();i++)
2524 fBCM[i].get()->FillHistograms();
2542 for(
size_t i = 0; i <
fClock.size(); i++)
2543 fClock[i].get()->ConstructBranchAndVector(tree, prefix, values);
2544 for(
size_t i = 0; i <
fStripline.size(); i++)
2545 fStripline[i].get()->ConstructBranchAndVector(tree, prefix, values);
2546 for(
size_t i = 0; i <
fQPD.size(); i++)
2549 fLinearArray[i].get()->ConstructBranchAndVector(tree, prefix, values);
2550 for(
size_t i = 0; i <
fCavity.size(); i++)
2552 for(
size_t i = 0; i <
fBCM.size(); i++)
2553 fBCM[i].get()->ConstructBranchAndVector(tree, prefix, values);
2556 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2557 fBCMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2558 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2559 fBPMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2569 for(
size_t i = 0; i <
fClock.size(); i++)
2570 fClock[i].get()->ConstructBranch(tree, prefix);
2571 for(
size_t i = 0; i <
fStripline.size(); i++)
2572 fStripline[i].get()->ConstructBranch(tree, prefix);
2573 for(
size_t i = 0; i <
fQPD.size(); i++)
2577 for(
size_t i = 0; i <
fBCM.size(); i++)
2578 fBCM[i].get()->ConstructBranch(tree, prefix);
2579 for(
size_t i = 0; i <
fCavity.size(); i++)
2580 fStripline[i].get()->ConstructBranch(tree, prefix);
2583 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2584 fBCMCombo[i].get()->ConstructBranch(tree, prefix);
2585 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2586 fBPMCombo[i].get()->ConstructBranch(tree, prefix);
2597 TString tmp,varname,varvalue;
2599 std::unique_ptr<QwParameterFile> nextmodule;
2603 tmp=
"QwBPMStripline";
2607 for(
size_t i = 0; i <
fStripline.size(); i++)
2608 fStripline[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2616 for(
size_t i = 0; i <
fQPD.size(); i++)
2620 tmp=
"QwLinearDiodeArray";
2625 fLinearArray[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2632 for(
size_t i = 0; i <
fCavity.size(); i++)
2641 for(
size_t i = 0; i <
fBCM.size(); i++)
2642 fBCM[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2649 for(
size_t i = 0; i <
fClock.size(); i++)
2650 fClock[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2653 tmp=
"QwHaloMonitor";
2662 tmp=
"QwCombinedBCM";
2666 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2667 fBCMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2671 tmp=
"QwCombinedBPM";
2675 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2676 fBPMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2679 tmp=
"QwEnergyCalculator";
2693 for(
size_t i = 0; i <
fClock.size(); i++)
2694 fClock[i].get()->FillTreeVector(values);
2695 for(
size_t i = 0; i <
fStripline.size(); i++)
2697 for(
size_t i = 0; i <
fQPD.size(); i++)
2701 for(
size_t i = 0; i <
fCavity.size(); i++)
2703 for(
size_t i = 0; i <
fBCM.size(); i++)
2704 fBCM[i].get()->FillTreeVector(values);
2707 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2708 fBCMCombo[i].get()->FillTreeVector(values);
2709 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2710 fBPMCombo[i].get()->FillTreeVector(values);
2716#ifdef HAS_RNTUPLE_SUPPORT
2718void QwBeamLine::ConstructNTupleAndVector(std::unique_ptr<ROOT::RNTupleModel>& model, TString& prefix, std::vector<Double_t>& values, std::vector<std::shared_ptr<Double_t>>& fieldPtrs)
2720 for(
size_t i = 0; i <
fClock.size(); i++)
2721 fClock[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2722 for(
size_t i = 0; i <
fStripline.size(); i++)
2723 fStripline[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2724 for(
size_t i = 0; i <
fQPD.size(); i++)
2725 fQPD[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2727 fLinearArray[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2728 for(
size_t i = 0; i <
fCavity.size(); i++)
2729 fCavity[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2730 for(
size_t i = 0; i <
fBCM.size(); i++)
2731 fBCM[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2733 fHaloMonitor[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2734 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2735 fBCMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2736 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2737 fBPMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2739 fECalculator[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2745void QwBeamLine::FillNTupleVector(std::vector<Double_t>& values)
const
2747 for(
size_t i = 0; i <
fClock.size(); i++)
2748 fClock[i].get()->FillNTupleVector(values);
2749 for(
size_t i = 0; i <
fStripline.size(); i++)
2750 fStripline[i].get()->FillNTupleVector(values);
2751 for(
size_t i = 0; i <
fQPD.size(); i++)
2752 fQPD[i].FillNTupleVector(values);
2755 for(
size_t i = 0; i <
fCavity.size(); i++)
2756 fCavity[i].FillNTupleVector(values);
2757 for(
size_t i = 0; i <
fBCM.size(); i++)
2758 fBCM[i].get()->FillNTupleVector(values);
2761 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2762 fBCMCombo[i].get()->FillNTupleVector(values);
2763 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2764 fBPMCombo[i].get()->FillNTupleVector(values);
2775 std::cout<<
"Name of the subsystem ="<<
fSystemName<<
"\n";
2776 std::cout<<
"there are "<<
fClock.size()<<
" clock \n";
2777 std::cout<<
"there are "<<
fStripline.size()<<
" striplines \n";
2778 std::cout<<
"there are "<<
fQPD.size()<<
" QPDs \n";
2779 std::cout<<
"there are "<<
fLinearArray.size()<<
" LinearArrays \n";
2780 std::cout<<
"there are "<<
fCavity.size()<<
" cavities \n";
2781 std::cout<<
"there are "<<
fBCM.size()<<
" bcm \n";
2782 std::cout<<
"there are "<<
fHaloMonitor.size()<<
" halomonitors \n";
2783 std::cout<<
"there are "<<
fBCMCombo.size()<<
" combined bcms \n";
2784 std::cout<<
"there are "<<
fBPMCombo.size()<<
" combined bpms \n";
2785 std::cout<<
"there are "<<
fECalculator.size()<<
" energy calculators \n";
2786 std::cout<<
" Printing Running AVG and other channel info for BCMs"<<std::endl;
2787 for(
size_t i=0;i<
fBCM.size();i++)
2788 fBCM[i].get()->PrintInfo();
2800 std::cout<<
"============================="<<std::endl;
2801 std::cout<<
" Detector ID="<<i<<std::endl;
2815 for(
size_t i=0;i<input->
fClock.size();i++) {
2820 for(
size_t i=0;i<input->
fStripline.size();i++) {
2825 this->
fBCM.reserve(input->
fBCM.size());
2826 for(
size_t i=0;i<input->
fBCM.size();i++) {
2832 for(
size_t i=0;i<input->
fBCMCombo.size();i++) {
2839 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
2853#ifdef __USE_DATABASE__
2857 Bool_t local_print_flag =
false;
2859 if(local_print_flag) {
2860 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2862 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2865 std::vector<QwDBInterface> interface;
2866 std::vector<QwParitySchema::beam_row> entrylist;
2868 UInt_t analysis_id = db->GetAnalysisID();
2870 TString measurement_type_bcm;
2871 TString measurement_type_bpm;
2872 TString measurement_type_halo;
2874 measurement_type_bcm =
2876 measurement_type_bpm =
2878 measurement_type_halo =
2888 for(i=0; i<
fBCM.size(); i++) {
2890 interface =
fBCM[i].get()->GetDBEntry();
2891 for (j=0; j<interface.size(); j++){
2892 interface.at(j).SetAnalysisID( analysis_id );
2893 interface.at(j).SetMonitorID( db );
2894 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2895 interface.at(j).PrintStatus( local_print_flag );
2896 interface.at(j).AddThisEntryToList( entrylist );
2905 interface =
fStripline[i].get()->GetDBEntry();
2906 for (j=0; j<interface.size()-5; j++){
2907 interface.at(j).SetAnalysisID( analysis_id ) ;
2908 interface.at(j).SetMonitorID( db );
2909 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2910 interface.at(j).PrintStatus( local_print_flag);
2911 interface.at(j).AddThisEntryToList( entrylist );
2914 for (j=interface.size()-5; j<interface.size(); j++){
2915 interface.at(j).SetAnalysisID( analysis_id ) ;
2916 interface.at(j).SetMonitorID( db );
2917 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2918 interface.at(j).PrintStatus( local_print_flag);
2919 interface.at(j).AddThisEntryToList( entrylist );
2929 interface =
fBPMCombo[i].get()->GetDBEntry();
2930 for (j=0; j<interface.size()-5; j++){
2931 interface.at(j).SetAnalysisID( analysis_id ) ;
2932 interface.at(j).SetMonitorID( db );
2933 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2934 interface.at(j).PrintStatus( local_print_flag);
2935 interface.at(j).AddThisEntryToList( entrylist );
2938 for (j=interface.size()-5; j<interface.size(); j++){
2939 interface.at(j).SetAnalysisID( analysis_id ) ;
2940 interface.at(j).SetMonitorID( db );
2941 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2942 interface.at(j).PrintStatus( local_print_flag);
2943 interface.at(j).AddThisEntryToList( entrylist );
2952 interface =
fBCMCombo[i].get()->GetDBEntry();
2953 for (j=0; j<interface.size(); j++){
2954 interface.at(j).SetAnalysisID( analysis_id );
2955 interface.at(j).SetMonitorID( db );
2956 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2957 interface.at(j).PrintStatus( local_print_flag );
2958 interface.at(j).AddThisEntryToList( entrylist );
2968 for (j=0; j<interface.size(); j++){
2969 interface.at(j).SetAnalysisID( analysis_id );
2970 interface.at(j).SetMonitorID( db );
2971 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2972 interface.at(j).PrintStatus( local_print_flag );
2973 interface.at(j).AddThisEntryToList( entrylist );
2980 for(i=0; i<
fQPD.size(); i++) {
2983 interface =
fQPD[i].GetDBEntry();
2984 for (j=0; j<interface.size()-5; j++){
2985 interface.at(j).SetAnalysisID( analysis_id ) ;
2986 interface.at(j).SetMonitorID( db );
2987 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2988 interface.at(j).PrintStatus( local_print_flag);
2989 interface.at(j).AddThisEntryToList( entrylist );
2992 for (j=interface.size()-5; j<interface.size(); j++){
2993 interface.at(j).SetAnalysisID( analysis_id ) ;
2994 interface.at(j).SetMonitorID( db );
2995 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2996 interface.at(j).PrintStatus( local_print_flag);
2997 interface.at(j).AddThisEntryToList( entrylist );
3007 for (j=0; j<interface.size()-5; j++){
3008 interface.at(j).SetAnalysisID( analysis_id ) ;
3009 interface.at(j).SetMonitorID( db );
3010 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
3011 interface.at(j).PrintStatus( local_print_flag);
3012 interface.at(j).AddThisEntryToList( entrylist );
3014 for (j=interface.size()-5; j<interface.size(); j++){
3015 interface.at(j).SetAnalysisID( analysis_id ) ;
3016 interface.at(j).SetMonitorID( db );
3017 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3018 interface.at(j).PrintStatus( local_print_flag);
3019 interface.at(j).AddThisEntryToList( entrylist );
3025 for(i=0; i<
fCavity.size(); i++) {
3028 interface =
fCavity[i].GetDBEntry();
3029 for (j=0; j<interface.size()-5; j++){
3030 interface.at(j).SetAnalysisID( analysis_id ) ;
3031 interface.at(j).SetMonitorID( db );
3032 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
3033 interface.at(j).PrintStatus( local_print_flag);
3034 interface.at(j).AddThisEntryToList( entrylist );
3036 for (j=interface.size()-5; j<interface.size(); j++){
3037 interface.at(j).SetAnalysisID( analysis_id ) ;
3038 interface.at(j).SetMonitorID( db );
3039 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3040 interface.at(j).PrintStatus( local_print_flag);
3041 interface.at(j).AddThisEntryToList( entrylist );
3051 for (j=0; j<interface.size(); j++){
3052 interface.at(j).SetAnalysisID( analysis_id );
3053 interface.at(j).SetMonitorID( db );
3054 interface.at(j).SetMeasurementTypeID( measurement_type_halo );
3055 interface.at(j).PrintStatus( local_print_flag );
3056 interface.at(j).AddThisEntryToList( entrylist );
3060 if(local_print_flag){
3066 if( entrylist.size() ) {
3067 auto c = db->GetScopedConnection();
3068 for (
const auto& entry: entrylist) {
3069 c->QueryExecute(entry.insert_into());
3072 QwMessage <<
"QwBeamLine::FillDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3080 Bool_t local_print_flag =
false;
3082 if(local_print_flag) {
3083 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3085 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3088 std::vector<QwErrDBInterface> interface;
3089 std::vector<QwParitySchema::beam_errors_row> entrylist;
3091 UInt_t analysis_id = db->GetAnalysisID();
3097 for(i=0; i<
fBCM.size(); i++) {
3099 interface =
fBCM[i].get()->GetErrDBEntry();
3100 for (j=0; j<interface.size(); j++){
3101 interface.at(j).SetAnalysisID( analysis_id );
3102 interface.at(j).SetMonitorID( db );
3103 interface.at(j).PrintStatus( local_print_flag );
3104 interface.at(j).AddThisEntryToList( entrylist );
3106 if(local_print_flag) printf(
"\n");
3113 interface =
fStripline[i].get()->GetErrDBEntry();
3114 for (j=0; j<interface.size(); j++){
3115 interface.at(j).SetAnalysisID( analysis_id ) ;
3116 interface.at(j).SetMonitorID( db );
3117 interface.at(j).PrintStatus( local_print_flag );
3118 interface.at(j).AddThisEntryToList( entrylist );
3120 if(local_print_flag) printf(
"\n");
3126 interface =
fBPMCombo[i].get()->GetErrDBEntry();
3127 for (j=0; j<interface.size(); j++){
3128 interface.at(j).SetAnalysisID( analysis_id ) ;
3129 interface.at(j).SetMonitorID( db );
3130 interface.at(j).PrintStatus( local_print_flag );
3131 interface.at(j).AddThisEntryToList( entrylist );
3133 if(local_print_flag) printf(
"\n");
3140 interface =
fBCMCombo[i].get()->GetErrDBEntry();
3141 for (j=0; j<interface.size(); j++){
3142 interface.at(j).SetAnalysisID( analysis_id ) ;
3143 interface.at(j).SetMonitorID( db );
3144 interface.at(j).PrintStatus( local_print_flag );
3145 interface.at(j).AddThisEntryToList( entrylist );
3147 if(local_print_flag) printf(
"\n");
3155 for (j=0; j<interface.size(); j++){
3156 interface.at(j).SetAnalysisID( analysis_id ) ;
3157 interface.at(j).SetMonitorID( db );
3158 interface.at(j).PrintStatus( local_print_flag );
3159 interface.at(j).AddThisEntryToList( entrylist );
3161 if(local_print_flag) printf(
"\n");
3166 for(i=0; i<
fQPD.size(); i++) {
3168 interface =
fQPD[i].GetErrDBEntry();
3169 for (j=0; j<interface.size(); j++){
3170 interface.at(j).SetAnalysisID( analysis_id ) ;
3171 interface.at(j).SetMonitorID( db );
3172 interface.at(j).PrintStatus( local_print_flag );
3173 interface.at(j).AddThisEntryToList( entrylist );
3175 if(local_print_flag) printf(
"\n");
3183 for (j=0; j<interface.size(); j++){
3184 interface.at(j).SetAnalysisID( analysis_id ) ;
3185 interface.at(j).SetMonitorID( db );
3186 interface.at(j).PrintStatus( local_print_flag );
3187 interface.at(j).AddThisEntryToList( entrylist );
3189 if(local_print_flag) printf(
"\n");
3194 for(i=0; i<
fCavity.size(); i++) {
3196 interface =
fCavity[i].GetErrDBEntry();
3197 for (j=0; j<interface.size(); j++){
3198 interface.at(j).SetAnalysisID( analysis_id ) ;
3199 interface.at(j).SetMonitorID( db );
3200 interface.at(j).PrintStatus( local_print_flag );
3201 interface.at(j).AddThisEntryToList( entrylist );
3203 if(local_print_flag) printf(
"\n");
3211 for (j=0; j<interface.size(); j++){
3212 interface.at(j).SetAnalysisID( analysis_id ) ;
3213 interface.at(j).SetMonitorID( db );
3214 interface.at(j).PrintStatus( local_print_flag );
3215 interface.at(j).AddThisEntryToList( entrylist );
3217 if(local_print_flag) printf(
"\n");
3221 if(local_print_flag){
3227 if (entrylist.size()) {
3228 auto c = db->GetScopedConnection();
3229 for (
const auto& entry: entrylist) {
3230 c->QueryExecute(entry.insert_into());
3233 QwMessage <<
"QwBeamLine::FillErrDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3240 Bool_t local_print_flag =
false;
3241 Bool_t local_add_element= type.Contains(
"yield");
3245 if(local_print_flag) {
3246 printf(
"---------------------------------------------------------------\n");
3247 printf(
"QwBeamLine::WritePromptSummary() Type : %12s\n", type.Data());
3248 printf(
"---------------------------------------------------------------\n");
3252 TString element_name =
"";
3253 Double_t element_value = 0.0;
3254 Double_t element_value_err = 0.0;
3255 Double_t element_value_width = 0.0;
3258 Bool_t local_add_these_elements=
false;
3261 for (
size_t i = 0; i <
fBCM.size(); i++)
3265 element_value = 0.0;
3266 element_value_err = 0.0;
3267 element_value_width = 0.0;
3269 local_add_these_elements = element_name.EqualTo(
"bcm_an_us")||element_name.EqualTo(
"bcm_an_ds")||element_name.EqualTo(
"bcm_an_ds3")|| (element_name.Contains(
"cav4") );
3271 if(local_add_these_elements && local_add_element){
3279 if(local_ps_element) {
3280 element_value = tmp_channel->
GetValue();
3284 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3287 if( local_print_flag && local_ps_element) {
3288 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3289 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3294 for (
size_t i = 0; i <
fBCMCombo.size(); i++) {
3297 static const TString kTargetBCMName =
"bcm_target";
3298 local_add_these_elements = element_name.EqualTo(kTargetBCMName);
3299 element_value_err = 0.0;
3300 element_value_width = 0.0;
3303 local_add_these_elements = element_name.EqualTo(
"bcm_target");
3305 if(local_add_these_elements && local_add_element){
3313 if(local_ps_element) {
3314 element_value = tmp_channel->
GetValue();
3318 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3321 if( local_print_flag && local_ps_element) {
3322 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3323 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3328 for (
size_t i = 0; i <
fCavity.size(); i++)
3332 element_value = 0.0;
3333 element_value_err = 0.0;
3334 element_value_width = 0.0;
3336 local_add_these_elements = (element_name.EqualTo(
"cav4bQ")||element_name.EqualTo(
"cav4cQ")|| element_name.EqualTo(
"cav4dQ") );
3338 if(local_add_these_elements && local_add_element){
3346 if(local_ps_element) {
3347 element_value = tmp_channel->
GetValue();
3351 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3354 if( local_print_flag && local_ps_element) {
3355 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3356 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3364 char property[2][6]={
"x",
"y"};
3366 local_ps_element=NULL;
3367 local_add_these_elements=
false;
3372 for (Int_t j=0;j<2;j++){
3375 element_value = 0.0;
3376 element_value_err = 0.0;
3377 element_value_width = 0.0;
3380 static const std::vector<TString> kSummaryBPMNames = {
3381 "bpm4",
"bpm18",
"bpm14",
"bpm12"
3383 local_add_these_elements =
false;
3384 for (
const auto& bpm_name : kSummaryBPMNames) {
3385 if (element_name.Contains(bpm_name)) {
3386 local_add_these_elements =
true;
3391 if( local_add_these_elements && local_add_element){
3399 if(local_ps_element) {
3400 element_value = tmp_channel->
GetValue();
3403 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3406 if( local_print_flag && local_ps_element) {
3407 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3408 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3415 for(
size_t i=0; i<
fBPMCombo.size(); i++)
3417 for (Int_t j=0;j<2;j++){
3420 element_value = 0.0;
3421 element_value_err = 0.0;
3422 element_value_width = 0.0;
3424 local_add_these_elements=element_name.Contains(
"bpm4")||element_name.Contains(
"bpm18")||element_name.Contains(
"bpm14")||element_name.Contains(
"bpm12");
3426 if( local_add_these_elements && local_add_element){
3434 if(local_ps_element) {
3435 element_value = tmp_channel->
GetValue();
3438 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3441 if( local_print_flag && local_ps_element) {
3442 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3443 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
UInt_t GetGlobalErrorFlag(TString evtype, Int_t evMode, Double_t stabilitycut)
EQwBeamInstrumentType GetQwBeamInstrumentType(TString name)
TString GetQwBeamInstrumentTypeName(EQwBeamInstrumentType type)
A logfile class, based on an identical class in the Hermes analyzer.
#define QwError
Predefined log drain for errors.
#define QwWarning
Predefined log drain for warnings.
#define QwMessage
Predefined log drain for regular messages.
#define QwDebug
Predefined log drain for debugging output.
Prompt summary data management.
std::shared_ptr< VQwBCM > VQwBCM_ptr
std::shared_ptr< VQwClock > VQwClock_ptr
std::shared_ptr< VQwBPM > VQwBPM_ptr
Beamline subsystem containing BPMs, BCMs, and other beam monitoring devices.
Bool_t PublishInternalValue(const TString name, const TString desc, const VQwHardwareChannel *element) const
static TString DetermineMeasurementTypeID(TString type, TString suffix="", Bool_t forcediffs=kFALSE)
static std::ostream & endl(std::ostream &)
End of the line.
Command-line and configuration file options processor.
Configuration file parser with flexible tokenization and search capabilities.
T GetTypedNextToken()
Get next token into specific type.
std::unique_ptr< QwParameterFile > ReadUntilNextModule(const bool add_current_line=false)
Bool_t PopValue(const std::string keyname, T &retvalue)
void TrimWhitespace(TString::EStripType head_tail=TString::kBoth)
Bool_t HasVariablePair(const std::string &separatorchars, std::string &varname, std::string &varvalue)
void SetCommentChars(const std::string value)
Set various sets of special characters.
Bool_t SkipSection(std::string secname)
Skips from the beginning of the section 'secname' until the first section that does not have that nam...
void AddBreakpointKeyword(std::string keyname)
void TrimComment(const char commentchar)
const std::pair< TString, TString > GetParamFileNameContents()
Bool_t FileHasModuleHeader(const std::string &secname)
Bool_t ReturnValue(const std::string keyname, T &retvalue)
std::unique_ptr< QwParameterFile > ReadNextSection(std::string &secname, const bool keep_header=false)
void Set(TString type, const Double_t a, const Double_t a_err, const Double_t a_width)
void AddElement(PromptSummaryElement *in)
PromptSummaryElement * GetElementByName(TString name)
A helper class to manage a vector of branch entries for ROOT trees.
static void PrintErrorCounterTail()
static void PrintErrorCounterHead()
The pure virtual base class of all data elements.
virtual void SetExternalClockPtr(const VQwHardwareChannel *)
virtual void LoadChannelParameters(QwParameterFile &)
virtual void LoadMockDataParameters(QwParameterFile &)
virtual const TString & GetElementName() const
Get the name of this element.
virtual Bool_t NeedsExternalClock()
virtual std::string GetExternalClockName()
Abstract base for concrete hardware channels implementing dual-operator pattern.
Double_t GetValueError() const
Double_t GetValueWidth() const
Double_t GetValue() const
std::vector< std::vector< TString > > fPublishList
BankID_t fCurrentBank_ID
Bank ID (and Marker word) that is currently being processed;.
TString fSystemName
Name of this subsystem.
Int_t GetSubbankIndex() const
virtual VQwSubsystem & operator=(VQwSubsystem *value)
Assignment Note: Must be called at the beginning of all subsystems routine call to operator=(VQwSubsy...
void RegisterRocBankMarker(QwParameterFile &mapstr)
std::map< TString, TString > fDetectorMaps
Map of file name to full path or content.
VQwSubsystem(const TString &name)
Constructor with name.
ROCID_t fCurrentROC_ID
ROC ID that is currently being processed.
Beam detector mapping/ID decoded from map files.
EQwBeamInstrumentType fTypeID
Bool_t ReportInitErrors() const
void IncrementErrorCounters() override
std::vector< VQwBCM_ptr > fBCM
void Scale(Double_t factor) override
void ProcessOptions(QwOptions &options) override
VQwSubsystem & operator=(VQwSubsystem *value) override
Assignment Note: Must be called at the beginning of all subsystems routine call to operator=(VQwSubsy...
void CopyTemplatedDataElements(const VQwSubsystem *source)
size_t GetNumberOfElements()
Int_t AddToElementList(std::vector< TT > &elementlist, QwBeamDetectorID &detector_id)
Adds a new element to a vector of data elements, and returns the index of that element within the arr...
VQwSubsystem & operator+=(VQwSubsystem *value) override
VQwDataElement * GetElement(QwBeamDetectorID det_id)
void LoadMockDataParameters(TString mapfile) override
Bool_t Compare(VQwSubsystem *source)
std::vector< QwEnergyCalculator > fECalculator
void Ratio(VQwSubsystem *numer, VQwSubsystem *denom) override
std::vector< QwBeamDetectorID > fBeamDetectorID
std::vector< VQwBPM_ptr > fStripline
Int_t GetDetectorIndex(EQwBeamInstrumentType TypeID, TString name) const
void FillHistograms() override
Fill the histograms for this subsystem.
const VQwHardwareChannel * GetChannel(EQwBeamInstrumentType TypeID, Int_t index, TString device_prop) const
Int_t ProcessEvBuffer(const ROCID_t roc_id, const BankID_t bank_id, UInt_t *buffer, UInt_t num_words) override
Route raw ROC/bank buffer data to the correct devices and subelements.
Bool_t PublishInternalValues() const override
std::vector< QwBPMCavity > fCavity
UInt_t UpdateErrorFlag() override
void AssignGeometry(QwParameterFile *mapstr, VQwBPM *bpm)
void WritePromptSummary(QwPromptSummary *ps, TString type) override
QwBeamLine()
Private default constructor (not implemented, will throw linker error on use)
VQwBPM * GetBPMStripline(const TString name)
Int_t ProcessConfigurationBuffer(const ROCID_t roc_id, const BankID_t bank_id, UInt_t *buffer, UInt_t num_words) override
virtual void ConstructHistograms()
Construct the histograms for this subsystem.
std::vector< QwLinearDiodeArray_ptr > fLinearArray
Bool_t CheckForBurpFail(const VQwSubsystem *subsys) override
void CalculateRunningAverage() override
Calculate the average for all good events.
Int_t LoadGeometryDefinition(TString mapfile) override
void FillTreeVector(QwRootTreeBranchVector &values) const override
Fill the tree vector.
std::vector< QwQPD > fQPD
Bool_t PublishByRequest(TString device_name) override
std::vector< VQwBPM_ptr > fBPMCombo
void LoadEventCuts_Fin(Int_t &eventcut_flag) override
Int_t LoadChannelMap(TString mapfile) override
Bool_t ApplySingleEventCuts() override
QwHaloMonitor * GetScalerChannel(const TString name)
VQwBCM * GetBCM(const TString name)
void PrintInfo() const override
Print some information about the subsystem.
VQwClock * GetClock(const TString name)
QwEnergyCalculator * GetEnergyCalculator(const TString name)
Int_t fQwBeamLineErrorCount
void PrintValue() const override
Print values of all channels.
void LoadEventCuts_Line(QwParameterFile &mapstr, TString &varvalue, Int_t &eventcut_flag) override
std::vector< QwHaloMonitor > fHaloMonitor
void PrintErrorCounters() const override
std::vector< VQwBCM_ptr > fBCMCombo
void AccumulateRunningSum(VQwSubsystem *value, Int_t count=0, Int_t ErrorMask=0xFFFFFFF) override
Update the running sums for devices.
UInt_t GetEventcutErrorFlag() override
void ConstructBranchAndVector(TTree *tree, TString &prefix, QwRootTreeBranchVector &values) override
Construct the branch and tree vector.
static const Bool_t bDEBUG
VQwSubsystem & operator-=(VQwSubsystem *value) override
void ProcessEvent() override
void RandomizeEventData(int helicity=0, double time=0.0) override
void EncodeEventData(std::vector< UInt_t > &buffer) override
VQwBCM * GetCombinedBCM(const TString name)
std::vector< VQwClock_ptr > fClock
void ConstructBranch(TTree *tree, TString &prefix) override
Construct the branch and tree vector.
VQwBPM * GetCombinedBPM(const TString name)
void PrintDetectorID() const
QwBPMCavity * GetBPMCavity(const TString name)
void ClearEventData() override
void DeaccumulateRunningSum(VQwSubsystem *value, Int_t ErrorMask=0xFFFFFFF) override
remove one entry from the running sums for devices
Int_t LoadInputParameters(TString pedestalfile) override
Cavity-style BPM using VQWK channels.
Computes beam energy change from BPM information.
Wrapper around a scaler channel to monitor beam halo rates.
Abstract base for beam current monitors (BCMs)
static VQwBCM * CreateCombo(TString subsystemname, TString type, TString name)
Factory method to create a concrete Combined BCM for the requested module type.
static VQwBCM * Create(TString subsystemname, TString type, TString name, TString clock="")
Factory method to create a concrete BCM instance for the requested module type.
Abstract base for beam position monitors (BPMs)
void GetSurveyOffsets(Double_t Xoffset, Double_t Yoffset, Double_t Zoffset)
Store geometry/survey offsets for absolute position calibration.
void SetRotation(Double_t)
Set detector rotation angle and update cached trigonometric values.
static VQwBPM * CreateCombo(TString subsystemname, TString name, TString type)
A fast way of creating a BPM stripline of specified type.
static VQwBPM * CreateLinearDiodeArray(TString subsystemname, TString name, TString type)
void GetElectronicFactors(Double_t BSENfactor, Double_t AlphaX, Double_t AlphaY)
Apply per-detector electronic calibration and relative gains.
void SetGains(TString pos, Double_t value)
static VQwBPM * CreateStripline(TString subsystemname, TString name, TString type)
A fast way of creating a BPM stripline of specified type.
virtual const VQwHardwareChannel * GetEffectiveCharge() const =0
virtual const VQwHardwareChannel * GetPosition(EBeamPositionMonitorAxis axis) const
Abstract base for beam clocks used to normalize rates and yields.
static VQwClock * Create(TString subsystemname, TString type, TString name)
virtual void FillDB(QwParityDB *, TString)
Fill the database.
virtual void FillErrDB(QwParityDB *, TString)