PipelineTest.h

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/CalibrationController.hh"
00008 #include "../CalibrationControllerImpl.h"
00009 
00010 #include "../SctApiAccessException.h"
00011 #include "Sct/LogicErrors.h"
00012 #include "../SctApiCall.h"
00013 
00014 #include <Sct/AbcdScans.h>
00015 #include <iostream>
00016 #include <vector>
00017 
00018 using namespace Sct;
00019 using namespace std;
00020 using namespace SctCalibrationController::Ipc;
00021 using namespace SctCalibrationController;
00022 
00023 namespace SctCalibrationController {
00024 namespace Scripts {
00025 
00028 class PipelineTest : public TestRequestImpl {
00029 private:
00030    static const bool registeredInTestLibrary;
00031 
00032 public: 
00033     static Sct_CalibrationController::TestRequest_ptr instance() {
00034     static PipelineTest rc;
00035     rc.setFitAlgorithm("NONE");
00036     rc.setAnalysisAlgorithm("PipelineTest");
00037     return rc._this();
00038     }
00039     
00040     virtual void startTestRealImpl(Sct_SctApi::SctApiIPC_ptr inapi, string& name, unsigned short& testVariable, unsigned long& nScans, vector<double>& testPoints) {    
00041     this->api = Sct_SctApi::SctApiIPC::_duplicate(inapi);
00042 
00043         // Compression mode X1X
00044         APICALL(api, modifyABCDVar(ST_COMPRESSION, 1), "PipelineTest::startTest")
00045 
00046         // Edge detect off
00047         APICALL(api, modifyABCDVar(ST_EDGE_DETECT, 0), "PipelineTest::startTest")
00048 
00049         // No masked channels
00050         APICALL(api, modifyABCDVar(ST_SEND_MASK, 0), "PipelineTest::startTest")
00051 
00052     name = "PipelineTest";
00053     nScans = 2;
00054     testPoints.push_back(0);
00055     testPoints.push_back(1);
00056     testVariable=ST_MASK;
00057     }
00058     
00059     virtual Sct_CalibrationController::ScanRequest_ptr getNextScanRealImpl(unsigned long index) {
00060     // Set configuration
00061     APICALL(api, modifyABCDVar(ST_MASK, 3.0*(1-index)), "PipelineTest::getNextScan")
00062 
00063         Sct_CalibrationController::ScanLibrary_var sl = CalibrationControllerImpl::instance()->getScanLibrary();
00064         Sct_CalibrationController::ScanRequest_ptr request = sl->defaultScan();
00065 
00066     // Create scan
00067         Sct_SctApi::Scan_var s;
00068         APIRETCALL(api, s, createScan(), "PipelineTest::getNextScan")
00069         request->setScanCorba(s);
00070 
00071         APICALL(s, setNTrigs(100), "PipelineTest::getNextScan")
00072 
00073     // Adjust trigger
00074         Sct_SctApi::Trigger_var t;
00075         APIRETCALL(s, t, getTrigger1(), "PipelineTest::getNextScan")
00076 
00077     // 129 is critical to the pulse arriving correctly
00078         APICALL(t, softPulseL1A(140, 129), "PipelineTest::getNextScan")
00079 
00080     // "Command" 1 is the delay (starting at 140)
00081     APICALL(t, setCommIncr(1, 1), "PipelineTest::getNextScan")
00082 
00083     // Configure scan// Note that while setCommIncr is uses to scan the delay with the 
00084         // pre- 26/7/2005 DSP code, after this it is done through ST_TRIG_DELAY
00085     APICALL(s, configure(ST_TRIG_DELAY1, 140, 151, 1), "PipelineTest::getNextScan")
00086 
00087     return request;
00088     }
00089 
00090     virtual bool canFeedbackRealImpl() {
00091     return true;
00092     }
00093 
00094     virtual void endTestRealImpl() {
00095     api = Sct_SctApi::SctApiIPC::_nil();
00096     }
00097 
00098 private:
00099     PipelineTest() {}
00100     Sct_SctApi::SctApiIPC_var api;
00101 };
00102 }
00103 }
00104 #endif //PIPELINETEST_H

Generated on Mon Feb 6 14:01:24 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6