Skip to content

Commit c10da95

Browse files
committed
Custom streamer for std::vector<o2::tpc::PadFlags>
1 parent 76ae281 commit c10da95

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

DataFormats/Detectors/TPC/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ o2_add_library(
4040

4141
o2_target_root_dictionary(
4242
DataFormatsTPC
43+
EXTRA_PATCH src/VectorPadflagsCustomStreamer.cxx
4344
HEADERS include/DataFormatsTPC/ClusterGroupAttribute.h
4445
include/DataFormatsTPC/ClusterNative.h
4546
include/DataFormatsTPC/ClusterNativeHelper.h

DataFormats/Detectors/TPC/src/DataFormatsTPCLinkDef.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
#pragma link C++ class o2::tpc::ClusterHardwareContainerFixedSize < 8192> + ;
2323
#pragma link C++ class o2::tpc::ClusterNativeContainer + ;
2424
#pragma link C++ class o2::tpc::Digit + ;
25+
#pragma link C++ enum o2::tpc::PadFlags +; // enum itself
2526
#pragma link C++ class o2::tpc::ZeroSuppressedContainer8kb + ;
2627
#pragma link C++ class std::vector < o2::tpc::ClusterNative> + ;
2728
#pragma link C++ class std::vector < o2::tpc::ClusterNativeContainer> + ;
2829
#pragma link C++ class std::vector < o2::tpc::ClusterHardware> + ;
2930
#pragma link C++ class std::vector < o2::tpc::ClusterHardwareContainerFixedSize < 8192>> + ;
3031
#pragma link C++ class std::vector < o2::tpc::ClusterHardwareContainer8kb> + ;
3132
#pragma link C++ class std::vector < o2::tpc::Digit> + ;
33+
#pragma link C++ class std::vector < o2::tpc::PadFlags> + ;
3234
#pragma link C++ class std::vector < o2::tpc::ZeroSuppressedContainer8kb> + ;
3335
#pragma link C++ class o2::tpc::TrackTPC + ;
3436
#pragma link C++ class o2::tpc::LaserTrack + ;
@@ -53,8 +55,7 @@
5355
#pragma link C++ class o2::tpc::TrackCuts + ;
5456
#pragma link C++ class o2::tpc::KrCluster + ;
5557
#pragma link C++ class std::vector < o2::tpc::KrCluster> + ;
56-
#pragma link C++ class o2::tpc::LtrCalibData + ;
57-
#pragma link C++ class std::vector < o2::tpc::LtrCalibData> + ;
58+
#pragma link C++ class o2::tpc::LtrCalibData + ; #pragma link C++ class std::vector < o2::tpc::LtrCalibData> + ;
5859
#pragma link C++ class o2::tpc::VDriftCorrFact + ;
5960
#pragma link C++ class std::vector < o2::tpc::VDriftCorrFact> + ;
6061
#pragma link C++ class o2::tpc::CalibdEdxCorrection + ;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright 2019-2025 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
using std::vector;
13+
14+
void VectorPadFlagsStreamer(TBuffer& R__b, void* objp)
15+
{
16+
std::vector<o2::tpc::PadFlags>* obj = static_cast<std::vector<o2::tpc::PadFlags>*>(objp);
17+
if (R__b.IsReading()) {
18+
std::vector<int> R__stl;
19+
R__stl.clear();
20+
int R__n;
21+
R__b >> R__n;
22+
R__stl.reserve(R__n);
23+
for (int R__i = 0; R__i < R__n; R__i++) {
24+
Int_t readtemp;
25+
R__b >> readtemp;
26+
R__stl.push_back(readtemp);
27+
}
28+
auto data = reinterpret_cast<unsigned short*>(R__stl.data());
29+
for (int i = 0; i < R__n; ++i) {
30+
obj->push_back(static_cast<o2::tpc::PadFlags>(data[i]));
31+
}
32+
} else {
33+
// We always save things with the old format.
34+
R__b << (int)obj->size() / 2;
35+
for (size_t i = 0; i < obj->size(); i++) {
36+
R__b << (short)obj->at(i);
37+
}
38+
}
39+
}
40+
41+
#define RootStreamerLocal(name,STREAMER) \
42+
namespace ROOT { \
43+
/** \cond HIDDEN_SYMBOLS */ \
44+
TGenericClassInfo *GenerateInitInstanceLocal(const name*); /** \endcond */ \
45+
/** \cond HIDDEN_SYMBOLS */ \
46+
static Short_t _R__UNIQUE_(R__dummyStreamer) = \
47+
GenerateInitInstanceLocal((name*)0x0)->SetStreamer(STREAMER); \
48+
/** \endcond */ \
49+
R__UseDummy(_R__UNIQUE_(R__dummyStreamer)); \
50+
}
51+
52+
RootStreamerLocal(vector<o2::tpc::PadFlags>, VectorPadFlagsStreamer);

0 commit comments

Comments
 (0)