25 std::vector<o2::ft0::ChannelData> mVecChannelData;
28 return mDigit ==
other.mDigit && mVecChannelData ==
other.mVecChannelData;
33 for (
const auto&
entry : mVecChannelData) {
38 std::vector<EventFT0_t> vecTotalEvents, vecTotalEvents2;
39 gSystem->Exec(
"$O2_ROOT/bin/o2-sim -n 10 -m FT0 -g pythia8pp");
40 gSystem->Exec(
"$O2_ROOT/bin/o2-sim-digitizer-workflow -b");
41 TFile
flIn(
"ft0digits.root");
42 std::unique_ptr<TTree> treeInput((TTree*)
flIn.Get(
"o2sim"));
43 std::vector<Digit> vecDigits;
44 std::vector<Digit>* ptrVecDigits = &vecDigits;
45 std::vector<ChannelData> vecChannelData;
46 std::vector<ChannelData>* ptrVecChannelData = &vecChannelData;
49 std::cout <<
"Tree nEntries:" << treeInput->GetEntries() << std::endl;
50 for (
int iEvent = 0; iEvent < treeInput->GetEntries(); iEvent++) {
51 treeInput->GetEntry(iEvent);
52 for (
const auto& digit : (*ptrVecDigits)) {
53 auto itBegin = ptrVecChannelData->begin();
54 std::advance(itBegin, digit.ref.getFirstEntry());
55 auto itEnd = ptrVecChannelData->begin();
56 std::advance(itEnd, digit.ref.getFirstEntry() + digit.ref.getEntries());
58 auto eventFT0 = EventFT0_t{digit, std::vector<ChannelData>{itBegin, itEnd}};
59 vecTotalEvents.push_back(eventFT0);
62 std::cout <<
"\n===================================\n";
63 for (
auto const&
entry : vecTotalEvents) {
66 std::cout <<
"\n===================================\n";
68 std::cout <<
"\nTOTAL EVENTS: " << vecTotalEvents.size() << std::endl;
69 std::cout <<
"Simulation completed!" << std::endl;
70 gSystem->Exec(
"$O2_ROOT/bin/o2-ft0-digi2raw --file-for link --configKeyValues \"HBFUtils.nHBFPerTF=128;HBFUtils.orbitFirst=0\"");
71 gSystem->Exec(
"$O2_ROOT/bin/o2-raw-file-reader-workflow -b --input-conf FT0raw.cfg --configKeyValues \"HBFUtils.nHBFPerTF=128;HBFUtils.orbitFirst=0\"|$O2_ROOT/bin/o2-ft0-flp-dpl-workflow -b");
72 TFile flIn2(
"o2_ft0digits.root");
73 std::unique_ptr<TTree> treeInput2((TTree*)flIn2.Get(
"o2sim"));
74 std::cout <<
"Reconstruction completed!" << std::endl;
78 std::cout <<
"Tree nEntries: " << treeInput2->GetEntries() << std::endl;
79 for (
int iEvent = 0; iEvent < treeInput2->GetEntries(); iEvent++) {
80 treeInput2->GetEntry(iEvent);
81 for (
const auto& digit : (*ptrVecDigits)) {
82 auto itBegin = ptrVecChannelData->begin();
83 std::advance(itBegin, digit.ref.getFirstEntry());
84 auto itEnd = ptrVecChannelData->begin();
85 std::advance(itEnd, digit.ref.getFirstEntry() + digit.ref.getEntries());
87 auto eventFT0 = EventFT0_t{digit, std::vector<ChannelData>{itBegin, itEnd}};
88 vecTotalEvents2.push_back(eventFT0);
91 std::cout <<
"\n===================================\n";
92 for (
auto const&
entry : vecTotalEvents2) {
95 std::cout <<
"\n===================================\n";
96 std::cout <<
"\nTOTAL EVENTS: " << vecTotalEvents2.size() << std::endl;
97 if (vecTotalEvents == vecTotalEvents2) {
98 std::cout <<
"\n TEST IS OK!\n";
100 std::cout <<
"\nDIFFERENCE BETWEEN SRC AND DEST\n";
101 std::cout <<
"\n===============================\n";
102 for (
int iEntry = 0; iEntry < std::max(vecTotalEvents.size(), vecTotalEvents2.size()); iEntry++) {
103 if (iEntry < vecTotalEvents.size() && iEntry < vecTotalEvents2.size()) {
104 if (vecTotalEvents[iEntry] == vecTotalEvents2[iEntry]) {
108 std::cout <<
"\nEntryID: " << iEntry;
109 std::cout <<
"\n------------------------------SOURCE------------------------------\n";
110 if (iEntry < vecTotalEvents.size()) {
111 vecTotalEvents[iEntry].print();
113 std::cout <<
"\nEMPTY!\n";
115 std::cout <<
"\n------------------------------DESTINATION------------------------------\n";
116 if (iEntry < vecTotalEvents2.size()) {
117 vecTotalEvents2[iEntry].print();
119 std::cout <<
"\nEMPTY!\n";
122 std::cout <<
"\nERROR!\n";