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

ResponseCurve.h

Go to the documentation of this file.
00001 #ifndef RESPONSECURVE_H
00002 #define RESPONSECURVE_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 ResponseCurve : public TestRequestImpl {
00026 public: 
00027     static ResponseCurve& instance() {
00028     static ResponseCurve rc;
00029     return rc;
00030     }
00031     
00032     virtual void startTest(Sct_SctApi_T_SctApi& api, string& name, unsigned short& testVariable, unsigned long& nScans, vector<double>& testPoints) {   
00033     this->api = &api;
00034     
00035     Sct_SctApiStatus status;
00036     api.modifyABCDVar(&status, ST_COMPRESSION, 1);
00037     if (status.returnCode != 0)
00038         throw SctApiException(status.returnCode, "ResponseCurve::startTest", __FILE__, __LINE__);
00039     
00040     api.modifyABCDVar(&status, ST_EDGE_DETECT, 0);
00041     if (status.returnCode != 0)
00042         throw SctApiException(status.returnCode, "ResponseCurve::startTest", __FILE__, __LINE__);
00043     
00044     api.modifyABCDVar(&status, ST_SEND_MASK, 0);    // Send mask off
00045     if (status.returnCode != 0)
00046         throw SctApiException(status.returnCode, "ResponseCurve::startTest", __FILE__, __LINE__);
00047     
00048     name = "NPtGainTest";
00049     testVariable = ST_QCAL; 
00050     
00051     charges.push_back(0.5);
00052     charges.push_back(0.75);    
00053     charges.push_back(1.0);
00054     charges.push_back(1.25);
00055     charges.push_back(1.5);
00056     charges.push_back(2.);
00057     charges.push_back(3);
00058     charges.push_back(4);
00059     charges.push_back(6);
00060     charges.push_back(8);
00061 
00062     testPoints = charges;
00063     nScans = testPoints.size();
00064     }
00065     
00066     virtual Sct_SctApi_T_Scan* getNextScan(unsigned long index) {
00067     if (api == 0) 
00068         throw InvariantViolatedError("Api pointer is 0 in getNextScan!", __FILE__, __LINE__);
00069     
00070     ScanLibrary& sl = CalibrationControllerImpl::instance().getScanLibrary();
00071     
00072     Sct_SctApiStatus status;    
00073     api->modifyABCDVar(&status, ST_QCAL, charges[index]);
00074     if (status.returnCode != 0)
00075         throw SctApiException(status.returnCode, "ResponseCurve::getNextScan", __FILE__, __LINE__);
00076     
00077     return &sl.thresholdScanfC(1000, charges[index]);       
00078     }
00079     
00080     virtual bool canFeedback() {
00081     return true;
00082     }  
00083     
00084     virtual void endTest() {
00085     api = 0;
00086     charges.clear();
00087     }
00088     
00089     
00090 private:
00091     ResponseCurve() {}
00092     Sct_SctApi_T_SctApi* api;    
00093     vector<double> charges;
00094 };
00095 }
00096 }
00097 #endif //RESPONSECURVE_H

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