14 constexpr
int encodeId(
const int8_t
stName,
const int8_t stEta,
15 const int8_t sector,
const int8_t tech) {
16 return ( tech <<24 | sector <<16 |stEta << 8|
stName);
18 constexpr
double precCutOff(
const double value,
const double cutOff = 1.
e-15) {
29 return StatusCode::SUCCESS;
34 const EventContext& ctx{Gaudi::Hive::currentContext()};
36 constexpr std::string_view delim =
",";
37 std::ofstream
file{std::string(Form(
"event%09zu-",++
m_event))+
"SpacePoints.csv"};
40 file<<
"sectorId"<<delim;
42 file<<
"bucketId"<<delim;
44 file<<
"locPositionX"<<delim;
45 file<<
"locPositionY"<<delim;
46 file<<
"locPositionZ"<<delim;
48 file<<
"locSensorDirX"<<delim;
49 file<<
"locSensorDirY"<<delim;
50 file<<
"locSensorDirZ"<<delim;
52 file<<
"locSensorNormX"<<delim;
53 file<<
"locSensorNormY"<<delim;
54 file<<
"locSensorNormZ"<<delim;
56 file<<
"locPlaneNormX"<<delim;
57 file<<
"locPlaneNormY"<<delim;
58 file<<
"locPlaneNormZ"<<delim;
64 file<<
"driftR"<<delim;
66 file<<
"gasGap"<<delim;
67 file<<
"primaryCh"<<delim;
68 file<<
"measuresEta"<<delim;
69 file<<
"measuresPhi"<<delim;
70 file<<
"measuresTime"<<delim;
73 auto dumpToFile = [&](
const unsigned bucketId,
77 const Identifier& measId = spacePoint.identify();
81 const TechIndex techIdx =
m_idHelperSvc->technologyIndex(measId);
85 primaryCh = idHelper.tube(measId);
90 primaryCh = idHelper.channel(measId);
95 primaryCh = idHelper.channel(measId);
100 primaryCh = idHelper.channel(measId);
105 primaryCh = idHelper.channel(measId);
112 const int secId = encodeId(
static_cast<int8_t
>(spacePoint.msSector()->chamberIndex()),
113 spacePoint.msSector()->side(),
114 spacePoint.msSector()->sector(),
115 static_cast<int8_t
>(techIdx));
118 file<<bucketId<<delim;
119 file<<precCutOff(spacePoint.localPosition().x())<<delim;
120 file<<precCutOff(spacePoint.localPosition().y())<<delim;
121 file<<precCutOff(spacePoint.localPosition().z())<<delim;
123 file<<precCutOff(spacePoint.sensorDirection().x())<<delim;
124 file<<precCutOff(spacePoint.sensorDirection().y())<<delim;
125 file<<precCutOff(spacePoint.sensorDirection().z())<<delim;
127 file<<precCutOff(spacePoint.toNextSensor().x())<<delim;
128 file<<precCutOff(spacePoint.toNextSensor().y())<<delim;
129 file<<precCutOff(spacePoint.toNextSensor().z())<<delim;
131 file<<precCutOff(spacePoint.planeNormal().x())<<delim;
132 file<<precCutOff(spacePoint.planeNormal().y())<<delim;
133 file<<precCutOff(spacePoint.planeNormal().z())<<delim;
140 file<<precCutOff(spacePoint.driftRadius())<<delim;
142 file<<primaryCh<<delim;
143 file<<spacePoint.measuresEta()<<delim;
144 file<<spacePoint.measuresPhi()<<delim;
156 std::vector<unsigned int> layNumbers{};
157 for (
const SpacePointBucket::value_type& spacePoint: *bucket) {
158 const unsigned int layNum = layerSorter.
sectorLayerNum(*spacePoint);
159 if (
std::find(layNumbers.begin(), layNumbers.end(), layNum) == layNumbers.end()) {
160 layNumbers.push_back(layNum);
162 const unsigned gasGap = layNumbers.size()-1;
163 dumpToFile(bucket->bucketId(), *spacePoint,
gasGap);
167 return StatusCode::SUCCESS;