From c01ee199ef99ceed2a3774634e35e9a93f95d2e3 Mon Sep 17 00:00:00 2001 From: leonardo Date: Thu, 29 Oct 2020 17:49:36 +0100 Subject: [PATCH] ran scram build code-format --- .../DeepCombinedONNXJetTagsProducer.cc | 157 +++++++++++------- .../plugins/DeepVertexONNXJetTagsProducer.cc | 140 +++++++++------- 2 files changed, 170 insertions(+), 127 deletions(-) diff --git a/RecoBTag/ONNXRuntime/plugins/DeepCombinedONNXJetTagsProducer.cc b/RecoBTag/ONNXRuntime/plugins/DeepCombinedONNXJetTagsProducer.cc index 1be01629b140a..239a0095f36de 100644 --- a/RecoBTag/ONNXRuntime/plugins/DeepCombinedONNXJetTagsProducer.cc +++ b/RecoBTag/ONNXRuntime/plugins/DeepCombinedONNXJetTagsProducer.cc @@ -40,7 +40,15 @@ class DeepCombinedONNXJetTagsProducer : public edm::stream::EDProducer input_names_; std::vector output_names_; - enum InputIndexes { kGlobal = 0, kChargedCandidates = 1, kNeutralCandidates = 2, kVertices = 3, kGlobal1 = 4, kSeedingTracks = 5, kNeighbourTracks = 6 }; + enum InputIndexes { + kGlobal = 0, + kChargedCandidates = 1, + kNeutralCandidates = 2, + kVertices = 3, + kGlobal1 = 4, + kSeedingTracks = 5, + kNeighbourTracks = 6 + }; constexpr static unsigned n_features_global_ = 15; constexpr static unsigned n_cpf_ = 25; constexpr static unsigned n_features_cpf_ = 16; @@ -60,15 +68,25 @@ class DeepCombinedONNXJetTagsProducer : public edm::stream::EDProducer DeepCombinedONNXJetTagsProducer::input_sizes_{ - n_features_global_, n_cpf_* n_features_cpf_, n_npf_* n_features_npf_, n_sv_* n_features_sv_, - n_features_global1_, n_seed_* n_features_seed_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_}; +const std::vector DeepCombinedONNXJetTagsProducer::input_sizes_{n_features_global_, + n_cpf_* n_features_cpf_, + n_npf_* n_features_npf_, + n_sv_* n_features_sv_, + n_features_global1_, + n_seed_* n_features_seed_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_}; DeepCombinedONNXJetTagsProducer::DeepCombinedONNXJetTagsProducer(const edm::ParameterSet& iConfig, - const ONNXRuntime* cache) + const ONNXRuntime* cache) : src_(consumes(iConfig.getParameter("src"))), flav_names_(iConfig.getParameter>("flav_names")), input_names_(iConfig.getParameter>("input_names")), @@ -87,14 +105,27 @@ void DeepCombinedONNXJetTagsProducer::fillDescriptions(edm::ConfigurationDescrip // pfDeepFlavourJetTags edm::ParameterSetDescription desc; desc.add("src", edm::InputTag("pfDeepFlavourTagInfos")); - desc.add>("input_names", { - "input_1_DFla", "input_2_DFla", "input_3_DFla", "input_4_DFla", - "input_1", "input_2", "input_3", "input_4", "input_5", "input_6", "input_7", "input_8", "input_9", "input_10", "input_11", "input_12"}); + desc.add>("input_names", + {"input_1_DFla", + "input_2_DFla", + "input_3_DFla", + "input_4_DFla", + "input_1", + "input_2", + "input_3", + "input_4", + "input_5", + "input_6", + "input_7", + "input_8", + "input_9", + "input_10", + "input_11", + "input_12"}); desc.add("model_path", edm::FileInPath("RecoBTag/Combined/data/DeepVertex/phase1_deepvertexcombined.onnx")); desc.add>("output_names", {"dense_13"}); - desc.add>( - "flav_names", std::vector{"probb", "probc", "probuds", "probg"}); + desc.add>("flav_names", std::vector{"probb", "probc", "probuds", "probg"}); descriptions.add("pfDeepCombinedJetTags", desc); } @@ -118,32 +149,32 @@ void DeepCombinedONNXJetTagsProducer::produce(edm::Event& iEvent, const edm::Eve output_tags.emplace_back(std::make_unique(ref2prod)); } -// std::cout << "intializing data storage" << std::endl; + // std::cout << "intializing data storage" << std::endl; // init data storage data_.clear(); for (const auto& len : input_sizes_) { data_.emplace_back(tag_infos->size() * len, 0); } -// std::cout << "make inoputs" << std::endl; + // std::cout << "make inoputs" << std::endl; // convert inputs for (unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) { const auto& taginfo = (*tag_infos)[jet_n]; make_inputs(jet_n, taginfo); } - -// std::cout << "run the predictions" << std::endl; + + // std::cout << "run the predictions" << std::endl; // run prediction auto outputs = globalCache()->run(input_names_, data_, {}, output_names_, tag_infos->size())[0]; assert(outputs.size() == flav_names_.size() * tag_infos->size()); // get the outputs -// std::cout << "get predictions" << std::endl; + // std::cout << "get predictions" << std::endl; unsigned i_output = 0; for (unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) { const auto& jet_ref = tag_infos->at(jet_n).jet(); for (std::size_t flav_n = 0; flav_n < flav_names_.size(); flav_n++) { (*(output_tags[flav_n]))[jet_ref] = outputs[i_output]; -// std::cout << outputs[i_output] << " my outttt cccc " << flav_names_[flav_n] << std::endl; + // std::cout << outputs[i_output] << " my outttt cccc " << flav_names_[flav_n] << std::endl; ++i_output; } } @@ -165,7 +196,7 @@ void DeepCombinedONNXJetTagsProducer::make_inputs(unsigned i_jet, const reco::De float* ptr = nullptr; const float* start = nullptr; unsigned offset = 0; - + // jet and other global features offset = i_jet * input_sizes_[kGlobal]; ptr = &data_[kGlobal][offset]; @@ -300,50 +331,48 @@ void DeepCombinedONNXJetTagsProducer::make_inputs(unsigned i_jet, const reco::De // neighbours offset = i_jet * input_sizes_[kNeighbourTracks]; for (std::size_t seed_n = 0; seed_n < max_seed_n; seed_n++) { - const auto& neighbourTracks_features = features.seed_features.at(seed_n).nearTracks; - auto max_neighbour_n = std::min(neighbourTracks_features.size(), (std::size_t)25); - for (std::size_t neighbour_n = 0; neighbour_n < max_neighbour_n; neighbour_n++) { - ptr = &data_[kNeighbourTracks+seed_n][offset + neighbour_n * n_features_neighbor_]; - start = ptr; - *ptr = neighbourTracks_features[neighbour_n].pt; - *(++ptr) = neighbourTracks_features[neighbour_n].eta; - *(++ptr) = neighbourTracks_features[neighbour_n].phi; - *(++ptr) = neighbourTracks_features[neighbour_n].dz; - *(++ptr) = neighbourTracks_features[neighbour_n].dxy; - *(++ptr) = neighbourTracks_features[neighbour_n].mass; - *(++ptr) = neighbourTracks_features[neighbour_n].ip3D; - *(++ptr) = neighbourTracks_features[neighbour_n].sip3D; - *(++ptr) = neighbourTracks_features[neighbour_n].ip2D; - *(++ptr) = neighbourTracks_features[neighbour_n].sip2D; - *(++ptr) = neighbourTracks_features[neighbour_n].distPCA; - *(++ptr) = neighbourTracks_features[neighbour_n].dsigPCA; - *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed2D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed3D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors2D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors3D; - *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dist_PCAjetAxis; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprod_PCAjetMomenta; - *(++ptr) = neighbourTracks_features[neighbour_n].deta_PCAjetDirs; - *(++ptr) = neighbourTracks_features[neighbour_n].dphi_PCAjetDirs; - assert(start + n_features_neighbor_ - 1 == ptr); - - + const auto& neighbourTracks_features = features.seed_features.at(seed_n).nearTracks; + auto max_neighbour_n = std::min(neighbourTracks_features.size(), (std::size_t)25); + for (std::size_t neighbour_n = 0; neighbour_n < max_neighbour_n; neighbour_n++) { + ptr = &data_[kNeighbourTracks + seed_n][offset + neighbour_n * n_features_neighbor_]; + start = ptr; + *ptr = neighbourTracks_features[neighbour_n].pt; + *(++ptr) = neighbourTracks_features[neighbour_n].eta; + *(++ptr) = neighbourTracks_features[neighbour_n].phi; + *(++ptr) = neighbourTracks_features[neighbour_n].dz; + *(++ptr) = neighbourTracks_features[neighbour_n].dxy; + *(++ptr) = neighbourTracks_features[neighbour_n].mass; + *(++ptr) = neighbourTracks_features[neighbour_n].ip3D; + *(++ptr) = neighbourTracks_features[neighbour_n].sip3D; + *(++ptr) = neighbourTracks_features[neighbour_n].ip2D; + *(++ptr) = neighbourTracks_features[neighbour_n].sip2D; + *(++ptr) = neighbourTracks_features[neighbour_n].distPCA; + *(++ptr) = neighbourTracks_features[neighbour_n].dsigPCA; + *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed2D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed3D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors2D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors3D; + *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dist_PCAjetAxis; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprod_PCAjetMomenta; + *(++ptr) = neighbourTracks_features[neighbour_n].deta_PCAjetDirs; + *(++ptr) = neighbourTracks_features[neighbour_n].dphi_PCAjetDirs; + assert(start + n_features_neighbor_ - 1 == ptr); } } } diff --git a/RecoBTag/ONNXRuntime/plugins/DeepVertexONNXJetTagsProducer.cc b/RecoBTag/ONNXRuntime/plugins/DeepVertexONNXJetTagsProducer.cc index 3333c75bbb72a..45b357e4e7c38 100644 --- a/RecoBTag/ONNXRuntime/plugins/DeepVertexONNXJetTagsProducer.cc +++ b/RecoBTag/ONNXRuntime/plugins/DeepVertexONNXJetTagsProducer.cc @@ -53,14 +53,20 @@ class DeepVertexONNXJetTagsProducer : public edm::stream::EDProducer DeepVertexONNXJetTagsProducer::input_sizes_{ - n_features_global_, n_seed_* n_features_seed_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, - n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_, n_neighbor_* n_features_neighbor_}; - -DeepVertexONNXJetTagsProducer::DeepVertexONNXJetTagsProducer(const edm::ParameterSet& iConfig, - const ONNXRuntime* cache) +const std::vector DeepVertexONNXJetTagsProducer::input_sizes_{n_features_global_, + n_seed_* n_features_seed_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_, + n_neighbor_* n_features_neighbor_}; + +DeepVertexONNXJetTagsProducer::DeepVertexONNXJetTagsProducer(const edm::ParameterSet& iConfig, const ONNXRuntime* cache) : src_(consumes(iConfig.getParameter("src"))), flav_names_(iConfig.getParameter>("flav_names")), input_names_(iConfig.getParameter>("input_names")), @@ -79,12 +85,22 @@ void DeepVertexONNXJetTagsProducer::fillDescriptions(edm::ConfigurationDescripti // pfDeepFlavourJetTags edm::ParameterSetDescription desc; desc.add("src", edm::InputTag("pfDeepFlavourTagInfos")); - desc.add>("input_names", {"input_1", "input_2", "input_3", "input_4", "input_5", "input_6", "input_7", "input_8", "input_9", "input_10", "input_11", "input_12"}); - desc.add("model_path", - edm::FileInPath("RecoBTag/Combined/data/DeepVertex/phase1_deepvertex.onnx")); + desc.add>("input_names", + {"input_1", + "input_2", + "input_3", + "input_4", + "input_5", + "input_6", + "input_7", + "input_8", + "input_9", + "input_10", + "input_11", + "input_12"}); + desc.add("model_path", edm::FileInPath("RecoBTag/Combined/data/DeepVertex/phase1_deepvertex.onnx")); desc.add>("output_names", {"dense_6"}); - desc.add>( - "flav_names", std::vector{"probb", "probc", "probuds", "probg"}); + desc.add>("flav_names", std::vector{"probb", "probc", "probuds", "probg"}); descriptions.add("pfDeepVertexJetTags", desc); } @@ -108,32 +124,32 @@ void DeepVertexONNXJetTagsProducer::produce(edm::Event& iEvent, const edm::Event output_tags.emplace_back(std::make_unique(ref2prod)); } -// std::cout << "intializing data storage" << std::endl; + // std::cout << "intializing data storage" << std::endl; // init data storage data_.clear(); for (const auto& len : input_sizes_) { data_.emplace_back(tag_infos->size() * len, 0); } -// std::cout << "make inoputs" << std::endl; + // std::cout << "make inoputs" << std::endl; // convert inputs for (unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) { const auto& taginfo = (*tag_infos)[jet_n]; make_inputs(jet_n, taginfo); } - -// std::cout << "run the predictions" << std::endl; + + // std::cout << "run the predictions" << std::endl; // run prediction auto outputs = globalCache()->run(input_names_, data_, {}, output_names_, tag_infos->size())[0]; assert(outputs.size() == flav_names_.size() * tag_infos->size()); // get the outputs -// std::cout << "get predictions" << std::endl; + // std::cout << "get predictions" << std::endl; unsigned i_output = 0; for (unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) { const auto& jet_ref = tag_infos->at(jet_n).jet(); for (std::size_t flav_n = 0; flav_n < flav_names_.size(); flav_n++) { (*(output_tags[flav_n]))[jet_ref] = outputs[i_output]; -// std::cout << outputs[i_output] << " my outttt " << flav_names_[flav_n] << std::endl; + // std::cout << outputs[i_output] << " my outttt " << flav_names_[flav_n] << std::endl; ++i_output; } } @@ -202,50 +218,48 @@ void DeepVertexONNXJetTagsProducer::make_inputs(unsigned i_jet, const reco::Deep // neighbours offset = i_jet * input_sizes_[kNeighbourTracks]; for (std::size_t seed_n = 0; seed_n < max_seed_n; seed_n++) { - const auto& neighbourTracks_features = features.seed_features.at(seed_n).nearTracks; - auto max_neighbour_n = std::min(neighbourTracks_features.size(), (std::size_t)25); - for (std::size_t neighbour_n = 0; neighbour_n < max_neighbour_n; neighbour_n++) { - ptr = &data_[kNeighbourTracks+seed_n][offset + neighbour_n * n_features_neighbor_]; - start = ptr; - *ptr = neighbourTracks_features[neighbour_n].pt; - *(++ptr) = neighbourTracks_features[neighbour_n].eta; - *(++ptr) = neighbourTracks_features[neighbour_n].phi; - *(++ptr) = neighbourTracks_features[neighbour_n].dz; - *(++ptr) = neighbourTracks_features[neighbour_n].dxy; - *(++ptr) = neighbourTracks_features[neighbour_n].mass; - *(++ptr) = neighbourTracks_features[neighbour_n].ip3D; - *(++ptr) = neighbourTracks_features[neighbour_n].sip3D; - *(++ptr) = neighbourTracks_features[neighbour_n].ip2D; - *(++ptr) = neighbourTracks_features[neighbour_n].sip2D; - *(++ptr) = neighbourTracks_features[neighbour_n].distPCA; - *(++ptr) = neighbourTracks_features[neighbour_n].dsigPCA; - *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed2D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed3D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors2D; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors3D; - *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonSeed; - *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonTrack; - *(++ptr) = neighbourTracks_features[neighbour_n].dist_PCAjetAxis; - *(++ptr) = neighbourTracks_features[neighbour_n].dotprod_PCAjetMomenta; - *(++ptr) = neighbourTracks_features[neighbour_n].deta_PCAjetDirs; - *(++ptr) = neighbourTracks_features[neighbour_n].dphi_PCAjetDirs; - assert(start + n_features_neighbor_ - 1 == ptr); - - + const auto& neighbourTracks_features = features.seed_features.at(seed_n).nearTracks; + auto max_neighbour_n = std::min(neighbourTracks_features.size(), (std::size_t)25); + for (std::size_t neighbour_n = 0; neighbour_n < max_neighbour_n; neighbour_n++) { + ptr = &data_[kNeighbourTracks + seed_n][offset + neighbour_n * n_features_neighbor_]; + start = ptr; + *ptr = neighbourTracks_features[neighbour_n].pt; + *(++ptr) = neighbourTracks_features[neighbour_n].eta; + *(++ptr) = neighbourTracks_features[neighbour_n].phi; + *(++ptr) = neighbourTracks_features[neighbour_n].dz; + *(++ptr) = neighbourTracks_features[neighbour_n].dxy; + *(++ptr) = neighbourTracks_features[neighbour_n].mass; + *(++ptr) = neighbourTracks_features[neighbour_n].ip3D; + *(++ptr) = neighbourTracks_features[neighbour_n].sip3D; + *(++ptr) = neighbourTracks_features[neighbour_n].ip2D; + *(++ptr) = neighbourTracks_features[neighbour_n].sip2D; + *(++ptr) = neighbourTracks_features[neighbour_n].distPCA; + *(++ptr) = neighbourTracks_features[neighbour_n].dsigPCA; + *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].x_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].y_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].z_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].xerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].yerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].zerr_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed2D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeed3D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors2D; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprodTrackSeedVectors3D; + *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonSeed; + *(++ptr) = neighbourTracks_features[neighbour_n].pvd_PCAonTrack; + *(++ptr) = neighbourTracks_features[neighbour_n].dist_PCAjetAxis; + *(++ptr) = neighbourTracks_features[neighbour_n].dotprod_PCAjetMomenta; + *(++ptr) = neighbourTracks_features[neighbour_n].deta_PCAjetDirs; + *(++ptr) = neighbourTracks_features[neighbour_n].dphi_PCAjetDirs; + assert(start + n_features_neighbor_ - 1 == ptr); } } }