FivePointGainTest.h

00001 #ifndef FIVEPOINTGAIN_H
00002 #define FIVEPOINTGAIN_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 SctCalibrationController::Ipc;
00020 using namespace SctCalibrationController;
00021 
00022 namespace SctCalibrationController {
00023 namespace Scripts {
00024     
00025 class FivePointGainTest : public TestRequestImpl {
00026 private:
00027    static const bool registeredInTestLibrary;
00028 
00029 public: 
00030     static Sct_CalibrationController::TestRequest_ptr instance() {
00031     static FivePointGainTest rc;
00032     rc.setFitAlgorithm("Threshold");
00033     rc.setAnalysisAlgorithm("NPtGainTest");
00034     return rc._this();
00035     }
00036     
00037     virtual void startTestRealImpl(Sct_SctApi::SctApiIPC_ptr api,
00038                            string& name,
00039                            unsigned short& testVariable,
00040                            unsigned long& nScans,
00041                            vector<double>& testPoints) {    
00042     this->api = Sct_SctApi::SctApiIPC::_duplicate(api);
00043 
00044         // Compression mode X1X
00045         APICALL(api, modifyABCDVar(ST_COMPRESSION, 1), "FivePointGainTest::startTest")
00046 
00047         // Edge detect off
00048         APICALL(api, modifyABCDVar(ST_EDGE_DETECT, 0), "FivePointGainTest::startTest")
00049 
00050         // No masked channels
00051         APICALL(api, modifyABCDVar(ST_SEND_MASK, 0), "FivePointGainTest::startTest")
00052 
00053     name = "NPtGainTest";
00054     testVariable = ST_QCAL;
00055 
00056     charges.push_back(0.75);
00057     charges.push_back(1.0);
00058     charges.push_back(1.5);
00059     charges.push_back(2.0);
00060     charges.push_back(4.0);
00061     testPoints = charges;
00062     nScans = testPoints.size();
00063     }
00064 
00065     virtual Sct_CalibrationController::ScanRequest_ptr getNextScanRealImpl(unsigned long index) {
00066     Sct_CalibrationController::ScanLibrary_var sl = CalibrationControllerImpl::instance()->getScanLibrary();
00067 
00068     APICALL(api, modifyABCDVar(ST_QCAL, charges[index]), "FivePointGainTest::getNextScan")
00069 
00070     return sl->thresholdScanfC(500, charges[index]);
00071     }
00072 
00073     virtual bool canFeedbackRealImpl() {
00074     return true;
00075     }
00076 
00077     virtual void endTestRealImpl() {
00078     api = Sct_SctApi::SctApiIPC::_nil();
00079     charges.clear();
00080     }
00081 
00082 
00083 private:
00084     FivePointGainTest() {}
00085     Sct_SctApi::SctApiIPC_var api;
00086     vector<double> charges;
00087 };
00088 }
00089 }
00090 #endif //FIVEPOINTGAIN_H

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