Changeset 11697
- Timestamp:
- 07/29/11 13:51:45 (13 years ago)
- Location:
- trunk/FACT++/gui/RawEventsViewer
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.cc
r11650 r11697 19 19 20 20 #include <QtGui/QFileDialog> 21 22 #include <qwt_plot_grid.h> 23 #include <qwt_symbol.h> 24 25 #include "../../src/Configuration.h" 21 26 22 27 //Coordinates of an hexagon of radius 1 and center 0 … … 541 546 renderText(bboxMax[0]+xShift/2.0f, bboxMin[1]-4*yShift, 0, QString("Slices")); 542 547 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())); 545 554 546 555 } … … 563 572 rowNum = -1; 564 573 eventStep = 1; 565 selectedPixel = 0;574 selectedPixel = 393; 566 575 inputFile = NULL; 567 576 eventData = NULL; 568 drawPatch = false;577 drawPatch = true; 569 578 drawImpulse = false; 570 579 drawBlur = false; 580 loopCurrentEvent = false; 571 581 #ifdef LOAD_RAW 572 582 loadEvents("/scratch/00000043.001_T.bin"); … … 600 610 601 611 hardwareMapping[softid] = hardid; 612 softwareMapping[hardid] = softid; 602 613 603 614 l++; … … 642 653 { 643 654 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 // }653 655 for (int j=0;j<3;j++) 654 656 patchesColor[i][j] = color[j]; … … 657 659 for (int i=0;i<1440;i++) 658 660 updateNeighbors(i); 659 660 661 662 661 } 663 662 /************************************************************ … … 712 711 } 713 712 glMatrixMode(GL_MODELVIEW); 714 715 713 } 716 714 … … 746 744 drawPatches(); 747 745 748 if (drawImpulse)749 746 if (!drawBlur) 747 { 750 748 glLineWidth(1.0f); 751 749 glColor3f(1.0,1.0,1.0); 752 750 drawHexagon(selectedPixel, false); 753 751 } 754 752 } 755 753 … … 805 803 if (face != -1) { 806 804 selectedPixel = face; 805 emit signalCurrentPixel(face); 807 806 updateGL(); 808 807 } … … 871 870 if (!*inputFile) 872 871 { 873 cout << "Couldn't open file." << endl;874 872 delete inputFile; 875 873 inputFile = NULL; 876 874 return; 877 875 } 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 } 878 905 nRows = inputFile->GetInt("NAXIS2"); 879 906 nRoi = inputFile->GetInt("NROI"); 880 runNumber = -1;881 nTM = inputFile->GetInt("NTM ");907 runNumber = inputFile->GetInt("RUNID"); 908 nTM = inputFile->GetInt("NTMARK"); 882 909 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"); 885 926 886 927 eventNum = 0; … … 892 933 if (eventData != NULL) 893 934 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;} 903 960 int backupStep = eventStep; 904 961 rowNum = -1; … … 907 964 eventStep = backupStep; 908 965 emit newFileLoaded(); 966 emit signalCurrentPixel(selectedPixel); 909 967 } 910 968 … … 950 1008 inputFile->GetRow(rowNum); 951 1009 #endif 1010 952 1011 updateGL(); 953 1012 emit signalCurrentEvent(eventNum); 1013 emit signalCurrentPixel(selectedPixel); 1014 954 1015 } 955 1016 /************************************************************ … … 960 1021 whichSlice++; 961 1022 if (whichSlice >= nRoi) 1023 { 1024 if (!loopCurrentEvent) 1025 { 1026 int backupStep = eventStep; 1027 eventStep = 1; 1028 eventStepping(true); 1029 eventStep = backupStep; 1030 } 962 1031 whichSlice=0; 963 1032 } 964 1033 emit signalCurrentSlice(whichSlice); 965 1034 updateGL(); 966 1035 } 1036 void 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 } 967 1053 /************************************************************ 968 1054 * UICONNECTOR CONSTRUCTOR … … 970 1056 UIConnector::UIConnector(QWidget*) 971 1057 { 972 timer.setInterval(10 00.0);1058 timer.setInterval(10.0); 973 1059 QObject::connect(&timer, SIGNAL(timeout()), 974 1060 this, SLOT(nextSlicePlease())); 1061 hwID = 393; 1062 swID = 0; 1063 crateID = 9; 1064 boardID = 8; 1065 patchID = 1; 1066 rescaleWholeCamera = true; 1067 } 1068 void UIConnector::slicesPlusPlus() 1069 { 1070 viewer->nextSlice(); 1071 } 1072 void UIConnector::slicesMinusMinus() 1073 { 1074 viewer->previousSlice(); 975 1075 } 976 1076 /************************************************************ … … 1006 1106 viewer->drawBlur = false; 1007 1107 viewer->updateGL(); 1108 } 1109 void UIConnector::loopEventCheckChange(int state) 1110 { 1111 if (state) 1112 viewer->loopCurrentEvent = true; 1113 else 1114 viewer->loopCurrentEvent = false; 1008 1115 } 1009 1116 /************************************************************ … … 1214 1321 { 1215 1322 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 1236 1362 } 1237 1363 /************************************************************ … … 1254 1380 QString qstr(str.str().c_str()); 1255 1381 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 1256 1388 } 1257 1389 /************************************************************ … … 1280 1412 emit updateCurrentTriggerType(qstr); 1281 1413 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 1282 1419 boardsTimeList->clear(); 1283 1420 startPixelsList->clear(); 1284 1421 startTimeMarksList->clear(); 1422 triggerDelayList->clear(); 1423 std::map<int, int> boardsHistoMap; 1285 1424 for (int i=0;i <NBOARDS; i++) 1286 1425 { … … 1292 1431 str << ": " << viewer->boardTime[i]; 1293 1432 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; 1295 1439 for (int i=0;i <NPIX; i++) 1296 1440 { … … 1302 1446 str << ": " << viewer->startPix[i]; 1303 1447 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; 1305 1454 for (int i=0;i <NTMARK; i++) 1306 1455 { … … 1312 1461 str << ": " << viewer->startTM[i]; 1313 1462 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 1550 void 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 } 1643 double xval[1024]; 1644 double yval[1024]; 1645 void 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 1691 void 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 } 1709 void 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 } 1726 void 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 } 1737 void 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 } 1748 void 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 } 1759 void 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 } 1810 void 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 } 1823 void 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 } 1837 void PrintHelp() 1838 { 1839 cout << 1840 "\n" 1841 << endl; 1842 } 1843 void 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 } 1318 1855 /************************************************************ 1319 1856 * MAIN PROGRAM FUNCTION. … … 1321 1858 int main(int argc, char *argv[]) 1322 1859 { 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 1336 1914 QApplication app(argc, argv); 1337 1915 … … 1378 1956 connector.setViewer(canvas); 1379 1957 connector.boardsTimeList = myUi.boardsTimeList; 1958 connector.boardsTimeHisto = myUi.boardsTimeHisto; 1380 1959 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 1381 1966 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))); 1390 2020 QObject::connect(myUi.drawPatchCheckBox, SIGNAL(stateChanged(int)), 1391 2021 &connector, SLOT(drawPatchesCheckChange(int))); … … 1394 2024 QObject::connect(myUi.drawBlurCheckBox, SIGNAL(stateChanged(int)), 1395 2025 &connector, SLOT(drawBlurCheckChange(int))); 2026 QObject::connect(myUi.loopOverCurrentEventBox, SIGNAL(stateChanged(int)), 2027 &connector, SLOT(loopEventCheckChange(int))); 1396 2028 QObject::connect(canvas, SIGNAL(newFileLoaded()), 1397 2029 &connector, SLOT(newFileLoaded())); … … 1480 2112 QObject::connect(&connector, SIGNAL(updateCurrentTriggerType(QString)), 1481 2113 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 } 1482 2123 1483 2124 mainWindow.show(); -
trunk/FACT++/gui/RawEventsViewer/RawEventsViewer.h
r11642 r11697 24 24 #include <QtGui/QColorDialog> 25 25 #include <QtGui/QApplication> 26 #include <QtGui/QSpinBox> 27 #include <QtGui/QDoubleSpinBox> 28 #include <QtGui/QRadioButton> 26 29 #include <iostream> 27 30 #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 28 38 29 39 //#define __MARS__ … … 76 86 void setEventStep(int step); 77 87 void nextSlice(); 88 void previousSlice(); 78 89 79 90 Q_SIGNALS: … … 81 92 void signalCurrentSlice(int slice); 82 93 void newFileLoaded(); 94 void signalCurrentPixel(int pixel); 83 95 84 96 protected: … … 116 128 bool drawImpulse; 117 129 bool drawBlur; 130 bool loopCurrentEvent; 118 131 //allocate the maximum size for one event 119 132 int16_t *eventData; … … 128 141 int eventNum; 129 142 int nRoi; 143 int nRoiTM; 130 144 int runNumber; 131 145 int nTM; … … 133 147 int firstDataTime; 134 148 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 135 163 int eventStep; 136 164 137 165 int hardwareMapping[1440]; 166 int softwareMapping[1440]; 138 167 int patches[160][9]; 139 168 GLfloat patchesColor[160][3]; … … 166 195 void drawImpulseCheckChange(int state); 167 196 void drawBlurCheckChange(int state); 197 void loopEventCheckChange(int state); 168 198 void newFileLoaded(); 169 199 void playPauseClicked(); … … 192 222 void blueChanged3(double value); 193 223 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(); 194 235 195 236 Q_SIGNALS: … … 199 240 void updateCurrentSoftTrigger(QString); 200 241 void updateCurrentTriggerType(QString); 242 void updateCurrentPixelSliceValue(QString); 201 243 202 244 … … 205 247 QTimer timer; 206 248 string currentFile; 249 int crateID; 250 int boardID; 251 int patchID; 252 int hwID; 253 int swID; 254 bool rescaleWholeCamera; 207 255 public: 208 256 QListWidget *boardsTimeList; 209 257 QListWidget* startPixelsList; 210 258 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(); 218 303 219 304 }; -
trunk/FACT++/gui/RawEventsViewer/viewer.ui
r11614 r11697 7 7 <x>0</x> 8 8 <y>0</y> 9 <width>11 25</width>10 <height> 928</height>9 <width>1133</width> 10 <height>1017</height> 11 11 </rect> 12 12 </property> … … 16 16 <widget class="QWidget" name="centralwidget"> 17 17 <layout class="QGridLayout" name="gridLayout_2"> 18 <item row="0" column=" 0">18 <item row="0" column="1"> 19 19 <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="10,0"> 20 20 <item> … … 24 24 </property> 25 25 <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> 27 204 </item> 28 205 </layout> 29 206 </item> 30 207 <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"> 32 209 <property name="sizeConstraint"> 33 210 <enum>QLayout::SetDefaultConstraint</enum> … … 36 213 <widget class="QLabel" name="label"> 37 214 <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"> 44 221 <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 223 Run number: 224 Number of Events: 225 Number ofSlices: 226 Number of Time Marks: 227 Run Type: 228 Time of 1st data: 229 Time of last data: 230 SVN revision: 231 Number of boards: 232 Number of pixels: 233 Number of Slices TM: 234 Time system: 235 Date: 236 Night: 237 Camera: 238 DAQ: 239 ADC Count: 240 NB Evts OK: 241 NB Evts Rejected: 242 NB Evts Bad: 243 </string> 91 244 </property> 92 245 </widget> … … 95 248 <layout class="QVBoxLayout" name="verticalLayout_5"> 96 249 <item> 97 <widget class="QLabel" name="label_ 8">250 <widget class="QLabel" name="label_5"> 98 251 <property name="font"> 99 252 <font> … … 104 257 </property> 105 258 <property name="text"> 106 <string> Arrays data</string>259 <string>Selected Pixel</string> 107 260 </property> 108 261 <property name="alignment"> … … 112 265 </item> 113 266 <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> 160 365 </item> 161 366 </layout> … … 198 403 </item> 199 404 <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> 200 412 <widget class="QLabel" name="triggerTypeLabel"> 201 413 <property name="text"> … … 220 432 </layout> 221 433 </item> 222 <item>223 <layout class="QVBoxLayout" name="verticalLayout_3"/>224 </item>225 434 </layout> 226 435 </item> 227 436 </layout> 228 437 </item> 229 <item row="1" column=" 0">438 <item row="1" column="1"> 230 439 <layout class="QGridLayout" name="gridLayout"> 231 <item row="0" column=" 6">440 <item row="0" column="7"> 232 441 <widget class="QDoubleSpinBox" name="colorRange4"> 233 442 <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"> 242 451 <widget class="QDoubleSpinBox" name="greenValue4"> 243 452 <property name="decimals"> … … 246 455 </widget> 247 456 </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> 248 471 <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> 266 485 </property> 267 486 </widget> 268 487 </item> 269 488 <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> 280 492 </property> 281 493 </widget> 282 494 </item> 283 495 <item row="1" column="4"> 284 <widget class="QDoubleSpinBox" name="redValue 2">496 <widget class="QDoubleSpinBox" name="redValue1"> 285 497 <property name="decimals"> 286 498 <number>3</number> … … 289 501 </item> 290 502 <item row="1" column="3"> 291 <widget class="QDoubleSpinBox" name="redValue 1">503 <widget class="QDoubleSpinBox" name="redValue0"> 292 504 <property name="decimals"> 293 505 <number>3</number> … … 296 508 </item> 297 509 <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">305 510 <widget class="QLabel" name="label_20"> 306 511 <property name="text"> … … 312 517 </widget> 313 518 </item> 314 <item row="0" column=" 1">519 <item row="0" column="2"> 315 520 <widget class="QLabel" name="label_21"> 316 521 <property name="text"> … … 322 527 </widget> 323 528 </item> 324 <item row="2" column=" 1">529 <item row="2" column="2"> 325 530 <widget class="QLabel" name="label_22"> 326 531 <property name="text"> … … 332 537 </widget> 333 538 </item> 334 <item row="3" column=" 1">539 <item row="3" column="2"> 335 540 <widget class="QLabel" name="label_23"> 336 541 <property name="text"> … … 342 547 </widget> 343 548 </item> 344 <item row="0" column=" 2">549 <item row="0" column="3"> 345 550 <widget class="QDoubleSpinBox" name="colorRange0"> 346 551 <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"> 355 560 <widget class="QDoubleSpinBox" name="greenValue0"> 356 561 <property name="decimals"> … … 359 564 </widget> 360 565 </item> 361 <item row="3" column=" 2">566 <item row="3" column="3"> 362 567 <widget class="QDoubleSpinBox" name="blueValue0"> 363 568 <property name="decimals"> … … 366 571 </widget> 367 572 </item> 368 <item row="0" column=" 3">573 <item row="0" column="4"> 369 574 <widget class="QDoubleSpinBox" name="colorRange1"> 370 575 <property name="decimals"> … … 373 578 </widget> 374 579 </item> 375 <item row="2" column=" 3">580 <item row="2" column="4"> 376 581 <widget class="QDoubleSpinBox" name="greenValue1"> 377 582 <property name="decimals"> … … 380 585 </widget> 381 586 </item> 382 <item row="3" column=" 3">587 <item row="3" column="4"> 383 588 <widget class="QDoubleSpinBox" name="blueValue1"> 384 589 <property name="decimals"> … … 387 592 </widget> 388 593 </item> 389 <item row="0" column=" 4">594 <item row="0" column="5"> 390 595 <widget class="QDoubleSpinBox" name="colorRange2"> 391 596 <property name="decimals"> … … 394 599 </widget> 395 600 </item> 396 <item row="2" column=" 4">601 <item row="2" column="5"> 397 602 <widget class="QDoubleSpinBox" name="greenValue2"> 398 603 <property name="decimals"> … … 401 606 </widget> 402 607 </item> 403 <item row="3" column=" 4">608 <item row="3" column="5"> 404 609 <widget class="QDoubleSpinBox" name="blueValue2"> 405 610 <property name="decimals"> … … 408 613 </widget> 409 614 </item> 410 <item row="0" column=" 5">615 <item row="0" column="6"> 411 616 <widget class="QDoubleSpinBox" name="colorRange3"> 412 617 <property name="decimals"> … … 415 620 </widget> 416 621 </item> 417 <item row="2" column=" 5">622 <item row="2" column="6"> 418 623 <widget class="QDoubleSpinBox" name="greenValue3"> 419 624 <property name="decimals"> … … 422 627 </widget> 423 628 </item> 424 <item row="3" column=" 5">629 <item row="3" column="6"> 425 630 <widget class="QDoubleSpinBox" name="blueValue3"> 426 631 <property name="decimals"> … … 429 634 </widget> 430 635 </item> 431 <item row="3" column=" 7">636 <item row="3" column="8"> 432 637 <layout class="QHBoxLayout" name="horizontalLayout"> 433 638 <item> … … 443 648 <item> 444 649 <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> 445 656 <property name="maximum"> 446 657 <double>1000.000000000000000</double> … … 450 661 </property> 451 662 <property name="value"> 452 <double>1 .000000000000000</double>663 <double>100.000000000000000</double> 453 664 </property> 454 665 </widget> … … 456 667 </layout> 457 668 </item> 458 <item row="1" column=" 7">669 <item row="1" column="8"> 459 670 <layout class="QHBoxLayout" name="horizontalLayout_4"> 460 671 <item> … … 467 678 <item> 468 679 <widget class="QPushButton" name="eventsMinusButton"> 680 <property name="toolTip"> 681 <string>Step backwards in events</string> 682 </property> 469 683 <property name="text"> 470 684 <string>-</string> … … 474 688 <item> 475 689 <widget class="QSpinBox" name="eventsStepBox"> 690 <property name="toolTip"> 691 <string>Number of events to skip at each step</string> 692 </property> 476 693 <property name="minimum"> 477 694 <number>1</number> … … 490 707 </sizepolicy> 491 708 </property> 709 <property name="toolTip"> 710 <string>Step forward in events</string> 711 </property> 492 712 <property name="text"> 493 713 <string>+</string> … … 499 719 <item row="0" column="0"> 500 720 <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> 501 724 <property name="layoutDirection"> 502 725 <enum>Qt::RightToLeft</enum> … … 509 732 <item row="3" column="0"> 510 733 <widget class="QCheckBox" name="drawBlurCheckBox"> 734 <property name="toolTip"> 735 <string>Draw the pixels blurred (for having "nice", non-scientific images).</string> 736 </property> 511 737 <property name="layoutDirection"> 512 738 <enum>Qt::RightToLeft</enum> … … 519 745 <item row="1" column="0"> 520 746 <widget class="QCheckBox" name="drawPatchCheckBox"> 747 <property name="toolTip"> 748 <string>Whether the pixels clustering should be drawn or not</string> 749 </property> 521 750 <property name="layoutDirection"> 522 751 <enum>Qt::RightToLeft</enum> … … 525 754 <string>Draw Patches</string> 526 755 </property> 756 <property name="checked"> 757 <bool>true</bool> 758 </property> 527 759 <property name="tristate"> 528 760 <bool>false</bool> 529 761 </property> 530 762 </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> 531 849 </item> 532 850 </layout> … … 536 854 </widget> 537 855 <customwidgets> 856 <customwidget> 857 <class>QwtPlot</class> 858 <extends>QFrame</extends> 859 <header>qwt_plot.h</header> 860 <container>1</container> 861 </customwidget> 538 862 <customwidget> 539 863 <class>QGLWidget</class>
Note:
See TracChangeset
for help on using the changeset viewer.