Skip to content

Commit

Permalink
rebase of werdmann:revised-primaryvertexproducer on top of 13_1_0_pre1
Browse files Browse the repository at this point in the history
  • Loading branch information
missirol authored and kdeleo committed Jan 8, 2024
1 parent 9fca027 commit 7ebb5ef
Show file tree
Hide file tree
Showing 26 changed files with 1,729 additions and 1,366 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#ifndef AdaptiveChisquarePrimaryVertexFitter_h
#define AdaptiveChisquarePrimaryVertexFitter_h

/**\class AdaptiveChisquarePrimaryVertexFitter
Description: Adapter for using the MultiPrimaryVertexFitter to fit vertices one-by-one instead of all simultaneously
*/

//#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexFitterBase.h"
#include "RecoVertex/PrimaryVertexProducer/interface/MultiPrimaryVertexFitter.h"

class AdaptiveChisquarePrimaryVertexFitter : public PrimaryVertexFitterBase {
public:
AdaptiveChisquarePrimaryVertexFitter(const double chi2cutoff, const double mintrkweight):fitter(new MultiPrimaryVertexFitter(chi2cutoff, mintrkweight)){};
~AdaptiveChisquarePrimaryVertexFitter() override = default; // FIXME, delete the fitter

std::vector<TransientVertex> fit(const std::vector<reco::TransientTrack> & dummy, const std::vector<TransientVertex> & clusters, const reco::BeamSpot & beamspot, const bool useBeamConstraint) override{
// fit the clusters one-by-one
std::vector<TransientVertex> pvs;
std::vector<TransientVertex> seed(1);
for(auto & cluster : clusters){
if ((useBeamConstraint && (cluster.originalTracks().size() > 1)) || (cluster.originalTracks().size() > 1)){
std::vector<reco::TransientTrack> tracklist = cluster.originalTracks();
seed[0] = cluster;
auto result = fitter->fit(tracklist, seed, beamspot, useBeamConstraint);
if((result.size() > 0) && (result[0].isValid())){
pvs.push_back(result[0]);
}
}
}
return pvs;
};

protected:
// configuration
MultiPrimaryVertexFitter * fitter; // Kalman or Adaptive
};
#endif
82 changes: 0 additions & 82 deletions RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ.h

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,10 @@ class DAClusterizerInZ_vect final : public TrackClusterizerInZ {
std::vector<std::vector<reco::TransientTrack> > clusterize(
const std::vector<reco::TransientTrack> &tracks) const override;

std::vector<TransientVertex> vertices(const std::vector<reco::TransientTrack> &tracks) const;
std::vector<TransientVertex> vertices(const std::vector<reco::TransientTrack> &tracks) const override;
std::vector<TransientVertex> vertices_no_blocks(const std::vector<reco::TransientTrack> &tracks) const;
std::vector<TransientVertex> vertices_in_blocks(const std::vector<reco::TransientTrack> &tracks) const;
std::vector<TransientVertex> fill_vertices(double beta, double rho0, track_t &tracks, vertex_t &vertices) const;

track_t fill(const std::vector<reco::TransientTrack> &tracks) const;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#ifndef MultiPrimaryVertexFitter_h
#define MultiPrimaryVertexFitter_h

/**\class MultiPrimaryVertexFitter
Description: simultaneaous fit of primary vertices
*/

//#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexFitterBase.h"

typedef ROOT::Math::SMatrix<double,3> Error3;

class MultiPrimaryVertexFitter : public PrimaryVertexFitterBase {
public:
//MultiPrimaryVertexFitter(const edm::ParameterSet &conf);
MultiPrimaryVertexFitter(double chi2cutoff=2.5, double mintrkweight=0.2);
~MultiPrimaryVertexFitter() override = default;

std::vector<TransientVertex> fit(const std::vector<reco::TransientTrack> &, const std::vector<TransientVertex> &, const reco::BeamSpot &, const bool) override;

protected:
std::vector<reco::TransientTrack> input_tracks;

struct TrackInfo{
float ipsig;// temp
float x,y;
float z;
float odz2;
double S11, S22, S12;
Error3 C;
double c[3];
double a1[3],a2[3];
double b1,b2;
double d;
//unsigned int kmin, kmax;
std::vector<double> weight;
};

void fill_trackinfo(const std::vector<reco::TransientTrack> &, const reco::BeamSpot &);
void clean(const std::vector<reco::TransientTrack> & tracks, const std::vector<TransientVertex> & clusters);
void fill_weights(const double beta, const reco::BeamSpot &, const double Zcutoff=0.);
void dump(const std::string &, const::std::vector<TransientVertex> & clusters, const std::vector<reco::TransientTrack> & tracks, const reco::BeamSpot & beamspot, const double zmin, const double zmax, const unsigned int nit);
double single_fit(const reco::BeamSpot &, float beam_weight, const bool fill_covariances = false);
std::vector<TrackInfo> trackinfo;

std::vector<double> xv;
std::vector<double> yv;
std::vector<double> zv;
std::vector<double> rho_vtx;
std::vector<Error3> V_vtx;
std::vector<float> chi2_vtx;
std::vector<float> d2Fperp_vtx;

int hdump=0; // FIXME debugging only

// configuration
double chi2_cutoff_;
double min_trackweight_;

};
#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#ifndef PrimaryVertexFitterBase_h
#define PrimaryVertexFitterBase_h

/**\class PrimaryVertexFitterBase
Description: base class for primary vertex fitters
*/

//#include "FWCore/ParameterSet/interface/ParameterSet.h"
namespace edm {
class ParameterSet;
class ParameterSetDescription;
}

namespace reco {
class BeamSpot;
class TransientTrack;
}
class TransientVertex;

//#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
//#include "TrackingTools/TransientTrack/interface/TransientTrack.h"

class PrimaryVertexFitterBase {
public:
PrimaryVertexFitterBase(const edm::ParameterSet &conf){}
PrimaryVertexFitterBase(){}
virtual ~PrimaryVertexFitterBase() = default;
//virtual std::vector<TransientVertex> vertices(const std::vector<TransientVertex> &, const reco::BeamSpot &, const bool ) = 0;
virtual std::vector<TransientVertex> fit(const std::vector<reco::TransientTrack> &, const std::vector<TransientVertex> &, const reco::BeamSpot &, const bool ) = 0;
};
#endif
23 changes: 18 additions & 5 deletions RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexProducer.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

// -*- C++ -*-
//
// Package: PrimaryVertexProducer
Expand Down Expand Up @@ -41,15 +42,24 @@
#include "RecoVertex/PrimaryVertexProducer/interface/HITrackFilterForPVFinding.h"
#include "RecoVertex/PrimaryVertexProducer/interface/GapClusterizerInZ.h"
#include "RecoVertex/PrimaryVertexProducer/interface/DAClusterizerInZ.h"
#include "RecoVertex/PrimaryVertexProducer/interface/WeightedMeanFitter.h"
#include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h"
#include "RecoVertex/AdaptiveVertexFit/interface/AdaptiveVertexFitter.h"
//#include "RecoVertex/VertexTools/interface/VertexDistanceXY.h"
#include "RecoVertex/PrimaryVertexProducer/interface/PrimaryVertexFitterBase.h"
#include "RecoVertex/PrimaryVertexProducer/interface/SequentialPrimaryVertexFitterAdapter.h"
#include "RecoVertex/PrimaryVertexProducer/interface/AdaptiveChisquarePrimaryVertexFitter.h"
#include "RecoVertex/PrimaryVertexProducer/interface/MultiPrimaryVertexFitter.h"
#include "RecoVertex/PrimaryVertexProducer/interface/WeightedMeanFitter.h"

#include "RecoVertex/VertexPrimitives/interface/VertexException.h"
#include <algorithm>
#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h"
#include "RecoVertex/VertexTools/interface/VertexCompatibleWithBeam.h"
#include "DataFormats/Common/interface/ValueMap.h"
// vertex timing
#include "RecoVertex/PrimaryVertexProducer/interface/VertexTimeAlgorithmBase.h"
#include "RecoVertex/PrimaryVertexProducer/interface/VertexTimeAlgorithmFromTracksPID.h"
#include "RecoVertex/PrimaryVertexProducer/interface/VertexTimeAlgorithmLegacy4D.h"

//
// class declaration
//
Expand All @@ -75,15 +85,19 @@ class PrimaryVertexProducer : public edm::stream::EDProducer<> {

// vtx fitting algorithms
struct algo {
VertexFitter<5>* fitter;
PrimaryVertexFitterBase* pv_fitter;
VertexCompatibleWithBeam* vertexSelector;
std::string label;
bool useBeamConstraint;
double minNdof;
bool is_4D;
VertexTimeAlgorithmBase* pv_time_estimator;
};

std::vector<algo> algorithms;

//VertexTimeAlgorithmBase * theVertexTimeAlgorithm;

edm::ParameterSet theConfig;
bool fVerbose;

Expand All @@ -95,6 +109,5 @@ class PrimaryVertexProducer : public edm::stream::EDProducer<> {
edm::EDGetTokenT<edm::ValueMap<float> > trkTimesToken;
edm::EDGetTokenT<edm::ValueMap<float> > trkTimeResosToken;

bool f4D;
bool weightFit;
bool useTransientTrackTime;
};

This file was deleted.

Loading

0 comments on commit 7ebb5ef

Please sign in to comment.