Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Globals   Related Pages  

PipelineTest.h

Go to the documentation of this file.
00001 #ifndef PIPELINETEST_H
00002 #define PIPELINETEST_H
00003 
00004 #include "../ipc/TestRequest.h"
00005 #include "../ipc/CalibrationController.h"
00006 #include "../ipc/ScanLibrary.h"
00007 #include "../ipc/Sct_CalibrationController.hh"
00008 #include "../CalibrationControllerImpl.h"
00009 
00010 #include "../SctApiException.h"
00011 #include "Sct/LogicErrors.h"
00012 
00013 #include <CommonWithDsp/ABCD/ABCDscans.h>
00014 #include <iostream>
00015 #include <vector>
00016 
00017 using namespace Sct;
00018 using namespace std;
00019 using namespace SctCalibrationController::Ipc;
00020 using namespace SctCalibrationController;
00021 
00022 namespace SctCalibrationController {
00023 namespace Scripts {
00024     
00025 class PipelineTest : public TestRequestImpl {
00026 public: 
00027     static PipelineTest& instance() {
00028     static PipelineTest rc;
00029     return rc;
00030     }
00031     
00032     virtual void startTest(Sct_SctApi_T_SctApi& inapi, string& name, unsigned short& testVariable, unsigned long& nScans, vector<double>& testPoints) { 
00033     this->api = &inapi;
00034     
00035     Sct_SctApiStatus status;
00036     api->modifyABCDVar(&status, ST_COMPRESSION, 1);
00037     if (status.returnCode != 0)
00038         throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00039     
00040     api->modifyABCDVar(&status, ST_EDGE_DETECT, 0);
00041     if (status.returnCode != 0)
00042         throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00043     
00044     api->modifyABCDVar(&status, ST_SEND_MASK, 0);
00045     if (status.returnCode != 0)
00046         throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00047 
00048     name = "PipelineTest";
00049     nScans = 2;
00050     testPoints.push_back(0);
00051     testPoints.push_back(1);
00052     testVariable=ST_MASK;
00053     }
00054     
00055     virtual Sct_SctApi_T_Scan* getNextScan(unsigned long index) {
00056     if (api == 0) 
00057         throw InvariantViolatedError("Api pointer is 0 in getNextScan!", __FILE__, __LINE__);
00058     
00059     // Set configuration
00060     Sct_SctApiStatus status;
00061     api->modifyABCDVar(&status, ST_MASK, 3.0*(1-index) );
00062     if (status.returnCode != 0)
00063         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00064     
00065     // Create scan
00066         Sct_SctApi_T_Scan* s = api->defaultScan(&status);
00067     if (status.returnCode != 0)
00068         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00069     
00070         s->setNTrigs(&status, 100);
00071     if (status.returnCode != 0)
00072         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00073     
00074     // Adjust trigger
00075         Sct_SctApi_T_Trigger* t = s->getTrigger1(&status);
00076     if (status.returnCode != 0)
00077         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00078 
00079     // 129 is critical to the pulse arriving correctly
00080         t->softPulseL1A(&status, 140, 129);
00081     if (status.returnCode != 0)
00082         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00083 
00084     // "Command" 1 is the delay (starting at 140)
00085     t->setCommIncr(&status, 1, 1);
00086     if (status.returnCode != 0)
00087         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00088 
00089     // Configure scan
00090     s->configure(&status, ST_ELAPSED, 140, 151, 1);
00091     if (status.returnCode != 0)
00092         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00093     
00094     return s;
00095     }
00096     
00097     virtual bool canFeedback() {
00098     return false;
00099     }
00100     
00101     virtual void endTest() {
00102     if (api == 0) 
00103         throw InvariantViolatedError("Api pointer is 0 in endTest!", __FILE__, __LINE__);
00104     
00105     Sct_SctApiStatus status;
00106     api->modifyABCDVar(&status, ST_MASK, 0);    //Not that this unsets any previously set mask.
00107     if (status.returnCode != 0)
00108         throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00109 
00110     
00111     api = 0;
00112     }
00113 
00114 private:
00115     PipelineTest() {}
00116     Sct_SctApi_T_SctApi* api;
00117 };
00118 }
00119 }
00120 #endif //PIPELINETEST_H

Generated on Mon Dec 15 19:36:10 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3