3 #include <qwt_plot_curve.h>
4 #include <qwt_symbol.h>
14 m_MCA(
"bm12det:aim_adc1"),
15 m_ADC(
"bm12det:adc1"),
16 m_HVPS(
"bm12det:hvps1"),
21 m_SaveDataPath(QDir::currentPath()),
22 m_SaveWindowsPath(QDir::currentPath())
45 while (!
m_TCA.isEmpty()) {
46 delete m_TCA.takeFirst();
66 return m_TCA.value(chan);
110 if (ch >= 0 && ch < 13) {
117 wf -> YData().clear();
121 wf -> YDataSaved1().clear();
125 wf -> YDataSaved2().clear();
129 wf -> YDataSaved3().clear();
145 if (ch >= 0 && ch < 13) {
151 wf -> YDataSaved1() = wf -> YData();
155 wf -> YDataSaved2() = wf -> YData();
159 wf -> YDataSaved3() = wf -> YData();
217 return bin*0.0538287-0.060349;
226 int xlen = wf->
XData().size();
227 int ylen = wf->
YData().size();
230 wf->
XData().resize(ylen);
231 for (
int i=0; i<ylen; i++) {
236 m_Graph -> detachItems(QwtPlotItem::Rtti_PlotCurve);
237 m_Graph -> detachItems(QwtPlotItem::Rtti_PlotMarker);
239 QwtPlotCurve *pc =
new QwtPlotCurve(
"Total");
240 pc -> setSamples(wf->
XData().data(), wf->
YData().data(), ylen);
243 pc -> setSymbol(
new QwtSymbol(QwtSymbol::Ellipse,QBrush(),pen,QSize(3,3)));
247 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"SCA1");
249 pc1 -> setSamples(wf->
XData().data(), wf->
YDataSCA1().data(), ylen);
251 pc1 -> setSymbol(
new QwtSymbol(QwtSymbol::Ellipse,QBrush(),pen,QSize(3,3)));
252 pc1 -> setBrush(QBrush(QColor(255,0,0,20)));
257 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"SCA2");
259 pc1 -> setSamples(wf->
XData().data(), wf->
YDataSCA2().data(), ylen);
261 pc1 -> setSymbol(
new QwtSymbol(QwtSymbol::Ellipse,QBrush(),pen,QSize(3,3)));
262 pc1 -> setBrush(QBrush(QColor(0,255,0,20)));
267 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"SCA3");
269 pc1 -> setSamples(wf->
XData().data(), wf->
YDataSCA3().data(), ylen);
271 pc1 -> setSymbol(
new QwtSymbol(QwtSymbol::Ellipse,QBrush(),pen,QSize(3,3)));
272 pc1 -> setBrush(QBrush(QColor(0,0,255,20)));
277 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"Saved A");
278 QPen pen(Qt::darkRed);
285 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"Saved B");
286 QPen pen(Qt::darkGreen);
293 QwtPlotCurve *pc1 =
new QwtPlotCurve(
"Saved C");
294 QPen pen(Qt::darkBlue);
305 static void max(
int& ncol,
int &
max,
int sz)
324 max(ncolumns, maxsize, wf->
YData().size());
333 QString name = QFileDialog::getSaveFileName(NULL,
"Save Data...",
m_SaveDataPath);
341 FILE *ofile = fopen(qPrintable(name),
"a+");
343 fprintf(ofile,
"#S 1\n");
344 fprintf(ofile,
"#N %d\n", ncolumns+2);
345 fprintf(ofile,
"#L point percent");
349 if (wf->
YData().size()) fprintf(ofile,
" ch%d", i+1);
350 if (wf->
YDataSCA1().size()) fprintf(ofile,
" ch%dsca1", i+1);
351 if (wf->
YDataSCA2().size()) fprintf(ofile,
" ch%dsca2", i+1);
352 if (wf->
YDataSCA3().size()) fprintf(ofile,
" ch%dsca3", i+1);
353 if (wf->
YDataSaved1().size()) fprintf(ofile,
" ch%dsav1", i+1);
354 if (wf->
YDataSaved2().size()) fprintf(ofile,
" ch%dsav2", i+1);
355 if (wf->
YDataSaved3().size()) fprintf(ofile,
" ch%dsav3", i+1);
357 fprintf(ofile,
"\n");
359 for (
int row=0; row<maxsize; row++) {
364 if (wf->
YData().size()>row) fprintf(ofile,
"\t%g", wf->
YData()[row]);
372 fprintf(ofile,
"\n");
381 QString name = QFileDialog::getOpenFileName(NULL,
"Load Energy Windows...",
m_SaveWindowsPath);
388 FILE *ifile = fopen(qPrintable(name),
"r");
389 QTextStream istr(ifile);
391 QRegExp match(
"epics_put\\(\\s*\"bm12det:tca(\\d+)SCA(\\d+)(\\S+)\",\\s*(\\S+)\\s*\\)\\;");
394 line = istr.readLine();
396 if (match.exactMatch(line)) {
397 int chan = match.cap(1).toInt()-1;
398 int win = match.cap(2).toInt()-1;
399 int islow = match.cap(3)==
"_LOW";
400 int ishigh = match.cap(3)==
"_HI";
402 double val = match.cap(4).toDouble();
413 }
while (!line.isNull());
422 foreach(tca,
m_TCA) {
427 cmd += QString(
"epics_put( \"%1\", %2 );\n").arg(lll->
pvName()).arg(lll->
value());
428 cmd += QString(
"epics_put( \"%1\", %2 );\n").arg(hll->
pvName()).arg(hll->
value());
434 QString name = QFileDialog::getSaveFileName(NULL,
"Save Energy Windows...",
m_SaveWindowsPath);
441 FILE *ofile = fopen(qPrintable(name),
"w");
442 fputs(qPrintable(cmd), ofile);
void setSelected(int slct)
void setLowerLevelDiscrim(double l)
virtual ~BM12Controller()
EpicsDouble * upperLevel(int chan)
EpicsDouble * lowerLevel(int chan)
EpicsA2DConverter * a2d()
QList< BM12Waveforms * > m_Waveforms
EpicsPowerSupply * powerSupply()
void setLowerLevel(int chan, double lowerlevel)
BM12Controller(MCAController *ctrl, QwtPlot *graph, QObject *parent=0)
double calibratedValue(int bin)
void setVoltage(double v)
void setGated(int chan, int gtd)
QVector< double > value()
QList< EpicsPulseAnalyser * > m_TCA
EpicsPulseAnalyser * pulseAnalyser(int chan)
void setUpperLevelDiscrim(double l)
void count(int ch, int win)
void selectSCA(int ch, int win)
static void max(int &ncol, int &max, int sz)
void saveEnergyWindows(int ch)
void setUpperLevel(int chan, double upperlevel)
void clear(int ch, int mem)
void loadEnergyWindows(int ch)
QString m_SaveWindowsPath
void save(int ch, int mem)
MCAController * m_Controller
void setCoincidence(int coinc)