-
Notifications
You must be signed in to change notification settings - Fork 494
Expand file tree
/
Copy pathClusterWriterSpec.cxx
More file actions
72 lines (64 loc) · 3.53 KB
/
ClusterWriterSpec.cxx
File metadata and controls
72 lines (64 loc) · 3.53 KB
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
70
71
72
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
/// @file ClusterWriterSpec.cxx
#include <vector>
#include "ITSWorkflow/ClusterWriterSpec.h"
#include "DPLUtils/MakeRootTreeWriterSpec.h"
#include "DataFormatsITSMFT/CompCluster.h"
#include "DataFormatsITSMFT/ROFRecord.h"
#include "SimulationDataFormat/MCCompLabel.h"
#include "SimulationDataFormat/MCTruthContainer.h"
using namespace o2::framework;
namespace o2
{
namespace its
{
template <typename T>
using BranchDefinition = MakeRootTreeWriterSpec::BranchDefinition<T>;
using CompClusType = std::vector<o2::itsmft::CompClusterExt>;
using PatternsType = std::vector<unsigned char>;
using ROFrameRType = std::vector<o2::itsmft::ROFRecord>;
using LabelsType = o2::dataformats::MCTruthContainer<o2::MCCompLabel>;
using ROFRecLblT = std::vector<o2::itsmft::MC2ROFRecord>;
using namespace o2::header;
DataProcessorSpec getClusterWriterSpec(bool useMC)
{
// Spectators for logging
// this is only to restore the original behavior
auto compClustersSize = std::make_shared<int>(0);
auto compClustersSizeGetter = [compClustersSize](CompClusType const& compClusters) {
*compClustersSize = compClusters.size();
};
auto logger = [compClustersSize](std::vector<o2::itsmft::ROFRecord> const& rofs) {
LOG(info) << "ITSClusterWriter pulled " << *compClustersSize << " clusters, in " << rofs.size() << " RO frames";
};
return MakeRootTreeWriterSpec("its-cluster-writer",
"o2clus_its.root",
MakeRootTreeWriterSpec::TreeAttributes{"o2sim", "Tree with ITS clusters"},
BranchDefinition<CompClusType>{InputSpec{"compclus", "ITS", "COMPCLUSTERS", 0},
"ITSClusterComp",
compClustersSizeGetter},
BranchDefinition<PatternsType>{InputSpec{"patterns", "ITS", "PATTERNS", 0},
"ITSClusterPatt"},
BranchDefinition<ROFrameRType>{InputSpec{"ROframes", "ITS", "CLUSTERSROF", 0},
"ITSClustersROF",
logger},
BranchDefinition<LabelsType>{InputSpec{"labels", "ITS", "CLUSTERSMCTR", 0},
"ITSClusterMCTruth",
(useMC ? 1 : 0), // one branch if mc labels enabled
""},
BranchDefinition<ROFRecLblT>{InputSpec{"MC2ROframes", "ITS", "CLUSTERSMC2ROF", 0},
"ITSClustersMC2ROF",
(useMC ? 1 : 0), // one branch if mc labels enabled
""})();
}
} // namespace its
} // namespace o2