Diana Software
MRawDataFilter.cc
Go to the documentation of this file.
1 #include "MRawDataFilter.hh"
2 #include "QEvent.hh"
3 #include "QRawEvent.hh"
4 #include "QPulse.hh"
5 #include "QVector.hh"
6 #include "QMatrix.hh"
7 #include "QRunDataHandle.hh"
8 
9 using namespace Diana;
10 using std::vector;
11 
13 
14 
15 void MRawDataFilter::GetCuts(const QEvent& ev)
16 {
17  fKeepHeater = GetBool("KeepHeater",false);
18  fKeepLED = GetBool("KeepLED",false);
19  fKeepSignal = GetBool("KeepSignal",false);
20  fKeepNoise = GetBool("KeepNoise",false);
21  fKeepSide = GetBool("KeepSide",false, false);
22  fKeepReversed = GetBool("KeepReversed",false, false);
23  fKeepVeto = GetBool("KeepVetos",false);
24  fKeepThermometers = GetBool("KeepThermometers",false);
25  fKeepBolometers = GetBool("KeepBolometers",true,false);
26  fKeepAllChannelTypes = GetBool("KeepAllChannelTypes",false,false);
27 
28  fKeepRunDataChannels = GetBool("KeepOnlyRunDataChannels",false,false);
29  fLoadEventList = GetBool("LoadEventList",false,false);
30  fMinEventNumber = GetInt("MinEventNumber",-1,false);
31  fMaxEventNumber = GetInt("MaxEventNumber",-1,false);
32 
33 
34  vector<int> empty;
35  fKeepChannels = GetVectorInt("KeepChannels",empty,false);
36  fRejectChannels = GetVectorInt("RejectChannels",empty,false);
37  if(!fKeepChannels.empty() && !fRejectChannels.empty()) {
38  Panic("Options KeepChannels and RejectChannels cannot be used at the same time");
39  }
40 
41  if(fLoadEventList) {
42  std::string fileName = GetString("EventList",Q_STRING_DEFAULT);
43  const QMatrix& eventChannel = GlobalData().Get<QMatrix>("EventList",fileName);
44  QVector eventsFromFile = eventChannel.GetCol(1);
45  for ( size_t ev = 0; ev < eventsFromFile.Size(); ev++)
46  fEventList.insert((unsigned int)eventsFromFile[ev]);
47  }
48  fRunData.Clear();
49  ev.Require<QHeader>("DAQ","Header");
50  ev.Require<QPulseInfo>("DAQ","PulseInfo");
51 }
52 
54 {
55  const QHeader& header = ev.Get<QHeader>("DAQ","Header");
56 
57  if(fLoadEventList) {
58  unsigned int evnum = header.GetEventNumber();
59  if(!fEventList.count(evnum)) return false;
60  }
61  if(fMinEventNumber != -1 && header.GetEventNumber() < fMinEventNumber) return false;
62  if(fMaxEventNumber != -1 && header.GetEventNumber() > fMaxEventNumber) return false;
63 
64  const int run = header.GetRun();
65  if(run != fRunData.fNumber) {
67  GlobalData().Get<QRunData>("",&rHandle,"");
68  fRunData = rHandle.Get();
69  }
70  const QPulseInfo& pulseInfo = ev.Get<QPulseInfo>("DAQ","PulseInfo");
71  const int channel = pulseInfo.GetChannelId();
72 
73  bool result = true;
74  if(fRunData.GetChannelRunData(channel).fIsThermometer) result = fKeepThermometers;
75  else if(fRunData.GetChannelRunData(channel).fIsBolometer) result = fKeepBolometers;
76  if(!result && fKeepAllChannelTypes) result = true;
77  if(!result) return false;
78 
79  result = false;
80  if(fKeepHeater && pulseInfo.GetIsPulser()) result = true;
81  if(fKeepLED && pulseInfo.GetIsLED()) result = true;
82  if(fKeepNoise && pulseInfo.GetIsNoise()) result = true;
83  if(fKeepSignal && pulseInfo.GetIsSignal()) result = true;
84  if(fKeepVeto && pulseInfo.GetIsVeto()) result = true;
85  if(fKeepSide && pulseInfo.GetIsSide()) result = true;
86  if(fKeepReversed && pulseInfo.GetIsReversed()) result = true;
87  if(!result) return false;
88 
89  if(!fKeepChannels.empty()
90  && find(fKeepChannels.begin(),fKeepChannels.end(),channel) == fKeepChannels.end())
91  return false;
92 
93  if(!fRejectChannels.empty()
94  && find(fRejectChannels.begin(),fRejectChannels.end(),channel) != fRejectChannels.end())
95  return false;
96 
97  if(fKeepRunDataChannels
98  && std::find(fRunData.fThermalDetectorChannels.begin(),fRunData.fThermalDetectorChannels.end(),channel)
99  == fRunData.fThermalDetectorChannels.end())
100  return false;
101 
102  return true;
103 }
104 
QRunDataHandle rHandle(753)
const int channel
#define Q_STRING_DEFAULT
Definition: QDiana.hh:38
#define REGISTER_MODULE(clazz)
Definition: QDriver.hh:133
generic raw data filter.
bool Filter(const Diana::QEvent &ev)
diana event
Definition: QEvent.hh:46
void Get(const char *owner, ReadHandle< Q > &handle) const
Get a QObject Handle in read mode.
Definition: QEvent.hh:74
Raw event: basic information like run number and time.
Definition: QHeader.hh:16
int GetRun() const
destructor
Definition: QHeader.hh:22
int GetEventNumber() const
get EventNumber
Definition: QHeader.hh:25
Interface for matrices in Diana analysis.
Definition: QMatrix.hh:24
QVector GetCol(UInt_t ncol)
get column
Definition: QMatrix.cc:221
Raw event: bolometer channel, trigger positions and types.
Definition: QPulseInfo.hh:18
bool GetIsSignal() const
Get IsSignal.
Definition: QPulseInfo.hh:48
bool GetIsSide() const
Get IsSide.
Definition: QPulseInfo.hh:56
bool GetIsNoise() const
Get IsNoise.
Definition: QPulseInfo.hh:54
bool GetIsPulser() const
Get IsPulser.
Definition: QPulseInfo.hh:44
const int & GetChannelId() const
Get ChannelId.
Definition: QPulseInfo.hh:22
bool GetIsLED() const
Get IsLED.
Definition: QPulseInfo.hh:46
bool GetIsVeto() const
Get IsVeto.
Definition: QPulseInfo.hh:52
bool GetIsReversed() const
Get IsSignal.
Definition: QPulseInfo.hh:50
global handle for QRunData
Basic run based info.
Definition: QRunData.hh:20
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...