-
Notifications
You must be signed in to change notification settings - Fork 13
/
edmraw2simpletree.C
69 lines (57 loc) · 1.49 KB
/
edmraw2simpletree.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <vector>
#include <iostream>
#include <TInterpreter.h>
#include <ROOT/RDataFrame.hxx>
// http://opendata.cern.ch/record/63
auto filename = "/data/cms/D66F223A-6A9C-E111-AF57-003048F118D4.root";
class FEDRawData
{
public:
vector<unsigned char> data_; //
};
class DoNotRecordParents
{
ClassDef(DoNotRecordParents, 128);
};
class FEDRawDataCollection : public DoNotRecordParents
{
public:
vector<FEDRawData> data_; //
ClassDef(FEDRawDataCollection, 128);
};
namespace edm
{
template <typename T0>
class Wrapper;
template <>
class Wrapper<FEDRawDataCollection>
{
public:
bool present;
FEDRawDataCollection obj;
};
} // namespace edm
void distil()
{
gInterpreter->GenerateDictionary("vector<vector<unsigned char>>");
gInterpreter->GenerateDictionary("DoNotRecordParents");
gInterpreter->GenerateDictionary("FEDRawData");
gInterpreter->GenerateDictionary("FEDRawDataCollection");
ROOT::EnableImplicitMT(4);
TFile f(filename);
ROOT::RDataFrame rdf("Events", &f);
auto toVecOfVec = [](const FEDRawDataCollection &c) {
vector<vector<unsigned char>> v;
for (const auto &w : c.data_)
{
v.emplace_back(w.data_);
}
return v;
};
rdf.Define("v", toVecOfVec, {"FEDRawDataCollection_rawDataCollector__LHC.obj"})
.Filter([](ULong64_t n) {if (n%1000 == 0)cout << n << endl;return true; }, {"rdfentry_"})
.Snapshot<vector<vector<unsigned char>>>("Events", "rawContent.root", {"v"});
}
void edmraw2simpletree() {
distil();
}