diff --git a/.gitignore b/.gitignore index b8d6ed7..0dd7233 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ test example read-set +*.evt *.root *.cxx *.pcm diff --git a/Makefile b/Makefile index 2cdcf05..763afad 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ PLXBASE = /usr/opt/PlxSdk/PlxApi/Library/ CC = g++ -CFLAGS = -c -Wall +CFLAGS = -c -Wall -lpthread LDFLAGS = -ldl -lm ROOT_FLAG = `root-config --cflags --glibs` @@ -29,12 +29,15 @@ APIBASE = /usr/opt/xia/PixieSDK/lib/ LIBS = $(APIBASE)libPixie16Api.so $(APIBASE)libPixieSDK.a $(PLXBASE)PlxApi.a +OBJS = pixieDAQ.o Pixie16Class.o settingsSummary.o scalarPanel.o + + all: testing/test testing/example pixieDAQ #-------------------------- -pixieDAQ : pixieDAQ.o pixieDict.o pixieDict.cxx Pixie16Class.o mainSettings.o +pixieDAQ : pixieDict.cxx $(OBJS) @echo "-------- making pixieDAQ " - $(CC) $(PIXIE_LIB_PATH) pixieDAQ.o Pixie16Class.o mainSettings.o pixieDict.cxx $(LIBS) -o pixieDAQ $(ROOT_FLAG) + $(CC) $(PIXIE_LIB_PATH) $(OBJS) pixieDict.cxx $(LIBS) -o pixieDAQ $(ROOT_FLAG) #--------------------------#need to export LD_LIBRARY_PATH Pixie16Class.o : Pixie16Class.h Pixie16Class.cpp DataBlock.h @@ -49,10 +52,13 @@ pixieDAQ.o : pixieDict.cxx pixieDAQ.cpp pixieDAQ.h @echo "--------- creating pixieDAQ.o" $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) pixieDAQ.cpp Pixie16Class.cpp pixieDict.cxx $(ROOT_FLAG) -mainSettings.o : mainSettings.cpp mainSettings.h - @echo "--------- creating mainSettings.o" - $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) mainSettings.cpp $(ROOT_FLAG) +settingsSummary.o : settingsSummary.cpp settingsSummary.h + @echo "--------- creating settingsSummary.o" + $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) settingsSummary.cpp $(ROOT_FLAG) +scalarPanel.o : scalarPanel.cpp scalarPanel.h + @echo "--------- creating scalarPanel.o.o" + $(CC) $(CFLAGS) $(PIXIE_LIB_PATH) scalarPanel.cpp $(ROOT_FLAG) #-------------------------- testing/example : testing/example.o diff --git a/Pixie16Class.cpp b/Pixie16Class.cpp index 54a9c07..8065fdb 100644 --- a/Pixie16Class.cpp +++ b/Pixie16Class.cpp @@ -50,6 +50,7 @@ Pixie16::Pixie16(){ BootDigitizers(); nFIFOWords = 0; + totNumFIFOWords = 0; ExtFIFO_Data = NULL; Statistics = NULL; @@ -369,6 +370,8 @@ void Pixie16::StartRun(bool listMode){ if( listMode ){ ///listmode + totNumFIFOWords = 0; + nextWord = 0; retval = Pixie16StartListModeRun(NumModules, LIST_MODE_RUN, mode); if( CheckError("Pixie16StartListModeRun") < 0 ) return; printf("\033[32m LIST_MODE run\033[0m\n"); @@ -403,11 +406,12 @@ void Pixie16::ReadData(unsigned short modID){ if( CheckError("Pixie16CheckExternalFIFOStatus") < 0 ) return; ///if(nFIFOWords *1.0 / EXTERNAL_FIFO_LENGTH > 0.2) { if(nFIFOWords > 0) { - printf("\033[1;31m####### READ DATA \033[m: number of word in module-%d FIFO : %d \n", modID, nFIFOWords); + //printf("\033[1;31m####### READ DATA \033[m: number of word in module-%d FIFO : %d \n", modID, nFIFOWords); if( ExtFIFO_Data != NULL ) delete ExtFIFO_Data; ExtFIFO_Data = new unsigned int [nFIFOWords]; retval = Pixie16ReadDataFromExternalFIFO(ExtFIFO_Data, nFIFOWords, modID); CheckError("Pixie16ReadDataFromExternalFIFO"); + totNumFIFOWords += nFIFOWords; } }else{ printf("Pixie16 is not running.\n"); @@ -460,6 +464,7 @@ bool Pixie16::ProcessSingleData(){ } + unsigned int Pixie16::GetDigitizerSetting(std::string parName, unsigned short modID, bool verbose){ unsigned int ParData; retval = Pixie16ReadSglModPar (const_cast (parName.c_str()), &ParData, modID); @@ -630,7 +635,7 @@ void Pixie16::PrintChannelAllSettings(unsigned short modID, unsigned short ch){ printf("=====================================\n"); } -void Pixie16::PrintChannelsMainSettings(unsigned short modID){ +void Pixie16::PrintChannelSettingsSummary(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"); @@ -740,6 +745,8 @@ void Pixie16::PrintStatistics(unsigned short modID){ printf(" %7d |", (int) (ICR * liveTime) ); printf(" %7d \n", (int) (OCR * realTime) ); } + + } } diff --git a/Pixie16Class.h b/Pixie16Class.h index 8979a54..9191ea5 100644 --- a/Pixie16Class.h +++ b/Pixie16Class.h @@ -57,7 +57,6 @@ private: char ** DSPParFile; char ** DSPVarFile; - unsigned short * ModRev; unsigned int * ModSerNum; unsigned short * ModADCBits; @@ -76,6 +75,9 @@ private: unsigned int nFIFOWords; unsigned int * ExtFIFO_Data; unsigned int * Statistics; + unsigned int totNumFIFOWords; + + double Baselines[3640], TimeStamps[3640]; ///for baseline unsigned short ADCTrace[8192]; @@ -152,7 +154,7 @@ public: bool GetChannelGain(unsigned short modID, unsigned short ch, bool verbose = false) {return GetCSRA(CSRA_BIT::INPUT_RELAY, modID, ch, verbose);} void PrintChannelAllSettings(unsigned short modID, unsigned short ch); - void PrintChannelsMainSettings(unsigned short modID); + void PrintChannelSettingsSummary(unsigned short modID); void SetChannelSetting(std::string parName, double val, unsigned short modID, unsigned short ch, bool verbose = false); @@ -192,10 +194,12 @@ public: void ReadData(unsigned short modID); + unsigned int GetTotalNumWords() {return totNumFIFOWords;} unsigned int GetnFIFOWords() {return nFIFOWords;} unsigned int GetNextWord() {return nextWord;} DataBlock * GetData() {return data;} bool ProcessSingleData(); + void PrintExtFIFOWords() { unsigned int nWords = (ExtFIFO_Data[nextWord] >> 17) & 0x3FFF; printf("------------------- print dataBlock, nWords = %d\n", nWords); diff --git a/pixieDAQ.cpp b/pixieDAQ.cpp index b5dab0c..7162ca7 100644 --- a/pixieDAQ.cpp +++ b/pixieDAQ.cpp @@ -9,7 +9,16 @@ #include #include #include +#include #include +#include + +#include +#include + +#include "Pixie16Class.h" +static Pixie16 * pixie = new Pixie16(); + #include "pixieDAQ.h" @@ -68,66 +77,79 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) { group1->AddFrame(hframe1); TGLabel * lb1 = new TGLabel(hframe1, "Module ID :"); - hframe1->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 2, 2)); + hframe1->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 5, 0)); modIDEntry = new TGNumberEntry(hframe1, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); modIDEntry->SetWidth(50); modIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, pixie->GetNumModule()-1); - hframe1->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 3, 2)); + hframe1->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 5, 0)); TGLabel * lb2 = new TGLabel(hframe1, "Ch :"); - hframe1->AddFrame(lb2, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 3, 2)); + hframe1->AddFrame(lb2, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 2, 2, 5, 0)); chEntry = new TGNumberEntry(hframe1, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); chEntry->SetWidth(50); chEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, pixie->GetDigitizerNumChannel(0)); - hframe1->AddFrame(chEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 3, 2)); + hframe1->AddFrame(chEntry, new TGLayoutHints(kLHintsCenterX , 2, 2, 5, 0)); TGTextButton *bGetADCTrace = new TGTextButton(hframe1,"Get &ADC Trace"); - bGetADCTrace->Connect("Clicked()","MainWindow",this,"getADCTrace()"); - hframe1->AddFrame(bGetADCTrace, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + bGetADCTrace->Connect("Clicked()","MainWindow",this,"GetADCTrace()"); + hframe1->AddFrame(bGetADCTrace, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); TGTextButton *bGetBaseLine = new TGTextButton(hframe1,"Get &BaseLine"); - bGetBaseLine->Connect("Clicked()","MainWindow",this,"getBaseLine()"); - hframe1->AddFrame(bGetBaseLine, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + bGetBaseLine->Connect("Clicked()","MainWindow",this,"GetBaseLine()"); + hframe1->AddFrame(bGetBaseLine, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); + + TGTextButton *bScope = new TGTextButton(hframe1,"&Scope"); + bScope->Connect("Clicked()","MainWindow",this,"Scope()"); + hframe1->AddFrame(bScope, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); ///================= Start Run group TGGroupFrame * group2 = new TGGroupFrame(hframe, "Start run", kHorizontalFrame); - hframe->AddFrame(group2, new TGLayoutHints(kLHintsCenterX, 2,2,3,3) ); + hframe->AddFrame(group2, new TGLayoutHints(kLHintsCenterX, 2,2,5,0) ); TGHorizontalFrame *hframe2 = new TGHorizontalFrame(group2,200,30); group2->AddFrame(hframe2); + tePath = new TGTextEntry(hframe2, new TGTextBuffer(10)); + tePath->SetText("haha.evt"); + hframe2->AddFrame(tePath, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); + TGTextButton *bStartRun = new TGTextButton(hframe2,"Start &Run"); bStartRun->Connect("Clicked()","MainWindow",this,"StartRun()"); - hframe2->AddFrame(bStartRun, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + hframe2->AddFrame(bStartRun, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); TGTextButton *bStopRun = new TGTextButton(hframe2,"Stop Run"); bStopRun->Connect("Clicked()","MainWindow",this,"StopRun()"); - hframe2->AddFrame(bStopRun, new TGLayoutHints(kLHintsCenterX, 2,2,3,4)); + hframe2->AddFrame(bStopRun, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); TGTextButton *bScalar = new TGTextButton(hframe2,"Scalar"); //bScalar->Connect("Clicked()","MainWindow",this,"getADCTrace()"); - hframe2->AddFrame(bScalar, new TGLayoutHints(kLHintsCenterX, 2,2,3,2)); + hframe2->AddFrame(bScalar, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); ///================= Read evt group TGGroupFrame * group3 = new TGGroupFrame(hframe, "Read Evt", kHorizontalFrame); - hframe->AddFrame(group3, new TGLayoutHints(kLHintsCenterX, 2,2,3,3) ); + hframe->AddFrame(group3, new TGLayoutHints(kLHintsCenterX, 2,2,5,0) ); 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)); - + hframe3->AddFrame(bOpenEVT, new TGLayoutHints(kLHintsCenterX, 2,2,5,0)); + - /// Create canvas widget + ///================= Create canvas widget fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain,800,400); fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1)); - //===== TODO add msg box + ///================= Log massage + TGGroupFrame * groupLog = new TGGroupFrame(fMain, "Log Message", kHorizontalFrame); + fMain->AddFrame(groupLog, new TGLayoutHints(kLHintsCenterX, 5,5,3,3) ); + + teLog = new TGTextEdit(groupLog, w, 60); + groupLog->AddFrame(teLog, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0,0,5,0)); /// Set a name to the main frame @@ -142,17 +164,12 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) { /// Map main frame fMain->MapWindow(); + /// setup thread + thread = new TThread("hahaha", SaveData, (void *) 1); + ///HandleMenu(M_MAIN_CH_SETTINGS); - - ///================ pixie - ///printf("Removing Pixie16Msg.log \n"); - ///remove( "Pixie16Msg.log"); - - ///pixie = new Pixie16(); - ///if ( pixie->GetStatus() < 0 ) { - /// GoodBye(); - ///} + } MainWindow::~MainWindow() { @@ -175,10 +192,9 @@ void MainWindow::HandleMenu(Int_t id){ case M_EXIT: GoodBye(); break; case M_MAIN_CH_SETTINGS: { - mainSettings = new MainSettings(gClient->GetRoot(), 600, 600, pixie); + mainSettings = new SettingsSummary(gClient->GetRoot(), 600, 600, pixie); }break; - } } @@ -188,7 +204,6 @@ void MainWindow::openPixie(){ printf("Removing Pixie16Msg.log \n"); remove( "Pixie16Msg.log"); - pixie = new Pixie16(); if ( pixie->GetStatus() < 0 ) { printf("Exiting program... \n"); GoodBye(); @@ -196,7 +211,7 @@ void MainWindow::openPixie(){ } -void MainWindow::getADCTrace() { +void MainWindow::GetADCTrace() { printf("--------- get ADCTrace \n"); int modID = modIDEntry->GetNumber(); @@ -220,21 +235,15 @@ void MainWindow::getADCTrace() { } -void MainWindow::getBaseLine(){ +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++){ @@ -242,9 +251,6 @@ void MainWindow::getBaseLine(){ } gTrace->GetXaxis()->SetTitle("time [ns]"); gTrace->Draw("APL"); - - printf("4 %s \n", pixie->GetSettingFile(0).c_str()); - TCanvas *fCanvas = fEcanvas->GetCanvas(); fCanvas->cd(); @@ -252,6 +258,66 @@ void MainWindow::getBaseLine(){ } +void MainWindow::Scope(){ + + int modID = modIDEntry->GetNumber(); + int ch = chEntry->GetNumber(); + + if( pixie->GetChannelOnOff(modID, ch) == false ){ + LogMsg(Form("ch-%d is disabled\n", ch)); + return; + } + + + double dt = pixie->GetCh2ns(modID); + + DataBlock * data = pixie->GetData(); + + pixie->StartRun(1); + + usleep(100*1000); + pixie->ReadData(0); + pixie->StopRun(); + + TGraph * gTrace = new TGraph(); + + printf(" next word : %u\n", pixie->GetNextWord()); + printf("number of word received : %u\n", pixie->GetnFIFOWords()); + + //TODO add statistics, like trigger rate + + while(!pixie->ProcessSingleData()){ + + if( pixie->GetNextWord() >= pixie->GetnFIFOWords() ) break; + if( data->slot < 2 ) break; + if( data->eventID >= pixie->GetnFIFOWords() ) break; + + printf("mod:%d, ch:%d, event:%llu, %u, %u\n", data->slot-2, data->ch, data->eventID, pixie->GetNextWord(), pixie->GetnFIFOWords() ); + + if( data->ch == ch && data->slot == modID + 2 ){ + + for( int i = 0 ; i < data->trace_length; i++){ + gTrace->SetPoint(i, i*dt, (data->trace)[i]); + } + gTrace->GetXaxis()->SetTitle("time [us]"); + gTrace->SetTitle(Form("mod:%d, ch:%d, event:%llu\n", modID, ch, data->eventID)); + gTrace->Draw("APL"); + + TCanvas *fCanvas = fEcanvas->GetCanvas(); + fCanvas->cd(); + fCanvas->Update(); + + break; + + } + } + + + printf("=============== finished \n"); + +} + + void MainWindow::GoodBye(){ @@ -265,10 +331,41 @@ void MainWindow::GoodBye(){ void MainWindow::StartRun(){ + pixie->OpenFile(tePath->GetText(), false); + pixie->StartRun(1); - ///start a loop that show scalar, plot + //Emit("StartRun()"); + ///start a loop that show scalar, plot + //TBenchmark clock; + //clock.Reset(); + //clock.Start("timer"); + + if( pixie->IsRunning() ) thread->Run(); + +} + + +void * MainWindow::SaveData(void* ptr){ + + printf("Save Data()\n"); + + while( pixie->IsRunning() ){ + + usleep(500*1000); + + pixie->ReadData(0); + pixie->SaveData(); + + } + + pixie->ReadData(0); + pixie->SaveData(); + + printf("finished Save Data.\n"); + + return ptr; } @@ -276,15 +373,23 @@ void MainWindow::StopRun(){ pixie->StopRun(); + pixie->CloseFile(); + pixie->PrintStatistics(0); } +void MainWindow::LogMsg(TString msg){ + teLog->AddLine(msg); + teLog->LineDown(); + teLog->End(); +} + int main(int argc, char **argv) { printf(" Welcome to pixie16 DQ \n"); TApplication theApp("App",&argc,argv); - new MainWindow(gClient->GetRoot(),800,600); + new MainWindow(gClient->GetRoot(),800,800); theApp.Run(); return 0; } diff --git a/pixieDAQ.h b/pixieDAQ.h index 34bc66f..a632043 100644 --- a/pixieDAQ.h +++ b/pixieDAQ.h @@ -5,16 +5,18 @@ #include #include #include +#include +#include #include "Pixie16Class.h" -#include "mainSettings.h" +#include "settingsSummary.h" class TGWindow; class TGMainFrame; class TRootEmbeddedCanvas; class TGNumberEntry; -class MainWindow { +class MainWindow{ RQ_OBJECT("MainWindow") private: TGMainFrame *fMain; @@ -24,10 +26,12 @@ private: TGPopupMenu *fMenuFile, *fMenuSettings; TGNumberEntry * modIDEntry, *chEntry; + TGTextEntry * tePath; + TGTextEdit * teLog; - Pixie16 * pixie; + SettingsSummary * mainSettings; - MainSettings * mainSettings; + TThread * thread; public: @@ -39,12 +43,19 @@ public: void openPixie(); - void getADCTrace(); - void getBaseLine(); + void GetADCTrace(); + void GetBaseLine(); + void Scope(); + + void StartRun(); // *SIGNAL* + + static void * SaveData(void* ptr ); /// thread - void StartRun(); void StopRun(); + + void LogMsg(TString msg); + void GoodBye(); }; diff --git a/mainSettings.cpp b/settingsSummary.cpp similarity index 80% rename from mainSettings.cpp rename to settingsSummary.cpp index 950328d..5256f5f 100644 --- a/mainSettings.cpp +++ b/settingsSummary.cpp @@ -5,14 +5,13 @@ #include #include #include -#include #include #include -#include "mainSettings.h" +#include "settingsSummary.h" -MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixie){ +SettingsSummary::SettingsSummary(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixie){ this->pixie = pixie; @@ -20,7 +19,10 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi fMain = new TGMainFrame(p,w,h); fMain->SetWindowName("Pixie16 Channel Settings "); - fMain->Connect("CloseWindow()", "MainSettings", this, "CloseWindow()"); + fMain->Connect("CloseWindow()", "SettingsSummary", this, "CloseWindow()"); + + gClient->GetColorByName("red", red); + gClient->GetColorByName("black", black); ///Module choose TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain, w, 50 ); @@ -32,7 +34,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()", "SettingsSummary", this, "ChangeMod()"); hframe->AddFrame(modIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); TGLabel * lb2 = new TGLabel(hframe, "Setting File :"); @@ -44,11 +46,11 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi hframe->AddFrame(teFileName, new TGLayoutHints(kLHintsCenterX, 5,5,3,4)); TGTextButton * bOpen = new TGTextButton(hframe,"&Open"); - bOpen->Connect("Clicked()","MainSettings",this, "OpenFile()"); + bOpen->Connect("Clicked()","SettingsSummary",this, "OpenFile()"); hframe->AddFrame(bOpen, new TGLayoutHints(kLHintsCenterX, 5,5,3,4)); TGTextButton * bSave = new TGTextButton(hframe,"&Save"); - bSave->Connect("Clicked()","MainSettings",this, "SaveSetting()"); + bSave->Connect("Clicked()","SettingsSummary",this, "SaveSetting()"); hframe->AddFrame(bSave, new TGLayoutHints(kLHintsCenterX, 5,5,3,4)); /// Setting @@ -74,8 +76,7 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi } TGHorizontalFrame ** hframeCh = new TGHorizontalFrame * [MAXCH]; - TGLabel ** lbCh = new TGLabel * [MAXCH]; - + for( int i = 0; i < MAXCH ; i ++){ //printf("-----------------------%d\n", i); @@ -85,6 +86,7 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi int col = 0; lbCh[i] = new TGLabel(hframeCh[i] , Form("%02d", i)); lbCh[i]->SetWidth(width[col]); + lbCh[i]->SetTextColor(red); hframeCh[i]->AddFrame(lbCh[i], new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); col++; @@ -92,8 +94,14 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi cbOnOff[i]->AddEntry("ON", 1); cbOnOff[i]->AddEntry("off", 0); cbOnOff[i]->Resize(width[col], 20); - pixie->GetChannelOnOff(modID, i) ? cbOnOff[i]->Select(1) : cbOnOff[i]->Select(0); - cbOnOff[i]->Connect("Selected(Int_t, Int_t)", "MainSettings", this, Form("ChangeOnOff(=%d)", i)); + if( pixie->GetChannelOnOff(modID, i) ){ + cbOnOff[i]->Select(1); + lbCh[i]->SetTextColor(red); + }else{ + cbOnOff[i]->Select(0); + lbCh[i]->SetTextColor(black); + } + cbOnOff[i]->Connect("Selected(Int_t, Int_t)", "SettingsSummary", this, Form("ChangeOnOff(=%d)", i)); hframeCh[i]->AddFrame(cbOnOff[i], new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); col++; @@ -102,28 +110,28 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi cbGain[i]->AddEntry("x1/4", 0); cbGain[i]->Resize(width[col], 20); pixie->GetChannelGain(modID, i) ? cbGain[i]->Select(1) : cbGain[i]->Select(0); - cbGain[i]->Connect("Selected(Int_t, Int_t)", "MainSettings", this, Form("ChangeGain(=%d)", i)); + cbGain[i]->Connect("Selected(Int_t, Int_t)", "SettingsSummary", this, Form("ChangeGain(=%d)", i)); hframeCh[i]->AddFrame(cbGain[i], new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); col++; neTrigL[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelTriggerRiseTime(modID, i), 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); neTrigL[i]->SetWidth(width[col]); neTrigL[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 2.0); - neTrigL[i]->Connect("Modified()", "MainSettings", this, Form("ChangeTrigL(=%d)", i)); + neTrigL[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeTrigL(=%d)", i)); hframeCh[i]->AddFrame(neTrigL[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neTrigG[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelTriggerFlatTop(modID, i), 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); neTrigG[i]->SetWidth(width[col]); neTrigG[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 2.0); - neTrigG[i]->Connect("Modified()", "MainSettings", this, Form("ChangeTrigG(=%d)", i)); + neTrigG[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeTrigG(=%d)", i)); hframeCh[i]->AddFrame(neTrigG[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neThreshold[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelTriggerThreshold(modID, i), 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); neThreshold[i]->SetWidth(width[col]); neThreshold[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 4000); - neThreshold[i]->Connect("Modified()", "MainSettings", this, Form("ChangeThreshold(=%d)", i)); + neThreshold[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeThreshold(=%d)", i)); hframeCh[i]->AddFrame(neThreshold[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; @@ -132,28 +140,28 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi cbPol[i]->AddEntry("Neg -", 0); cbPol[i]->Resize(width[col], 20); pixie->GetChannelPolarity(modID, i) ? cbPol[i]->Select(1) : cbPol[i]->Select(0); - cbPol[i]->Connect("Selected(Int_t, Int_t)", "MainSettings", this, Form("ChangePol(=%d)", i)); + cbPol[i]->Connect("Selected(Int_t, Int_t)", "SettingsSummary", this, Form("ChangePol(=%d)", i)); hframeCh[i]->AddFrame(cbPol[i], new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4)); col++; neEngL[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelEnergyRiseTime(modID, i), 0, 0, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEANonNegative); neEngL[i]->SetWidth(width[col]); neEngL[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 10.0); - neEngL[i]->Connect("Modified()", "MainSettings", this, Form("ChangeEngL(=%d)", i)); + neEngL[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeEngL(=%d)", i)); hframeCh[i]->AddFrame(neEngL[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neEngG[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelEnergyFlatTop(modID, i), 0, 0, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEANonNegative); neEngG[i]->SetWidth(width[col]); neEngG[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 10.0); - neEngG[i]->Connect("Modified()", "MainSettings", this, Form("ChangeEngG(=%d)", i)); + neEngG[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeEngG(=%d)", i)); hframeCh[i]->AddFrame(neEngG[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neTau[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelEnergyTau(modID, i), 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); neTau[i]->SetWidth(width[col]); neTau[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 300.0); - neTau[i]->Connect("Modified()", "MainSettings", this, Form("ChangeTau(=%d)", i)); + neTau[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeTau(=%d)", i)); hframeCh[i]->AddFrame(neTau[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; @@ -162,7 +170,7 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi neTraceLength[i] = new TGNumberEntry(hframeCh[i], tracelen, 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); neTraceLength[i]->SetWidth(width[col]); neTraceLength[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 20.0); - neTraceLength[i]->Connect("Modified()", "MainSettings", this, Form("ChangeTraceLenght(=%d)", i)); + neTraceLength[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeTraceLenght(=%d)", i)); hframeCh[i]->AddFrame(neTraceLength[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; @@ -171,21 +179,21 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi neTraceDelay[i] = new TGNumberEntry(hframeCh[i], tracedel, 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); neTraceDelay[i]->SetWidth(width[col]); neTraceDelay[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 20.0); - neTraceDelay[i]->Connect("Modified()", "MainSettings", this, Form("ChangeTraceDelay(=%d)", i)); + neTraceDelay[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeTraceDelay(=%d)", i)); hframeCh[i]->AddFrame(neTraceDelay[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neVoff[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelVOffset(modID, i), 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEAAnyNumber); neVoff[i]->SetWidth(width[col]); neVoff[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, -2, 2); - neVoff[i]->Connect("Modified()", "MainSettings", this, Form("ChangeVoff(=%d)", i)); + neVoff[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeVoff(=%d)", i)); hframeCh[i]->AddFrame(neVoff[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); col++; neBL[i] = new TGNumberEntry(hframeCh[i], pixie->GetChannelBaseLinePrecent(modID, i), 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); neBL[i]->SetWidth(width[col]); neBL[i]->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 100); - neBL[i]->Connect("Modified()", "MainSettings", this, Form("ChangeBL(=%d)", i)); + neBL[i]->Connect("Modified()", "SettingsSummary", this, Form("ChangeBL(=%d)", i)); hframeCh[i]->AddFrame(neBL[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); } @@ -195,9 +203,10 @@ MainSettings::MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixi } -MainSettings::~MainSettings(){ +SettingsSummary::~SettingsSummary(){ for (int i = 0; i< MAXCH; i++) { + delete lbCh[i]; delete cbOnOff[i] ; delete cbGain[i] ; delete cbPol[i] ; @@ -223,68 +232,73 @@ MainSettings::~MainSettings(){ } -void MainSettings::ChangeOnOff(unsigned short ch){ +void SettingsSummary::ChangeOnOff(unsigned short ch){ short modID = modIDEntry->GetNumber(); int val = cbOnOff[ch]->GetSelected(); pixie->SetChannelOnOff(val, modID, ch); + if( val ) { + lbCh[ch]->SetTextColor(red); + }else{ + lbCh[ch]->SetTextColor(black); + } teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeGain(unsigned short ch){ +void SettingsSummary::ChangeGain(unsigned short ch){ short modID = modIDEntry->GetNumber(); int val = cbGain[ch]->GetSelected(); pixie->SetChannelGain(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangePol(unsigned short ch){ +void SettingsSummary::ChangePol(unsigned short ch){ short modID = modIDEntry->GetNumber(); int val = cbPol[ch]->GetSelected(); pixie->SetChannelPositivePolarity(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeTrigL(unsigned short ch){ +void SettingsSummary::ChangeTrigL(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neTrigL[ch]->GetNumber(); pixie->SetChannelTriggerRiseTime(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeTrigG(unsigned short ch){ +void SettingsSummary::ChangeTrigG(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neTrigG[ch]->GetNumber(); pixie->SetChannelTriggerFlatTop(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeThreshold(unsigned short ch){ +void SettingsSummary::ChangeThreshold(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neThreshold[ch]->GetNumber(); pixie->SetChannelTriggerThreshold(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeEngL(unsigned short ch){ +void SettingsSummary::ChangeEngL(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neEngL[ch]->GetNumber(); pixie->SetChannelEnergyRiseTime(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeEngG(unsigned short ch){ +void SettingsSummary::ChangeEngG(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neEngG[ch]->GetNumber(); pixie->SetChannelEnergyFlatTop(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeTau(unsigned short ch){ +void SettingsSummary::ChangeTau(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neTau[ch]->GetNumber(); pixie->SetChannelEnergyTau(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeTraceLenght(unsigned short ch){ +void SettingsSummary::ChangeTraceLenght(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neTraceLength[ch]->GetNumber(); if( val > 0 ){ @@ -298,7 +312,7 @@ void MainSettings::ChangeTraceLenght(unsigned short ch){ teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeTraceDelay(unsigned short ch){ +void SettingsSummary::ChangeTraceDelay(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neTraceDelay[ch]->GetNumber(); @@ -313,14 +327,14 @@ void MainSettings::ChangeTraceDelay(unsigned short ch){ teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeVoff(unsigned short ch){ +void SettingsSummary::ChangeVoff(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neVoff[ch]->GetNumber(); pixie->SetChannelVOffset(val, modID, ch); teFileName->SetText(settingFileName + " (not saved)"); } -void MainSettings::ChangeBL(unsigned short ch){ +void SettingsSummary::ChangeBL(unsigned short ch){ short modID = modIDEntry->GetNumber(); double val = neBL[ch]->GetNumber(); pixie->SetChannelBaseLinePrecent(val, modID, ch); @@ -328,13 +342,13 @@ void MainSettings::ChangeBL(unsigned short ch){ } -void MainSettings::ChangeMod(){ +void SettingsSummary::ChangeMod(){ short modID = modIDEntry->GetNumber(); settingFileName = pixie->GetSettingFile(modID); teFileName->SetText(settingFileName); } -void MainSettings::OpenFile(){ +void SettingsSummary::OpenFile(){ static TString dir("."); TGFileInfo fi; @@ -352,7 +366,7 @@ void MainSettings::OpenFile(){ dir = fi.fIniDir; } -void MainSettings::SaveSetting(){ +void SettingsSummary::SaveSetting(){ printf("save button is pressed.\n"); pixie->SaveSettings(settingFileName.Data()); diff --git a/mainSettings.h b/settingsSummary.h similarity index 83% rename from mainSettings.h rename to settingsSummary.h index 0052d5d..9f9576a 100644 --- a/mainSettings.h +++ b/settingsSummary.h @@ -1,11 +1,12 @@ -#ifndef MAIN_SETTING_H -#define MAIN_SETTING_H +#ifndef SETTINGS_SUMMARY_H +#define SETTINGS_SUMMARY_H #include ///#include #include #include +#include #include "Pixie16Class.h" @@ -14,8 +15,8 @@ class TGMainFrame; #define MAXCH 16 -class MainSettings{ -/// RQ_OBJECT("MainSettings") +class SettingsSummary{ +/// RQ_OBJECT("SettingsSummary") private: TGMainFrame * fMain; @@ -29,6 +30,7 @@ private: TGComboBox * cbGain[MAXCH] ; TGComboBox * cbPol[MAXCH] ; + TGLabel * lbCh[MAXCH]; TGNumberEntry * neTrigL[MAXCH] ; TGNumberEntry * neTrigG[MAXCH] ; TGNumberEntry * neThreshold[MAXCH] ; @@ -42,11 +44,15 @@ private: Pixie16 * pixie; + Pixel_t red; + Pixel_t black; + + int maxCh; public: - MainSettings(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixie); - virtual ~MainSettings(); + SettingsSummary(const TGWindow *p, UInt_t w, UInt_t h, Pixie16 * pixie); + virtual ~SettingsSummary(); void CloseWindow() { printf("close window\n"); delete this; } diff --git a/test_ryan.set b/test_ryan.set index 9f672d2..d0a0043 100644 --- a/test_ryan.set +++ b/test_ryan.set @@ -11,7 +11,7 @@ 1, 8, 32, - 1, + 106, 1, 0, 1, @@ -93,15 +93,15 @@ 120 ], "ChanCSRa": [ - 2212, + 2208, 16544, 16544, 16544, 16544, - 16804, + 16800, 16804, 16544, - 16544, + 420, 16544, 16544, 16544, @@ -263,7 +263,7 @@ 65535, 4000, 65535, - 65535, + 4000, 65535, 65535, 65535, @@ -425,7 +425,7 @@ 32768, 21845, 32768, - 32768, + 21845, 32768, 32768, 32768, @@ -443,7 +443,7 @@ 1018, 666, 1768, - 1768, + 1018, 1768, 1792, 1768, @@ -767,7 +767,7 @@ 5000, 2504, 5000, - 5000, + 3750, 5000, 5000, 5000, @@ -1016,7 +1016,7 @@ "ChanNum": 0, "CoincPattern": 0, "CoincWait": 0, - "ControlTask": 0, + "ControlTask": 5, "CrateID": 0, "FIFOLength": 8188, "FastFilterRange": 0, diff --git a/testing/evtReader.h b/testing/evtReader.h index 2d31fe2..1d5c3c4 100644 --- a/testing/evtReader.h +++ b/testing/evtReader.h @@ -1,18 +1,15 @@ #ifndef EVTREADER_H #define EVTREADER_H -#include +#include /// for FILE #include #include #include #include -#include "TSystem.h" -#include "TObject.h" -#include "TFile.h" -#include "TTree.h" #include "TString.h" #include "TBenchmark.h" +#include "TMath.h" #include "../DataBlock.h" @@ -40,6 +37,9 @@ class evtReader{ unsigned int traceBlock[MAX_TRACE_LENGHT/2]; TBenchmark gClock; + + long int inFilePosPrecent[10]; + Long64_t blockIDPrecent[10]; ///============================================ Methods public: @@ -49,7 +49,8 @@ class evtReader{ ~evtReader(); void OpenFile(TString inFileName); - + void CloseFile(); + void UpdateFileSize(); bool IsEndOfFile(); @@ -59,10 +60,12 @@ class evtReader{ Long64_t GetBlockID() {return blockID;} Long64_t GetNumberOfBlock() {return nBlock;} + int ReadBlock(int opt = 0); /// 0 = default, fill data /// 1 = no fill data void ScanNumberOfBlock(); + void JumptoPrecent(int precent); ///this is offset by 1 block void PrintStatus(int mod); }; @@ -81,6 +84,7 @@ evtReader::evtReader(){ blockID = -1; endOfFile = false; isOpened = false; + } @@ -124,6 +128,17 @@ void evtReader::OpenFile(TString inFileName){ } }; +void evtReader::CloseFile(){ + fclose(inFile); + isOpened = false; + data->Clear(); + inFileSize = 0; + inFilePos = 0; + nBlock = 0; + blockID = -1; + endOfFile = false; +}; + void evtReader::UpdateFileSize(){ if( inFile == NULL ) return; fseek(inFile, 0L, SEEK_END); @@ -242,8 +257,16 @@ int evtReader::ReadBlock(int opt){ void evtReader::ScanNumberOfBlock(){ nBlock = 0; + int count = 0; while( ReadBlock(1) != -1 ){ nBlock ++; + int haha = (inFilePos*10/inFileSize)%10; + if( haha == count ) { + inFilePosPrecent[count] = inFilePos; + blockIDPrecent[count] = blockID; + count++; + } + PrintStatus(10000); } @@ -258,6 +281,17 @@ void evtReader::ScanNumberOfBlock(){ } +void evtReader::JumptoPrecent(int precent){ + + if( precent < 0 || precent > 10 ) { + printf("input precent should be 0 to 10\n"); + return; + } + + fseek(inFile, inFilePosPrecent[precent], SEEK_SET); + blockID = blockIDPrecent[precent]; + +} void evtReader::PrintStatus(int mod){ diff --git a/testing/test.cpp b/testing/test.cpp index 938532a..ca5d435 100644 --- a/testing/test.cpp +++ b/testing/test.cpp @@ -34,6 +34,12 @@ #include "TRootCanvas.h" +#include +#include + + +#include "evtReader.h" + long get_time(); static struct termios g_old_kbd_mode; static void cooked(void); ///set keyboard behaviour as wait-for-enter @@ -44,6 +50,13 @@ int keyboardhit(); bool QuitFlag = false; +Pixie16 * pixie = 0; +TGraph * gTrace = 0; +TCanvas * canvas = 0; +TH1F * hch = 0; +TH1F * hE = 0; +int ch2ns; + void PrintCommands(){ if (QuitFlag) return; @@ -58,13 +71,106 @@ void PrintCommands(){ } +void GetADCTrace(int ch){ + + 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"); + +} + +void GetBaseline(int ch){ + + pixie->CaptureBaseLine(0, ch); + double * baseline = pixie->GetBasline(); + double * baselineTime = pixie->GetBaselineTimestamp(); + for( int i = 0 ; i < pixie->GetBaslineLength(); i++){ + gTrace->SetPoint(i, baselineTime[i]*1000, baseline[i]); + //printf("%5d | %f, %f \n", i, baselineTime[i]*1000, baseline[i]); + } + canvas->cd(2); gTrace->Draw("APL"); + +} + + +void ProcessData(){ + + printf("========== new thread of processing data\n"); + + evtReader * evt = new evtReader("haha.evt"); + DataBlock * data = evt->data; + + int jaja = 0; + + while(true){ + + evt->UpdateFileSize(); + + while( evt->GetFileSize() > 0 && evt->GetFileSize() > evt->GetFilePos() ){ + + int status = evt->ReadBlock(); + + + //printf("%d, %ld, %ld, %lld\n", status, evt->GetFilePos(), evt->GetFileSize(), evt->GetBlockID()); + //data->Print(0); + + hch->Fill( data->ch); + hE->Fill( data->energy ); + + if( data->eventID %100 == 0 ){ + if( data->trace_length > 0 ) { + for( int i = 0 ; i < data->trace_length; i++){ + gTrace->SetPoint(i, i*ch2ns, data->trace[i]); + } + //gTrace->GetYaxis()->SetRangeUser(0, 5000); + canvas->cd(3); gTrace->Draw("APL"); + } + } + + if( data->eventID %200 == 0 ){ + //data->Print(0); + canvas->cd(1); hch->Draw(); + canvas->cd(2); hE->Draw(); + canvas->Modified(); + canvas->Update(); + gSystem->ProcessEvents(); + } + + } + + usleep(500*1000); + evt->UpdateFileSize(); + + jaja++; + //printf("%10d, %d, %ld, %ld \n", jaja, pixie->IsRunning(), evt->GetFilePos(), evt->GetFileSize()); + //if( jaja > 1000) break; + if( !pixie->IsRunning() && evt->GetFilePos() == evt->GetFileSize()) break; + + } + + + + printf("========= finished ProcessData()\n"); + canvas->cd(1); hch->Draw(); + canvas->cd(2); hE->Draw(); + canvas->Modified(); + canvas->Update(); + gSystem->ProcessEvents(); + +} + ///################################################## int main(int argc, char *argv[]){ printf("Removing Pixie16Msg.log \n"); remove( "Pixie16Msg.log"); - Pixie16 * pixie = new Pixie16(); + pixie = new Pixie16(); if ( pixie->GetStatus() < 0 ) { QuitFlag = true; printf("Exiting program... \n"); @@ -73,45 +179,27 @@ int main(int argc, char *argv[]){ TApplication * app = new TApplication("app", &argc, argv); - TCanvas * canvas = new TCanvas("canvas", "Canvas", 1800, 400); + canvas = new TCanvas("canvas", "Canvas", 1800, 400); canvas->Divide(3,1); - TH1F * hch = new TH1F("hch", "channel", 16, 0, 16); - TH1F * hE = new TH1F("hE", "energy", 400, 0, 30000); - TGraph * gTrace = new TGraph(); + hch = new TH1F("hch", "channel", 16, 0, 16); + hE = new TH1F("hE", "energy", 400, 0, 30000); + gTrace = new TGraph(); - int ch2ns = pixie->GetCh2ns(0); + ch2ns = pixie->GetCh2ns(0); gTrace->GetXaxis()->SetTitle("time [ns]"); - //pixie->SetDigitizerPresetRunTime(100000, 0); //pixie->SetDigitizerSynchWait(0, 0); // not simultaneously //pixie->SetDigitizerInSynch(1, 0); //not simultaneously pixie->PrintDigitizerSettings(0); - /* - pixie->GetPolarity(0, 6, 1); - pixie->SetPolarity(false, 0, 6); - pixie->GetPolarity(0, 6, 1); - pixie->SetPolarity(true, 0, 6); - pixie->GetPolarity(0, 6, 1); - */ - int ch = 6; - double time = 1.0; ///sec + double time = 10.0; ///sec - /* - for( int i = 0; i < 16; i++){ - pixie->SetChannelTriggerThreshold(5000, 0, i); - pixie->SetChannelOnOff(false, 0, i); - pixie->SetChannelTraceOnOff(false, 0, i); - pixie->SetChannelVOffset(0, 0, i); - } - * */ //pixie->AdjustOffset(); - //pixie->SetChannelEnergyRiseTime(2, 0, ch); //pixie->SetChannelTriggerThreshold(300, 0, ch); //pixie->SetChannelEnergyTau(50, 0, ch); @@ -128,94 +216,46 @@ int main(int argc, char *argv[]){ pixie->PrintChannelAllSettings(0, ch); - pixie->PrintChannelsMainSettings(0); + pixie->PrintChannelSettingsSummary(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->CaptureBaseLine(0, ch); - //double * baseline = pixie->GetBasline(); - //double * baselineTime = pixie->GetBaselineTimestamp(); - //for( int i = 0 ; i < pixie->GetBaslineLength(); i++){ - // gTrace->SetPoint(i, baselineTime[i]*1000, baseline[i]); - // //printf("%5d | %f, %f \n", i, baselineTime[i]*1000, baseline[i]); - //} - //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(); + uint32_t ElapsedTime = 0, PresenTime = StartTime; + pixie->StartRun(1); - DataBlock * data = pixie->GetData(); + std::thread kakakaka(ProcessData); while( CurrentTime - StartTime < time * 1000 ){ pixie->ReadData(0); pixie->SaveData(); - while( pixie->GetNextWord() < pixie->GetnFIFOWords() ){ - - //if( data->eventID %100 == 99 ) pixie->PrintExtFIFOWords(); - bool breakFlag = pixie->ProcessSingleData(); - - //data->Print(0); - //printf("--------------next word : %d (%d) | event lenght : %d \n", pixie->GetNextWord(), pixie->GetnFIFOWords(), data->eventLength); - - hch->Fill( data->ch); - hE->Fill( data->energy ); - - if( data->eventID %10 == 0 ){ - if( data->trace_length > 0 ) { - for( int i = 0 ; i < data->trace_length; i++){ - gTrace->SetPoint(i, i*ch2ns, data->trace[i]); - } - //gTrace->GetYaxis()->SetRangeUser(0, 5000); - canvas->cd(3); gTrace->Draw("APL"); - } - } - - if( data->eventID %100 == 0 ){ - //data->Print(0); - canvas->cd(1); hch->Draw(); - canvas->cd(2); hE->Draw(); - canvas->Modified(); - canvas->Update(); - gSystem->ProcessEvents(); - } - if( breakFlag ) break; + if( ElapsedTime > 1000 ) { + pixie->PrintStatistics(0); + PresenTime = CurrentTime; + ElapsedTime = 0; } CurrentTime = get_time(); + + ElapsedTime = CurrentTime - PresenTime; + } pixie->StopRun(); pixie->CloseFile(); - canvas->cd(1); hch->Draw(); - canvas->cd(2); hE->Draw(); - canvas->Modified(); - canvas->Update(); - gSystem->ProcessEvents(); - - //pixie->PrintData(); - - printf("===================================\n"); pixie->PrintStatistics(0); + + unsigned int haha = pixie->GetTotalNumWords(); + printf("=========== total nFIFO words : %d (%f) \n", haha, haha/1256.); + //kakakaka.join(); //pixie->SaveSettings("/home/ryan/Pixie16/ryan/test_ryan.set"); @@ -303,13 +343,15 @@ int main(int argc, char *argv[]){ } } - /**/ + */ //delete pixie; app->Run(); + QuitFlag = true; + printf("================ end of program. \n"); return 0; }