/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #include "ADLEDData.h" 00002 00003 #include "Event/ReadoutHeader.h" 00004 #include "Event/CalibReadoutHeader.h" 00005 #include "Event/CalibReadout.h" 00006 #include "Event/UserDataHeader.h" 00007 #include "Event/RecHeader.h" 00008 #include "Event/RecTrigger.h" 00009 #include "Event/HeaderObject.h" 00010 00011 #include "GaudiKernel/SystemOfUnits.h" 00012 00013 #include "TMath.h" 00014 #include "TString.h" 00015 00016 ADLEDData::ADLEDData(const std::string& name, ISvcLocator* pSvcLocator) 00017 : DybAlgorithm<DayaBay::UserDataHeader>(name,pSvcLocator) { 00018 m_location = "/Event/Data/Calib/ADLED"; 00019 00020 declareProperty("ReadoutHeaderLocation", m_readoutHeaderLocation="/Event/Readout/ReadoutHeader", 00021 "Location of the ReadoutHeader"); 00022 declareProperty("CalibStatsLocation", m_calibStatsLocation="/Event/Data/CalibStats", 00023 "Location of the CalibStats User data"); 00024 declareProperty("ADLEDLocation", m_ADLEDLocation="/Event/Tag/Calib/ADLED", 00025 "Location of the ADLED Tag"); 00026 } 00027 00028 ADLEDData::~ADLEDData() { 00029 } 00030 00031 StatusCode ADLEDData::initialize() { 00032 return this->GaudiAlgorithm::initialize(); 00033 } 00034 00035 StatusCode ADLEDData::finalize() { 00036 return this->GaudiAlgorithm::finalize(); 00037 } 00038 00039 StatusCode ADLEDData::execute() { 00040 00041 StatusCode sc = StatusCode::SUCCESS; 00042 00043 const DayaBay::ReadoutHeader *readoutHdr = 0; 00044 const DayaBay::RecHeader *recHdr = 0; 00045 DayaBay::UserDataHeader *calibStatsHdr = 0; 00046 00047 // Check if it is tagged as ADLED, if not, skip. 00048 bool isADLED = exist<DayaBay::HeaderObject>(evtSvc(), m_ADLEDLocation); 00049 if (!isADLED){ 00050 return StatusCode::SUCCESS; 00051 } 00052 00053 // // Skip SAB Data 00054 // Site::Site_t siteId = readoutHdr->context().GetSite(); 00055 // 00056 // if (siteId == Site::kSAB) { 00057 // return StatusCode::SUCCESS; 00058 // } 00059 00060 if ( !exist<DayaBay::UserDataHeader>(evtSvc(), m_calibStatsLocation) ) { 00061 warning() << "Cannot find header at " << m_calibStatsLocation << endreq; 00062 return StatusCode::FAILURE; 00063 } else { 00064 calibStatsHdr = get<DayaBay::UserDataHeader>(m_calibStatsLocation); 00065 } 00066 00067 // Get readout 00068 if (!exist<DayaBay::ReadoutHeader>(evtSvc(), "/Event/Readout/ReadoutHeader")) { 00069 warning() << "Failed to get readout" << endreq; 00070 } else { 00071 readoutHdr = get<DayaBay::ReadoutHeader>("/Event/Readout/ReadoutHeader"); 00072 } 00073 00074 // Get recon header 00075 if (!exist<DayaBay::RecHeader>(evtSvc(), "/Event/Rec/AdSimple")) { 00076 warning() << "Failed to get recheader" << endreq; 00077 return StatusCode::FAILURE; 00078 } else { 00079 recHdr = get<DayaBay::RecHeader>("/Event/Rec/AdSimple"); 00080 } 00081 const DayaBay::RecTrigger& rectrigger = recHdr->recTrigger(); 00082 00083 // Skip if recon has failed 00084 float recES = rectrigger.energyStatus(); 00085 float recPS = rectrigger.positionStatus(); 00086 if (recES != 1 || recPS != 1){ 00087 debug() << "Recon failed. skipping" << endreq; 00088 return StatusCode::SUCCESS; 00089 } 00090 00091 // Record data 00092 // -- 1a. Get data from recheader 00093 float e_adled = rectrigger.energy()/Gaudi::Units::MeV; 00094 float x_adled = rectrigger.position().x() / Gaudi::Units::mm; 00095 float y_adled = rectrigger.position().y() / Gaudi::Units::mm; 00096 float z_adled = rectrigger.position().z() / Gaudi::Units::mm; 00097 // -- 1b. Get data from calib stats 00098 float nPESUM = calibStatsHdr->getFloat("nPESUM"); 00099 float nPERMS = calibStatsHdr->getFloat("nPERMS"); 00100 00101 // -- 2. Create and prepare user data header 00102 DayaBay::UserDataHeader* adledData = MakeHeaderObject(); 00103 Context context = readoutHdr->context(); 00104 context.SetDetId(DetectorId::kAll); 00105 adledData->setContext(context); 00106 adledData->setEarliest(readoutHdr->earliest()); 00107 adledData->setLatest(readoutHdr->latest()); 00108 00109 // -- 3. Finally, put data into the user data header 00110 adledData->set("e_adled",e_adled); 00111 adledData->set("x_adled",x_adled); 00112 adledData->set("y_adled",y_adled); 00113 adledData->set("z_adled",z_adled); 00114 adledData->set("nPESUM_adled",nPESUM); 00115 adledData->set("nPERMS_adled",nPERMS); 00116 00117 //============================== 00118 return StatusCode::SUCCESS; 00119 }