added database and elog functions

This commit is contained in:
carina@hades 2022-10-31 21:26:10 -04:00
parent fb5ba0150f
commit d63a53c3a6
10 changed files with 103 additions and 33 deletions

View File

@ -314,7 +314,9 @@ inline void Data::DecodeBuffer(bool fastDecode, int verbose){
if( NumEventsDecoded[ch] > 0 ) IsNotRollOverFakeAgg = true; if( NumEventsDecoded[ch] > 0 ) IsNotRollOverFakeAgg = true;
unsigned long long dTime = Timestamp[ch][NumEvents[ch]-1] - Timestamp[ch][NumEvents[ch] - NumEventsDecoded[ch]]; unsigned long long dTime = Timestamp[ch][NumEvents[ch]-1] - Timestamp[ch][NumEvents[ch] - NumEventsDecoded[ch]];
double sec = dTime * ch2ns / 1e9; double sec = dTime * ch2ns / 1e9;
TriggerRate[ch] = NumEventsDecoded[ch]/sec; if( sec != 0 ){
TriggerRate[ch] = NumEventsDecoded[ch]/sec;
}
firstTimestamp[ch] = Timestamp[ch][0]; firstTimestamp[ch] = Timestamp[ch][0];
lastTimestamp[ch] = Timestamp[ch][NumEvents[ch]-1]; lastTimestamp[ch] = Timestamp[ch][NumEvents[ch]-1];

View File

@ -194,6 +194,9 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
cbDataRun = new TGCheckButton(hfg1, "Data Run", 1); hfg1->AddFrame(cbDataRun, hahaLayoutHints); cbDataRun = new TGCheckButton(hfg1, "Data Run", 1); hfg1->AddFrame(cbDataRun, hahaLayoutHints);
cbDataRun->SetState(kButtonUp); cbDataRun->SetState(kButtonUp);
TGHorizontalFrame *hfg2 = new TGHorizontalFrame(vframe); vframe->AddFrame(hfg2 ,new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
} }
{///================= single Channel group {///================= single Channel group
@ -258,6 +261,7 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
LogMsg((char*)"The LogMsg is not complete for all actions. [update later]"); LogMsg((char*)"The LogMsg is not complete for all actions. [update later]");
LogMsg((char*)"Please \"Program Setting\" to set data folder"); LogMsg((char*)"Please \"Program Setting\" to set data folder");
LogMsg((char*)"Please \"Open Digitizers\" to start."); LogMsg((char*)"Please \"Open Digitizers\" to start.");
LogMsg((char*)"OR. \"Load Setting (Offline)\" for inspecting setting file.");
//HandleMenu(M_DIGITIZER_OPEN); //HandleMenu(M_DIGITIZER_OPEN);
//HandleMenu(M_BOARD_SETTINGS); //HandleMenu(M_BOARD_SETTINGS);
@ -552,6 +556,15 @@ void MainWindow::UpdateExpName(){
runIDEntry->SetNumber(lastRunID); runIDEntry->SetNumber(lastRunID);
} }
void MainWindow::MakeElogEntry(bool start){
if( ProgramSetting::EnableElog == false ) return;
TString cmd = Form("%s/DAQ/elogEntry.sh %d", ProgramSetting::programPath.c_str(), start);
int temp = system(cmd.Data());
}
void MainWindow::StartRun(){ void MainWindow::StartRun(){
LogMsg(Form("%s",__func__)); LogMsg(Form("%s",__func__));
if( digi == NULL) return; if( digi == NULL) return;
@ -572,9 +585,11 @@ void MainWindow::StartRun(){
if( cbDataRun->GetState() == kButtonDown ) { if( cbDataRun->GetState() == kButtonDown ) {
cbMode->SetEnabled(false); cbMode->SetEnabled(false);
HandleMenu(M_TRIGGER_SUMMARY); MakeElogEntry(true);
} }
HandleMenu(M_TRIGGER_SUMMARY);
bool threadFlag = false; bool threadFlag = false;
for( int i = 0 ; i < nDigi; i++) { for( int i = 0 ; i < nDigi; i++) {
digi[i]->StartACQ(); digi[i]->StartACQ();
@ -611,9 +626,9 @@ void MainWindow::StopRun(){
///if( cbMode->GetSelected() == Mode_DataRun ){ ///if( cbMode->GetSelected() == Mode_DataRun ){
if( cbDataRun->GetState() == kButtonDown ) { if( cbDataRun->GetState() == kButtonDown ) {
int runID = runIDEntry->GetNumber(); int runID = runIDEntry->GetNumber();
lastRunID = runID; lastRunID = runID + 1;
runIDEntry->SetNumber(runID +1); runIDEntry->SetNumber(runID +1);
MakeElogEntry(false);
ProgramSetting::SaveProgramSetting(); ProgramSetting::SaveProgramSetting();
} }

View File

@ -17,12 +17,12 @@
#include "macro.h" #include "macro.h"
#include "ClassDigitizer.h" #include "ClassDigitizer.h"
#include "programSetting.h"
#include "boardSetting.h" #include "boardSetting.h"
#include "channelSettingPHA.h" #include "channelSettingPHA.h"
#include "channelSettingPSD.h" #include "channelSettingPSD.h"
#include "registerSetting.h" #include "registerSetting.h"
#include "triggerSummary.h" #include "triggerSummary.h"
#include "programSetting.h"
class TGWindow; class TGWindow;
class TGMainFrame; class TGMainFrame;
@ -93,5 +93,7 @@ public:
void LogMsg(char * ); void LogMsg(char * );
void GoodBye(); void GoodBye();
static void DrawDummyGraph(); static void DrawDummyGraph();
static void MakeElogEntry(bool start); /// call elogEntry.sh bash script
}; };

View File

@ -1 +0,0 @@
../FSUDAQ.sh

View File

@ -25,23 +25,24 @@ ClassDigitizer.o : ClassDigitizer.cpp ClassDigitizer.h RegisterAddress.h macro.h
test : test.cpp ClassDigitizer.o test : test.cpp ClassDigitizer.o
@echo "--------- making test" @echo "--------- making test"
$(CC) $(COPTS) -o test test.cpp ClassDigitizer.o $(CAENLIBS) $(ROOTLIBS) $(CC) $(COPTS) -o ../test test.cpp ClassDigitizer.o $(CAENLIBS) $(ROOTLIBS)
EventBuilder : EventBuilder.cpp ClassData.h EventBuilder : EventBuilder.cpp ClassData.h
@echo "--------- making EventBuilder" @echo "--------- making EventBuilder"
$(CC) $(COPTS) -o EventBuilder EventBuilder.cpp $(ROOTLIBS) $(CC) $(COPTS) -o ../Analysis/EventBuilder EventBuilder.cpp $(ROOTLIBS)
test_indep : test_indep.cpp RegisterAddress.h macro.h test_indep : test_indep.cpp RegisterAddress.h macro.h
@echo "--------- making test_indep" @echo "--------- making test_indep"
$(CC) $(COPTS) -o test_indep test_indep.cpp $(CAENLIBS) $(CC) $(COPTS) -o ../test_indep test_indep.cpp $(CAENLIBS)
FSUDAQ : FSUDAQDict.cxx $(OBJS) ClassData.h FSUDAQ : FSUDAQDict.cxx $(OBJS) ClassData.h
@echo "----------- creating FSUDAQ" @echo "----------- creating FSUDAQ"
$(CC) $(COPTS) FSUDAQDict.cxx $(OBJS) -o FSUDAQ $(CAENLIBS) $(ROOTLIBS) $(CC) $(COPTS) FSUDAQDict.cxx $(OBJS) -o ../FSUDAQ $(CAENLIBS) $(ROOTLIBS)
@ln -s -f DAQ/FSUDAQDict_rdict.pcm ../.
FSUDAQDict.cxx : FSUDAQ.h FSUDAQLinkDef.h FSUDAQDict.cxx : FSUDAQ.h FSUDAQLinkDef.h
@echo "----------- creating pcm and cxx for root" @echo "----------- creating pcm and cxx for root"
@rootcling -f FSUDAQDict.cxx -c FSUDAQ.h -p FSUDAQLinkDef.h @rootcling -f FSUDAQDict.cxx -c FSUDAQ.h -p FSUDAQLinkDef.h
FSUDAQ.o : FSUDAQ.h FSUDAQ.cpp FSUDAQDict.cxx FSUDAQ.o : FSUDAQ.h FSUDAQ.cpp FSUDAQDict.cxx
@echo "----------- creating FSUDAQ.o" @echo "----------- creating FSUDAQ.o"

15
DAQ/elogEntry.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash -l
source ~/FSUDAQ/FSUDAQ.sh
echo $ElogIP
elogFileName="elogText.txt"
#make text file for elog text
echo "**************************************" > ${elogFileName}
echo "Run-${lastRunID} start at $(date)" >> ${elogFileName}
#push to elog
elog -h ${ElogIP} -l ${ExpName} -u GeneralFox fsuphysics888 -a Author="GeneralFox" -a Category="Run" -a RunNo=${lastRunID} -a Subject="Start Run" -n 2 -m elogText.txt

View File

@ -17,16 +17,18 @@
namespace fs = std::experimental::filesystem; namespace fs = std::experimental::filesystem;
std::string ProgramSetting::databaseIP = "http://fsunuc.physics.fsu.edu/influx/"; std::string ProgramSetting::databaseIP = "https://fsunuc.physics.fsu.edu/influx/";
std::string ProgramSetting::databaseName = "testing"; std::string ProgramSetting::databaseName = "testing";
std::string ProgramSetting::DataSavingPath = "/home/catrina/FSUDAQ"; std::string ProgramSetting::DataSavingPath = "/home/catrina/FSUDAQ";
std::string ProgramSetting::ExpName = "Test"; std::string ProgramSetting::ExpName = "Test";
std::string ProgramSetting::ElogIP = "128.186.111.127"; std::string ProgramSetting::ElogIP = "128.186.111.127";
bool ProgramSetting::EnableElog = false; bool ProgramSetting::EnableElog = true;
bool ProgramSetting::EnableDatabase = false; bool ProgramSetting::EnableDatabase = true;
/// fixed program things
const std::string ProgramSetting::settingFileName = "FSUDAQ.sh"; const std::string ProgramSetting::settingFileName = "FSUDAQ.sh";
const std::string ProgramSetting::programPath = "~/FSUDAQ/";
///this is declared at FSUDAQ.cpp ///this is declared at FSUDAQ.cpp
extern unsigned short lastRunID; extern unsigned short lastRunID;
@ -102,11 +104,19 @@ ProgramSetting::ProgramSetting(const TGWindow *p){
TGLabel * lbdummy0 = new TGLabel(vfOnOff, ""); vfOnOff->AddFrame(lbdummy0, haha); TGLabel * lbdummy0 = new TGLabel(vfOnOff, ""); vfOnOff->AddFrame(lbdummy0, haha);
cbDatabase = new TGCheckButton(vfOnOff, "Enable Database", 1); vfOnOff->AddFrame(cbDatabase, kaka); cbDatabase = new TGCheckButton(vfOnOff, "Enable Database", 1); vfOnOff->AddFrame(cbDatabase, kaka);
cbDatabase->SetState(kButtonUp); if( ProgramSetting::EnableDatabase ){
cbDatabase->SetState(kButtonDown);
}else{
cbDatabase->SetState(kButtonUp);
}
cbDatabase->Connect("Clicked()", "ProgramSetting", this, "SetDataBaseElogOnOff()"); cbDatabase->Connect("Clicked()", "ProgramSetting", this, "SetDataBaseElogOnOff()");
cbElog = new TGCheckButton(vfOnOff, "Enable Elog", 1); vfOnOff->AddFrame(cbElog, kaka); cbElog = new TGCheckButton(vfOnOff, "Enable Elog", 1); vfOnOff->AddFrame(cbElog, kaka);
cbElog->SetState(kButtonUp); if( ProgramSetting::EnableElog ){
cbElog->SetState(kButtonDown);
}else{
cbElog->SetState(kButtonUp);
}
cbElog->Connect("Clicked()", "ProgramSetting", this, "SetDataBaseElogOnOff()"); cbElog->Connect("Clicked()", "ProgramSetting", this, "SetDataBaseElogOnOff()");
} }
@ -208,7 +218,7 @@ void ProgramSetting::LoadProgramSetting(){
lineNum ++; lineNum ++;
pos = line.find("="); pos = line.find("=");
if( pos > 1 ){ if( pos > 1 ){
pos += 2; pos += 1;
///printf("%d | %s , %d \n", lineNum, line.c_str(), pos); ///printf("%d | %s , %d \n", lineNum, line.c_str(), pos);
switch ( lineNum ){ switch ( lineNum ){
case 1: ProgramSetting::ExpName = line.substr(pos); break; case 1: ProgramSetting::ExpName = line.substr(pos); break;
@ -235,22 +245,24 @@ void ProgramSetting::SaveProgramSetting(){
printf("+++++++ %s \n", __func__); printf("+++++++ %s \n", __func__);
FILE * fileOut = fopen(ProgramSetting::settingFileName.c_str(), "w"); std::string filePath = ProgramSetting::settingFileName;
FILE * fileOut = fopen(filePath.c_str(), "w");
if( fileOut != NULL ){ if( fileOut != NULL ){
fputs( ("ExpName = " + ProgramSetting::ExpName + "\n").c_str(), fileOut); fputs( ("ExpName=" + ProgramSetting::ExpName + "\n").c_str(), fileOut);
fputs( ("DataPath = " + ProgramSetting::DataSavingPath + "\n").c_str(), fileOut); fputs( ("DataPath=" + ProgramSetting::DataSavingPath + "\n").c_str(), fileOut);
fputs( ("DatabaseIP = " + ProgramSetting::databaseIP + "\n").c_str(), fileOut); fputs( ("DatabaseIP=" + ProgramSetting::databaseIP + "\n").c_str(), fileOut);
fputs( ("DatabaseName = " + ProgramSetting::databaseName + "\n").c_str(), fileOut); fputs( ("DatabaseName=" + ProgramSetting::databaseName + "\n").c_str(), fileOut);
fputs( ("ElogIP = " + ProgramSetting::ElogIP + "\n").c_str(), fileOut); fputs( ("ElogIP=" + ProgramSetting::ElogIP + "\n").c_str(), fileOut);
fputs( ("lastRunID = " + std::to_string(lastRunID) + "\n").c_str(), fileOut); fputs( ("lastRunID=" + std::to_string(lastRunID) + "\n").c_str(), fileOut);
fclose(fileOut); fclose(fileOut);
gSystem->CopyFile(ProgramSetting::settingFileName.c_str(), (ProgramSetting::DataSavingPath + "/FSUDAQ.sh").c_str(), true); /// overwrite gSystem->CopyFile(ProgramSetting::settingFileName.c_str(), (ProgramSetting::DataSavingPath + "/FSUDAQ.sh").c_str(), true); /// overwrite
}else{ }else{
printf("%s | Cannot open file : %s.\n", __func__, ProgramSetting::settingFileName.c_str()); printf("%s | Cannot open file : %s.\n", __func__, filePath.c_str());
} }
} }

View File

@ -45,6 +45,7 @@ class ProgramSetting{
static bool EnableDatabase; static bool EnableDatabase;
const static std::string settingFileName; // fixed as FSUDAQ.sh const static std::string settingFileName; // fixed as FSUDAQ.sh
const static std::string programPath;
void SetSetting(); // *SIGNAL* void SetSetting(); // *SIGNAL*

View File

@ -7,11 +7,17 @@
#include <TGTableContainer.h> #include <TGTableContainer.h>
#include <TGFileDialog.h> #include <TGFileDialog.h>
#include <iostream>
#include <fstream>
#include "programSetting.h"
#include "triggerSummary.h" #include "triggerSummary.h"
extern unsigned short nDigi; extern unsigned short nDigi;
extern Digitizer ** digi; extern Digitizer ** digi;
//extern bool ProgramSetting::EnableDatabase;
bool TriggerSummary::updateFlag = true; bool TriggerSummary::updateFlag = true;
TGTextEntry * TriggerSummary::txtTrigger[MaxNBoards][MaxNChannels] = {NULL}; TGTextEntry * TriggerSummary::txtTrigger[MaxNBoards][MaxNChannels] = {NULL};
TGTextEntry * TriggerSummary::txtThresholdValue[MaxNBoards][MaxNChannels] = {NULL}; TGTextEntry * TriggerSummary::txtThresholdValue[MaxNBoards][MaxNChannels] = {NULL};
@ -83,7 +89,7 @@ TriggerSummary::TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h){
TGLabel * lbUpDateTime = new TGLabel(hframeSetting, "Update Period [msec]:"); TGLabel * lbUpDateTime = new TGLabel(hframeSetting, "Update Period [msec]:");
hframeSetting->AddFrame(lbUpDateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3)); hframeSetting->AddFrame(lbUpDateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3));
numUpdateTime = new TGNumberEntry(hframeSetting, 500, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); numUpdateTime = new TGNumberEntry(hframeSetting, 3000, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative);
hframeSetting->AddFrame(numUpdateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3)); hframeSetting->AddFrame(numUpdateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3));
numUpdateTime->Resize(50, 20); numUpdateTime->Resize(50, 20);
@ -125,15 +131,32 @@ TriggerSummary::~TriggerSummary(){
void * TriggerSummary::UpdateTriggerRate(void * ptr){ void * TriggerSummary::UpdateTriggerRate(void * ptr){
std::string cmd = "curl -XPOST " + ProgramSetting::databaseIP + "/write?db=" + ProgramSetting::databaseName + " --data-binary @tempDB.txt";
std::ofstream myfile;
while( updateFlag){ while( updateFlag){
///printf("==================== %s\n", __func__);
if( ProgramSetting::EnableDatabase ) myfile.open( "tempDB.txt");
for( int bd = 0; bd < nDigi; bd++){ for( int bd = 0; bd < nDigi; bd++){
for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){ for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){
txtTrigger[bd][ch]->SetText(Form("%.2f", digi[bd]->GetData()->TriggerRate[ch])); txtTrigger[bd][ch]->SetText(Form("%.2f", digi[bd]->GetData()->TriggerRate[ch]));
value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch); value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false); txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
if( ProgramSetting::EnableDatabase ) {
myfile << "Rate,Bd=" << bd << ",Ch=" << ch << " value=" << digi[bd]->GetData()->TriggerRate[ch] << "\n";
}
} }
} }
if( ProgramSetting::EnableDatabase ){
myfile.close();
int temp = system(cmd.c_str());
}
usleep(numUpdateTime->GetNumber() * 1000); usleep(numUpdateTime->GetNumber() * 1000);
} }

View File

@ -1,6 +1,6 @@
ExpName = ZZZZZ ExpName=ZZZZZ
DataPath = /home/catrina/FSUDAQ/expDir DataPath=/home/catrina/FSUDAQ/expDir
DatabaseIP = http://fsunuc.physics.fsu.edu/influx/ DatabaseIP=https://fsunuc.physics.fsu.edu/influx/
DatabaseName = testing DatabaseName=testing
ElogIP = 128.186.111.127 ElogIP=elog.physics.fsu.edu
lastRunID = 0 lastRunID=8