BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Event/RawDataProviderSvc/include/RawDataProviderSvc/EmcRawDataProvider.h
Go to the documentation of this file.
1#ifndef EMCRAWDATAPROVIDER_H
2#define EMCRAWDATAPROVIDER_H
3
4// #include "GaudiKernel/ISvcLocator.h"
5// #include "GaudiKernel/IMessageSvc.h"
6#include "GaudiKernel/Incident.h"
7#include <vector>
8
9#include "EmcCalibConstSvc/IEmcCalibConstSvc.h"
10#include "EmcRawEvent/EmcDigi.h"
11#include "RawDataProviderBase.h"
12#include "Rtypes.h"
13
14// typedef std::vector<EmcDigi*> EmcDigiVec;
15
16// RawDataProvider for EMC
17// @author: C.D.Fu
19public:
21 EmcRawDataProvider( const char* name, uint32_t adclow = 0, uint32_t tlow = 0,
22 uint32_t thigh = 60 );
23 EmcRawDataProvider( const char* name, std::vector<uint32_t>& hot,
24 std::vector<uint32_t>& dead, uint32_t elow = 0, uint32_t tlow = 0,
25 uint32_t thigh = 60 );
26 // virtual ~EmcRawDataProvider(){m_emcDigiVec=EmcDigiCol();};
27 virtual ~EmcRawDataProvider() { m_emcDigiVec.clear(); }
28 void handle( const Incident& );
29
30 // initialize service point
31 virtual StatusCode initialize( bool mode = 0, ISvcLocator* svcLoc = 0,
32 IMessageSvc* pMsg = 0 );
33 // Provider's mode
35 DropLow = BIT( 0 ),
36 DropFull = BIT( 1 ),
37 DropHot = BIT( 2 ),
38 DropDead = BIT( 3 ),
39 CutTime = BIT( 4 ),
40 DoCalib = BIT( 5 ),
41 DoOther = BIT( 6 ),
42 Redo = BIT( 7 )
43 };
44
45 // get vector of point of EmcDigi after drop or cut or calib, etc.
46 EmcDigiCol& getEmcDigiVec( uint32_t control );
47 // decide whether it is a good emc hit
48 bool isGoodEmcDigi( uint32_t control, uint32_t id, uint32_t measure, uint32_t adc,
49 uint32_t tdc );
50 bool isGoodEmcDigi( uint32_t control, EmcDigi* emcDigi );
51 // calibiration
52 void doCalib( Identifier& id, uint32_t& measure, uint32_t& adc );
53 void doCalib( EmcDigi* emcDigi );
54
55 // set
56 void setELowThreshold( const uint32_t low ) { m_adcLowThreshold = low; };
57 void setTLowThreshold( const uint32_t low ) { m_tLowThreshold = low; };
58 void setTHighThreshold( const uint32_t high ) { m_tHighThreshold = high; };
59 void setHotCrystals( const std::vector<uint32_t>& idVec ) { m_hotCrystals = idVec; };
60 void addHotCrystal( const uint32_t id );
61 void setDeadCrystals( const std::vector<uint32_t>& idVec ) { m_deadCrystals = idVec; };
62 void addDeadCrystal( const uint32_t id );
63 bool removeHotCrystal( const uint32_t id );
64 bool removeDeadCrystal( const uint32_t id );
65
66 // get
67 uint32_t getAdcLowThreshold() { return m_adcLowThreshold; };
68 uint32_t getTdcLowThreshold() { return m_tLowThreshold; };
69 uint32_t getTdcHighThreshold() { return m_tHighThreshold; };
70 std::vector<uint32_t>& getHotCrystals() { return m_hotCrystals; };
71 std::vector<uint32_t>& getDeadCrystals() { return m_deadCrystals; };
72
73private:
74 IEmcCalibConstSvc* m_emcCalibConstSvc;
75
76 uint32_t m_adcLowThreshold; // adc threshold when measure==0
77 uint32_t m_tLowThreshold; // tdc threshold
78 uint32_t m_tHighThreshold;
79 std::vector<uint32_t> m_hotCrystals; // hot channels' id
80 std::vector<uint32_t> m_deadCrystals; // dead channels' id
81
82 EmcDigiCol m_emcDigiVec; // storage of result
83};
84#endif
ObjectVector< EmcDigi > EmcDigiCol
bool removeDeadCrystal(const uint32_t id)
bool isGoodEmcDigi(uint32_t control, uint32_t id, uint32_t measure, uint32_t adc, uint32_t tdc)
bool removeHotCrystal(const uint32_t id)
void doCalib(Identifier &id, uint32_t &measure, uint32_t &adc)
EmcDigiCol & getEmcDigiVec(uint32_t control)
void addDeadCrystal(const uint32_t id)
void addHotCrystal(const uint32_t id)
void handle(const Incident &)
virtual StatusCode initialize(bool mode=0, ISvcLocator *svcLoc=0, IMessageSvc *pMsg=0)
RawDataProviderBase(const char *name)