19 using namespace Diana;
25 bool CompareTimes(
const std::pair<int, unsigned long long> &EventAndTime1,
26 const std::pair<int, unsigned long long> &EventAndTime2)
28 return EventAndTime1.second < EventAndTime2.second;
35 fIteration = GetIteration();
37 act.fActionId = ACT_NEXTEV;
41 fOutputFilename = GetString(
"OutputFilename",
"");
42 if(fOutputFilename !=
"")
44 bool notroot = (fOutputFilename.find(
".root") == string::npos);
45 bool nottxt = (fOutputFilename.find(
".txt") == string::npos);
48 Panic(
"Invalid filename for temporary data. Filename must end in .root or .txt");
55 act.fActionId = ACT_GOTOEV;
56 act.fEventNumber = (fEventVector[fIndex]).first;
71 act.fActionId = ACT_NEXTEV;
78 std::pair<int, unsigned long long> EventAndTime;
83 int chan = pulseInfo.GetChannelId();
84 EventAndTime.second = t.GetFromStartRunNs();
85 fEventVector.push_back(EventAndTime);
86 fChannelVector.push_back(chan);
88 fStartTime = t.GetStartRunUnix();
92 if(fIndex<fNumberOfEvents)
95 act.fActionId = ACT_GOTOEV;
96 act.fEventNumber = (fEventVector[fIndex]).first;
102 act.fActionId = ACT_GOTOEV;
103 act.fEventNumber = fNumberOfEvents;
116 sort(fEventVector.begin(), fEventVector.end(),
CompareTimes);
117 std::pair<int, unsigned long long> EventAndTime;
118 fNumberOfEvents = fEventVector.size();
120 if(fOutputFilename !=
"")
122 QVector EventList = QVector(fNumberOfEvents);
123 QVector TimeList = QVector(fNumberOfEvents);
124 QVector ChannelList = QVector(fNumberOfEvents);
125 for(
int i=0; i<fNumberOfEvents; i++)
127 EventAndTime = fEventVector[i];
128 EventList[i] = (double)EventAndTime.first;
129 TimeList[i] = (
double)EventAndTime.second/1.0e6;
130 ChannelList[i] = (double)fChannelVector[i];
132 GlobalData().Set(
"RunStartTime",
QInt(fStartTime), fOutputFilename);
133 GlobalData().Set(
"EventList", EventList, fOutputFilename);
134 GlobalData().Set(
"TimeMs", TimeList, fOutputFilename);
135 GlobalData().Set(
"Channel", ChannelList, fOutputFilename);
137 if(GetBool(
"SortInPlace",
true)) act = ACT_RERUN;
bool CompareTimes(const std::pair< int, unsigned long long > &EventAndTime1, const std::pair< int, unsigned long long > &EventAndTime2)
QBaseType< int > QInt
int wrapped in a QObject
#define REGISTER_MODULE(clazz)
Module for sorting events by time.
virtual Action Do(Diana::QEventAssembler &ev)
virtual Action Done()
Done method is called after event loop.
class to store ActionId and fEventNumber (in case fActionId=ACT_GOTOEV)
Visitor class of QEvent that provides full handling of QEvent.
QEvent & GetEvent()
Get the QEvent.
void Require(const std::string &owner, const std::string &name) const
notify the QEvent that we need a QObject, if not found an exception is thrown
void Get(const char *owner, ReadHandle< Q > &handle) const
Get a QObject Handle in read mode.
unsigned int GetReadNumber() const
return the event number as read by the current reader.
Raw event: bolometer channel, trigger positions and types.
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...