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

ConfigUpdater.cpp

00001 #include "ConfigUpdater.h"
00002 #include "ConfigUpdaterManager.h"
00003 #include "Sct/SctParameters.h"
00004 #include "Sct/SctNames.h"
00005 #include "SctData/TrimRangeTestResult.h"
00006 #include "SctData/StrobeDelayTestResult.h"
00007 #include "SctData/NPtGainTestResult.h"
00008 #include "SctData/ResponseCurve.h"
00009 #include "CalibrationControllerImpl.h"
00010 #include "CommonWithDsp/ABCD/ABCDscans.h"
00011 
00012 using SctData::TestResult;
00013 using namespace Sct;
00014 
00015 namespace SctCalibrationController {
00016     
00017     unsigned long ConfigUpdater::getMID(const SctData::TestResult& t) const {
00018     Sct_SctApiStatus status;
00020         return CalibrationControllerImpl::instance().getApi()->findModuleSerial(&status, const_cast<char*> ( t.getModuleName().c_str())  );
00021     }
00022     
00023     bool StrobeDelayConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::StrobeDelayTestResult", shared_ptr<ConfigUpdater> (new StrobeDelayConfigUpdater()));
00024     
00025     void StrobeDelayConfigUpdater::update(const TestResult& testresult) const {
00026     const SctData::StrobeDelayTestResult& t = dynamic_cast<const SctData::StrobeDelayTestResult&> (testresult);
00027         unsigned long mid = getMID(t); 
00028     SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating StrobeDelay") << MRS_PARAM<long>("ModuleID", mid) << MRS_DIAGNOSTIC << ENDM; 
00029         for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) {
00030             Sct_SctApiStatus status;
00031             CalibrationControllerImpl::instance().getApi()->modifyABCDChipVar(&status, mid, ichip, ST_STROBE_DELAY, (double) t.getOptimum(ichip));
00032         } 
00033     }
00034     
00035     bool TrimRangeConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::TrimRangeTestResult", shared_ptr<TrimRangeConfigUpdater> (new TrimRangeConfigUpdater() ) );
00036     
00037     void TrimRangeConfigUpdater::update(const TestResult& testresult) const {
00038     const SctData::TrimRangeTestResult& t = dynamic_cast<const SctData::TrimRangeTestResult&> (testresult) ;
00039     unsigned long mid = getMID(t);
00040     Sct_SctApi_T_CharBlock trims[nChannelModule];
00041     for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) {
00042             Sct_SctApiStatus status;
00043         CalibrationControllerImpl::instance().getApi()->
00044         modifyABCDChipVar(&status, mid, ichip, ST_TRIM_RANGE , (double) t.chipTrim[ichip]->range );
00045         for (unsigned ichannel=0; ichannel < nChannelChip; ++ ichannel){
00046         *trims[ichip*nChannelChip+ichannel] =  t.chipTrim[ichip]->channelTrim.getAt(ichannel).value.trim ;
00047         }
00048     }
00049     SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating trims") << MRS_PARAM<long>("ModuleID", mid) << MRS_INFORMATION << ENDM;
00050         Sct_SctApiStatus status;
00051     CalibrationControllerImpl::instance().getApi()->modifyABCDTrims(&status, mid, *trims) ;
00052     }
00053 
00054     bool NPtGainConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::NPtGainTestResult", shared_ptr<NPtGainConfigUpdater> (new NPtGainConfigUpdater() ) );
00055     
00056     void NPtGainConfigUpdater::update(const TestResult& testresult) const {
00057     const SctData::NPtGainTestResult& t = dynamic_cast<const SctData::NPtGainTestResult&> (testresult) ;
00058         unsigned long mid = getMID(t);
00059     SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating response curve") << MRS_PARAM<const char*>("Module", t.getModuleName().c_str()) << MRS_INFORMATION << ENDM; 
00060         for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) {
00061         shared_ptr<const SctData::ResponseCurve> rc = t.getChipData(ichip).rc;
00062         shared_ptr<const TF1> func = rc->getFunction();
00063 /*      SctNames::Mrs() << "CC_UPDATE_INFO" << MRS_TEXT("CalibrationController updating response curve") << MRS_PARAM<long>("ModuleID", mid) << MRS_PARAM<int>("Chip", ichip) 
00064                     << MRS_PARAM<int>("Function", rc->getIndex()) << MRS_PARAM<double>("Param0", (double) func->GetParameter(0)) 
00065                 << MRS_PARAM<double>("Param1", (double) func->GetParameter(1)) << MRS_PARAM<double>("Param2", (double) func->GetParameter(2)) 
00066                 << MRS_DIAGNOSTIC << ENDM;*/
00067         Sct_SctApiStatus status;
00068             CalibrationControllerImpl::instance().getApi()->
00069         modifyABCDRC(&status, mid, ichip, rc->getIndex(), 
00070                  (double) func->GetParameter(0), 
00071                  (double) func->GetParameter(1), 
00072                  (double) func->GetParameter(2)    );
00073         }
00074     
00075     }
00076 }

Generated on Mon Dec 8 18:03:48 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3