21 using namespace Diana;
29 fEnergyRangesInput = GetString(
"EnergyRangesInput",
"EnergyRanges.txt");
30 fChiSquareRangesInput = GetString(
"ChiSquareRangesInput",
"ChiSquareRanges.txt");
34 fEnergyRangesName = GetString(
"EnergyRangesName",eHandle.GetName(),
false);
35 fChiSquareRangesName = GetString(
"ChiSquareRangesName",csHandle.GetName(),
false);
38 fEnergyLabel = GetString(
"EnergyLabel",
"ApplyCalibration@Energy");
39 fChiSquareLabel = GetString(
"ChiSquareLabel",
"OTAnalysis@FitChiSquare");
42 fChiSquareCutMaxEnergy = GetDouble(
"ChiSquareCutMaxEnergy",1100);
44 ev.RequireByLabel<
QDouble>(fEnergyLabel);
45 ev.RequireByLabel<
QDouble>(fChiSquareLabel);
47 ev.Require<
QHeader>(
"DAQ",
"Header");
60 const int run = header.
GetRun();
62 if(run != fRunData.fNumber) {
68 GlobalHandle<QInt> dHandle(
"Dataset");
69 GlobalData().Get(
"",&dHandle,
"");
70 fDataset = dHandle.Get();
81 GlobalData().Get(
"User",&eHandle,fEnergyRangesInput);
82 if(!eHandle.IsValid()) {
84 eHandle.SetDataset(fDataset);
85 GlobalHandle<QString> clabelh(
"CalibrationLabel");
86 clabelh.SetDataset(fDataset);
88 GlobalData().Get(fEnergyLabel.owner,&clabelh,
"CurrentReader");
89 if(clabelh.IsValid()) {
94 GlobalData().Get(
"EnergyFilter",&eHandle,fEnergyRangesInput);
97 if(!eHandle.IsValid() && !fBlackList.count(
channel))
99 fEnergyMin = GetDouble(
"EnergyMin",0);
100 fEnergyMax = GetDouble(
"EnergyMax",100000);
101 Info(
"Channel %d has no energy range: %s. Using [%f,%f]",
channel,eHandle.GetError().GetDescription().c_str(),fEnergyMin,fEnergyMax);
104 if(eHandle.IsValid() && !fBlackList.count(
channel)
105 && eHandle.Get().GetMax() < eHandle.Get().GetMin()) {
107 fEnergyMin = GetDouble(
"EnergyMin",0);
108 fEnergyMax = GetDouble(
"EnergyMax",100000);
109 Error(
"Channel %d has wrong energy range. fMin = %f; fMax = %f. Using [%f,%f]",
channel,eHandle.Get().GetMin(),eHandle.Get().GetMax(),fEnergyMin,fEnergyMax);
114 if(fBlackList.count(
channel)) {
115 fEnergyRange.SetMax(fEnergyMax);
116 fEnergyRange.SetMin(fEnergyMin);
118 else fEnergyRange = eHandle.Get();
128 if(fEnergyRange.Contains(energy)){
133 GlobalData().Get(
"User",&csHandle,fChiSquareRangesInput);
135 if(!csHandle.IsValid()) {
137 csHandle.SetDataset(fDataset);
138 GlobalHandle<QString> cslabelh(
"ChiSquareLabel");
139 cslabelh.SetDataset(fDataset);
141 GlobalData().Get(fChiSquareLabel.owner,&cslabelh,
"CurrentReader");
142 if(cslabelh.IsValid()) {
147 GlobalData().Get(
"EnergyFilter",&csHandle,fChiSquareRangesInput);
151 if(!csHandle.IsValid() && !fBlackList.count(
channel))
153 fChiSquareMin = GetDouble(
"ChiSquareMin",0);
154 fChiSquareMax = GetDouble(
"ChiSquareMax",3);
155 Info(
"Channel %d has no ChiSquare range: %s. Using [%f,%f]",
channel,csHandle.GetError().GetDescription().c_str(),fChiSquareMin,fChiSquareMax);
158 if(csHandle.IsValid() && !fBlackList.count(
channel)
159 && csHandle.Get().GetMax() < csHandle.Get().GetMin()) {
161 fChiSquareMin = GetDouble(
"ChiSquareMin",0);
162 fChiSquareMax = GetDouble(
"ChiSquareMax",3);
163 Error(
"Channel %d has wrong ChiSquare range. fMin = %f; fMax = %f. Using [%f,%f]",
channel,csHandle.Get().GetMin(),csHandle.Get().GetMax(),fChiSquareMin,fChiSquareMax);
168 if(fBlackList.count(
channel)) {
169 fChiSquareRange.SetMax(fChiSquareMax);
170 fChiSquareRange.SetMin(fChiSquareMin);
172 else fChiSquareRange = csHandle.Get();
179 if((energy <= fChiSquareCutMaxEnergy && fChiSquareRange.Contains(ChiSquare)) || energy > fChiSquareCutMaxEnergy) passed =
true;
QRunDataHandle rHandle(753)
#define REGISTER_MODULE(clazz)
energy threshold cut and flat ChiSquare cut (on a finite range) 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)
void SetCalibLabel(const std::string &stabl)
const Q & GetByLabel(const QEventLabel &label) const
Get a QObject in read mode by label.
void Get(const char *owner, ReadHandle< Q > &handle) const
Get a QObject Handle in read mode.
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...