change pixie as global vaible. enable threading for taking data

This commit is contained in:
Ryan Tang 2022-03-30 13:13:24 -04:00
parent 5c3749570e
commit 336ac43827
11 changed files with 439 additions and 209 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@ test
example
read-set
*.evt
*.root
*.cxx
*.pcm

View File

@ -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

View File

@ -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<char*> (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) );
}
}
}

View File

@ -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);

View File

@ -9,7 +9,16 @@
#include <TGLabel.h>
#include <TGNumberEntry.h>
#include <TGraph.h>
#include <TGTextEditor.h>
#include <TAxis.h>
#include <TBenchmark.h>
#include <thread>
#include <unistd.h>
#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(){
printf("1 %s \n", pixie->GetSettingFile(0).c_str());
void MainWindow::GetBaseLine(){
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++){
@ -243,15 +252,72 @@ 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();
fCanvas->Update();
}
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;
}

View File

@ -5,9 +5,11 @@
#include <TClass.h>
#include <TGClient.h>
#include <TGMenu.h>
#include <TGTextEdit.h>
#include <TThread.h>
#include "Pixie16Class.h"
#include "mainSettings.h"
#include "settingsSummary.h"
class TGWindow;
class TGMainFrame;
@ -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();
};

View File

@ -5,14 +5,13 @@
#include <TRandom.h>
#include <TGButton.h>
#include <TRootEmbeddedCanvas.h>
#include <TGLabel.h>
#include <TGTableContainer.h>
#include <TGFileDialog.h>
#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,7 +76,6 @@ 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 ++){
@ -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());

View File

@ -1,11 +1,12 @@
#ifndef MAIN_SETTING_H
#define MAIN_SETTING_H
#ifndef SETTINGS_SUMMARY_H
#define SETTINGS_SUMMARY_H
#include <TQObject.h>
///#include <RQ_OBJECT.h>
#include <TGNumberEntry.h>
#include <TGComboBox.h>
#include <TGLabel.h>
#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; }

View File

@ -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,

View File

@ -1,18 +1,15 @@
#ifndef EVTREADER_H
#define EVTREADER_H
#include <stdio.h>
#include <stdio.h> /// for FILE
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
#include "TSystem.h"
#include "TObject.h"
#include "TFile.h"
#include "TTree.h"
#include "TString.h"
#include "TBenchmark.h"
#include "TMath.h"
#include "../DataBlock.h"
@ -41,6 +38,9 @@ class evtReader{
TBenchmark gClock;
long int inFilePosPrecent[10];
Long64_t blockIDPrecent[10];
///============================================ Methods
public:
@ -49,6 +49,7 @@ 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){

View File

@ -34,6 +34,12 @@
#include "TRootCanvas.h"
#include <thread>
#include <unistd.h>
#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->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->PrintChannelSettingsSummary(0);
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;
}