00001 #include "CalibAlg.h"
00002 #include "CalibAlg/ICalibTool.h"
00003
00004 #include "Event/CalibReadoutPmtCrate.h"
00005 #include "Event/CalibReadoutRpcCrate.h"
00006
00007 #include <vector>
00008
00009 CalibAlg::CalibAlg(const std::string& name, ISvcLocator* pSvcLocator)
00010 : DybAlgorithm<DayaBay::CalibReadoutHeader>(name,pSvcLocator)
00011 , m_calibRpcTool(0)
00012 , m_calibPmtTool(0)
00013 {
00014 declareProperty("ReadoutLocation",
00015 m_roLocation=DayaBay::ReadoutHeaderLocation::Default,
00016 "ReadoutHeader location in the TES.");
00017
00018 declareProperty("CalibReadoutLocation",
00019 m_calibRoLocation=DayaBay::CalibReadoutHeaderLocation::Default,
00020 "CalibHeader location in the TES.");
00021
00022 declareProperty("RpcCalibTool", m_calibRpcToolName="SimpRpcCalibTool",
00023 "Tool to calibrate RPC readouts");
00024
00025 declareProperty("PmtCalibTool", m_calibPmtToolName="SimpPmtCalibTool",
00026 "Tool to calibrate PMT readouts");
00027 }
00028
00029 CalibAlg::~CalibAlg()
00030 {
00031 }
00032
00033 StatusCode CalibAlg::initialize()
00034 {
00035
00036 try {
00037 m_calibRpcTool = tool<ICalibTool>(m_calibRpcToolName);
00038 }
00039 catch(const GaudiException& exg) {
00040 fatal() << "Failed to get Calib Tool: \"" << m_calibRpcToolName << "\"" << endreq;
00041 return StatusCode::FAILURE;
00042 }
00043 info () << "Added calib tool " << m_calibRpcToolName << endreq;
00044
00045 try {
00046 m_calibPmtTool = tool<ICalibTool>(m_calibPmtToolName);
00047 }
00048 catch(const GaudiException& exg) {
00049 fatal() << "Failed to get Calib Tool: \"" << m_calibPmtToolName << "\"" << endreq;
00050 return StatusCode::FAILURE;
00051 }
00052 info () << "Added calib tool " << m_calibPmtToolName << endreq;
00053
00054 return StatusCode::SUCCESS;
00055 }
00056
00057 StatusCode CalibAlg::execute()
00058 {
00059 StatusCode sc;
00060
00061
00062 DayaBay::CalibReadoutHeader* calibHeader = MakeHeaderObject();
00063
00064
00065 DayaBay::ReadoutHeader* roHeader
00066 = getTES<DayaBay::ReadoutHeader>(m_roLocation);
00067 if(!roHeader) {
00068 error() << "Get no ReadoutHeader from TES!!" << endreq;
00069 return StatusCode::FAILURE;
00070 }
00071
00072 Context context = roHeader->context();
00073 calibHeader->setContext(context);
00074 calibHeader->setEarliest(roHeader->earliest());
00075 calibHeader->setLatest(roHeader->latest());
00076
00077
00078 const DayaBay::DaqCrate* readout = roHeader->daqCrate();
00079 if(!readout){
00080 info() << "No Readouts retrieved this cycle." << endreq;
00081 calibHeader->setCalibReadout(0);
00082 return StatusCode::SUCCESS;
00083 }
00084
00085 const DayaBay::Detector& detector = readout->detector();
00086 unsigned int eventNumber = readout->eventNumber();
00087 const TimeStamp& triggerTime = readout->triggerTime();
00088 const DayaBay::Trigger::TriggerType_t& triggerType = readout->triggerType();
00089
00090 debug() << "detector " << detector << endreq;
00091 debug() << "eventNumber " << eventNumber << endreq;
00092 debug() << "triggerTime " << triggerTime << endreq;
00093 debug() << "triggerType " << triggerType << endreq;
00094
00095 if(detector.isAD() || detector.isWaterShield()){
00096
00097 debug() << "create CalibReadoutPmtCrate " << endreq;
00098 DayaBay::CalibReadoutPmtCrate* calibReadout =
00099 new DayaBay::CalibReadoutPmtCrate(detector, eventNumber,
00100 triggerTime, triggerType);
00101 calibHeader->setCalibReadout(calibReadout);
00102 calibReadout->setHeader(calibHeader);
00103 debug() << "start calibration readout " << endreq;
00104 sc = m_calibPmtTool->calibration(readout, calibReadout);
00105 debug() << "finish calibration readout " << endreq;
00106
00107 }else if(detector.detectorId() == DetectorId::kRPC){
00108
00109 DayaBay::CalibReadoutRpcCrate* calibReadout =
00110 new DayaBay::CalibReadoutRpcCrate(detector,eventNumber,
00111 triggerTime, triggerType);
00112 calibHeader->setCalibReadout(calibReadout);
00113 calibReadout->setHeader(calibHeader);
00114 sc = m_calibRpcTool->calibration(readout, calibReadout);
00115
00116 }else {
00117 error() << "Unknown detector " << detector << endreq;
00118 return StatusCode::FAILURE;
00119 }
00120
00121 return StatusCode::SUCCESS;
00122 }
00123
00124 StatusCode CalibAlg::finalize()
00125 {
00126 return this->GaudiAlgorithm::finalize();
00127 }