20 using namespace Diana;
27 fRangesInput = GetString(
"EnergyRangesInput",
"EnergyRanges.txt");
30 fRangesOutput = GetString(
"EnergyRangesOutput",
"" );
33 fRangesName = GetString(
"EnergyRangesName",eHandle.GetName(),
false);
34 fRangesOwner = GetString(
"EnergyRangesOwner",
"User",
false);
37 fEnergyLabel = GetString(
"EnergyLabel",
"ApplyCalibration@Energy");
39 ev.RequireByLabel<
QDouble>(fEnergyLabel);
41 ev.Require<
QHeader>(
"DAQ",
"Header");
53 const int run = header.
GetRun();
55 if(run != fRunData.fNumber) {
61 GlobalHandle<QInt> dHandle(
"Dataset");
62 GlobalData().Get(
"",&dHandle,
"");
63 fDataset = dHandle.Get();
73 GlobalData().Get(fRangesOwner,&eHandle,fRangesInput);
74 if(!eHandle.IsValid()) {
76 eHandle.SetDataset(fDataset);
77 GlobalHandle<QString> clabelh(
"CalibrationLabel");
78 clabelh.SetDataset(fDataset);
80 GlobalData().Get(fEnergyLabel.owner,&clabelh,
"CurrentReader");
81 if(clabelh.IsValid()) {
86 GlobalData().Get(
"EnergyFilter",&eHandle,fRangesInput);
89 if(!eHandle.IsValid() && !fBlackList.count(
channel))
91 fEnergyMin = GetDouble(
"EnergyMin",0);
92 fEnergyMax = GetDouble(
"EnergyMax",100000);
93 Info(
"Channel %d has no energy range: %s. Using [%f,%f]",
channel,eHandle.GetError().GetDescription().c_str(),fEnergyMin,fEnergyMax);
96 if(eHandle.IsValid() && !fBlackList.count(
channel)
97 && eHandle.Get().GetMax() < eHandle.Get().GetMin()) {
99 fEnergyMin = GetDouble(
"EnergyMin",0);
100 fEnergyMax = GetDouble(
"EnergyMax",100000);
101 Error(
"Channel %d has wrong energy range. fMin = %f; fMax = %f. Using [%f,%f]",
channel,eHandle.Get().GetMin(),eHandle.Get().GetMax(),fEnergyMin,fEnergyMax);
105 if(fBlackList.count(
channel)) {
107 fEnergyRange.SetMax(fEnergyMax);
108 fEnergyRange.SetMin(fEnergyMin);
110 else fEnergyRange = eHandle.Get();
113 if(!fRangesOutput.empty() && !fChannelList.count(
channel)) {
116 eHandleDs->SetChannel(
channel);
117 eHandleDs->SetDataset(fDataset);
118 eHandleDs->Set(fEnergyRange);
121 GlobalHandle<QString> clabelh(
"CalibrationLabel");
122 clabelh.SetDataset(fDataset);
124 GlobalData().Get(fEnergyLabel.owner,&clabelh,
"CurrentReader");
125 if(clabelh.IsValid()) {
130 fHandles.insert(eHandleDs);
135 const double energy = ev.GetByLabel<
QDouble>(fEnergyLabel);
137 if (fEnergyRange.Contains(energy)) passed =
true;
145 if(fRangesOutput.empty())
return;
146 std::set<QEnergyRangesHandle*>::iterator iter = fHandles.begin();
147 while(iter != fHandles.end()) {
151 GlobalHandle<QFrameWorkConfig> fwcHandle(
"Config");
152 GlobalData().Get(
"Diana",&fwcHandle,
"");
154 if(!fwcHandle.IsValid()) {
155 err = fwcHandle.GetError();
158 err = fwcHandle.Get().GetModuleByLabel(eLabel.
GetOwner(),mconf);
160 if(fRangesOutput ==
"DB" &&
err !=
QERR_SUCCESS) Error(
"%s",
err.GetDescription().c_str());
165 GlobalData().Set(handle,fRangesOutput);
QRunDataHandle rHandle(753)
#define REGISTER_MODULE(clazz)
Applies an energy threshold depending on the channel.
bool Filter(const Diana::QEvent &ev)
return true if ev passes the cuts
base types wrapped into a QObject. Currently implemented types are QInt QDouble and QFloat....
global handle for EnergyRanges
void SetCalibVersion(const std::string &stabv)
const std::string & GetCalibLabel() const
void SetCalibLabel(const std::string &stabl)
error class with error type and description
label for QObject in the QEvent
const std::string & GetOwner() const
get owner
QObject to store a QBaseModule configuration.
std::string fVersionTag
Version release tag.
Raw event: bolometer channel, trigger positions and types.
const int & GetChannelId() const
Get ChannelId.
global handle for QRunData
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...