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

ConfigUpdater.cpp

Go to the documentation of this file.
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     short 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     Sct_SctApi_T_CharBlock data = _Sct_SctApi_T_CharBlock_sequence::Create(nChannelModule, trims);
00052     CalibrationControllerImpl::instance().getApi()->modifyABCDTrims(&status, mid, data) ;
00053     }
00054 
00055     bool NPtGainConfigUpdater::inMap = ConfigUpdaterManager::instance().setUpdater("SctData::NPtGainTestResult", shared_ptr<NPtGainConfigUpdater> (new NPtGainConfigUpdater() ) );
00056     
00057     void NPtGainConfigUpdater::update(const TestResult& testresult) const {
00058     const SctData::NPtGainTestResult& t = dynamic_cast<const SctData::NPtGainTestResult&> (testresult) ;
00059         unsigned long mid = getMID(t);
00060     SctNames::Mrs() << "CC_UPDATE" << MRS_TEXT("CalibrationController updating response curve") << MRS_PARAM<const char*>("Module", t.getModuleName().c_str()) << MRS_INFORMATION << ENDM; 
00061         for (unsigned ichip=0; ichip<Sct::nChipModule; ++ichip) {
00062         shared_ptr<const SctData::ResponseCurve> rc = t.getChipData(ichip).rc;
00063         shared_ptr<const TF1> func = rc->getFunction();
00064 /*      SctNames::Mrs() << "CC_UPDATE_INFO" << MRS_TEXT("CalibrationController updating response curve") << MRS_PARAM<long>("ModuleID", mid) << MRS_PARAM<int>("Chip", ichip) 
00065                     << MRS_PARAM<int>("Function", rc->getIndex()) << MRS_PARAM<double>("Param0", (double) func->GetParameter(0)) 
00066                 << MRS_PARAM<double>("Param1", (double) func->GetParameter(1)) << MRS_PARAM<double>("Param2", (double) func->GetParameter(2)) 
00067                 << MRS_DIAGNOSTIC << ENDM;*/
00068         Sct_SctApiStatus status;
00069             CalibrationControllerImpl::instance().getApi()->
00070         modifyABCDRC(&status, mid, ichip, rc->getIndex(), 
00071                  (double) func->GetParameter(0), 
00072                  (double) func->GetParameter(1), 
00073                  (double) func->GetParameter(2)    );
00074         }
00075     
00076     }
00077 }

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