/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

Ge68Data.cc
Go to the documentation of this file.
00001 #include "Ge68Data.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 Ge68Data::Ge68Data(const std::string& name, ISvcLocator* pSvcLocator)
00017   : DybAlgorithm<DayaBay::UserDataHeader>(name,pSvcLocator) {
00018   m_location = "/Event/Data/Calib/Ge68";
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("Ge68Location", m_Ge68Location="/Event/Tag/Calib/Ge68",
00025                   "Location of the Ge68 Tag");
00026 }
00027 
00028 Ge68Data::~Ge68Data() {
00029 }
00030 
00031 StatusCode Ge68Data::initialize() {
00032   return this->GaudiAlgorithm::initialize();
00033 }
00034 
00035 StatusCode Ge68Data::finalize() {
00036   return this->GaudiAlgorithm::finalize();
00037 }
00038 
00039 StatusCode Ge68Data::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 Ge68, if not, skip.
00048   bool isGe68 = exist<DayaBay::HeaderObject>(evtSvc(), m_Ge68Location);
00049   if (!isGe68){
00050     return StatusCode::SUCCESS;
00051   }
00052 
00053   // Get Calibstats
00054   if ( !exist<DayaBay::UserDataHeader>(evtSvc(), m_calibStatsLocation) ) {
00055     warning() << "Cannot find header at " << m_calibStatsLocation << endreq;
00056     return StatusCode::FAILURE;
00057   } else {
00058     calibStatsHdr = get<DayaBay::UserDataHeader>(m_calibStatsLocation);
00059   }
00060   
00061   // Get readout
00062   if (!exist<DayaBay::ReadoutHeader>(evtSvc(), "/Event/Readout/ReadoutHeader")) {
00063     warning() << "Failed to get readout" << endreq;
00064   } else {
00065     readoutHdr = get<DayaBay::ReadoutHeader>("/Event/Readout/ReadoutHeader");
00066   }
00067 
00068   // Get recon header
00069   if (!exist<DayaBay::RecHeader>(evtSvc(), "/Event/Rec/AdSimple")) {
00070     warning() << "Failed to get recheader" << endreq;
00071     return StatusCode::FAILURE;
00072   } else {
00073     recHdr = get<DayaBay::RecHeader>("/Event/Rec/AdSimple");
00074   }
00075   const DayaBay::RecTrigger& rectrigger = recHdr->recTrigger();
00076   
00077   // Skip SAB Data 
00078   Site::Site_t siteId = readoutHdr->context().GetSite();
00079   if (siteId == Site::kSAB) {
00080     return StatusCode::SUCCESS;
00081   }
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_ge68 = rectrigger.energy()/Gaudi::Units::MeV;
00094   float x_ge68 = rectrigger.position().x() / Gaudi::Units::mm;
00095   float y_ge68 = rectrigger.position().y() / Gaudi::Units::mm;
00096   float z_ge68 = 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* ge68Data = MakeHeaderObject();
00103   Context context = readoutHdr->context();
00104   context.SetDetId(DetectorId::kAll);
00105   ge68Data->setContext(context);
00106   ge68Data->setEarliest(readoutHdr->earliest());
00107   ge68Data->setLatest(readoutHdr->latest());
00108 
00109   // -- 3. Finally, put data into the user data header
00110   ge68Data->set("e_ge68",e_ge68); 
00111   ge68Data->set("x_ge68",x_ge68); 
00112   ge68Data->set("y_ge68",y_ge68); 
00113   ge68Data->set("z_ge68",z_ge68); 
00114   ge68Data->set("nPESUM_ge68",nPESUM); 
00115   ge68Data->set("nPERMS_ge68",nPERMS); 
00116 
00117 //==============================
00118   return StatusCode::SUCCESS;
00119 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 10:10:08 for CalibrationTagging by doxygen 1.7.4