Ignore:
Timestamp:
07/29/11 13:51:45 (13 years ago)
Author:
lyard
Message:
version 0.2 of the raw events viewer
Location:
trunk/FACT++/gui/RawEventsViewer
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.cc

    r11650 r11697  
    1919
    2020#include <QtGui/QFileDialog>
     21
     22#include <qwt_plot_grid.h>
     23#include <qwt_symbol.h>
     24
     25#include "../../src/Configuration.h"
    2126
    2227//Coordinates of an hexagon of radius 1 and center 0
     
    541546    renderText(bboxMax[0]+xShift/2.0f, bboxMin[1]-4*yShift, 0, QString("Slices"));
    542547    renderText(bboxMin[0]-yShift/2.0f, bboxMin[1]-4*yShift, 0, QString("0"));
    543     renderText(((bboxMin[0]+bboxMax[0])/2.0f)-xShift/2.0f, bboxMin[1]-4*yShift, 0, QString("512"));
    544     renderText(bboxMax[0]-xShift/2.0f, bboxMin[1]-4*yShift, 0, QString("1024"));
     548    ostringstream str;
     549    str << nRoi/2;
     550    renderText(((bboxMin[0]+bboxMax[0])/2.0f)-xShift/2.0f, bboxMin[1]-4*yShift, 0, QString(str.str().c_str()));
     551    str.str("");
     552    str << nRoi;
     553    renderText(bboxMax[0]-xShift/2.0f, bboxMin[1]-4*yShift, 0, QString(str.str().c_str()));
    545554
    546555}
     
    563572    rowNum = -1;
    564573    eventStep = 1;
    565     selectedPixel = 0;
     574    selectedPixel = 393;
    566575    inputFile = NULL;
    567576    eventData = NULL;
    568     drawPatch = false;
     577    drawPatch = true;
    569578    drawImpulse = false;
    570579    drawBlur = false;
     580    loopCurrentEvent = false;
    571581#ifdef LOAD_RAW
    572582    loadEvents("/scratch/00000043.001_T.bin");
     
    600610
    601611        hardwareMapping[softid] = hardid;
     612        softwareMapping[hardid] = softid;
    602613
    603614        l++;
     
    642653    {
    643654        color[0] = 0.5; color[1] = 0.5; color[2] = 0.3;
    644 //        if (i==0 || i==2 || i==5 || i==126 || i==10 || i==23 || i==28 || i==38 || i==132 || i==42 || i==55 ||
    645 //           i==18 || i==21 || i==34 || i==136 || i==122 || i==8 || i==14 || i==32 || i==45 || i==51 || i==138 ||
    646 //            i==93 || i==75 || i==54 || i==158 || i==111 || i==105 || i==94 || i==82 || i==66 || i==61 || i==79 ||
    647 //            i==156 || i==115 || i==102 || i==89 || i==71 || i==63 || i==152 || i==98 || i==84)
    648 //        {
    649 //            color[0] = 102.f/255.f;
    650 //            color[1] = 0.f;
    651 //            color[2] = 153.f/255.f;
    652 //        }
    653655        for (int j=0;j<3;j++)
    654656            patchesColor[i][j] = color[j];
     
    657659    for (int i=0;i<1440;i++)
    658660        updateNeighbors(i);
    659 
    660 
    661 
    662661}
    663662/************************************************************
     
    712711    }
    713712    glMatrixMode(GL_MODELVIEW);
    714 
    715713}
    716714
     
    746744        drawPatches();
    747745
    748     if (drawImpulse)
    749     {
     746   if (!drawBlur)
     747   {
    750748        glLineWidth(1.0f);
    751749        glColor3f(1.0,1.0,1.0);
    752750        drawHexagon(selectedPixel, false);
    753     }
     751   }
    754752}
    755753
     
    805803    if (face != -1) {
    806804        selectedPixel = face;
     805        emit signalCurrentPixel(face);
    807806        updateGL();
    808807        }
     
    871870    if (!*inputFile)
    872871    {
    873         cout << "Couldn't open file." << endl;
    874872        delete inputFile;
    875873        inputFile = NULL;
    876874        return;
    877875    }
     876    vector<string> entriesToCheck;
     877    entriesToCheck.push_back("NAXIS2");
     878    entriesToCheck.push_back("NROI");
     879    entriesToCheck.push_back("NTMARK");
     880    entriesToCheck.push_back("RUNTYPE");
     881    entriesToCheck.push_back("REVISION");
     882    entriesToCheck.push_back("BLDVER");
     883    entriesToCheck.push_back("RUNID");
     884    entriesToCheck.push_back("NBOARD");
     885    entriesToCheck.push_back("NPIX");
     886    entriesToCheck.push_back("NROITM");
     887    entriesToCheck.push_back("TIMESYS");
     888    entriesToCheck.push_back("DATE");
     889    entriesToCheck.push_back("NIGHT");
     890    entriesToCheck.push_back("CAMERA");
     891    entriesToCheck.push_back("DAQ");
     892    entriesToCheck.push_back("ADCCOUNT");
     893    entriesToCheck.push_back("TSTART");
     894    entriesToCheck.push_back("TSTOP");
     895    entriesToCheck.push_back("NBEVTOK");
     896    entriesToCheck.push_back("NBEVTREJ");
     897    entriesToCheck.push_back("NBEVTBAD");
     898
     899    for (vector<string>::const_iterator it=entriesToCheck.begin(); it != entriesToCheck.end(); it++)
     900    {
     901        if (!inputFile->HasKey(*it)){
     902            cout << *it << " missing. Aborting load..." << endl;
     903            return;}
     904    }
    878905    nRows = inputFile->GetInt("NAXIS2");
    879906    nRoi = inputFile->GetInt("NROI");
    880     runNumber = -1;
    881     nTM = inputFile->GetInt("NTM");
     907    runNumber = inputFile->GetInt("RUNID");
     908    nTM = inputFile->GetInt("NTMARK");
    882909    runType = inputFile->GetInt("RUNTYPE");
    883     firstDataTime = -1;
    884     lastDataTime = -1;
     910    firstDataTime = inputFile->GetInt("TSTART");
     911    lastDataTime = inputFile->GetInt("TSTOP");
     912    nRoiTM = inputFile->GetInt("NROITM");
     913    revision = inputFile->GetInt("REVISION");
     914    builderVersion = inputFile->GetInt("BLDVER");
     915    nBoards = inputFile->GetInt("NBOARD");
     916    nPixels = inputFile->GetInt("NPIX");
     917    timeSystem = inputFile->GetStr("TIMESYS");
     918    creationDate = inputFile->GetStr("DATE");
     919    nightInt = inputFile->GetInt("NIGHT");
     920    camera = inputFile->GetStr("CAMERA");
     921    daq = inputFile->GetStr("DAQ");
     922    adcCount = inputFile->GetFloat("ADCCOUNT");
     923    nbOk = inputFile->GetInt("NBEVTOK");
     924    nbRej = inputFile->GetInt("NBEVTREJ");
     925    nbBad = inputFile->GetInt("NBEVTBAD");
    885926
    886927    eventNum = 0;
     
    892933    if (eventData != NULL)
    893934        delete[] eventData;
    894     eventData = new int16_t[1440*nRoi];
    895     inputFile->SetPtrAddress("Data", eventData);
    896     inputFile->SetPtrAddress("EventNum", &eventNum);
    897     inputFile->SetPtrAddress("TriggerType", &triggerType);
    898     inputFile->SetPtrAddress("SoftTrig", &softTrig);
    899     inputFile->SetPtrAddress("PCTime", &pcTime);
    900     inputFile->SetPtrAddress("BoardTime", boardTime);
    901     inputFile->SetPtrAddress("StartPix", startPix);
    902     inputFile->SetPtrAddress("StartTM", startTM);
     935    eventData = new int16_t[(1440+160)*nRoi];
     936    if (!inputFile->SetPtrAddress("Data", eventData)){
     937        cout << "Missing column " << "Data" << " Aborting load..." << endl;
     938        nRoi = nRows = 0;}
     939    if (!inputFile->SetPtrAddress("EventNum", &eventNum)){
     940        cout << "Missing column " << "EventNum" << " Aborting load..." << endl;
     941        nRoi = nRows = 0;}
     942    if (!inputFile->SetPtrAddress("TriggerType", &triggerType)){
     943        cout << "Missing column " << "TriggerType" << " Aborting load..." << endl;
     944        nRoi = nRows = 0;}
     945    if (!inputFile->SetPtrAddress("SoftTrig", &softTrig)){
     946        cout << "Missing column " << "SoftTrig" << " Aborting load..." << endl;
     947        nRoi = nRows = 0;}
     948    if (!inputFile->SetPtrAddress("PCTime", &pcTime)){
     949        cout << "Missing column " << "PCTime" << " Aborting load..." << endl;
     950        nRoi = nRows = 0;}
     951    if (!inputFile->SetPtrAddress("BoardTime", boardTime)){
     952        cout << "Missing column " << "BoardTime" << " Aborting load..." << endl;
     953        nRoi = nRows = 0;}
     954    if (!inputFile->SetPtrAddress("StartCellData", startPix)){
     955        cout << "Missing column " << "StartCellData" << " Aborting load..." << endl;
     956        nRoi = nRows = 0;}
     957    if (!inputFile->SetPtrAddress("StartCellTimeMarker", startTM)){
     958        cout << "Missing column " << "StartCellTimeMarker" << " Aborting load..." << endl;
     959        nRoi = nRows = 0;}
    903960    int backupStep = eventStep;
    904961    rowNum = -1;
     
    907964    eventStep = backupStep;
    908965    emit newFileLoaded();
     966    emit signalCurrentPixel(selectedPixel);
    909967}
    910968
     
    9501008    inputFile->GetRow(rowNum);
    9511009#endif
     1010
    9521011    updateGL();
    9531012    emit signalCurrentEvent(eventNum);
     1013    emit signalCurrentPixel(selectedPixel);
     1014
    9541015}
    9551016/************************************************************
     
    9601021    whichSlice++;
    9611022    if (whichSlice >= nRoi)
     1023    {
     1024        if (!loopCurrentEvent)
     1025        {
     1026            int backupStep = eventStep;
     1027            eventStep = 1;
     1028            eventStepping(true);
     1029            eventStep = backupStep;
     1030        }
    9621031        whichSlice=0;
    963 
     1032    }
    9641033    emit signalCurrentSlice(whichSlice);
    9651034    updateGL();
    9661035}
     1036void RawDataViewer::previousSlice()
     1037{
     1038    whichSlice--;
     1039    if (whichSlice < 0)
     1040    {
     1041        if (!loopCurrentEvent)
     1042        {
     1043            int backupStep = eventStep;
     1044            eventStep = 1;
     1045            eventStepping(false);
     1046            eventStep = backupStep;
     1047        }
     1048        whichSlice = nRoi-1;
     1049    }
     1050    emit signalCurrentSlice(whichSlice);
     1051    updateGL();
     1052}
    9671053/************************************************************
    9681054 * UICONNECTOR CONSTRUCTOR
     
    9701056UIConnector::UIConnector(QWidget*)
    9711057{
    972     timer.setInterval(1000.0);
     1058    timer.setInterval(10.0);
    9731059    QObject::connect(&timer, SIGNAL(timeout()),
    9741060                      this, SLOT(nextSlicePlease()));
     1061    hwID = 393;
     1062    swID = 0;
     1063    crateID = 9;
     1064    boardID = 8;
     1065    patchID = 1;
     1066    rescaleWholeCamera = true;
     1067}
     1068void UIConnector::slicesPlusPlus()
     1069{
     1070    viewer->nextSlice();
     1071}
     1072void UIConnector::slicesMinusMinus()
     1073{
     1074    viewer->previousSlice();
    9751075}
    9761076/************************************************************
     
    10061106        viewer->drawBlur = false;
    10071107    viewer->updateGL();
     1108}
     1109void UIConnector::loopEventCheckChange(int state)
     1110{
     1111    if (state)
     1112        viewer->loopCurrentEvent = true;
     1113    else
     1114        viewer->loopCurrentEvent = false;
    10081115}
    10091116/************************************************************
     
    12141321{
    12151322    ostringstream str;
    1216     str << "File loaded: " << currentFile;
    1217     fileLoadedLabel->setText(QString(str.str().c_str()));
    1218     str.str("");
    1219     str << "Run number: " << viewer->runNumber;
    1220     runNumberLabel->setText(QString(str.str().c_str()));
    1221     str.str("");
    1222     str << "Number of Events/Slices: " << viewer->nRows << "/" << viewer->nRoi;
    1223     numberOfSlicesLabel->setText(QString(str.str().c_str()));
    1224     str.str("");
    1225     str << "Number of Time Marks: " << viewer->nTM;
    1226     numberOfTimeMarksLabel->setText(QString(str.str().c_str()));
    1227     str.str("");
    1228     str << "Run Type: " << viewer->runType;
    1229     runTypeLabel->setText(QString(str.str().c_str()));
    1230     str.str("");
    1231     str << "Time of 1st data: " << viewer->firstDataTime;
    1232     firstTimeLabel->setText(QString(str.str().c_str()));
    1233     str.str("");
    1234     str << "Time of last data: " << viewer->lastDataTime;
    1235     lastTimeLabel->setText(QString(str.str().c_str()));
     1323    str << "File loaded: " << currentFile << "\n";
     1324//    fileLoadedLabel->setText(QString(str.str().c_str()));
     1325//    str.str("");
     1326    str << "Run number: " << viewer->runNumber << "\n";
     1327//    runNumberLabel->setText(QString(str.str().c_str()));
     1328//    str.str("");
     1329    str << "Number of Events: " << viewer->nRows << "\n";
     1330    str << "Number of Slices: " << viewer->nRoi << "\n";// << "/1024";
     1331//    numberOfSlicesLabel->setText(QString(str.str().c_str()));
     1332//    str.str("");
     1333    str << "Number of Time Marks: " << viewer->nTM << "\n";
     1334//    numberOfTimeMarksLabel->setText(QString(str.str().c_str()));
     1335
     1336//    str.str("");
     1337    str << "Run Type: " << viewer->runType << "\n";
     1338//    runTypeLabel->setText(QString(str.str().c_str()));
     1339//    str.str("");
     1340    str << "Time of 1st data: " << viewer->firstDataTime << "\n";
     1341//    firstTimeLabel->setText(QString(str.str().c_str()));
     1342//    str.str("");
     1343    str << "Time of last data: " << viewer->lastDataTime << "\n";
     1344//    lastTimeLabel->setText(QString(str.str().c_str()));
     1345//    str.str("");
     1346    str << "SVN revision: " << viewer->revision << '\n';
     1347    str << "Number of boards: " << viewer->nBoards << '\n';
     1348    str << "Number of pixels: " << viewer->nPixels << '\n';
     1349    str << "Number of Slices TM: " << viewer->nRoiTM << '\n';
     1350    str << "Time system: " << viewer->timeSystem << '\n';
     1351    str << "Date: " << viewer->creationDate << '\n';
     1352    str << "Night: " << viewer->nightInt << '\n';
     1353    str << "Camera: " << viewer->camera << '\n';
     1354    str << "DAQ: " << viewer->daq << '\n';
     1355    str << "ADC Count: " << viewer->adcCount << '\n';
     1356    str << "NB Evts OK:" << viewer->nbOk << '\n';
     1357    str << "NB Evts Rejected: " << viewer->nbRej << '\n';
     1358    str << "NB Evts Bad: " << viewer->nbBad << '\n';
     1359    extraInfoLabel->setText(QString(str.str().c_str()));
     1360
     1361
    12361362}
    12371363/************************************************************
     
    12541380    QString qstr(str.str().c_str());
    12551381    emit updateCurrentSliceDisplay(qstr);
     1382
     1383    str.str("");
     1384    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
     1385    qstr = qstr.fromStdString(str.str());
     1386    emit updateCurrentPixelSliceValue(qstr);
     1387
    12561388}
    12571389/************************************************************
     
    12801412    emit updateCurrentTriggerType(qstr);
    12811413
     1414    str.str("");
     1415    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
     1416    qstr = qstr.fromStdString(str.str());
     1417    emit updateCurrentPixelSliceValue(qstr);
     1418
    12821419    boardsTimeList->clear();
    12831420    startPixelsList->clear();
    12841421    startTimeMarksList->clear();
     1422    triggerDelayList->clear();
     1423    std::map<int, int> boardsHistoMap;
    12851424    for (int i=0;i <NBOARDS; i++)
    12861425    {
     
    12921431        str << ": " << viewer->boardTime[i];
    12931432        boardsTimeList->addItem(QString(str.str().c_str()));
    1294     }
     1433        if (boardsHistoMap.find(viewer->boardTime[i]) != boardsHistoMap.end())
     1434            boardsHistoMap[viewer->boardTime[i]]++;
     1435        else
     1436            boardsHistoMap[viewer->boardTime[i]] = 1;
     1437    }
     1438    std::map<int, int> pixelHistoMap;
    12951439    for (int i=0;i <NPIX; i++)
    12961440    {
     
    13021446        str << ": " << viewer->startPix[i];
    13031447        startPixelsList->addItem(QString(str.str().c_str()));
    1304     }
     1448        if (pixelHistoMap.find(viewer->startPix[i]) != pixelHistoMap.end())
     1449            pixelHistoMap[viewer->startPix[i]]++;
     1450        else
     1451            pixelHistoMap[viewer->startPix[i]] = 1;
     1452    }
     1453    std::map<int, int> timeMarksMap;
    13051454    for (int i=0;i <NTMARK; i++)
    13061455    {
     
    13121461        str << ": " << viewer->startTM[i];
    13131462        startTimeMarksList->addItem(QString(str.str().c_str()));
    1314     }
    1315 
    1316 }
    1317 
     1463        if (timeMarksMap.find(viewer->startTM[i]) != timeMarksMap.end())
     1464            timeMarksMap[viewer->startTM[i]]++;
     1465        else
     1466            timeMarksMap[viewer->startTM[i]] = 1;
     1467    }
     1468    std::map<int,int> delayMap;
     1469    triggerDelayList->addItem(QString("Patch | Slice:Delay Slice:Delay..."));
     1470    for (int i=0;i<NTMARK; i++)
     1471    {
     1472        str.str("");
     1473        str << i << " | ";
     1474        for (int j=0;j<viewer->nRoi;j++)
     1475        {
     1476            int value = viewer->eventData[1440*viewer->nRoi + i*viewer->nRoi + j];
     1477            if (delayMap.find(value) != delayMap.end())
     1478                 delayMap[value]++;
     1479             else
     1480                 delayMap[value] = 1;
     1481            str << j << ":" << value << " ";
     1482         }
     1483        triggerDelayList->addItem(QString(str.str().c_str()));
     1484    }
     1485
     1486    QVector<QwtIntervalSample> boardsHistoSamples(boardsHistoMap.size());
     1487    std::map<int,int>::iterator it = boardsHistoMap.begin();
     1488    for (unsigned int i=0;i<boardsHistoMap.size();i++)
     1489    {
     1490        QwtInterval interval(double(it->first), it->first+1.0);
     1491        interval.setBorderFlags(QwtInterval::ExcludeMaximum);
     1492        boardsHistoSamples[i] = QwtIntervalSample(it->second, interval);
     1493        it++;
     1494    }
     1495    boardsTimeHistoItem.setData(new QwtIntervalSeriesData(boardsHistoSamples));
     1496
     1497    QVector<QwtIntervalSample> pixelHistoSamples(pixelHistoMap.size());
     1498    it = pixelHistoMap.begin();
     1499    for (unsigned int i=0;i<pixelHistoMap.size();i++)
     1500    {
     1501        QwtInterval interval(double(it->first), it->first+1.0);
     1502        interval.setBorderFlags(QwtInterval::ExcludeMaximum);
     1503        pixelHistoSamples[i] = QwtIntervalSample(it->second, interval);
     1504        it++;
     1505    }
     1506    startCellHistoItem.setData(new QwtIntervalSeriesData(pixelHistoSamples));
     1507
     1508    QVector<QwtIntervalSample> TMHistoSamples(timeMarksMap.size());
     1509    it = timeMarksMap.begin();
     1510    for (unsigned int i=0;i<timeMarksMap.size();i++)
     1511    {
     1512        QwtInterval interval(double(it->first), it->first+1.0);
     1513        interval.setBorderFlags(QwtInterval::ExcludeMaximum);
     1514        TMHistoSamples[i] = QwtIntervalSample(it->second, interval);
     1515        it++;
     1516    }
     1517    startTimeMarkHistoItem.setData(new QwtIntervalSeriesData(TMHistoSamples));
     1518
     1519    QVector<QwtIntervalSample> delayTriggerSamples(delayMap.size());
     1520    it = delayMap.begin();
     1521    for (unsigned int i=0;i<delayMap.size(); i++)
     1522    {
     1523        QwtInterval interval(double(it->first), it->first+1.0);
     1524        interval.setBorderFlags(QwtInterval::ExcludeMaximum);
     1525        delayTriggerSamples[i] = QwtIntervalSample(it->second, interval);
     1526        it++;
     1527    }
     1528    triggerDelayHistoItem.setData(new QwtIntervalSeriesData(delayTriggerSamples));
     1529
     1530//    startCellHistoZoom->setZoomBase(startCellHistoItem.boundingRect());
     1531    QStack< QRectF > stack;
     1532    stack.push(boardsTimeHistoItem.boundingRect());
     1533    boardsTimeHistoZoom->setZoomStack(stack);
     1534    stack.pop();
     1535    stack.push(startCellHistoItem.boundingRect());
     1536    startCellHistoZoom->setZoomStack(stack);
     1537    stack.pop();
     1538    stack.push(startTimeMarkHistoItem.boundingRect());
     1539    startTimeMarkHistoZoom->setZoomStack(stack);
     1540    stack.pop();
     1541    stack.push(triggerDelayHistoItem.boundingRect());
     1542    triggerDelayHistoZoom->setZoomStack(stack);
     1543    stack.pop();
     1544    pixelChanged(viewer->selectedPixel);
     1545
     1546
     1547
     1548}
     1549
     1550void UIConnector::initHistograms()
     1551{
     1552//    QwtPlot*     boardsTimeHisto;
     1553//    QwtPlotHistogram boardsTimeHistoItem;
     1554    QwtPlotGrid* grid = new QwtPlotGrid;
     1555    grid->enableX(false);
     1556    grid->enableY(true);
     1557    grid->enableXMin(false);
     1558    grid->enableYMin(false);
     1559    grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
     1560    grid->attach(boardsTimeHisto);
     1561
     1562    grid = new QwtPlotGrid;
     1563    grid->enableX(false);
     1564    grid->enableY(true);
     1565    grid->enableXMin(false);
     1566    grid->enableYMin(false);
     1567    grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
     1568    grid->attach(startCellHisto);
     1569
     1570    grid = new QwtPlotGrid;
     1571    grid->enableX(false);
     1572    grid->enableY(true);
     1573    grid->enableXMin(false);
     1574    grid->enableYMin(false);
     1575    grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
     1576    grid->attach(startTimeMarkHisto);
     1577
     1578    grid = new QwtPlotGrid;
     1579    grid->enableX(false);
     1580    grid->enableY(true);
     1581    grid->enableXMin(false);
     1582    grid->enableYMin(false);
     1583    grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
     1584    grid->attach(pixelValueCurve);
     1585
     1586    grid = new QwtPlotGrid;
     1587    grid->enableX(false);
     1588    grid->enableY(true);
     1589    grid->enableXMin(false);
     1590    grid->enableYMin(false);
     1591    grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
     1592    grid->attach(triggerDelayHisto);
     1593
     1594
     1595    boardsTimeHisto->setAutoReplot(true);
     1596    startCellHisto->setAutoReplot(true);
     1597    startTimeMarkHisto->setAutoReplot(true);
     1598    pixelValueCurve->setAutoReplot(true);
     1599    triggerDelayHisto->setAutoReplot(true);
     1600    boardsTimeHisto->setTitle("Boards time values");
     1601    startCellHisto->setTitle("Start Cell values");
     1602    startTimeMarkHisto->setTitle("Start Time Marks values");
     1603    pixelValueCurve->setTitle("Current pixel values");
     1604    triggerDelayHisto->setTitle("Trigger Delays");
     1605
     1606    boardsTimeHistoItem.setBrush(QBrush(Qt::red));
     1607    startCellHistoItem.setBrush(QBrush(Qt::red));
     1608    startTimeMarkHistoItem.setBrush(QBrush(Qt::red));
     1609    triggerDelayHistoItem.setBrush(QBrush(Qt::red));
     1610//    pixelValueCurveItem.setBrush(QBrush(Qt::red));
     1611
     1612    boardsTimeHistoItem.attach(boardsTimeHisto);
     1613    startCellHistoItem.attach(startCellHisto);
     1614    startTimeMarkHistoItem.attach(startTimeMarkHisto);
     1615    triggerDelayHistoItem.attach(triggerDelayHisto);
     1616
     1617    //curve
     1618//    pixelValueCurveItem.setSymbol(new QwtSymbol(QwtSymbol::Cross, Qt::NoBrush, QPen(Qt::black), QSize(5,5)));
     1619    pixelValueCurveItem.setPen(QColor(Qt::darkGreen));
     1620    pixelValueCurveItem.setStyle(QwtPlotCurve::Lines);
     1621//    pixelValueCurveItem.setCurveAttribute(QwtPlotCurve::Fitted);
     1622    pixelValueCurveItem.attach(pixelValueCurve);
     1623
     1624    //FIXME delete these pointers with the destructor
     1625    curveZoom = new QwtPlotZoomer(pixelValueCurve->canvas());
     1626    curveZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     1627    curveZoom->setTrackerPen(QPen(Qt::gray));
     1628    boardsTimeHistoZoom = new QwtPlotZoomer(boardsTimeHisto->canvas());
     1629    boardsTimeHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     1630    boardsTimeHistoZoom->setTrackerPen(QPen(Qt::gray));
     1631    startCellHistoZoom = new QwtPlotZoomer(startCellHisto->canvas());
     1632    startCellHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     1633    startCellHistoZoom->setTrackerPen(QPen(Qt::gray));
     1634    startTimeMarkHistoZoom = new QwtPlotZoomer(startTimeMarkHisto->canvas());
     1635    startTimeMarkHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     1636    startTimeMarkHistoZoom->setTrackerPen(QPen(Qt::gray));
     1637    triggerDelayHistoZoom = new QwtPlotZoomer(triggerDelayHisto->canvas());
     1638    triggerDelayHistoZoom->setRubberBandPen(QPen(Qt::gray, 2, Qt::DotLine));
     1639    triggerDelayHistoZoom->setTrackerPen(QPen(Qt::gray));
     1640
     1641
     1642}
     1643double xval[1024];
     1644double yval[1024];
     1645void UIConnector::pixelChanged(int pixel)
     1646{
     1647    if (!viewer->nRoi)
     1648        return;
     1649
     1650    for (int i=0;i<viewer->nRoi;i++)
     1651    {
     1652        xval[i] = i;
     1653#ifdef LOAD_RAW
     1654        yval[i] = eventsData[0][pixel][i];
     1655#else
     1656        yval[i] = viewer->eventData[viewer->nRoi*pixel + i];
     1657#endif
     1658    }
     1659    pixelValueCurveItem.setRawSamples(xval, yval, viewer->nRoi);
     1660
     1661    QStack< QRectF > stack;
     1662    stack.push(pixelValueCurveItem.boundingRect());
     1663    curveZoom->setZoomStack(stack);
     1664    stack.pop();
     1665
     1666    hwID = pixel;
     1667    swID = viewer->softwareMapping[pixel];
     1668    crateID = (pixel/4)/10;
     1669    boardID = (pixel/4)%10;
     1670    patchID = pixel%4;
     1671    HwIDBox->setValue(hwID);
     1672    SwIDBox->setValue(swID);
     1673    crateIDBox->setValue(crateID);
     1674    boardIDBox->setValue(boardID);
     1675    patchIDBox->setValue(patchID);
     1676
     1677    ostringstream str;
     1678    QString qstr;
     1679    str.str("");
     1680    str << "Current Pixel val.: " << viewer->eventData[viewer->nRoi*viewer->selectedPixel + viewer->whichSlice];
     1681    qstr = qstr.fromStdString(str.str());
     1682    emit updateCurrentPixelSliceValue(qstr);
     1683
     1684//    cout << "Pixel: " << viewer->softwareMapping[pixel] << " Hardware ID: " << pixel << " Patch: " << pixel%4;
     1685//    cout << " Board: " << (pixel/4)%10 << " Crate: " << (pixel/4)/10 << endl;
     1686
     1687 //   curveZoom->setZoomBase();
     1688//    cout << "pixel changed ! " << pixel << endl;
     1689}
     1690
     1691void UIConnector::hwIDChanged(int hwid)
     1692{
     1693    hwID = hwid;
     1694    swID = viewer->softwareMapping[hwid];
     1695    crateID = (hwid/4)/10;
     1696    boardID = (hwid/4)%10;
     1697    patchID = hwid%4;
     1698    HwIDBox->setValue(hwID);
     1699    SwIDBox->setValue(swID);
     1700    crateIDBox->setValue(crateID);
     1701    boardIDBox->setValue(boardID);
     1702    patchIDBox->setValue(patchID);
     1703
     1704    viewer->selectedPixel = hwid;
     1705    pixelChanged(hwid);
     1706    viewer->updateGL();
     1707
     1708}
     1709void UIConnector::swIDChanged(int swid)
     1710{
     1711    swID = swid;
     1712    hwID = viewer->hardwareMapping[swid];
     1713    crateID = (hwID/4)/10;
     1714    boardID = (hwID/4)%10;
     1715    patchID = hwID%4;
     1716    HwIDBox->setValue(hwID);
     1717    SwIDBox->setValue(swID);
     1718    crateIDBox->setValue(crateID);
     1719    boardIDBox->setValue(boardID);
     1720    patchIDBox->setValue(patchID);
     1721
     1722    viewer->selectedPixel = hwID;
     1723    pixelChanged(hwID);
     1724    viewer->updateGL();
     1725}
     1726void UIConnector::crateIDChanged(int cid)
     1727{
     1728    crateID = cid;
     1729    hwID = 40*crateID + 4*boardID + patchID;
     1730    swID = viewer->softwareMapping[hwID];
     1731    HwIDBox->setValue(hwID);
     1732    SwIDBox->setValue(swID);
     1733    viewer->selectedPixel = hwID;
     1734    pixelChanged(hwID);
     1735    viewer->updateGL();
     1736}
     1737void UIConnector::boardIDChanged(int bid)
     1738{
     1739    boardID = bid;
     1740    hwID = 40*crateID + 4*boardID + patchID;
     1741    swID = viewer->softwareMapping[hwID];
     1742    HwIDBox->setValue(hwID);
     1743    SwIDBox->setValue(swID);
     1744    viewer->selectedPixel = hwID;
     1745    pixelChanged(hwID);
     1746   viewer->updateGL();
     1747}
     1748void UIConnector::patchIDChanged(int pid)
     1749{
     1750    patchID = pid;
     1751    hwID = 40*crateID + 4*boardID + patchID;
     1752    swID = viewer->softwareMapping[hwID];
     1753    HwIDBox->setValue(hwID);
     1754    SwIDBox->setValue(swID);
     1755    viewer->selectedPixel = hwID;
     1756    pixelChanged(hwID);
     1757    viewer->updateGL();
     1758}
     1759void UIConnector::autoScalePressed()
     1760{
     1761    if (!viewer->nRoi)
     1762        return;
     1763    int start, end;
     1764    if (rescaleWholeCamera)
     1765    {
     1766        start = 0;
     1767        end = 1440;
     1768    }
     1769    else
     1770    {
     1771        start = viewer->selectedPixel;
     1772        end = viewer->selectedPixel+1;
     1773    }
     1774
     1775    int min = 10000; //real min = -2048
     1776    int max = -10000; //real max = 2047
     1777    long average = 0;
     1778    int numSamples = 0;
     1779    for (int i=start;i<end;i++)
     1780    {
     1781        for (int j=0;j<viewer->nRoi;j++)
     1782        {
     1783            int cValue = viewer->eventData[i*viewer->nRoi+j];
     1784            if (cValue > max)
     1785                max = cValue;
     1786            if (cValue < min)
     1787               min = cValue;
     1788            average+=cValue;
     1789            numSamples++;
     1790        }
     1791    }
     1792    average /= numSamples;
     1793
     1794    double minRange = (double)(min+(VALUES_SPAN/2))/(double)VALUES_SPAN;
     1795    double maxRange = (double)(max+(VALUES_SPAN/2))/(double)VALUES_SPAN;
     1796    double midRange = (double)(average+(VALUES_SPAN/2))/(double)VALUES_SPAN;
     1797    ss[0] = minRange;
     1798    range0->setValue(ss[0]);
     1799    ss[4] = maxRange;
     1800    range4->setValue(ss[4]);
     1801    ss[2] = midRange;
     1802    range2->setValue(ss[2]);
     1803    ss[1] = (minRange+midRange)/2;
     1804    range1->setValue(ss[1]);
     1805    ss[3] = (maxRange+midRange)/2;
     1806    range3->setValue(ss[3]);
     1807
     1808
     1809}
     1810void UIConnector::entireCameraChanged(bool state)
     1811{
     1812    if (state)
     1813    {
     1814        rescaleWholeCamera = true;
     1815        currentPixelScale->setChecked(false);
     1816    }
     1817    else
     1818    {
     1819        rescaleWholeCamera = false;
     1820        currentPixelScale->setChecked(true);
     1821    }
     1822}
     1823void UIConnector::currentPixelChanged(bool state)
     1824{
     1825
     1826    if (state)
     1827    {
     1828        rescaleWholeCamera = false;
     1829        entireCameraScale->setChecked(false);
     1830    }
     1831    else
     1832    {
     1833        rescaleWholeCamera = true;
     1834        entireCameraScale->setChecked(true);
     1835    }
     1836}
     1837void PrintHelp()
     1838{
     1839    cout <<
     1840            "\n"
     1841         << endl;
     1842}
     1843void SetupConfiguration(Configuration& conf)
     1844{
     1845    po::options_description configs("Raw Events Viewer Options");
     1846    configs.add_options()
     1847        ("colorRange", vars<double>(), "Range of the display colours")
     1848        ("colorRed", vars<double>(), "Range of red values")
     1849        ("colorGreen", vars<double>(), "Range of green values")
     1850        ("colorBlue", vars<double>(), "Range of blue values")
     1851        ("file,f", var<string>(), "File to be loaded at startup")
     1852        ;
     1853    conf.AddOptions(configs);
     1854}
    13181855/************************************************************
    13191856 * MAIN PROGRAM FUNCTION.
     
    13211858int main(int argc, char *argv[])
    13221859{
    1323     if (argc > 1)
    1324     {
    1325         cout << "Sorry, this program does not accept options (yet)." << endl;
    1326         cout << "Usage: just launch it without arguments." << endl;
    1327         cout << "Once launched, you can load a fits file (compressed: .fits.gz) using the \"Load New File\" button" << endl;
    1328         cout << "Events stepping lets you crawl the events inside the loaded file, while the number between the \"-\" and \"+\" buttons determines how many events are skipped at every button click" << endl;
    1329         cout << "Play/Pause start or stops the animation of the camera (looping over the current event's slices), while the \"slices per sec\" number determines how many slices are diplayed every second" << endl;
    1330         cout << "The ranges, Red, Green and Blue series of inputs can be used to tweak the displayed colours. The range goes from 0 to 1, which would map to -32768 and 32767 respectively" << endl;
    1331         cout << "Only 3 intermediate steps can be given, and the given colours are interpolated for the pixels accordingly" << endl;
    1332         cout << "Eventually, the Draw Impulse, Draw Patches and Blur pixels checkboxes can be used to change what is displayed." << endl;
    1333         cout << "when \"Draw Impulse\" is checked, it is possible to select a pixel by double clicking on it, and the current slice can be drag and dropped." << endl;
    1334         return 0;
    1335     }
     1860    Configuration conf(argv[0]);
     1861    conf.SetPrintUsage(PrintHelp);
     1862    SetupConfiguration(conf);
     1863    if (!conf.DoParse(argc, const_cast<const char**>(argv), PrintHelp))
     1864        return -1;
     1865
     1866    if (conf.Has("colorRange"))
     1867    {
     1868        vector<double> value = conf.Vec<double>("colorRange");
     1869        if (value.size() != 5)
     1870        {
     1871            cout << "Error, colorRange option should have exactly 5 double values" << endl;
     1872            return -1;
     1873        }
     1874        for (int i=0;i<5;i++)
     1875            ss[i] = value[i];
     1876    }
     1877
     1878    if (conf.Has("colorRed"))
     1879    {
     1880        vector<double> value = conf.Vec<double>("colorRed");
     1881        if (value.size() != 5)
     1882        {
     1883            cout << "Error, colorRed option should have exactly 5 double values" << endl;
     1884            return -1;
     1885        }
     1886        for (int i=0;i<5;i++)
     1887            rr[i] = value[i];
     1888    }
     1889
     1890    if (conf.Has("colorGreen"))
     1891    {
     1892        vector<double> value = conf.Vec<double>("colorGreen");
     1893        if (value.size() != 5)
     1894        {
     1895            cout << "Error, colorGreen option should have exactly 5 double values" << endl;
     1896            return -1;
     1897        }
     1898        for (int i=0;i<5;i++)
     1899            gg[i] = value[i];
     1900    }
     1901
     1902    if (conf.Has("colorBlue"))
     1903    {
     1904        vector<double> value = conf.Vec<double>("colorBlue");
     1905        if (value.size() != 5)
     1906        {
     1907            cout << "Error, colorBlue option should have exactly 5 double values" << endl;
     1908            return -1;
     1909        }
     1910        for (int i=0;i<5;i++)
     1911            bb[i] = value[i];
     1912    }
     1913
    13361914    QApplication app(argc, argv);
    13371915
     
    13781956    connector.setViewer(canvas);
    13791957    connector.boardsTimeList = myUi.boardsTimeList;
     1958    connector.boardsTimeHisto = myUi.boardsTimeHisto;
    13801959    connector.startPixelsList = myUi.startPixelsList;
     1960    connector.startCellHisto = myUi.startCellsHisto;
     1961    connector.startTimeMarkHisto = myUi.startTimeMarkHisto;
     1962    connector.pixelValueCurve = myUi.pixelValueCurve;
     1963    connector.triggerDelayHisto = myUi.triggerDelayHisto;
     1964    connector.triggerDelayList = myUi.triggerDelayList;
     1965
    13811966    connector.startTimeMarksList = myUi.startTimeMarksList;
    1382     connector.fileLoadedLabel = myUi.fileLoadedLabel;
    1383     connector.runNumberLabel = myUi.runNumberLabel;
    1384     connector.numberOfSlicesLabel = myUi.numberOfSlicesLabel;
    1385     connector.numberOfTimeMarksLabel = myUi.numberOfTimeMarksLabel;
    1386     connector.runTypeLabel = myUi.runTypeLabel;
    1387     connector.firstTimeLabel = myUi.timeOfFirstDataLabel;
    1388     connector.lastTimeLabel = myUi.timeOfLastDataLabel;
    1389 
     1967//    connector.fileLoadedLabel = myUi.fileLoadedLabel;
     1968//    connector.runNumberLabel = myUi.runNumberLabel;
     1969//    connector.numberOfSlicesLabel = myUi.numberOfSlicesLabel;
     1970//    connector.numberOfTimeMarksLabel = myUi.numberOfTimeMarksLabel;
     1971//    connector.runTypeLabel = myUi.runTypeLabel;
     1972//    connector.firstTimeLabel = myUi.timeOfFirstDataLabel;
     1973//    connector.lastTimeLabel = myUi.timeOfLastDataLabel;
     1974    connector.currentPixelValue = myUi.currentPixelValue;
     1975
     1976    connector.currentPixelScale = myUi.currentPixelScale;
     1977    connector.entireCameraScale = myUi.entireCameraScale;
     1978
     1979    connector.extraInfoLabel = myUi.extraInfoLabel;
     1980
     1981    connector.HwIDBox = myUi.HwIDBox;
     1982    connector.SwIDBox = myUi.SwIDBox;
     1983    connector.crateIDBox = myUi.crateIDBox;
     1984    connector.boardIDBox = myUi.boardIDBox;
     1985    connector.patchIDBox = myUi.patchIDBox;
     1986
     1987    connector.range0 = myUi.colorRange0;
     1988    connector.range1 = myUi.colorRange1;
     1989    connector.range2 = myUi.colorRange2;
     1990    connector.range3 = myUi.colorRange3;
     1991    connector.range4 = myUi.colorRange4;
     1992
     1993    connector.initHistograms();
     1994
     1995    QObject::connect(myUi.slicesPlusPlusButton, SIGNAL(clicked()),
     1996                    &connector, SLOT(slicesPlusPlus()));
     1997    QObject::connect(myUi.slicesMinusMinusButton, SIGNAL(clicked()),
     1998                     &connector, SLOT(slicesMinusMinus()));
     1999    QObject::connect(myUi.autoScaleColor, SIGNAL(clicked()),
     2000                     &connector, SLOT(autoScalePressed()));
     2001    QObject::connect(myUi.currentPixelScale, SIGNAL(toggled(bool)),
     2002                     &connector, SLOT(currentPixelChanged(bool)));
     2003    QObject::connect(myUi.entireCameraScale, SIGNAL(toggled(bool)),
     2004                     &connector, SLOT(entireCameraChanged(bool)));
     2005
     2006    QObject::connect(myUi.HwIDBox, SIGNAL(valueChanged(int)),
     2007                         &connector, SLOT(hwIDChanged(int)));
     2008    QObject::connect(myUi.SwIDBox, SIGNAL(valueChanged(int)),
     2009                         &connector, SLOT(swIDChanged(int)));
     2010    QObject::connect(myUi.crateIDBox, SIGNAL(valueChanged(int)),
     2011                         &connector, SLOT(crateIDChanged(int)));
     2012    QObject::connect(myUi.boardIDBox, SIGNAL(valueChanged(int)),
     2013                         &connector, SLOT(boardIDChanged(int)));
     2014    QObject::connect(myUi.patchIDBox, SIGNAL(valueChanged(int)),
     2015                         &connector, SLOT(patchIDChanged(int)));
     2016
     2017 //   connector.pixelChanged(0);
     2018    QObject::connect(canvas, SIGNAL(signalCurrentPixel(int)),
     2019                     &connector, SLOT(pixelChanged(int)));
    13902020    QObject::connect(myUi.drawPatchCheckBox, SIGNAL(stateChanged(int)),
    13912021                     &connector, SLOT(drawPatchesCheckChange(int)));
     
    13942024    QObject::connect(myUi.drawBlurCheckBox, SIGNAL(stateChanged(int)),
    13952025                     &connector, SLOT(drawBlurCheckChange(int)));
     2026    QObject::connect(myUi.loopOverCurrentEventBox, SIGNAL(stateChanged(int)),
     2027                     &connector, SLOT(loopEventCheckChange(int)));
    13962028    QObject::connect(canvas, SIGNAL(newFileLoaded()),
    13972029                     &connector, SLOT(newFileLoaded()));
     
    14802112    QObject::connect(&connector, SIGNAL(updateCurrentTriggerType(QString)),
    14812113                     myUi.triggerTypeLabel, SLOT(setText(const QString)));
     2114    QObject::connect(&connector, SIGNAL(updateCurrentPixelSliceValue(const QString)),
     2115                     myUi.currentPixelValue, SLOT(setText(const QString)));
     2116
     2117    if (conf.Has("file"))
     2118    {
     2119        string str = conf.Get<string>("file");
     2120        QString qstr(str.c_str());
     2121        connector.fileSelected(qstr);
     2122    }
    14822123
    14832124    mainWindow.show();
  • trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h

    r11642 r11697  
    2424#include <QtGui/QColorDialog>
    2525#include <QtGui/QApplication>
     26#include <QtGui/QSpinBox>
     27#include <QtGui/QDoubleSpinBox>
     28#include <QtGui/QRadioButton>
    2629#include <iostream>
    2730#include <GL/gl.h>
     31
     32#include "qwt_plot.h"
     33#include "qwt_plot_histogram.h"
     34#include "qwt_plot_curve.h"
     35
     36#include <qwt_plot_zoomer.h>
     37
    2838
    2939//#define __MARS__
     
    7686    void setEventStep(int step);
    7787    void nextSlice();
     88    void previousSlice();
    7889
    7990Q_SIGNALS:
     
    8192    void signalCurrentSlice(int slice);
    8293    void newFileLoaded();
     94    void signalCurrentPixel(int pixel);
    8395
    8496protected:
     
    116128    bool drawImpulse;
    117129    bool drawBlur;
     130    bool loopCurrentEvent;
    118131    //allocate the maximum size for one event
    119132    int16_t *eventData;
     
    128141    int eventNum;
    129142    int nRoi;
     143    int nRoiTM;
    130144    int runNumber;
    131145    int nTM;
     
    133147    int firstDataTime;
    134148    int lastDataTime;
     149    int revision;
     150    int builderVersion;
     151    int nBoards;
     152    int nPixels;
     153    string timeSystem;
     154    string creationDate;
     155    int nightInt;
     156    string camera;
     157    string daq;
     158    float adcCount;
     159    int nbOk;
     160    int nbRej;
     161    int nbBad;
     162
    135163    int eventStep;
    136164
    137165    int hardwareMapping[1440];
     166    int softwareMapping[1440];
    138167    int patches[160][9];
    139168    GLfloat patchesColor[160][3];
     
    166195    void drawImpulseCheckChange(int state);
    167196    void drawBlurCheckChange(int state);
     197    void loopEventCheckChange(int state);
    168198    void newFileLoaded();
    169199    void playPauseClicked();
     
    192222    void blueChanged3(double value);
    193223    void blueChanged4(double value);
     224    void pixelChanged(int pixel);
     225    void hwIDChanged(int hwid);
     226    void swIDChanged(int swid);
     227    void crateIDChanged(int cid);
     228    void boardIDChanged(int bid);
     229    void patchIDChanged(int pid);
     230    void autoScalePressed();
     231    void entireCameraChanged(bool state);
     232    void currentPixelChanged(bool state);
     233    void slicesPlusPlus();
     234    void slicesMinusMinus();
    194235
    195236Q_SIGNALS:
     
    199240    void updateCurrentSoftTrigger(QString);
    200241    void updateCurrentTriggerType(QString);
     242    void updateCurrentPixelSliceValue(QString);
    201243
    202244
     
    205247    QTimer timer;
    206248    string currentFile;
     249    int crateID;
     250    int boardID;
     251    int patchID;
     252    int hwID;
     253    int swID;
     254    bool rescaleWholeCamera;
    207255public:
    208256    QListWidget *boardsTimeList;
    209257    QListWidget* startPixelsList;
    210258    QListWidget* startTimeMarksList;
    211     QLabel*      fileLoadedLabel;
    212     QLabel*      runNumberLabel;
    213     QLabel*      numberOfSlicesLabel;
    214     QLabel*      numberOfTimeMarksLabel;
    215     QLabel*      runTypeLabel;
    216     QLabel*      firstTimeLabel;
    217     QLabel*      lastTimeLabel;
     259//   QLabel*      fileLoadedLabel;
     260//    QLabel*      runNumberLabel;
     261//    QLabel*      numberOfSlicesLabel;
     262//    QLabel*      numberOfTimeMarksLabel;
     263//    QLabel*      runTypeLabel;
     264//    QLabel*      firstTimeLabel;
     265//    QLabel*      lastTimeLabel;
     266    QLabel*      currentPixelValue;
     267    QLabel*      extraInfoLabel;
     268
     269    QwtPlot*     boardsTimeHisto;
     270    QwtPlot*     startCellHisto;
     271    QwtPlot*     startTimeMarkHisto;
     272    QwtPlot*     pixelValueCurve;
     273    QwtPlotHistogram boardsTimeHistoItem;
     274    QwtPlotHistogram startCellHistoItem;
     275    QwtPlotHistogram startTimeMarkHistoItem;
     276    QwtPlotCurve     pixelValueCurveItem;
     277    QwtPlotZoomer* curveZoom;
     278    QwtPlotZoomer* boardsTimeHistoZoom;
     279    QwtPlotZoomer* startCellHistoZoom;
     280    QwtPlotZoomer* startTimeMarkHistoZoom;
     281
     282    QwtPlot*        triggerDelayHisto;
     283    QwtPlotHistogram triggerDelayHistoItem;
     284    QwtPlotZoomer* triggerDelayHistoZoom;
     285    QListWidget* triggerDelayList;
     286
     287    QSpinBox*   HwIDBox;
     288    QSpinBox*   SwIDBox;
     289    QSpinBox*   crateIDBox;
     290    QSpinBox*   boardIDBox;
     291    QSpinBox*   patchIDBox;
     292
     293    QRadioButton* currentPixelScale;
     294    QRadioButton* entireCameraScale;
     295
     296    QDoubleSpinBox* range0;
     297    QDoubleSpinBox* range1;
     298    QDoubleSpinBox* range2;
     299    QDoubleSpinBox* range3;
     300    QDoubleSpinBox* range4;
     301
     302    void initHistograms();
    218303
    219304};
  • trunk/FACT++/gui/RawEventsViewer/viewer.ui

    r11614 r11697  
    77    <x>0</x>
    88    <y>0</y>
    9     <width>1125</width>
    10     <height>928</height>
     9    <width>1133</width>
     10    <height>1017</height>
    1111   </rect>
    1212  </property>
     
    1616  <widget class="QWidget" name="centralwidget">
    1717   <layout class="QGridLayout" name="gridLayout_2">
    18     <item row="0" column="0">
     18    <item row="0" column="1">
    1919     <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="10,0">
    2020      <item>
     
    2424        </property>
    2525        <item>
    26          <widget class="RawDataViewer" name="GLWindow" native="true"/>
     26         <widget class="QTabWidget" name="tabWidget_2">
     27          <property name="sizePolicy">
     28           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     29            <horstretch>0</horstretch>
     30            <verstretch>0</verstretch>
     31           </sizepolicy>
     32          </property>
     33          <property name="currentIndex">
     34           <number>0</number>
     35          </property>
     36          <widget class="QWidget" name="tab_5">
     37           <property name="layoutDirection">
     38            <enum>Qt::LeftToRight</enum>
     39           </property>
     40           <attribute name="title">
     41            <string>Camera View</string>
     42           </attribute>
     43           <layout class="QGridLayout" name="gridLayout_3">
     44            <item row="0" column="0">
     45             <widget class="RawDataViewer" name="GLWindow" native="true">
     46              <property name="enabled">
     47               <bool>true</bool>
     48              </property>
     49              <property name="sizePolicy">
     50               <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
     51                <horstretch>0</horstretch>
     52                <verstretch>0</verstretch>
     53               </sizepolicy>
     54              </property>
     55              <property name="maximumSize">
     56               <size>
     57                <width>10000</width>
     58                <height>10000</height>
     59               </size>
     60              </property>
     61             </widget>
     62            </item>
     63           </layout>
     64          </widget>
     65          <widget class="QWidget" name="tab_6">
     66           <property name="sizePolicy">
     67            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     68             <horstretch>0</horstretch>
     69             <verstretch>0</verstretch>
     70            </sizepolicy>
     71           </property>
     72           <attribute name="title">
     73            <string>Data View</string>
     74           </attribute>
     75           <layout class="QVBoxLayout" name="verticalLayout_2">
     76            <item>
     77             <widget class="QTabWidget" name="tabWidget_3">
     78              <property name="sizePolicy">
     79               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     80                <horstretch>1</horstretch>
     81                <verstretch>1</verstretch>
     82               </sizepolicy>
     83              </property>
     84              <property name="tabShape">
     85               <enum>QTabWidget::Rounded</enum>
     86              </property>
     87              <property name="currentIndex">
     88               <number>1</number>
     89              </property>
     90              <property name="elideMode">
     91               <enum>Qt::ElideNone</enum>
     92              </property>
     93              <widget class="QWidget" name="tab_3">
     94               <property name="sizePolicy">
     95                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     96                 <horstretch>0</horstretch>
     97                 <verstretch>0</verstretch>
     98                </sizepolicy>
     99               </property>
     100               <attribute name="title">
     101                <string>Arrays data</string>
     102               </attribute>
     103               <layout class="QVBoxLayout" name="verticalLayout_6">
     104                <item>
     105                 <widget class="QLabel" name="label_3">
     106                  <property name="text">
     107                   <string>Boards time values</string>
     108                  </property>
     109                 </widget>
     110                </item>
     111                <item>
     112                 <widget class="QListWidget" name="boardsTimeList">
     113                  <property name="font">
     114                   <font>
     115                    <family>FreeMono</family>
     116                   </font>
     117                  </property>
     118                 </widget>
     119                </item>
     120                <item>
     121                 <widget class="QLabel" name="label_13">
     122                  <property name="text">
     123                   <string>Start Cells</string>
     124                  </property>
     125                 </widget>
     126                </item>
     127                <item>
     128                 <widget class="QListWidget" name="startPixelsList">
     129                  <property name="font">
     130                   <font>
     131                    <family>FreeMono</family>
     132                   </font>
     133                  </property>
     134                 </widget>
     135                </item>
     136                <item>
     137                 <widget class="QLabel" name="StartTimeMarksList">
     138                  <property name="text">
     139                   <string>Start Time Marks</string>
     140                  </property>
     141                 </widget>
     142                </item>
     143                <item>
     144                 <widget class="QListWidget" name="startTimeMarksList">
     145                  <property name="sizePolicy">
     146                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     147                    <horstretch>0</horstretch>
     148                    <verstretch>0</verstretch>
     149                   </sizepolicy>
     150                  </property>
     151                  <property name="font">
     152                   <font>
     153                    <family>FreeMono</family>
     154                   </font>
     155                  </property>
     156                 </widget>
     157                </item>
     158                <item>
     159                 <widget class="QLabel" name="label_4">
     160                  <property name="text">
     161                   <string>Trigger Delays</string>
     162                  </property>
     163                 </widget>
     164                </item>
     165                <item>
     166                 <widget class="QListWidget" name="triggerDelayList"/>
     167                </item>
     168               </layout>
     169              </widget>
     170              <widget class="QWidget" name="tab_4">
     171               <attribute name="title">
     172                <string>Histograms</string>
     173               </attribute>
     174               <layout class="QVBoxLayout" name="verticalLayout_3">
     175                <item>
     176                 <widget class="QwtPlot" name="boardsTimeHisto"/>
     177                </item>
     178                <item>
     179                 <widget class="QwtPlot" name="startCellsHisto"/>
     180                </item>
     181                <item>
     182                 <widget class="QwtPlot" name="startTimeMarkHisto"/>
     183                </item>
     184                <item>
     185                 <widget class="QwtPlot" name="triggerDelayHisto"/>
     186                </item>
     187               </layout>
     188              </widget>
     189              <widget class="QWidget" name="tab">
     190               <attribute name="title">
     191                <string>Pixel Curves</string>
     192               </attribute>
     193               <layout class="QGridLayout" name="gridLayout_4">
     194                <item row="0" column="0">
     195                 <widget class="QwtPlot" name="pixelValueCurve"/>
     196                </item>
     197               </layout>
     198              </widget>
     199             </widget>
     200            </item>
     201           </layout>
     202          </widget>
     203         </widget>
    27204        </item>
    28205       </layout>
    29206      </item>
    30207      <item>
    31        <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0,0,0,0,0,0,0,0">
     208       <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0">
    32209        <property name="sizeConstraint">
    33210         <enum>QLayout::SetDefaultConstraint</enum>
     
    36213         <widget class="QLabel" name="label">
    37214          <property name="text">
    38            <string>FACT - Raw events viewer - v0.1</string>
    39           </property>
    40          </widget>
    41         </item>
    42         <item>
    43          <widget class="QLabel" name="fileLoadedLabel">
     215           <string>FACT - Raw events viewer - v0.2</string>
     216          </property>
     217         </widget>
     218        </item>
     219        <item>
     220         <widget class="QLabel" name="extraInfoLabel">
    44221          <property name="text">
    45            <string>File loaded: none</string>
    46           </property>
    47           <property name="wordWrap">
    48            <bool>true</bool>
    49           </property>
    50          </widget>
    51         </item>
    52         <item>
    53          <widget class="QLabel" name="runNumberLabel">
    54           <property name="text">
    55            <string>Run number:</string>
    56           </property>
    57          </widget>
    58         </item>
    59         <item>
    60          <widget class="QLabel" name="numberOfSlicesLabel">
    61           <property name="text">
    62            <string>Number of Events/Slices:</string>
    63           </property>
    64          </widget>
    65         </item>
    66         <item>
    67          <widget class="QLabel" name="numberOfTimeMarksLabel">
    68           <property name="text">
    69            <string>Number of Time Marks:</string>
    70           </property>
    71          </widget>
    72         </item>
    73         <item>
    74          <widget class="QLabel" name="runTypeLabel">
    75           <property name="text">
    76            <string>Run Type:</string>
    77           </property>
    78          </widget>
    79         </item>
    80         <item>
    81          <widget class="QLabel" name="timeOfFirstDataLabel">
    82           <property name="text">
    83            <string>Time of 1st data:</string>
    84           </property>
    85          </widget>
    86         </item>
    87         <item>
    88          <widget class="QLabel" name="timeOfLastDataLabel">
    89           <property name="text">
    90            <string>Time of last data:</string>
     222           <string>File loaded: none
     223Run number:
     224Number of Events:
     225Number ofSlices:
     226Number of Time Marks:
     227Run Type:
     228Time of 1st data:
     229Time of last data:
     230SVN revision:
     231Number of boards:
     232Number of pixels:
     233Number of Slices TM:
     234Time system:
     235Date:
     236Night:
     237Camera:
     238DAQ:
     239ADC Count:
     240NB Evts OK:
     241NB Evts Rejected:
     242NB Evts Bad:
     243</string>
    91244          </property>
    92245         </widget>
     
    95248         <layout class="QVBoxLayout" name="verticalLayout_5">
    96249          <item>
    97            <widget class="QLabel" name="label_8">
     250           <widget class="QLabel" name="label_5">
    98251            <property name="font">
    99252             <font>
     
    104257            </property>
    105258            <property name="text">
    106              <string>Arrays data</string>
     259             <string>Selected Pixel</string>
    107260            </property>
    108261            <property name="alignment">
     
    112265          </item>
    113266          <item>
    114            <widget class="QLabel" name="label_9">
    115             <property name="text">
    116              <string>Boards times</string>
    117             </property>
    118            </widget>
    119           </item>
    120           <item>
    121            <widget class="QListWidget" name="boardsTimeList">
    122             <property name="font">
    123              <font>
    124               <family>FreeMono</family>
    125              </font>
    126             </property>
    127            </widget>
    128           </item>
    129           <item>
    130            <widget class="QLabel" name="label_13">
    131             <property name="text">
    132              <string>Start Pixels</string>
    133             </property>
    134            </widget>
    135           </item>
    136           <item>
    137            <widget class="QListWidget" name="startPixelsList">
    138             <property name="font">
    139              <font>
    140               <family>FreeMono</family>
    141              </font>
    142             </property>
    143            </widget>
    144           </item>
    145           <item>
    146            <widget class="QLabel" name="StartTimeMarksList">
    147             <property name="text">
    148              <string>Start Time Marks</string>
    149             </property>
    150            </widget>
    151           </item>
    152           <item>
    153            <widget class="QListWidget" name="startTimeMarksList">
    154             <property name="font">
    155              <font>
    156               <family>FreeMono</family>
    157              </font>
    158             </property>
    159            </widget>
     267           <layout class="QHBoxLayout" name="horizontalLayout_6">
     268            <item>
     269             <widget class="QLabel" name="label_10">
     270              <property name="text">
     271               <string>Hardware ID</string>
     272              </property>
     273              <property name="alignment">
     274               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     275              </property>
     276             </widget>
     277            </item>
     278            <item>
     279             <widget class="QSpinBox" name="HwIDBox">
     280              <property name="maximum">
     281               <number>10000</number>
     282              </property>
     283              <property name="value">
     284               <number>393</number>
     285              </property>
     286             </widget>
     287            </item>
     288           </layout>
     289          </item>
     290          <item>
     291           <layout class="QHBoxLayout" name="horizontalLayout_7">
     292            <item>
     293             <widget class="QLabel" name="label_11">
     294              <property name="text">
     295               <string>Software ID</string>
     296              </property>
     297              <property name="alignment">
     298               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     299              </property>
     300             </widget>
     301            </item>
     302            <item>
     303             <widget class="QSpinBox" name="SwIDBox">
     304              <property name="maximum">
     305               <number>1440</number>
     306              </property>
     307             </widget>
     308            </item>
     309           </layout>
     310          </item>
     311          <item>
     312           <layout class="QGridLayout" name="gridLayout_5">
     313            <item row="2" column="0">
     314             <widget class="QLabel" name="label_6">
     315              <property name="text">
     316               <string>Crate</string>
     317              </property>
     318             </widget>
     319            </item>
     320            <item row="2" column="1">
     321             <widget class="QLabel" name="label_8">
     322              <property name="text">
     323               <string>Board</string>
     324              </property>
     325             </widget>
     326            </item>
     327            <item row="2" column="2">
     328             <widget class="QLabel" name="label_9">
     329              <property name="text">
     330               <string>Patch</string>
     331              </property>
     332             </widget>
     333            </item>
     334            <item row="3" column="0">
     335             <widget class="QSpinBox" name="crateIDBox">
     336              <property name="maximum">
     337               <number>39</number>
     338              </property>
     339              <property name="value">
     340               <number>9</number>
     341              </property>
     342             </widget>
     343            </item>
     344            <item row="3" column="1">
     345             <widget class="QSpinBox" name="boardIDBox">
     346              <property name="maximum">
     347               <number>9</number>
     348              </property>
     349              <property name="value">
     350               <number>8</number>
     351              </property>
     352             </widget>
     353            </item>
     354            <item row="3" column="2">
     355             <widget class="QSpinBox" name="patchIDBox">
     356              <property name="maximum">
     357               <number>3</number>
     358              </property>
     359              <property name="value">
     360               <number>1</number>
     361              </property>
     362             </widget>
     363            </item>
     364           </layout>
    160365          </item>
    161366         </layout>
     
    198403          </item>
    199404          <item>
     405           <widget class="QLabel" name="currentPixelValue">
     406            <property name="text">
     407             <string>Current Pixel val.:</string>
     408            </property>
     409           </widget>
     410          </item>
     411          <item>
    200412           <widget class="QLabel" name="triggerTypeLabel">
    201413            <property name="text">
     
    220432         </layout>
    221433        </item>
    222         <item>
    223          <layout class="QVBoxLayout" name="verticalLayout_3"/>
    224         </item>
    225434       </layout>
    226435      </item>
    227436     </layout>
    228437    </item>
    229     <item row="1" column="0">
     438    <item row="1" column="1">
    230439     <layout class="QGridLayout" name="gridLayout">
    231       <item row="0" column="6">
     440      <item row="0" column="7">
    232441       <widget class="QDoubleSpinBox" name="colorRange4">
    233442        <property name="enabled">
    234          <bool>false</bool>
    235         </property>
    236         <property name="decimals">
    237          <number>3</number>
    238         </property>
    239        </widget>
    240       </item>
    241       <item row="2" column="6">
     443         <bool>true</bool>
     444        </property>
     445        <property name="decimals">
     446         <number>3</number>
     447        </property>
     448       </widget>
     449      </item>
     450      <item row="2" column="7">
    242451       <widget class="QDoubleSpinBox" name="greenValue4">
    243452        <property name="decimals">
     
    246455       </widget>
    247456      </item>
     457      <item row="1" column="7">
     458       <widget class="QDoubleSpinBox" name="redValue4">
     459        <property name="decimals">
     460         <number>3</number>
     461        </property>
     462       </widget>
     463      </item>
     464      <item row="3" column="7">
     465       <widget class="QDoubleSpinBox" name="blueValue4">
     466        <property name="decimals">
     467         <number>3</number>
     468        </property>
     469       </widget>
     470      </item>
    248471      <item row="1" column="6">
    249        <widget class="QDoubleSpinBox" name="redValue4">
    250         <property name="decimals">
    251          <number>3</number>
    252         </property>
    253        </widget>
    254       </item>
    255       <item row="2" column="7">
    256        <widget class="QPushButton" name="playPauseButton">
    257         <property name="text">
    258          <string>Play/Pause</string>
    259         </property>
    260        </widget>
    261       </item>
    262       <item row="3" column="6">
    263        <widget class="QDoubleSpinBox" name="blueValue4">
    264         <property name="decimals">
    265          <number>3</number>
     472       <widget class="QDoubleSpinBox" name="redValue3">
     473        <property name="decimals">
     474         <number>3</number>
     475        </property>
     476       </widget>
     477      </item>
     478      <item row="0" column="8">
     479       <widget class="QPushButton" name="loadNewFileButton">
     480        <property name="toolTip">
     481         <string>Load a new fits file</string>
     482        </property>
     483        <property name="text">
     484         <string>Load New File</string>
    266485        </property>
    267486       </widget>
    268487      </item>
    269488      <item row="1" column="5">
    270        <widget class="QDoubleSpinBox" name="redValue3">
    271         <property name="decimals">
    272          <number>3</number>
    273         </property>
    274        </widget>
    275       </item>
    276       <item row="0" column="7">
    277        <widget class="QPushButton" name="loadNewFileButton">
    278         <property name="text">
    279          <string>Load New File</string>
     489       <widget class="QDoubleSpinBox" name="redValue2">
     490        <property name="decimals">
     491         <number>3</number>
    280492        </property>
    281493       </widget>
    282494      </item>
    283495      <item row="1" column="4">
    284        <widget class="QDoubleSpinBox" name="redValue2">
     496       <widget class="QDoubleSpinBox" name="redValue1">
    285497        <property name="decimals">
    286498         <number>3</number>
     
    289501      </item>
    290502      <item row="1" column="3">
    291        <widget class="QDoubleSpinBox" name="redValue1">
     503       <widget class="QDoubleSpinBox" name="redValue0">
    292504        <property name="decimals">
    293505         <number>3</number>
     
    296508      </item>
    297509      <item row="1" column="2">
    298        <widget class="QDoubleSpinBox" name="redValue0">
    299         <property name="decimals">
    300          <number>3</number>
    301         </property>
    302        </widget>
    303       </item>
    304       <item row="1" column="1">
    305510       <widget class="QLabel" name="label_20">
    306511        <property name="text">
     
    312517       </widget>
    313518      </item>
    314       <item row="0" column="1">
     519      <item row="0" column="2">
    315520       <widget class="QLabel" name="label_21">
    316521        <property name="text">
     
    322527       </widget>
    323528      </item>
    324       <item row="2" column="1">
     529      <item row="2" column="2">
    325530       <widget class="QLabel" name="label_22">
    326531        <property name="text">
     
    332537       </widget>
    333538      </item>
    334       <item row="3" column="1">
     539      <item row="3" column="2">
    335540       <widget class="QLabel" name="label_23">
    336541        <property name="text">
     
    342547       </widget>
    343548      </item>
    344       <item row="0" column="2">
     549      <item row="0" column="3">
    345550       <widget class="QDoubleSpinBox" name="colorRange0">
    346551        <property name="enabled">
    347          <bool>false</bool>
    348         </property>
    349         <property name="decimals">
    350          <number>3</number>
    351         </property>
    352        </widget>
    353       </item>
    354       <item row="2" column="2">
     552         <bool>true</bool>
     553        </property>
     554        <property name="decimals">
     555         <number>3</number>
     556        </property>
     557       </widget>
     558      </item>
     559      <item row="2" column="3">
    355560       <widget class="QDoubleSpinBox" name="greenValue0">
    356561        <property name="decimals">
     
    359564       </widget>
    360565      </item>
    361       <item row="3" column="2">
     566      <item row="3" column="3">
    362567       <widget class="QDoubleSpinBox" name="blueValue0">
    363568        <property name="decimals">
     
    366571       </widget>
    367572      </item>
    368       <item row="0" column="3">
     573      <item row="0" column="4">
    369574       <widget class="QDoubleSpinBox" name="colorRange1">
    370575        <property name="decimals">
     
    373578       </widget>
    374579      </item>
    375       <item row="2" column="3">
     580      <item row="2" column="4">
    376581       <widget class="QDoubleSpinBox" name="greenValue1">
    377582        <property name="decimals">
     
    380585       </widget>
    381586      </item>
    382       <item row="3" column="3">
     587      <item row="3" column="4">
    383588       <widget class="QDoubleSpinBox" name="blueValue1">
    384589        <property name="decimals">
     
    387592       </widget>
    388593      </item>
    389       <item row="0" column="4">
     594      <item row="0" column="5">
    390595       <widget class="QDoubleSpinBox" name="colorRange2">
    391596        <property name="decimals">
     
    394599       </widget>
    395600      </item>
    396       <item row="2" column="4">
     601      <item row="2" column="5">
    397602       <widget class="QDoubleSpinBox" name="greenValue2">
    398603        <property name="decimals">
     
    401606       </widget>
    402607      </item>
    403       <item row="3" column="4">
     608      <item row="3" column="5">
    404609       <widget class="QDoubleSpinBox" name="blueValue2">
    405610        <property name="decimals">
     
    408613       </widget>
    409614      </item>
    410       <item row="0" column="5">
     615      <item row="0" column="6">
    411616       <widget class="QDoubleSpinBox" name="colorRange3">
    412617        <property name="decimals">
     
    415620       </widget>
    416621      </item>
    417       <item row="2" column="5">
     622      <item row="2" column="6">
    418623       <widget class="QDoubleSpinBox" name="greenValue3">
    419624        <property name="decimals">
     
    422627       </widget>
    423628      </item>
    424       <item row="3" column="5">
     629      <item row="3" column="6">
    425630       <widget class="QDoubleSpinBox" name="blueValue3">
    426631        <property name="decimals">
     
    429634       </widget>
    430635      </item>
    431       <item row="3" column="7">
     636      <item row="3" column="8">
    432637       <layout class="QHBoxLayout" name="horizontalLayout">
    433638        <item>
     
    443648        <item>
    444649         <widget class="QDoubleSpinBox" name="slicesPerSecValue">
     650          <property name="toolTip">
     651           <string>Number of slices to display per seconds</string>
     652          </property>
     653          <property name="minimum">
     654           <double>1.000000000000000</double>
     655          </property>
    445656          <property name="maximum">
    446657           <double>1000.000000000000000</double>
     
    450661          </property>
    451662          <property name="value">
    452            <double>1.000000000000000</double>
     663           <double>100.000000000000000</double>
    453664          </property>
    454665         </widget>
     
    456667       </layout>
    457668      </item>
    458       <item row="1" column="7">
     669      <item row="1" column="8">
    459670       <layout class="QHBoxLayout" name="horizontalLayout_4">
    460671        <item>
     
    467678        <item>
    468679         <widget class="QPushButton" name="eventsMinusButton">
     680          <property name="toolTip">
     681           <string>Step backwards in events</string>
     682          </property>
    469683          <property name="text">
    470684           <string>-</string>
     
    474688        <item>
    475689         <widget class="QSpinBox" name="eventsStepBox">
     690          <property name="toolTip">
     691           <string>Number of events to skip at each step</string>
     692          </property>
    476693          <property name="minimum">
    477694           <number>1</number>
     
    490707           </sizepolicy>
    491708          </property>
     709          <property name="toolTip">
     710           <string>Step forward in events</string>
     711          </property>
    492712          <property name="text">
    493713           <string>+</string>
     
    499719      <item row="0" column="0">
    500720       <widget class="QCheckBox" name="drawImpulseCheckBox">
     721        <property name="toolTip">
     722         <string>Whether the impulse of the current pixel should be drawn below the camera or not</string>
     723        </property>
    501724        <property name="layoutDirection">
    502725         <enum>Qt::RightToLeft</enum>
     
    509732      <item row="3" column="0">
    510733       <widget class="QCheckBox" name="drawBlurCheckBox">
     734        <property name="toolTip">
     735         <string>Draw the pixels blurred (for having &quot;nice&quot;, non-scientific images).</string>
     736        </property>
    511737        <property name="layoutDirection">
    512738         <enum>Qt::RightToLeft</enum>
     
    519745      <item row="1" column="0">
    520746       <widget class="QCheckBox" name="drawPatchCheckBox">
     747        <property name="toolTip">
     748         <string>Whether the pixels clustering should be drawn or not</string>
     749        </property>
    521750        <property name="layoutDirection">
    522751         <enum>Qt::RightToLeft</enum>
     
    525754         <string>Draw Patches</string>
    526755        </property>
     756        <property name="checked">
     757         <bool>true</bool>
     758        </property>
    527759        <property name="tristate">
    528760         <bool>false</bool>
    529761        </property>
    530762       </widget>
     763      </item>
     764      <item row="2" column="0">
     765       <widget class="QCheckBox" name="loopOverCurrentEventBox">
     766        <property name="toolTip">
     767         <string>Whether the animation should loop over the current event, or continue to the next event</string>
     768        </property>
     769        <property name="layoutDirection">
     770         <enum>Qt::RightToLeft</enum>
     771        </property>
     772        <property name="text">
     773         <string>Loop event</string>
     774        </property>
     775       </widget>
     776      </item>
     777      <item row="1" column="1">
     778       <widget class="QPushButton" name="autoScaleColor">
     779        <property name="toolTip">
     780         <string>Rescale the coloring to match the values of the current event</string>
     781        </property>
     782        <property name="text">
     783         <string>AutoScale !</string>
     784        </property>
     785       </widget>
     786      </item>
     787      <item row="2" column="1">
     788       <widget class="QRadioButton" name="entireCameraScale">
     789        <property name="toolTip">
     790         <string>Use the entire camera to do the scaling</string>
     791        </property>
     792        <property name="layoutDirection">
     793         <enum>Qt::RightToLeft</enum>
     794        </property>
     795        <property name="text">
     796         <string>entire camera</string>
     797        </property>
     798        <property name="checked">
     799         <bool>true</bool>
     800        </property>
     801       </widget>
     802      </item>
     803      <item row="3" column="1">
     804       <widget class="QRadioButton" name="currentPixelScale">
     805        <property name="toolTip">
     806         <string>Use the current pixel only to do the scaling</string>
     807        </property>
     808        <property name="layoutDirection">
     809         <enum>Qt::RightToLeft</enum>
     810        </property>
     811        <property name="text">
     812         <string>current pixel</string>
     813        </property>
     814       </widget>
     815      </item>
     816      <item row="2" column="8">
     817       <layout class="QHBoxLayout" name="horizontalLayout_5">
     818        <item>
     819         <widget class="QPushButton" name="slicesMinusMinusButton">
     820          <property name="toolTip">
     821           <string>Step backward one slice</string>
     822          </property>
     823          <property name="text">
     824           <string>Slice--</string>
     825          </property>
     826         </widget>
     827        </item>
     828        <item>
     829         <widget class="QPushButton" name="playPauseButton">
     830          <property name="toolTip">
     831           <string>Play/Pause events animation</string>
     832          </property>
     833          <property name="text">
     834           <string>Play/Pause</string>
     835          </property>
     836         </widget>
     837        </item>
     838        <item>
     839         <widget class="QPushButton" name="slicesPlusPlusButton">
     840          <property name="toolTip">
     841           <string>Step forward one slice</string>
     842          </property>
     843          <property name="text">
     844           <string>Slice++</string>
     845          </property>
     846         </widget>
     847        </item>
     848       </layout>
    531849      </item>
    532850     </layout>
     
    536854 </widget>
    537855 <customwidgets>
     856  <customwidget>
     857   <class>QwtPlot</class>
     858   <extends>QFrame</extends>
     859   <header>qwt_plot.h</header>
     860   <container>1</container>
     861  </customwidget>
    538862  <customwidget>
    539863   <class>QGLWidget</class>
Note: See TracChangeset for help on using the changeset viewer.