Analysis Software
Documentation for
sPHENIX
simulation software
Home page
Related Pages
Modules
Namespaces
Classes
Files
Examples
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
ObjSpacePointWriter.hpp
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file ObjSpacePointWriter.hpp
1
// This file is part of the Acts project.
2
//
3
// Copyright (C) 2017-2018 CERN for the benefit of the Acts project
4
//
5
// This Source Code Form is subject to the terms of the Mozilla Public
6
// License, v. 2.0. If a copy of the MPL was not distributed with this
7
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
9
#pragma once
10
11
#include "
ActsExamples/EventData/GeometryContainers.hpp
"
12
#include "
ActsExamples/Framework/WriterT.hpp
"
13
#include "
ActsExamples/Utilities/Paths.hpp
"
14
15
#include <fstream>
16
17
namespace
ActsExamples {
18
29
template
<
typename
T>
30
class
ObjSpacePointWriter
:
public
WriterT
<GeometryIdMultimap<T>> {
31
public
:
32
struct
Config
{
33
std::string
collection
;
34
std::string
outputDir
;
35
double
outputScalor
= 1.0;
36
size_t
outputPrecision
= 6;
37
};
38
39
ObjSpacePointWriter
(
const
Config
&
cfg
,
40
Acts::Logging::Level
level
=
Acts::Logging::INFO
);
41
42
protected
:
43
ProcessCode
writeT
(
const
AlgorithmContext
& context,
44
const
GeometryIdMultimap<T>
& spacePoints);
45
46
private
:
47
// since class iitself is templated, base class template must be fixed
48
using
Base
=
WriterT<GeometryIdMultimap<T>
>;
49
50
Config
m_cfg
;
51
};
52
53
}
// namespace ActsExamples
54
55
template
<
typename
T>
56
inline
ActsExamples::ObjSpacePointWriter<T>::ObjSpacePointWriter
(
57
const
ObjSpacePointWriter<T>::Config
&
cfg
,
Acts::Logging::Level
level
)
58
:
Base
(cfg.collection,
"ObjSpacePointWriter"
, level),
m_cfg
(cfg) {
59
if
(
m_cfg
.
collection
.empty()) {
60
throw
std::invalid_argument(
"Missing input collection"
);
61
}
62
}
63
64
template
<
typename
T>
65
inline
ActsExamples::ProcessCode
ActsExamples::ObjSpacePointWriter<T>::writeT
(
66
const
ActsExamples::AlgorithmContext
& context,
67
const
ActsExamples::GeometryIdMultimap<T>
& spacePoints) {
68
// open per-event file
69
std::string
path
=
ActsExamples::perEventFilepath
(
70
m_cfg
.outputDir,
"spacepoints.obj"
, context.
eventNumber
);
71
std::ofstream
os
(path,
std::ofstream::out
| std::ofstream::trunc);
72
if
(!os) {
73
throw
std::ios_base::failure(
"Could not open '"
+ path +
"' to write"
);
74
}
75
76
os << std::setprecision(
m_cfg
.outputPrecision);
77
// count the vertex
78
size_t
vertex
= 0;
79
// loop and fill the space point data
80
for
(
auto
& volumeData : spacePoints) {
81
for
(
auto
& layerData : volumeData.second) {
82
for
(
auto
& moduleData : layerData.second) {
83
for
(
auto
&
data
: moduleData.second) {
84
// write the space point
85
os <<
"v "
<<
m_cfg
.outputScalor *
data
.x() <<
" "
86
<<
m_cfg
.outputScalor *
data
.y() <<
" "
87
<<
m_cfg
.outputScalor *
data
.z() <<
'\n'
;
88
os <<
"p "
<< ++vertex <<
'\n'
;
89
}
90
}
91
}
92
}
93
return
ProcessCode::SUCCESS
;
94
}
acts
blob
sPHENIX
Examples
Io
Obj
include
ActsExamples
Plugins
Obj
ObjSpacePointWriter.hpp
Built by
Jin Huang
. updated:
Sat Feb 17 2024 22:17:38
using
1.8.2 with
sPHENIX GitHub integration