From 5d39c91b7efae546ea4735c67abb403e7dc78e61 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Tue, 31 Jan 2017 08:44:18 +0100 Subject: [PATCH 01/23] Added the CTPPSDiamondLocalTrack object Conflicts: DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h DataFormats/CTPPSReco/src/classes.h DataFormats/CTPPSReco/src/classes_def.xml RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondRecHitProducer.cc --- .../interface/CTPPSDiamondLocalTrack.h | 87 +++++++++++++++++++ .../CTPPSReco/src/CTPPSDiamondLocalTrack.cc | 19 ++++ DataFormats/CTPPSReco/src/classes.h | 10 ++- DataFormats/CTPPSReco/src/classes_def.xml | 9 ++ .../plugins/CTPPSDiamondLocalTrackFitter.cc | 78 +++++++++++++++++ 5 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h create mode 100644 DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc create mode 100644 RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h new file mode 100644 index 0000000000000..57777d1a07c1a --- /dev/null +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -0,0 +1,87 @@ +/**************************************************************************** + * + * This is a part of CTPPS offline software. + * Authors: + * Laurent Forthomme (laurent.forthomme@cern.ch) + * Nicola Minafra nicola.minafra@cern.ch) + * + ****************************************************************************/ + +#ifndef DataFormats_CTPPSReco_CTPPSDiamondLocalTrack +#define DataFormats_CTPPSReco_CTPPSDiamondLocalTrack + +#include "DataFormats/Math/interface/Point3D.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" + +//---------------------------------------------------------------------------------------------------- + +class CTPPSDiamondLocalTrack +{ + public: + CTPPSDiamondLocalTrack() : + tx_( 0. ), tx_sigma_( 0. ), + ty_( 0. ), ty_sigma_( 0. ), + chi_squared_( 0. ), + valid_( false ) {;} + virtual ~CTPPSDiamondLocalTrack() {;} + + //--- spatial get'ters + + inline double getX0() const { return pos0_.x(); } + inline double getX0Sigma() const { return x0_sigma_; } + + inline double getY0() const { return pos0_.y(); } + inline double getY0Sigma() const { return y0_sigma_; } + + inline double getZ0() const { return pos0_.z(); } + + inline double getTx() const { return tx_; } + inline double getTxSigma() const { return tx_sigma_; } + + inline double getTy() const { return ty_; } + inline double getTySigma() const { return ty_sigma_; } + + inline double getChiSquared() const { return chi_squared_; } + inline void setChiSquared( const double& chisq ) { chi_squared_ = chisq; } + + //inline double getChiSquaredOverNDF() const { return chiSquared_ / (track_hits_vector_.size() - 4); } + + //FIXME include timing validity checks too? + inline bool isValid() const { return valid_; } + inline void setValid(bool valid) { valid_ = valid; } + + //--- temporal get'ters + + inline double getT() const { return t_; } + inline double getTSigma() const { return t_sigma_; } + + friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); + + private: + //FIXME placeholder variables only! + // replace us with values computed from tracking algorithm + + //--- spatial information + + math::XYZPoint pos0_; + + double x0_sigma_, y0_sigma_; + // track angular information (FIXME: move to a momentum_ 3-vector?) + double tx_, tx_sigma_; + double ty_, ty_sigma_; + + /// fit chi^2 + double chi_squared_; + + /// fit valid? + bool valid_; + + //--- timing information + + double t_; + double t_sigma_; + +}; + +#endif diff --git a/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc b/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc new file mode 100644 index 0000000000000..33c16778af277 --- /dev/null +++ b/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc @@ -0,0 +1,19 @@ +/**************************************************************************** + * + * This is a part of CTPPS offline software. + * Authors: + * Laurent Forthomme (laurent.forthomme@cern.ch) + * Nicola Minafra (nicola.minafra@cern.ch) + * + ****************************************************************************/ + +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" + +//---------------------------------------------------------------------------------------------------- + +bool +operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) +{ + //FIXME also sort by space coordinate? + return ( lhs.getT() < rhs.getT() ); +} diff --git a/DataFormats/CTPPSReco/src/classes.h b/DataFormats/CTPPSReco/src/classes.h index 95ca909f68a0d..67bcd8bc127af 100644 --- a/DataFormats/CTPPSReco/src/classes.h +++ b/DataFormats/CTPPSReco/src/classes.h @@ -10,6 +10,7 @@ #include "DataFormats/CTPPSReco/interface/TotemRPLocalTrack.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" #include "DataFormats/CTPPSReco/interface/CTPPSLocalTrackLite.h" @@ -52,11 +53,18 @@ namespace DataFormats_CTPPSReco { CTPPSDiamondRecHit ctd_rh; edm::Ptr ptr_ctd_rh; edm::Wrapper wrp_ctd_rh; - std::vector vec_rh; + std::vector vec_ctd_rh; std::vector< edm::DetSet > vec_ds_rh; edm::DetSet ds_rh; edm::DetSetVector dsv_ctd_rh; edm::Wrapper< edm::DetSetVector > wrp_dsv_ctd_rh; + edm::Wrapper< std::vector > wrp_vec_ctd_rh; + + CTPPSDiamondLocalTrack ctd_lt; + edm::Ptr ptr_ctd_lt; + edm::Wrapper wrp_ctd_lt; + std::vector vec_ctd_lt; + edm::Wrapper< std::vector > wrp_vec_ctd_lt; //--- common objects diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 58d4de5901377..31f5f5fd163fd 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -55,6 +55,15 @@ + + + + + + + + + diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc new file mode 100644 index 0000000000000..5f18ae7875559 --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -0,0 +1,78 @@ +/**************************************************************************** + * + * This is a part of CTPPS offline software. + * Authors: + * Laurent Forthomme (laurent.forthomme@cern.ch) + * Nicola Minafra (nicola.minafra@cern.ch) + * + ****************************************************************************/ + +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/Common/interface/View.h" + +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" + +class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> +{ + public: + explicit CTPPSDiamondLocalTrackFitter( const edm::ParameterSet& ); + ~CTPPSDiamondLocalTrackFitter(); + + static void fillDescriptions( edm::ConfigurationDescriptions& ); + + private: + virtual void produce( edm::Event&, const edm::EventSetup& ) override; + + edm::EDGetTokenT< edm::View > recHitsToken_; +}; + +CTPPSDiamondLocalTrackFitter::CTPPSDiamondLocalTrackFitter( const edm::ParameterSet& iConfig ) : + recHitsToken_( consumes< edm::View >( iConfig.getParameter( "recHitsTag" ) ) ) +{ + produces< std::vector >(); +} + +CTPPSDiamondLocalTrackFitter::~CTPPSDiamondLocalTrackFitter() +{ +} + +void +CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup& iSetup ) +{ + std::unique_ptr< std::vector > pOut( new std::vector ); + + edm::Handle< edm::View > recHits; + iEvent.getByToken( recHitsToken_, recHits ); + + for ( unsigned short i = 0; i < recHits->size(); i++ ) { + const edm::Ptr recHit = recHits->ptrAt( i ); + // ... + // if you want to insert a new CTPPSDiamondLocalTrack object to the output collection, simply use: + // pOut->push_back( CTPPSDiamondLocalTrack(...) ); + } + + + iEvent.put( std::move( pOut ) ); +} + +void +CTPPSDiamondLocalTrackFitter::fillDescriptions( edm::ConfigurationDescriptions& descr ) +{ + // The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descr.addDefault( desc ); +} + +DEFINE_FWK_MODULE( CTPPSDiamondLocalTrackFitter ); From 17dfa017c96d0694769dced1d5e27eb469a5cb6a Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Tue, 31 Jan 2017 08:55:06 +0100 Subject: [PATCH 02/23] New cfi file for the local tracks fitter Conflicts: DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondRecHitProducerAlgorithm.h RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondRecHitProducer.cc RecoCTPPS/TotemRPLocal/python/ctppsDiamondRecHitProducer_cfi.py RecoCTPPS/TotemRPLocal/src/CTPPSDiamondRecHitProducerAlgorithm.cc --- .../TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py new file mode 100644 index 0000000000000..d222213691725 --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", + verbosity = cms.int32(0), + recHitLabel = cms.InputTag("ctppsDiamondRecHit"), +) From 26dd3acf57baf8ec63b53486a870c2f070441fcf Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 16 Jan 2017 14:41:34 +0100 Subject: [PATCH 03/23] first attempt of reco --- .../interface/CTPPSDiamondTrackRecognition.h | 55 +++++++++++ .../src/CTPPSDiamondTrackRecognition.cc | 92 +++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h create mode 100644 RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h new file mode 100644 index 0000000000000..be0806700068b --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -0,0 +1,55 @@ +/**************************************************************************** + * + * This is a part of CTPPS offline software. + * Authors: + * Laurent Forthomme (laurent.forthomme@cern.ch) + * Nicola Minafra (nicola.minafra@cern.ch) + * + ****************************************************************************/ + +#ifndef RecoCTPPS_TotemRPLocal_CTPPSDiamondTrackRecognition +#define RecoCTPPS_TotemRPLocal_CTPPSDiamondTrackRecognition + +#include "DataFormats/Common/interface/DetSet.h" +#include "DataFormats/Common/interface/DetSetVector.h" + +#include "Geometry/VeryForwardGeometryBuilder/interface/TotemRPGeometry.h" +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" +#include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" + +#include "TF1.h" + +#define LOWER_HIT_LIMIT_MM -1e3 +#define HIGHER_HIT_LIMIT_MM 1e3 +#define PAD_FUNCTION (1/(1+exp(-(x-[0])/[2])))*(1/(1+exp((x-[0]-[1])/[2]))) + +/** + * \brief Class performing smart reconstruction for CTPPS Diamond Detectors. +**/ + +class CTPPSDiamondTrackRecognition +{ + public: + CTPPSDiamondTrackRecognition(const double threshold = 2, const double sigma = 0., const double resolution_mm=0.01); + + ~CTPPSDiamondTrackRecognition(); + + void clear(); + + void addHit(const CTPPSDiamondRecHit recHit); + + void produceTracks(DetSet &tracks); + + protected: + const double resolution_mm; + + /// pointer to the geometry + const TotemRPGeometry* geometry; + + /// Function for pad efficiency + vector hit_function_v; + +}; + +#endif + diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc new file mode 100644 index 0000000000000..7be830bc85cc4 --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -0,0 +1,92 @@ +/**************************************************************************** + * + * This is a part of CTPPS offline software. + * Authors: + * Laurent Forthomme (laurent.forthomme@cern.ch) + * Nicola Minafra (nicola.minafra@cern.ch) + * + ****************************************************************************/ + +#include "RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h" + +#include +#include +#include +#include + +//#define CTPPS_DEBUG 1 + +using namespace std; +using namespace edm; + + +//---------------------------------------------------------------------------------------------------- + +CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition(const double threshold, const double sigma, const double resolution_mm) : + resolution_mm(resolution_mm), geometry(NULL), hit_function("hit_function","PAD_FUNCTION", LOWER_HIT_LIMIT_MM, HIGHER_HIT_LIMIT_MM) { + if (sigma==.0) sigma=1e-10; +} + +//---------------------------------------------------------------------------------------------------- + +CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() { +} + + +//---------------------------------------------------------------------------------------------------- + +CTPPSDiamondTrackRecognition::clear() { + hit_function_v.clear(); +} + + + +//---------------------------------------------------------------------------------------------------- + +void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { + string f_name("hit_f_"); + f_name.append(to_string(hit_function_v.size() + 1)); + TF1 hit_f(f_name.c_str(), PAD_FUNCTION, LOWER_HIT_LIMIT_MM, HIGHER_HIT_LIMIT_MM); + + double center = recHit.getX(); //TODO retrive using geometry + double width = recHit.getXWidth(); //TODO retrive using geometry + hit_f.SetParameters(center, width, sigma); + + hit_function_v.push_back(hit_f); + +} + + +//---------------------------------------------------------------------------------------------------- + +void CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { + vector hit_profile((HIGHER_HIT_LIMIT_MM - LOWER_HIT_LIMIT_MM) / resolution_mm, .0); + for (int i=0; i::const_iterator fun=hit_function_v.begin(); fun!=hit_function_v.end(); ++fun) { + hit_profile[i] += fun_it->Eval(LOWER_HIT_LIMIT_MM + i*resolution_mm); + } + } + + bool below = true; // below the threhold + int track_start_n = 0; + int track_width_n = 0; + for (int i=0; i= threhold) { // going above the threhold + track_start_n = i; + below = false; + } + if (!below && hit_profile[i] < threhold) { // going back below the threhold + below = true; + //store track + CTPPSDiamondLocalTrack track; + track.setX0Sigma( (i-track_start_n)*resolution_mm ); + track.setX0( LOWER_HIT_LIMIT_MM + track_start_n*resolution_mm + track.getX0Sigma()/2); + tracks.push_back(track); + } + } + +} + + + + From d8d0af14dd3cf97fae52eef038922b0f2cf0da02 Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 16 Jan 2017 15:35:27 +0100 Subject: [PATCH 04/23] Added setters to CTPPS*LocalTrack and RecHit Conflicts: DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h --- .../interface/CTPPSDiamondLocalTrack.h | 22 ++++++++++++ .../interface/CTPPSDiamondTrackRecognition.h | 13 ++++--- .../src/CTPPSDiamondTrackRecognition.cc | 35 ++++++++++--------- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 57777d1a07c1a..03d1612e5f854 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -43,6 +43,23 @@ class CTPPSDiamondLocalTrack inline double getTySigma() const { return ty_sigma_; } inline double getChiSquared() const { return chi_squared_; } + + //--- spatial set'ters + + inline void setX0(const double& x0) { pos0_.SetX(x0); } + inline void setX0Sigma(const double& x0_sigma) { x0_sigma_=x0_sigma; } + + inline void setY0(const double& y0) { pos0_.SetY(y0); } + inline void setY0Sigma(const double& y0_sigma) { y0_sigma_=y0_sigma; } + + inline void setZ0(const double& z) { pos0_.SetZ(z); } + + inline void setTx(const double& tx) { tx_=tx; } + inline void setTxSigma(const double& tx_sigma) { tx_sigma_=tx_sigma; } + + inline void setTy(const double& ty) { ty_=ty; } + inline void setTySigma(const double& ty_sigma) { ty_sigma_=ty_sigma; } + inline void setChiSquared( const double& chisq ) { chi_squared_ = chisq; } //inline double getChiSquaredOverNDF() const { return chiSquared_ / (track_hits_vector_.size() - 4); } @@ -55,6 +72,11 @@ class CTPPSDiamondLocalTrack inline double getT() const { return t_; } inline double getTSigma() const { return t_sigma_; } + + //--- temporal set'ters + + inline void setT( const double& t) { t_=t; } + inline void setTSigma( const double& t_sigma) { t_sigma_=t_sigma; } friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index be0806700068b..6b97162f4e392 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -18,10 +18,7 @@ #include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" #include "TF1.h" - -#define LOWER_HIT_LIMIT_MM -1e3 -#define HIGHER_HIT_LIMIT_MM 1e3 -#define PAD_FUNCTION (1/(1+exp(-(x-[0])/[2])))*(1/(1+exp((x-[0]-[1])/[2]))) +#include /** * \brief Class performing smart reconstruction for CTPPS Diamond Detectors. @@ -38,16 +35,18 @@ class CTPPSDiamondTrackRecognition void addHit(const CTPPSDiamondRecHit recHit); - void produceTracks(DetSet &tracks); + void produceTracks(edm::DetSet &tracks); protected: - const double resolution_mm; + const double threshold_; + const double resolution_mm_; + double sigma_; /// pointer to the geometry const TotemRPGeometry* geometry; /// Function for pad efficiency - vector hit_function_v; + std::vector hit_function_v; }; diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 7be830bc85cc4..7eb12035c302f 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -16,6 +16,10 @@ //#define CTPPS_DEBUG 1 +#define LOWER_HIT_LIMIT_MM -1e3 +#define HIGHER_HIT_LIMIT_MM 1e3 +#define PAD_FUNCTION "(1/(1+exp(-(x-[0])/[2])))*(1/(1+exp((x-[0]-[1])/[2])))" + using namespace std; using namespace edm; @@ -23,8 +27,8 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition(const double threshold, const double sigma, const double resolution_mm) : - resolution_mm(resolution_mm), geometry(NULL), hit_function("hit_function","PAD_FUNCTION", LOWER_HIT_LIMIT_MM, HIGHER_HIT_LIMIT_MM) { - if (sigma==.0) sigma=1e-10; + threshold_(threshold), resolution_mm_(resolution_mm), sigma_(sigma), geometry(NULL) { + if (sigma_==.0) sigma_=1e-10; } //---------------------------------------------------------------------------------------------------- @@ -35,7 +39,7 @@ CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() { //---------------------------------------------------------------------------------------------------- -CTPPSDiamondTrackRecognition::clear() { +void CTPPSDiamondTrackRecognition::clear() { hit_function_v.clear(); } @@ -48,9 +52,9 @@ void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { f_name.append(to_string(hit_function_v.size() + 1)); TF1 hit_f(f_name.c_str(), PAD_FUNCTION, LOWER_HIT_LIMIT_MM, HIGHER_HIT_LIMIT_MM); - double center = recHit.getX(); //TODO retrive using geometry - double width = recHit.getXWidth(); //TODO retrive using geometry - hit_f.SetParameters(center, width, sigma); + double center = recHit.getX(); + double width = recHit.getXWidth(); + hit_f.SetParameters(center, width, sigma_); hit_function_v.push_back(hit_f); @@ -60,27 +64,26 @@ void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { //---------------------------------------------------------------------------------------------------- void CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { - vector hit_profile((HIGHER_HIT_LIMIT_MM - LOWER_HIT_LIMIT_MM) / resolution_mm, .0); - for (int i=0; i::const_iterator fun=hit_function_v.begin(); fun!=hit_function_v.end(); ++fun) { - hit_profile[i] += fun_it->Eval(LOWER_HIT_LIMIT_MM + i*resolution_mm); + vector hit_profile((HIGHER_HIT_LIMIT_MM - LOWER_HIT_LIMIT_MM) / resolution_mm_, .0); + for (unsigned int i=0; i::const_iterator fun_it=hit_function_v.begin(); fun_it!=hit_function_v.end(); ++fun_it) { + hit_profile[i] += fun_it->Eval(LOWER_HIT_LIMIT_MM + i*resolution_mm_); } } bool below = true; // below the threhold int track_start_n = 0; - int track_width_n = 0; - for (int i=0; i= threhold) { // going above the threhold + for (unsigned int i=0; i= threshold_) { // going above the threhold track_start_n = i; below = false; } - if (!below && hit_profile[i] < threhold) { // going back below the threhold + if (!below && hit_profile[i] < threshold_) { // going back below the threhold below = true; //store track CTPPSDiamondLocalTrack track; - track.setX0Sigma( (i-track_start_n)*resolution_mm ); - track.setX0( LOWER_HIT_LIMIT_MM + track_start_n*resolution_mm + track.getX0Sigma()/2); + track.setX0Sigma( (i-track_start_n)*resolution_mm_ ); + track.setX0( LOWER_HIT_LIMIT_MM + track_start_n*resolution_mm_ + track.getX0Sigma()/2); tracks.push_back(track); } } From c6926bbc50e24f3573b27ef9abc18a02277b1e55 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Tue, 31 Jan 2017 11:02:48 +0100 Subject: [PATCH 05/23] New constructor for the track recognition algorithm object ; plugging it to the local tracks' EDProducer Conflicts: RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py --- DataFormats/CTPPSReco/src/classes.h | 4 +++ DataFormats/CTPPSReco/src/classes_def.xml | 4 +++ .../interface/CTPPSDiamondTrackRecognition.h | 9 +++-- .../plugins/CTPPSDiamondLocalTrackFitter.cc | 36 ++++++++++++------- .../ctppsDiamondLocalReconstruction_cff.py | 4 +-- .../ctppsDiamondLocalTrackFitter_cfi.py | 7 +++- .../src/CTPPSDiamondTrackRecognition.cc | 13 +++++-- .../TotemRPLocal/test/diamonds_reco_cfg.py | 6 +++- 8 files changed, 59 insertions(+), 24 deletions(-) diff --git a/DataFormats/CTPPSReco/src/classes.h b/DataFormats/CTPPSReco/src/classes.h index 67bcd8bc127af..a7b07670cc76a 100644 --- a/DataFormats/CTPPSReco/src/classes.h +++ b/DataFormats/CTPPSReco/src/classes.h @@ -64,7 +64,11 @@ namespace DataFormats_CTPPSReco { edm::Ptr ptr_ctd_lt; edm::Wrapper wrp_ctd_lt; std::vector vec_ctd_lt; + edm::DetSet ds_ctd_lt; + std::vector< edm::DetSet > vec_ds_ctd_lt; edm::Wrapper< std::vector > wrp_vec_ctd_lt; + edm::DetSetVector dsv_ctd_lt; + edm::Wrapper > wrp_dsv_ctd_lt; //--- common objects diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 31f5f5fd163fd..b96ce9e21becb 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -63,7 +63,11 @@ + + + + diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 6b97162f4e392..7d903f36bca1b 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -10,10 +10,11 @@ #ifndef RecoCTPPS_TotemRPLocal_CTPPSDiamondTrackRecognition #define RecoCTPPS_TotemRPLocal_CTPPSDiamondTrackRecognition +#include "FWCore/ParameterSet/interface/ParameterSet.h" + #include "DataFormats/Common/interface/DetSet.h" #include "DataFormats/Common/interface/DetSetVector.h" -#include "Geometry/VeryForwardGeometryBuilder/interface/TotemRPGeometry.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" @@ -27,7 +28,8 @@ class CTPPSDiamondTrackRecognition { public: - CTPPSDiamondTrackRecognition(const double threshold = 2, const double sigma = 0., const double resolution_mm=0.01); + CTPPSDiamondTrackRecognition(); + CTPPSDiamondTrackRecognition( const edm::ParameterSet& ); ~CTPPSDiamondTrackRecognition(); @@ -42,9 +44,6 @@ class CTPPSDiamondTrackRecognition const double resolution_mm_; double sigma_; - /// pointer to the geometry - const TotemRPGeometry* geometry; - /// Function for pad efficiency std::vector hit_function_v; diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc index 5f18ae7875559..177ec7f5b54e7 100644 --- a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -17,11 +17,14 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/StreamID.h" -#include "DataFormats/Common/interface/View.h" +#include "DataFormats/Common/interface/DetSetVector.h" +#include "DataFormats/CTPPSDetId/interface/CTPPSDiamondDetId.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" +#include "RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h" + class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> { public: @@ -33,34 +36,43 @@ class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> private: virtual void produce( edm::Event&, const edm::EventSetup& ) override; - edm::EDGetTokenT< edm::View > recHitsToken_; + edm::EDGetTokenT< edm::DetSetVector > recHitsToken_; + CTPPSDiamondTrackRecognition* trk_algo_; }; CTPPSDiamondLocalTrackFitter::CTPPSDiamondLocalTrackFitter( const edm::ParameterSet& iConfig ) : - recHitsToken_( consumes< edm::View >( iConfig.getParameter( "recHitsTag" ) ) ) + recHitsToken_( consumes< edm::DetSetVector >( iConfig.getParameter( "recHitsTag" ) ) ), + trk_algo_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ) { - produces< std::vector >(); + produces< edm::DetSetVector >(); } CTPPSDiamondLocalTrackFitter::~CTPPSDiamondLocalTrackFitter() { + if ( trk_algo_ ) delete trk_algo_; } void CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup& iSetup ) { - std::unique_ptr< std::vector > pOut( new std::vector ); + std::unique_ptr< edm::DetSetVector > pOut( new edm::DetSetVector ); - edm::Handle< edm::View > recHits; + edm::Handle< edm::DetSetVector > recHits; iEvent.getByToken( recHitsToken_, recHits ); - for ( unsigned short i = 0; i < recHits->size(); i++ ) { - const edm::Ptr recHit = recHits->ptrAt( i ); - // ... - // if you want to insert a new CTPPSDiamondLocalTrack object to the output collection, simply use: - // pOut->push_back( CTPPSDiamondLocalTrack(...) ); - } + trk_algo_->clear(); + for ( edm::DetSetVector::const_iterator vec = recHits->begin(); vec != recHits->end(); ++vec ) + { + const CTPPSDiamondDetId detid( vec->detId() ); + edm::DetSet& tracks = pOut->find_or_insert( detid ); + + for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) + { + trk_algo_->addHit( *hit ); + } + trk_algo_->produceTracks( tracks ); + } iEvent.put( std::move( pOut ) ); } diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py index 6234a63fdc2c0..75ac7d7f1d61b 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py @@ -7,9 +7,9 @@ from RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi import ctppsDiamondRecHits # local track fitting -#from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi import ctppsDiamondLocalTracks +from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi import ctppsDiamondLocalTrack ctppsDiamondLocalReconstruction = cms.Sequence( ctppsDiamondRecHits - #* ctppsDiamondLocalTracks + * ctppsDiamondLocalTrack ) diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py index d222213691725..eb4c4d3147d25 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py @@ -2,5 +2,10 @@ ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", verbosity = cms.int32(0), - recHitLabel = cms.InputTag("ctppsDiamondRecHit"), + recHitsTag = cms.InputTag("ctppsDiamondRecHit"), + trackingAlgorithmParams = cms.PSet( + threshold = cms.double(2.0), + resolution = cms.double(0.01), + sigma = cms.double(0.0), + ), ) diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 7eb12035c302f..2978072314d0b 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -26,9 +26,16 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- -CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition(const double threshold, const double sigma, const double resolution_mm) : - threshold_(threshold), resolution_mm_(resolution_mm), sigma_(sigma), geometry(NULL) { - if (sigma_==.0) sigma_=1e-10; +CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : + threshold_( 2.0 ), resolution_mm_( 0.01 ), sigma_( 0.0 ) +{} + +CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : + threshold_( iConfig.getParameter( "threshold" ) ), + resolution_mm_( iConfig.getParameter( "resolution" ) ), + sigma_( iConfig.getParameter( "sigma" ) ) +{ + if (sigma_==.0) sigma_=1.0e-10; } //---------------------------------------------------------------------------------------------------- diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index 1b45062e9f894..a6953962d243a 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -54,6 +54,9 @@ process.load('Geometry.VeryForwardGeometry.geometryRP_cfi') process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi') +# local tracks fitter +process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi') + process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string("file:AOD.root"), outputCommands = cms.untracked.vstring( @@ -65,7 +68,8 @@ # execution configuration process.p = cms.Path( process.ctppsDiamondRawToDigi * - process.ctppsDiamondRecHits + process.ctppsDiamondRecHits * + process.ctppsDiamondLocalTrack ) process.outpath = cms.EndPath(process.output) From 7c3bd1f8874530698808e465adba3d44dd9eaffe Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Tue, 31 Jan 2017 12:04:58 +0100 Subject: [PATCH 06/23] Added the fitting parameters to the configuration file --- .../python/ctppsDiamondLocalTrackFitter_cfi.py | 2 +- .../TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc | 11 ----------- RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py | 3 +++ 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py index eb4c4d3147d25..6f0c01aca65bc 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py @@ -5,7 +5,7 @@ recHitsTag = cms.InputTag("ctppsDiamondRecHit"), trackingAlgorithmParams = cms.PSet( threshold = cms.double(2.0), - resolution = cms.double(0.01), + resolution = cms.double(0.01), # in mm sigma = cms.double(0.0), ), ) diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 2978072314d0b..c0c6146222bcb 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -14,8 +14,6 @@ #include #include -//#define CTPPS_DEBUG 1 - #define LOWER_HIT_LIMIT_MM -1e3 #define HIGHER_HIT_LIMIT_MM 1e3 #define PAD_FUNCTION "(1/(1+exp(-(x-[0])/[2])))*(1/(1+exp((x-[0]-[1])/[2])))" @@ -23,7 +21,6 @@ using namespace std; using namespace edm; - //---------------------------------------------------------------------------------------------------- CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : @@ -43,15 +40,12 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::Parameter CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() { } - //---------------------------------------------------------------------------------------------------- void CTPPSDiamondTrackRecognition::clear() { hit_function_v.clear(); } - - //---------------------------------------------------------------------------------------------------- void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { @@ -64,10 +58,8 @@ void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { hit_f.SetParameters(center, width, sigma_); hit_function_v.push_back(hit_f); - } - //---------------------------------------------------------------------------------------------------- void CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { @@ -97,6 +89,3 @@ void CTPPSDiamondTrackRecognition::produceTracks(DetSet } - - - diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index a6953962d243a..78ca27b374ff6 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -56,6 +56,9 @@ # local tracks fitter process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi') +process.ctppsDiamondLocalTrack.trackingAlgorithmParams.threshold = cms.double(1.5) +process.ctppsDiamondLocalTrack.trackingAlgorithmParams.sigma = cms.double(0.0) +process.ctppsDiamondLocalTrack.trackingAlgorithmParams.resolution = cms.double(0.1) # in mm process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string("file:AOD.root"), From 7caf7bf2ac2f24552f5495bd4dac9beaf261c557 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Wed, 8 Feb 2017 09:27:00 +0100 Subject: [PATCH 07/23] Combined both the totemRP and ctppsDiamond local reconstructions into a single ctppsLocalReconstruction object ; moved floating point quantities in diamonds rechits from double to single precision ; bumped CTPPSDiamondRecHit class version from 2 to 3 Conflicts: RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py Conflicts: Configuration/StandardSequences/python/Reconstruction_cff.py RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py --- .../python/Reconstruction_cff.py | 6 +++--- DataFormats/CTPPSReco/src/classes_def.xml | 4 ++-- .../python/ctppsDiamondLocalReconstruction_cff.py | 4 ++-- ...tter_cfi.py => ctppsDiamondLocalTracks_cfi.py} | 4 ++-- .../python/ctppsLocalReconstruction_cff.py | 15 +++++++++++++++ RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py | 4 ++-- 6 files changed, 26 insertions(+), 11 deletions(-) rename RecoCTPPS/TotemRPLocal/python/{ctppsDiamondLocalTrackFitter_cfi.py => ctppsDiamondLocalTracks_cfi.py} (65%) create mode 100644 RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py diff --git a/Configuration/StandardSequences/python/Reconstruction_cff.py b/Configuration/StandardSequences/python/Reconstruction_cff.py index bde20a9806022..7677947f0750b 100644 --- a/Configuration/StandardSequences/python/Reconstruction_cff.py +++ b/Configuration/StandardSequences/python/Reconstruction_cff.py @@ -34,7 +34,7 @@ #local reconstruction from RecoLocalTracker.Configuration.RecoLocalTracker_cff import * from RecoParticleFlow.Configuration.RecoParticleFlow_cff import * -from RecoCTPPS.Configuration.recoCTPPS_cff import * +from RecoCTPPS.TotemRPLocal.ctppsLocalReconstruction_cff import * # # new tau configuration # @@ -65,12 +65,12 @@ phase2_timing_layer.toReplaceWith(localreco_HcalNZS,_phase2_timing_layer_localreco_HcalNZS) _ctpps_2016_localreco = localreco.copy() -_ctpps_2016_localreco += recoCTPPS +_ctpps_2016_localreco += ctppsLocalReconstruction from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016 ctpps_2016.toReplaceWith(localreco, _ctpps_2016_localreco) _ctpps_2016_localreco_HcalNZS = localreco_HcalNZS.copy() -_ctpps_2016_localreco_HcalNZS += recoCTPPS +_ctpps_2016_localreco_HcalNZS += ctppsLocalReconstruction ctpps_2016.toReplaceWith(localreco_HcalNZS, _ctpps_2016_localreco_HcalNZS) # diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index b96ce9e21becb..58e10a9e47bc6 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -57,8 +57,8 @@ - - + + diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py index 75ac7d7f1d61b..e48e65a2a1949 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py @@ -7,9 +7,9 @@ from RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi import ctppsDiamondRecHits # local track fitting -from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi import ctppsDiamondLocalTrack +from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi import ctppsDiamondLocalTracks ctppsDiamondLocalReconstruction = cms.Sequence( ctppsDiamondRecHits - * ctppsDiamondLocalTrack + * ctppsDiamondLocalTracks ) diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py similarity index 65% rename from RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py rename to RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py index 6f0c01aca65bc..e04a0866e647d 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py @@ -1,8 +1,8 @@ import FWCore.ParameterSet.Config as cms -ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", +ctppsDiamondLocalTracks = cms.EDProducer("CTPPSDiamondLocalTrackFitter", verbosity = cms.int32(0), - recHitsTag = cms.InputTag("ctppsDiamondRecHit"), + recHitsTag = cms.InputTag("ctppsDiamondRecHits"), trackingAlgorithmParams = cms.PSet( threshold = cms.double(2.0), resolution = cms.double(0.01), # in mm diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py b/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py new file mode 100644 index 0000000000000..c3629412f7db0 --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py @@ -0,0 +1,15 @@ +import FWCore.ParameterSet.Config as cms + +# geometry +from Geometry.VeryForwardGeometry.geometryRP_cfi import * + +# strips reconstruction +from RecoCTPPS.TotemRPLocal.totemRPLocalReconstruction_cfi import totemRPLocalReconstruction + +# diamonds reconstruction +from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalReconstruction_cfi import ctppsDiamondLocalReconstruction + +ctppsLocalReconstruction = cms.Sequence( + totemLocalReconstruction + * ctppsDiamondLocalReconstruction +) diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index 78ca27b374ff6..e0ccd01c3f8bc 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -55,7 +55,7 @@ process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi') # local tracks fitter -process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi') +process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi') process.ctppsDiamondLocalTrack.trackingAlgorithmParams.threshold = cms.double(1.5) process.ctppsDiamondLocalTrack.trackingAlgorithmParams.sigma = cms.double(0.0) process.ctppsDiamondLocalTrack.trackingAlgorithmParams.resolution = cms.double(0.1) # in mm @@ -72,7 +72,7 @@ process.p = cms.Path( process.ctppsDiamondRawToDigi * process.ctppsDiamondRecHits * - process.ctppsDiamondLocalTrack + process.ctppsDiamondLocalTracks ) process.outpath = cms.EndPath(process.output) From b5120aea5ff17df84b0b844390c00bae160ed2e8 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Wed, 8 Feb 2017 10:28:16 +0100 Subject: [PATCH 08/23] Making use of the already present recoCTPPS object (instead of defining a new one somewhere else) Conflicts: RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py --- .../python/Reconstruction_cff.py | 6 +++--- .../python/ctppsLocalReconstruction_cff.py | 15 --------------- 2 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py diff --git a/Configuration/StandardSequences/python/Reconstruction_cff.py b/Configuration/StandardSequences/python/Reconstruction_cff.py index 7677947f0750b..bde20a9806022 100644 --- a/Configuration/StandardSequences/python/Reconstruction_cff.py +++ b/Configuration/StandardSequences/python/Reconstruction_cff.py @@ -34,7 +34,7 @@ #local reconstruction from RecoLocalTracker.Configuration.RecoLocalTracker_cff import * from RecoParticleFlow.Configuration.RecoParticleFlow_cff import * -from RecoCTPPS.TotemRPLocal.ctppsLocalReconstruction_cff import * +from RecoCTPPS.Configuration.recoCTPPS_cff import * # # new tau configuration # @@ -65,12 +65,12 @@ phase2_timing_layer.toReplaceWith(localreco_HcalNZS,_phase2_timing_layer_localreco_HcalNZS) _ctpps_2016_localreco = localreco.copy() -_ctpps_2016_localreco += ctppsLocalReconstruction +_ctpps_2016_localreco += recoCTPPS from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016 ctpps_2016.toReplaceWith(localreco, _ctpps_2016_localreco) _ctpps_2016_localreco_HcalNZS = localreco_HcalNZS.copy() -_ctpps_2016_localreco_HcalNZS += ctppsLocalReconstruction +_ctpps_2016_localreco_HcalNZS += recoCTPPS ctpps_2016.toReplaceWith(localreco_HcalNZS, _ctpps_2016_localreco_HcalNZS) # diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py b/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py deleted file mode 100644 index c3629412f7db0..0000000000000 --- a/RecoCTPPS/TotemRPLocal/python/ctppsLocalReconstruction_cff.py +++ /dev/null @@ -1,15 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# geometry -from Geometry.VeryForwardGeometry.geometryRP_cfi import * - -# strips reconstruction -from RecoCTPPS.TotemRPLocal.totemRPLocalReconstruction_cfi import totemRPLocalReconstruction - -# diamonds reconstruction -from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalReconstruction_cfi import ctppsDiamondLocalReconstruction - -ctppsLocalReconstruction = cms.Sequence( - totemLocalReconstruction - * ctppsDiamondLocalReconstruction -) From ffe12e682b97961677b5a3d03d379692ed2ba147 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Wed, 8 Feb 2017 21:52:29 +0100 Subject: [PATCH 09/23] Added the local tracks to the output definition Conflicts: RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py --- RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py b/RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py index 8f81f100b289d..cf7bef8a85b01 100644 --- a/RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py +++ b/RecoCTPPS/Configuration/python/RecoCTPPS_EventContent_cff.py @@ -19,6 +19,7 @@ 'keep CTPPSDiamondDigiedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep TotemVFATStatusedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep CTPPSDiamondRecHitedmDetSetVector_ctppsDiamondRecHits_*_*', + 'keep CTPPSDiamondLocalTrackedmDetSetVector_ctppsDiamondLocalTracks_*_*', # CTPPS common 'keep CTPPSLocalTrackLites_ctppsLocalTrackLiteProducer_*_*' @@ -45,6 +46,7 @@ 'keep CTPPSDiamondDigiedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep TotemVFATStatusedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep CTPPSDiamondRecHitedmDetSetVector_ctppsDiamondRecHits_*_*', + 'keep CTPPSDiamondLocalTrackedmDetSetVector_ctppsDiamondLocalTracks_*_*', # CTPPS common 'keep CTPPSLocalTrackLites_ctppsLocalTrackLiteProducer_*_*' @@ -71,6 +73,7 @@ 'keep CTPPSDiamondDigiedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep TotemVFATStatusedmDetSetVector_ctppsDiamondRawToDigi_*_*', 'keep CTPPSDiamondRecHitedmDetSetVector_ctppsDiamondRecHits_*_*', + 'keep CTPPSDiamondLocalTrackedmDetSetVector_ctppsDiamondLocalTracks_*_*', # CTPPS common 'keep CTPPSLocalTrackLites_ctppsLocalTrackLiteProducer_*_*' From b2a13e32ee5174b0d380e077e691c129bda6acdb Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 16 Feb 2017 16:33:29 +0100 Subject: [PATCH 10/23] Reco good to go --- .../interface/CTPPSDiamondTrackRecognition.h | 8 ++- .../plugins/CTPPSDiamondLocalTrackFitter.cc | 38 ++++++++--- .../ctppsDiamondLocalTrackFitter_cfi.py | 27 ++++++++ .../src/CTPPSDiamondTrackRecognition.cc | 64 ++++++++++++------- .../TotemRPLocal/test/diamonds_reco_cfg.py | 9 +-- 5 files changed, 109 insertions(+), 37 deletions(-) create mode 100644 RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 7d903f36bca1b..02d0fff5b08a1 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -37,12 +37,16 @@ class CTPPSDiamondTrackRecognition void addHit(const CTPPSDiamondRecHit recHit); - void produceTracks(edm::DetSet &tracks); + int produceTracks(edm::DetSet &tracks); protected: const double threshold_; + const double threshold_from_maximum_; const double resolution_mm_; - double sigma_; + const double sigma_; + const double start_from_x_mm_; + const double stop_at_x_mm_; + std::string pixel_efficiency_function_; /// Function for pad efficiency std::vector hit_function_v; diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc index 177ec7f5b54e7..0ff0fb414c28e 100644 --- a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -37,19 +37,22 @@ class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> virtual void produce( edm::Event&, const edm::EventSetup& ) override; edm::EDGetTokenT< edm::DetSetVector > recHitsToken_; - CTPPSDiamondTrackRecognition* trk_algo_; + CTPPSDiamondTrackRecognition* trk_algo_45_; + CTPPSDiamondTrackRecognition* trk_algo_56_; }; CTPPSDiamondLocalTrackFitter::CTPPSDiamondLocalTrackFitter( const edm::ParameterSet& iConfig ) : recHitsToken_( consumes< edm::DetSetVector >( iConfig.getParameter( "recHitsTag" ) ) ), - trk_algo_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ) + trk_algo_45_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ), + trk_algo_56_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ) { produces< edm::DetSetVector >(); } CTPPSDiamondLocalTrackFitter::~CTPPSDiamondLocalTrackFitter() { - if ( trk_algo_ ) delete trk_algo_; + if ( trk_algo_45_ ) delete trk_algo_45_; + if ( trk_algo_56_ ) delete trk_algo_56_; } void @@ -60,20 +63,37 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup edm::Handle< edm::DetSetVector > recHits; iEvent.getByToken( recHitsToken_, recHits ); - trk_algo_->clear(); + CTPPSDiamondDetId tempid_45(0,1,6,0,0); + pOut->find_or_insert( tempid_45 ); + CTPPSDiamondDetId tempid_56(1,1,6,0,0); + edm::DetSet& tracks56 =pOut->find_or_insert( tempid_56 ); + edm::DetSet& tracks45 = pOut->operator[]( tempid_45 ); + + trk_algo_45_->clear(); + trk_algo_56_->clear(); + for ( edm::DetSetVector::const_iterator vec = recHits->begin(); vec != recHits->end(); ++vec ) { const CTPPSDiamondDetId detid( vec->detId() ); - edm::DetSet& tracks = pOut->find_or_insert( detid ); - - for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) + if (detid.arm()==0) + { + for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) + { + trk_algo_45_->addHit( *hit ); + } + } else { - trk_algo_->addHit( *hit ); + for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) + { + trk_algo_56_->addHit( *hit ); + } } - trk_algo_->produceTracks( tracks ); } + trk_algo_45_->produceTracks( tracks45 ); + trk_algo_56_->produceTracks( tracks56 ); + iEvent.put( std::move( pOut ) ); } diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py new file mode 100644 index 0000000000000..52bb070a2e972 --- /dev/null +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", + verbosity = cms.int32(0), + recHitsTag = cms.InputTag("ctppsDiamondRecHits"), + trackingAlgorithmParams = cms.PSet( + threshold = cms.double(1.5), + threshold_from_maximum = cms.double(0.5), + resolution = cms.double(0.05), # in mm + sigma = cms.double(0.1), # see below + start_from_x_mm = cms.double(-0.5), # in mm + stop_at_x_mm = cms.double(19.5), # in mm + pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), + ), +) + + +# +# "(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4" Precise +# "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])" Fast +# [0]: centre of pad +# [1]: width of pad +# [2]: sigma: distance between efficeincy ~100 -> 0 outside width +# + +# Legacy +#"(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" \ No newline at end of file diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index c0c6146222bcb..632c70f57dbdd 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -14,9 +14,7 @@ #include #include -#define LOWER_HIT_LIMIT_MM -1e3 -#define HIGHER_HIT_LIMIT_MM 1e3 -#define PAD_FUNCTION "(1/(1+exp(-(x-[0])/[2])))*(1/(1+exp((x-[0]-[1])/[2])))" +#define PAD_DEFAULT_FUNCTION "(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" using namespace std; using namespace edm; @@ -24,15 +22,19 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : - threshold_( 2.0 ), resolution_mm_( 0.01 ), sigma_( 0.0 ) + threshold_( 1.5 ), threshold_from_maximum_(0.5), resolution_mm_( 0.025), sigma_( 0.0 ), start_from_x_mm_(-2), stop_at_x_mm_(38), pixel_efficiency_function_(PAD_DEFAULT_FUNCTION) {} CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : threshold_( iConfig.getParameter( "threshold" ) ), + threshold_from_maximum_( iConfig.getParameter( "threshold_from_maximum" ) ), resolution_mm_( iConfig.getParameter( "resolution" ) ), - sigma_( iConfig.getParameter( "sigma" ) ) + sigma_( iConfig.getParameter( "sigma" ) ), + start_from_x_mm_( iConfig.getParameter( "start_from_x_mm" ) ), + stop_at_x_mm_( iConfig.getParameter( "stop_at_x_mm" ) ), + pixel_efficiency_function_( iConfig.getParameter( "pixel_efficiency_function" ) ) { - if (sigma_==.0) sigma_=1.0e-10; + if (sigma_==.0) pixel_efficiency_function_="(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; // Simple step function } //---------------------------------------------------------------------------------------------------- @@ -51,41 +53,59 @@ void CTPPSDiamondTrackRecognition::clear() { void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { string f_name("hit_f_"); f_name.append(to_string(hit_function_v.size() + 1)); - TF1 hit_f(f_name.c_str(), PAD_FUNCTION, LOWER_HIT_LIMIT_MM, HIGHER_HIT_LIMIT_MM); + TF1 hit_f(f_name.c_str(), pixel_efficiency_function_.c_str(), start_from_x_mm_, stop_at_x_mm_); - double center = recHit.getX(); - double width = recHit.getXWidth(); - hit_f.SetParameters(center, width, sigma_); + hit_f.SetParameters(recHit.getX(), recHit.getXWidth(), sigma_); hit_function_v.push_back(hit_f); } //---------------------------------------------------------------------------------------------------- -void CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { - vector hit_profile((HIGHER_HIT_LIMIT_MM - LOWER_HIT_LIMIT_MM) / resolution_mm_, .0); +int CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { + vector hit_profile((stop_at_x_mm_ - start_from_x_mm_) / resolution_mm_, .0); for (unsigned int i=0; i::const_iterator fun_it=hit_function_v.begin(); fun_it!=hit_function_v.end(); ++fun_it) { - hit_profile[i] += fun_it->Eval(LOWER_HIT_LIMIT_MM + i*resolution_mm_); + hit_profile[i] += fun_it->Eval(start_from_x_mm_ + i*resolution_mm_); } } - bool below = true; // below the threhold + int number_of_tracks=0; + double maximum=0; + bool below = true; // below the threshold int track_start_n = 0; for (unsigned int i=0; i= threshold_) { // going above the threhold + if (below && hit_profile[i] >= threshold_) { // going above the threshold track_start_n = i; + maximum=0; below = false; } - if (!below && hit_profile[i] < threshold_) { // going back below the threhold - below = true; - //store track - CTPPSDiamondLocalTrack track; - track.setX0Sigma( (i-track_start_n)*resolution_mm_ ); - track.setX0( LOWER_HIT_LIMIT_MM + track_start_n*resolution_mm_ + track.getX0Sigma()/2); - tracks.push_back(track); + if (!below) { + if (hit_profile[i] > maximum) maximum = hit_profile[i]; + if (hit_profile[i] < threshold_) { // going back below the threshold + below = true; + + //go back and use new threshold + double threshold = maximum - threshold_from_maximum_; + for (unsigned int j=track_start_n; j<=i; ++j) { + if (below && hit_profile[j] >= threshold) { // going above the threshold + track_start_n = j; + below = false; + } + if (!below && hit_profile[j] < threshold) { // going back below the threshold + below = true; + //store track + CTPPSDiamondLocalTrack track; + track.setX0Sigma( (j-track_start_n)*resolution_mm_ ); + track.setX0( start_from_x_mm_ + track_start_n*resolution_mm_ + track.getX0Sigma()/2); + tracks.push_back(track); + ++number_of_tracks; + } + } + } } } + return number_of_tracks; } diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index e0ccd01c3f8bc..b1a39d5afc3bd 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -55,10 +55,11 @@ process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi') # local tracks fitter -process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi') +process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi') process.ctppsDiamondLocalTrack.trackingAlgorithmParams.threshold = cms.double(1.5) -process.ctppsDiamondLocalTrack.trackingAlgorithmParams.sigma = cms.double(0.0) -process.ctppsDiamondLocalTrack.trackingAlgorithmParams.resolution = cms.double(0.1) # in mm +process.ctppsDiamondLocalTrack.trackingAlgorithmParams.sigma = cms.double(0) +process.ctppsDiamondLocalTrack.trackingAlgorithmParams.resolution = cms.double(0.025) # in mm +#process.ctppsDiamondLocalTrack.trackingAlgorithmParams.pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4") process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string("file:AOD.root"), @@ -72,7 +73,7 @@ process.p = cms.Path( process.ctppsDiamondRawToDigi * process.ctppsDiamondRecHits * - process.ctppsDiamondLocalTracks + process.ctppsDiamondLocalTrack ) process.outpath = cms.EndPath(process.output) From eb19b847f0ebd5969631d72c95c5b20d6826b309 Mon Sep 17 00:00:00 2001 From: Nicola Date: Thu, 16 Feb 2017 17:36:31 +0100 Subject: [PATCH 11/23] Changed variable names --- .../interface/CTPPSDiamondTrackRecognition.h | 10 +++---- .../ctppsDiamondLocalTrackFitter_cfi.py | 8 +++--- .../src/CTPPSDiamondTrackRecognition.cc | 28 +++++++++---------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 02d0fff5b08a1..da1c3173d1f94 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -41,12 +41,12 @@ class CTPPSDiamondTrackRecognition protected: const double threshold_; - const double threshold_from_maximum_; - const double resolution_mm_; + const double thresholdFromMaximum_; + const double resolution_; const double sigma_; - const double start_from_x_mm_; - const double stop_at_x_mm_; - std::string pixel_efficiency_function_; + const double startFromX_; + const double stopAtX_; + std::string pixelEfficiencyFunction_; /// Function for pad efficiency std::vector hit_function_v; diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py index 52bb070a2e972..8bc3a5a8a8d9b 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py @@ -5,12 +5,12 @@ recHitsTag = cms.InputTag("ctppsDiamondRecHits"), trackingAlgorithmParams = cms.PSet( threshold = cms.double(1.5), - threshold_from_maximum = cms.double(0.5), + thresholdFromMaximum = cms.double(0.5), resolution = cms.double(0.05), # in mm sigma = cms.double(0.1), # see below - start_from_x_mm = cms.double(-0.5), # in mm - stop_at_x_mm = cms.double(19.5), # in mm - pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), + startFromX = cms.double(-0.5), # in mm + stopAtX = cms.double(19.5), # in mm + pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), ), ) diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 632c70f57dbdd..3d77e0bf550a8 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -14,7 +14,7 @@ #include #include -#define PAD_DEFAULT_FUNCTION "(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" +#define PAD_DEFAULT_FUNCTION "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])" using namespace std; using namespace edm; @@ -22,19 +22,19 @@ using namespace edm; //---------------------------------------------------------------------------------------------------- CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : - threshold_( 1.5 ), threshold_from_maximum_(0.5), resolution_mm_( 0.025), sigma_( 0.0 ), start_from_x_mm_(-2), stop_at_x_mm_(38), pixel_efficiency_function_(PAD_DEFAULT_FUNCTION) + threshold_( 1.5 ), thresholdFromMaximum_(0.5), resolution_( 0.025), sigma_( 0.0 ), startFromX_(-2), stopAtX_(38), pixelEfficiencyFunction_(PAD_DEFAULT_FUNCTION) {} CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : threshold_( iConfig.getParameter( "threshold" ) ), - threshold_from_maximum_( iConfig.getParameter( "threshold_from_maximum" ) ), - resolution_mm_( iConfig.getParameter( "resolution" ) ), + thresholdFromMaximum_( iConfig.getParameter( "thresholdFromMaximum" ) ), + resolution_( iConfig.getParameter( "resolution" ) ), sigma_( iConfig.getParameter( "sigma" ) ), - start_from_x_mm_( iConfig.getParameter( "start_from_x_mm" ) ), - stop_at_x_mm_( iConfig.getParameter( "stop_at_x_mm" ) ), - pixel_efficiency_function_( iConfig.getParameter( "pixel_efficiency_function" ) ) + startFromX_( iConfig.getParameter( "startFromX" ) ), + stopAtX_( iConfig.getParameter( "stopAtX" ) ), + pixelEfficiencyFunction_( iConfig.getParameter( "pixelEfficiencyFunction" ) ) { - if (sigma_==.0) pixel_efficiency_function_="(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; // Simple step function + if (sigma_==.0) pixelEfficiencyFunction_="(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; // Simple step function } //---------------------------------------------------------------------------------------------------- @@ -53,7 +53,7 @@ void CTPPSDiamondTrackRecognition::clear() { void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { string f_name("hit_f_"); f_name.append(to_string(hit_function_v.size() + 1)); - TF1 hit_f(f_name.c_str(), pixel_efficiency_function_.c_str(), start_from_x_mm_, stop_at_x_mm_); + TF1 hit_f(f_name.c_str(), pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_); hit_f.SetParameters(recHit.getX(), recHit.getXWidth(), sigma_); @@ -63,10 +63,10 @@ void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { //---------------------------------------------------------------------------------------------------- int CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { - vector hit_profile((stop_at_x_mm_ - start_from_x_mm_) / resolution_mm_, .0); + vector hit_profile((stopAtX_ - startFromX_) / resolution_, .0); for (unsigned int i=0; i::const_iterator fun_it=hit_function_v.begin(); fun_it!=hit_function_v.end(); ++fun_it) { - hit_profile[i] += fun_it->Eval(start_from_x_mm_ + i*resolution_mm_); + hit_profile[i] += fun_it->Eval(startFromX_ + i*resolution_); } } @@ -86,7 +86,7 @@ int CTPPSDiamondTrackRecognition::produceTracks(DetSet & below = true; //go back and use new threshold - double threshold = maximum - threshold_from_maximum_; + double threshold = maximum - thresholdFromMaximum_; for (unsigned int j=track_start_n; j<=i; ++j) { if (below && hit_profile[j] >= threshold) { // going above the threshold track_start_n = j; @@ -96,8 +96,8 @@ int CTPPSDiamondTrackRecognition::produceTracks(DetSet & below = true; //store track CTPPSDiamondLocalTrack track; - track.setX0Sigma( (j-track_start_n)*resolution_mm_ ); - track.setX0( start_from_x_mm_ + track_start_n*resolution_mm_ + track.getX0Sigma()/2); + track.setX0Sigma( (j-track_start_n)*resolution_ ); + track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma()/2); tracks.push_back(track); ++number_of_tracks; } From 10098d95ee464b59e89f629b3f004bdb52a3e7a1 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Thu, 16 Feb 2017 20:01:35 +0100 Subject: [PATCH 12/23] Storing local tracks information as floats instead of doubles ; matched the module name to its products --- .../interface/CTPPSDiamondLocalTrack.h | 72 ++++++------------- DataFormats/CTPPSReco/src/classes_def.xml | 2 +- .../ctppsDiamondLocalTrackFitter_cfi.py | 27 ------- .../python/ctppsDiamondLocalTracks_cfi.py | 27 +++++-- .../TotemRPLocal/test/diamonds_reco_cfg.py | 12 ++-- 5 files changed, 53 insertions(+), 87 deletions(-) delete mode 100644 RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 03d1612e5f854..ac37d782fe789 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -11,7 +11,6 @@ #define DataFormats_CTPPSReco_CTPPSDiamondLocalTrack #include "DataFormats/Math/interface/Point3D.h" -#include "DataFormats/Common/interface/DetSetVector.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" //---------------------------------------------------------------------------------------------------- @@ -20,89 +19,64 @@ class CTPPSDiamondLocalTrack { public: CTPPSDiamondLocalTrack() : - tx_( 0. ), tx_sigma_( 0. ), - ty_( 0. ), ty_sigma_( 0. ), - chi_squared_( 0. ), - valid_( false ) {;} - virtual ~CTPPSDiamondLocalTrack() {;} + chi_squared_( 0. ), valid_( true ) {} + virtual ~CTPPSDiamondLocalTrack() {} //--- spatial get'ters - inline double getX0() const { return pos0_.x(); } - inline double getX0Sigma() const { return x0_sigma_; } + inline float getX0() const { return pos0_.x(); } + inline float getX0Sigma() const { return pos0_sigma_.x(); } - inline double getY0() const { return pos0_.y(); } - inline double getY0Sigma() const { return y0_sigma_; } + inline float getY0() const { return pos0_.y(); } + inline float getY0Sigma() const { return pos0_sigma_.y(); } - inline double getZ0() const { return pos0_.z(); } + inline float getZ0() const { return pos0_.z(); } - inline double getTx() const { return tx_; } - inline double getTxSigma() const { return tx_sigma_; } - - inline double getTy() const { return ty_; } - inline double getTySigma() const { return ty_sigma_; } - - inline double getChiSquared() const { return chi_squared_; } + inline float getChiSquared() const { return chi_squared_; } //--- spatial set'ters - inline void setX0(const double& x0) { pos0_.SetX(x0); } - inline void setX0Sigma(const double& x0_sigma) { x0_sigma_=x0_sigma; } - - inline void setY0(const double& y0) { pos0_.SetY(y0); } - inline void setY0Sigma(const double& y0_sigma) { y0_sigma_=y0_sigma; } - - inline void setZ0(const double& z) { pos0_.SetZ(z); } + inline void setX0( const float& x0 ) { pos0_.SetX( x0 ); } + inline void setX0Sigma( const float& x0_sigma ) { pos0_sigma_.SetX( x0_sigma ); } - inline void setTx(const double& tx) { tx_=tx; } - inline void setTxSigma(const double& tx_sigma) { tx_sigma_=tx_sigma; } + inline void setY0( const float& y0 ) { pos0_.SetY( y0 ); } + inline void setY0Sigma( const float& y0_sigma ) { pos0_sigma_.SetY( y0_sigma ); } - inline void setTy(const double& ty) { ty_=ty; } - inline void setTySigma(const double& ty_sigma) { ty_sigma_=ty_sigma; } + inline void setZ0( const float& z ) { pos0_.SetZ(z); } - inline void setChiSquared( const double& chisq ) { chi_squared_ = chisq; } + inline void setChiSquared( const float& chisq ) { chi_squared_ = chisq; } - //inline double getChiSquaredOverNDF() const { return chiSquared_ / (track_hits_vector_.size() - 4); } - - //FIXME include timing validity checks too? inline bool isValid() const { return valid_; } - inline void setValid(bool valid) { valid_ = valid; } + inline void setValid( bool valid ) { valid_ = valid; } //--- temporal get'ters - inline double getT() const { return t_; } - inline double getTSigma() const { return t_sigma_; } + inline float getT() const { return t_; } + inline float getTSigma() const { return t_sigma_; } //--- temporal set'ters - inline void setT( const double& t) { t_=t; } - inline void setTSigma( const double& t_sigma) { t_sigma_=t_sigma; } + inline void setT( const float& t) { t_ = t; } + inline void setTSigma( const float& t_sigma ) { t_sigma_ = t_sigma; } friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); private: - //FIXME placeholder variables only! - // replace us with values computed from tracking algorithm - //--- spatial information math::XYZPoint pos0_; - - double x0_sigma_, y0_sigma_; - // track angular information (FIXME: move to a momentum_ 3-vector?) - double tx_, tx_sigma_; - double ty_, ty_sigma_; + math::XYZPoint pos0_sigma_; /// fit chi^2 - double chi_squared_; + float chi_squared_; /// fit valid? bool valid_; //--- timing information - double t_; - double t_sigma_; + float t_; + float t_sigma_; }; diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 58e10a9e47bc6..74af156218e75 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -58,7 +58,7 @@ - + diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py deleted file mode 100644 index 8bc3a5a8a8d9b..0000000000000 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTrackFitter_cfi.py +++ /dev/null @@ -1,27 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", - verbosity = cms.int32(0), - recHitsTag = cms.InputTag("ctppsDiamondRecHits"), - trackingAlgorithmParams = cms.PSet( - threshold = cms.double(1.5), - thresholdFromMaximum = cms.double(0.5), - resolution = cms.double(0.05), # in mm - sigma = cms.double(0.1), # see below - startFromX = cms.double(-0.5), # in mm - stopAtX = cms.double(19.5), # in mm - pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), - ), -) - - -# -# "(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4" Precise -# "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])" Fast -# [0]: centre of pad -# [1]: width of pad -# [2]: sigma: distance between efficeincy ~100 -> 0 outside width -# - -# Legacy -#"(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" \ No newline at end of file diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py index e04a0866e647d..14e6e01ef0c46 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py @@ -1,11 +1,30 @@ import FWCore.ParameterSet.Config as cms -ctppsDiamondLocalTracks = cms.EDProducer("CTPPSDiamondLocalTrackFitter", +ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", verbosity = cms.int32(0), recHitsTag = cms.InputTag("ctppsDiamondRecHits"), trackingAlgorithmParams = cms.PSet( - threshold = cms.double(2.0), - resolution = cms.double(0.01), # in mm - sigma = cms.double(0.0), + threshold = cms.double(1.5), + thresholdFromMaximum = cms.double(0.5), + resolution = cms.double(0.05), # in mm + sigma = cms.double(0.1), # see below + startFromX = cms.double(-0.5), # in mm + stopAtX = cms.double(19.5), # in mm + pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), ), ) + +# +# NOTE: pixelEfficiencyFunction can be defined as following: +# +# "(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4" Precise +# "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])" Fast +# +# with: +# [0]: centre of pad +# [1]: width of pad +# [2]: sigma: distance between efficiency ~100 -> 0 outside width +# +# +# Legacy +# "(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index b1a39d5afc3bd..fe0aab0a340d4 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -55,11 +55,11 @@ process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondRecHits_cfi') # local tracks fitter -process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTrackFitter_cfi') -process.ctppsDiamondLocalTrack.trackingAlgorithmParams.threshold = cms.double(1.5) -process.ctppsDiamondLocalTrack.trackingAlgorithmParams.sigma = cms.double(0) -process.ctppsDiamondLocalTrack.trackingAlgorithmParams.resolution = cms.double(0.025) # in mm -#process.ctppsDiamondLocalTrack.trackingAlgorithmParams.pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4") +process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi') +process.ctppsDiamondLocalTracks.trackingAlgorithmParams.threshold = cms.double(1.5) +process.ctppsDiamondLocalTracks.trackingAlgorithmParams.sigma = cms.double(0) +process.ctppsDiamondLocalTracks.trackingAlgorithmParams.resolution = cms.double(0.025) # in mm +#process.ctppsDiamondLocalTracks.trackingAlgorithmParams.pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4") process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string("file:AOD.root"), @@ -73,7 +73,7 @@ process.p = cms.Path( process.ctppsDiamondRawToDigi * process.ctppsDiamondRecHits * - process.ctppsDiamondLocalTrack + process.ctppsDiamondLocalTracks ) process.outpath = cms.EndPath(process.output) From bbff5250397ae062ffbb4821a316e1892a28936c Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Sat, 18 Feb 2017 12:16:04 +0100 Subject: [PATCH 13/23] Code documentation and cleanup --- .../interface/CTPPSDiamondLocalTrack.h | 2 + .../CTPPSReco/src/CTPPSDiamondLocalTrack.cc | 2 +- DataFormats/CTPPSReco/src/classes.h | 4 +- .../interface/CTPPSDiamondTrackRecognition.h | 2 +- .../plugins/CTPPSDiamondLocalTrackFitter.cc | 22 ++-- .../ctppsDiamondLocalReconstruction_cff.py | 4 +- .../python/ctppsDiamondLocalTracks_cfi.py | 2 +- .../src/CTPPSDiamondTrackRecognition.cc | 113 ++++++++++-------- 8 files changed, 85 insertions(+), 66 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index ac37d782fe789..7b19979869c27 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -64,7 +64,9 @@ class CTPPSDiamondLocalTrack private: //--- spatial information + /// initial track position math::XYZPoint pos0_; + /// error on the initial track position math::XYZPoint pos0_sigma_; /// fit chi^2 diff --git a/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc b/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc index 33c16778af277..68a1412473081 100644 --- a/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc +++ b/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc @@ -14,6 +14,6 @@ bool operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) { - //FIXME also sort by space coordinate? + // as for now, only sort by space coordinate return ( lhs.getT() < rhs.getT() ); } diff --git a/DataFormats/CTPPSReco/src/classes.h b/DataFormats/CTPPSReco/src/classes.h index a7b07670cc76a..f5c14c29fc65e 100644 --- a/DataFormats/CTPPSReco/src/classes.h +++ b/DataFormats/CTPPSReco/src/classes.h @@ -54,8 +54,8 @@ namespace DataFormats_CTPPSReco { edm::Ptr ptr_ctd_rh; edm::Wrapper wrp_ctd_rh; std::vector vec_ctd_rh; - std::vector< edm::DetSet > vec_ds_rh; - edm::DetSet ds_rh; + std::vector< edm::DetSet > vec_ds_ctd_rh; + edm::DetSet ds_ctd_rh; edm::DetSetVector dsv_ctd_rh; edm::Wrapper< edm::DetSetVector > wrp_dsv_ctd_rh; edm::Wrapper< std::vector > wrp_vec_ctd_rh; diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index da1c3173d1f94..cee61c03b8658 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -49,7 +49,7 @@ class CTPPSDiamondTrackRecognition std::string pixelEfficiencyFunction_; /// Function for pad efficiency - std::vector hit_function_v; + std::vector hit_function_vec_; }; diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc index 0ff0fb414c28e..a006335353d23 100644 --- a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -63,12 +63,16 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup edm::Handle< edm::DetSetVector > recHits; iEvent.getByToken( recHitsToken_, recHits ); - CTPPSDiamondDetId tempid_45(0,1,6,0,0); - pOut->find_or_insert( tempid_45 ); - CTPPSDiamondDetId tempid_56(1,1,6,0,0); - edm::DetSet& tracks56 =pOut->find_or_insert( tempid_56 ); - edm::DetSet& tracks45 = pOut->operator[]( tempid_45 ); - + const CTPPSDiamondDetId id_45( 0, 1, 6, 0, 0 ), + id_56( 1, 1, 6, 0, 0 ); + + pOut->find_or_insert( id_45 ); // tracks in 4-5 + edm::DetSet& tracks56 = pOut->find_or_insert( id_56 ); // tracks in 5-6 + + // workaround to retrieve the detset for 4-5 without losing the reference + edm::DetSet& tracks45 = pOut->operator[]( id_45 ); + + // first remove all hits from previous event trk_algo_45_->clear(); trk_algo_56_->clear(); @@ -76,13 +80,13 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup { const CTPPSDiamondDetId detid( vec->detId() ); - if (detid.arm()==0) + if (detid.arm()==0) { for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) { trk_algo_45_->addHit( *hit ); } - } else + } else { for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) { @@ -93,7 +97,7 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup trk_algo_45_->produceTracks( tracks45 ); trk_algo_56_->produceTracks( tracks56 ); - + iEvent.put( std::move( pOut ) ); } diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py index e48e65a2a1949..64909bb4228a7 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalReconstruction_cff.py @@ -10,6 +10,6 @@ from RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi import ctppsDiamondLocalTracks ctppsDiamondLocalReconstruction = cms.Sequence( - ctppsDiamondRecHits - * ctppsDiamondLocalTracks + ctppsDiamondRecHits * + ctppsDiamondLocalTracks ) diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py index 14e6e01ef0c46..57afba1fa27bc 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py @@ -1,6 +1,6 @@ import FWCore.ParameterSet.Config as cms -ctppsDiamondLocalTrack = cms.EDProducer("CTPPSDiamondLocalTrackFitter", +ctppsDiamondLocalTracks = cms.EDProducer("CTPPSDiamondLocalTrackFitter", verbosity = cms.int32(0), recHitsTag = cms.InputTag("ctppsDiamondRecHits"), trackingAlgorithmParams = cms.PSet( diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 3d77e0bf550a8..6673c0f2dd954 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -16,13 +16,13 @@ #define PAD_DEFAULT_FUNCTION "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])" -using namespace std; -using namespace edm; - //---------------------------------------------------------------------------------------------------- CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : - threshold_( 1.5 ), thresholdFromMaximum_(0.5), resolution_( 0.025), sigma_( 0.0 ), startFromX_(-2), stopAtX_(38), pixelEfficiencyFunction_(PAD_DEFAULT_FUNCTION) + threshold_( 1.5 ), thresholdFromMaximum_( 0.5 ), + resolution_( 0.025 ), sigma_( 0.0 ), + startFromX_( -2 ), stopAtX_( 38 ), + pixelEfficiencyFunction_( PAD_DEFAULT_FUNCTION ) {} CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : @@ -34,74 +34,87 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::Parameter stopAtX_( iConfig.getParameter( "stopAtX" ) ), pixelEfficiencyFunction_( iConfig.getParameter( "pixelEfficiencyFunction" ) ) { - if (sigma_==.0) pixelEfficiencyFunction_="(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; // Simple step function + if (sigma_==.0) { + pixelEfficiencyFunction_ = PAD_DEFAULT_FUNCTION; // simple step function + } } //---------------------------------------------------------------------------------------------------- -CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() { -} +CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() +{} //---------------------------------------------------------------------------------------------------- -void CTPPSDiamondTrackRecognition::clear() { - hit_function_v.clear(); +void +CTPPSDiamondTrackRecognition::clear() +{ + hit_function_vec_.clear(); } //---------------------------------------------------------------------------------------------------- -void CTPPSDiamondTrackRecognition::addHit(const CTPPSDiamondRecHit recHit) { - string f_name("hit_f_"); - f_name.append(to_string(hit_function_v.size() + 1)); - TF1 hit_f(f_name.c_str(), pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_); - - hit_f.SetParameters(recHit.getX(), recHit.getXWidth(), sigma_); - - hit_function_v.push_back(hit_f); +void +CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) +{ + std::string f_name( "hit_f_" ); + f_name.append( std::to_string( hit_function_vec_.size() + 1 ) ); + + // define the hit function + TF1 hit_f( f_name.c_str(), pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_ ); + hit_f.SetParameters( recHit.getX(), recHit.getXWidth(), sigma_ ); + hit_function_vec_.push_back( hit_f ); } //---------------------------------------------------------------------------------------------------- -int CTPPSDiamondTrackRecognition::produceTracks(DetSet &tracks) { - vector hit_profile((stopAtX_ - startFromX_) / resolution_, .0); - for (unsigned int i=0; i::const_iterator fun_it=hit_function_v.begin(); fun_it!=hit_function_v.end(); ++fun_it) { - hit_profile[i] += fun_it->Eval(startFromX_ + i*resolution_); +int +CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet &tracks ) +{ + std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); + + for ( unsigned int i=0; i::const_iterator fun_it=hit_function_vec_.begin(); fun_it!=hit_function_vec_.end(); ++fun_it ) { + hit_profile[i] += fun_it->Eval( startFromX_ + i*resolution_ ); } } - - int number_of_tracks=0; - double maximum=0; - bool below = true; // below the threshold + + int number_of_tracks = 0; + double maximum = 0.; + bool below = true; // start below the threshold int track_start_n = 0; - for (unsigned int i=0; i= threshold_) { // going above the threshold + + for ( unsigned int i=0; i= threshold_ ) { // going above the threshold track_start_n = i; maximum=0; below = false; } - if (!below) { - if (hit_profile[i] > maximum) maximum = hit_profile[i]; - if (hit_profile[i] < threshold_) { // going back below the threshold - below = true; - - //go back and use new threshold - double threshold = maximum - thresholdFromMaximum_; - for (unsigned int j=track_start_n; j<=i; ++j) { - if (below && hit_profile[j] >= threshold) { // going above the threshold - track_start_n = j; - below = false; - } - if (!below && hit_profile[j] < threshold) { // going back below the threshold - below = true; - //store track - CTPPSDiamondLocalTrack track; - track.setX0Sigma( (j-track_start_n)*resolution_ ); - track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma()/2); - tracks.push_back(track); - ++number_of_tracks; - } - } + if ( !below ) { + if ( hit_profile[i] > maximum ) { + maximum = hit_profile[i]; + } + if ( hit_profile[i] < threshold_ ) { // going back below the threshold + below = true; + + // go back and use new threshold + const double threshold = maximum - thresholdFromMaximum_; + for ( unsigned int j=track_start_n; j<=i; ++j ) { + if ( below && hit_profile[j] >= threshold ) { // going above the threshold + track_start_n = j; + below = false; + } + if ( !below && hit_profile[j] < threshold ) { // going back below the threshold + below = true; + + //store track + CTPPSDiamondLocalTrack track; + track.setX0Sigma( ( j-track_start_n )*resolution_ ); + track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma()/2. ); + tracks.push_back( track ); + ++number_of_tracks; + } + } } } } From e6c6b052bdfd774f6e541afe655730cb1448cd14 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Sat, 18 Feb 2017 12:43:38 +0100 Subject: [PATCH 14/23] Setting the default value to 0 for timing information in the local tracks --- DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 7b19979869c27..84df8bda9151b 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -19,7 +19,7 @@ class CTPPSDiamondLocalTrack { public: CTPPSDiamondLocalTrack() : - chi_squared_( 0. ), valid_( true ) {} + chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ) {} virtual ~CTPPSDiamondLocalTrack() {} //--- spatial get'ters From 163c98cd2190ac2e1a9307c201ea0b79a688cb3a Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 20 Feb 2017 18:27:57 +0100 Subject: [PATCH 15/23] Reco out of time bug fixed --- .../interface/CTPPSDiamondLocalTrack.h | 5 + DataFormats/CTPPSReco/src/classes_def.xml | 4 +- .../interface/CTPPSDiamondTrackRecognition.h | 22 ++-- .../src/CTPPSDiamondTrackRecognition.cc | 106 ++++++++++-------- 4 files changed, 81 insertions(+), 56 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 84df8bda9151b..ac0cc2a570053 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -58,6 +58,9 @@ class CTPPSDiamondLocalTrack inline void setT( const float& t) { t_ = t; } inline void setTSigma( const float& t_sigma ) { t_sigma_ = t_sigma; } + + inline void setOOTIndex( const int& i ) { ts_index_ = i; } + inline int getOOTIndex() const { return ts_index_; } friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); @@ -79,6 +82,8 @@ class CTPPSDiamondLocalTrack float t_; float t_sigma_; + /// Time slice index + int ts_index_; }; diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 74af156218e75..1586c66eace2e 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -57,8 +57,8 @@ - - + + diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index cee61c03b8658..6d8a3be8ed89e 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -20,6 +20,7 @@ #include "TF1.h" #include +#include /** * \brief Class performing smart reconstruction for CTPPS Diamond Detectors. @@ -40,16 +41,23 @@ class CTPPSDiamondTrackRecognition int produceTracks(edm::DetSet &tracks); protected: - const double threshold_; - const double thresholdFromMaximum_; - const double resolution_; - const double sigma_; - const double startFromX_; - const double stopAtX_; + typedef std::vector hitFunctionVector_t; + typedef std::map hitFunctionVectorMap_t; + + const float threshold_; + const float thresholdFromMaximum_; + const float resolution_; + const float sigma_; + const float startFromX_; + const float stopAtX_; std::string pixelEfficiencyFunction_; + + float yPosition; + float yWidth; + int nameCounter; /// Function for pad efficiency - std::vector hit_function_vec_; + hitFunctionVectorMap_t hitFunctionVectorMap_; }; diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 6673c0f2dd954..0653c95366f08 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -9,7 +9,6 @@ #include "RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h" -#include #include #include #include @@ -22,7 +21,8 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : threshold_( 1.5 ), thresholdFromMaximum_( 0.5 ), resolution_( 0.025 ), sigma_( 0.0 ), startFromX_( -2 ), stopAtX_( 38 ), - pixelEfficiencyFunction_( PAD_DEFAULT_FUNCTION ) + pixelEfficiencyFunction_( PAD_DEFAULT_FUNCTION ), + yPosition(0.0), yWidth(0.0), nameCounter(0) {} CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : @@ -32,7 +32,8 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::Parameter sigma_( iConfig.getParameter( "sigma" ) ), startFromX_( iConfig.getParameter( "startFromX" ) ), stopAtX_( iConfig.getParameter( "stopAtX" ) ), - pixelEfficiencyFunction_( iConfig.getParameter( "pixelEfficiencyFunction" ) ) + pixelEfficiencyFunction_( iConfig.getParameter( "pixelEfficiencyFunction" ) ), + yPosition(0.0), yWidth(0.0), nameCounter(0) { if (sigma_==.0) { pixelEfficiencyFunction_ = PAD_DEFAULT_FUNCTION; // simple step function @@ -49,7 +50,7 @@ CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() void CTPPSDiamondTrackRecognition::clear() { - hit_function_vec_.clear(); + hitFunctionVectorMap_.clear(); } //---------------------------------------------------------------------------------------------------- @@ -58,12 +59,19 @@ void CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) { std::string f_name( "hit_f_" ); - f_name.append( std::to_string( hit_function_vec_.size() + 1 ) ); + f_name.append( std::to_string( ++nameCounter ) ); // define the hit function TF1 hit_f( f_name.c_str(), pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_ ); hit_f.SetParameters( recHit.getX(), recHit.getXWidth(), sigma_ ); - hit_function_vec_.push_back( hit_f ); + hitFunctionVectorMap_[recHit.getOOTIndex()].push_back( hit_f ); + + // Check vertical coordinates + if (yPosition == .0 and yWidth == .0) { + yPosition = recHit.getY(); + yWidth = recHit.getYWidth(); + } + } //---------------------------------------------------------------------------------------------------- @@ -71,50 +79,54 @@ CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) int CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet &tracks ) { - std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); - - for ( unsigned int i=0; i::const_iterator fun_it=hit_function_vec_.begin(); fun_it!=hit_function_vec_.end(); ++fun_it ) { - hit_profile[i] += fun_it->Eval( startFromX_ + i*resolution_ ); - } - } - int number_of_tracks = 0; - double maximum = 0.; - bool below = true; // start below the threshold - int track_start_n = 0; - - for ( unsigned int i=0; i= threshold_ ) { // going above the threshold - track_start_n = i; - maximum=0; - below = false; + for ( hitFunctionVectorMap_t::const_iterator ootIt=hitFunctionVectorMap_.begin(); ootIt!=hitFunctionVectorMap_.end(); ++ootIt ) { + std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); + for ( unsigned int i=0; isecond.begin(); fun_it!=ootIt->second.end(); ++fun_it ) { + hit_profile[i] += fun_it->Eval( startFromX_ + i*resolution_ ); + } } - if ( !below ) { - if ( hit_profile[i] > maximum ) { - maximum = hit_profile[i]; + + float maximum = 0.; + bool below = true; // start below the threshold + int track_start_n = 0; + + for ( unsigned int i=0; i= threshold_ ) { // going above the threshold + track_start_n = i; + maximum=0; + below = false; } - if ( hit_profile[i] < threshold_ ) { // going back below the threshold - below = true; - - // go back and use new threshold - const double threshold = maximum - thresholdFromMaximum_; - for ( unsigned int j=track_start_n; j<=i; ++j ) { - if ( below && hit_profile[j] >= threshold ) { // going above the threshold - track_start_n = j; - below = false; - } - if ( !below && hit_profile[j] < threshold ) { // going back below the threshold - below = true; - - //store track - CTPPSDiamondLocalTrack track; - track.setX0Sigma( ( j-track_start_n )*resolution_ ); - track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma()/2. ); - tracks.push_back( track ); - ++number_of_tracks; - } - } + if ( !below ) { + if ( hit_profile[i] > maximum ) { + maximum = hit_profile[i]; + } + if ( hit_profile[i] < threshold_ ) { // going back below the threshold + below = true; + + // go back and use new threshold + const float threshold = maximum - thresholdFromMaximum_; + for ( unsigned int j=track_start_n; j<=i; ++j ) { + if ( below && hit_profile[j] >= threshold ) { // going above the threshold + track_start_n = j; + below = false; + } + if ( !below && hit_profile[j] < threshold ) { // going back below the threshold + below = true; + + //store track + CTPPSDiamondLocalTrack track; + track.setX0Sigma( ( j-track_start_n )*resolution_*0.5 ); + track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma() ); + track.setY0( yPosition ); + track.setY0Sigma( yWidth * 0.5 ); + track.setOOTIndex( ootIt->first ); + tracks.push_back( track ); + ++number_of_tracks; + } + } + } } } } From 921564a637bc7d80f91e0942b293543154a0fb8c Mon Sep 17 00:00:00 2001 From: Nicola Date: Mon, 27 Feb 2017 11:41:15 +0100 Subject: [PATCH 16/23] RecHit and LocalTrack MH included --- .../CTPPSReco/interface/CTPPSDiamondLocalTrack.h | 6 +++++- DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h | 10 +++++++--- DataFormats/CTPPSReco/src/classes_def.xml | 6 +++--- .../interface/CTPPSDiamondTrackRecognition.h | 1 + .../src/CTPPSDiamondRecHitProducerAlgorithm.cc | 3 ++- .../TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc | 10 ++++++++++ 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index ac0cc2a570053..ea74880f5e093 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -19,7 +19,7 @@ class CTPPSDiamondLocalTrack { public: CTPPSDiamondLocalTrack() : - chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ) {} + chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ), mh_( 0 ) {} virtual ~CTPPSDiamondLocalTrack() {} //--- spatial get'ters @@ -61,6 +61,9 @@ class CTPPSDiamondLocalTrack inline void setOOTIndex( const int& i ) { ts_index_ = i; } inline int getOOTIndex() const { return ts_index_; } + + inline void setMultipleHits( const int& i ) { mh_ = i; } + inline int getMultipleHits() const { return mh_; } friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); @@ -84,6 +87,7 @@ class CTPPSDiamondLocalTrack float t_sigma_; /// Time slice index int ts_index_; + int mh_; }; diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h index c4459b48cfe81..fd4eea8483b87 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h @@ -19,12 +19,12 @@ class CTPPSDiamondRecHit CTPPSDiamondRecHit() : x_( 0. ), x_width_( 0. ), y_( 0. ), y_width_( 0. ), t_( 0. ), tot_( 0. ), - ts_index_( 0 ), hptdc_err_( 0 ) + ts_index_( 0 ), hptdc_err_( 0 ), mh_( false ) {} - CTPPSDiamondRecHit( float x, float x_width, float y, float y_width, float t, float tot, int oot_idx, const HPTDCErrorFlags& hptdc_err ) : + CTPPSDiamondRecHit( float x, float x_width, float y, float y_width, float t, float tot, int oot_idx, const HPTDCErrorFlags& hptdc_err, const bool mh ) : x_( x ), x_width_( x_width ), y_( y ), y_width_( y_width ), t_( t ), tot_( tot ), - ts_index_( oot_idx ), hptdc_err_( hptdc_err ) + ts_index_( oot_idx ), hptdc_err_( hptdc_err ), mh_(mh) {} inline void setX( const float& x ) { x_ = x; } @@ -47,6 +47,9 @@ class CTPPSDiamondRecHit inline void setOOTIndex( const int& i ) { ts_index_ = i; } inline int getOOTIndex() const { return ts_index_; } + + inline void setMultipleHits( const bool mh ) { mh_ = mh; } + inline bool getMultipleHits() const { return mh_; } inline void setHPTDCErrorFlags( const HPTDCErrorFlags& err ) { hptdc_err_ = err; } inline HPTDCErrorFlags getHPTDCErrorFlags() const { return hptdc_err_; } @@ -58,6 +61,7 @@ class CTPPSDiamondRecHit /// Time slice index int ts_index_; HPTDCErrorFlags hptdc_err_; + bool mh_; }; //---------------------------------------------------------------------------------------------------- diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 1586c66eace2e..c259f06023a08 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -45,8 +45,8 @@ - - + + @@ -58,7 +58,7 @@ - + diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 6d8a3be8ed89e..ef989c3822290 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -58,6 +58,7 @@ class CTPPSDiamondTrackRecognition /// Function for pad efficiency hitFunctionVectorMap_t hitFunctionVectorMap_; + std::map mhMap_; }; diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondRecHitProducerAlgorithm.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondRecHitProducerAlgorithm.cc index 6583b00eabdf3..32bd9cd49ab43 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondRecHitProducerAlgorithm.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondRecHitProducerAlgorithm.cc @@ -42,7 +42,8 @@ CTPPSDiamondRecHitProducerAlgorithm::build( const TotemRPGeometry* geom, const e ( t0 * ts_to_ns_ ), ( digi->getTrailingEdge()-t0 ) * ts_to_ns_, time_slice, - digi->getHPTDCErrorFlags() ) ); + digi->getHPTDCErrorFlags(), + digi->getMultipleHit() ) ); } } } diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 0653c95366f08..66dd0c0fe88e0 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -51,6 +51,7 @@ void CTPPSDiamondTrackRecognition::clear() { hitFunctionVectorMap_.clear(); + mhMap_.clear(); } //---------------------------------------------------------------------------------------------------- @@ -72,6 +73,13 @@ CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) yWidth = recHit.getYWidth(); } + //Multiple hits in the RP + if ( recHit.getMultipleHits() ) { + if (mhMap_.find( recHit.getOOTIndex() ) == mhMap_.end()) + mhMap_[recHit.getOOTIndex()] = 1; + else + ++(mhMap_[recHit.getOOTIndex()]); + } } //---------------------------------------------------------------------------------------------------- @@ -122,6 +130,8 @@ CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet track.setY0( yPosition ); track.setY0Sigma( yWidth * 0.5 ); track.setOOTIndex( ootIt->first ); + if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) track.setMultipleHits( mhMap_[ootIt->first] ); + else track.setMultipleHits( 0 ); tracks.push_back( track ); ++number_of_tracks; } From 46800ae529e5c9a4785d238e08d7d6c5b3cd352e Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Thu, 16 Mar 2017 13:01:40 +0100 Subject: [PATCH 17/23] Amended the diamonds local track recognition ; New local tracks constructor with attributes ; other secondary fixes --- .../interface/CTPPSDiamondLocalTrack.h | 34 +++++++++++-------- .../CTPPSReco/src/CTPPSDiamondLocalTrack.cc | 19 ----------- DataFormats/CTPPSReco/src/classes_def.xml | 4 +-- .../interface/CTPPSDiamondTrackRecognition.h | 23 ++++++------- .../src/CTPPSDiamondTrackRecognition.cc | 32 ++++++----------- 5 files changed, 43 insertions(+), 69 deletions(-) delete mode 100644 DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index ea74880f5e093..e00bc65265aeb 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -19,7 +19,11 @@ class CTPPSDiamondLocalTrack { public: CTPPSDiamondLocalTrack() : - chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ), mh_( 0 ) {} + chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ), ts_index_( 0 ), mh_( 0 ) {} + CTPPSDiamondLocalTrack( const math::XYZPoint pos0, const math::XYZPoint pos0_sigma, float chisq, float t, float t_sigma, int oot_idx, int mult_hits ) : + pos0_( pos0 ), pos0_sigma_( pos0_sigma ), + chi_squared_( chisq ), valid_( true ), + t_( t ), t_sigma_( t_sigma ), ts_index_( oot_idx ), mh_( mult_hits ) {} virtual ~CTPPSDiamondLocalTrack() {} //--- spatial get'ters @@ -36,15 +40,10 @@ class CTPPSDiamondLocalTrack //--- spatial set'ters - inline void setX0( const float& x0 ) { pos0_.SetX( x0 ); } - inline void setX0Sigma( const float& x0_sigma ) { pos0_sigma_.SetX( x0_sigma ); } + inline void setPosition( const math::XYZPoint pos0 ) { pos0_ = pos0; } + inline void setPositionSigma( const math::XYZPoint pos0_sigma ) { pos0_sigma_ = pos0_sigma; } - inline void setY0( const float& y0 ) { pos0_.SetY( y0 ); } - inline void setY0Sigma( const float& y0_sigma ) { pos0_sigma_.SetY( y0_sigma ); } - - inline void setZ0( const float& z ) { pos0_.SetZ(z); } - - inline void setChiSquared( const float& chisq ) { chi_squared_ = chisq; } + inline void setChiSquared( const float chisq ) { chi_squared_ = chisq; } inline bool isValid() const { return valid_; } inline void setValid( bool valid ) { valid_ = valid; } @@ -56,17 +55,15 @@ class CTPPSDiamondLocalTrack //--- temporal set'ters - inline void setT( const float& t) { t_ = t; } - inline void setTSigma( const float& t_sigma ) { t_sigma_ = t_sigma; } + inline void setT( const float t) { t_ = t; } + inline void setTSigma( const float t_sigma ) { t_sigma_ = t_sigma; } - inline void setOOTIndex( const int& i ) { ts_index_ = i; } + inline void setOOTIndex( const int i ) { ts_index_ = i; } inline int getOOTIndex() const { return ts_index_; } - inline void setMultipleHits( const int& i ) { mh_ = i; } + inline void setMultipleHits( const int i ) { mh_ = i; } inline int getMultipleHits() const { return mh_; } - friend bool operator<( const CTPPSDiamondLocalTrack&, const CTPPSDiamondLocalTrack& ); - private: //--- spatial information @@ -87,8 +84,15 @@ class CTPPSDiamondLocalTrack float t_sigma_; /// Time slice index int ts_index_; + /// Multiple hits counter int mh_; }; +inline bool operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) +{ + // as for now, only sort by temporal coordinate + return ( lhs.getT() < rhs.getT() ); +} + #endif diff --git a/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc b/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc deleted file mode 100644 index 68a1412473081..0000000000000 --- a/DataFormats/CTPPSReco/src/CTPPSDiamondLocalTrack.cc +++ /dev/null @@ -1,19 +0,0 @@ -/**************************************************************************** - * - * This is a part of CTPPS offline software. - * Authors: - * Laurent Forthomme (laurent.forthomme@cern.ch) - * Nicola Minafra (nicola.minafra@cern.ch) - * - ****************************************************************************/ - -#include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" - -//---------------------------------------------------------------------------------------------------- - -bool -operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) -{ - // as for now, only sort by space coordinate - return ( lhs.getT() < rhs.getT() ); -} diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index c259f06023a08..6d2a680e4e9c4 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -57,8 +57,8 @@ - - + + diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index ef989c3822290..f6fee4f5b0f35 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -29,21 +29,21 @@ class CTPPSDiamondTrackRecognition { public: - CTPPSDiamondTrackRecognition(); CTPPSDiamondTrackRecognition( const edm::ParameterSet& ); ~CTPPSDiamondTrackRecognition(); void clear(); - void addHit(const CTPPSDiamondRecHit recHit); - - int produceTracks(edm::DetSet &tracks); - - protected: - typedef std::vector hitFunctionVector_t; - typedef std::map hitFunctionVectorMap_t; - + void addHit( const CTPPSDiamondRecHit recHit ); + + int produceTracks( edm::DetSet &tracks ); + + private: + typedef std::vector HitFunctionVector; + typedef std::map HitFunctionVectorMap; + + static const std::string pixelEfficiencyDefaultFunction_; const float threshold_; const float thresholdFromMaximum_; const float resolution_; @@ -51,15 +51,14 @@ class CTPPSDiamondTrackRecognition const float startFromX_; const float stopAtX_; std::string pixelEfficiencyFunction_; - + float yPosition; float yWidth; int nameCounter; /// Function for pad efficiency - hitFunctionVectorMap_t hitFunctionVectorMap_; + HitFunctionVectorMap hitFunctionVectorMap_; std::map mhMap_; - }; #endif diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 66dd0c0fe88e0..95a8a4a1ff929 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -13,17 +13,9 @@ #include #include -#define PAD_DEFAULT_FUNCTION "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])" - //---------------------------------------------------------------------------------------------------- -CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition() : - threshold_( 1.5 ), thresholdFromMaximum_( 0.5 ), - resolution_( 0.025 ), sigma_( 0.0 ), - startFromX_( -2 ), stopAtX_( 38 ), - pixelEfficiencyFunction_( PAD_DEFAULT_FUNCTION ), - yPosition(0.0), yWidth(0.0), nameCounter(0) -{} +const std::string CTPPSDiamondTrackRecognition::pixelEfficiencyDefaultFunction_ = "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : threshold_( iConfig.getParameter( "threshold" ) ), @@ -36,7 +28,7 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::Parameter yPosition(0.0), yWidth(0.0), nameCounter(0) { if (sigma_==.0) { - pixelEfficiencyFunction_ = PAD_DEFAULT_FUNCTION; // simple step function + pixelEfficiencyFunction_ = pixelEfficiencyDefaultFunction_; // simple step function } } @@ -52,6 +44,7 @@ CTPPSDiamondTrackRecognition::clear() { hitFunctionVectorMap_.clear(); mhMap_.clear(); + nameCounter = 0; } //---------------------------------------------------------------------------------------------------- @@ -88,10 +81,10 @@ int CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet &tracks ) { int number_of_tracks = 0; - for ( hitFunctionVectorMap_t::const_iterator ootIt=hitFunctionVectorMap_.begin(); ootIt!=hitFunctionVectorMap_.end(); ++ootIt ) { + for ( HitFunctionVectorMap::const_iterator ootIt=hitFunctionVectorMap_.begin(); ootIt!=hitFunctionVectorMap_.end(); ++ootIt ) { std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); for ( unsigned int i=0; isecond.begin(); fun_it!=ootIt->second.end(); ++fun_it ) { + for ( HitFunctionVector::const_iterator fun_it=ootIt->second.begin(); fun_it!=ootIt->second.end(); ++fun_it ) { hit_profile[i] += fun_it->Eval( startFromX_ + i*resolution_ ); } } @@ -124,15 +117,12 @@ CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet below = true; //store track - CTPPSDiamondLocalTrack track; - track.setX0Sigma( ( j-track_start_n )*resolution_*0.5 ); - track.setX0( startFromX_ + track_start_n*resolution_ + track.getX0Sigma() ); - track.setY0( yPosition ); - track.setY0Sigma( yWidth * 0.5 ); - track.setOOTIndex( ootIt->first ); - if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) track.setMultipleHits( mhMap_[ootIt->first] ); - else track.setMultipleHits( 0 ); - tracks.push_back( track ); + math::XYZPoint pos0_sigma( ( j-track_start_n )*resolution_*0.5, yWidth * 0.5, 0. ); + math::XYZPoint pos0( startFromX_ + track_start_n*resolution_ + pos0_sigma.X(), yPosition, 0. ); + int mult_hits = 0; + if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) mult_hits = mhMap_[ootIt->first]; + + tracks.push_back( CTPPSDiamondLocalTrack( pos0, pos0_sigma, 0., 0., 0., ootIt->first, mult_hits ) ); ++number_of_tracks; } } From 51530aa7f2175563228c11dc8b570d52eecc6ba2 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Sat, 18 Mar 2017 19:42:41 +0100 Subject: [PATCH 18/23] Improved memory footprint of the local tracks recognition --- .../interface/CTPPSDiamondTrackRecognition.h | 16 +++++++++---- .../python/ctppsDiamondLocalTracks_cfi.py | 3 ++- .../src/CTPPSDiamondTrackRecognition.cc | 23 ++++++++----------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index f6fee4f5b0f35..7cf5fdd7d8721 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -18,9 +18,9 @@ #include "DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h" #include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" -#include "TF1.h" #include #include +#include "TF1.h" /** * \brief Class performing smart reconstruction for CTPPS Diamond Detectors. @@ -40,8 +40,13 @@ class CTPPSDiamondTrackRecognition int produceTracks( edm::DetSet &tracks ); private: - typedef std::vector HitFunctionVector; - typedef std::map HitFunctionVectorMap; + struct HitParameters { + float center; + float width; + HitParameters( const float center, const float width) : center(center), width(width) {}; + }; + typedef std::vector HitParametersVector; + typedef std::map HitParametersVectorMap; static const std::string pixelEfficiencyDefaultFunction_; const float threshold_; @@ -56,8 +61,9 @@ class CTPPSDiamondTrackRecognition float yWidth; int nameCounter; - /// Function for pad efficiency - HitFunctionVectorMap hitFunctionVectorMap_; + /// Functions for pad efficiency + TF1 hit_f_; + HitParametersVectorMap hitParametersVectorMap_; std::map mhMap_; }; diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py index 57afba1fa27bc..b7db06ab80020 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py @@ -10,7 +10,8 @@ sigma = cms.double(0.1), # see below startFromX = cms.double(-0.5), # in mm stopAtX = cms.double(19.5), # in mm - pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), + #pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), + pixelEfficiencyFunction = cms.string("(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])"), ), ) diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 95a8a4a1ff929..3597ccf1cc104 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -30,6 +30,7 @@ CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::Parameter if (sigma_==.0) { pixelEfficiencyFunction_ = pixelEfficiencyDefaultFunction_; // simple step function } + hit_f_ = TF1( "hit_TF1_CTPPS", pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_ ); } //---------------------------------------------------------------------------------------------------- @@ -42,7 +43,7 @@ CTPPSDiamondTrackRecognition::~CTPPSDiamondTrackRecognition() void CTPPSDiamondTrackRecognition::clear() { - hitFunctionVectorMap_.clear(); + hitParametersVectorMap_.clear(); mhMap_.clear(); nameCounter = 0; } @@ -52,13 +53,8 @@ CTPPSDiamondTrackRecognition::clear() void CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) { - std::string f_name( "hit_f_" ); - f_name.append( std::to_string( ++nameCounter ) ); - - // define the hit function - TF1 hit_f( f_name.c_str(), pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_ ); - hit_f.SetParameters( recHit.getX(), recHit.getXWidth(), sigma_ ); - hitFunctionVectorMap_[recHit.getOOTIndex()].push_back( hit_f ); + // store hit parameters + hitParametersVectorMap_[recHit.getOOTIndex()].emplace_back( recHit.getX(), recHit.getXWidth() ); // Check vertical coordinates if (yPosition == .0 and yWidth == .0) { @@ -81,14 +77,15 @@ int CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet &tracks ) { int number_of_tracks = 0; - for ( HitFunctionVectorMap::const_iterator ootIt=hitFunctionVectorMap_.begin(); ootIt!=hitFunctionVectorMap_.end(); ++ootIt ) { + for ( HitParametersVectorMap::const_iterator ootIt=hitParametersVectorMap_.begin(); ootIt!=hitParametersVectorMap_.end(); ++ootIt ) { std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); - for ( unsigned int i=0; isecond.begin(); fun_it!=ootIt->second.end(); ++fun_it ) { - hit_profile[i] += fun_it->Eval( startFromX_ + i*resolution_ ); + for ( HitParametersVector::const_iterator param_it=ootIt->second.begin(); param_it!=ootIt->second.end(); ++param_it ) { + hit_f_.SetParameters( param_it->center, param_it->width, sigma_ ); + for ( unsigned int i=0; i Date: Mon, 20 Mar 2017 10:43:25 +0100 Subject: [PATCH 19/23] Use the precise pixel efficiency function instead of the fast one * Reverted the pixel efficiency function to the erf-precise one * Tracking spatial resolution/step moved from 50 to 10 um --- .../interface/CTPPSDiamondLocalTrack.h | 4 +- .../CTPPSReco/interface/CTPPSDiamondRecHit.h | 2 +- DataFormats/CTPPSReco/src/classes_def.xml | 1 + .../interface/CTPPSDiamondTrackRecognition.h | 22 ++-- .../python/ctppsDiamondLocalTracks_cfi.py | 18 +-- .../src/CTPPSDiamondTrackRecognition.cc | 108 +++++++++--------- .../TotemRPLocal/test/diamonds_reco_cfg.py | 6 +- 7 files changed, 84 insertions(+), 77 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index e00bc65265aeb..858829c07bd1e 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -22,7 +22,7 @@ class CTPPSDiamondLocalTrack chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ), ts_index_( 0 ), mh_( 0 ) {} CTPPSDiamondLocalTrack( const math::XYZPoint pos0, const math::XYZPoint pos0_sigma, float chisq, float t, float t_sigma, int oot_idx, int mult_hits ) : pos0_( pos0 ), pos0_sigma_( pos0_sigma ), - chi_squared_( chisq ), valid_( true ), + chi_squared_( chisq ), valid_( false ), t_( t ), t_sigma_( t_sigma ), ts_index_( oot_idx ), mh_( mult_hits ) {} virtual ~CTPPSDiamondLocalTrack() {} @@ -55,7 +55,7 @@ class CTPPSDiamondLocalTrack //--- temporal set'ters - inline void setT( const float t) { t_ = t; } + inline void setT( const float t ) { t_ = t; } inline void setTSigma( const float t_sigma ) { t_sigma_ = t_sigma; } inline void setOOTIndex( const int i ) { ts_index_ = i; } diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h index fd4eea8483b87..74ebb310470f3 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondRecHit.h @@ -24,7 +24,7 @@ class CTPPSDiamondRecHit CTPPSDiamondRecHit( float x, float x_width, float y, float y_width, float t, float tot, int oot_idx, const HPTDCErrorFlags& hptdc_err, const bool mh ) : x_( x ), x_width_( x_width ), y_( y ), y_width_( y_width ), t_( t ), tot_( tot ), - ts_index_( oot_idx ), hptdc_err_( hptdc_err ), mh_(mh) + ts_index_( oot_idx ), hptdc_err_( hptdc_err ), mh_( mh ) {} inline void setX( const float& x ) { x_ = x; } diff --git a/DataFormats/CTPPSReco/src/classes_def.xml b/DataFormats/CTPPSReco/src/classes_def.xml index 6d2a680e4e9c4..b0375f06f4344 100644 --- a/DataFormats/CTPPSReco/src/classes_def.xml +++ b/DataFormats/CTPPSReco/src/classes_def.xml @@ -46,6 +46,7 @@ + diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 7cf5fdd7d8721..ca0dea0c99a6f 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -24,48 +24,50 @@ /** * \brief Class performing smart reconstruction for CTPPS Diamond Detectors. + * \date Jan 2017 **/ - class CTPPSDiamondTrackRecognition { public: CTPPSDiamondTrackRecognition( const edm::ParameterSet& ); - ~CTPPSDiamondTrackRecognition(); + /// Reset the list of hits void clear(); + /// Feed a new hit to the tracks recognition algorithm void addHit( const CTPPSDiamondRecHit recHit ); - int produceTracks( edm::DetSet &tracks ); + /// Produce a collection of tracks for the current station, given its hits collection + int produceTracks( edm::DetSet& tracks ); private: struct HitParameters { + HitParameters( const float center, const float width ) : + center( center ), width( width ) {} float center; float width; - HitParameters( const float center, const float width) : center(center), width(width) {}; }; typedef std::vector HitParametersVector; typedef std::map HitParametersVectorMap; + /// Default hit function accounting for the pad spatial efficiency static const std::string pixelEfficiencyDefaultFunction_; + const float threshold_; const float thresholdFromMaximum_; const float resolution_; const float sigma_; const float startFromX_; const float stopAtX_; - std::string pixelEfficiencyFunction_; - float yPosition; - float yWidth; - int nameCounter; + float yPosition_; + float yWidth_; - /// Functions for pad efficiency + /// Function for pad efficiency TF1 hit_f_; HitParametersVectorMap hitParametersVectorMap_; std::map mhMap_; }; #endif - diff --git a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py index b7db06ab80020..b4bcb2aeeeaa9 100644 --- a/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py +++ b/RecoCTPPS/TotemRPLocal/python/ctppsDiamondLocalTracks_cfi.py @@ -6,26 +6,28 @@ trackingAlgorithmParams = cms.PSet( threshold = cms.double(1.5), thresholdFromMaximum = cms.double(0.5), - resolution = cms.double(0.05), # in mm + resolution = cms.double(0.01), # in mm sigma = cms.double(0.1), # see below startFromX = cms.double(-0.5), # in mm stopAtX = cms.double(19.5), # in mm - #pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), - pixelEfficiencyFunction = cms.string("(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])"), + pixelEfficiencyFunction = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4"), + yPosition = cms.double(0.0), + yWidth = cms.double(0.0), ), ) # # NOTE: pixelEfficiencyFunction can be defined as following: # -# "(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4" Precise -# "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])" Fast +# Precise: +# "(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4" +# Fast: +# "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])+((x-[0]+0.5*[1]+[2])/[2])*(x>[0]-0.5*[1]-[2])*(x<[0]-0.5*[1])+(2-(x-[0]-0.5*[1]+[2])/[2])*(x>[0]+0.5*[1])*(x<[0]+0.5*[1]+[2])" +# Legacy: +# "(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" # # with: # [0]: centre of pad # [1]: width of pad # [2]: sigma: distance between efficiency ~100 -> 0 outside width # -# -# Legacy -# "(1/(1+exp(-(x-[0]+0.5*[1])/[2])))*(1/(1+exp((x-[0]-0.5*[1])/[2])))" diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 3597ccf1cc104..405cacded9806 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -18,19 +18,19 @@ const std::string CTPPSDiamondTrackRecognition::pixelEfficiencyDefaultFunction_ = "(x>[0]-0.5*[1])*(x<[0]+0.5*[1])"; CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition( const edm::ParameterSet& iConfig ) : - threshold_( iConfig.getParameter( "threshold" ) ), + threshold_ ( iConfig.getParameter( "threshold" ) ), thresholdFromMaximum_( iConfig.getParameter( "thresholdFromMaximum" ) ), - resolution_( iConfig.getParameter( "resolution" ) ), - sigma_( iConfig.getParameter( "sigma" ) ), - startFromX_( iConfig.getParameter( "startFromX" ) ), - stopAtX_( iConfig.getParameter( "stopAtX" ) ), - pixelEfficiencyFunction_( iConfig.getParameter( "pixelEfficiencyFunction" ) ), - yPosition(0.0), yWidth(0.0), nameCounter(0) + resolution_ ( iConfig.getParameter( "resolution" ) ), + sigma_ ( iConfig.getParameter( "sigma" ) ), + startFromX_ ( iConfig.getParameter( "startFromX" ) ), + stopAtX_ ( iConfig.getParameter( "stopAtX" ) ), + yPosition_ ( iConfig.getParameter( "yPosition" ) ), + yWidth_ ( iConfig.getParameter( "yWidth" ) ), + hit_f_( "hit_TF1_CTPPS", iConfig.getParameter( "pixelEfficiencyFunction" ).c_str(), startFromX_, stopAtX_ ) { - if (sigma_==.0) { - pixelEfficiencyFunction_ = pixelEfficiencyDefaultFunction_; // simple step function + if (sigma_==0.0) { + hit_f_ = TF1( "hit_TF1_CTPPS", pixelEfficiencyDefaultFunction_.c_str(), startFromX_, stopAtX_ ); // simple step function } - hit_f_ = TF1( "hit_TF1_CTPPS", pixelEfficiencyFunction_.c_str(), startFromX_, stopAtX_ ); } //---------------------------------------------------------------------------------------------------- @@ -45,7 +45,6 @@ CTPPSDiamondTrackRecognition::clear() { hitParametersVectorMap_.clear(); mhMap_.clear(); - nameCounter = 0; } //---------------------------------------------------------------------------------------------------- @@ -55,26 +54,28 @@ CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) { // store hit parameters hitParametersVectorMap_[recHit.getOOTIndex()].emplace_back( recHit.getX(), recHit.getXWidth() ); - + // Check vertical coordinates - if (yPosition == .0 and yWidth == .0) { - yPosition = recHit.getY(); - yWidth = recHit.getYWidth(); + if ( yPosition_ == 0.0 and yWidth_ == 0.0 ) { + yPosition_ = recHit.getY(); + yWidth_ = recHit.getYWidth(); } - + //Multiple hits in the RP if ( recHit.getMultipleHits() ) { - if (mhMap_.find( recHit.getOOTIndex() ) == mhMap_.end()) + if ( mhMap_.find( recHit.getOOTIndex() ) == mhMap_.end() ) { mhMap_[recHit.getOOTIndex()] = 1; - else - ++(mhMap_[recHit.getOOTIndex()]); + } + else { + ++( mhMap_[recHit.getOOTIndex()] ); + } } } //---------------------------------------------------------------------------------------------------- int -CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet &tracks ) +CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet& tracks ) { int number_of_tracks = 0; for ( HitParametersVectorMap::const_iterator ootIt=hitParametersVectorMap_.begin(); ootIt!=hitParametersVectorMap_.end(); ++ootIt ) { @@ -82,52 +83,53 @@ CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet for ( HitParametersVector::const_iterator param_it=ootIt->second.begin(); param_it!=ootIt->second.end(); ++param_it ) { hit_f_.SetParameters( param_it->center, param_it->width, sigma_ ); for ( unsigned int i=0; i= threshold_ ) { // going above the threshold - track_start_n = i; - maximum=0; - below = false; + track_start_n = i; + maximum=0; + below = false; } if ( !below ) { - if ( hit_profile[i] > maximum ) { - maximum = hit_profile[i]; - } - if ( hit_profile[i] < threshold_ ) { // going back below the threshold - below = true; - - // go back and use new threshold - const float threshold = maximum - thresholdFromMaximum_; - for ( unsigned int j=track_start_n; j<=i; ++j ) { - if ( below && hit_profile[j] >= threshold ) { // going above the threshold - track_start_n = j; - below = false; - } - if ( !below && hit_profile[j] < threshold ) { // going back below the threshold - below = true; - - //store track - math::XYZPoint pos0_sigma( ( j-track_start_n )*resolution_*0.5, yWidth * 0.5, 0. ); - math::XYZPoint pos0( startFromX_ + track_start_n*resolution_ + pos0_sigma.X(), yPosition, 0. ); + if ( hit_profile[i] > maximum ) { + maximum = hit_profile[i]; + } + if ( hit_profile[i] < threshold_ ) { // going back below the threshold + below = true; + + // go back and use new threshold + const float threshold = maximum - thresholdFromMaximum_; + for ( unsigned int j=track_start_n; j<=i; ++j ) { + if ( below && hit_profile[j] >= threshold ) { // going above the threshold + track_start_n = j; + below = false; + } + if ( !below && hit_profile[j] < threshold ) { // going back below the threshold + below = true; + + //store track + math::XYZPoint pos0_sigma( ( j-track_start_n )*resolution_*0.5, yWidth_ * 0.5, 0. ); + math::XYZPoint pos0( startFromX_ + track_start_n*resolution_ + pos0_sigma.X(), yPosition_, 0. ); int mult_hits = 0; - if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) mult_hits = mhMap_[ootIt->first]; - - tracks.push_back( CTPPSDiamondLocalTrack( pos0, pos0_sigma, 0., 0., 0., ootIt->first, mult_hits ) ); - ++number_of_tracks; - } - } - } + if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) mult_hits = mhMap_[ootIt->first]; + + CTPPSDiamondLocalTrack track( pos0, pos0_sigma, 0., 0., 0., ootIt->first, mult_hits ); + track.setValid( true ); + tracks.push_back( track ); + ++number_of_tracks; + } + } + } } } } - + return number_of_tracks; } - diff --git a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py index fe0aab0a340d4..5b98c0d7e5acf 100644 --- a/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py +++ b/RecoCTPPS/TotemRPLocal/test/diamonds_reco_cfg.py @@ -56,9 +56,9 @@ # local tracks fitter process.load('RecoCTPPS.TotemRPLocal.ctppsDiamondLocalTracks_cfi') -process.ctppsDiamondLocalTracks.trackingAlgorithmParams.threshold = cms.double(1.5) -process.ctppsDiamondLocalTracks.trackingAlgorithmParams.sigma = cms.double(0) -process.ctppsDiamondLocalTracks.trackingAlgorithmParams.resolution = cms.double(0.025) # in mm +#process.ctppsDiamondLocalTracks.trackingAlgorithmParams.threshold = cms.double(1.5) +#process.ctppsDiamondLocalTracks.trackingAlgorithmParams.sigma = cms.double(0) +#process.ctppsDiamondLocalTracks.trackingAlgorithmParams.resolution = cms.double(0.025) # in mm #process.ctppsDiamondLocalTracks.trackingAlgorithmParams.pixel_efficiency_function = cms.string("(TMath::Erf((x-[0]+0.5*[1])/([2]/4)+2)+1)*TMath::Erfc((x-[0]-0.5*[1])/([2]/4)-2)/4") process.output = cms.OutputModule("PoolOutputModule", From fd4dd253fbbe9584be11ef0fc5282723c285d8c7 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Wed, 22 Mar 2017 21:46:36 +0100 Subject: [PATCH 20/23] Passing by references ; range for loops --- .../CTPPSReco/interface/CTPPSDiamondLocalTrack.h | 8 ++++---- .../interface/CTPPSDiamondTrackRecognition.h | 2 +- .../TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 858829c07bd1e..3169cd96e779e 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -20,7 +20,7 @@ class CTPPSDiamondLocalTrack public: CTPPSDiamondLocalTrack() : chi_squared_( 0. ), valid_( true ), t_( 0. ), t_sigma_( 0. ), ts_index_( 0 ), mh_( 0 ) {} - CTPPSDiamondLocalTrack( const math::XYZPoint pos0, const math::XYZPoint pos0_sigma, float chisq, float t, float t_sigma, int oot_idx, int mult_hits ) : + CTPPSDiamondLocalTrack( const math::XYZPoint& pos0, const math::XYZPoint& pos0_sigma, float chisq, float t, float t_sigma, int oot_idx, int mult_hits ) : pos0_( pos0 ), pos0_sigma_( pos0_sigma ), chi_squared_( chisq ), valid_( false ), t_( t ), t_sigma_( t_sigma ), ts_index_( oot_idx ), mh_( mult_hits ) {} @@ -40,8 +40,8 @@ class CTPPSDiamondLocalTrack //--- spatial set'ters - inline void setPosition( const math::XYZPoint pos0 ) { pos0_ = pos0; } - inline void setPositionSigma( const math::XYZPoint pos0_sigma ) { pos0_sigma_ = pos0_sigma; } + inline void setPosition( const math::XYZPoint& pos0 ) { pos0_ = pos0; } + inline void setPositionSigma( const math::XYZPoint& pos0_sigma ) { pos0_sigma_ = pos0_sigma; } inline void setChiSquared( const float chisq ) { chi_squared_ = chisq; } @@ -92,7 +92,7 @@ class CTPPSDiamondLocalTrack inline bool operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) { // as for now, only sort by temporal coordinate - return ( lhs.getT() < rhs.getT() ); + return ( lhs.getT() < rhs.getT() || lhs.getX0() < rhs.getX0() ); } #endif diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index ca0dea0c99a6f..656c630651300 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -36,7 +36,7 @@ class CTPPSDiamondTrackRecognition void clear(); /// Feed a new hit to the tracks recognition algorithm - void addHit( const CTPPSDiamondRecHit recHit ); + void addHit( const CTPPSDiamondRecHit& recHit ); /// Produce a collection of tracks for the current station, given its hits collection int produceTracks( edm::DetSet& tracks ); diff --git a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc index 405cacded9806..b816479666c3f 100644 --- a/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc +++ b/RecoCTPPS/TotemRPLocal/src/CTPPSDiamondTrackRecognition.cc @@ -50,7 +50,7 @@ CTPPSDiamondTrackRecognition::clear() //---------------------------------------------------------------------------------------------------- void -CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit recHit ) +CTPPSDiamondTrackRecognition::addHit( const CTPPSDiamondRecHit& recHit ) { // store hit parameters hitParametersVectorMap_[recHit.getOOTIndex()].emplace_back( recHit.getX(), recHit.getXWidth() ); @@ -78,10 +78,10 @@ int CTPPSDiamondTrackRecognition::produceTracks( edm::DetSet& tracks ) { int number_of_tracks = 0; - for ( HitParametersVectorMap::const_iterator ootIt=hitParametersVectorMap_.begin(); ootIt!=hitParametersVectorMap_.end(); ++ootIt ) { + for ( auto const& oot : hitParametersVectorMap_ ) { std::vector hit_profile( ( stopAtX_-startFromX_ )/resolution_, 0. ); - for ( HitParametersVector::const_iterator param_it=ootIt->second.begin(); param_it!=ootIt->second.end(); ++param_it ) { - hit_f_.SetParameters( param_it->center, param_it->width, sigma_ ); + for ( auto const& param : oot.second ) { + hit_f_.SetParameters( param.center, param.width, sigma_ ); for ( unsigned int i=0; i math::XYZPoint pos0_sigma( ( j-track_start_n )*resolution_*0.5, yWidth_ * 0.5, 0. ); math::XYZPoint pos0( startFromX_ + track_start_n*resolution_ + pos0_sigma.X(), yPosition_, 0. ); int mult_hits = 0; - if ( mhMap_.find( ootIt->first ) != mhMap_.end() ) mult_hits = mhMap_[ootIt->first]; + if ( mhMap_.find( oot.first ) != mhMap_.end() ) mult_hits = mhMap_[oot.first]; - CTPPSDiamondLocalTrack track( pos0, pos0_sigma, 0., 0., 0., ootIt->first, mult_hits ); + CTPPSDiamondLocalTrack track( pos0, pos0_sigma, 0., 0., 0., oot.first, mult_hits ); track.setValid( true ); tracks.push_back( track ); ++number_of_tracks; From f45af97e20001070e99a9e0bd3afd954691b9a34 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Mon, 27 Mar 2017 15:08:42 +0200 Subject: [PATCH 21/23] Tracks sorting by temporal, then by spatial position --- DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h index 3169cd96e779e..66308ed17dffc 100644 --- a/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h +++ b/DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h @@ -91,8 +91,11 @@ class CTPPSDiamondLocalTrack inline bool operator<( const CTPPSDiamondLocalTrack& lhs, const CTPPSDiamondLocalTrack& rhs ) { - // as for now, only sort by temporal coordinate - return ( lhs.getT() < rhs.getT() || lhs.getX0() < rhs.getX0() ); + // start to sort by temporal coordinate + if ( lhs.getT() < rhs.getT() ) return true; + if ( lhs.getT() > rhs.getT() ) return false; + // then sort by x-position + return ( lhs.getX0() < rhs.getX0() ); } #endif From edf142738d6e7f90e33c56f7ea03efbadf9d2923 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Tue, 28 Mar 2017 23:02:31 +0200 Subject: [PATCH 22/23] Track recognition algorithms not defined as pointers --- .../plugins/CTPPSDiamondLocalTrackFitter.cc | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc index a006335353d23..c9a4e8fe766a1 100644 --- a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -37,23 +37,20 @@ class CTPPSDiamondLocalTrackFitter : public edm::stream::EDProducer<> virtual void produce( edm::Event&, const edm::EventSetup& ) override; edm::EDGetTokenT< edm::DetSetVector > recHitsToken_; - CTPPSDiamondTrackRecognition* trk_algo_45_; - CTPPSDiamondTrackRecognition* trk_algo_56_; + CTPPSDiamondTrackRecognition trk_algo_45_; + CTPPSDiamondTrackRecognition trk_algo_56_; }; CTPPSDiamondLocalTrackFitter::CTPPSDiamondLocalTrackFitter( const edm::ParameterSet& iConfig ) : recHitsToken_( consumes< edm::DetSetVector >( iConfig.getParameter( "recHitsTag" ) ) ), - trk_algo_45_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ), - trk_algo_56_ ( new CTPPSDiamondTrackRecognition( iConfig.getParameter( "trackingAlgorithmParams" ) ) ) + trk_algo_45_ ( iConfig.getParameter( "trackingAlgorithmParams" ) ), + trk_algo_56_ ( iConfig.getParameter( "trackingAlgorithmParams" ) ) { produces< edm::DetSetVector >(); } CTPPSDiamondLocalTrackFitter::~CTPPSDiamondLocalTrackFitter() -{ - if ( trk_algo_45_ ) delete trk_algo_45_; - if ( trk_algo_56_ ) delete trk_algo_56_; -} +{} void CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup& iSetup ) @@ -63,8 +60,7 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup edm::Handle< edm::DetSetVector > recHits; iEvent.getByToken( recHitsToken_, recHits ); - const CTPPSDiamondDetId id_45( 0, 1, 6, 0, 0 ), - id_56( 1, 1, 6, 0, 0 ); + const CTPPSDiamondDetId id_45( 0, 1, 6, 0, 0 ), id_56( 1, 1, 6, 0, 0 ); pOut->find_or_insert( id_45 ); // tracks in 4-5 edm::DetSet& tracks56 = pOut->find_or_insert( id_56 ); // tracks in 5-6 @@ -73,8 +69,8 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup edm::DetSet& tracks45 = pOut->operator[]( id_45 ); // first remove all hits from previous event - trk_algo_45_->clear(); - trk_algo_56_->clear(); + trk_algo_45_.clear(); + trk_algo_56_.clear(); for ( edm::DetSetVector::const_iterator vec = recHits->begin(); vec != recHits->end(); ++vec ) { @@ -84,19 +80,19 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup { for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) { - trk_algo_45_->addHit( *hit ); + trk_algo_45_.addHit( *hit ); } } else { for ( edm::DetSet::const_iterator hit = vec->begin(); hit != vec->end(); ++hit ) { - trk_algo_56_->addHit( *hit ); + trk_algo_56_.addHit( *hit ); } } } - trk_algo_45_->produceTracks( tracks45 ); - trk_algo_56_->produceTracks( tracks56 ); + trk_algo_45_.produceTracks( tracks45 ); + trk_algo_56_.produceTracks( tracks56 ); iEvent.put( std::move( pOut ) ); } From 1744996f0ee8d821c7fca227515abca3cfbcd2b5 Mon Sep 17 00:00:00 2001 From: Laurent Forthomme Date: Thu, 30 Mar 2017 10:25:52 +0200 Subject: [PATCH 23/23] Unordered maps for the parameters and hitmp in local tracks fitter ; clearing the fitters' hits collection after the event is filled --- .../interface/CTPPSDiamondTrackRecognition.h | 6 +++--- .../plugins/CTPPSDiamondLocalTrackFitter.cc | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h index 656c630651300..df5522e92bb7d 100644 --- a/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h +++ b/RecoCTPPS/TotemRPLocal/interface/CTPPSDiamondTrackRecognition.h @@ -19,7 +19,7 @@ #include "DataFormats/CTPPSReco/interface/CTPPSDiamondLocalTrack.h" #include -#include +#include #include "TF1.h" /** @@ -49,7 +49,7 @@ class CTPPSDiamondTrackRecognition float width; }; typedef std::vector HitParametersVector; - typedef std::map HitParametersVectorMap; + typedef std::unordered_map HitParametersVectorMap; /// Default hit function accounting for the pad spatial efficiency static const std::string pixelEfficiencyDefaultFunction_; @@ -67,7 +67,7 @@ class CTPPSDiamondTrackRecognition /// Function for pad efficiency TF1 hit_f_; HitParametersVectorMap hitParametersVectorMap_; - std::map mhMap_; + std::unordered_map mhMap_; }; #endif diff --git a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc index c9a4e8fe766a1..ea9faa595a345 100644 --- a/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc +++ b/RecoCTPPS/TotemRPLocal/plugins/CTPPSDiamondLocalTrackFitter.cc @@ -68,10 +68,7 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup // workaround to retrieve the detset for 4-5 without losing the reference edm::DetSet& tracks45 = pOut->operator[]( id_45 ); - // first remove all hits from previous event - trk_algo_45_.clear(); - trk_algo_56_.clear(); - + // feed hits to the track producers for ( edm::DetSetVector::const_iterator vec = recHits->begin(); vec != recHits->end(); ++vec ) { const CTPPSDiamondDetId detid( vec->detId() ); @@ -91,10 +88,15 @@ CTPPSDiamondLocalTrackFitter::produce( edm::Event& iEvent, const edm::EventSetup } } + // retrieve the tracks for both arms trk_algo_45_.produceTracks( tracks45 ); trk_algo_56_.produceTracks( tracks56 ); iEvent.put( std::move( pOut ) ); + + // remove all hits from the track producers to prepare for the next event + trk_algo_45_.clear(); + trk_algo_56_.clear(); } void