ARTEMIS-CRIB
 
Loading...
Searching...
No Matches
TTimingDataMappingProcessor.cc
Go to the documentation of this file.
1/**
2 * @file TTimingDataMappingProcessor.cc
3 * @brief
4 * @author Kodai Okawa<okawa@cns.s.u-tokyo.ac.jp>
5 * @date 2022-07-19 18:36:37
6 * @note last modified: 2024-08-23 20:58:57
7 * @details
8 */
9
11
12#include "constant.h"
13#include <TCategorizedData.h>
14#include <TRawDataObject.h>
15#include <TTimingData.h>
16
18
20
22 : fOutputArray(nullptr) {
23 RegisterInputCollection("InputCollection", "rawdata object returned by TRIDFEventStore",
24 fInputColName, TString("catdata"),
25 reinterpret_cast<void ***>(&fCategorizedData),
26 "art::TCategorizedData");
27 RegisterOutputCollection("OutputCollection", "output collection name",
28 fOutputColName, TString("simple"),
29 reinterpret_cast<void **>(&fOutputArray),
30 "TClonesArray", "art::TTimingData");
31 RegisterProcessorParameter("CatID", "Category ID", fCatID, 0);
32 RegisterProcessorParameter("DataTypeID", "data type id for input",
33 fDataTypeID, 0);
34 // RegisterProcessorParameter("OutputType","not yet implemented (always output TTimingData)"
35 // fOutputType,2);
36 RegisterProcessorParameter("Sparse", "hit will be inserted at the index corresponding to its id if sparse is 0, otherwise added ordinaly", fIsSparse, kTRUE);
37}
38
43
44void TTimingDataMappingProcessor::Init(TEventCollection *) {
45 Info("Init", "CatID: %d, DataTypeID: %d => %s",
47 if (!fIsSparse)
48 Info("Init", "Not sparse.");
49}
50
53 return;
54
55 fOutputArray->Clear("C");
56
57 const TObjArray *const cat = (*fCategorizedData)->FindCategory(fCatID);
58 if (!cat)
59 return;
60
61 const Int_t n = cat->GetEntriesFast();
62
63 for (Int_t i = 0; i != n; ++i) {
64 const TObjArray *const det = static_cast<TObjArray *>(cat->At(i));
65 const TObjArray *const dataArray = static_cast<TObjArray *>(det->At(fDataTypeID));
66 if (!dataArray)
67 continue;
68
69 const TRawDataObject *const hit = dynamic_cast<TRawDataObject *>(dataArray->At(0));
70 const Int_t detID = hit->GetDetID();
71 const Int_t idx = fIsSparse ? fOutputArray->GetEntriesFast() : detID;
72 TTimingData *const data = static_cast<TTimingData *>(fOutputArray->ConstructedAt(idx));
73 if (IsValid(data->GetID()))
74 return; // take only the first hit if not sparse
75
76 data->SetID(detID);
77 data->SetTiming(hit->GetValue());
78 }
79
80 if (fIsSparse) {
81 TTimingData::SetSortType(TTimingData::kTiming);
82 TTimingData::SetSortOrder(TTimingData::kASC);
83 fOutputArray->UnSort();
84 fOutputArray->Sort();
85 fOutputArray->Compress();
86 } else {
87 const Int_t n = fOutputArray->GetEntriesFast();
88 for (Int_t i = 0; i != n; ++i) {
89 fOutputArray->ConstructedAt(i);
90 }
91 }
92}
ClassImp(TTimingDataMappingProcessor)
return to the guide