184 std::vector<int> tracksterIndices;
185 for (
int i = 0; i < static_cast<int>(tracksters.size());
i++) {
189 float sumClusterEnergy = 0.;
190 for (
const unsigned int &vertex : tracksters[
i].
vertices()) {
191 sumClusterEnergy +=
static_cast<float>(layerClusters[vertex].energy());
195 tracksters[
i].setRegressedEnergy(0.
f);
196 tracksters[
i].zeroProbabilities();
197 tracksterIndices.push_back(
i);
204 int batchSize =
static_cast<int>(tracksterIndices.size());
205 if (batchSize == 0) {
211 tensorflow::Tensor
input(tensorflow::DT_FLOAT, shape);
214 std::vector<tensorflow::Tensor> outputs;
215 std::vector<std::string> outputNames;
224 for (
int i = 0;
i < batchSize;
i++) {
225 const Trackster &trackster = tracksters[tracksterIndices[
i]];
230 std::vector<int> clusterIndices(trackster.vertices().size());
231 for (
int k = 0;
k < (int)trackster.vertices().size();
k++) {
232 clusterIndices[
k] =
k;
234 sort(clusterIndices.begin(), clusterIndices.end(), [&layerClusters, &trackster](
const int &
a,
const int &
b) {
235 return layerClusters[trackster.vertices(a)].energy() > layerClusters[trackster.vertices(
b)].energy();
242 for (
const int &
k : clusterIndices) {
248 float *
features = &
input.tensor<float, 4>()(
i, j, seenClusters[j], 0);
251 *(features++) =
float(cluster.
energy() / float(trackster.vertex_multiplicity(
k)));
263 float *features = &
input.tensor<float, 4>()(
i, j,
k, 0);
272 tensorflow::run(const_cast<tensorflow::Session *>(eidSession), inputList, outputNames, &outputs);
277 float *
energy = outputs[0].flat<
float>().
data();
279 for (
const int &
i : tracksterIndices) {
280 tracksters[
i].setRegressedEnergy(*(energy++));
288 float *probs = outputs[probsIdx].flat<
float>().
data();
290 for (
const int &
i : tracksterIndices) {
291 tracksters[
i].setProbabilities(probs);
292 probs += tracksters[
i].id_probabilities().size();
std::vector< NamedTensor > NamedTensorList
hgcal::RecHitTools rhtools_
const std::string eidOutputNameId_
const std::string eidOutputNameEnergy_
double eta() const
pseudorapidity of cluster centroid
static std::string const input
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
std::vector< float > features(const reco::PreId &ecal, const reco::PreId &hcal, double rho, const reco::BeamSpot &spot, noZS::EcalClusterLazyTools &ecalTools)
void run(Session *session, const NamedTensorList &inputs, const std::vector< std::string > &outputNames, std::vector< Tensor > *outputs, const thread::ThreadPoolOptions &threadPoolOptions)
Abs< T >::type abs(const T &t)
static const int eidNFeatures_
const float eidMinClusterEnergy_
double energy() const
cluster energy
const std::string eidInputName_
char data[epos_bytes_allocation]
double phi() const
azimuthal angle of cluster centroid