mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 13:27:14 +02:00
added ctbGui
This commit is contained in:
44
ctbGui/Makefile.root5
Normal file
44
ctbGui/Makefile.root5
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
|
||||||
|
INCS=ctbMain.h ctbDacs.h ctbPattern.h ctbSignals.h ctbAdcs.h ctbAcquisition.h ctbPowers.h ctbSlowAdcs.h
|
||||||
|
SRC= $(SRC:.h=.cpp) ctbDict.cpp
|
||||||
|
LINKDEF=ctbLinkDef.h
|
||||||
|
ZMQLIB=../slsReceiverSoftware/include
|
||||||
|
LIBRARYCBF=$(CBFLIBDIR)/lib/*.o
|
||||||
|
|
||||||
|
INCDIR=-I../slsReceiverSoftware/include/ -I../slsDetectorSoftware/include/ -I../slsSupportLib/include/ -I../slsDetectorCalibration -I../slsDetectorCalibration/dataStructures -I$(CBFLIBDIR)/include -I../slsDetectorCalibration/interpolations
|
||||||
|
LDFLAG=-L../bin -lSlsDetector -lSlsSupport -L/usr/lib64/ -lpthread -lm -lstdc++ -lzmq -pthread -lrt -ltiff -L$(ZMQLIB) -L$(CBFLIBDIR)/lib/ -std=c++11
|
||||||
|
#
|
||||||
|
MAIN=ctbGui.cpp
|
||||||
|
|
||||||
|
DESTDIR?=../bin
|
||||||
|
|
||||||
|
|
||||||
|
OBJS = $(SRC:.cpp=.o) $(MAIN:.cpp=.o)
|
||||||
|
|
||||||
|
all: $(DESTDIR)/ctbGui
|
||||||
|
|
||||||
|
|
||||||
|
doc:
|
||||||
|
cd manual && make DESTDIR=$(DESTDIR)
|
||||||
|
|
||||||
|
htmldoc:
|
||||||
|
cd manual && make html DESTDIR=$(DESTDIR)
|
||||||
|
|
||||||
|
ctbDict.cpp: $(INCS) $(LINKDEF)
|
||||||
|
rootcint -f ctbDict.cpp -c $(INCS) $(LINKDEF)
|
||||||
|
|
||||||
|
%.o : %.cpp
|
||||||
|
echo $@
|
||||||
|
g++ -DMYROOT `root-config --cflags --glibs` -lMinuit -DCTB $(LDFLAG) -o $@ -c $< $(INCDIR)
|
||||||
|
#$(CXX) -o $@ -c $< $(INCLUDES) $(DFLAGS) -fPIC $(EPICSFLAGS) -lpthread #$(FLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(DESTDIR)/ctbGui: $(OBJS) $(LINKDEF)
|
||||||
|
g++ -DMYROOT `root-config --cflags --glibs` -lMinuit -DCTB $(LDFLAG) -o ctbGui $(INCDIR) $(OBJS) ../slsDetectorCalibration/tiffIO.cpp
|
||||||
|
mv ctbGui $(DESTDIR)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(DESTDIR)/ctbGui *.o ctbDict.* $(OBJS)
|
||||||
|
|
45
ctbGui/Makefile.root6
Normal file
45
ctbGui/Makefile.root6
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
|
||||||
|
INCS=ctbMain.h ctbDacs.h ctbPattern.h ctbSignals.h ctbAdcs.h ctbAcquisition.h ctbPowers.h ctbSlowAdcs.h
|
||||||
|
SRC= $(INCS:.h=.cpp) ctbDict.cpp
|
||||||
|
LINKDEF=ctbLinkDef.h
|
||||||
|
#ctbActions.h
|
||||||
|
ZMQLIB=../slsReceiverSoftware/include
|
||||||
|
LIBRARYCBF=$(CBFLIBDIR)/lib/*.o
|
||||||
|
|
||||||
|
INCDIR=-I../slsReceiverSoftware/include/ -I../slsDetectorSoftware/include/ -I../slsSupportLib/include/ -I../slsDetectorCalibration -I../slsDetectorCalibration/dataStructures -I$(CBFLIBDIR)/include -I../slsDetectorCalibration/interpolations
|
||||||
|
LDFLAG=-L../bin -lSlsDetector -lSlsSupport -L/usr/lib64/ -lpthread -lm -lstdc++ -lzmq -pthread -lrt -ltiff -L$(ZMQLIB) -L$(CBFLIBDIR)/lib/ -std=c++11
|
||||||
|
#
|
||||||
|
MAIN=ctbGui.cpp
|
||||||
|
|
||||||
|
DESTDIR?=../bin
|
||||||
|
|
||||||
|
|
||||||
|
OBJS = $(SRC:.cpp=.o) $(MAIN:.cpp=.o)
|
||||||
|
|
||||||
|
all: $(DESTDIR)/ctbGui
|
||||||
|
|
||||||
|
|
||||||
|
doc:
|
||||||
|
cd manual && make DESTDIR=$(DESTDIR)
|
||||||
|
|
||||||
|
htmldoc:
|
||||||
|
cd manual && make html DESTDIR=$(DESTDIR)
|
||||||
|
|
||||||
|
ctbDict.cpp: $(INCS) $(LINKDEF)
|
||||||
|
rootcling -f ctbDict.cpp -c $(INCS) $(LINKDEF)
|
||||||
|
|
||||||
|
%.o : %.cpp
|
||||||
|
echo $@
|
||||||
|
g++ -DMYROOT `root-config --cflags --glibs` -lMinuit -DCTB $(LDFLAG) -o $@ -c $< $(INCDIR)
|
||||||
|
#$(CXX) -o $@ -c $< $(INCLUDES) $(DFLAGS) -fPIC $(EPICSFLAGS) -lpthread #$(FLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(DESTDIR)/ctbGui: $(OBJS) $(LINKDEF)
|
||||||
|
g++ -DMYROOT `root-config --cflags --glibs` -lMinuit -DCTB $(LDFLAG) -o ctbGui $(INCDIR) $(OBJS) ../slsDetectorCalibration/tiffIO.cpp
|
||||||
|
mv ctbGui $(DESTDIR)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(DESTDIR)/ctbGui *.o ctbDict.* $(OBJS)
|
||||||
|
|
2058
ctbGui/ctbAcquisition.cpp
Executable file
2058
ctbGui/ctbAcquisition.cpp
Executable file
File diff suppressed because it is too large
Load Diff
234
ctbGui/ctbAcquisition.h
Executable file
234
ctbGui/ctbAcquisition.h
Executable file
@ -0,0 +1,234 @@
|
|||||||
|
#ifndef CTBACQUISITION_H
|
||||||
|
#define CTBACQUISITION_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
#include "ctbAdcs.h"
|
||||||
|
#include "ctbSignals.h"
|
||||||
|
#include "ctbPattern.h"
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
class TThread;
|
||||||
|
class TGraph;
|
||||||
|
class TMultiGraph;
|
||||||
|
class THStack;
|
||||||
|
class TGButtonGroup;
|
||||||
|
class TGRadioButton;
|
||||||
|
class TGComboBox;
|
||||||
|
class TTimer;
|
||||||
|
class TCanvas;
|
||||||
|
class TH2F;
|
||||||
|
class TH1F;
|
||||||
|
class TGLabel;
|
||||||
|
class TGTextButton;
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
class detectorData;
|
||||||
|
|
||||||
|
template <class dataType> class slsDetectorData;
|
||||||
|
class singlePhotonDetector;
|
||||||
|
//class singlePhotonDetector;
|
||||||
|
class commonModeSubtraction;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <stdint.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class ctbAcquisition : public TGGroupFrame {
|
||||||
|
|
||||||
|
|
||||||
|
enum {MOENCH03, MOENCH02, ADCSAR2, MYTHEN301, MYTHEN302};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
TGTextEntry *eOutdir;
|
||||||
|
TGTextEntry *eFname;
|
||||||
|
TGNumberEntry *eFindex;
|
||||||
|
TGCheckButton *cFileSave;
|
||||||
|
|
||||||
|
|
||||||
|
TGNumberEntry *eSerOff;
|
||||||
|
TGNumberEntry *eDynRange;
|
||||||
|
TGNumberEntry *eNumCount;
|
||||||
|
|
||||||
|
|
||||||
|
TGNumberEntry *eFitADC;
|
||||||
|
TGNumberEntry *eBitPlot;
|
||||||
|
TGNumberEntry *eMinRaw;
|
||||||
|
TGNumberEntry *eMaxRaw;
|
||||||
|
TGNumberEntry *eMinPedSub;
|
||||||
|
TGNumberEntry *eMaxPedSub;
|
||||||
|
TGCheckButton *cMinMaxRaw;
|
||||||
|
TGCheckButton *cMinMaxPedSub;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TGNumberEntry *eMeasurements;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TGTextButton *bStatus;
|
||||||
|
// TGTextButton
|
||||||
|
TGCheckButton *cCompile;
|
||||||
|
TGTextButton *cLoad;
|
||||||
|
// TGCheckButton *cRun;
|
||||||
|
|
||||||
|
TThread *acqThread;
|
||||||
|
|
||||||
|
|
||||||
|
THStack *adcStack;
|
||||||
|
THStack *bitStack;
|
||||||
|
THStack *countsStack;
|
||||||
|
|
||||||
|
|
||||||
|
TH1F *adcHisto[NADCS];
|
||||||
|
TH1F *countsHisto[NADCS];
|
||||||
|
|
||||||
|
TH1F *bitHisto[NSIGNALS];
|
||||||
|
float bitOffset[NSIGNALS];
|
||||||
|
|
||||||
|
// int enableFlag[NADCS+4];
|
||||||
|
int roMode;
|
||||||
|
|
||||||
|
int dBitOffset;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TH1F *adcFit;
|
||||||
|
TH1F *bitPlot;
|
||||||
|
TH1F *countsFit;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TH2F *h2DMap; // for 2D detectors
|
||||||
|
TH1F *h1DMap; //for 1D detectors
|
||||||
|
|
||||||
|
// TH2F *h2Scan; // for 2D detectors
|
||||||
|
// TMultiGraph *mgAdcs;
|
||||||
|
// TH1I *plotAdc[NADCS];
|
||||||
|
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
|
||||||
|
int plotFlag[NADCS];
|
||||||
|
int bitPlotFlag[NSIGNALS];
|
||||||
|
|
||||||
|
int ip;
|
||||||
|
// int nChannels;
|
||||||
|
// int chanEnable;
|
||||||
|
//int nADCs;
|
||||||
|
|
||||||
|
std::vector <int> dbitlist;
|
||||||
|
std::vector <int> adclist;
|
||||||
|
|
||||||
|
TGButtonGroup *bgPlot;// = new TGVButtonGroup(main_frame);
|
||||||
|
TGRadioButton *rbPlotOff;
|
||||||
|
TGRadioButton *rbWaveform;
|
||||||
|
TGRadioButton *rbDistribution;
|
||||||
|
TGRadioButton *rb2D;
|
||||||
|
// TGRadioButton *rbScan;
|
||||||
|
TGComboBox *cbDetType;
|
||||||
|
TGCheckButton *cbGetPedestal;
|
||||||
|
TGCheckButton *cbSubtractPedestal;
|
||||||
|
TGCheckButton *cbCommonMode;
|
||||||
|
TGTextButton *bResetPedestal;
|
||||||
|
|
||||||
|
TGLabel *lClickX;
|
||||||
|
TGLabel *lClickY;
|
||||||
|
TGLabel *lClickValue;
|
||||||
|
|
||||||
|
|
||||||
|
TCanvas *myCanvas;
|
||||||
|
TTimer *plotTimer;
|
||||||
|
|
||||||
|
char patternFile[10000];
|
||||||
|
char patternCompiler[10000];
|
||||||
|
|
||||||
|
int globalPlot;
|
||||||
|
|
||||||
|
int nAnalogSamples, nDigitalSamples;
|
||||||
|
// int iScanStep;
|
||||||
|
|
||||||
|
slsDetectorData<uint16_t> *dataStructure;
|
||||||
|
singlePhotonDetector *photonFinder;
|
||||||
|
//singlePhotonDetector *photonFinder;
|
||||||
|
commonModeSubtraction *commonMode;
|
||||||
|
int cmSub;
|
||||||
|
|
||||||
|
int stop;
|
||||||
|
|
||||||
|
uint64_t dBitMask;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbAcquisition(TGVerticalFrame*, multiSlsDetector*);
|
||||||
|
void setOutdir();
|
||||||
|
void setFname();
|
||||||
|
void setMeasurements();
|
||||||
|
void setFsave(Bool_t);
|
||||||
|
void changePlot(Int_t);
|
||||||
|
void changeDetector(Int_t);
|
||||||
|
void changePlot();
|
||||||
|
void changeDetector();
|
||||||
|
void setFindex();
|
||||||
|
void Draw();
|
||||||
|
void setCanvas(TCanvas*);
|
||||||
|
|
||||||
|
void toggleAcquisition();
|
||||||
|
void loadPattern();
|
||||||
|
static void* ThreadHandle(void *arg);
|
||||||
|
void update();
|
||||||
|
void acquisitionFinished();
|
||||||
|
// string getParameters();
|
||||||
|
|
||||||
|
void setGraph (int i ,int en, Pixel_t col);
|
||||||
|
void setBitGraph (int i ,int en, Pixel_t col);
|
||||||
|
void startAcquisition();
|
||||||
|
static int progressCallback(double,void*);
|
||||||
|
static int dataCallback(detectorData*, int,int, void*);
|
||||||
|
int StopFlag;
|
||||||
|
|
||||||
|
int plotData(detectorData*, int);
|
||||||
|
|
||||||
|
void setPatternFile(const char* t);
|
||||||
|
|
||||||
|
void setPatternCompiler(const char* t);
|
||||||
|
|
||||||
|
void setAnalogSamples(int);
|
||||||
|
void setDigitalSamples(int);
|
||||||
|
|
||||||
|
void setADCEnable(Int_t);
|
||||||
|
void setDbitEnable(Int_t);
|
||||||
|
void setReadoutMode(int);
|
||||||
|
void updateChans();
|
||||||
|
|
||||||
|
void resetPedestal();
|
||||||
|
|
||||||
|
void ToggleCommonMode(Bool_t);
|
||||||
|
void TogglePedSub(Bool_t);
|
||||||
|
void ChangeHistoLimitsPedSub(Long_t );
|
||||||
|
void ChangeHistoLimitsRaw(Long_t);
|
||||||
|
void ChangeHistoLimitsPedSub( );
|
||||||
|
void ChangeHistoLimitsRaw();
|
||||||
|
void ChangeHistoLimitsPedSub(Bool_t );
|
||||||
|
void ChangeHistoLimitsRaw(Bool_t);
|
||||||
|
|
||||||
|
|
||||||
|
void ChangeSerialOffset();
|
||||||
|
void ChangeSerialOffset(Long_t);
|
||||||
|
void ChangeNumberOfChannels();
|
||||||
|
void ChangeNumberOfChannels(Long_t);
|
||||||
|
void ChangeDynamicRange();
|
||||||
|
void ChangeDynamicRange(Long_t);
|
||||||
|
|
||||||
|
|
||||||
|
void canvasClicked();
|
||||||
|
void FitADC();
|
||||||
|
void plotBit();
|
||||||
|
ClassDef(ctbAcquisition,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
710
ctbGui/ctbAdcs.cpp
Executable file
710
ctbGui/ctbAdcs.cpp
Executable file
@ -0,0 +1,710 @@
|
|||||||
|
#include <TApplication.h>
|
||||||
|
#include <TGClient.h>
|
||||||
|
#include <TCanvas.h>
|
||||||
|
#include <TF1.h>
|
||||||
|
#include <TRandom.h>
|
||||||
|
#include <TGButton.h>
|
||||||
|
#include <TRootEmbeddedCanvas.h>
|
||||||
|
#include <TGButtonGroup.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TList.h>
|
||||||
|
#include <TGFileDialog.h>
|
||||||
|
#include <TGComboBox.h>
|
||||||
|
#include <TH2F.h>
|
||||||
|
#include <TColor.h>
|
||||||
|
#include <TH1F.h>
|
||||||
|
#include <TGraphErrors.h>
|
||||||
|
#include <TGColorSelect.h>
|
||||||
|
#include <THStack.h>
|
||||||
|
#include <TGTab.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include "ctbAdcs.h"
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "slsDetectorCommand.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbAdc::ctbAdc(TGVerticalFrame *page, int i, multiSlsDetector *det)
|
||||||
|
: TGHorizontalFrame(page, 800,800), id(i), myDet(det) {
|
||||||
|
|
||||||
|
TGHorizontalFrame *hframe=this;
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
page->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "ADC%d", id);
|
||||||
|
|
||||||
|
sAdcLabel= new TGLabel(hframe, tit);
|
||||||
|
hframe->AddFrame(sAdcLabel,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sAdcLabel->MapWindow();
|
||||||
|
sAdcLabel->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sAdcInvert= new TGCheckButton(hframe, "Inv");
|
||||||
|
hframe->AddFrame( sAdcInvert,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sAdcInvert->MapWindow();
|
||||||
|
sAdcInvert->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledInvert(Bool_t)");
|
||||||
|
|
||||||
|
|
||||||
|
sAdcEnable= new TGCheckButton(hframe, "En");
|
||||||
|
hframe->AddFrame( sAdcEnable,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sAdcEnable->MapWindow();
|
||||||
|
// sAdcEnable->SetOn(kTRUE);
|
||||||
|
// sAdcEnable->SetEnabled(kFALSE);
|
||||||
|
sAdcEnable->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledEnable(Bool_t)");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sAdcPlot= new TGCheckButton(hframe, "Plot");
|
||||||
|
hframe->AddFrame( sAdcPlot,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sAdcPlot->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
sAdcPlot->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledPlot(Bool_t)");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fColorSel = new TGColorSelect(hframe, id+1, 0);
|
||||||
|
|
||||||
|
fColorSel->Connect("ColorSelected(Pixel_t)","ctbAdc",this,"ColorChanged(Pixel_t)");
|
||||||
|
hframe->AddFrame(fColorSel, new TGLayoutHints(kLHintsTop |
|
||||||
|
kLHintsLeft, 2, 0, 2, 2));
|
||||||
|
|
||||||
|
|
||||||
|
fColorSel->SetColor(TColor::Number2Pixel(id+1));
|
||||||
|
// sprintf(tit,"adc%d",id);
|
||||||
|
// gADC=new TGraph();
|
||||||
|
// gADC->SetName(tit);
|
||||||
|
// gADC->SetLineColor(id+1);
|
||||||
|
// gADC->SetMarkerColor(id+1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
Pixel_t ctbAdc::getColor(){
|
||||||
|
return fColorSel->GetColor();
|
||||||
|
}
|
||||||
|
Bool_t ctbAdc::getEnabled(){
|
||||||
|
return getPlot();
|
||||||
|
}
|
||||||
|
Bool_t ctbAdc::getPlot(){
|
||||||
|
return sAdcPlot->IsOn();
|
||||||
|
}
|
||||||
|
Bool_t ctbAdc::getInverted(){
|
||||||
|
return sAdcInvert->IsOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool_t ctbAdc::getEnable(){
|
||||||
|
return sAdcEnable->IsOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::setInverted(Bool_t b){
|
||||||
|
// cout << id << "set enabled " << b << endl;
|
||||||
|
if (b)
|
||||||
|
sAdcInvert->SetOn(kTRUE,kTRUE);
|
||||||
|
else
|
||||||
|
sAdcInvert->SetOn(kFALSE,kTRUE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::setEnable(Bool_t b){
|
||||||
|
// cout << id << "set enabled " << b << endl;
|
||||||
|
if (b)
|
||||||
|
sAdcEnable->SetOn(kTRUE,kFALSE);
|
||||||
|
else
|
||||||
|
sAdcEnable->SetOn(kFALSE,kFALSE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::setAdcAlias(char *tit, int plot, int color) {
|
||||||
|
if (tit)
|
||||||
|
sAdcLabel->SetText(tit);
|
||||||
|
if (plot>0)
|
||||||
|
sAdcPlot->SetOn(kTRUE,kTRUE);
|
||||||
|
else if (plot==0)
|
||||||
|
sAdcPlot->SetOn(kFALSE,kTRUE);
|
||||||
|
if (color>=0)
|
||||||
|
fColorSel->SetColor(color);
|
||||||
|
fColorSel->SetEnabled(sAdcPlot->IsOn());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string ctbAdc::getAdcAlias() {
|
||||||
|
|
||||||
|
char line[1000];
|
||||||
|
sprintf(line,"ADC%d %s %d %x\n",id,sAdcLabel->GetText()->Data(),sAdcPlot->IsOn(),fColorSel->GetColor());
|
||||||
|
return string(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdc::update() {
|
||||||
|
|
||||||
|
|
||||||
|
//Emit("ToggledAdcEnable(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::ToggledPlot(Bool_t b){
|
||||||
|
|
||||||
|
// Long_t mask=b<<id;
|
||||||
|
// ToggledAdcPlot(mask);
|
||||||
|
cout << "Colsel " << id << " enable " << b << endl;
|
||||||
|
if (b)
|
||||||
|
fColorSel->SetEnabled(kTRUE);
|
||||||
|
else
|
||||||
|
fColorSel->SetEnabled(kFALSE);
|
||||||
|
|
||||||
|
// fColorSel->SetEnabled(sAdcPlot->IsOn());
|
||||||
|
Emit("ToggledAdcPlot(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::ToggledInvert(Bool_t b){
|
||||||
|
|
||||||
|
|
||||||
|
// fColorSel->SetEnabled(sAdcPlot->IsOn());
|
||||||
|
Emit("ToggledAdcInvert(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::ToggledEnable(Bool_t b){
|
||||||
|
|
||||||
|
|
||||||
|
fColorSel->SetEnabled(sAdcPlot->IsOn());
|
||||||
|
Emit("ToggledAdcEnable(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::ColorChanged(Pixel_t) {
|
||||||
|
|
||||||
|
Emit("ToggledAdcPlot(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdc::ToggledAdcPlot(Int_t b){
|
||||||
|
|
||||||
|
|
||||||
|
Emit("ToggledAdcPlot(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdc::ToggledAdcInvert(Int_t b){
|
||||||
|
|
||||||
|
|
||||||
|
Emit("ToggledAdcInvert(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdc::ToggledAdcEnable(Int_t b){
|
||||||
|
|
||||||
|
|
||||||
|
Emit("ToggledAdcEnable(Int_t)", id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdc::setEnabled(Bool_t b){
|
||||||
|
// cout << id << "set enabled " << b << endl;
|
||||||
|
if (b)
|
||||||
|
sAdcPlot->SetOn(kTRUE,kFALSE);
|
||||||
|
else
|
||||||
|
sAdcPlot->SetOn(kFALSE,kFALSE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbAdcs::ctbAdcs(TGVerticalFrame *page, multiSlsDetector *det)
|
||||||
|
: TGGroupFrame(page,"Adcs",kVerticalFrame), myDet(det) {
|
||||||
|
|
||||||
|
|
||||||
|
SetTitlePos(TGGroupFrame::kLeft);
|
||||||
|
page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame* hframe=new TGHorizontalFrame(this, 800,800);
|
||||||
|
AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int idac=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame* hhframe=new TGHorizontalFrame(this, 800,800);
|
||||||
|
AddFrame(hhframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hhframe->MapWindow();
|
||||||
|
|
||||||
|
TGVerticalFrame *vframe;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (idac=0; idac<NADCS; idac++) {
|
||||||
|
if (idac%16==0) {
|
||||||
|
|
||||||
|
|
||||||
|
vframe=new TGVerticalFrame(hhframe, 400,800);
|
||||||
|
hhframe->AddFrame(vframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
vframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sAdc[idac]=new ctbAdc(vframe,idac,myDet);
|
||||||
|
|
||||||
|
|
||||||
|
sAdc[idac]->Connect("ToggledAdcPlot(Int_t)","ctbAdcs",this,"ToggledAdcPlot(Int_t)");
|
||||||
|
sAdc[idac]->Connect("ToggledAdcInvert(Int_t)","ctbAdcs",this,"ToggledAdcInvert(Int_t)");
|
||||||
|
sAdc[idac]->Connect("ToggledAdcEnable(Int_t)","ctbAdcs",this,"ToggledAdcEnable(Int_t)");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(this, 800,800);
|
||||||
|
AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
bCheckHalf[0]=new TGTextButton(hframe, "All 0-15");
|
||||||
|
hframe->AddFrame(bCheckHalf[0],new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bCheckHalf[0]->MapWindow();
|
||||||
|
bCheckHalf[0]->Connect("Clicked()","ctbAdcs",this,"CheckHalf0()");
|
||||||
|
|
||||||
|
|
||||||
|
bRemoveHalf[0]=new TGTextButton(hframe, "None 0-15");
|
||||||
|
hframe->AddFrame(bRemoveHalf[0],new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bRemoveHalf[0]->MapWindow();
|
||||||
|
bRemoveHalf[0]->Connect("Clicked()","ctbAdcs",this,"RemoveHalf0()");
|
||||||
|
|
||||||
|
|
||||||
|
bCheckHalf[1]=new TGTextButton(hframe, "All 16-23");
|
||||||
|
hframe->AddFrame(bCheckHalf[1],new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bCheckHalf[1]->MapWindow();
|
||||||
|
bCheckHalf[1]->Connect("Clicked()","ctbAdcs",this,"CheckHalf1()");
|
||||||
|
// bCheckAll->Connect("Clicked()","ctbAdcs",this,"CheckAll()");
|
||||||
|
|
||||||
|
|
||||||
|
bRemoveHalf[1]=new TGTextButton(hframe, "None 16-23");
|
||||||
|
hframe->AddFrame(bRemoveHalf[1],new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bRemoveHalf[1]->MapWindow();
|
||||||
|
bRemoveHalf[1]->Connect("Clicked()","ctbAdcs",this,"RemoveHalf1()");
|
||||||
|
// bRemoveAll->Connect("Clicked()","ctbAdcs",this,"RemoveAll()");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(this, 800,800);
|
||||||
|
AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
bCheckAll=new TGTextButton(hframe, "All");
|
||||||
|
hframe->AddFrame(bCheckAll,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bCheckAll->MapWindow();
|
||||||
|
bCheckAll->Connect("Clicked()","ctbAdcs",this,"CheckAll()");
|
||||||
|
|
||||||
|
|
||||||
|
bRemoveAll=new TGTextButton(hframe, "None");
|
||||||
|
hframe->AddFrame(bRemoveAll,new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
bRemoveAll->MapWindow();
|
||||||
|
bRemoveAll->Connect("Clicked()","ctbAdcs",this,"RemoveAll()");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(this, 800,50);
|
||||||
|
AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
TGLabel *label= new TGLabel(hframe, "Inversion mask: ");
|
||||||
|
hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
label->MapWindow();
|
||||||
|
label->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
eInversionMask = new TGNumberEntry(hframe, 0, 16,999, TGNumberFormat::kNESHex,
|
||||||
|
TGNumberFormat::kNEANonNegative,
|
||||||
|
TGNumberFormat::kNELNoLimits);
|
||||||
|
|
||||||
|
hframe->AddFrame(eInversionMask,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
eInversionMask->MapWindow();
|
||||||
|
eInversionMask->Resize(150,30);
|
||||||
|
eInversionMask->SetState(kFALSE);
|
||||||
|
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(this, 800,50);
|
||||||
|
AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
label= new TGLabel(hframe, "Enable mask: ");
|
||||||
|
hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
label->MapWindow();
|
||||||
|
label->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
eEnableMask = new TGNumberEntry(hframe, 0, 16,999, TGNumberFormat::kNESHex,
|
||||||
|
TGNumberFormat::kNEANonNegative,
|
||||||
|
TGNumberFormat::kNELNoLimits);
|
||||||
|
|
||||||
|
hframe->AddFrame(eEnableMask,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
eEnableMask->MapWindow();
|
||||||
|
eEnableMask->Resize(150,30);
|
||||||
|
eEnableMask->SetState(kFALSE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ctbAdcs::setEnable(int reg) {
|
||||||
|
|
||||||
|
// char aargs[10][100];
|
||||||
|
// char *args[10];
|
||||||
|
string retval;
|
||||||
|
int retreg;
|
||||||
|
|
||||||
|
// for (int i=0; i<10; i++) args[i]=aargs[i];
|
||||||
|
|
||||||
|
// sprintf(args[0],"adcenable");
|
||||||
|
// sprintf(args[1],"%x",reg);
|
||||||
|
// slsDetectorCommand *cmd=new slsDetectorCommand(myDet);
|
||||||
|
// if (reg>-1) {
|
||||||
|
// retval=cmd->executeLine(1,args,slsDetectorDefs::PUT_ACTION);
|
||||||
|
// }
|
||||||
|
if (reg>-1) {
|
||||||
|
try {
|
||||||
|
myDet->setADCEnableMask(reg);
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION);
|
||||||
|
// cout <<"enable: " << retval << endl;;
|
||||||
|
// delete cmd;
|
||||||
|
|
||||||
|
// sscanf(retval.c_str(),"%x",&retreg);
|
||||||
|
try {
|
||||||
|
retreg=myDet->getADCEnableMask();
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
eEnableMask->SetHexNumber(retreg);
|
||||||
|
|
||||||
|
return retreg;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbAdcs::setInvert(int reg) {
|
||||||
|
|
||||||
|
// char aargs[10][100];
|
||||||
|
// char *args[10];
|
||||||
|
string retval;
|
||||||
|
int retreg;
|
||||||
|
|
||||||
|
// for (int i=0; i<10; i++) args[i]=aargs[i];
|
||||||
|
|
||||||
|
//sprint// f(args[0],"adcinvert");
|
||||||
|
// sprintf(args[1],"%x",reg);
|
||||||
|
// slsDetectorCommand *cmd=new slsDetectorCommand(myDet);
|
||||||
|
|
||||||
|
if (reg>-1) {
|
||||||
|
try {
|
||||||
|
myDet->setADCInvert(reg);
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
//retval=cmd->executeLine(1,args,slsDetectorDefs::PUT_ACTION);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
retreg=myDet->getADCInvert();
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION);
|
||||||
|
// cout <<"invert: " << retval << endl;;
|
||||||
|
// delete cmd;
|
||||||
|
|
||||||
|
// sscanf(retval.c_str(),"%x",&retreg);
|
||||||
|
eInversionMask->SetHexNumber(retreg);
|
||||||
|
return retreg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::update() {
|
||||||
|
Int_t invreg;//=myDet->readRegister(67);//(120);
|
||||||
|
Int_t disreg;//=myDet->readRegister(120);//(94);
|
||||||
|
// for (int i=0; i<10; i++)
|
||||||
|
// args[i]=aargs[i];
|
||||||
|
|
||||||
|
// string retval;
|
||||||
|
// sprintf(args[0],"adcenable");
|
||||||
|
// slsDetectorCommand *cmd=new slsDetectorCommand(myDet);
|
||||||
|
// retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION);
|
||||||
|
// delete cmd;
|
||||||
|
// // cout << retval << endl;
|
||||||
|
|
||||||
|
// sscanf(retval.c_str(),"adcenable %x",&disreg);
|
||||||
|
|
||||||
|
// eInversionMask->SetHexNumber(invreg);
|
||||||
|
// eEnableMask->SetHexNumber(disreg);
|
||||||
|
|
||||||
|
disreg=setEnable();
|
||||||
|
invreg=setInvert();
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS; is++) {
|
||||||
|
sAdc[is]->setAdcAlias(NULL,-1,-1);
|
||||||
|
if (invreg & (1<<is) )
|
||||||
|
sAdc[is]->setInverted(kTRUE);
|
||||||
|
else
|
||||||
|
sAdc[is]->setInverted(kFALSE);
|
||||||
|
|
||||||
|
if (disreg & (1<<is) )
|
||||||
|
sAdc[is]->setEnable(kTRUE);
|
||||||
|
else
|
||||||
|
sAdc[is]->setEnable(kFALSE);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Emit("AdcEnable(Int_t)", disreg);
|
||||||
|
|
||||||
|
}
|
||||||
|
string ctbAdcs::getAdcParameters() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
line << "reg "<< hex << setInvert() << "# ADC invert reg" << dec << endl;
|
||||||
|
line << "reg "<< hex << setEnable() << " # ADC enable reg"<< dec << endl;
|
||||||
|
// line << "reg "<< hex << 67 << " " << myDet->readRegister(67) << "# ADC invert reg" << dec << endl;
|
||||||
|
// line << "reg "<< hex << 120 << " " << myDet->readRegister(120) << " # ADC enable reg"<< dec << endl;
|
||||||
|
// // line << "reg "<< hex << 94 << " " << myDet->readRegister(94) << " # ADC enable reg"<< dec << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::CheckAll() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS; is++)
|
||||||
|
sAdc[is]->setEnabled(kTRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::RemoveAll() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS; is++)
|
||||||
|
sAdc[is]->setEnabled(kFALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::CheckHalf0() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS/2; is++)
|
||||||
|
sAdc[is]->setEnabled(kTRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::RemoveHalf0() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS/2; is++)
|
||||||
|
sAdc[is]->setEnabled(kFALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdcs::CheckHalf1() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=NADCS/2; is<NADCS; is++)
|
||||||
|
sAdc[is]->setEnabled(kTRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::RemoveHalf1() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int is=NADCS/2; is<NADCS; is++)
|
||||||
|
sAdc[is]->setEnabled(kFALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TGraph* ctbAdcs::getGraph(int i) {
|
||||||
|
|
||||||
|
// if (i>=0 && i<NADCS)
|
||||||
|
// return sAdc[i]->getGraph();
|
||||||
|
// return NULL;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int ctbAdcs::setAdcAlias(string line) {
|
||||||
|
|
||||||
|
int is=-1, plot=0, color=-1;
|
||||||
|
char tit[100];
|
||||||
|
int narg=sscanf(line.c_str(),"ADC%d %s %d %x",&is,tit,&plot, &color);
|
||||||
|
if (narg<2)
|
||||||
|
return -1;
|
||||||
|
if (narg!=3)
|
||||||
|
color=-1;
|
||||||
|
if (is>=0 && is<NADCS) {
|
||||||
|
sAdc[is]->setAdcAlias(tit,plot,color);
|
||||||
|
}
|
||||||
|
return is;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbAdcs::getAdcAlias() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int is=0; is<NADCS; is++)
|
||||||
|
line << sAdc[is]->getAdcAlias();
|
||||||
|
|
||||||
|
return line.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::ToggledAdcPlot(Int_t b){
|
||||||
|
|
||||||
|
|
||||||
|
Emit("ToggledAdcPlot(Int_t)", b);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbAdcs::AdcEnable(Int_t b){
|
||||||
|
Emit("AdcEnable(Int_t)", b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::ToggledAdcEnable(Int_t b){
|
||||||
|
|
||||||
|
|
||||||
|
Int_t oreg=setEnable();//myDet->readRegister(67);
|
||||||
|
Int_t m=1<<b;
|
||||||
|
|
||||||
|
|
||||||
|
if (sAdc[b]->getEnable())
|
||||||
|
oreg|=m;
|
||||||
|
else
|
||||||
|
oreg&=~m;
|
||||||
|
|
||||||
|
// cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl;
|
||||||
|
|
||||||
|
setEnable(oreg);//)writeRegister(67, oreg);
|
||||||
|
//oreg=setEnable();//myDet->readRegister(67);
|
||||||
|
|
||||||
|
|
||||||
|
Emit("AdcEnable(Int_t)", oreg);
|
||||||
|
//cout << "enable!" << endl;
|
||||||
|
// Emit("ToggledAdcPlot(Int_t)", b);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbAdcs::ToggledAdcInvert(Int_t b){
|
||||||
|
|
||||||
|
// char val[1000];
|
||||||
|
Int_t oreg=setInvert();//myDet->readRegister(67);
|
||||||
|
Int_t m=1<<b;
|
||||||
|
|
||||||
|
|
||||||
|
if (sAdc[b]->getInverted())
|
||||||
|
oreg|=m;
|
||||||
|
else
|
||||||
|
oreg&=~m;
|
||||||
|
|
||||||
|
// cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl;
|
||||||
|
|
||||||
|
setInvert(oreg);//)writeRegister(67, oreg);
|
||||||
|
// oreg=setInvert();//myDet->readRegister(67);
|
||||||
|
|
||||||
|
// cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl;
|
||||||
|
|
||||||
|
//sprintf(val,"%X",oreg);
|
||||||
|
//eInversionMask->SetHexNumber(oreg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pixel_t ctbAdcs::getColor(int i){
|
||||||
|
if (i>=0 && i<NADCS)
|
||||||
|
return sAdc[i]->getColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool_t ctbAdcs::getEnabled(int i){
|
||||||
|
if (i>=0 && i<NADCS)
|
||||||
|
return sAdc[i]->getEnabled();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool_t ctbAdcs::getEnable(int i){
|
||||||
|
if (i>=0 && i<NADCS)
|
||||||
|
return sAdc[i]->getEnable();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool_t ctbAdcs::getPlot(int i){
|
||||||
|
if (i>=0 && i<NADCS)
|
||||||
|
return sAdc[i]->getPlot();
|
||||||
|
|
||||||
|
}
|
151
ctbGui/ctbAdcs.h
Executable file
151
ctbGui/ctbAdcs.h
Executable file
@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CTBADCS_H
|
||||||
|
#define CTBADCS_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define NADCS 32
|
||||||
|
|
||||||
|
class TRootEmbeddedCanvas;
|
||||||
|
class TGButtonGroup;
|
||||||
|
class TGVerticalFrame;
|
||||||
|
class TGHorizontalFrame;
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TH2F;
|
||||||
|
class TGComboBox;
|
||||||
|
class TGCheckButton;
|
||||||
|
class TGColorSelect;
|
||||||
|
class TColor;
|
||||||
|
|
||||||
|
class THStack;
|
||||||
|
class TGraphErrors;
|
||||||
|
class TGTextButton;
|
||||||
|
class TGTab;
|
||||||
|
|
||||||
|
class TGraph;
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class ctbAdc : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
TGLabel *sAdcLabel;
|
||||||
|
TGCheckButton *sAdcEnable;
|
||||||
|
TGCheckButton *sAdcPlot;
|
||||||
|
TGCheckButton *sAdcInvert;
|
||||||
|
|
||||||
|
TGColorSelect *fColorSel;
|
||||||
|
|
||||||
|
// TGraph *gADC;
|
||||||
|
|
||||||
|
int id;
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbAdc(TGVerticalFrame *page, int i, multiSlsDetector *det);
|
||||||
|
|
||||||
|
|
||||||
|
void setAdcAlias(char *tit, int plot, int color);
|
||||||
|
string getAdcAlias();
|
||||||
|
void ToggledAdcPlot(Int_t b);
|
||||||
|
void ToggledAdcEnable(Int_t b);
|
||||||
|
void ToggledAdcInvert(Int_t b);
|
||||||
|
|
||||||
|
|
||||||
|
void ToggledPlot(Bool_t b);
|
||||||
|
void ToggledEnable(Bool_t b);
|
||||||
|
void ToggledInvert(Bool_t b);
|
||||||
|
void ColorChanged(Pixel_t);
|
||||||
|
void setEnabled(Bool_t b);
|
||||||
|
Bool_t getEnabled();
|
||||||
|
// TGraph *getGraph();
|
||||||
|
void update();
|
||||||
|
|
||||||
|
Pixel_t getColor();
|
||||||
|
|
||||||
|
Bool_t getEnable();
|
||||||
|
void setEnable(Bool_t);
|
||||||
|
Bool_t getInverted();
|
||||||
|
Bool_t getPlot();
|
||||||
|
void setInverted(Bool_t);
|
||||||
|
|
||||||
|
ClassDef(ctbAdc,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ctbAdcs : public TGGroupFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
ctbAdc *sAdc[NADCS];
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
|
||||||
|
TGTextButton *bCheckAll;
|
||||||
|
TGTextButton *bRemoveAll;
|
||||||
|
TGTextButton *bCheckHalf[2];
|
||||||
|
TGTextButton *bRemoveHalf[2];
|
||||||
|
TGNumberEntry *eInversionMask;
|
||||||
|
TGNumberEntry *eEnableMask;
|
||||||
|
|
||||||
|
|
||||||
|
/* TGTextButton *bPlotSelected; */
|
||||||
|
/* TGNumberEntry *eMinX; */
|
||||||
|
/* TGNumberEntry *eMaxX; */
|
||||||
|
/* TGNumberEntry *eMinY; */
|
||||||
|
/* TGNumberEntry *eMaxY; */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TGTextButton *bGetPixel; */
|
||||||
|
/* TGNumberEntry *ePixelX; */
|
||||||
|
/* TGNumberEntry *ePixelY; */
|
||||||
|
/* TGLabel *lPixelValue; */
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ctbAdcs(TGVerticalFrame *page, multiSlsDetector *det);
|
||||||
|
int setAdcAlias(string line);
|
||||||
|
string getAdcAlias();
|
||||||
|
string getAdcParameters();
|
||||||
|
void ToggledAdcPlot(Int_t);
|
||||||
|
void ToggledAdcInvert(Int_t);
|
||||||
|
void ToggledAdcEnable(Int_t);
|
||||||
|
void AdcEnable(Int_t b);
|
||||||
|
// TGraph *getGraph(int i);
|
||||||
|
void CheckAll();
|
||||||
|
void RemoveAll();
|
||||||
|
void update();
|
||||||
|
|
||||||
|
int setInvert(int reg=-1);
|
||||||
|
int setEnable(int reg=-1);
|
||||||
|
|
||||||
|
|
||||||
|
Pixel_t getColor(int i);
|
||||||
|
Bool_t getEnabled(int i);
|
||||||
|
Bool_t getPlot(int i);
|
||||||
|
Bool_t getEnable(int i);
|
||||||
|
|
||||||
|
void CheckHalf0();
|
||||||
|
void RemoveHalf0();
|
||||||
|
|
||||||
|
void CheckHalf1();
|
||||||
|
void RemoveHalf1();
|
||||||
|
|
||||||
|
|
||||||
|
ClassDef(ctbAdcs,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
251
ctbGui/ctbDacs.cpp
Executable file
251
ctbGui/ctbDacs.cpp
Executable file
@ -0,0 +1,251 @@
|
|||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <TGTextEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGButton.h>
|
||||||
|
|
||||||
|
#include "ctbDacs.h"
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbDac::ctbDac(TGGroupFrame *page, int idac, multiSlsDetector *det) : TGHorizontalFrame(page, 800,50) , id(idac), myDet(det) {
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame *hframe=this;
|
||||||
|
|
||||||
|
page->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "DAC %d:",idac);
|
||||||
|
|
||||||
|
dacsLabel= new TGCheckButton(hframe, tit);// new TGLabel(hframe, tit);
|
||||||
|
dacsLabel->SetOn(kTRUE, kTRUE);
|
||||||
|
|
||||||
|
dacsLabel->Connect("Toggled(Bool_t)","ctbDac",this,"setOn(Bool_t)");
|
||||||
|
|
||||||
|
|
||||||
|
hframe->AddFrame(dacsLabel,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsLabel->MapWindow();
|
||||||
|
dacsLabel->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
dacsEntry = new TGNumberEntry(hframe, 0, 9,999, TGNumberFormat::kNESInteger,
|
||||||
|
TGNumberFormat::kNEANonNegative,
|
||||||
|
TGNumberFormat::kNELLimitMinMax,
|
||||||
|
0, 65535);
|
||||||
|
|
||||||
|
hframe->AddFrame(dacsEntry,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsEntry->MapWindow();
|
||||||
|
dacsEntry->Resize(150,30);
|
||||||
|
|
||||||
|
|
||||||
|
dacsUnit= new TGCheckButton(hframe, "mV");
|
||||||
|
// if (idac!=slsDetectorDefs::ADC_VPP) {
|
||||||
|
hframe->AddFrame( dacsUnit,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsUnit->MapWindow();
|
||||||
|
if (idac==slsDetectorDefs::ADC_VPP) {
|
||||||
|
dacsUnit->SetEnabled(kFALSE);
|
||||||
|
hframe->HideFrame(dacsUnit);
|
||||||
|
dacsUnit->MapWindow();
|
||||||
|
cout << "hiding!" << endl;
|
||||||
|
}
|
||||||
|
if (idac==slsDetectorDefs::HIGH_VOLTAGE) {
|
||||||
|
dacsUnit->SetText("V");
|
||||||
|
dacsUnit->SetOn(kTRUE,kTRUE);
|
||||||
|
dacsUnit->SetEnabled(kFALSE);
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "xxx");
|
||||||
|
dacsValue= new TGLabel(hframe, tit);
|
||||||
|
hframe->AddFrame( dacsValue,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsValue->MapWindow();
|
||||||
|
dacsValue->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
TGTextEntry *e=dacsEntry->TGNumberEntry::GetNumberEntry();
|
||||||
|
e->Connect("ReturnPressed()","ctbDac",this,"setValue()");
|
||||||
|
// e->Connect("ValueSet(Long_t)","ctbDac",this,"setValue(Long_t)");
|
||||||
|
dacsEntry->Connect("ValueSet(Long_t)","ctbDac",this,"setValue(Long_t)");
|
||||||
|
// cout << "(((((((((((((((((((((((((((((((" << dacsEntry->GetListOfSignals()->At(0)->IsA() << endl;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbDac::setLabel(char *tit, int mv) {
|
||||||
|
if(tit)
|
||||||
|
dacsLabel->SetText(tit);
|
||||||
|
if (mv==1)
|
||||||
|
dacsUnit->SetOn(kTRUE,kTRUE);
|
||||||
|
else if (mv==0)
|
||||||
|
dacsUnit->SetOn(kFALSE,kTRUE);
|
||||||
|
// else if (mv==2) {
|
||||||
|
// ;}
|
||||||
|
// else if (mv==3)
|
||||||
|
// ;
|
||||||
|
return id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbDac::getLabel() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
line << dacsLabel->GetText() << " " << dacsUnit->IsOn() << endl;
|
||||||
|
|
||||||
|
// line << "DAC" << dec << id << " " << dacsUnit->IsOn() << endl;
|
||||||
|
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbDac::setValue(Long_t a) {setValue();}
|
||||||
|
|
||||||
|
void ctbDac::setValue() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "setting dac! "<< id << " value " << dacsEntry->GetIntNumber() << " units " << dacsUnit->IsOn() << endl;
|
||||||
|
try {
|
||||||
|
myDet->setDAC(dacsEntry->GetIntNumber(), (slsDetectorDefs::dacIndex)id, dacsUnit->IsOn()); } catch (...) {
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbDac::setOn(Bool_t b) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// cout << "setting dac! "<< id << endl;
|
||||||
|
|
||||||
|
if ( dacsLabel->IsOn()) {
|
||||||
|
setValue();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
myDet->setDAC(-100, (slsDetectorDefs::dacIndex)id, 0);
|
||||||
|
} catch (...) {
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbDac::getValue() {
|
||||||
|
int val;
|
||||||
|
try {
|
||||||
|
val=myDet->setDAC(-1,(slsDetectorDefs::dacIndex)id, dacsUnit->IsOn());
|
||||||
|
} catch (...) {
|
||||||
|
cout << "Do nothing for this error" << endl;
|
||||||
|
}
|
||||||
|
char s[100];
|
||||||
|
cout << "dac " << id << " " << val << endl;
|
||||||
|
sprintf(s,"%d",val);
|
||||||
|
dacsValue->SetText(s);
|
||||||
|
if (val>=0) {
|
||||||
|
dacsLabel->SetOn(kTRUE);
|
||||||
|
} else {
|
||||||
|
dacsLabel->SetOn(kFALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return val;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbDacs::ctbDacs(TGVerticalFrame *page, multiSlsDetector *det) : TGGroupFrame(page,"DACs",kVerticalFrame) , myDet(det){
|
||||||
|
|
||||||
|
|
||||||
|
SetTitlePos(TGGroupFrame::kLeft);
|
||||||
|
page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
// cout << "window mapped " << endl;
|
||||||
|
|
||||||
|
for (int idac=0; idac<NDACS; idac++) {
|
||||||
|
|
||||||
|
dacs[idac]=new ctbDac(this, idac, myDet);
|
||||||
|
|
||||||
|
}
|
||||||
|
dacs[NDACS]=new ctbDac(this, slsDetectorDefs::ADC_VPP, myDet);
|
||||||
|
dacs[NDACS+1]=new ctbDac(this, slsDetectorDefs::HIGH_VOLTAGE, myDet);
|
||||||
|
dacs[NDACS]->setLabel("ADC Vpp",2);
|
||||||
|
dacs[NDACS+1]->setLabel("High Voltage",3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ctbDacs::setDacAlias(string line) {
|
||||||
|
|
||||||
|
int is=-1, mv=0;
|
||||||
|
char tit[100];
|
||||||
|
int narg=sscanf(line.c_str(),"DAC%d %s %d",&is,tit,&mv);
|
||||||
|
if (narg<2)
|
||||||
|
return -1;
|
||||||
|
if (is>=0 && is<NDACS)
|
||||||
|
dacs[is]->setLabel(tit,mv);
|
||||||
|
return is;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbDacs::getDacAlias() {
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int i=0; i<NDACS; i++)
|
||||||
|
line << dacs[i]->getLabel() << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
string ctbDacs::getDacParameters() {
|
||||||
|
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int i=0; i<NDACS; i++) {
|
||||||
|
//line << "dacs:" << i << " " << dacs[i]->getValue << endl;
|
||||||
|
line << "dac:" << i << " " << dacs[i]->getValue() << endl;
|
||||||
|
}
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbDacs::update() {
|
||||||
|
|
||||||
|
for (int idac=0; idac<NDACS+1; idac++) {
|
||||||
|
dacs[idac]->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
74
ctbGui/ctbDacs.h
Executable file
74
ctbGui/ctbDacs.h
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#ifndef CTBDACS_H
|
||||||
|
#define CTBDACS_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define NDACS 18
|
||||||
|
//#define NDACS 16
|
||||||
|
|
||||||
|
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
class ctbDac : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// TGLabel *dacsLabel;
|
||||||
|
TGNumberEntry *dacsEntry;
|
||||||
|
TGCheckButton *dacsUnit;
|
||||||
|
TGCheckButton *dacsLabel;
|
||||||
|
TGLabel *dacsValue;
|
||||||
|
int id;
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
public:
|
||||||
|
ctbDac(TGGroupFrame*, int , multiSlsDetector*);
|
||||||
|
void setValue();
|
||||||
|
void setValue(Long_t);
|
||||||
|
int getValue();
|
||||||
|
void setOn(Bool_t);
|
||||||
|
|
||||||
|
int setLabel(char *tit, int mv);
|
||||||
|
string getLabel();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ClassDef(ctbDac,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
class ctbDacs : public TGGroupFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbDac *dacs[NDACS+2];
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbDacs(TGVerticalFrame *page, multiSlsDetector*);
|
||||||
|
|
||||||
|
int setDacAlias(string line);
|
||||||
|
// int setDacAlias(string line);
|
||||||
|
string getDacAlias();
|
||||||
|
string getDacParameters();
|
||||||
|
|
||||||
|
void update();
|
||||||
|
|
||||||
|
ClassDef(ctbDacs,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
161
ctbGui/ctbGui.cpp
Executable file
161
ctbGui/ctbGui.cpp
Executable file
@ -0,0 +1,161 @@
|
|||||||
|
#include <TApplication.h>
|
||||||
|
#include <TColor.h>
|
||||||
|
|
||||||
|
#include <TStyle.h>
|
||||||
|
#include <TROOT.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
|
//#include "sls_receiver_defs.h"
|
||||||
|
#include "ctbMain.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
|
||||||
|
string afname, cfname, pfname;
|
||||||
|
int id=0;
|
||||||
|
|
||||||
|
int af=0, cf=0, pf=0;
|
||||||
|
|
||||||
|
|
||||||
|
cout << " *** " << argc << endl;
|
||||||
|
for (int ia=0; ia<argc; ia++) {
|
||||||
|
if (strcmp(argv[ia],"-alias")==0) {
|
||||||
|
if (ia+1<argc) {
|
||||||
|
afname=argv[ia+1];
|
||||||
|
ia++;
|
||||||
|
af=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (strcmp(argv[ia],"-config")==0) {
|
||||||
|
if (ia+1<argc) {
|
||||||
|
cfname=argv[ia+1];
|
||||||
|
ia++;
|
||||||
|
cf=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else if (strcmp(argv[ia],"-par")==0) {
|
||||||
|
if (ia+1<argc) {
|
||||||
|
pfname=argv[ia+1];
|
||||||
|
ia++;
|
||||||
|
pf=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else if (strcmp(argv[ia],"-id")==0) {
|
||||||
|
if (ia+1<argc) {
|
||||||
|
id=atoi(argv[ia+1]);
|
||||||
|
ia++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cout << " *** " << endl;
|
||||||
|
|
||||||
|
/****** Create detector ****************/
|
||||||
|
multiSlsDetector *myDet=new multiSlsDetector(id);
|
||||||
|
myDet->setOnline(slsDetectorDefs::ONLINE_FLAG);
|
||||||
|
|
||||||
|
//cout << id << " " << myDet << " " << myDet->setOnline() << endl;
|
||||||
|
if (cf) {
|
||||||
|
myDet->readConfigurationFile(cfname);
|
||||||
|
} else
|
||||||
|
cout << "No config file specified" << endl;
|
||||||
|
|
||||||
|
cout << "aa" << endl;
|
||||||
|
|
||||||
|
cout << "Created multi detector id " << id << " hostname " << myDet->getHostname() << endl;
|
||||||
|
|
||||||
|
|
||||||
|
cout << "bb" << endl;
|
||||||
|
if (pf) {
|
||||||
|
myDet->retrieveDetectorSetup(pfname);
|
||||||
|
} else
|
||||||
|
cout << "No parameter file specified" << endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***********Create GUI stuff *******************/
|
||||||
|
TApplication theApp("App",&argc,argv);
|
||||||
|
|
||||||
|
|
||||||
|
gStyle->SetDrawBorder(0);
|
||||||
|
gStyle->SetCanvasColor(kWhite);
|
||||||
|
gStyle->SetCanvasDefH(800);
|
||||||
|
gStyle->SetCanvasDefW(800);
|
||||||
|
gStyle->SetCanvasBorderMode(0);
|
||||||
|
gStyle->SetPadBorderMode(0);
|
||||||
|
gStyle->SetPaintTextFormat("5.2f");
|
||||||
|
gStyle->SetLineWidth(2);
|
||||||
|
gStyle->SetTextSize(1.1);
|
||||||
|
gStyle->SetLabelSize(0.04,"xy");
|
||||||
|
gStyle->SetTitleSize(0.05,"xy");
|
||||||
|
gStyle->SetTitleOffset(1.0,"x");
|
||||||
|
gStyle->SetTitleOffset(1.1,"y");
|
||||||
|
gStyle->SetPadTopMargin(0.15);
|
||||||
|
gStyle->SetPadRightMargin(0.15);
|
||||||
|
gStyle->SetPadBottomMargin(0.15);
|
||||||
|
gStyle->SetPadLeftMargin(0.15);
|
||||||
|
gStyle->SetLegendBorderSize(1);
|
||||||
|
gStyle->SetFrameBorderMode(0);
|
||||||
|
gStyle->SetFrameFillColor(kWhite);
|
||||||
|
// gStyle->SetLegendFillColor(kWhite);
|
||||||
|
gStyle->SetTitleFillColor(kWhite);
|
||||||
|
gStyle->SetFillColor(kWhite);
|
||||||
|
gStyle->SetStatFontSize(0.03);
|
||||||
|
gStyle->SetStatBorderSize(1);
|
||||||
|
gStyle->SetStatFormat("6.4g");
|
||||||
|
gStyle->SetStatX(0.95);
|
||||||
|
gStyle->SetStatY(0.95);
|
||||||
|
gStyle->SetStatW(0.2);
|
||||||
|
gStyle->SetStatH(0.2);
|
||||||
|
gStyle->SetTitleX(0.1);
|
||||||
|
gStyle->SetTitleY(0.95);
|
||||||
|
gStyle->SetTitleBorderSize(0);
|
||||||
|
gStyle->SetTitleFontSize(0.05);
|
||||||
|
gROOT->SetStyle("Default");
|
||||||
|
|
||||||
|
|
||||||
|
TColor::InitializeColors();
|
||||||
|
const Int_t NRGBs = 5;
|
||||||
|
const Int_t NCont = 90;
|
||||||
|
|
||||||
|
Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
|
||||||
|
Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
|
||||||
|
Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
|
||||||
|
Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
|
||||||
|
TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
|
||||||
|
gStyle->SetNumberContours(NCont);
|
||||||
|
|
||||||
|
|
||||||
|
gROOT->ForceStyle();
|
||||||
|
ctbMain *mf=new ctbMain(gClient->GetRoot(),myDet);
|
||||||
|
|
||||||
|
cout << " *** " << argc << endl;
|
||||||
|
for (int ia=0; ia<argc; ia++)
|
||||||
|
cout << argv[ia] << endl;
|
||||||
|
|
||||||
|
|
||||||
|
cout << " *** " << endl;
|
||||||
|
|
||||||
|
if (af)
|
||||||
|
mf->loadAlias(afname);
|
||||||
|
else
|
||||||
|
cout << "no alias specified" << endl;
|
||||||
|
|
||||||
|
theApp.Run();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
15
ctbGui/ctbLinkDef.h
Executable file
15
ctbGui/ctbLinkDef.h
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#pragma link C++ class ctbMain;
|
||||||
|
#pragma link C++ class ctbDacs;
|
||||||
|
#pragma link C++ class ctbDac;
|
||||||
|
#pragma link C++ class ctbSignals;
|
||||||
|
#pragma link C++ class ctbSignal;
|
||||||
|
#pragma link C++ class ctbAdc;
|
||||||
|
#pragma link C++ class ctbAdcs;
|
||||||
|
#pragma link C++ class ctbLoop;
|
||||||
|
#pragma link C++ class ctbWait;
|
||||||
|
#pragma link C++ class ctbPattern;
|
||||||
|
#pragma link C++ class ctbAcquisition;
|
||||||
|
#pragma link C++ class ctbPower;
|
||||||
|
#pragma link C++ class ctbPowers;
|
||||||
|
#pragma link C++ class ctbSlowAdc;
|
||||||
|
#pragma link C++ class ctbSlowAdcs;
|
709
ctbGui/ctbMain.cpp
Executable file
709
ctbGui/ctbMain.cpp
Executable file
@ -0,0 +1,709 @@
|
|||||||
|
#include <TApplication.h>
|
||||||
|
#include <TGClient.h>
|
||||||
|
#include <TCanvas.h>
|
||||||
|
#include <TF1.h>
|
||||||
|
#include <TRandom.h>
|
||||||
|
#include <TGButton.h>
|
||||||
|
#include <TRootEmbeddedCanvas.h>
|
||||||
|
#include <TGButtonGroup.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TList.h>
|
||||||
|
#include <TGFileDialog.h>
|
||||||
|
#include <TGComboBox.h>
|
||||||
|
#include <TH2F.h>
|
||||||
|
#include <TColor.h>
|
||||||
|
#include <TH1F.h>
|
||||||
|
#include <TGraphErrors.h>
|
||||||
|
#include <THStack.h>
|
||||||
|
#include <TGTab.h>
|
||||||
|
#include <TApplication.h>
|
||||||
|
#include <TGCanvas.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <TGMenu.h>
|
||||||
|
#include <TGDockableFrame.h>
|
||||||
|
//#include <TGMenuBar.h>
|
||||||
|
//#include <TGPopupMenu.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "ctbMain.h"
|
||||||
|
#include "ctbDacs.h"
|
||||||
|
#include "ctbSlowAdcs.h"
|
||||||
|
#include "ctbPowers.h"
|
||||||
|
#include "ctbSignals.h"
|
||||||
|
#include "ctbPattern.h"
|
||||||
|
#include "ctbAdcs.h"
|
||||||
|
#include "ctbAcquisition.h"
|
||||||
|
//#include "ctbActions.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbMain::ctbMain(const TGWindow *p, multiSlsDetector *det)
|
||||||
|
: TGMainFrame(p,800,800), pwrs(NULL), senses(NULL) {
|
||||||
|
|
||||||
|
myDet=det;
|
||||||
|
|
||||||
|
Connect("CloseWindow()", "ctbMain", this, "CloseWindow()");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fMenuDock = new TGDockableFrame(this);
|
||||||
|
// AddFrame(fMenuDock, new TGLayoutHints(kLHintsExpandX, 0, 0, 1, 0));
|
||||||
|
// fMenuDock->SetWindowName("GuiTest Menu");
|
||||||
|
|
||||||
|
fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX);
|
||||||
|
fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
|
||||||
|
fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight);
|
||||||
|
|
||||||
|
fMenuFile = new TGPopupMenu(gClient->GetRoot());
|
||||||
|
int im=0;
|
||||||
|
|
||||||
|
fMenuFile->AddEntry("Open Alias", im++);
|
||||||
|
fMenuFile->AddEntry("Save Alias", im++);
|
||||||
|
fMenuFile->AddSeparator();
|
||||||
|
fMenuFile->AddEntry("Open Parameters", im++);
|
||||||
|
fMenuFile->AddEntry("Save Parameters", im++);
|
||||||
|
fMenuFile->AddSeparator();
|
||||||
|
fMenuFile->AddEntry("Open Configuration", im++);
|
||||||
|
fMenuFile->AddEntry("Save Configuration", im++);
|
||||||
|
fMenuFile->AddSeparator();
|
||||||
|
fMenuFile->AddEntry("Open Pattern", im++);
|
||||||
|
fMenuFile->AddEntry("Save Pattern", im++);
|
||||||
|
fMenuFile->AddSeparator();
|
||||||
|
fMenuFile->AddEntry("Exit", im++);
|
||||||
|
|
||||||
|
fMenuFile->Connect("Activated(Int_t)", "ctbMain", this,
|
||||||
|
"HandleMenu(Int_t)");
|
||||||
|
|
||||||
|
|
||||||
|
i_dacs=-1;
|
||||||
|
i_pwrs=-1;
|
||||||
|
i_senses=-1;
|
||||||
|
i_sig=-1;
|
||||||
|
i_adcs=-1;
|
||||||
|
i_pat=-1;
|
||||||
|
i_acq=-1;
|
||||||
|
|
||||||
|
int i_page=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TGVerticalFrame *vframe=new TGVerticalFrame(this, 800,1200); //main frame
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fMenuBar = new TGMenuBar(vframe, 1, 1, kHorizontalFrame);
|
||||||
|
fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout);
|
||||||
|
// fMenuBar->AddPopup("&Test", fMenuTest, fMenuBarItemLayout);
|
||||||
|
// fMenuBar->AddPopup("&View", fMenuView, fMenuBarItemLayout);
|
||||||
|
// fMenuBar->AddPopup("&Help", fMenuHelp, fMenuBarHelpLayout);
|
||||||
|
|
||||||
|
vframe->AddFrame(fMenuBar, fMenuBarLayout);
|
||||||
|
|
||||||
|
TGHorizontalFrame* hpage=new TGHorizontalFrame(vframe, 800,1200); //horizontal frame. Inside there should be the tab and the canvas
|
||||||
|
mtab=new TGTab(hpage, 1500, 1200); //tab!
|
||||||
|
// page=new TGVerticalFrame(mtab, 1500,1200);
|
||||||
|
|
||||||
|
cout << "DACS" << endl;
|
||||||
|
|
||||||
|
TGCompositeFrame *tf = mtab->AddTab("DACs");
|
||||||
|
TGVerticalFrame *page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
dacs=new ctbDacs(page, myDet);
|
||||||
|
i_dacs=i_page++;
|
||||||
|
|
||||||
|
|
||||||
|
cout << "power " << endl;
|
||||||
|
tf = mtab->AddTab("Power Supplies");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
pwrs=new ctbPowers(page, myDet);
|
||||||
|
|
||||||
|
i_pwrs=i_page++;
|
||||||
|
|
||||||
|
cout << "sense " << endl;
|
||||||
|
tf = mtab->AddTab("Sense");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
senses=new ctbSlowAdcs(page, myDet);
|
||||||
|
|
||||||
|
i_senses=i_page++;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "signals " << endl;
|
||||||
|
tf = mtab->AddTab("Signals");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
sig=new ctbSignals(page, myDet);
|
||||||
|
sig->Connect("ToggledSignalPlot(Int_t)","ctbMain",this,"setSignalPlot(Int_t)");
|
||||||
|
|
||||||
|
i_sig=i_page++;
|
||||||
|
|
||||||
|
cout << "adcs " << endl;
|
||||||
|
tf = mtab->AddTab("ADCs");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
adcs=new ctbAdcs(page, myDet);
|
||||||
|
adcs->Connect("ToggledAdcPlot(Int_t)","ctbMain",this,"setADCPlot(Int_t)");
|
||||||
|
adcs->Connect("AdcEnable(Int_t)","ctbMain",this,"setADCEnable(Int_t)");
|
||||||
|
i_adcs=i_page++;
|
||||||
|
|
||||||
|
|
||||||
|
cout << "pattern" << endl;
|
||||||
|
|
||||||
|
tf = mtab->AddTab("Pattern");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
pat=new ctbPattern(page, myDet);
|
||||||
|
pat->Connect("patternFileChanged(const char*)","ctbMain",this,"setPatternFile(const char*)");
|
||||||
|
pat->Connect("patternCompilerChanged(const char*)","ctbMain",this,"setPatternCompiler(const char*)");
|
||||||
|
pat->Connect("analogSamplesChanged(const int)","ctbMain",this,"setAnalogSamples(int)");
|
||||||
|
pat->Connect("digitalSamplesChanged(const int)","ctbMain",this,"setDigitalSamples(int)");
|
||||||
|
pat->Connect("readoutModeChanged(int)","ctbMain",this,"setReadoutMode(int)");
|
||||||
|
|
||||||
|
i_pat=i_page++;
|
||||||
|
|
||||||
|
cout << "acquisition" << endl;
|
||||||
|
|
||||||
|
tf = mtab->AddTab("Acquisition");
|
||||||
|
page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
acq=new ctbAcquisition(page, myDet);
|
||||||
|
|
||||||
|
|
||||||
|
i_acq=i_page++;
|
||||||
|
|
||||||
|
|
||||||
|
// cout << "actions" << endl;
|
||||||
|
// tf = mtab->AddTab("Actions");
|
||||||
|
// page=new TGVerticalFrame(tf, 1500,1200);
|
||||||
|
// tf->AddFrame(page, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
// actions=new ctbActions(page, myDet);
|
||||||
|
|
||||||
|
|
||||||
|
// i_actions=i_page++;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "tabs finished" << endl;
|
||||||
|
|
||||||
|
hpage->AddFrame(mtab,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
|
||||||
|
vframe->AddFrame(hpage,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
|
||||||
|
AddFrame(vframe,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
|
||||||
|
vframe->MapWindow();
|
||||||
|
hpage->MapWindow();
|
||||||
|
mtab->MapWindow();
|
||||||
|
page->MapWindow();
|
||||||
|
|
||||||
|
// Sets window name and shows the main frame
|
||||||
|
cout << "dockabel" << endl;
|
||||||
|
TGDockableFrame *fdock=new TGDockableFrame(hpage);
|
||||||
|
hpage->AddFrame(fdock, new TGLayoutHints(kLHintsBottom | kLHintsCenterX | kLHintsExpandX | kLHintsExpandY, 10,10,10,10));
|
||||||
|
fdock->MapWindow();
|
||||||
|
|
||||||
|
cout << "canvas" << endl;
|
||||||
|
// // Creates widgets of the example
|
||||||
|
|
||||||
|
|
||||||
|
fEcanvas = new TRootEmbeddedCanvas ("Ecanvas",fdock,800,800);//hpage,800,800);
|
||||||
|
//fEcanvas = new TRootEmbeddedCanvas ("Ecanvas",this,800,800);//hpage,800,800);
|
||||||
|
// fEcanvas->Resize();
|
||||||
|
// fEcanvas->GetCanvas()->Update();
|
||||||
|
//AddFrame(fEcanvas, new TGLayoutHints(kLHintsBottom | kLHintsCenterX | kLHintsExpandX | kLHintsExpandY, 10,10,10,10));
|
||||||
|
|
||||||
|
// // hpage->
|
||||||
|
fdock->AddFrame(fEcanvas, new TGLayoutHints(kLHintsBottom | kLHintsCenterX | kLHintsExpandX | kLHintsExpandY, 10,10,10,10));
|
||||||
|
|
||||||
|
|
||||||
|
fEcanvas->MapWindow();
|
||||||
|
|
||||||
|
acq->setCanvas(getCanvas());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hpage->MapSubwindows();
|
||||||
|
mtab->Connect("Selected(Int_t)","ctbMain",this,"tabSelected(Int_t)");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "connect mtab" << endl;
|
||||||
|
|
||||||
|
|
||||||
|
setReadoutMode(pat->getReadoutMode());
|
||||||
|
setADCEnable(adcs->setEnable());
|
||||||
|
setAnalogSamples(pat->getAnalogSamples());
|
||||||
|
setDigitalSamples(pat->getDigitalSamples());
|
||||||
|
|
||||||
|
tabSelected(0);
|
||||||
|
|
||||||
|
SetWindowName("CTB Gui");
|
||||||
|
MapSubwindows();
|
||||||
|
Resize(1500,1200);
|
||||||
|
|
||||||
|
MapWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::CloseWindow() {
|
||||||
|
gApplication->Terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
TCanvas* ctbMain::getCanvas() {
|
||||||
|
return fEcanvas->GetCanvas();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbMain::HandleMenu(Int_t id)
|
||||||
|
{
|
||||||
|
// Handle menu items.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
|
||||||
|
case 0: // fMenuFile->AddEntry("Open Alias", im++);
|
||||||
|
cout << "Open Alias" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
loadAlias(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // fMenuFile->AddEntry("Save Alias", im++);
|
||||||
|
cout << "Save Alias" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDSave, &fi);
|
||||||
|
printf("Save file: %s (dir: %s)\n", fi.fFilename);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
saveAlias(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: //fMenuFile->AddEntry("Open Parameters", im++);
|
||||||
|
cout << "Open Parameters" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
loadParameters(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: //fMenuFile->AddEntry("Save Parameters", im++);
|
||||||
|
cout << "Save Parameters" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDSave, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
saveParameters(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4: // fMenuFile->AddEntry("Open Configuration", im++);
|
||||||
|
cout << "Open configuration" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
loadConfiguration(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: // fMenuFile->AddEntry("Save Configuration", im++);
|
||||||
|
cout << "Save configuration" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDSave, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
saveConfiguration(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6: //fMenuFile->AddEntry("Open Pattern", im++);
|
||||||
|
cout << "Open pattern" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDOpen, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
loadParameters(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7: //fMenuFile->AddEntry("Save Pattern", im++);
|
||||||
|
cout << "Save pattern" << endl;
|
||||||
|
{
|
||||||
|
static TString dir(".");
|
||||||
|
TGFileInfo fi;
|
||||||
|
//fi.fFileTypes = filetypes;
|
||||||
|
fi.fIniDir = StrDup(dir);
|
||||||
|
printf("fIniDir = %s\n", fi.fIniDir);
|
||||||
|
new TGFileDialog(gClient->GetRoot(), this, kFDSave, &fi);
|
||||||
|
printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
|
||||||
|
// dir = fi.fIniDir;
|
||||||
|
if (fi.fFilename)
|
||||||
|
saveParameters(fi.fFilename);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8: // fMenuFile->AddEntry("Exit", im++);
|
||||||
|
CloseWindow();
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Menu item %d selected\n", id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::setADCPlot(Int_t i) {
|
||||||
|
|
||||||
|
// cout << "ADC " << i << " plot or color toggled" << endl;
|
||||||
|
// acq->setGraph(i,adcs->getGraph(i));
|
||||||
|
acq->setGraph(i,adcs->getEnabled(i),adcs->getColor(i));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::setSignalPlot(Int_t i) {
|
||||||
|
|
||||||
|
// cout << "ADC " << i << " plot or color toggled" << endl;
|
||||||
|
// acq->setGraph(i,adcs->getGraph(i));
|
||||||
|
acq->setBitGraph(i,sig->getPlot(i),sig->getColor(i));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::loadConfiguration(string fname) {
|
||||||
|
|
||||||
|
myDet->readConfigurationFile(fname);
|
||||||
|
|
||||||
|
// string line;
|
||||||
|
// int i;
|
||||||
|
// ifstream myfile (fname.c_str());
|
||||||
|
// if (myfile.is_open())
|
||||||
|
// {
|
||||||
|
// while ( getline (myfile,line) )
|
||||||
|
// {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
// myfile.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::saveConfiguration(string fname) {
|
||||||
|
|
||||||
|
|
||||||
|
myDet->writeConfigurationFile(fname);
|
||||||
|
// string line;
|
||||||
|
// int i;
|
||||||
|
// ofstream myfile (fname.c_str());
|
||||||
|
// if (myfile.is_open())
|
||||||
|
// {
|
||||||
|
|
||||||
|
|
||||||
|
// myfile.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::loadParameters(string fname) {
|
||||||
|
|
||||||
|
myDet->retrieveDetectorSetup(fname);
|
||||||
|
|
||||||
|
// string line;
|
||||||
|
// int i;
|
||||||
|
// ifstream myfile (fname.c_str());
|
||||||
|
// if (myfile.is_open())
|
||||||
|
// {
|
||||||
|
// while ( getline (myfile,line) )
|
||||||
|
// {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
// myfile.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::saveParameters(string fname) {
|
||||||
|
|
||||||
|
|
||||||
|
string line;
|
||||||
|
int i;
|
||||||
|
myDet->dumpDetectorSetup(fname);
|
||||||
|
// ofstream myfile (fname.c_str());
|
||||||
|
// if (myfile.is_open())
|
||||||
|
// {
|
||||||
|
|
||||||
|
// myfile << dacs->getDacParameters();
|
||||||
|
// myfile << sig->getSignalParameters();
|
||||||
|
// myfile << adcs->getAdcParameters();
|
||||||
|
|
||||||
|
// myfile.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::loadAlias(string fname) {
|
||||||
|
|
||||||
|
|
||||||
|
string line;
|
||||||
|
char aaaa[1000];
|
||||||
|
int i;
|
||||||
|
ifstream myfile (fname.c_str());
|
||||||
|
if (myfile.is_open())
|
||||||
|
{
|
||||||
|
while ( getline (myfile,line) )
|
||||||
|
{
|
||||||
|
// cout << line ;
|
||||||
|
if (sscanf(line.c_str(),"BIT%d",&i)>0) {
|
||||||
|
//cout << "*******" << line<< endl;
|
||||||
|
sig->setSignalAlias(line);
|
||||||
|
// cout << line ;
|
||||||
|
} else if (sscanf(line.c_str(),"DAC%d",&i)>0) {
|
||||||
|
dacs->setDacAlias(line);
|
||||||
|
// cout << "+++++++++" << line<< endl;
|
||||||
|
} else if (sscanf(line.c_str(),"ADC%d",&i)>0) {
|
||||||
|
adcs->setAdcAlias(line);
|
||||||
|
// cout << "---------" << line<< endl;
|
||||||
|
} // else
|
||||||
|
// cout << "<<<<<<<" << line << endl;
|
||||||
|
else if (sscanf(line.c_str(),"PAT%s",aaaa)>0) {
|
||||||
|
pat->setPatternAlias(line);
|
||||||
|
// cout << "---------" << line<< endl;
|
||||||
|
} else if (sscanf(line.c_str(),"V%s",&i)>0) {
|
||||||
|
if (pwrs) pwrs->setPwrAlias(line);
|
||||||
|
// cout << "+++++++++" << line<< endl;
|
||||||
|
} else if (sscanf(line.c_str(),"SENSE%d",&i)>0) {
|
||||||
|
if (senses) senses->setSlowAdcAlias(line);
|
||||||
|
// cout << "+++++++++" << line<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
myfile.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbMain::saveAlias(string fname) {
|
||||||
|
|
||||||
|
|
||||||
|
string line;
|
||||||
|
int i;
|
||||||
|
ofstream myfile (fname.c_str());
|
||||||
|
if (myfile.is_open())
|
||||||
|
{
|
||||||
|
//while ( getline (myfile,line) )
|
||||||
|
// {
|
||||||
|
// cout << line ;
|
||||||
|
//if (sscanf(line.c_str(),"BIT%d",&i)>0) {
|
||||||
|
//cout << "*******" << line<< endl;
|
||||||
|
myfile << sig->getSignalAlias();
|
||||||
|
// cout << line ;
|
||||||
|
// } else if (sscanf(line.c_str(),"DAC%d",&i)>0) {
|
||||||
|
myfile << dacs->getDacAlias();
|
||||||
|
if (pwrs) myfile << pwrs->getPwrAlias();
|
||||||
|
if (senses) myfile << senses->getSlowAdcAlias();
|
||||||
|
// cout << "+++++++++" << line<< endl;
|
||||||
|
// } else if (sscanf(line.c_str(),"ADC%d",&i)>0) {
|
||||||
|
myfile << adcs->getAdcAlias();
|
||||||
|
// cout << "---------" << line<< endl;
|
||||||
|
// } // else
|
||||||
|
// cout << "<<<<<<<" << line << endl;
|
||||||
|
myfile << pat->getPatternAlias();
|
||||||
|
|
||||||
|
//}
|
||||||
|
myfile.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
else cout << "Unable to open file";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbMain::tabSelected(Int_t i) {
|
||||||
|
|
||||||
|
// cout << "Selected tab " << i << endl;
|
||||||
|
// cout << "Current tab is " << mtab->GetCurrent() << endl;
|
||||||
|
|
||||||
|
if (i==i_dacs) dacs->update();
|
||||||
|
else if (i==i_pwrs) pwrs->update();
|
||||||
|
else if (i==i_senses) ;//senses->update();
|
||||||
|
else if (i==i_sig) sig->update();
|
||||||
|
else if (i==i_adcs) adcs->update();
|
||||||
|
else if (i==i_pat) pat->update();
|
||||||
|
else if (i==i_acq) acq->update();
|
||||||
|
else if (i==i_acq) acq->update();
|
||||||
|
// else if (i==i_actions) actions->update();
|
||||||
|
else cout << "Unknown tab " << i << endl;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setPatternFile(const char* t) {
|
||||||
|
acq->setPatternFile(t);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setPatternCompiler(const char* t) {
|
||||||
|
acq->setPatternCompiler(t);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setAnalogSamples(const int n) {
|
||||||
|
acq->setAnalogSamples(n);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setDigitalSamples(const int n) {
|
||||||
|
acq->setDigitalSamples(n);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setReadoutMode(int flags) {
|
||||||
|
acq->setReadoutMode(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbMain::setADCEnable(Int_t reg){
|
||||||
|
acq->setADCEnable(reg);
|
||||||
|
}
|
126
ctbGui/ctbMain.h
Executable file
126
ctbGui/ctbMain.h
Executable file
@ -0,0 +1,126 @@
|
|||||||
|
#ifndef CTBMAIN_H
|
||||||
|
#define CTBMAIN_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
class TRootEmbeddedCanvas;
|
||||||
|
class TGButtonGroup;
|
||||||
|
class TGVerticalFrame;
|
||||||
|
class TGHorizontalFrame;
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TH2F;
|
||||||
|
class TGComboBox;
|
||||||
|
class TGCheckButton;
|
||||||
|
|
||||||
|
class THStack;
|
||||||
|
class TGraphErrors;
|
||||||
|
class TGTextButton;
|
||||||
|
class TGTab;
|
||||||
|
|
||||||
|
class TGMenuBar;
|
||||||
|
class TGPopupMenu;
|
||||||
|
class TGDockableFrame;
|
||||||
|
class TGLayoutHints;
|
||||||
|
class TGCanvas;
|
||||||
|
class TCanvas;
|
||||||
|
|
||||||
|
class ctbDacs;
|
||||||
|
class ctbSlowAdcs;
|
||||||
|
class ctbPowers;
|
||||||
|
|
||||||
|
|
||||||
|
class ctbSignals;
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
class ctbPattern;
|
||||||
|
class ctbAdcs;
|
||||||
|
class ctbAcquisition;
|
||||||
|
//class ctbActions;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class ctbMain : public TGMainFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TRootEmbeddedCanvas *fEcanvas;
|
||||||
|
TRootEmbeddedCanvas *fModulecanvas;
|
||||||
|
TGButtonGroup *br;
|
||||||
|
|
||||||
|
TGTab *mtab;
|
||||||
|
|
||||||
|
|
||||||
|
ctbDacs *dacs;
|
||||||
|
int i_dacs;
|
||||||
|
|
||||||
|
ctbPowers *pwrs;
|
||||||
|
int i_pwrs;
|
||||||
|
|
||||||
|
ctbSlowAdcs *senses;
|
||||||
|
int i_senses;
|
||||||
|
|
||||||
|
|
||||||
|
ctbSignals *sig;
|
||||||
|
int i_sig;
|
||||||
|
|
||||||
|
|
||||||
|
ctbAdcs *adcs;
|
||||||
|
int i_adcs;
|
||||||
|
|
||||||
|
|
||||||
|
ctbPattern *pat;
|
||||||
|
int i_pat;
|
||||||
|
|
||||||
|
ctbAcquisition *acq;
|
||||||
|
int i_acq;
|
||||||
|
|
||||||
|
// ctbActions *actions;
|
||||||
|
int i_actions;
|
||||||
|
|
||||||
|
TGDockableFrame *fMenuDock;
|
||||||
|
|
||||||
|
TGMenuBar *fMenuBar;
|
||||||
|
TGPopupMenu *fMenuFile, *fMenuTest, *fMenuView, *fMenuHelp;
|
||||||
|
TGPopupMenu *fCascadeMenu, *fCascade1Menu, *fCascade2Menu;
|
||||||
|
TGPopupMenu *fMenuNew1, *fMenuNew2;
|
||||||
|
TGLayoutHints *fMenuBarLayout, *fMenuBarItemLayout, *fMenuBarHelpLayout;
|
||||||
|
TGCanvas *myCanvas;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbMain(const TGWindow *p, multiSlsDetector *det);
|
||||||
|
|
||||||
|
|
||||||
|
int loadAlias(string fname);
|
||||||
|
int saveAlias(string fname);
|
||||||
|
int loadParameters(string fname);
|
||||||
|
int saveParameters(string fname);
|
||||||
|
int loadConfiguration(string fname);
|
||||||
|
int saveConfiguration(string fname);
|
||||||
|
void tabSelected(Int_t);
|
||||||
|
int setADCPlot(Int_t);
|
||||||
|
int setSignalPlot(Int_t);
|
||||||
|
void CloseWindow();
|
||||||
|
|
||||||
|
void setPatternFile(const char* t);
|
||||||
|
|
||||||
|
void setPatternCompiler(const char* t);
|
||||||
|
void setAnalogSamples(const int);
|
||||||
|
void setDigitalSamples(const int);
|
||||||
|
void setReadoutMode(int);
|
||||||
|
void setADCEnable(Int_t);
|
||||||
|
|
||||||
|
void HandleMenu(Int_t);
|
||||||
|
TCanvas* getCanvas();
|
||||||
|
ClassDef(ctbMain,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
1263
ctbGui/ctbPattern.cpp
Executable file
1263
ctbGui/ctbPattern.cpp
Executable file
File diff suppressed because it is too large
Load Diff
176
ctbGui/ctbPattern.h
Executable file
176
ctbGui/ctbPattern.h
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
#ifndef CTBPATTERN_H
|
||||||
|
#define CTBPATTERN_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define NLOOPS 3
|
||||||
|
#define NWAITS 3
|
||||||
|
#define NADCS 32
|
||||||
|
#define PATLEN 1024
|
||||||
|
|
||||||
|
class TRootEmbeddedCanvas;
|
||||||
|
class TGButtonGroup;
|
||||||
|
class TGVerticalFrame;
|
||||||
|
class TGHorizontalFrame;
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TH2F;
|
||||||
|
class TGComboBox;
|
||||||
|
class TGCheckButton;
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
|
||||||
|
class THStack;
|
||||||
|
class TGraphErrors;
|
||||||
|
class energyCalibration;
|
||||||
|
class TGTextButton;
|
||||||
|
class TGTab;
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ctbLoop : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
TGNumberEntry *eLoopStartAddr;
|
||||||
|
TGNumberEntry *eLoopStopAddr;
|
||||||
|
TGNumberEntry *eLoopNumber;
|
||||||
|
|
||||||
|
int id;
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbLoop(TGGroupFrame *page, int i,multiSlsDetector *det);
|
||||||
|
|
||||||
|
void setNLoops();
|
||||||
|
void update();
|
||||||
|
|
||||||
|
ClassDef(ctbLoop,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
class ctbWait : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
TGNumberEntry *eWaitAddr;
|
||||||
|
TGNumberEntry *eWaitTime;
|
||||||
|
|
||||||
|
int id;
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbWait(TGGroupFrame *page, int i,multiSlsDetector *det);
|
||||||
|
|
||||||
|
void setWaitTime();
|
||||||
|
void update();
|
||||||
|
|
||||||
|
ClassDef(ctbWait,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ctbPattern : public TGGroupFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
TGNumberEntry *eAdcClkFreq;
|
||||||
|
TGNumberEntry *eRunClkFreq;
|
||||||
|
TGNumberEntry *eDBitClkFreq;
|
||||||
|
TGNumberEntry *eAdcClkPhase;
|
||||||
|
TGNumberEntry *eDBitClkPhase;
|
||||||
|
//TGNumberEntry *eRunClkPhase;
|
||||||
|
|
||||||
|
TGNumberEntry *eStartAddr;
|
||||||
|
TGNumberEntry *eStopAddr;
|
||||||
|
TGNumberEntry *eFrames;
|
||||||
|
TGNumberEntry *ePeriod;
|
||||||
|
TGNumberEntry *eCycles;
|
||||||
|
TGNumberEntry *eMeasurements;
|
||||||
|
TGNumberEntry *eAdcPipeline;
|
||||||
|
TGNumberEntry *eDBitPipeline;
|
||||||
|
|
||||||
|
ctbLoop *eLoop[NLOOPS];
|
||||||
|
ctbWait *eWait[NWAITS];
|
||||||
|
|
||||||
|
TGTextEntry *patternCompiler;
|
||||||
|
TGTextEntry *patternFile;
|
||||||
|
|
||||||
|
TGTextButton *browseCompiler;
|
||||||
|
TGTextButton *browseFile;
|
||||||
|
|
||||||
|
|
||||||
|
TGNumberEntry *eAnalogSamples;
|
||||||
|
TGNumberEntry *eDigitalSamples;
|
||||||
|
|
||||||
|
TGCheckButton *cbAnalog;
|
||||||
|
TGCheckButton *cbDigital;
|
||||||
|
|
||||||
|
char pat[PATLEN*8];
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ctbPattern(TGVerticalFrame *page, multiSlsDetector *det);
|
||||||
|
|
||||||
|
void update();
|
||||||
|
void setAdcFreq();
|
||||||
|
void setRunFreq();
|
||||||
|
void setDBitFreq();
|
||||||
|
void setAdcPhase();
|
||||||
|
void setDBitPhase();
|
||||||
|
// void setRunPhase();
|
||||||
|
void setAdcPipeline();
|
||||||
|
void setDBitPipeline();
|
||||||
|
void setFrames();
|
||||||
|
void setCycles();
|
||||||
|
void setMeasurements();
|
||||||
|
void setPeriod();
|
||||||
|
|
||||||
|
|
||||||
|
void chooseCompiler();
|
||||||
|
void choosePattern();
|
||||||
|
|
||||||
|
string getCompiler();
|
||||||
|
string getPatternFile();
|
||||||
|
|
||||||
|
void setPatternAlias(string);
|
||||||
|
string getPatternAlias();
|
||||||
|
|
||||||
|
|
||||||
|
int getAnalogSamples();
|
||||||
|
void setAnalogSamples();
|
||||||
|
int getDigitalSamples();
|
||||||
|
void setDigitalSamples();
|
||||||
|
void setReadoutMode(Bool_t);
|
||||||
|
int getReadoutMode();
|
||||||
|
|
||||||
|
|
||||||
|
void setFile();
|
||||||
|
void setCompiler();
|
||||||
|
void patternFileChanged(const char*);
|
||||||
|
void patternCompilerChanged(const char*);
|
||||||
|
void analogSamplesChanged(const int t);
|
||||||
|
void digitalSamplesChanged(const int t);
|
||||||
|
void readoutModeChanged(int);
|
||||||
|
|
||||||
|
|
||||||
|
ClassDef(ctbPattern,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
243
ctbGui/ctbPowers.cpp
Normal file
243
ctbGui/ctbPowers.cpp
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <TGButtonGroup.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TList.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include "ctbDacs.h"
|
||||||
|
#include "ctbPowers.h"
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbPower::ctbPower(TGGroupFrame* f, int i, multiSlsDetector* d)
|
||||||
|
: ctbDac(f, i, d)
|
||||||
|
{
|
||||||
|
cout << "****************************************************************power " << i << endl;
|
||||||
|
dacsUnit->SetOn(kTRUE);
|
||||||
|
dacsUnit->SetEnabled(kFALSE);
|
||||||
|
int ii=0;
|
||||||
|
|
||||||
|
switch(i) {
|
||||||
|
case slsDetectorDefs::V_POWER_IO:
|
||||||
|
dacsLabel->SetText("VIO");
|
||||||
|
ii=slsDetectorDefs::I_POWER_IO;
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_A:
|
||||||
|
dacsLabel->SetText("VA");
|
||||||
|
ii=slsDetectorDefs::I_POWER_A;
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_B:
|
||||||
|
dacsLabel->SetText("VB");
|
||||||
|
ii=slsDetectorDefs::I_POWER_B;
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_C:
|
||||||
|
dacsLabel->SetText("VC");
|
||||||
|
ii=slsDetectorDefs::I_POWER_C;
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_D:
|
||||||
|
dacsLabel->SetText("VD");
|
||||||
|
ii=slsDetectorDefs::I_POWER_D;
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_CHIP:
|
||||||
|
dacsLabel->SetText("VCHIP");
|
||||||
|
dacsLabel->SetEnabled(kFALSE);
|
||||||
|
ii=-1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dacsLabel->SetText("Bad index");
|
||||||
|
ii=-1;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ctbSlowAdc *vm=new ctbSlowAdc(f,i,d);
|
||||||
|
// vm->setLabel("V: ");
|
||||||
|
// if (ii>=0) {
|
||||||
|
// ctbSlowAdc *im=new ctbSlowAdc(f,ii,d);
|
||||||
|
// im->setLabel("I: ");
|
||||||
|
// }
|
||||||
|
|
||||||
|
TGTextEntry *e=dacsEntry->TGNumberEntry::GetNumberEntry();
|
||||||
|
e->Disconnect ("ReturnPressed()");
|
||||||
|
e->Disconnect ("ValueSet(Long_t)");
|
||||||
|
|
||||||
|
e->Connect("ReturnPressed()","ctbPower",this,"setValue()");
|
||||||
|
dacsEntry->Connect("ValueSet(Long_t)","ctbPower",this,"setValue(Long_t)");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
string ctbPower::getLabel() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
switch (id) {
|
||||||
|
case slsDetectorDefs::V_POWER_IO:
|
||||||
|
line << "VIO";
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_A:
|
||||||
|
line << "VA";
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_B:
|
||||||
|
line << "VB";
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_C:
|
||||||
|
line << "VC";
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_D:
|
||||||
|
line << "VD";
|
||||||
|
break;
|
||||||
|
case slsDetectorDefs::V_POWER_CHIP:
|
||||||
|
line << "VCHIP";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
line << "VBAD";
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
line << " " << dacsLabel->GetText() << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbPower::setValue(Long_t a) {cout << "ssssssssss" << endl; ctbPower::setValue();}
|
||||||
|
void ctbPower::setValue() {
|
||||||
|
|
||||||
|
|
||||||
|
cout << "***************************Setting power " << dacsEntry->GetIntNumber() << " " << (slsDetectorDefs::dacIndex)id <<" " << 1 << endl;
|
||||||
|
myDet->setDAC(dacsEntry->GetIntNumber(), (slsDetectorDefs::dacIndex)id, 1);
|
||||||
|
|
||||||
|
getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ctbPower::getValue() {
|
||||||
|
|
||||||
|
int val=myDet->setDAC(-1, (slsDetectorDefs::dacIndex)id, 1);
|
||||||
|
char s[100];
|
||||||
|
cout << "****************************Getting power " << val << " " << (slsDetectorDefs::dacIndex)id <<" " << 1 << endl;
|
||||||
|
sprintf(s,"%d",val);
|
||||||
|
dacsValue->SetText(s);
|
||||||
|
if (val>0) {
|
||||||
|
if (id!=slsDetectorDefs::V_POWER_CHIP)
|
||||||
|
dacsLabel->SetOn(kTRUE);
|
||||||
|
} else {
|
||||||
|
dacsLabel->SetOn(kFALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return val;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbPowers::ctbPowers(TGVerticalFrame* page, multiSlsDetector* det) : TGGroupFrame(page,"Power Supplies",kVerticalFrame) , myDet(det){
|
||||||
|
|
||||||
|
|
||||||
|
SetTitlePos(TGGroupFrame::kLeft);
|
||||||
|
page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
// cout << "window mapped " << endl;
|
||||||
|
|
||||||
|
for (int idac=0; idac<NPOWERS; idac++) {
|
||||||
|
dacs[idac]=new ctbPower(this, slsDetectorDefs::V_POWER_A+idac, myDet);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ctbPowers::setPwrAlias(string line) {
|
||||||
|
|
||||||
|
int is=-1, mv=0;
|
||||||
|
char tit[100];
|
||||||
|
int narg;
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VA %s",tit)) {
|
||||||
|
dacs[0]->setLabel(tit,1);
|
||||||
|
is=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VB %s",tit)) {
|
||||||
|
dacs[1]->setLabel(tit,1);
|
||||||
|
is=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VC %s",tit)) {
|
||||||
|
dacs[2]->setLabel(tit,1);
|
||||||
|
is=2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VD %s",tit)) {
|
||||||
|
dacs[3]->setLabel(tit,1);
|
||||||
|
is=3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VIO %s",tit)) {
|
||||||
|
dacs[4]->setLabel(tit,1);
|
||||||
|
is=4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sscanf(line.c_str(),"VCHIP %s",tit)) {
|
||||||
|
dacs[5]->setLabel(tit,1);
|
||||||
|
is=5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return is;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbPowers::getPwrAlias() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int i=0; i<NPOWERS; i++)
|
||||||
|
line << dacs[i]->getLabel() << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
string ctbPowers::getPwrParameters() {
|
||||||
|
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
line << "v_a" << " " << dacs[0]->getValue() << " mv" << endl;
|
||||||
|
line << "v_b" << " " << dacs[1]->getValue() << " mv" << endl;
|
||||||
|
line << "v_c" << " " << dacs[2]->getValue() << " mv" << endl;
|
||||||
|
line << "v_d" << " " << dacs[3]->getValue() << " mv" << endl;
|
||||||
|
line << "v_io" << " " << dacs[4]->getValue() << " mv" << endl;
|
||||||
|
line << "v_chip" << " " << dacs[5]->getValue() << " mv" << endl;
|
||||||
|
// for (int i=0; i<POWERS; i++) {
|
||||||
|
// //line << "dacs:" << i << " " << dacs[i]->getValue << endl;
|
||||||
|
// line << "dac:" << i << " " << dacs[i]->getValue() << endl;
|
||||||
|
// }
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbPowers::update() {
|
||||||
|
|
||||||
|
for (int idac=0; idac<NPOWERS; idac++) {
|
||||||
|
|
||||||
|
dacs[idac]->getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
72
ctbGui/ctbPowers.h
Normal file
72
ctbGui/ctbPowers.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#ifndef CTBPOWERS_H
|
||||||
|
#define CTBPOWERS_H
|
||||||
|
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
#ifndef CTB
|
||||||
|
#define NPOWERS 0
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define NPOWERS 6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
class ctbPower : public ctbDac {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ctbPower(TGGroupFrame* f, int i, multiSlsDetector* d);
|
||||||
|
|
||||||
|
string getLabel();
|
||||||
|
|
||||||
|
int getValue();
|
||||||
|
void setValue();
|
||||||
|
void setValue(Long_t);
|
||||||
|
|
||||||
|
ClassDef(ctbPower,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ctbPowers : public TGGroupFrame
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
ctbPower *dacs[NPOWERS];
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
//ctbPowers();
|
||||||
|
ctbPowers(TGVerticalFrame*, multiSlsDetector*);
|
||||||
|
|
||||||
|
int setPwrAlias(string);
|
||||||
|
string getPwrAlias();
|
||||||
|
string getPwrParameters();
|
||||||
|
|
||||||
|
void update();
|
||||||
|
|
||||||
|
ClassDef(ctbPowers,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
548
ctbGui/ctbSignals.cpp
Executable file
548
ctbGui/ctbSignals.cpp
Executable file
@ -0,0 +1,548 @@
|
|||||||
|
#include <TApplication.h>
|
||||||
|
#include <TGClient.h>
|
||||||
|
#include <TCanvas.h>
|
||||||
|
#include <TF1.h>
|
||||||
|
#include <TRandom.h>
|
||||||
|
#include <TGButton.h>
|
||||||
|
#include <TRootEmbeddedCanvas.h>
|
||||||
|
#include <TGButtonGroup.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TList.h>
|
||||||
|
#include <TGFileDialog.h>
|
||||||
|
#include <TGComboBox.h>
|
||||||
|
#include <TH2F.h>
|
||||||
|
#include <TColor.h>
|
||||||
|
#include <TH1F.h>
|
||||||
|
#include <TGraphErrors.h>
|
||||||
|
#include <THStack.h>
|
||||||
|
#include <TGTab.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <TGButton.h>
|
||||||
|
#include <TRootEmbeddedCanvas.h>
|
||||||
|
#include <TGButtonGroup.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <TColor.h>
|
||||||
|
#include <TGColorSelect.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "ctbSignals.h"
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#define DEFAULTFN "run_0.encal"
|
||||||
|
|
||||||
|
|
||||||
|
ctbSignal::ctbSignal(TGFrame *page, int i, multiSlsDetector *det)
|
||||||
|
: TGHorizontalFrame(page, 800,50), myDet(det), id(i), hsig(NULL) {
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame *hframe=this;
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "BIT%d ",id);
|
||||||
|
|
||||||
|
sLabel= new TGLabel(hframe, tit);
|
||||||
|
hframe->AddFrame( sLabel,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sLabel->MapWindow();
|
||||||
|
sLabel->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sOutput= new TGCheckButton(hframe, "Out");
|
||||||
|
hframe->AddFrame( sOutput,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sOutput->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
sOutput->Connect("Toggled(Bool_t)","ctbSignal",this,"ToggledOutput(Bool_t)");
|
||||||
|
|
||||||
|
sDbitList= new TGCheckButton(hframe, "DB List");
|
||||||
|
hframe->AddFrame( sDbitList,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sDbitList->MapWindow();
|
||||||
|
|
||||||
|
sDbitList->Connect("Toggled(Bool_t)","ctbSignal",this,"ToggledDbitList(Bool_t)");
|
||||||
|
|
||||||
|
|
||||||
|
sPlot= new TGCheckButton(hframe, "Plot");
|
||||||
|
hframe->AddFrame( sPlot,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
sPlot->MapWindow();
|
||||||
|
|
||||||
|
sPlot->Connect("Toggled(Bool_t)","ctbSignal",this,"ToggledPlot(Bool_t)");
|
||||||
|
|
||||||
|
fColorSel = new TGColorSelect(hframe, id+1, 0);
|
||||||
|
fColorSel->Connect("ColorSelected(Pixel_t)","ctbSignal",this,"ColorChanged(Pixel_t)");
|
||||||
|
hframe->AddFrame(fColorSel, new TGLayoutHints(kLHintsTop |
|
||||||
|
kLHintsLeft, 2, 0, 2, 2));
|
||||||
|
|
||||||
|
|
||||||
|
fColorSel->SetColor(TColor::Number2Pixel(id+1));
|
||||||
|
|
||||||
|
|
||||||
|
ToggledOutput(kFALSE);
|
||||||
|
|
||||||
|
|
||||||
|
ToggledPlot(kFALSE);
|
||||||
|
|
||||||
|
// if (id==63) {
|
||||||
|
// sOutput->SetOn(kTRUE);
|
||||||
|
// sOutput->SetEnabled(kFALSE);
|
||||||
|
// }
|
||||||
|
// #ifdef CTB
|
||||||
|
// if (id==62) {
|
||||||
|
// sOutput->SetOn(kTRUE);
|
||||||
|
// sOutput->SetEnabled(kFALSE);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // if (id>=32 && id<48)
|
||||||
|
// // fixOutput(1);
|
||||||
|
// // else if (id>=48 && id<64)
|
||||||
|
// // fixOutput(0);
|
||||||
|
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
int ctbSignal::setSignalAlias(char *tit, int plot, int col) {
|
||||||
|
|
||||||
|
if (tit)
|
||||||
|
sLabel->SetText(tit);
|
||||||
|
|
||||||
|
if (plot>0) {
|
||||||
|
sPlot->SetOn(kTRUE,kTRUE);
|
||||||
|
} else if (plot==0)
|
||||||
|
sPlot->SetOn(kFALSE,kTRUE);
|
||||||
|
|
||||||
|
if (col>=0)
|
||||||
|
fColorSel->SetColor(col);//TColor::Number2Pixel(col+1));
|
||||||
|
|
||||||
|
fColorSel->SetEnabled(sPlot->IsOn());
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbSignal::getSignalAlias() {
|
||||||
|
|
||||||
|
|
||||||
|
ostringstream oss;
|
||||||
|
oss << "BIT" << dec << id << " " << sLabel->GetText()->Data() << " " << sPlot->IsOn() << hex << " " << fColorSel->GetColor() << endl;
|
||||||
|
return oss.str();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
int ctbSignal::setOutput(Long64_t r) {
|
||||||
|
|
||||||
|
|
||||||
|
// cout << hex << r << dec <<endl;
|
||||||
|
|
||||||
|
Long64_t mask=((Long64_t)1<<id);
|
||||||
|
|
||||||
|
if (r&mask)
|
||||||
|
sOutput->SetOn(kTRUE,kTRUE);
|
||||||
|
else
|
||||||
|
sOutput->SetOn(kFALSE,kTRUE);
|
||||||
|
|
||||||
|
return sOutput->IsOn();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbSignal::fixOutput(int i) {
|
||||||
|
|
||||||
|
if (i) {
|
||||||
|
sPlot->SetOn(kFALSE);
|
||||||
|
//sClock->SetOn(kFALSE,kTRUE);
|
||||||
|
sOutput->SetOn(kTRUE);
|
||||||
|
// sPlot->SetEnabled(kFALSE);
|
||||||
|
// sClock->SetEnabled(kTRUE);
|
||||||
|
} else {
|
||||||
|
sOutput->SetOn(kFALSE,kTRUE);
|
||||||
|
// sClock->SetOn(kFALSE);
|
||||||
|
// sClock->SetEnabled(kFALSE);
|
||||||
|
sPlot->SetEnabled(kTRUE);
|
||||||
|
}
|
||||||
|
sOutput->SetEnabled(kFALSE);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbSignal::setDbitList(Long64_t r) {
|
||||||
|
|
||||||
|
Long64_t mask=((Long64_t)1<<id);
|
||||||
|
|
||||||
|
// cout << hex << r << dec <<endl;
|
||||||
|
|
||||||
|
if (r)
|
||||||
|
sDbitList->SetOn(kTRUE,kFALSE);
|
||||||
|
else
|
||||||
|
sDbitList->SetOn(kFALSE,kFALSE);
|
||||||
|
|
||||||
|
return sDbitList->IsOn();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbSignal::isDbitList() { return sDbitList->IsOn();}
|
||||||
|
int ctbSignal::isOutput() { return sOutput->IsOn();}
|
||||||
|
int ctbSignal::isPlot() { return sPlot->IsOn();}
|
||||||
|
Pixel_t ctbSignal::getColor(){return fColorSel->GetColor();}
|
||||||
|
|
||||||
|
void ctbSignal::ToggledOutput(Bool_t b) {
|
||||||
|
Long_t mask=b<<id;
|
||||||
|
ToggledSignalOutput(id);
|
||||||
|
if (b) {
|
||||||
|
// sClock->SetEnabled(kTRUE);
|
||||||
|
sPlot->SetOn(kFALSE);
|
||||||
|
// sPlot->SetEnabled(kFALSE);
|
||||||
|
fColorSel->SetEnabled(kFALSE);
|
||||||
|
} else {
|
||||||
|
// sClock->SetEnabled(kFALSE);
|
||||||
|
// sClock->SetOn(kFALSE);
|
||||||
|
sPlot->SetEnabled(kTRUE);
|
||||||
|
if ( sPlot->IsOn())
|
||||||
|
fColorSel->SetEnabled(kFALSE);
|
||||||
|
else
|
||||||
|
fColorSel->SetEnabled(kTRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbSignal::ToggledDbitList(Bool_t b){
|
||||||
|
Long_t mask=id;
|
||||||
|
ToggledSignalDbitList(mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignal::ToggledPlot(Bool_t b){
|
||||||
|
Long_t mask=b<<id;
|
||||||
|
ToggledSignalPlot(mask);
|
||||||
|
fColorSel->SetEnabled(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbSignal::ColorChanged(Pixel_t p){
|
||||||
|
ToggledSignalPlot(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignal::ToggledSignalOutput(Int_t b) {
|
||||||
|
cout << "Toggle signal " << id << " " << b << " " << sOutput->IsOn() <<endl;;
|
||||||
|
Emit("ToggledSignalOutput(Int_t)", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbSignal::ToggledSignalDbitList(Int_t b){
|
||||||
|
cout << "Toggle dbitlist " << id << " " << b << endl;;
|
||||||
|
Emit("ToggledSignalDbitList(Int_t)", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbSignal::ToggledSignalPlot(Int_t b){
|
||||||
|
Emit("ToggledSignalPlot(Int_t)", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ctbSignals::ctbSignals(TGVerticalFrame *page, multiSlsDetector *det)
|
||||||
|
: TGGroupFrame(page,"IO Signals",kVerticalFrame), myDet(det) {
|
||||||
|
|
||||||
|
|
||||||
|
SetTitlePos(TGGroupFrame::kLeft);
|
||||||
|
page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame *hframe;
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
TGHorizontalFrame* hhframe=new TGHorizontalFrame(this, 800,800);
|
||||||
|
AddFrame(hhframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hhframe->MapWindow();
|
||||||
|
|
||||||
|
TGVerticalFrame *vframe;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int idac=0;
|
||||||
|
for (idac=0; idac<NSIGNALS; idac++) {
|
||||||
|
if (idac%((NSIGNALS+2)/2)==0) {
|
||||||
|
vframe=new TGVerticalFrame(hhframe, 400,800);
|
||||||
|
hhframe->AddFrame(vframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
vframe->MapWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
signals[idac]=new ctbSignal(vframe,idac,myDet);
|
||||||
|
signals[idac]->Connect("ToggledSignalOutput(Int_t)","ctbSignals",this,"ToggledOutReg(Int_t)");
|
||||||
|
signals[idac]->Connect("ToggledSignalDbitList(Int_t)","ctbSignals",this,"ToggledDbitList(Int_t)");
|
||||||
|
signals[idac]->Connect("ToggledSignalPlot(Int_t)","ctbSignals",this,"ToggledPlot(Int_t)");
|
||||||
|
|
||||||
|
vframe->AddFrame(signals[idac],new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
signals[idac]->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// #ifdef CTB
|
||||||
|
// idac=62;
|
||||||
|
// signals[idac]=new ctbSignal(vframe,idac,myDet);
|
||||||
|
// vframe->AddFrame(signals[idac],new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
// signals[idac]->MapWindow();
|
||||||
|
// sprintf(tit,"DBIT Latch");
|
||||||
|
|
||||||
|
// signals[idac]->setSignalAlias(tit,-1,-1);
|
||||||
|
|
||||||
|
// signals[idac]->Connect("ToggledSignalOutput(Int_t)","ctbSignals",this,"ToggledOutReg(Int_t)");
|
||||||
|
// signals[idac]->Connect("ToggledSignalDbitList(Int_t)","ctbSignals",this,"ToggledDbitList(Int_t)");
|
||||||
|
// signals[idac]->Connect("ToggledSignalPlot(Int_t)","ctbSignals",this,"ToggledPlot(Int_t)");
|
||||||
|
|
||||||
|
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
|
||||||
|
// idac=63;
|
||||||
|
// signals[idac]=new ctbSignal(vframe,idac,myDet);
|
||||||
|
// vframe->AddFrame(signals[idac],new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
// signals[idac]->MapWindow();
|
||||||
|
// sprintf(tit,"ADC Latch");
|
||||||
|
|
||||||
|
// signals[idac]->setSignalAlias(tit,-1,-1);
|
||||||
|
|
||||||
|
// signals[idac]->Connect("ToggledSignalOutput(Int_t)","ctbSignals",this,"ToggledOutReg(Int_t)");
|
||||||
|
// signals[idac]->Connect("ToggledSignalDbitList(Int_t)","ctbSignals",this,"ToggledDbitList(Int_t)");
|
||||||
|
// signals[idac]->Connect("ToggledSignalPlot(Int_t)","ctbSignals",this,"ToggledPlot(Int_t)");
|
||||||
|
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(vframe, 800,50);
|
||||||
|
vframe->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
TGLabel *label= new TGLabel(hframe, "IO Control Register: ");
|
||||||
|
hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
label->MapWindow();
|
||||||
|
label->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
eIOCntrlRegister = new TGNumberEntry(hframe, 0, 16,999, TGNumberFormat::kNESHex,
|
||||||
|
TGNumberFormat::kNEANonNegative,
|
||||||
|
TGNumberFormat::kNELNoLimits);
|
||||||
|
|
||||||
|
hframe->AddFrame(eIOCntrlRegister,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
eIOCntrlRegister->MapWindow();
|
||||||
|
eIOCntrlRegister->Resize(150,30);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hframe=new TGHorizontalFrame(vframe, 800,50);
|
||||||
|
vframe->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
hframe->MapWindow();
|
||||||
|
|
||||||
|
|
||||||
|
label= new TGLabel(hframe, "DBit Offset: ");
|
||||||
|
hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
label->MapWindow();
|
||||||
|
label->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
eDbitOffset = new TGNumberEntry(hframe, 0, 9,999, TGNumberFormat::kNESInteger,
|
||||||
|
TGNumberFormat::kNEANonNegative,
|
||||||
|
TGNumberFormat::kNELNoLimits);
|
||||||
|
|
||||||
|
hframe->AddFrame(eDbitOffset,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1));
|
||||||
|
eDbitOffset->MapWindow();
|
||||||
|
eDbitOffset->Resize(150,30);
|
||||||
|
|
||||||
|
|
||||||
|
TGTextEntry *e= eDbitOffset->TGNumberEntry::GetNumberEntry();
|
||||||
|
e->Connect("ReturnPressed()","ctbSignals",this,"setDbitOffset()");
|
||||||
|
|
||||||
|
e->Connect("ValueSet(Long_t)","ctbSignals",this,"setDbitOffset(Long_t)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbSignals::setSignalAlias(string line) {
|
||||||
|
|
||||||
|
int is=-1, plot=0, col=-1;
|
||||||
|
char tit[100];
|
||||||
|
int narg=sscanf(line.c_str(),"BIT%d %s %d %d",&is,tit,&plot,&col);
|
||||||
|
if (narg<2)
|
||||||
|
return -1;
|
||||||
|
if (is>=0 && is<NIOSIGNALS) {
|
||||||
|
signals[is]->setSignalAlias(tit,plot,col);
|
||||||
|
}
|
||||||
|
return is;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbSignals::getSignalAlias() {
|
||||||
|
|
||||||
|
ostringstream oss;
|
||||||
|
for (int is=0; is<NIOSIGNALS; is++)
|
||||||
|
oss << signals[is]->getSignalAlias() << endl;
|
||||||
|
|
||||||
|
|
||||||
|
return oss.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignals::update() {
|
||||||
|
Long64_t oreg=myDet->setPatternIOControl();//setCTBWord(-1,-1);
|
||||||
|
// Long64_t creg=myDet->setPatternClockControl();//setCTBWord(-2,-1);
|
||||||
|
|
||||||
|
|
||||||
|
char val[1000];
|
||||||
|
cout << hex << oreg << dec << endl;
|
||||||
|
// cout << hex << creg << dec << endl;
|
||||||
|
|
||||||
|
sprintf(val,"%llX",oreg);
|
||||||
|
// eIOCntrlRegister->SetHexNumber(oreg);
|
||||||
|
|
||||||
|
|
||||||
|
for (int idac=0; idac<NIOSIGNALS; idac++) {
|
||||||
|
signals[idac]->setOutput(oreg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Long64_t mask;
|
||||||
|
std::vector <int> dbitlist=myDet->getReceiverDbitList();
|
||||||
|
if (dbitlist.empty())
|
||||||
|
for (int is=0; is<64; is++) {
|
||||||
|
signals[is]->setDbitList(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int is=0; is<64; is++) signals[is]->setDbitList(0);
|
||||||
|
for (const auto &value : dbitlist) {
|
||||||
|
signals[value]->setDbitList(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
eDbitOffset->SetNumber(myDet->getReceiverDbitOffset());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string ctbSignals::getSignalParameters() {
|
||||||
|
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
line << "patioctrl " << hex << myDet->setPatternIOControl() << dec << endl;//setCTBWord(-1,-1)
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ctbSignals::ToggledOutReg(Int_t mask) {
|
||||||
|
|
||||||
|
char val[1000];
|
||||||
|
Long64_t oreg=myDet->setPatternIOControl();//setCTBWord(-1,-1);
|
||||||
|
Long64_t m=((Long64_t)1)<<mask;
|
||||||
|
|
||||||
|
|
||||||
|
cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (signals[mask]->isOutput()) {
|
||||||
|
cout << " or " << m ;
|
||||||
|
oreg|=m;
|
||||||
|
} else {
|
||||||
|
cout << " not " << ~m ;
|
||||||
|
oreg&=~m;
|
||||||
|
}
|
||||||
|
cout << " after " << oreg << endl;
|
||||||
|
|
||||||
|
myDet->setPatternIOControl(oreg);//setCTBWord(-1,oreg);
|
||||||
|
oreg=myDet->setPatternIOControl();//myDet->setCTBWord(-1,-1);
|
||||||
|
|
||||||
|
cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl;
|
||||||
|
|
||||||
|
sprintf(val,"%llX",oreg);
|
||||||
|
// eIOCntrlRegister->SetHexNumber(oreg);
|
||||||
|
eIOCntrlRegister->SetText(val);
|
||||||
|
// eIOCntrlRegister->SetNumber(oreg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignals::ToggledDbitList(Int_t mask){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cout << "************* Here" << endl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::vector <int> new_dbitlist;
|
||||||
|
std::vector <int> old_dbitlist=myDet->getReceiverDbitList();
|
||||||
|
|
||||||
|
char val[1000];
|
||||||
|
Long64_t m=((Long64_t)1)<<mask;
|
||||||
|
|
||||||
|
if (old_dbitlist.empty() && signals[mask]->isDbitList())
|
||||||
|
;
|
||||||
|
else {
|
||||||
|
int ns=0;
|
||||||
|
for (int is=0; is<64; is++) {
|
||||||
|
if (signals[is]->isDbitList()){
|
||||||
|
new_dbitlist.push_back(is);
|
||||||
|
ns++;
|
||||||
|
cout << is << " " << ns << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ns>63) new_dbitlist.clear();
|
||||||
|
myDet->setReceiverDbitList(new_dbitlist);
|
||||||
|
}
|
||||||
|
std::vector <int> dbitlist=myDet->getReceiverDbitList();
|
||||||
|
if (dbitlist.empty())
|
||||||
|
for (int is=0; is<64; is++) signals[is]->setDbitList(1);
|
||||||
|
else
|
||||||
|
for (int is=0; is<64; is++) signals[is]->setDbitList(0);
|
||||||
|
for (const auto &value : dbitlist) signals[value]->setDbitList(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignals::ToggledPlot(Int_t b) {
|
||||||
|
|
||||||
|
Emit("ToggledSignalPlot(Int_t)", b);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSignals::ToggledSignalPlot(Int_t b) {
|
||||||
|
|
||||||
|
Emit("ToggledSignalPlot(Int_t)", b);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Pixel_t ctbSignals::getColor(int i){
|
||||||
|
if (i>=0 && i<NSIGNALS) return signals[i]->getColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctbSignals::getPlot(int i){
|
||||||
|
if (i>=0 && i<NSIGNALS) return signals[i]->isPlot();
|
||||||
|
};
|
||||||
|
|
||||||
|
void ctbSignals::setDbitOffset(Long_t) {
|
||||||
|
setDbitOffset();
|
||||||
|
}
|
||||||
|
void ctbSignals::setDbitOffset(){
|
||||||
|
myDet->setReceiverDbitOffset(eDbitOffset->GetNumber());
|
||||||
|
}
|
118
ctbGui/ctbSignals.h
Executable file
118
ctbGui/ctbSignals.h
Executable file
@ -0,0 +1,118 @@
|
|||||||
|
#ifndef CTBSIGNALS_H
|
||||||
|
#define CTBSIGNALS_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define NSIGNALS 64
|
||||||
|
|
||||||
|
#define NIOSIGNALS 64 //for moench board was 52
|
||||||
|
|
||||||
|
|
||||||
|
#define ADCLATCH 63
|
||||||
|
#define DIGSIGLATCH 62
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
class TH1I;
|
||||||
|
class TGTextButton;
|
||||||
|
class TGColorSelect;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TGNumberEntry;
|
||||||
|
class multiSlsDetector;
|
||||||
|
class ctbSignal;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class ctbSignal : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
// RQ_OBJECT("ctbSignal")
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
TGLabel *sLabel;
|
||||||
|
TGCheckButton *sOutput;
|
||||||
|
TGCheckButton *sDbitList;
|
||||||
|
TGCheckButton *sPlot;
|
||||||
|
TGLabel *sValue;
|
||||||
|
TGNumberEntry *sEntry;
|
||||||
|
TGColorSelect *fColorSel;
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
Int_t id;
|
||||||
|
|
||||||
|
TH1I *hsig;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
ctbSignal(TGFrame *page, int i, multiSlsDetector *det);
|
||||||
|
int setSignalAlias(char *tit, int plot, int col);
|
||||||
|
string getSignalAlias();
|
||||||
|
|
||||||
|
TH1I *getPlot() {return hsig;};
|
||||||
|
int setOutput(Long64_t);
|
||||||
|
int fixOutput(int);
|
||||||
|
int setDbitList(Long64_t);
|
||||||
|
|
||||||
|
void ToggledOutput(Bool_t);
|
||||||
|
void ToggledDbitList(Bool_t);
|
||||||
|
void ToggledPlot(Bool_t);
|
||||||
|
void ColorChanged(Pixel_t);
|
||||||
|
|
||||||
|
int isDbitList();
|
||||||
|
int isOutput();
|
||||||
|
int isPlot();
|
||||||
|
Pixel_t getColor();
|
||||||
|
|
||||||
|
|
||||||
|
void ToggledSignalOutput(Int_t); //*SIGNAL*
|
||||||
|
void ToggledSignalDbitList(Int_t); //*SIGNAL*
|
||||||
|
void ToggledSignalPlot(Int_t); //*SIGNAL*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ClassDef(ctbSignal,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
class ctbSignals : public TGGroupFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
ctbSignal *signals[NSIGNALS];
|
||||||
|
|
||||||
|
TGNumberEntry *eIOCntrlRegister;
|
||||||
|
TGNumberEntry *eDbitOffset;
|
||||||
|
|
||||||
|
multiSlsDetector *myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbSignals(TGVerticalFrame *page, multiSlsDetector *det);
|
||||||
|
int setSignalAlias(string line);
|
||||||
|
string getSignalAlias();
|
||||||
|
|
||||||
|
int getPlot(int);
|
||||||
|
Pixel_t getColor(int);
|
||||||
|
|
||||||
|
void update();
|
||||||
|
// void saveParameters();
|
||||||
|
string getSignalParameters();
|
||||||
|
|
||||||
|
//void setDbitList(Int_t);
|
||||||
|
void setDbitOffset(Long_t);
|
||||||
|
void setDbitOffset();
|
||||||
|
|
||||||
|
void ToggledOutReg(Int_t);
|
||||||
|
void ToggledDbitList(Int_t);
|
||||||
|
void ToggledPlot(Int_t);
|
||||||
|
void ToggledSignalPlot(Int_t); //*SIGNAL*
|
||||||
|
|
||||||
|
ClassDef(ctbSignals,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
185
ctbGui/ctbSlowAdcs.cpp
Normal file
185
ctbGui/ctbSlowAdcs.cpp
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <TGTextEntry.h>
|
||||||
|
#include <TGLabel.h>
|
||||||
|
#include <TGNumberEntry.h>
|
||||||
|
#include <TGButton.h>
|
||||||
|
|
||||||
|
#include "ctbSlowAdcs.h"
|
||||||
|
#include "multiSlsDetector.h"
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbSlowAdc::ctbSlowAdc(TGGroupFrame *page, int idac, multiSlsDetector *det) : TGHorizontalFrame(page, 800,50) , id(idac), myDet(det) {
|
||||||
|
|
||||||
|
|
||||||
|
TGHorizontalFrame *hframe=this;
|
||||||
|
|
||||||
|
page->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
char tit[100];
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "SENSE %d:",idac-1000);
|
||||||
|
|
||||||
|
dacsLabel= new TGLabel(hframe, tit);// new TGLabel(hframe, tit);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
hframe->AddFrame(dacsLabel,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsLabel->MapWindow();
|
||||||
|
dacsLabel->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sprintf(tit, "xxx");
|
||||||
|
dacsValue= new TGLabel(hframe, tit);
|
||||||
|
hframe->AddFrame( dacsValue,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
dacsValue->MapWindow();
|
||||||
|
dacsValue->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TGTextButton *b= new TGTextButton(hframe, "Update");
|
||||||
|
hframe->AddFrame( b,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 5, 5, 5, 5));
|
||||||
|
b->MapWindow();
|
||||||
|
b->SetTextJustify(kTextLeft);
|
||||||
|
|
||||||
|
b->Connect("Clicked()","ctbSlowAdc",this,"getValue()");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbSlowAdc::setLabel(char *tit) {
|
||||||
|
if(tit)
|
||||||
|
dacsLabel->SetText(tit);
|
||||||
|
|
||||||
|
|
||||||
|
return id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbSlowAdc::getLabel() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
line << dacsLabel->GetText() << endl;
|
||||||
|
|
||||||
|
// line << "DAC" << dec << id << " " << dacsUnit->IsOn() << endl;
|
||||||
|
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbSlowAdc::getValue() {
|
||||||
|
|
||||||
|
int val=myDet->getADC((slsDetectorDefs::dacIndex)id);
|
||||||
|
char s[100];
|
||||||
|
cout << "adc " << id << " " << val << endl;
|
||||||
|
sprintf(s,"%d mV",val);
|
||||||
|
if (id==999)
|
||||||
|
sprintf(s,"%d <20>C",val);
|
||||||
|
dacsValue->SetText(s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return val;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbSlowAdcs::ctbSlowAdcs(TGVerticalFrame *page, multiSlsDetector *det) : TGGroupFrame(page,"Sense",kVerticalFrame) , myDet(det){
|
||||||
|
|
||||||
|
|
||||||
|
SetTitlePos(TGGroupFrame::kLeft);
|
||||||
|
page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10));
|
||||||
|
MapWindow();
|
||||||
|
|
||||||
|
// cout << "window mapped " << endl;
|
||||||
|
|
||||||
|
|
||||||
|
for (int idac=0; idac<NSLOWADCS; idac++) {
|
||||||
|
|
||||||
|
adcs[idac]=new ctbSlowAdc(this, idac+1000, myDet);
|
||||||
|
|
||||||
|
}
|
||||||
|
adcs[NSLOWADCS]=new ctbSlowAdc(this, 999, myDet);
|
||||||
|
adcs[NSLOWADCS]->setLabel("Temperature");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ctbSlowAdcs::setSlowAdcAlias(string line) {
|
||||||
|
|
||||||
|
int is=-1, mv=0;
|
||||||
|
char tit[100];
|
||||||
|
int narg=sscanf(line.c_str(),"SENSE%d %s",&is,tit,&mv);
|
||||||
|
if (narg<2)
|
||||||
|
return -1;
|
||||||
|
if (is>=0 && is<NSLOWADCS)
|
||||||
|
adcs[is]->setLabel(tit);
|
||||||
|
return is;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string ctbSlowAdcs::getSlowAdcAlias() {
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int i=0; i<NSLOWADCS; i++)
|
||||||
|
line << adcs[i]->getLabel() << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
string ctbSlowAdcs::getAdcParameters() {
|
||||||
|
|
||||||
|
|
||||||
|
ostringstream line;
|
||||||
|
|
||||||
|
for (int i=0; i<NSLOWADCS; i++) {
|
||||||
|
//line << "dacs:" << i << " " << dacs[i]->getValue << endl;
|
||||||
|
line << "adc:" << i << " " << adcs[i]->getValue() << endl;
|
||||||
|
}
|
||||||
|
line << "adc:-1" << adcs[NSLOWADCS]->getValue() << endl;
|
||||||
|
return line.str();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ctbSlowAdcs::update() {
|
||||||
|
|
||||||
|
|
||||||
|
for (int idac=0; idac<NSLOWADCS+1; idac++) {
|
||||||
|
|
||||||
|
adcs[idac]->getValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
75
ctbGui/ctbSlowAdcs.h
Normal file
75
ctbGui/ctbSlowAdcs.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#ifndef CTBSLOWADCS_H
|
||||||
|
#define CTBSLOWADCS_H
|
||||||
|
#include <TGFrame.h>
|
||||||
|
|
||||||
|
|
||||||
|
//#define NDACS 16
|
||||||
|
#define NSLOWADCS 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TGTextEntry;
|
||||||
|
class TGLabel;
|
||||||
|
class TGNumberEntry;
|
||||||
|
class TGCheckButton;
|
||||||
|
class TGTextButton;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class multiSlsDetector;
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class ctbSlowAdc : public TGHorizontalFrame {
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// TGLabel *dacsLabel;
|
||||||
|
// TGNumberEntry *dacsEntry;
|
||||||
|
// TGCheckButton *dacsUnit;
|
||||||
|
TGLabel *dacsLabel;
|
||||||
|
TGLabel *dacsValue;
|
||||||
|
int id;
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
public:
|
||||||
|
ctbSlowAdc(TGGroupFrame*, int , multiSlsDetector*);
|
||||||
|
int getValue();
|
||||||
|
|
||||||
|
int setLabel(char *tit);
|
||||||
|
string getLabel();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ClassDef(ctbSlowAdc,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ctbSlowAdcs : public TGGroupFrame {
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctbSlowAdc *adcs[NSLOWADCS+1];
|
||||||
|
|
||||||
|
multiSlsDetector* myDet;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ctbSlowAdcs(TGVerticalFrame *page, multiSlsDetector*);
|
||||||
|
|
||||||
|
int setSlowAdcAlias(string line);
|
||||||
|
// int setDacAlias(string line);
|
||||||
|
string getSlowAdcAlias();
|
||||||
|
string getAdcParameters();
|
||||||
|
|
||||||
|
void update();
|
||||||
|
|
||||||
|
ClassDef(ctbSlowAdcs,0)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -27,6 +27,28 @@ class detectorData {
|
|||||||
strcpy(fileName,fname);
|
strcpy(fileName,fname);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int64_t getChannel(int i) {
|
||||||
|
int off=dynamicRange/8;
|
||||||
|
if (off==1) {
|
||||||
|
char val=*(cvalues+i);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
if (off==2) {
|
||||||
|
int16_t val=*((int16_t*)(cvalues+i*off));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
if (off==4) {
|
||||||
|
int32_t val=*((int32_t*)(cvalues+i*off));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
if (off==8) {
|
||||||
|
int64_t val=*((int64_t*)(cvalues+i*off));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short The destructor
|
@short The destructor
|
||||||
deletes also the arrays pointing to data/errors/angles if not NULL
|
deletes also the arrays pointing to data/errors/angles if not NULL
|
||||||
|
@ -3327,6 +3327,9 @@ void multiSlsDetector::readFrameFromReceiver() {
|
|||||||
uint32_t yoffset = coordY * nPixelsY;
|
uint32_t yoffset = coordY * nPixelsY;
|
||||||
uint32_t singledetrowoffset = nPixelsX * bytesPerPixel;
|
uint32_t singledetrowoffset = nPixelsX * bytesPerPixel;
|
||||||
uint32_t rowoffset = nX * singledetrowoffset;
|
uint32_t rowoffset = nX * singledetrowoffset;
|
||||||
|
if (getDetectorTypeAsEnum() == CHIPTESTBOARD) {
|
||||||
|
singledetrowoffset=size;
|
||||||
|
}
|
||||||
FILE_LOG(logDEBUG1) << "Multi Image Info:"
|
FILE_LOG(logDEBUG1) << "Multi Image Info:"
|
||||||
"\n\txoffset: "
|
"\n\txoffset: "
|
||||||
<< xoffset << "\n\tyoffset: " << yoffset
|
<< xoffset << "\n\tyoffset: " << yoffset
|
||||||
@ -3340,7 +3343,11 @@ void multiSlsDetector::readFrameFromReceiver() {
|
|||||||
(char *)image + (i * singledetrowoffset), singledetrowoffset);
|
(char *)image + (i * singledetrowoffset), singledetrowoffset);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < nPixelsY; ++i) {
|
for (uint32_t i = 0; i < nPixelsY; ++i) {
|
||||||
|
std::cout << i << " " << ((yoffset + i) * rowoffset) + xoffset << " " << (i * singledetrowoffset) << " " << singledetrowoffset << std::endl;
|
||||||
|
|
||||||
memcpy(((char *)multiframe) + ((yoffset + i) * rowoffset) + xoffset,
|
memcpy(((char *)multiframe) + ((yoffset + i) * rowoffset) + xoffset,
|
||||||
(char *)image + (i * singledetrowoffset), singledetrowoffset);
|
(char *)image + (i * singledetrowoffset), singledetrowoffset);
|
||||||
}
|
}
|
||||||
@ -3362,6 +3369,7 @@ void multiSlsDetector::readFrameFromReceiver() {
|
|||||||
}
|
}
|
||||||
// normal pixels
|
// normal pixels
|
||||||
else {
|
else {
|
||||||
|
// std::cout << "creating detectorData" << std::endl;
|
||||||
thisData = new detectorData(getCurrentProgress(), currentFileName.c_str(), nCompletePixelsX,
|
thisData = new detectorData(getCurrentProgress(), currentFileName.c_str(), nCompletePixelsX,
|
||||||
nCompletePixelsY, multiframe, multisize, dynamicRange,
|
nCompletePixelsY, multiframe, multisize, dynamicRange,
|
||||||
currentFileIndex);
|
currentFileIndex);
|
||||||
|
Reference in New Issue
Block a user