Skip to content
Snippets Groups Projects
Commit 06aa86d3 authored by Dominik Smith's avatar Dominik Smith Committed by Florian Uhlig
Browse files

CbmSeedFinderSlidingWindow now has an ideal mode'', in which seed times are...

CbmSeedFinderSlidingWindow now has an ideal mode'', in which seed times are copied directly from MC events and no additional algorithm is run. Filtering the input by file ID is also supported.
parent 3d98e989
1 merge request!735Ideal trigger algorithm
Pipeline #16327 passed
......@@ -4,6 +4,7 @@
#include "CbmSeedFinderSlidingWindow.h"
#include "CbmMCEventList.h"
#include "CbmMatch.h"
#include "CbmMuchBeamTimeDigi.h"
#include "CbmMuchDigi.h"
......@@ -14,6 +15,9 @@
#include "CbmTofDigi.h"
#include "CbmTrdDigi.h"
#include "FairRootManager.h"
#include <Logger.h>
CbmSeedFinderSlidingWindow::~CbmSeedFinderSlidingWindow()
{
if (fQa != nullptr) { delete fQa; }
......@@ -25,13 +29,41 @@ double CbmSeedFinderSlidingWindow::GetTime(const std::vector<double>* vIn, int32
template<class inType>
void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<inType>* vIn, const std::vector<CbmMatch>* vDigiMatch)
{
// Reset output array
fvSeedTimes->clear();
// Ideal mode ignores digi input and copies MC event list
if (fbIdealMode) {
std::vector<CbmMatch> eventMatches;
for (uint32_t i = 0; i < fEventList->GetNofEvents(); i++) {
if (fIdealModeFileId != -1 && fEventList->GetFileIdByIndex(i) != fIdealModeFileId) { continue; }
const double seedTime = fEventList->GetEventTimeByIndex(i);
fvSeedTimes->push_back(seedTime);
if (fQa) {
const uint32_t eventId = fEventList->GetEventIdByIndex(i);
const uint32_t fileId = fEventList->GetFileIdByIndex(i);
CbmMatch eventMatch;
eventMatch.AddLink(1.0, 0, eventId, fileId);
eventMatches.push_back(eventMatch);
}
}
if (fQa) {
for (uint32_t i = 0; i < fvSeedTimes->size(); i++) {
fQa->FillQaInfo(i, i, &eventMatches, fvSeedTimes->at(i));
}
}
return;
}
const int32_t nDigisTot = vIn->size();
int32_t nDigisWin = 0;
int32_t winStartN = 0;
double winStartT = -1111;
// Reset output array
fvSeedTimes->clear();
//LOG(debug) << "CbmTaskBuildRawEvents::FillSeedTimesSlidingWindow: digis in slice " << nDigisTot;
for (int32_t i = 0; i < nDigisTot; i++) {
......@@ -129,6 +161,14 @@ void CbmSeedFinderSlidingWindow::SetQa(bool doQA)
void CbmSeedFinderSlidingWindow::Init()
{
if (fQa) { fQa->Init(); }
if (fbIdealMode) {
if (!FairRootManager::Instance() || !FairRootManager::Instance()->GetObject("MCEventList.")) {
LOG(error) << "No MC event list found";
return;
}
fEventList = (CbmMCEventList*) FairRootManager::Instance()->GetObject("MCEventList.");
}
}
void CbmSeedFinderSlidingWindow::OutputQa()
......
......@@ -26,6 +26,7 @@
#include <vector>
class CbmMatch;
class CbmMCEventList;
class CbmSeedFinderQa;
class CbmSeedFinderSlidingWindow {
......@@ -67,6 +68,15 @@ public:
**/
void SetOffset(double offset) { fdOffset = offset; }
/** @brief Switches to ``ideal mode'' in which event times from MC data are used as triggers
* (no algorithm is run in this case)
**/
void SetIdealMode(const int32_t fileId = -1)
{
fbIdealMode = true;
fIdealModeFileId = fileId;
}
/** @brief Returns number of seed times currently stored in buffer. */
size_t GetNofSeeds() { return fvSeedTimes->size(); }
......@@ -90,6 +100,15 @@ private:
/** @brief Global time offset which is applied to each trigger time. */
double fdOffset = 0.;
/** @brief ``ideal mode'' uses MC truth as trigger times. */
bool fbIdealMode = false;
/** @brief If only a single file is to be used in ``ideal mode'' (-1 = all files). */
int32_t fIdealModeFileId = -1;
/** @brief To access MC truth in ``ideal mode''. */
CbmMCEventList* fEventList = nullptr;
/** @brief Fetches time at position i of either a digi vector or vector of times. */
template<class inType>
double GetTime(const std::vector<inType>* vIn, int32_t i);
......
......@@ -47,6 +47,12 @@ void CbmTaskBuildRawEvents::AddSeedTimeFillerToList(RawEventBuilderDetector seed
fpAlgo->SetSeedTimes(fSeedTimes);
}
void CbmTaskBuildRawEvents::SetIdealSeedFinder(const int32_t fileId)
{
SetSlidingWindowSeedFinder(1, 0.0, 0.0, 0.0);
fSeedFinderSlidingWindow->SetIdealMode(fileId);
}
void CbmTaskBuildRawEvents::SetSlidingWindowSeedFinder(int32_t minDigis, double dWindDur, double dDeadT, double dOffset)
{
if (fSeedFinderSlidingWindow) {
......
......@@ -123,6 +123,7 @@ public:
void PrintTimings();
void AddSeedTimeFillerToList(RawEventBuilderDetector seedDet);
void SetSlidingWindowSeedFinder(int32_t minDigis, double dWindDur, double dDeadT, double dOffset = 0.0);
void SetIdealSeedFinder(const int32_t fileId = -1);
void DumpSeedTimesFromDetList();
void SetSeedTimeWindow(Double_t beg, Double_t end) { fpAlgo->SetSeedTimeWindow(beg, end); }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment