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__
57 elementlist.push_back(element);
59 detector_id.
fIndex = elementlist.size()-1;
72 elementlist.push_back(element);
74 detector_id.
fIndex = elementlist.size()-1;
87 elementlist.push_back(element);
89 detector_id.
fIndex = elementlist.size()-1;
99 elementlist.push_back(element);
100 detector_id.
fIndex = elementlist.size()-1;
101 return detector_id.
fIndex;
116 Bool_t ldebug=kFALSE;
118 TString varname, varvalue;
120 TString combotype, comboname, dev_name;
123 Bool_t combolistdecoded;
126 std::vector<TString> fDeviceName;
127 std::vector<TString> fProperty;
128 std::vector<TString> fType;
129 std::vector<Double_t> fQWeight;
130 std::vector<Double_t> fXWeight;
131 std::vector<Double_t> fYWeight;
132 Double_t sumQweights = 0.0;
134 std::vector<QwBeamDetectorID> clock_needed_list;
143 Int_t buffer_offset = 0;
152 if (mapstr.
ReturnValue(
"vqwk_buffer_offset",buffer_offset)) {
153 QwDebug <<
"QwBeamLine::LoadChannelMap: "
156 <<
"; vqwk_buffer_offset: " << buffer_offset <<
QwLog::endl;
162 if (varname==
"begin"){
166 combotype = varvalue;
167 combolistdecoded = kFALSE;
177 for(
size_t i=0;i<fDeviceName.size();i++)
178 sumQweights+=fabs(fQWeight[i]);
179 combolistdecoded = kTRUE;
184 if (mapstr.
PopValue(
"name",varvalue)) {
185 comboname = varvalue;
198 QwError <<
"QwBeamLine::LoadChannelMap: Unknown device: "
199 << dev_name <<
" used in "<< comboname
200 <<
". This combination will not be decoded!"
203 combolistdecoded = kTRUE;
207 fDeviceName.push_back(dev_name);
215 if(combotype ==
"combinedbpm"){
221 if(combotype ==
"energycalculator"){
222 fType.push_back(dettype);
232 localComboID.
fdetectorname=comboname(0,comboname.Sizeof()-1);
236 QwError <<
"QwBeamLine::LoadChannelMap: Unknown detector type: "
237 << combotype <<
", the detector "<<comboname<<
" will not be decoded "
243 if((localComboID.
fIndex==-1) && deviceok) {
253 for(
size_t i=0;i<fDeviceName.size();i++){
256 fQWeight[i],sumQweights );
270 for(
size_t i=0;i<fDeviceName.size();i++){
273 fStripline.at(index).get(), fQWeight[i],fXWeight[i],
274 fYWeight[i],sumQweights );
290 for(
size_t i=0;i<fDeviceName.size();i++){
320 if (! lineok)
continue;
322 localBeamDetectorID.
fIndex=
326 if(localBeamDetectorID.
fIndex==-1){
336 local_element = &(
fCavity.at(index));
344 local_element =
fBCM.at(index).get();
348 local_element =
fClock.at(index).get();
352 local_element = &(
fQPD.at(index));
361 QwDebug <<
"Try to push device "
363 <<
" (address=" << std::hex << local_element << std::dec
364 <<
") onto the clock_needed_list"
366 clock_needed_list.push_back(localBeamDetectorID);
378 std::unique_ptr<QwParameterFile> section;
379 std::vector<TString> publishinfo;
381 if (varvalue ==
"PUBLISH") {
383 while (section->ReadNextLine()) {
384 section->TrimComment();
385 section->TrimWhitespace();
386 for (
int ii = 0; ii < 4; ii++) {
387 varvalue = section->GetTypedNextToken<TString>();
388 if (varvalue.Length()) {
389 publishinfo.push_back(varvalue);
392 if (publishinfo.size() == 4)
407 std::cout<<
"QwBeamLine::Done with Load map channel \n";
415 std::string clockname;
416 for (
size_t i=0; i<clock_needed_list.size();i++ ) {
417 local_element =
GetElement(clock_needed_list[i]);
419 if (clockname.empty()){
420 QwWarning <<
"QwBeamLine::LoadChannelMap "
422 <<
" needs a reference clock, but the reference clock name is empty"
427 QwMessage <<
"QwBeamLine::LoadChannelMap "
428 <<
"Setting " <<
fClock.at(index).get()->GetElementName()
429 <<
" as the reference clock for channel "
434 QwWarning <<
"QwBeamLine::LoadChannelMap "
455 device_type.ToLower();
457 device_name.ToLower();
460 if (det_index == -1) {
465 TString channel_name;
474 channel_name.ToLower();
488 fBCM[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut),LLX,ULX,stabilitycut,burplevel);
499 QwMessage<<
"QwBeamLine:QwBPMStripline "<<channel_name<<
" "<<varvalue<<
" "<<stabilitycut<<
QwLog::endl;
501 fStripline[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
505 fQPD[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
509 fLinearArray[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
514 fCavity[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
520 fBCMCombo[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
525 fBPMCombo[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
532 fStripline[i].get()->SetEventCutMode(eventcut_flag);
534 for (
size_t i=0;i<
fQPD.size();i++)
535 fQPD[i].SetEventCutMode(eventcut_flag);
540 for (
size_t i=0;i<
fCavity.size();i++)
541 fCavity[i].SetEventCutMode(eventcut_flag);
543 for (
size_t i=0;i<
fBCM.size();i++)
544 fBCM[i].get()->SetEventCutMode(eventcut_flag);
546 for (
size_t i=0;i<
fClock.size();i++)
547 fClock[i].get()->SetEventCutMode(eventcut_flag);
553 fBCMCombo[i].get()->SetEventCutMode(eventcut_flag);
556 fBPMCombo[i].get()->SetEventCutMode(eventcut_flag);
570 Bool_t ldebug=kFALSE;
571 TString varname, varvalue;
574 TString devname,devtype;
576 Double_t devOffsetX = 0,devOffsetY = 0, devOffsetZ = 0;
577 Double_t devSENfactor = 0, devAlphaX = 0, devAlphaY = 0;
578 TString rotation_stat;
581 if(ldebug)std::cout<<
"QwBeamLine::LoadGeometryParameters("<< mapfile<<
")\n";
587 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
593 Bool_t notfound=kTRUE;
597 devtype.Remove(TString::kBoth,
' ');
600 devname.Remove(TString::kBoth,
' ');
603 QwError <<
"Error! Unknown detector type '"<<devtype
612 QwWarning <<
"Unrecognized detector name '" << devname
613 <<
"' in Geometry file. This may not be a problem, "
614 <<
"if we're using a reduced channel map."
634 std::cout<<
"####################\n";
635 std::cout<<
"! device type, device_name, Xoffset, Yoffset, Zoffset, BSEN scaling factor, AlpaX, AlpaY\n"<<std::endl;
641 <<devSENfactor <<
" / "
652 QwWarning <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm in qweak_beamline_geometry.map: "
659 TString localname =
fStripline.at(index).get()->GetElementName();
661 if(ldebug) std::cout<<
"element name =="<<localname
662 <<
"== to be compared to =="<<devname<<
"== \n";
664 if(localname==devname){
665 if(ldebug) std::cout<<
" I found the bpm !\n";
676 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown combined bpm in qweak_beamline_geometry.map: "
677 <<devname<<
" Check the combined bpm names!\n "
683 TString localname =
fBPMCombo.at(index).get()->GetElementName();
686 std::cout<<
"element name =="<<localname<<
"== to be compared to =="<<devname<<
"== \n";
688 if(localname==devname){
689 if(ldebug) std::cout<<
" I found the combinedbpm !\n";
690 fBPMCombo.at(index).get()->GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
697 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm : "
698 <<devname<<
" will not be assigned with geometry parameters. \n"
703 TString localname =
fCavity.at(index).GetElementName();
705 if(ldebug) std::cout<<
"element name =="<<localname
706 <<
"== to be compared to =="<<devname<<
"== \n";
708 if(localname==devname){
709 if(ldebug) std::cout<<
" I found the cavity bpm !\n";
710 fCavity.at(index).GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
717 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown QPD : "
718 <<devname<<
" will not be assigned with calibration factors. \n"
723 TString localname =
fQPD.at(index).GetElementName();
725 if(ldebug) std::cout<<
"element name =="<<localname
726 <<
"== to be compared to =="<<devname<<
"== \n";
728 if(localname==devname){
729 if(ldebug) std::cout<<
"I found the QPD !\n";
730 fQPD.at(index).GetCalibrationFactors(devAlphaX, devAlphaY);
734 else QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown device type : "<< devtype <<
735 ". Are you sure we have this in the beamline? I am skipping this."<<
QwLog::endl;
740 if(ldebug) std::cout <<
"line read in the geometry file = " << lineread<<
" \n";
752 Bool_t ldebug=kFALSE;
753 TString varname, varvalue;
756 TString devname, devtype;
759 if(ldebug) std::cout <<
"QwBeamLine::LoadMockDataParameters(" << mapfile <<
") \n" << std::endl;
767 if(ldebug) std::cout <<
"Line read so far = " << lineread <<
"\n" << std::endl;
775 devtype.Remove(TString::kBoth,
' ');
778 devname.Remove(TString::kBoth,
' ');
782 QwError <<
"Error! Unknown detector type '" << devtype <<
"' in MockDataParameters file!" <<
QwLog::endl;
788 QwWarning <<
"Unrecognized detector name '" << devname <<
"' in MockDataParameters file." <<
QwLog::endl;
802 Bool_t ldebug = kFALSE;
805 TString angle,xgain,ygain;
806 Double_t rotation_angle = 0;
810 token.Remove(TString::kBoth,
'\0');
812 if(token.Contains(
"unrotated")){
813 if(ldebug) std::cout<<
" unrotated "<<std::endl;
816 else if(token.Contains(
"rotation")){
820 if(token.Contains(
"=")){
821 angle = token.Remove(0,9);
822 rotation_angle = atof(angle);
823 if(ldebug) std::cout<<
"Rotation angle = "<<rotation_angle<<std::endl;
829 if(token.Contains(
"xgain")){
830 xgain = token.Remove(0,6);
831 if(ldebug) std::cout<<
" xgain ="<<xgain<<std::endl;
835 if(token.Contains(
"ygain")){
836 ygain = token.Remove(0,6);
837 if(ldebug) std::cout<<
" ygain ="<<ygain<<std::endl;
852 Bool_t ldebug=kFALSE;
856 if(ldebug)std::cout<<
"QwBeamLine::LoadInputParameters("<< pedestalfile<<
")\n";
864 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
872 varname.Remove(TString::kBoth,
' ');
879 Bool_t notfound=kTRUE;
886 TString localname =
fStripline[i].get()->GetSubElementName(j);
888 if(ldebug) std::cout<<
"Stripline element name =="<<localname
889 <<
"== to be compared to =="<<varname<<
"== \n";
890 if(localname==varname)
892 if(ldebug) std::cout<<
" I found it !\n";
893 fStripline[i].get()->SetSubElementPedestal(j,varped);
894 fStripline[i].get()->SetSubElementCalibrationFactor(j,varcal);
901 for(
size_t i=0;i<
fQPD.size();i++)
905 TString localname =
fQPD[i].GetSubElementName(j);
907 if(ldebug) std::cout<<
"QPD element name =="<<localname
908 <<
"== to be compared to =="<<varname<<
"== \n";
909 if(localname==varname)
911 if(ldebug) std::cout<<
" I found it !\n";
912 fQPD[i].SetSubElementPedestal(j,varped);
913 fQPD[i].SetSubElementCalibrationFactor(j,varcal);
924 TString localname =
fLinearArray[i].GetSubElementName(j);
926 if(ldebug) std::cout<<
"LinearArray element name =="<<localname
927 <<
"== to be compared to =="<<varname<<
"== \n";
928 if(localname==varname)
930 if(ldebug) std::cout<<
" I found it !\n";
932 fLinearArray[i].SetSubElementCalibrationFactor(j,varcal);
939 for(
size_t i=0;i<
fCavity.size();i++)
943 TString localname =
fCavity[i].GetSubElementName(j);
945 if(ldebug) std::cout<<
"Cavity element name =="<<localname
946 <<
"== to be compared to =="<<varname<<
"== \n";
947 if(localname==varname)
949 if(ldebug) std::cout<<
" I found it !\n";
950 fCavity[i].SetSubElementPedestal(j,varped);
951 fCavity[i].SetSubElementCalibrationFactor(j,varcal);
958 for(
size_t i=0;i<
fBCM.size();i++) {
959 if(
fBCM[i].get()->GetElementName()==varname)
961 fBCM[i].get()->SetPedestal(varped);
962 fBCM[i].get()->SetCalibrationFactor(varcal);
968 for(
size_t i=0;i<
fClock.size();i++) {
969 if(
fClock[i].get()->GetElementName()==varname)
971 fClock[i].get()->SetPedestal(varped);
972 fClock[i].get()->SetCalibrationFactor(varcal);
981 std::cout<<varname<<
" I found it ! "<<varcal<<
" ped. "<<varped<<
"\n";
992 if(ldebug) std::cout<<
" line read in the pedestal + cal file ="<<lineread<<
" \n";
1005 for (
size_t i = 0; i <
fStripline.size(); i++)
1007 fStripline[i].get()->RandomizeEventData(helicity, time);
1011 for (
size_t i = 0; i <
fCavity.size(); i++)
1015 for (
size_t i = 0; i <
fBCM.size(); i++)
1017 fBCM[i].get()->RandomizeEventData(helicity, time);
1027 fBCMCombo[i].get()->RandomizeEventData(helicity, time);
1031 fBCMCombo[i].get()->GetProjectedCharge(bcm);
1036 for (
size_t i=0; i<
fBPMCombo.size(); i++){
1037 fBPMCombo[i].get()->RandomizeEventData(helicity, time);
1042 fBPMCombo[i].get()->GetProjectedPosition(bpm);
1058 for (
size_t j=0; j<
fECalculator[i].GetNumberOfElements(); j++)
1078 std::vector<UInt_t> elements;
1100 std::vector<UInt_t> subbankheader;
1101 std::vector<UInt_t> rocheader;
1102 if (elements.size() > 0) {
1105 subbankheader.clear();
1106 subbankheader.push_back(elements.size() + 1);
1107 subbankheader.push_back((
fCurrentBank_ID << 16) | (0x01 << 8) | (1 & 0xff));
1112 rocheader.push_back(subbankheader.size() + elements.size() + 1);
1113 rocheader.push_back((
fCurrentROC_ID << 16) | (0x10 << 8) | (1 & 0xff));
1117 buffer.insert(buffer.end(), rocheader.begin(), rocheader.end());
1118 buffer.insert(buffer.end(), subbankheader.begin(), subbankheader.end());
1119 buffer.insert(buffer.end(), elements.begin(), elements.end());
1170 Bool_t lkDEBUG=kFALSE;
1173 if (index>=0 && num_words>0){
1176 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1177 <<
"Begin processing ROC" << roc_id
1178 <<
" and subbank "<<bank_id
1179 <<
" number of words="<<num_words<<std::endl;
1180 if (buffer[0]==0xf0f0f0f0 && num_words%2==1){
1183 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1184 <<
"Skipped padding word 0xf0f0f0f0 at beginning of buffer."
1197 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1198 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1210 std::cout<<
"found qpd data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1211 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1224 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1237 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1238 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1250 std::cout<<
"found bcm data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1251 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1262 std::cout<<
"found clock data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1263 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1274 std::cout<<
"found halo monitor data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1275 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1295 Bool_t status=kTRUE;
1297 for(
size_t i=0;i<
fBCM.size();i++){
1298 status &=
fBCM[i].get()->ApplySingleEventCuts();
1299 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->BCM[ "<<i
1300 <<
" , "<<
fBCM[i].get()->GetElementName()<<
" ] ******\n";
1303 for(
size_t i=0;i<
fClock.size();i++){
1304 status &=
fClock[i].get()->ApplySingleEventCuts();
1305 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->Clock[ "<<i
1306 <<
" , "<<
fClock[i].get()->GetElementName()<<
" ] ******\n";
1311 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->HaloMonitor[ "<<i
1312 <<
" , "<<
fHaloMonitor[i].GetElementName()<<
" ] ******\n";
1316 status &=
fStripline[i].get()->ApplySingleEventCuts();
1317 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMStripline[ "<<i
1318 <<
" , "<<
fStripline[i].get()->GetElementName()<<
" ] *****\n";
1322 for(
size_t i=0;i<
fQPD.size();i++){
1323 status &=
fQPD[i].ApplySingleEventCuts();
1324 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->QPD[ "<<i
1325 <<
" , "<<
fQPD[i].GetElementName()<<
" ] *****\n";
1329 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->LinearArray[ "<<i
1330 <<
" , "<<
fLinearArray[i].GetElementName()<<
" ] *****\n";
1333 for(
size_t i=0;i<
fCavity.size();i++){
1334 status &=
fCavity[i].ApplySingleEventCuts();
1335 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMCavity[ "<<i
1336 <<
" , "<<
fCavity[i].GetElementName()<<
" ] *****\n";
1340 status &=
fBCMCombo[i].get()->ApplySingleEventCuts();
1341 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBCM[ "<<i
1342 <<
" , "<<
fBCMCombo[i].get()->GetElementName()<<
" ] ******\n";
1346 status &=
fBPMCombo[i].get()->ApplySingleEventCuts();
1347 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBPM[ "<<i
1348 <<
" , "<<
fBPMCombo[i].get()->GetElementName()<<
" ] ******\n";
1353 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->EnergyCalculator[ "<<i
1354 <<
" , "<<
fECalculator[i].GetElementName()<<
" ] ******\n";
1370 Bool_t burpstatus = kFALSE;
1374 for(
size_t i=0;i<input->
fClock.size();i++){
1376 burpstatus |= (this->
fClock[i].get())->CheckForBurpFail(input->
fClock[i].get());
1378 for(
size_t i=0;i<input->
fStripline.size();i++){
1382 for(
size_t i=0;i<input->
fQPD.size();i++){
1390 for(
size_t i=0;i<input->
fCavity.size();i++){
1394 for(
size_t i=0;i<input->
fBCM.size();i++){
1396 burpstatus |= (this->
fBCM[i].get())->CheckForBurpFail(input->
fBCM[i].get());
1398 for(
size_t i=0;i<input->
fBCMCombo.size();i++){
1400 burpstatus |= (this->
fBCMCombo[i].get())->CheckForBurpFail(input->
fBCMCombo[i].get());
1402 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
1404 burpstatus |= (this->
fBPMCombo[i].get())->CheckForBurpFail(input->
fBPMCombo[i].get());
1427 for(
size_t i=0;i<
fClock.size();i++){
1428 fClock[i].get()->PrintErrorCounters();
1431 for(
size_t i=0;i<
fBCM.size();i++){
1432 fBCM[i].get()->PrintErrorCounters();
1443 for(
size_t i=0;i<
fQPD.size();i++){
1444 fQPD[i].PrintErrorCounters();
1451 for(
size_t i=0;i<
fCavity.size();i++){
1452 fCavity[i].PrintErrorCounters();
1456 fBCMCombo[i].get()->PrintErrorCounters();
1460 fBPMCombo[i].get()->PrintErrorCounters();
1473 for(
size_t i=0;i<
fClock.size();i++){
1474 fClock[i].get()->IncrementErrorCounters();
1476 for(
size_t i=0;i<
fBCM.size();i++){
1477 fBCM[i].get()->IncrementErrorCounters();
1483 fStripline[i].get()->IncrementErrorCounters();
1485 for(
size_t i=0;i<
fQPD.size();i++){
1486 fQPD[i].IncrementErrorCounters();
1491 for(
size_t i=0;i<
fCavity.size();i++){
1492 fCavity[i].IncrementErrorCounters();
1495 fBCMCombo[i].get()->IncrementErrorCounters();
1498 fBPMCombo[i].get()->IncrementErrorCounters();
1509 UInt_t ErrorFlagtmp;
1511 for(
size_t i=0;i<
fBCM.size();i++){
1512 ErrorFlagtmp =
fBCM[i].get()->GetEventcutErrorFlag();
1513 ErrorFlag |=ErrorFlagtmp;
1516 ErrorFlag |=
fStripline[i].get()->GetEventcutErrorFlag();
1518 for(
size_t i=0;i<
fQPD.size();i++){
1519 ErrorFlag |=
fQPD[i].GetEventcutErrorFlag();
1524 for(
size_t i=0;i<
fCavity.size();i++){
1525 ErrorFlag |=
fCavity[i].GetEventcutErrorFlag();
1528 ErrorFlag |=
fBCMCombo[i].get()->GetEventcutErrorFlag();
1531 ErrorFlag |=
fBPMCombo[i].get()->GetEventcutErrorFlag();
1545 UInt_t ErrorFlagtmp;
1547 for(
size_t i=0;i<
fBCM.size();i++){
1548 ErrorFlagtmp =
fBCM[i].get()->UpdateErrorFlag();
1549 ErrorFlag |=ErrorFlagtmp;
1552 ErrorFlag |=
fStripline[i].get()->UpdateErrorFlag();
1554 for(
size_t i=0;i<
fQPD.size();i++){
1555 ErrorFlag |=
fQPD[i].UpdateErrorFlag();
1560 for(
size_t i=0;i<
fCavity.size();i++){
1561 ErrorFlag |=
fCavity[i].UpdateErrorFlag();
1564 ErrorFlag |=
fBCMCombo[i].get()->UpdateErrorFlag();
1567 ErrorFlag |=
fBPMCombo[i].get()->UpdateErrorFlag();
1590 for(
size_t i=0;i<input->
fStripline.size();i++)
1592 for(
size_t i=0;i<input->
fQPD.size();i++)
1593 (this->
fQPD[i]).UpdateErrorFlag(&(input->
fQPD[i]));
1596 for(
size_t i=0;i<input->
fCavity.size();i++)
1598 for(
size_t i=0;i<input->
fBCM.size();i++){
1599 (this->
fBCM[i].get())->UpdateErrorFlag(input->
fBCM[i].get());
1601 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
1603 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
1622 for(
size_t i=0;i<
fClock.size();i++)
1623 fClock[i].get()->ProcessEvent();
1629 for(
size_t i=0;i<
fCavity.size();i++)
1632 for(
size_t i=0;i<
fBCM.size();i++){
1633 fBCM[i].get()->ProcessEvent();
1636 for(
size_t i=0;i<
fQPD.size();i++)
1676 Bool_t status = kTRUE;
1685 device_type.ToLower();
1686 device_prop.ToLower();
1691 if (device_type ==
"combobpm")
1693 else if (device_type ==
"combobcm")
1695 else if (device_type ==
"comboenergy")
1697 else if (device_type ==
"scaler")
1706 tmp_channel =
GetChannel(type_id,index,device_prop);
1710 if (tmp_channel == NULL) {
1711 QwError <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" not found" <<
QwLog::endl;
1714 QwDebug <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" found" <<
QwLog::endl;
1727 Bool_t status = kFALSE;
1730 std::vector<TString> publishinfo(4,TString(
""));
1731 publishinfo.at(0) = device_name;
1736 TString name = device_name;
1737 TString device_prop =
"value";
1738 if (device_name.EndsWith(
"WS")){
1739 name = device_name(0,device_name.Length()-2);
1741 }
else if (device_name.EndsWith(
"Q")){
1742 name = device_name(0,device_name.Length()-1);
1744 }
else if (device_name.EndsWith(
"XSlope")){
1745 name = device_name(0,device_name.Length()-6);
1747 }
else if (device_name.EndsWith(
"YSlope")){
1748 name = device_name(0,device_name.Length()-6);
1750 }
else if (device_name.EndsWith(
"X")){
1751 name = device_name(0,device_name.Length()-1);
1753 }
else if (device_name.EndsWith(
"Y")){
1754 name = device_name(0,device_name.Length()-1);
1766 publishinfo.at(3) = device_prop;
1772 tmp_channel =
GetChannel(type_id,index,publishinfo.at(3));
1786 for(
size_t i=0;i<
fClock.size();i++)
1787 fClock[i].get()->ClearEventData();
1790 for(
size_t i=0;i<
fCavity.size();i++)
1792 for(
size_t i=0;i<
fBCM.size();i++)
1794 for(
size_t i=0;i<
fQPD.size();i++)
1814 Bool_t ldebug=kFALSE;
1817 std::cout<<
"QwBeamLine::GetDetectorIndex\n";
1818 std::cout<<
"type_id=="<<type_id<<
" name="<<name<<
"\n";
1857 tmp_ptr = &(
fQPD.at(index));
1863 tmp_ptr =
fBCM.at(index).get();
1878 tmp_ptr = &(
fCavity.at(index));
1881 tmp_ptr =
fClock.at(index).get();
1884 TString loc=
"QwBeamLine::GetElement called by "
1885 +this->
GetName()+
" with invalid arguments: "
1888 throw std::invalid_argument(loc.Data());
1908 if (device_prop ==
"x")
1910 else if (device_prop ==
"y")
1912 else if (device_prop ==
"ef")
1916 if (device_prop ==
"x")
1918 else if (device_prop ==
"y")
1920 else if (device_prop ==
"ef")
1921 tmp_channel =
fBPMCombo.at(index)->GetEffectiveCharge();
1922 else if (device_prop ==
"xp")
1923 tmp_channel =
fBPMCombo.at(index)->GetAngleX();
1924 else if (device_prop ==
"yp")
1925 tmp_channel =
fBPMCombo.at(index)->GetAngleY();
1930 tmp_channel =
dynamic_cast<const VQwBCM*
>(
GetElement(TypeID,index))->GetCharge();
1936 tmp_channel =
fClock.at(index)->GetTime();
1938 TString loc=
"QwBeamLine::GetChannel called by "
1939 +this->
GetName()+
" with invalid arguments: "
1942 throw std::invalid_argument(loc.Data());
1952 for (std::vector<VQwBPM_ptr >::iterator stripline =
fStripline.begin(); stripline !=
fStripline.end(); ++stripline) {
1953 if ((*stripline).get()->GetElementName() == name) {
1954 return (*stripline).get();
1967 for (std::vector<QwBPMCavity>::iterator cavity =
fCavity.begin(); cavity !=
fCavity.end(); ++cavity) {
1968 if (cavity->GetElementName() == name) {
1982 if (!
fBCM.empty()) {
1983 for (std::vector<VQwBCM_ptr >::iterator bcm =
fBCM.begin(); bcm !=
fBCM.end(); ++bcm) {
1984 if ((*bcm).get()->GetElementName() == name) {
1985 return (*bcm).get();
2002 for (std::vector<VQwClock_ptr >::iterator clock =
fClock.begin(); clock !=
fClock.end(); ++clock) {
2003 if ((*clock).get()->GetElementName() == name) {
2004 return (*clock).get();
2021 for (std::vector<VQwBCM_ptr>::iterator cbcm =
fBCMCombo.begin(); cbcm !=
fBCMCombo.end(); ++cbcm) {
2022 if ((*cbcm).get()->GetElementName() == name) {
2023 return (*cbcm).get();
2039 for (std::vector<VQwBPM_ptr>::iterator cbpm =
fBPMCombo.begin(); cbpm !=
fBPMCombo.end(); ++cbpm) {
2040 if ((*cbpm).get()->GetElementName() == name) {
2041 return (*cbpm).get();
2056 if (ecal->GetElementName() == name) {
2077 if (halo->GetElementName() == name) {
2135 for(
size_t i=0;i<input->
fClock.size();i++)
2137 for(
size_t i=0;i<input->
fStripline.size();i++)
2139 for(
size_t i=0;i<input->
fQPD.size();i++)
2143 for(
size_t i=0;i<input->
fCavity.size();i++)
2145 for(
size_t i=0;i<input->
fBCM.size();i++)
2146 *(this->
fBCM[i].get())=*(input->
fBCM[i].get());
2149 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2151 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2160 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2179 for(
size_t i=0;i<input->
fClock.size();i++)
2181 for(
size_t i=0;i<input->
fStripline.size();i++)
2183 for(
size_t i=0;i<input->
fCavity.size();i++)
2185 for(
size_t i=0;i<input->
fQPD.size();i++)
2189 for(
size_t i=0;i<input->
fBCM.size();i++)
2190 *(this->
fBCM[i].get())+=*(input->
fBCM[i].get());
2193 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2195 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2204 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2222 for(
size_t i=0;i<input->
fClock.size();i++)
2224 for(
size_t i=0;i<input->
fStripline.size();i++)
2226 for(
size_t i=0;i<input->
fCavity.size();i++)
2228 for(
size_t i=0;i<input->
fQPD.size();i++)
2232 for(
size_t i=0;i<input->
fBCM.size();i++)
2233 *(this->
fBCM[i].get())-=*(input->
fBCM[i].get());
2236 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2238 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2247 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2265 for(
size_t i=0;i<innumer->
fClock.size();i++)
2266 this->
fClock[i].get()->Ratio(*(innumer->
fClock[i].get()),
2267 *(indenom->
fClock[i].get()));
2268 for(
size_t i=0;i<innumer->
fStripline.size();i++)
2271 for(
size_t i=0;i<innumer->
fCavity.size();i++)
2273 for(
size_t i=0;i<innumer->
fQPD.size();i++)
2277 for(
size_t i=0;i<innumer->
fBCM.size();i++)
2278 this->
fBCM[i].get()->Ratio(*(innumer->
fBCM[i].get()),
2279 *(indenom->
fBCM[i].get()));
2282 for(
size_t i=0;i<innumer->
fBCMCombo.size();i++)
2285 for(
size_t i=0;i<innumer->
fBPMCombo.size();i++)
2302 for(
size_t i=0;i<
fClock.size();i++)
fClock[i].get()->Scale(factor);
2307 for(
size_t i=0;i<
fBCM.size();i++)
fBCM[i].get()->Scale(factor);
2318 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->CalculateRunningAverage();
2323 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->CalculateRunningAverage();
2325 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
fBCMCombo[i].get()->CalculateRunningAverage();
2326 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
fBPMCombo[i].get()->CalculateRunningAverage();
2335 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->PrintValue();
2345 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->PrintValue();
2363 for (
size_t i = 0; i <
fClock.size(); i++)
2364 fClock[i].get()->AccumulateRunningSum(*(value->
fClock[i].get()), count, ErrorMask);
2365 for (
size_t i = 0; i <
fStripline.size(); i++)
2367 for (
size_t i = 0; i <
fCavity.size(); i++)
2369 for (
size_t i = 0; i <
fBCM.size(); i++)
2370 fBCM[i].get()->AccumulateRunningSum(*(value->
fBCM[i].get()), count, ErrorMask);
2371 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2372 fBCMCombo[i].get()->AccumulateRunningSum(*(value->
fBCMCombo[i].get()), count, ErrorMask);
2373 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2374 fBPMCombo[i].get()->AccumulateRunningSum(*(value->
fBPMCombo[i].get()), count, ErrorMask);
2377 for (
size_t i = 0; i <
fQPD.size(); i++)
2391 for (
size_t i = 0; i <
fClock.size(); i++)
2392 fClock[i].get()->DeaccumulateRunningSum(*(value->
fClock[i].get()), ErrorMask);
2393 for (
size_t i = 0; i <
fStripline.size(); i++)
2395 for (
size_t i = 0; i <
fCavity.size(); i++)
2397 for (
size_t i = 0; i <
fBCM.size(); i++)
2398 fBCM[i].get()->DeaccumulateRunningSum(*(value->
fBCM[i].get()), ErrorMask);
2399 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2401 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2403 for (
size_t i = 0; i <
fQPD.size(); i++)
2421 if(
typeid(*value)!=
typeid(*
this))
2435 else if(input->
fBCM.size()!=
fBCM.size())
2458 }
else if(input->
fQPD.size()!=
fQPD.size()){
2472 for(
size_t i=0;i<
fClock.size();i++)
2473 fClock[i].get()->ConstructHistograms(folder,prefix);
2476 fStripline[i].get()->ConstructHistograms(folder,prefix);
2478 for(
size_t i=0;i<
fQPD.size();i++)
2484 for(
size_t i=0;i<
fCavity.size();i++)
2487 for(
size_t i=0;i<
fBCM.size();i++)
2488 fBCM[i].get()->ConstructHistograms(folder,prefix);
2494 fBCMCombo[i].get()->ConstructHistograms(folder,prefix);
2497 fBPMCombo[i].get()->ConstructHistograms(folder,prefix);
2507 for(
size_t i=0;i<
fClock.size();i++)
2508 fClock[i].get()->FillHistograms();
2511 for(
size_t i=0;i<
fQPD.size();i++)
2515 for(
size_t i=0;i<
fCavity.size();i++)
2517 for(
size_t i=0;i<
fBCM.size();i++)
2518 fBCM[i].get()->FillHistograms();
2536 for(
size_t i = 0; i <
fClock.size(); i++)
2537 fClock[i].get()->ConstructBranchAndVector(tree, prefix, values);
2538 for(
size_t i = 0; i <
fStripline.size(); i++)
2539 fStripline[i].get()->ConstructBranchAndVector(tree, prefix, values);
2540 for(
size_t i = 0; i <
fQPD.size(); i++)
2544 for(
size_t i = 0; i <
fCavity.size(); i++)
2546 for(
size_t i = 0; i <
fBCM.size(); i++)
2547 fBCM[i].get()->ConstructBranchAndVector(tree, prefix, values);
2550 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2551 fBCMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2552 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2553 fBPMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2563 for(
size_t i = 0; i <
fClock.size(); i++)
2564 fClock[i].get()->ConstructBranch(tree, prefix);
2565 for(
size_t i = 0; i <
fStripline.size(); i++)
2566 fStripline[i].get()->ConstructBranch(tree, prefix);
2567 for(
size_t i = 0; i <
fQPD.size(); i++)
2571 for(
size_t i = 0; i <
fBCM.size(); i++)
2572 fBCM[i].get()->ConstructBranch(tree, prefix);
2573 for(
size_t i = 0; i <
fCavity.size(); i++)
2574 fStripline[i].get()->ConstructBranch(tree, prefix);
2577 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2578 fBCMCombo[i].get()->ConstructBranch(tree, prefix);
2579 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2580 fBPMCombo[i].get()->ConstructBranch(tree, prefix);
2591 TString tmp,varname,varvalue;
2593 std::unique_ptr<QwParameterFile> nextmodule;
2597 tmp=
"QwBPMStripline";
2601 for(
size_t i = 0; i <
fStripline.size(); i++)
2602 fStripline[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2610 for(
size_t i = 0; i <
fQPD.size(); i++)
2614 tmp=
"QwLinearDiodeArray";
2626 for(
size_t i = 0; i <
fCavity.size(); i++)
2635 for(
size_t i = 0; i <
fBCM.size(); i++)
2636 fBCM[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2643 for(
size_t i = 0; i <
fClock.size(); i++)
2644 fClock[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2647 tmp=
"QwHaloMonitor";
2656 tmp=
"QwCombinedBCM";
2660 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2661 fBCMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2665 tmp=
"QwCombinedBPM";
2669 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2670 fBPMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2673 tmp=
"QwEnergyCalculator";
2687 for(
size_t i = 0; i <
fClock.size(); i++)
2688 fClock[i].get()->FillTreeVector(values);
2689 for(
size_t i = 0; i <
fStripline.size(); i++)
2691 for(
size_t i = 0; i <
fQPD.size(); i++)
2695 for(
size_t i = 0; i <
fCavity.size(); i++)
2697 for(
size_t i = 0; i <
fBCM.size(); i++)
2698 fBCM[i].get()->FillTreeVector(values);
2701 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2702 fBCMCombo[i].get()->FillTreeVector(values);
2703 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2704 fBPMCombo[i].get()->FillTreeVector(values);
2710#ifdef HAS_RNTUPLE_SUPPORT
2712void QwBeamLine::ConstructNTupleAndVector(std::unique_ptr<ROOT::RNTupleModel>& model, TString& prefix, std::vector<Double_t>& values, std::vector<std::shared_ptr<Double_t>>& fieldPtrs)
2714 for(
size_t i = 0; i <
fClock.size(); i++)
2715 fClock[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2716 for(
size_t i = 0; i <
fStripline.size(); i++)
2717 fStripline[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2718 for(
size_t i = 0; i <
fQPD.size(); i++)
2719 fQPD[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2721 fLinearArray[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2722 for(
size_t i = 0; i <
fCavity.size(); i++)
2723 fCavity[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2724 for(
size_t i = 0; i <
fBCM.size(); i++)
2725 fBCM[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2727 fHaloMonitor[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2728 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2729 fBCMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2730 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2731 fBPMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2733 fECalculator[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2739void QwBeamLine::FillNTupleVector(std::vector<Double_t>& values)
const
2741 for(
size_t i = 0; i <
fClock.size(); i++)
2742 fClock[i].get()->FillNTupleVector(values);
2743 for(
size_t i = 0; i <
fStripline.size(); i++)
2744 fStripline[i].get()->FillNTupleVector(values);
2745 for(
size_t i = 0; i <
fQPD.size(); i++)
2746 fQPD[i].FillNTupleVector(values);
2749 for(
size_t i = 0; i <
fCavity.size(); i++)
2750 fCavity[i].FillNTupleVector(values);
2751 for(
size_t i = 0; i <
fBCM.size(); i++)
2752 fBCM[i].get()->FillNTupleVector(values);
2755 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2756 fBCMCombo[i].get()->FillNTupleVector(values);
2757 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2758 fBPMCombo[i].get()->FillNTupleVector(values);
2769 std::cout<<
"Name of the subsystem ="<<
fSystemName<<
"\n";
2770 std::cout<<
"there are "<<
fClock.size()<<
" clock \n";
2771 std::cout<<
"there are "<<
fStripline.size()<<
" striplines \n";
2772 std::cout<<
"there are "<<
fQPD.size()<<
" QPDs \n";
2773 std::cout<<
"there are "<<
fLinearArray.size()<<
" LinearArrays \n";
2774 std::cout<<
"there are "<<
fCavity.size()<<
" cavities \n";
2775 std::cout<<
"there are "<<
fBCM.size()<<
" bcm \n";
2776 std::cout<<
"there are "<<
fHaloMonitor.size()<<
" halomonitors \n";
2777 std::cout<<
"there are "<<
fBCMCombo.size()<<
" combined bcms \n";
2778 std::cout<<
"there are "<<
fBPMCombo.size()<<
" combined bpms \n";
2779 std::cout<<
"there are "<<
fECalculator.size()<<
" energy calculators \n";
2780 std::cout<<
" Printing Running AVG and other channel info for BCMs"<<std::endl;
2781 for(
size_t i=0;i<
fBCM.size();i++)
2782 fBCM[i].get()->PrintInfo();
2794 std::cout<<
"============================="<<std::endl;
2795 std::cout<<
" Detector ID="<<i<<std::endl;
2809 for(
size_t i=0;i<input->
fClock.size();i++) {
2814 for(
size_t i=0;i<input->
fStripline.size();i++) {
2819 this->
fBCM.reserve(input->
fBCM.size());
2820 for(
size_t i=0;i<input->
fBCM.size();i++) {
2826 for(
size_t i=0;i<input->
fBCMCombo.size();i++) {
2833 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
2840#ifdef __USE_DATABASE__
2844 Bool_t local_print_flag =
false;
2846 if(local_print_flag) {
2847 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2849 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2852 std::vector<QwDBInterface> interface;
2853 std::vector<QwParitySchema::beam_row> entrylist;
2855 UInt_t analysis_id = db->GetAnalysisID();
2857 TString measurement_type_bcm;
2858 TString measurement_type_bpm;
2859 TString measurement_type_halo;
2861 measurement_type_bcm =
2863 measurement_type_bpm =
2865 measurement_type_halo =
2875 for(i=0; i<
fBCM.size(); i++) {
2877 interface =
fBCM[i].get()->GetDBEntry();
2878 for (j=0; j<interface.size(); j++){
2879 interface.at(j).SetAnalysisID( analysis_id );
2880 interface.at(j).SetMonitorID( db );
2881 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2882 interface.at(j).PrintStatus( local_print_flag );
2883 interface.at(j).AddThisEntryToList( entrylist );
2892 interface =
fStripline[i].get()->GetDBEntry();
2893 for (j=0; j<interface.size()-5; j++){
2894 interface.at(j).SetAnalysisID( analysis_id ) ;
2895 interface.at(j).SetMonitorID( db );
2896 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2897 interface.at(j).PrintStatus( local_print_flag);
2898 interface.at(j).AddThisEntryToList( entrylist );
2901 for (j=interface.size()-5; j<interface.size(); j++){
2902 interface.at(j).SetAnalysisID( analysis_id ) ;
2903 interface.at(j).SetMonitorID( db );
2904 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2905 interface.at(j).PrintStatus( local_print_flag);
2906 interface.at(j).AddThisEntryToList( entrylist );
2916 interface =
fBPMCombo[i].get()->GetDBEntry();
2917 for (j=0; j<interface.size()-5; j++){
2918 interface.at(j).SetAnalysisID( analysis_id ) ;
2919 interface.at(j).SetMonitorID( db );
2920 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2921 interface.at(j).PrintStatus( local_print_flag);
2922 interface.at(j).AddThisEntryToList( entrylist );
2925 for (j=interface.size()-5; j<interface.size(); j++){
2926 interface.at(j).SetAnalysisID( analysis_id ) ;
2927 interface.at(j).SetMonitorID( db );
2928 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2929 interface.at(j).PrintStatus( local_print_flag);
2930 interface.at(j).AddThisEntryToList( entrylist );
2939 interface =
fBCMCombo[i].get()->GetDBEntry();
2940 for (j=0; j<interface.size(); j++){
2941 interface.at(j).SetAnalysisID( analysis_id );
2942 interface.at(j).SetMonitorID( db );
2943 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2944 interface.at(j).PrintStatus( local_print_flag );
2945 interface.at(j).AddThisEntryToList( entrylist );
2955 for (j=0; j<interface.size(); j++){
2956 interface.at(j).SetAnalysisID( analysis_id );
2957 interface.at(j).SetMonitorID( db );
2958 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2959 interface.at(j).PrintStatus( local_print_flag );
2960 interface.at(j).AddThisEntryToList( entrylist );
2967 for(i=0; i<
fQPD.size(); i++) {
2970 interface =
fQPD[i].GetDBEntry();
2971 for (j=0; j<interface.size()-5; j++){
2972 interface.at(j).SetAnalysisID( analysis_id ) ;
2973 interface.at(j).SetMonitorID( db );
2974 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2975 interface.at(j).PrintStatus( local_print_flag);
2976 interface.at(j).AddThisEntryToList( entrylist );
2979 for (j=interface.size()-5; j<interface.size(); j++){
2980 interface.at(j).SetAnalysisID( analysis_id ) ;
2981 interface.at(j).SetMonitorID( db );
2982 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2983 interface.at(j).PrintStatus( local_print_flag);
2984 interface.at(j).AddThisEntryToList( entrylist );
2994 for (j=0; j<interface.size()-5; j++){
2995 interface.at(j).SetAnalysisID( analysis_id ) ;
2996 interface.at(j).SetMonitorID( db );
2997 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2998 interface.at(j).PrintStatus( local_print_flag);
2999 interface.at(j).AddThisEntryToList( entrylist );
3001 for (j=interface.size()-5; j<interface.size(); j++){
3002 interface.at(j).SetAnalysisID( analysis_id ) ;
3003 interface.at(j).SetMonitorID( db );
3004 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3005 interface.at(j).PrintStatus( local_print_flag);
3006 interface.at(j).AddThisEntryToList( entrylist );
3012 for(i=0; i<
fCavity.size(); i++) {
3015 interface =
fCavity[i].GetDBEntry();
3016 for (j=0; j<interface.size()-5; j++){
3017 interface.at(j).SetAnalysisID( analysis_id ) ;
3018 interface.at(j).SetMonitorID( db );
3019 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
3020 interface.at(j).PrintStatus( local_print_flag);
3021 interface.at(j).AddThisEntryToList( entrylist );
3023 for (j=interface.size()-5; j<interface.size(); j++){
3024 interface.at(j).SetAnalysisID( analysis_id ) ;
3025 interface.at(j).SetMonitorID( db );
3026 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3027 interface.at(j).PrintStatus( local_print_flag);
3028 interface.at(j).AddThisEntryToList( entrylist );
3038 for (j=0; j<interface.size(); j++){
3039 interface.at(j).SetAnalysisID( analysis_id );
3040 interface.at(j).SetMonitorID( db );
3041 interface.at(j).SetMeasurementTypeID( measurement_type_halo );
3042 interface.at(j).PrintStatus( local_print_flag );
3043 interface.at(j).AddThisEntryToList( entrylist );
3047 if(local_print_flag){
3053 if( entrylist.size() ) {
3054 auto c = db->GetScopedConnection();
3055 for (
const auto& entry: entrylist) {
3056 c->QueryExecute(entry.insert_into());
3059 QwMessage <<
"QwBeamLine::FillDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3067 Bool_t local_print_flag =
false;
3069 if(local_print_flag) {
3070 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3072 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3075 std::vector<QwErrDBInterface> interface;
3076 std::vector<QwParitySchema::beam_errors_row> entrylist;
3078 UInt_t analysis_id = db->GetAnalysisID();
3084 for(i=0; i<
fBCM.size(); i++) {
3086 interface =
fBCM[i].get()->GetErrDBEntry();
3087 for (j=0; j<interface.size(); j++){
3088 interface.at(j).SetAnalysisID( analysis_id );
3089 interface.at(j).SetMonitorID( db );
3090 interface.at(j).PrintStatus( local_print_flag );
3091 interface.at(j).AddThisEntryToList( entrylist );
3093 if(local_print_flag) printf(
"\n");
3100 interface =
fStripline[i].get()->GetErrDBEntry();
3101 for (j=0; j<interface.size(); j++){
3102 interface.at(j).SetAnalysisID( analysis_id ) ;
3103 interface.at(j).SetMonitorID( db );
3104 interface.at(j).PrintStatus( local_print_flag );
3105 interface.at(j).AddThisEntryToList( entrylist );
3107 if(local_print_flag) printf(
"\n");
3113 interface =
fBPMCombo[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");
3127 interface =
fBCMCombo[i].get()->GetErrDBEntry();
3128 for (j=0; j<interface.size(); j++){
3129 interface.at(j).SetAnalysisID( analysis_id ) ;
3130 interface.at(j).SetMonitorID( db );
3131 interface.at(j).PrintStatus( local_print_flag );
3132 interface.at(j).AddThisEntryToList( entrylist );
3134 if(local_print_flag) printf(
"\n");
3142 for (j=0; j<interface.size(); j++){
3143 interface.at(j).SetAnalysisID( analysis_id ) ;
3144 interface.at(j).SetMonitorID( db );
3145 interface.at(j).PrintStatus( local_print_flag );
3146 interface.at(j).AddThisEntryToList( entrylist );
3148 if(local_print_flag) printf(
"\n");
3153 for(i=0; i<
fQPD.size(); i++) {
3155 interface =
fQPD[i].GetErrDBEntry();
3156 for (j=0; j<interface.size(); j++){
3157 interface.at(j).SetAnalysisID( analysis_id ) ;
3158 interface.at(j).SetMonitorID( db );
3159 interface.at(j).PrintStatus( local_print_flag );
3160 interface.at(j).AddThisEntryToList( entrylist );
3162 if(local_print_flag) printf(
"\n");
3170 for (j=0; j<interface.size(); j++){
3171 interface.at(j).SetAnalysisID( analysis_id ) ;
3172 interface.at(j).SetMonitorID( db );
3173 interface.at(j).PrintStatus( local_print_flag );
3174 interface.at(j).AddThisEntryToList( entrylist );
3176 if(local_print_flag) printf(
"\n");
3181 for(i=0; i<
fCavity.size(); i++) {
3183 interface =
fCavity[i].GetErrDBEntry();
3184 for (j=0; j<interface.size(); j++){
3185 interface.at(j).SetAnalysisID( analysis_id ) ;
3186 interface.at(j).SetMonitorID( db );
3187 interface.at(j).PrintStatus( local_print_flag );
3188 interface.at(j).AddThisEntryToList( entrylist );
3190 if(local_print_flag) printf(
"\n");
3198 for (j=0; j<interface.size(); j++){
3199 interface.at(j).SetAnalysisID( analysis_id ) ;
3200 interface.at(j).SetMonitorID( db );
3201 interface.at(j).PrintStatus( local_print_flag );
3202 interface.at(j).AddThisEntryToList( entrylist );
3204 if(local_print_flag) printf(
"\n");
3208 if(local_print_flag){
3214 if (entrylist.size()) {
3215 auto c = db->GetScopedConnection();
3216 for (
const auto& entry: entrylist) {
3217 c->QueryExecute(entry.insert_into());
3220 QwMessage <<
"QwBeamLine::FillErrDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3227 Bool_t local_print_flag =
false;
3228 Bool_t local_add_element= type.Contains(
"yield");
3232 if(local_print_flag) {
3233 printf(
"---------------------------------------------------------------\n");
3234 printf(
"QwBeamLine::WritePromptSummary() Type : %12s\n", type.Data());
3235 printf(
"---------------------------------------------------------------\n");
3239 TString element_name =
"";
3240 Double_t element_value = 0.0;
3241 Double_t element_value_err = 0.0;
3242 Double_t element_value_width = 0.0;
3245 Bool_t local_add_these_elements=
false;
3248 for (
size_t i = 0; i <
fBCM.size(); i++)
3252 element_value = 0.0;
3253 element_value_err = 0.0;
3254 element_value_width = 0.0;
3256 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") );
3258 if(local_add_these_elements && local_add_element){
3266 if(local_ps_element) {
3267 element_value = tmp_channel->
GetValue();
3271 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3274 if( local_print_flag && local_ps_element) {
3275 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3276 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3281 for (
size_t i = 0; i <
fBCMCombo.size(); i++) {
3284 static const TString kTargetBCMName =
"bcm_target";
3285 local_add_these_elements = element_name.EqualTo(kTargetBCMName);
3286 element_value_err = 0.0;
3287 element_value_width = 0.0;
3290 local_add_these_elements = element_name.EqualTo(
"bcm_target");
3292 if(local_add_these_elements && local_add_element){
3300 if(local_ps_element) {
3301 element_value = tmp_channel->
GetValue();
3305 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3308 if( local_print_flag && local_ps_element) {
3309 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3310 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3315 for (
size_t i = 0; i <
fCavity.size(); i++)
3319 element_value = 0.0;
3320 element_value_err = 0.0;
3321 element_value_width = 0.0;
3323 local_add_these_elements = (element_name.EqualTo(
"cav4bQ")||element_name.EqualTo(
"cav4cQ")|| element_name.EqualTo(
"cav4dQ") );
3325 if(local_add_these_elements && local_add_element){
3333 if(local_ps_element) {
3334 element_value = tmp_channel->
GetValue();
3338 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3341 if( local_print_flag && local_ps_element) {
3342 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3343 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3351 char property[2][6]={
"x",
"y"};
3353 local_ps_element=NULL;
3354 local_add_these_elements=
false;
3359 for (Int_t j=0;j<2;j++){
3362 element_value = 0.0;
3363 element_value_err = 0.0;
3364 element_value_width = 0.0;
3367 static const std::vector<TString> kSummaryBPMNames = {
3368 "bpm4",
"bpm18",
"bpm14",
"bpm12"
3370 local_add_these_elements =
false;
3371 for (
const auto& bpm_name : kSummaryBPMNames) {
3372 if (element_name.Contains(bpm_name)) {
3373 local_add_these_elements =
true;
3378 if( local_add_these_elements && local_add_element){
3386 if(local_ps_element) {
3387 element_value = tmp_channel->
GetValue();
3390 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3393 if( local_print_flag && local_ps_element) {
3394 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3395 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3402 for(
size_t i=0; i<
fBPMCombo.size(); i++)
3404 for (Int_t j=0;j<2;j++){
3407 element_value = 0.0;
3408 element_value_err = 0.0;
3409 element_value_width = 0.0;
3411 local_add_these_elements=element_name.Contains(
"bpm4")||element_name.Contains(
"bpm18")||element_name.Contains(
"bpm14")||element_name.Contains(
"bpm12");
3413 if( local_add_these_elements && local_add_element){
3421 if(local_ps_element) {
3422 element_value = tmp_channel->
GetValue();
3425 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3428 if( local_print_flag && local_ps_element) {
3429 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3430 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
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.
#define REGISTER_SUBSYSTEM_FACTORY(A)
UInt_t GetGlobalErrorFlag(TString evtype, Int_t evMode, Double_t stabilitycut)
EQwBeamInstrumentType GetQwBeamInstrumentType(TString name)
TString GetQwBeamInstrumentTypeName(EQwBeamInstrumentType type)
std::shared_ptr< VQwClock > VQwClock_ptr
std::shared_ptr< VQwBCM > VQwBCM_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
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
Subsystem aggregating beamline instruments (BPMs, BCMs, clocks, etc.)
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...
std::vector< QwLinearDiodeArray > fLinearArray
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.
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 type, TString name)
A fast way of creating a BPM stripline of specified 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 type, TString name)
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)