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);
86 detector_id.
fIndex = elementlist.size()-1;
96 elementlist.push_back(element);
97 detector_id.
fIndex = elementlist.size()-1;
113 Bool_t ldebug=kFALSE;
115 TString varname, varvalue;
117 TString combotype, comboname, dev_name;
120 Bool_t combolistdecoded;
123 std::vector<TString> fDeviceName;
124 std::vector<TString> fProperty;
125 std::vector<TString> fType;
126 std::vector<Double_t> fQWeight;
127 std::vector<Double_t> fXWeight;
128 std::vector<Double_t> fYWeight;
129 Double_t sumQweights = 0.0;
131 std::vector<QwBeamDetectorID> clock_needed_list;
140 Int_t buffer_offset = 0;
149 if (mapstr.
ReturnValue(
"vqwk_buffer_offset",buffer_offset)) {
150 QwDebug <<
"QwBeamLine::LoadChannelMap: "
153 <<
"; vqwk_buffer_offset: " << buffer_offset <<
QwLog::endl;
159 if (varname==
"begin"){
163 combotype = varvalue;
164 combolistdecoded = kFALSE;
174 for(
size_t i=0;i<fDeviceName.size();i++)
175 sumQweights+=fabs(fQWeight[i]);
176 combolistdecoded = kTRUE;
181 if (mapstr.
PopValue(
"name",varvalue)) {
182 comboname = varvalue;
195 QwError <<
"QwBeamLine::LoadChannelMap: Unknown device: "
196 << dev_name <<
" used in "<< comboname
197 <<
". This combination will not be decoded!"
200 combolistdecoded = kTRUE;
204 fDeviceName.push_back(dev_name);
212 if(combotype ==
"combinedbpm"){
218 if(combotype ==
"energycalculator"){
219 fType.push_back(dettype);
229 localComboID.
fdetectorname=comboname(0,comboname.Sizeof()-1);
233 QwError <<
"QwBeamLine::LoadChannelMap: Unknown detector type: "
234 << combotype <<
", the detector "<<comboname<<
" will not be decoded "
240 if((localComboID.
fIndex==-1) && deviceok) {
250 for(
size_t i=0;i<fDeviceName.size();i++){
253 fQWeight[i],sumQweights );
267 for(
size_t i=0;i<fDeviceName.size();i++){
270 fStripline.at(index).get(), fQWeight[i],fXWeight[i],
271 fYWeight[i],sumQweights );
287 for(
size_t i=0;i<fDeviceName.size();i++){
317 if (! lineok)
continue;
319 localBeamDetectorID.
fIndex=
323 if(localBeamDetectorID.
fIndex==-1){
333 local_element = &(
fCavity.at(index));
341 local_element =
fBCM.at(index).get();
345 local_element =
fClock.at(index).get();
349 local_element = &(
fQPD.at(index));
358 QwDebug <<
"Try to push device "
360 <<
" (address=" << std::hex << local_element << std::dec
361 <<
") onto the clock_needed_list"
363 clock_needed_list.push_back(localBeamDetectorID);
375 std::unique_ptr<QwParameterFile> section;
376 std::vector<TString> publishinfo;
378 if (varvalue ==
"PUBLISH") {
380 while (section->ReadNextLine()) {
381 section->TrimComment();
382 section->TrimWhitespace();
383 for (
int ii = 0; ii < 4; ii++) {
384 varvalue = section->GetTypedNextToken<TString>();
385 if (varvalue.Length()) {
386 publishinfo.push_back(varvalue);
389 if (publishinfo.size() == 4)
404 std::cout<<
"QwBeamLine::Done with Load map channel \n";
412 std::string clockname;
413 for (
size_t i=0; i<clock_needed_list.size();i++ ) {
414 local_element =
GetElement(clock_needed_list[i]);
416 if (clockname.empty()){
417 QwWarning <<
"QwBeamLine::LoadChannelMap "
419 <<
" needs a reference clock, but the reference clock name is empty"
424 QwMessage <<
"QwBeamLine::LoadChannelMap "
425 <<
"Setting " <<
fClock.at(index).get()->GetElementName()
426 <<
" as the reference clock for channel "
431 QwWarning <<
"QwBeamLine::LoadChannelMap "
452 device_type.ToLower();
454 device_name.ToLower();
457 if (det_index == -1) {
462 TString channel_name;
471 channel_name.ToLower();
485 fBCM[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut),LLX,ULX,stabilitycut,burplevel);
496 QwMessage<<
"QwBeamLine:QwBPMStripline "<<channel_name<<
" "<<varvalue<<
" "<<stabilitycut<<
QwLog::endl;
498 fStripline[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
502 fQPD[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
506 fLinearArray[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
511 fCavity[det_index].SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
517 fBCMCombo[det_index].get()->SetSingleEventCuts(
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
522 fBPMCombo[det_index].get()->SetSingleEventCuts(channel_name,
GetGlobalErrorFlag(varvalue,eventcut_flag,stabilitycut), LLX, ULX, stabilitycut, burplevel);
529 fStripline[i].get()->SetEventCutMode(eventcut_flag);
531 for (
size_t i=0;i<
fQPD.size();i++)
532 fQPD[i].SetEventCutMode(eventcut_flag);
537 for (
size_t i=0;i<
fCavity.size();i++)
538 fCavity[i].SetEventCutMode(eventcut_flag);
540 for (
size_t i=0;i<
fBCM.size();i++)
541 fBCM[i].get()->SetEventCutMode(eventcut_flag);
543 for (
size_t i=0;i<
fClock.size();i++)
544 fClock[i].get()->SetEventCutMode(eventcut_flag);
550 fBCMCombo[i].get()->SetEventCutMode(eventcut_flag);
553 fBPMCombo[i].get()->SetEventCutMode(eventcut_flag);
567 Bool_t ldebug=kFALSE;
568 TString varname, varvalue;
571 TString devname,devtype;
573 Double_t devOffsetX = 0,devOffsetY = 0, devOffsetZ = 0;
574 Double_t devSENfactor = 0, devAlphaX = 0, devAlphaY = 0;
575 TString rotation_stat;
578 if(ldebug)std::cout<<
"QwBeamLine::LoadGeometryParameters("<< mapfile<<
")\n";
584 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
590 Bool_t notfound=kTRUE;
594 devtype.Remove(TString::kBoth,
' ');
597 devname.Remove(TString::kBoth,
' ');
600 QwError <<
"Error! Unknown detector type '"<<devtype
609 QwWarning <<
"Unrecognized detector name '" << devname
610 <<
"' in Geometry file. This may not be a problem, "
611 <<
"if we're using a reduced channel map."
631 std::cout<<
"####################\n";
632 std::cout<<
"! device type, device_name, Xoffset, Yoffset, Zoffset, BSEN scaling factor, AlpaX, AlpaY\n"<<std::endl;
638 <<devSENfactor <<
" / "
649 QwWarning <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm in qweak_beamline_geometry.map: "
656 TString localname =
fStripline.at(index).get()->GetElementName();
658 if(ldebug) std::cout<<
"element name =="<<localname
659 <<
"== to be compared to =="<<devname<<
"== \n";
661 if(localname==devname){
662 if(ldebug) std::cout<<
" I found the bpm !\n";
673 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown combined bpm in qweak_beamline_geometry.map: "
674 <<devname<<
" Check the combined bpm names!\n "
680 TString localname =
fBPMCombo.at(index).get()->GetElementName();
683 std::cout<<
"element name =="<<localname<<
"== to be compared to =="<<devname<<
"== \n";
685 if(localname==devname){
686 if(ldebug) std::cout<<
" I found the combinedbpm !\n";
687 fBPMCombo.at(index).get()->GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
694 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown bpm : "
695 <<devname<<
" will not be assigned with geometry parameters. \n"
700 TString localname =
fCavity.at(index).GetElementName();
702 if(ldebug) std::cout<<
"element name =="<<localname
703 <<
"== to be compared to =="<<devname<<
"== \n";
705 if(localname==devname){
706 if(ldebug) std::cout<<
" I found the cavity bpm !\n";
707 fCavity.at(index).GetSurveyOffsets(devOffsetX,devOffsetY,devOffsetZ);
714 QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown QPD : "
715 <<devname<<
" will not be assigned with calibration factors. \n"
720 TString localname =
fQPD.at(index).GetElementName();
722 if(ldebug) std::cout<<
"element name =="<<localname
723 <<
"== to be compared to =="<<devname<<
"== \n";
725 if(localname==devname){
726 if(ldebug) std::cout<<
"I found the QPD !\n";
727 fQPD.at(index).GetCalibrationFactors(devAlphaX, devAlphaY);
731 else QwError <<
"QwBeamLine::LoadGeometryDefinition: Unknown device type : "<< devtype <<
732 ". Are you sure we have this in the beamline? I am skipping this."<<
QwLog::endl;
737 if(ldebug) std::cout <<
"line read in the geometry file = " << lineread<<
" \n";
749 Bool_t ldebug=kFALSE;
750 TString varname, varvalue;
753 TString devname, devtype;
756 if(ldebug) std::cout <<
"QwBeamLine::LoadMockDataParameters(" << mapfile <<
") \n" << std::endl;
764 if(ldebug) std::cout <<
"Line read so far = " << lineread <<
"\n" << std::endl;
772 devtype.Remove(TString::kBoth,
' ');
775 devname.Remove(TString::kBoth,
' ');
779 QwError <<
"Error! Unknown detector type '" << devtype <<
"' in MockDataParameters file!" <<
QwLog::endl;
785 QwWarning <<
"Unrecognized detector name '" << devname <<
"' in MockDataParameters file." <<
QwLog::endl;
799 Bool_t ldebug = kFALSE;
802 TString angle,xgain,ygain;
803 Double_t rotation_angle = 0;
807 token.Remove(TString::kBoth,
'\0');
809 if(token.Contains(
"unrotated")){
810 if(ldebug) std::cout<<
" unrotated "<<std::endl;
813 else if(token.Contains(
"rotation")){
817 if(token.Contains(
"=")){
818 angle = token.Remove(0,9);
819 rotation_angle = atof(angle);
820 if(ldebug) std::cout<<
"Rotation angle = "<<rotation_angle<<std::endl;
826 if(token.Contains(
"xgain")){
827 xgain = token.Remove(0,6);
828 if(ldebug) std::cout<<
" xgain ="<<xgain<<std::endl;
832 if(token.Contains(
"ygain")){
833 ygain = token.Remove(0,6);
834 if(ldebug) std::cout<<
" ygain ="<<ygain<<std::endl;
849 Bool_t ldebug=kFALSE;
853 if(ldebug)std::cout<<
"QwBeamLine::LoadInputParameters("<< pedestalfile<<
")\n";
861 if(ldebug)std::cout<<
" line read so far ="<<lineread<<
"\n";
869 varname.Remove(TString::kBoth,
' ');
876 Bool_t notfound=kTRUE;
883 TString localname =
fStripline[i].get()->GetSubElementName(j);
885 if(ldebug) std::cout<<
"Stripline element name =="<<localname
886 <<
"== to be compared to =="<<varname<<
"== \n";
887 if(localname==varname)
889 if(ldebug) std::cout<<
" I found it !\n";
890 fStripline[i].get()->SetSubElementPedestal(j,varped);
891 fStripline[i].get()->SetSubElementCalibrationFactor(j,varcal);
898 for(
size_t i=0;i<
fQPD.size();i++)
902 TString localname =
fQPD[i].GetSubElementName(j);
904 if(ldebug) std::cout<<
"QPD element name =="<<localname
905 <<
"== to be compared to =="<<varname<<
"== \n";
906 if(localname==varname)
908 if(ldebug) std::cout<<
" I found it !\n";
909 fQPD[i].SetSubElementPedestal(j,varped);
910 fQPD[i].SetSubElementCalibrationFactor(j,varcal);
921 TString localname =
fLinearArray[i].GetSubElementName(j);
923 if(ldebug) std::cout<<
"LinearArray element name =="<<localname
924 <<
"== to be compared to =="<<varname<<
"== \n";
925 if(localname==varname)
927 if(ldebug) std::cout<<
" I found it !\n";
929 fLinearArray[i].SetSubElementCalibrationFactor(j,varcal);
936 for(
size_t i=0;i<
fCavity.size();i++)
940 TString localname =
fCavity[i].GetSubElementName(j);
942 if(ldebug) std::cout<<
"Cavity element name =="<<localname
943 <<
"== to be compared to =="<<varname<<
"== \n";
944 if(localname==varname)
946 if(ldebug) std::cout<<
" I found it !\n";
947 fCavity[i].SetSubElementPedestal(j,varped);
948 fCavity[i].SetSubElementCalibrationFactor(j,varcal);
955 for(
size_t i=0;i<
fBCM.size();i++) {
956 if(
fBCM[i].get()->GetElementName()==varname)
958 fBCM[i].get()->SetPedestal(varped);
959 fBCM[i].get()->SetCalibrationFactor(varcal);
965 for(
size_t i=0;i<
fClock.size();i++) {
966 if(
fClock[i].get()->GetElementName()==varname)
968 fClock[i].get()->SetPedestal(varped);
969 fClock[i].get()->SetCalibrationFactor(varcal);
978 std::cout<<varname<<
" I found it ! "<<varcal<<
" ped. "<<varped<<
"\n";
989 if(ldebug) std::cout<<
" line read in the pedestal + cal file ="<<lineread<<
" \n";
1002 for (
size_t i = 0; i <
fStripline.size(); i++)
1004 fStripline[i].get()->RandomizeEventData(helicity, time);
1008 for (
size_t i = 0; i <
fCavity.size(); i++)
1012 for (
size_t i = 0; i <
fBCM.size(); i++)
1014 fBCM[i].get()->RandomizeEventData(helicity, time);
1024 fBCMCombo[i].get()->RandomizeEventData(helicity, time);
1028 fBCMCombo[i].get()->GetProjectedCharge(bcm);
1033 for (
size_t i=0; i<
fBPMCombo.size(); i++){
1034 fBPMCombo[i].get()->RandomizeEventData(helicity, time);
1039 fBPMCombo[i].get()->GetProjectedPosition(bpm);
1055 for (
size_t j=0; j<
fECalculator[i].GetNumberOfElements(); j++)
1075 std::vector<UInt_t> elements;
1097 std::vector<UInt_t> subbankheader;
1098 std::vector<UInt_t> rocheader;
1099 if (elements.size() > 0) {
1102 subbankheader.clear();
1103 subbankheader.push_back(elements.size() + 1);
1104 subbankheader.push_back((
fCurrentBank_ID << 16) | (0x01 << 8) | (1 & 0xff));
1109 rocheader.push_back(subbankheader.size() + elements.size() + 1);
1110 rocheader.push_back((
fCurrentROC_ID << 16) | (0x10 << 8) | (1 & 0xff));
1114 buffer.insert(buffer.end(), rocheader.begin(), rocheader.end());
1115 buffer.insert(buffer.end(), subbankheader.begin(), subbankheader.end());
1116 buffer.insert(buffer.end(), elements.begin(), elements.end());
1167 Bool_t lkDEBUG=kFALSE;
1170 if (index>=0 && num_words>0){
1173 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1174 <<
"Begin processing ROC" << roc_id
1175 <<
" and subbank "<<bank_id
1176 <<
" number of words="<<num_words<<std::endl;
1177 if (buffer[0]==0xf0f0f0f0 && num_words%2==1){
1180 std::cout <<
"QwBeamLine::ProcessEvBuffer: "
1181 <<
"Skipped padding word 0xf0f0f0f0 at beginning of buffer."
1194 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1195 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1207 std::cout<<
"found qpd data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1208 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1221 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1234 std::cout<<
"found stripline data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1235 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1247 std::cout<<
"found bcm data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1248 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1259 std::cout<<
"found clock data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1260 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1271 std::cout<<
"found halo monitor data for "<<
fBeamDetectorID[i].fdetectorname<<std::endl;
1272 std::cout<<
"word left to read in this buffer:"<<num_words-
fBeamDetectorID[i].fWordInSubbank<<std::endl;
1292 Bool_t status=kTRUE;
1294 for(
size_t i=0;i<
fBCM.size();i++){
1295 status &=
fBCM[i].get()->ApplySingleEventCuts();
1296 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->BCM[ "<<i
1297 <<
" , "<<
fBCM[i].get()->GetElementName()<<
" ] ******\n";
1300 for(
size_t i=0;i<
fClock.size();i++){
1301 status &=
fClock[i].get()->ApplySingleEventCuts();
1302 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->Clock[ "<<i
1303 <<
" , "<<
fClock[i].get()->GetElementName()<<
" ] ******\n";
1308 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->HaloMonitor[ "<<i
1309 <<
" , "<<
fHaloMonitor[i].GetElementName()<<
" ] ******\n";
1313 status &=
fStripline[i].get()->ApplySingleEventCuts();
1314 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMStripline[ "<<i
1315 <<
" , "<<
fStripline[i].get()->GetElementName()<<
" ] *****\n";
1319 for(
size_t i=0;i<
fQPD.size();i++){
1320 status &=
fQPD[i].ApplySingleEventCuts();
1321 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->QPD[ "<<i
1322 <<
" , "<<
fQPD[i].GetElementName()<<
" ] *****\n";
1326 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->LinearArray[ "<<i
1327 <<
" , "<<
fLinearArray[i].GetElementName()<<
" ] *****\n";
1330 for(
size_t i=0;i<
fCavity.size();i++){
1331 status &=
fCavity[i].ApplySingleEventCuts();
1332 if(!status &&
bDEBUG) std::cout<<
"******** QwBeamLine::SingleEventCuts()->BPMCavity[ "<<i
1333 <<
" , "<<
fCavity[i].GetElementName()<<
" ] *****\n";
1337 status &=
fBCMCombo[i].get()->ApplySingleEventCuts();
1338 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBCM[ "<<i
1339 <<
" , "<<
fBCMCombo[i].get()->GetElementName()<<
" ] ******\n";
1343 status &=
fBPMCombo[i].get()->ApplySingleEventCuts();
1344 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->CombinedBPM[ "<<i
1345 <<
" , "<<
fBPMCombo[i].get()->GetElementName()<<
" ] ******\n";
1350 if(!status &&
bDEBUG) std::cout<<
"******* QwBeamLine::SingleEventCuts()->EnergyCalculator[ "<<i
1351 <<
" , "<<
fECalculator[i].GetElementName()<<
" ] ******\n";
1367 Bool_t burpstatus = kFALSE;
1371 for(
size_t i=0;i<input->
fClock.size();i++){
1373 burpstatus |= (this->
fClock[i].get())->CheckForBurpFail(input->
fClock[i].get());
1375 for(
size_t i=0;i<input->
fStripline.size();i++){
1379 for(
size_t i=0;i<input->
fQPD.size();i++){
1387 for(
size_t i=0;i<input->
fCavity.size();i++){
1391 for(
size_t i=0;i<input->
fBCM.size();i++){
1393 burpstatus |= (this->
fBCM[i].get())->CheckForBurpFail(input->
fBCM[i].get());
1395 for(
size_t i=0;i<input->
fBCMCombo.size();i++){
1397 burpstatus |= (this->
fBCMCombo[i].get())->CheckForBurpFail(input->
fBCMCombo[i].get());
1399 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
1401 burpstatus |= (this->
fBPMCombo[i].get())->CheckForBurpFail(input->
fBPMCombo[i].get());
1424 for(
size_t i=0;i<
fClock.size();i++){
1425 fClock[i].get()->PrintErrorCounters();
1428 for(
size_t i=0;i<
fBCM.size();i++){
1429 fBCM[i].get()->PrintErrorCounters();
1440 for(
size_t i=0;i<
fQPD.size();i++){
1441 fQPD[i].PrintErrorCounters();
1448 for(
size_t i=0;i<
fCavity.size();i++){
1449 fCavity[i].PrintErrorCounters();
1453 fBCMCombo[i].get()->PrintErrorCounters();
1457 fBPMCombo[i].get()->PrintErrorCounters();
1470 for(
size_t i=0;i<
fClock.size();i++){
1471 fClock[i].get()->IncrementErrorCounters();
1473 for(
size_t i=0;i<
fBCM.size();i++){
1474 fBCM[i].get()->IncrementErrorCounters();
1480 fStripline[i].get()->IncrementErrorCounters();
1482 for(
size_t i=0;i<
fQPD.size();i++){
1483 fQPD[i].IncrementErrorCounters();
1488 for(
size_t i=0;i<
fCavity.size();i++){
1489 fCavity[i].IncrementErrorCounters();
1492 fBCMCombo[i].get()->IncrementErrorCounters();
1495 fBPMCombo[i].get()->IncrementErrorCounters();
1506 UInt_t ErrorFlagtmp;
1508 for(
size_t i=0;i<
fBCM.size();i++){
1509 ErrorFlagtmp =
fBCM[i].get()->GetEventcutErrorFlag();
1510 ErrorFlag |=ErrorFlagtmp;
1513 ErrorFlag |=
fStripline[i].get()->GetEventcutErrorFlag();
1515 for(
size_t i=0;i<
fQPD.size();i++){
1516 ErrorFlag |=
fQPD[i].GetEventcutErrorFlag();
1521 for(
size_t i=0;i<
fCavity.size();i++){
1522 ErrorFlag |=
fCavity[i].GetEventcutErrorFlag();
1525 ErrorFlag |=
fBCMCombo[i].get()->GetEventcutErrorFlag();
1528 ErrorFlag |=
fBPMCombo[i].get()->GetEventcutErrorFlag();
1542 UInt_t ErrorFlagtmp;
1544 for(
size_t i=0;i<
fBCM.size();i++){
1545 ErrorFlagtmp =
fBCM[i].get()->UpdateErrorFlag();
1546 ErrorFlag |=ErrorFlagtmp;
1549 ErrorFlag |=
fStripline[i].get()->UpdateErrorFlag();
1551 for(
size_t i=0;i<
fQPD.size();i++){
1552 ErrorFlag |=
fQPD[i].UpdateErrorFlag();
1557 for(
size_t i=0;i<
fCavity.size();i++){
1558 ErrorFlag |=
fCavity[i].UpdateErrorFlag();
1561 ErrorFlag |=
fBCMCombo[i].get()->UpdateErrorFlag();
1564 ErrorFlag |=
fBPMCombo[i].get()->UpdateErrorFlag();
1587 for(
size_t i=0;i<input->
fStripline.size();i++)
1589 for(
size_t i=0;i<input->
fQPD.size();i++)
1590 (this->
fQPD[i]).UpdateErrorFlag(&(input->
fQPD[i]));
1593 for(
size_t i=0;i<input->
fCavity.size();i++)
1595 for(
size_t i=0;i<input->
fBCM.size();i++){
1596 (this->
fBCM[i].get())->UpdateErrorFlag(input->
fBCM[i].get());
1598 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
1600 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
1619 for(
size_t i=0;i<
fClock.size();i++)
1620 fClock[i].get()->ProcessEvent();
1626 for(
size_t i=0;i<
fCavity.size();i++)
1629 for(
size_t i=0;i<
fBCM.size();i++){
1630 fBCM[i].get()->ProcessEvent();
1633 for(
size_t i=0;i<
fQPD.size();i++)
1673 Bool_t status = kTRUE;
1682 device_type.ToLower();
1683 device_prop.ToLower();
1688 if (device_type ==
"combobpm")
1690 else if (device_type ==
"combobcm")
1692 else if (device_type ==
"comboenergy")
1694 else if (device_type ==
"scaler")
1703 tmp_channel =
GetChannel(type_id,index,device_prop);
1707 if (tmp_channel == NULL) {
1708 QwError <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" not found" <<
QwLog::endl;
1711 QwDebug <<
"QwBeamLine::PublishInternalValues(): " << publish_name <<
" found" <<
QwLog::endl;
1724 Bool_t status = kFALSE;
1727 std::vector<TString> publishinfo(4,TString(
""));
1728 publishinfo.at(0) = device_name;
1733 TString name = device_name;
1734 TString device_prop =
"value";
1735 if (device_name.EndsWith(
"WS")){
1736 name = device_name(0,device_name.Length()-2);
1738 }
else if (device_name.EndsWith(
"Q")){
1739 name = device_name(0,device_name.Length()-1);
1741 }
else if (device_name.EndsWith(
"XSlope")){
1742 name = device_name(0,device_name.Length()-6);
1744 }
else if (device_name.EndsWith(
"YSlope")){
1745 name = device_name(0,device_name.Length()-6);
1747 }
else if (device_name.EndsWith(
"X")){
1748 name = device_name(0,device_name.Length()-1);
1750 }
else if (device_name.EndsWith(
"Y")){
1751 name = device_name(0,device_name.Length()-1);
1763 publishinfo.at(3) = device_prop;
1769 tmp_channel =
GetChannel(type_id,index,publishinfo.at(3));
1783 for(
size_t i=0;i<
fClock.size();i++)
1784 fClock[i].get()->ClearEventData();
1787 for(
size_t i=0;i<
fCavity.size();i++)
1789 for(
size_t i=0;i<
fBCM.size();i++)
1791 for(
size_t i=0;i<
fQPD.size();i++)
1811 Bool_t ldebug=kFALSE;
1814 std::cout<<
"QwBeamLine::GetDetectorIndex\n";
1815 std::cout<<
"type_id=="<<type_id<<
" name="<<name<<
"\n";
1854 tmp_ptr = &(
fQPD.at(index));
1860 tmp_ptr =
fBCM.at(index).get();
1875 tmp_ptr = &(
fCavity.at(index));
1878 tmp_ptr =
fClock.at(index).get();
1881 TString loc=
"QwBeamLine::GetElement called by "
1882 +this->
GetName()+
" with invalid arguments: "
1885 throw std::invalid_argument(loc.Data());
1905 if (device_prop ==
"x")
1907 else if (device_prop ==
"y")
1909 else if (device_prop ==
"ef")
1913 if (device_prop ==
"x")
1915 else if (device_prop ==
"y")
1917 else if (device_prop ==
"ef")
1918 tmp_channel =
fBPMCombo.at(index)->GetEffectiveCharge();
1919 else if (device_prop ==
"xp")
1920 tmp_channel =
fBPMCombo.at(index)->GetAngleX();
1921 else if (device_prop ==
"yp")
1922 tmp_channel =
fBPMCombo.at(index)->GetAngleY();
1927 tmp_channel =
dynamic_cast<const VQwBCM*
>(
GetElement(TypeID,index))->GetCharge();
1933 tmp_channel =
fClock.at(index)->GetTime();
1935 TString loc=
"QwBeamLine::GetChannel called by "
1936 +this->
GetName()+
" with invalid arguments: "
1939 throw std::invalid_argument(loc.Data());
1949 for (std::vector<VQwBPM_ptr >::iterator stripline =
fStripline.begin(); stripline !=
fStripline.end(); ++stripline) {
1950 if ((*stripline).get()->GetElementName() == name) {
1951 return (*stripline).get();
1964 for (std::vector<QwBPMCavity>::iterator cavity =
fCavity.begin(); cavity !=
fCavity.end(); ++cavity) {
1965 if (cavity->GetElementName() == name) {
1979 if (!
fBCM.empty()) {
1980 for (std::vector<VQwBCM_ptr >::iterator bcm =
fBCM.begin(); bcm !=
fBCM.end(); ++bcm) {
1981 if ((*bcm).get()->GetElementName() == name) {
1982 return (*bcm).get();
1999 for (std::vector<VQwClock_ptr >::iterator clock =
fClock.begin(); clock !=
fClock.end(); ++clock) {
2000 if ((*clock).get()->GetElementName() == name) {
2001 return (*clock).get();
2018 for (std::vector<VQwBCM_ptr>::iterator cbcm =
fBCMCombo.begin(); cbcm !=
fBCMCombo.end(); ++cbcm) {
2019 if ((*cbcm).get()->GetElementName() == name) {
2020 return (*cbcm).get();
2036 for (std::vector<VQwBPM_ptr>::iterator cbpm =
fBPMCombo.begin(); cbpm !=
fBPMCombo.end(); ++cbpm) {
2037 if ((*cbpm).get()->GetElementName() == name) {
2038 return (*cbpm).get();
2053 if (ecal->GetElementName() == name) {
2074 if (halo->GetElementName() == name) {
2133 for(
size_t i=0;i<input->
fClock.size();i++)
2135 for(
size_t i=0;i<input->
fStripline.size();i++)
2137 for(
size_t i=0;i<input->
fQPD.size();i++)
2141 for(
size_t i=0;i<input->
fCavity.size();i++)
2143 for(
size_t i=0;i<input->
fBCM.size();i++)
2144 *(this->
fBCM[i].get())=*(input->
fBCM[i].get());
2147 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2149 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2158 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2177 for(
size_t i=0;i<input->
fClock.size();i++)
2179 for(
size_t i=0;i<input->
fStripline.size();i++)
2181 for(
size_t i=0;i<input->
fCavity.size();i++)
2183 for(
size_t i=0;i<input->
fQPD.size();i++)
2187 for(
size_t i=0;i<input->
fBCM.size();i++)
2188 *(this->
fBCM[i].get())+=*(input->
fBCM[i].get());
2191 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2193 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2202 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2220 for(
size_t i=0;i<input->
fClock.size();i++)
2222 for(
size_t i=0;i<input->
fStripline.size();i++)
2224 for(
size_t i=0;i<input->
fCavity.size();i++)
2226 for(
size_t i=0;i<input->
fQPD.size();i++)
2230 for(
size_t i=0;i<input->
fBCM.size();i++)
2231 *(this->
fBCM[i].get())-=*(input->
fBCM[i].get());
2234 for(
size_t i=0;i<input->
fBCMCombo.size();i++)
2236 for(
size_t i=0;i<input->
fBPMCombo.size();i++)
2245 for(
size_t j=0;j<input->
fPublishList.at(i).size();j++){
2263 for(
size_t i=0;i<innumer->
fClock.size();i++)
2264 this->
fClock[i].get()->Ratio(*(innumer->
fClock[i].get()),
2265 *(indenom->
fClock[i].get()));
2266 for(
size_t i=0;i<innumer->
fStripline.size();i++)
2269 for(
size_t i=0;i<innumer->
fCavity.size();i++)
2271 for(
size_t i=0;i<innumer->
fQPD.size();i++)
2275 for(
size_t i=0;i<innumer->
fBCM.size();i++)
2276 this->
fBCM[i].get()->Ratio(*(innumer->
fBCM[i].get()),
2277 *(indenom->
fBCM[i].get()));
2280 for(
size_t i=0;i<innumer->
fBCMCombo.size();i++)
2283 for(
size_t i=0;i<innumer->
fBPMCombo.size();i++)
2300 for(
size_t i=0;i<
fClock.size();i++)
fClock[i].get()->Scale(factor);
2305 for(
size_t i=0;i<
fBCM.size();i++)
fBCM[i].get()->Scale(factor);
2316 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->CalculateRunningAverage();
2321 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->CalculateRunningAverage();
2323 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
fBCMCombo[i].get()->CalculateRunningAverage();
2324 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
fBPMCombo[i].get()->CalculateRunningAverage();
2333 for (
size_t i = 0; i <
fClock.size(); i++)
fClock[i].get()->PrintValue();
2343 for (
size_t i = 0; i <
fBCM.size(); i++)
fBCM[i].get()->PrintValue();
2361 for (
size_t i = 0; i <
fClock.size(); i++)
2362 fClock[i].get()->AccumulateRunningSum(*(value->
fClock[i].get()), count, ErrorMask);
2363 for (
size_t i = 0; i <
fStripline.size(); i++)
2365 for (
size_t i = 0; i <
fCavity.size(); i++)
2367 for (
size_t i = 0; i <
fBCM.size(); i++)
2368 fBCM[i].get()->AccumulateRunningSum(*(value->
fBCM[i].get()), count, ErrorMask);
2369 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2370 fBCMCombo[i].get()->AccumulateRunningSum(*(value->
fBCMCombo[i].get()), count, ErrorMask);
2371 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2372 fBPMCombo[i].get()->AccumulateRunningSum(*(value->
fBPMCombo[i].get()), count, ErrorMask);
2375 for (
size_t i = 0; i <
fQPD.size(); i++)
2389 for (
size_t i = 0; i <
fClock.size(); i++)
2390 fClock[i].get()->DeaccumulateRunningSum(*(value->
fClock[i].get()), ErrorMask);
2391 for (
size_t i = 0; i <
fStripline.size(); i++)
2393 for (
size_t i = 0; i <
fCavity.size(); i++)
2395 for (
size_t i = 0; i <
fBCM.size(); i++)
2396 fBCM[i].get()->DeaccumulateRunningSum(*(value->
fBCM[i].get()), ErrorMask);
2397 for (
size_t i = 0; i <
fBCMCombo.size(); i++)
2399 for (
size_t i = 0; i <
fBPMCombo.size(); i++)
2401 for (
size_t i = 0; i <
fQPD.size(); i++)
2419 if(
typeid(*value)!=
typeid(*
this))
2433 else if(input->
fBCM.size()!=
fBCM.size())
2456 }
else if(input->
fQPD.size()!=
fQPD.size()){
2470 for(
size_t i=0;i<
fClock.size();i++)
2471 fClock[i].get()->ConstructHistograms(folder,prefix);
2474 fStripline[i].get()->ConstructHistograms(folder,prefix);
2476 for(
size_t i=0;i<
fQPD.size();i++)
2482 for(
size_t i=0;i<
fCavity.size();i++)
2485 for(
size_t i=0;i<
fBCM.size();i++)
2486 fBCM[i].get()->ConstructHistograms(folder,prefix);
2492 fBCMCombo[i].get()->ConstructHistograms(folder,prefix);
2495 fBPMCombo[i].get()->ConstructHistograms(folder,prefix);
2505 for(
size_t i=0;i<
fClock.size();i++)
2506 fClock[i].get()->FillHistograms();
2509 for(
size_t i=0;i<
fQPD.size();i++)
2513 for(
size_t i=0;i<
fCavity.size();i++)
2515 for(
size_t i=0;i<
fBCM.size();i++)
2516 fBCM[i].get()->FillHistograms();
2534 for(
size_t i = 0; i <
fClock.size(); i++)
2535 fClock[i].get()->ConstructBranchAndVector(tree, prefix, values);
2536 for(
size_t i = 0; i <
fStripline.size(); i++)
2537 fStripline[i].get()->ConstructBranchAndVector(tree, prefix, values);
2538 for(
size_t i = 0; i <
fQPD.size(); i++)
2542 for(
size_t i = 0; i <
fCavity.size(); i++)
2544 for(
size_t i = 0; i <
fBCM.size(); i++)
2545 fBCM[i].get()->ConstructBranchAndVector(tree, prefix, values);
2548 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2549 fBCMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2550 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2551 fBPMCombo[i].get()->ConstructBranchAndVector(tree, prefix, values);
2561 for(
size_t i = 0; i <
fClock.size(); i++)
2562 fClock[i].get()->ConstructBranch(tree, prefix);
2563 for(
size_t i = 0; i <
fStripline.size(); i++)
2564 fStripline[i].get()->ConstructBranch(tree, prefix);
2565 for(
size_t i = 0; i <
fQPD.size(); i++)
2569 for(
size_t i = 0; i <
fBCM.size(); i++)
2570 fBCM[i].get()->ConstructBranch(tree, prefix);
2571 for(
size_t i = 0; i <
fCavity.size(); i++)
2572 fStripline[i].get()->ConstructBranch(tree, prefix);
2575 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2576 fBCMCombo[i].get()->ConstructBranch(tree, prefix);
2577 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2578 fBPMCombo[i].get()->ConstructBranch(tree, prefix);
2589 TString tmp,varname,varvalue;
2591 std::unique_ptr<QwParameterFile> nextmodule;
2595 tmp=
"QwBPMStripline";
2599 for(
size_t i = 0; i <
fStripline.size(); i++)
2600 fStripline[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2608 for(
size_t i = 0; i <
fQPD.size(); i++)
2612 tmp=
"QwLinearDiodeArray";
2624 for(
size_t i = 0; i <
fCavity.size(); i++)
2633 for(
size_t i = 0; i <
fBCM.size(); i++)
2634 fBCM[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2641 for(
size_t i = 0; i <
fClock.size(); i++)
2642 fClock[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2645 tmp=
"QwHaloMonitor";
2654 tmp=
"QwCombinedBCM";
2658 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2659 fBCMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2663 tmp=
"QwCombinedBPM";
2667 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2668 fBPMCombo[i].get()->ConstructBranch(tree, prefix,*nextmodule);
2671 tmp=
"QwEnergyCalculator";
2685 for(
size_t i = 0; i <
fClock.size(); i++)
2686 fClock[i].get()->FillTreeVector(values);
2687 for(
size_t i = 0; i <
fStripline.size(); i++)
2689 for(
size_t i = 0; i <
fQPD.size(); i++)
2693 for(
size_t i = 0; i <
fCavity.size(); i++)
2695 for(
size_t i = 0; i <
fBCM.size(); i++)
2696 fBCM[i].get()->FillTreeVector(values);
2699 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2700 fBCMCombo[i].get()->FillTreeVector(values);
2701 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2702 fBPMCombo[i].get()->FillTreeVector(values);
2708#ifdef HAS_RNTUPLE_SUPPORT
2710void QwBeamLine::ConstructNTupleAndVector(std::unique_ptr<ROOT::RNTupleModel>& model, TString& prefix, std::vector<Double_t>& values, std::vector<std::shared_ptr<Double_t>>& fieldPtrs)
2712 for(
size_t i = 0; i <
fClock.size(); i++)
2713 fClock[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2714 for(
size_t i = 0; i <
fStripline.size(); i++)
2715 fStripline[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2716 for(
size_t i = 0; i <
fQPD.size(); i++)
2717 fQPD[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2719 fLinearArray[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2720 for(
size_t i = 0; i <
fCavity.size(); i++)
2721 fCavity[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2722 for(
size_t i = 0; i <
fBCM.size(); i++)
2723 fBCM[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2725 fHaloMonitor[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2726 for(
size_t i = 0; i <
fBCMCombo.size();i++)
2727 fBCMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2728 for(
size_t i = 0; i <
fBPMCombo.size();i++)
2729 fBPMCombo[i].get()->ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2731 fECalculator[i].ConstructNTupleAndVector(model, prefix, values, fieldPtrs);
2737void QwBeamLine::FillNTupleVector(std::vector<Double_t>& values)
const
2739 for(
size_t i = 0; i <
fClock.size(); i++)
2740 fClock[i].get()->FillNTupleVector(values);
2741 for(
size_t i = 0; i <
fStripline.size(); i++)
2742 fStripline[i].get()->FillNTupleVector(values);
2743 for(
size_t i = 0; i <
fQPD.size(); i++)
2744 fQPD[i].FillNTupleVector(values);
2747 for(
size_t i = 0; i <
fCavity.size(); i++)
2748 fCavity[i].FillNTupleVector(values);
2749 for(
size_t i = 0; i <
fBCM.size(); i++)
2750 fBCM[i].get()->FillNTupleVector(values);
2753 for(
size_t i = 0; i <
fBCMCombo.size(); i++)
2754 fBCMCombo[i].get()->FillNTupleVector(values);
2755 for(
size_t i = 0; i <
fBPMCombo.size(); i++)
2756 fBPMCombo[i].get()->FillNTupleVector(values);
2767 std::cout<<
"Name of the subsystem ="<<
fSystemName<<
"\n";
2768 std::cout<<
"there are "<<
fClock.size()<<
" clock \n";
2769 std::cout<<
"there are "<<
fStripline.size()<<
" striplines \n";
2770 std::cout<<
"there are "<<
fQPD.size()<<
" QPDs \n";
2771 std::cout<<
"there are "<<
fLinearArray.size()<<
" LinearArrays \n";
2772 std::cout<<
"there are "<<
fCavity.size()<<
" cavities \n";
2773 std::cout<<
"there are "<<
fBCM.size()<<
" bcm \n";
2774 std::cout<<
"there are "<<
fHaloMonitor.size()<<
" halomonitors \n";
2775 std::cout<<
"there are "<<
fBCMCombo.size()<<
" combined bcms \n";
2776 std::cout<<
"there are "<<
fBPMCombo.size()<<
" combined bpms \n";
2777 std::cout<<
"there are "<<
fECalculator.size()<<
" energy calculators \n";
2778 std::cout<<
" Printing Running AVG and other channel info for BCMs"<<std::endl;
2779 for(
size_t i=0;i<
fBCM.size();i++)
2780 fBCM[i].get()->PrintInfo();
2792 std::cout<<
"============================="<<std::endl;
2793 std::cout<<
" Detector ID="<<i<<std::endl;
2807 for(
size_t i=0;i<input->
fClock.size();i++) {
2812 for(
size_t i=0;i<input->
fStripline.size();i++) {
2817 this->
fBCM.reserve(input->
fBCM.size());
2818 for(
size_t i=0;i<input->
fBCM.size();i++) {
2824 for(
size_t i=0;i<input->
fBCMCombo.size();i++) {
2831 for(
size_t i=0;i<input->
fBPMCombo.size();i++){
2838#ifdef __USE_DATABASE__
2842 Bool_t local_print_flag =
false;
2844 if(local_print_flag) {
2845 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2847 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
2850 std::vector<QwDBInterface> interface;
2851 std::vector<QwParitySchema::beam_row> entrylist;
2853 UInt_t analysis_id = db->GetAnalysisID();
2855 TString measurement_type_bcm;
2856 TString measurement_type_bpm;
2857 TString measurement_type_halo;
2859 measurement_type_bcm =
2861 measurement_type_bpm =
2863 measurement_type_halo =
2873 for(i=0; i<
fBCM.size(); i++) {
2875 interface =
fBCM[i].get()->GetDBEntry();
2876 for (j=0; j<interface.size(); j++){
2877 interface.at(j).SetAnalysisID( analysis_id );
2878 interface.at(j).SetMonitorID( db );
2879 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2880 interface.at(j).PrintStatus( local_print_flag );
2881 interface.at(j).AddThisEntryToList( entrylist );
2890 interface =
fStripline[i].get()->GetDBEntry();
2891 for (j=0; j<interface.size()-5; j++){
2892 interface.at(j).SetAnalysisID( analysis_id ) ;
2893 interface.at(j).SetMonitorID( db );
2894 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2895 interface.at(j).PrintStatus( local_print_flag);
2896 interface.at(j).AddThisEntryToList( entrylist );
2899 for (j=interface.size()-5; j<interface.size(); j++){
2900 interface.at(j).SetAnalysisID( analysis_id ) ;
2901 interface.at(j).SetMonitorID( db );
2902 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2903 interface.at(j).PrintStatus( local_print_flag);
2904 interface.at(j).AddThisEntryToList( entrylist );
2914 interface =
fBPMCombo[i].get()->GetDBEntry();
2915 for (j=0; j<interface.size()-5; j++){
2916 interface.at(j).SetAnalysisID( analysis_id ) ;
2917 interface.at(j).SetMonitorID( db );
2918 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2919 interface.at(j).PrintStatus( local_print_flag);
2920 interface.at(j).AddThisEntryToList( entrylist );
2923 for (j=interface.size()-5; j<interface.size(); j++){
2924 interface.at(j).SetAnalysisID( analysis_id ) ;
2925 interface.at(j).SetMonitorID( db );
2926 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2927 interface.at(j).PrintStatus( local_print_flag);
2928 interface.at(j).AddThisEntryToList( entrylist );
2937 interface =
fBCMCombo[i].get()->GetDBEntry();
2938 for (j=0; 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 );
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_bpm );
2957 interface.at(j).PrintStatus( local_print_flag );
2958 interface.at(j).AddThisEntryToList( entrylist );
2965 for(i=0; i<
fQPD.size(); i++) {
2968 interface =
fQPD[i].GetDBEntry();
2969 for (j=0; j<interface.size()-5; j++){
2970 interface.at(j).SetAnalysisID( analysis_id ) ;
2971 interface.at(j).SetMonitorID( db );
2972 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2973 interface.at(j).PrintStatus( local_print_flag);
2974 interface.at(j).AddThisEntryToList( entrylist );
2977 for (j=interface.size()-5; j<interface.size(); j++){
2978 interface.at(j).SetAnalysisID( analysis_id ) ;
2979 interface.at(j).SetMonitorID( db );
2980 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
2981 interface.at(j).PrintStatus( local_print_flag);
2982 interface.at(j).AddThisEntryToList( entrylist );
2992 for (j=0; j<interface.size()-5; j++){
2993 interface.at(j).SetAnalysisID( analysis_id ) ;
2994 interface.at(j).SetMonitorID( db );
2995 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
2996 interface.at(j).PrintStatus( local_print_flag);
2997 interface.at(j).AddThisEntryToList( entrylist );
2999 for (j=interface.size()-5; j<interface.size(); j++){
3000 interface.at(j).SetAnalysisID( analysis_id ) ;
3001 interface.at(j).SetMonitorID( db );
3002 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3003 interface.at(j).PrintStatus( local_print_flag);
3004 interface.at(j).AddThisEntryToList( entrylist );
3010 for(i=0; i<
fCavity.size(); i++) {
3013 interface =
fCavity[i].GetDBEntry();
3014 for (j=0; j<interface.size()-5; j++){
3015 interface.at(j).SetAnalysisID( analysis_id ) ;
3016 interface.at(j).SetMonitorID( db );
3017 interface.at(j).SetMeasurementTypeID( measurement_type_bpm );
3018 interface.at(j).PrintStatus( local_print_flag);
3019 interface.at(j).AddThisEntryToList( entrylist );
3021 for (j=interface.size()-5; j<interface.size(); j++){
3022 interface.at(j).SetAnalysisID( analysis_id ) ;
3023 interface.at(j).SetMonitorID( db );
3024 interface.at(j).SetMeasurementTypeID( measurement_type_bcm );
3025 interface.at(j).PrintStatus( local_print_flag);
3026 interface.at(j).AddThisEntryToList( entrylist );
3036 for (j=0; j<interface.size(); j++){
3037 interface.at(j).SetAnalysisID( analysis_id );
3038 interface.at(j).SetMonitorID( db );
3039 interface.at(j).SetMeasurementTypeID( measurement_type_halo );
3040 interface.at(j).PrintStatus( local_print_flag );
3041 interface.at(j).AddThisEntryToList( entrylist );
3045 if(local_print_flag){
3051 if( entrylist.size() ) {
3052 auto c = db->GetScopedConnection();
3053 for (
const auto& entry: entrylist) {
3054 c->QueryExecute(entry.insert_into());
3057 QwMessage <<
"QwBeamLine::FillDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3065 Bool_t local_print_flag =
false;
3067 if(local_print_flag) {
3068 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3070 QwMessage <<
" --------------------------------------------------------------- " <<
QwLog::endl;
3073 std::vector<QwErrDBInterface> interface;
3074 std::vector<QwParitySchema::beam_errors_row> entrylist;
3076 UInt_t analysis_id = db->GetAnalysisID();
3082 for(i=0; i<
fBCM.size(); i++) {
3084 interface =
fBCM[i].get()->GetErrDBEntry();
3085 for (j=0; j<interface.size(); j++){
3086 interface.at(j).SetAnalysisID( analysis_id );
3087 interface.at(j).SetMonitorID( db );
3088 interface.at(j).PrintStatus( local_print_flag );
3089 interface.at(j).AddThisEntryToList( entrylist );
3091 if(local_print_flag) printf(
"\n");
3098 interface =
fStripline[i].get()->GetErrDBEntry();
3099 for (j=0; j<interface.size(); j++){
3100 interface.at(j).SetAnalysisID( analysis_id ) ;
3101 interface.at(j).SetMonitorID( db );
3102 interface.at(j).PrintStatus( local_print_flag );
3103 interface.at(j).AddThisEntryToList( entrylist );
3105 if(local_print_flag) printf(
"\n");
3111 interface =
fBPMCombo[i].get()->GetErrDBEntry();
3112 for (j=0; j<interface.size(); j++){
3113 interface.at(j).SetAnalysisID( analysis_id ) ;
3114 interface.at(j).SetMonitorID( db );
3115 interface.at(j).PrintStatus( local_print_flag );
3116 interface.at(j).AddThisEntryToList( entrylist );
3118 if(local_print_flag) printf(
"\n");
3125 interface =
fBCMCombo[i].get()->GetErrDBEntry();
3126 for (j=0; j<interface.size(); j++){
3127 interface.at(j).SetAnalysisID( analysis_id ) ;
3128 interface.at(j).SetMonitorID( db );
3129 interface.at(j).PrintStatus( local_print_flag );
3130 interface.at(j).AddThisEntryToList( entrylist );
3132 if(local_print_flag) printf(
"\n");
3140 for (j=0; j<interface.size(); j++){
3141 interface.at(j).SetAnalysisID( analysis_id ) ;
3142 interface.at(j).SetMonitorID( db );
3143 interface.at(j).PrintStatus( local_print_flag );
3144 interface.at(j).AddThisEntryToList( entrylist );
3146 if(local_print_flag) printf(
"\n");
3151 for(i=0; i<
fQPD.size(); i++) {
3153 interface =
fQPD[i].GetErrDBEntry();
3154 for (j=0; j<interface.size(); j++){
3155 interface.at(j).SetAnalysisID( analysis_id ) ;
3156 interface.at(j).SetMonitorID( db );
3157 interface.at(j).PrintStatus( local_print_flag );
3158 interface.at(j).AddThisEntryToList( entrylist );
3160 if(local_print_flag) printf(
"\n");
3168 for (j=0; j<interface.size(); j++){
3169 interface.at(j).SetAnalysisID( analysis_id ) ;
3170 interface.at(j).SetMonitorID( db );
3171 interface.at(j).PrintStatus( local_print_flag );
3172 interface.at(j).AddThisEntryToList( entrylist );
3174 if(local_print_flag) printf(
"\n");
3179 for(i=0; i<
fCavity.size(); i++) {
3181 interface =
fCavity[i].GetErrDBEntry();
3182 for (j=0; j<interface.size(); j++){
3183 interface.at(j).SetAnalysisID( analysis_id ) ;
3184 interface.at(j).SetMonitorID( db );
3185 interface.at(j).PrintStatus( local_print_flag );
3186 interface.at(j).AddThisEntryToList( entrylist );
3188 if(local_print_flag) printf(
"\n");
3196 for (j=0; j<interface.size(); j++){
3197 interface.at(j).SetAnalysisID( analysis_id ) ;
3198 interface.at(j).SetMonitorID( db );
3199 interface.at(j).PrintStatus( local_print_flag );
3200 interface.at(j).AddThisEntryToList( entrylist );
3202 if(local_print_flag) printf(
"\n");
3206 if(local_print_flag){
3212 if (entrylist.size()) {
3213 auto c = db->GetScopedConnection();
3214 for (
const auto& entry: entrylist) {
3215 c->QueryExecute(entry.insert_into());
3218 QwMessage <<
"QwBeamLine::FillErrDB :: This is the case when the entrlylist contains nothing in "<< datatype.Data() <<
QwLog::endl;
3225 Bool_t local_print_flag =
false;
3226 Bool_t local_add_element= type.Contains(
"yield");
3230 if(local_print_flag) {
3231 printf(
"---------------------------------------------------------------\n");
3232 printf(
"QwBeamLine::WritePromptSummary() Type : %12s\n", type.Data());
3233 printf(
"---------------------------------------------------------------\n");
3237 TString element_name =
"";
3238 Double_t element_value = 0.0;
3239 Double_t element_value_err = 0.0;
3240 Double_t element_value_width = 0.0;
3243 Bool_t local_add_these_elements=
false;
3246 for (
size_t i = 0; i <
fBCM.size(); i++)
3250 element_value = 0.0;
3251 element_value_err = 0.0;
3252 element_value_width = 0.0;
3254 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") );
3256 if(local_add_these_elements && local_add_element){
3264 if(local_ps_element) {
3265 element_value = tmp_channel->
GetValue();
3269 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3272 if( local_print_flag && local_ps_element) {
3273 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3274 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3279 for (
size_t i = 0; i <
fBCMCombo.size(); i++) {
3282 static const TString kTargetBCMName =
"bcm_target";
3283 local_add_these_elements = element_name.EqualTo(kTargetBCMName);
3284 element_value_err = 0.0;
3285 element_value_width = 0.0;
3288 local_add_these_elements = element_name.EqualTo(
"bcm_target");
3290 if(local_add_these_elements && local_add_element){
3298 if(local_ps_element) {
3299 element_value = tmp_channel->
GetValue();
3303 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3306 if( local_print_flag && local_ps_element) {
3307 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3308 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3313 for (
size_t i = 0; i <
fCavity.size(); i++)
3317 element_value = 0.0;
3318 element_value_err = 0.0;
3319 element_value_width = 0.0;
3321 local_add_these_elements = (element_name.EqualTo(
"cav4bQ")||element_name.EqualTo(
"cav4cQ")|| element_name.EqualTo(
"cav4dQ") );
3323 if(local_add_these_elements && local_add_element){
3331 if(local_ps_element) {
3332 element_value = tmp_channel->
GetValue();
3336 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3339 if( local_print_flag && local_ps_element) {
3340 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3341 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3349 char property[2][6]={
"x",
"y"};
3351 local_ps_element=NULL;
3352 local_add_these_elements=
false;
3357 for (Int_t j=0;j<2;j++){
3360 element_value = 0.0;
3361 element_value_err = 0.0;
3362 element_value_width = 0.0;
3365 static const std::vector<TString> kSummaryBPMNames = {
3366 "bpm4",
"bpm18",
"bpm14",
"bpm12"
3368 local_add_these_elements =
false;
3369 for (
const auto& bpm_name : kSummaryBPMNames) {
3370 if (element_name.Contains(bpm_name)) {
3371 local_add_these_elements =
true;
3376 if( local_add_these_elements && local_add_element){
3384 if(local_ps_element) {
3385 element_value = tmp_channel->
GetValue();
3388 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3391 if( local_print_flag && local_ps_element) {
3392 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3393 type.Data(), element_name.Data(), element_value, element_value_err, element_value_width);
3400 for(
size_t i=0; i<
fBPMCombo.size(); i++)
3402 for (Int_t j=0;j<2;j++){
3405 element_value = 0.0;
3406 element_value_err = 0.0;
3407 element_value_width = 0.0;
3409 local_add_these_elements=element_name.Contains(
"bpm4")||element_name.Contains(
"bpm18")||element_name.Contains(
"bpm14")||element_name.Contains(
"bpm12");
3411 if( local_add_these_elements && local_add_element){
3419 if(local_ps_element) {
3420 element_value = tmp_channel->
GetValue();
3423 local_ps_element->
Set(type, element_value, element_value_err, element_value_width);
3426 if( local_print_flag && local_ps_element) {
3427 printf(
"Type %12s, Element %32s, value %12.4e error %8.4e width %12.4e\n",
3428 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.
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
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...
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)