From cc9854a79de7501861a5f5cd742bdc2144581e02 Mon Sep 17 00:00:00 2001 From: "Ryan@Debain10" Date: Wed, 16 Mar 2022 21:10:12 -0400 Subject: [PATCH] checked data processes online = data saved. need to update the statsitics --- Makefile | 3 - Pixie16Class.cpp | 24 ++++---- mainSettings.cpp | 3 +- pixieDAQ.cpp | 116 +++++++++++++++++++++++++++++++----- pixieDAQ.h | 7 +-- testing/evtReader.h | 2 +- testing/example.sh | 2 +- testing/example_config.json | 2 +- testing/test.cpp | 27 ++++++--- 9 files changed, 142 insertions(+), 44 deletions(-) diff --git a/Makefile b/Makefile index 99d3cbf..2cdcf05 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,6 @@ Pixie16Class.o : Pixie16Class.h Pixie16Class.cpp DataBlock.h pixieDict.cxx : pixieDAQ.h pixieDAQLinkDef.h @echo "--------- creating pcm and cxx " @rootcling -f pixieDict.cxx -c pixieDAQ.h -p $(PIXIE_LIB_PATH) pixieDAQLinkDef.h -# @rootcling -f pixieDict.cxx -c pixieDAQ.h mainSettings.h -p $(PIXIE_LIB_PATH) pixieDAQLinkDef.h pixieDAQ.o : pixieDict.cxx pixieDAQ.cpp pixieDAQ.h @echo "--------- creating pixieDAQ.o" @@ -53,8 +52,6 @@ pixieDAQ.o : pixieDict.cxx pixieDAQ.cpp pixieDAQ.h mainSettings.o : mainSettings.cpp mainSettings.h @echo "--------- creating mainSettings.o" $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) mainSettings.cpp $(ROOT_FLAG) -# $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) Pixie16Class.o mainSettings.cpp $(ROOT_FLAG) -# $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) Pixie16Class.o mainSettings.cpp pixieDict.cxx $(ROOT_FLAG) #-------------------------- diff --git a/Pixie16Class.cpp b/Pixie16Class.cpp index 33dcfd5..54a9c07 100644 --- a/Pixie16Class.cpp +++ b/Pixie16Class.cpp @@ -337,12 +337,20 @@ void Pixie16::AdjustOffset(){ } void Pixie16::CaptureBaseLine(unsigned short modID, unsigned short ch){ + retval = Pixie16AcquireBaselines(modID); if( CheckError("Pixie16AcquireBaselines::MOD::"+std::to_string(modID)) < 0 ) return; + + ///somehow, this change the DSPParFile + std::string temp = DSPParFile[modID]; + retval = Pixie16ReadSglChanBaselines(Baselines, TimeStamps, 3640, modID, ch); if( CheckError("Pixie16ReadSglChanBaselines::MOD::"+std::to_string(modID) + "CH::"+std::to_string(ch)) < 0 ) return; + strcpy(DSPParFile[modID], temp.c_str()); + + } void Pixie16::CaptureADCTrace(unsigned short modID, unsigned short ch){ @@ -359,17 +367,13 @@ void Pixie16::StartRun(bool listMode){ unsigned short mode = NEW_RUN; //RESUME_RUN - //listmode if( listMode ){ - - //SetDigitizerSynchWait(1, i); - //SetDigitizerInSynch(0, i); - + ///listmode retval = Pixie16StartListModeRun(NumModules, LIST_MODE_RUN, mode); if( CheckError("Pixie16StartListModeRun") < 0 ) return; printf("\033[32m LIST_MODE run\033[0m\n"); }else{ - //MCA mode + ///MCA mode retval = Pixie16StartHistogramRun(NumModules, mode); if( CheckError("Pixie16StartHistogramRun") < 0 ) return; printf("\033[32m MCA MODE run\033[0m\n"); @@ -628,13 +632,13 @@ void Pixie16::PrintChannelAllSettings(unsigned short modID, unsigned short ch){ void Pixie16::PrintChannelsMainSettings(unsigned short modID){ - printf("====+=====+======+========+========+===========+==========+==========+==========+========+========+=========+=======+====== \n"); - printf(" ch | En | Gain | Trig_L | Trig_G | Threshold | Polarity | Energy_L | Energy_G | Tau | Trace | Trace_d | Voff | BL \n"); - printf("----+-----+------+--------+--------+-----------+----------+----------+----------+--------+--------+---------+-------+------ \n"); + printf("====+=====+======+========+========+===========+==========+==========+==========+=======+=========+=========+=======+====== \n"); + printf(" ch | En | Gain | Trig_L | Trig_G | Threshold | Polarity | Energy_L | Energy_G | Tau | Trace | Trace_d | Voff | BL \n"); + printf("----+-----+------+--------+--------+-----------+----------+----------+----------+-------+---------+---------+-------+------ \n"); for( int ch = 0; ch < 16; ch ++){ printf(" %2d |", ch); printf(" %3s |", GetChannelOnOff(modID, ch) ? "On" : "Off" ); - printf(" %3s |", GetChannelGain(modID, ch) ? "x1" : "1/4" ); + printf(" %4s |", GetChannelGain(modID, ch) ? "x1" : "1/4" ); printf(" %6.2f |", GetChannelTriggerRiseTime(modID, ch)); printf(" %6.2f |", GetChannelTriggerFlatTop(modID, ch)); printf(" %9.2f |", GetChannelTriggerThreshold(modID, ch)); diff --git a/mainSettings.cpp b/mainSettings.cpp index b360687..950328d 100644 --- a/mainSettings.cpp +++ b/mainSettings.cpp @@ -32,7 +32,7 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi modIDEntry = new TGNumberEntry(hframe, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); modIDEntry->SetWidth(50); modIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, pixie->GetNumModule()-1); - //modIDEntry->Connect("Modified()", "MainSettings", this, "ChangeMod()"); + modIDEntry->Connect("Modified()", "MainSettings", this, "ChangeMod()"); hframe->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); TGLabel * lb2 = new TGLabel(hframe, "Setting File :"); @@ -347,6 +347,7 @@ void MainSettings::OpenFile(){ if( fi.fFilename != NULL ) { settingFileName = fi.fFilename; teFileName->SetText(settingFileName + " (not saved)"); + //TODO change the pixie->DSPParFile[] } dir = fi.fIniDir; } diff --git a/pixieDAQ.cpp b/pixieDAQ.cpp index 41ade23..b5dab0c 100644 --- a/pixieDAQ.cpp +++ b/pixieDAQ.cpp @@ -58,29 +58,70 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) { /// Create a horizontal frame widget with buttons TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,200,40); + fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2)); - TGLabel * lb1 = new TGLabel(hframe, "Module ID :"); - hframe->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); + ///================= signal Channel group + TGGroupFrame * group1 = new TGGroupFrame(hframe, "Single Channel", kHorizontalFrame); + hframe->AddFrame(group1, new TGLayoutHints(kLHintsCenterX, 5,5,3,3) ); - modIDEntry = new TGNumberEntry(hframe, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); + TGHorizontalFrame *hframe1 = new TGHorizontalFrame(group1,200,30); + group1->AddFrame(hframe1); + + TGLabel * lb1 = new TGLabel(hframe1, "Module ID :"); + hframe1->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 2, 2)); + + modIDEntry = new TGNumberEntry(hframe1, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); modIDEntry->SetWidth(50); modIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, pixie->GetNumModule()-1); - hframe->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); + hframe1->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 3, 2)); - TGLabel * lb2 = new TGLabel(hframe, "Ch :"); - hframe->AddFrame(lb2, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); + TGLabel * lb2 = new TGLabel(hframe1, "Ch :"); + hframe1->AddFrame(lb2, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 3, 2)); - chEntry = new TGNumberEntry(hframe, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); + chEntry = new TGNumberEntry(hframe1, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); chEntry->SetWidth(50); chEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, pixie->GetDigitizerNumChannel(0)); - hframe->AddFrame(chEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); + hframe1->AddFrame(chEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 3, 2)); - TGTextButton *bGetADCTrace = new TGTextButton(hframe,"&Get ADC Trace"); + TGTextButton *bGetADCTrace = new TGTextButton(hframe1,"Get &ADC Trace"); bGetADCTrace->Connect("Clicked()","MainWindow",this,"getADCTrace()"); - hframe->AddFrame(bGetADCTrace, new TGLayoutHints(kLHintsCenterX, 5,5,3,4)); + hframe1->AddFrame(bGetADCTrace, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + + TGTextButton *bGetBaseLine = new TGTextButton(hframe1,"Get &BaseLine"); + bGetBaseLine->Connect("Clicked()","MainWindow",this,"getBaseLine()"); + hframe1->AddFrame(bGetBaseLine, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + + ///================= Start Run group + TGGroupFrame * group2 = new TGGroupFrame(hframe, "Start run", kHorizontalFrame); + hframe->AddFrame(group2, new TGLayoutHints(kLHintsCenterX, 2,2,3,3) ); + + TGHorizontalFrame *hframe2 = new TGHorizontalFrame(group2,200,30); + group2->AddFrame(hframe2); + + TGTextButton *bStartRun = new TGTextButton(hframe2,"Start &Run"); + bStartRun->Connect("Clicked()","MainWindow",this,"StartRun()"); + hframe2->AddFrame(bStartRun, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + + TGTextButton *bStopRun = new TGTextButton(hframe2,"Stop Run"); + bStopRun->Connect("Clicked()","MainWindow",this,"StopRun()"); + hframe2->AddFrame(bStopRun, new TGLayoutHints(kLHintsCenterX, 2,2,3,4)); + + TGTextButton *bScalar = new TGTextButton(hframe2,"Scalar"); + //bScalar->Connect("Clicked()","MainWindow",this,"getADCTrace()"); + hframe2->AddFrame(bScalar, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); - fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2)); + ///================= Read evt group + TGGroupFrame * group3 = new TGGroupFrame(hframe, "Read Evt", kHorizontalFrame); + hframe->AddFrame(group3, new TGLayoutHints(kLHintsCenterX, 2,2,3,3) ); + + TGHorizontalFrame *hframe3 = new TGHorizontalFrame(group3,200,30); + group3->AddFrame(hframe3); + + TGTextButton *bOpenEVT = new TGTextButton(hframe3,"OpenEvt"); + //bOpenEVT->Connect("Clicked()","MainWindow",this,"StartRun()"); + hframe3->AddFrame(bOpenEVT, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + /// Create canvas widget fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain,800,400); @@ -102,7 +143,7 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) { fMain->MapWindow(); - //HandleMenu(M_MAIN_CH_SETTINGS); + ///HandleMenu(M_MAIN_CH_SETTINGS); ///================ pixie ///printf("Removing Pixie16Msg.log \n"); @@ -166,12 +207,12 @@ void MainWindow::getADCTrace() { double dt = pixie->GetChannelSetting("XDT", modID, ch); TGraph * gTrace = new TGraph(); - + for( int i = 0 ; i < pixie->GetADCTraceLength(); i++){ gTrace->SetPoint(i, i*dt, haha[i]); } gTrace->GetXaxis()->SetTitle("time [us]"); - gTrace->Draw("AP"); + gTrace->Draw("APL"); TCanvas *fCanvas = fEcanvas->GetCanvas(); fCanvas->cd(); @@ -179,6 +220,37 @@ void MainWindow::getADCTrace() { } +void MainWindow::getBaseLine(){ + + printf("1 %s \n", pixie->GetSettingFile(0).c_str()); + + int modID = modIDEntry->GetNumber(); + int ch = chEntry->GetNumber(); + pixie->CaptureBaseLine(modID, ch); + + printf("2 %s \n", pixie->GetSettingFile(0).c_str()); + + double * baseline = pixie->GetBasline(); + double * baselineTime = pixie->GetBaselineTimestamp(); + + printf("3 %s \n", pixie->GetSettingFile(0).c_str()); + + TGraph * gTrace = new TGraph(); + + for( int i = 0 ; i < pixie->GetBaslineLength(); i++){ + gTrace->SetPoint(i, baselineTime[i]*1000, baseline[i]); + } + gTrace->GetXaxis()->SetTitle("time [ns]"); + gTrace->Draw("APL"); + + printf("4 %s \n", pixie->GetSettingFile(0).c_str()); + + + TCanvas *fCanvas = fEcanvas->GetCanvas(); + fCanvas->cd(); + fCanvas->Update(); + +} void MainWindow::GoodBye(){ @@ -191,6 +263,22 @@ void MainWindow::GoodBye(){ } +void MainWindow::StartRun(){ + + pixie->StartRun(1); + + ///start a loop that show scalar, plot + + +} + +void MainWindow::StopRun(){ + + pixie->StopRun(); + + pixie->PrintStatistics(0); +} + int main(int argc, char **argv) { printf(" Welcome to pixie16 DQ \n"); diff --git a/pixieDAQ.h b/pixieDAQ.h index e6d7882..34bc66f 100644 --- a/pixieDAQ.h +++ b/pixieDAQ.h @@ -37,14 +37,13 @@ public: void HandleMenu(Int_t id); - void openPixie(); void getADCTrace(); + void getBaseLine(); - void openMainSettings(); - - + void StartRun(); + void StopRun(); void GoodBye(); diff --git a/testing/evtReader.h b/testing/evtReader.h index ab8855c..2d31fe2 100644 --- a/testing/evtReader.h +++ b/testing/evtReader.h @@ -14,7 +14,7 @@ #include "TString.h" #include "TBenchmark.h" -#include "../armory/DataBlock.h" +#include "../DataBlock.h" #define MAX_CRATES 2 #define MAX_BOARDS_PER_CRATE 13 diff --git a/testing/example.sh b/testing/example.sh index a43e61d..8351b2b 100755 --- a/testing/example.sh +++ b/testing/example.sh @@ -2,4 +2,4 @@ rm -f Pixie16Msg.log -./example $1 --config=example_config.json +./testing/example $1 --config=testing/example_config.json diff --git a/testing/example_config.json b/testing/example_config.json index 6e1e61f..7d32ad1 100644 --- a/testing/example_config.json +++ b/testing/example_config.json @@ -3,7 +3,7 @@ "slot": 2, "dsp": { "ldr": "/usr/opt/Pixie16/pixie16_revf_general_12b250m_41847_2019-05-18/dsp/Pixie16DSP_revfgeneral_12b250m_r41847.ldr", - "par": "/home/ryan/Pixie16/ryan/test_ryan.set", + "par": "/home/ryan/Pixie16/GUI/test_ryan.set", "var": "/usr/opt/Pixie16/pixie16_revf_general_12b250m_41847_2019-05-18/dsp/Pixie16DSP_revfgeneral_12b250m_r41847.var" }, "fpga": { diff --git a/testing/test.cpp b/testing/test.cpp index 7fd878b..938532a 100644 --- a/testing/test.cpp +++ b/testing/test.cpp @@ -131,14 +131,14 @@ int main(int argc, char *argv[]){ pixie->PrintChannelsMainSettings(0); - pixie->CaptureADCTrace(0, ch); - unsigned short * haha = pixie->GetADCTrace(); - double dt = pixie->GetChannelSetting("XDT", 0, ch); - for( int i = 0 ; i < pixie->GetADCTraceLength(); i++){ - gTrace->SetPoint(i, i*dt, haha[i]); - } - gTrace->GetXaxis()->SetTitle("time [us]"); - canvas->cd(3); gTrace->Draw("APL"); + //pixie->CaptureADCTrace(0, ch); + //unsigned short * haha = pixie->GetADCTrace(); + //double dt = pixie->GetChannelSetting("XDT", 0, ch); + //for( int i = 0 ; i < pixie->GetADCTraceLength(); i++){ + // gTrace->SetPoint(i, i*dt, haha[i]); + //} + //gTrace->GetXaxis()->SetTitle("time [us]"); + //canvas->cd(3); gTrace->Draw("APL"); @@ -152,7 +152,8 @@ int main(int argc, char *argv[]){ //canvas->cd(2); gTrace->Draw("APL"); - /* + pixie->OpenFile("haha.evt", false); + printf("start run for %f sec\n", time); uint32_t StartTime = get_time(), CurrentTime = get_time(); @@ -163,6 +164,7 @@ int main(int argc, char *argv[]){ while( CurrentTime - StartTime < time * 1000 ){ pixie->ReadData(0); + pixie->SaveData(); while( pixie->GetNextWord() < pixie->GetnFIFOWords() ){ @@ -200,6 +202,13 @@ int main(int argc, char *argv[]){ } pixie->StopRun(); + pixie->CloseFile(); + + canvas->cd(1); hch->Draw(); + canvas->cd(2); hE->Draw(); + canvas->Modified(); + canvas->Update(); + gSystem->ProcessEvents(); //pixie->PrintData();