CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
FastTrackDeDxProducer Class Reference

#include <RecoTracker/FastTrackDeDxProducer/src/FastTrackDeDxProducer.cc>

Inheritance diagram for FastTrackDeDxProducer:
edm::stream::EDProducer<>

Public Member Functions

 FastTrackDeDxProducer (const edm::ParameterSet &)
 
 ~FastTrackDeDxProducer () override=default
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void beginRun (edm::Run const &, const edm::EventSetup &) override
 
void makeCalibrationMap (const TrackerGeometry &tkGeom)
 
void processHit (const FastTrackerRecHit &recHit, float trackMomentum, float &cosine, reco::DeDxHitCollection &dedxHits, int &NClusterSaturating)
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::vector< std::vector< float > > calibGains
 
bool convertFromGeV2MeV
 
std::string m_calibrationPath
 
std::unique_ptr
< BaseDeDxEstimator
m_estimator
 
unsigned int m_off
 
edm::EDGetTokenT
< reco::TrackCollection
m_tracksTag
 
unsigned int MaxNrStrips
 
float meVperADCPixel
 
float meVperADCStrip
 
bool nothick
 
bool shapetest
 
edm::EDGetTokenT
< FastTrackerRecHitRefCollection
simHit2RecHitMapToken
 
edm::EDGetTokenT
< edm::PSimHitContainer
simHitsToken
 
edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
tkGeomToken
 
bool useCalibration
 
bool usePixel
 
bool useStrip
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: <one line="" class="" summary>="">

Implementation: <Notes on="" implementation>="">

Definition at line 67 of file FastTrackDeDxProducer.cc.

Constructor & Destructor Documentation

FastTrackDeDxProducer::FastTrackDeDxProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 138 of file FastTrackDeDxProducer.cc.

References convertFromGeV2MeV, Exception, edm::ParameterSet::getParameter(), m_calibrationPath, m_estimator, m_tracksTag, meVperADCPixel, meVperADCStrip, nothick, shapetest, tkGeomToken, useCalibration, usePixel, and useStrip.

139  : simHitsToken(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("simHits"))),
141  consumes<FastTrackerRecHitRefCollection>(iConfig.getParameter<edm::InputTag>("simHit2RecHitMap"))) {
142  produces<ValueMap<DeDxData>>();
143 
144  auto cCollector = consumesCollector();
145  string estimatorName = iConfig.getParameter<string>("estimator");
146  if (estimatorName == "median")
147  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new MedianDeDxEstimator(iConfig));
148  else if (estimatorName == "generic")
149  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new GenericAverageDeDxEstimator(iConfig));
150  else if (estimatorName == "truncated")
151  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new TruncatedAverageDeDxEstimator(iConfig));
152  //else if(estimatorName == "unbinnedFit") m_estimator = std::unique_ptr<BaseDeDxEstimator> (new UnbinnedFitDeDxEstimator(iConfig));//estimator used in FullSimVersion
153  else if (estimatorName == "productDiscrim")
154  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ProductDeDxDiscriminator(iConfig, cCollector));
155  else if (estimatorName == "btagDiscrim")
156  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new BTagLikeDeDxDiscriminator(iConfig, cCollector));
157  else if (estimatorName == "smirnovDiscrim")
158  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new SmirnovDeDxDiscriminator(iConfig, cCollector));
159  else if (estimatorName == "asmirnovDiscrim")
160  m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ASmirnovDeDxDiscriminator(iConfig, cCollector));
161  else
162  throw cms::Exception("fastsim::SimplifiedGeometry::FastTrackDeDxProducer.cc") << " estimator name does not exist";
163 
164  //Commented for now, might be used in the future
165  // MaxNrStrips = iConfig.getUntrackedParameter<unsigned>("maxNrStrips" , 255);
166 
167  m_tracksTag = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracks"));
168 
169  usePixel = iConfig.getParameter<bool>("UsePixel");
170  useStrip = iConfig.getParameter<bool>("UseStrip");
171  meVperADCPixel = iConfig.getParameter<double>("MeVperADCPixel");
172  meVperADCStrip = iConfig.getParameter<double>("MeVperADCStrip");
173 
174  shapetest = iConfig.getParameter<bool>("ShapeTest");
175  useCalibration = iConfig.getParameter<bool>("UseCalibration");
176  m_calibrationPath = iConfig.getParameter<string>("calibrationPath");
177 
178  convertFromGeV2MeV = iConfig.getParameter<bool>("convertFromGeV2MeV");
179  nothick = iConfig.getParameter<bool>("nothick");
180 
181  if (!usePixel && !useStrip)
182  throw cms::Exception("fastsim::SimplifiedGeometry::FastTrackDeDxProducer.cc")
183  << " neither pixel hits nor strips hits will be used to compute de/dx";
184 
185  if (useCalibration) {
186  tkGeomToken = esConsumes<edm::Transition::BeginRun>();
187  }
188 }
edm::EDGetTokenT< reco::TrackCollection > m_tracksTag
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken
edm::EDGetTokenT< FastTrackerRecHitRefCollection > simHit2RecHitMapToken
edm::EDGetTokenT< edm::PSimHitContainer > simHitsToken
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::unique_ptr< BaseDeDxEstimator > m_estimator
FastTrackDeDxProducer::~FastTrackDeDxProducer ( )
overridedefault

Member Function Documentation

void FastTrackDeDxProducer::beginRun ( edm::Run const &  run,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 191 of file FastTrackDeDxProducer.cc.

References calibGains, edm::EventSetup::getData(), m_calibrationPath, m_estimator, m_off, DeDxTools::makeCalibrationMap(), GeomDetEnumerators::PixelBarrel, tkGeomToken, and useCalibration.

191  {
192  if (useCalibration && calibGains.empty()) {
193  auto const& tkGeom = iSetup.getData(tkGeomToken);
194  m_off = tkGeom.offsetDU(GeomDetEnumerators::PixelBarrel); //index start at the first pixel
195 
197  }
198 
199  m_estimator->beginRun(run, iSetup);
200 }
void makeCalibrationMap(const std::string &m_calibrationPath, const TrackerGeometry &tkGeom, std::vector< std::vector< float >> &calibGains, const unsigned int &m_off)
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken
bool getData(T &iHolder) const
Definition: EventSetup.h:122
std::vector< std::vector< float > > calibGains
std::unique_ptr< BaseDeDxEstimator > m_estimator
void FastTrackDeDxProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 116 of file FastTrackDeDxProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), submitPVResolutionJobs::desc, and HLT_FULL_cff::InputTag.

116  {
118  desc.add<string>("estimator", "generic");
119  desc.add<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
120  desc.add<bool>("UsePixel", false);
121  desc.add<bool>("UseStrip", true);
122  desc.add<double>("MeVperADCStrip", 3.61e-06 * 265);
123  desc.add<double>("MeVperADCPixel", 3.61e-06);
124  desc.add<bool>("ShapeTest", true);
125  desc.add<bool>("UseCalibration", false);
126  desc.add<string>("calibrationPath", "");
127  desc.add<string>("Reccord", "SiStripDeDxMip_3D_Rcd");
128  desc.add<string>("ProbabilityMode", "Accumulation");
129  desc.add<double>("fraction", 0.4);
130  desc.add<double>("exponent", -2.0);
131  desc.add<bool>("convertFromGeV2MeV", true);
132  desc.add<bool>("nothick", false);
133  desc.add<edm::InputTag>("simHits");
134  desc.add<edm::InputTag>("simHit2RecHitMap");
135  descriptions.add("FastTrackDeDxProducer", desc);
136 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void FastTrackDeDxProducer::makeCalibrationMap ( const TrackerGeometry tkGeom)
private
void FastTrackDeDxProducer::processHit ( const FastTrackerRecHit recHit,
float  trackMomentum,
float &  cosine,
reco::DeDxHitCollection dedxHits,
int &  NClusterSaturating 
)
private

Definition at line 246 of file FastTrackDeDxProducer.cc.

References RecoTauCleanerPlugins::charge, runTheMatrix::const, convertFromGeV2MeV, TrackingRecHit::detUnit(), FastTrackerRecHit::energyLoss(), TrackingRecHit::geographicalId(), FastTrackerRecHit::isPixel(), TrackingRecHit::isValid(), nothick, shapetest, usePixel, and useStrip.

Referenced by produce().

250  {
251  if (!recHit.isValid())
252  return;
253 
254  auto const& thit = static_cast<BaseTrackerRecHit const&>(recHit);
255  if (!thit.isValid())
256  return;
257  if (!thit.hasPositionAndError())
258  return;
259 
260  if (recHit.isPixel()) {
261  if (!usePixel)
262  return;
263 
264  auto& detUnit = *(recHit.detUnit());
265  float pathLen = detUnit.surface().bounds().thickness() / fabs(cosine);
266  if (nothick)
267  pathLen = 1.0;
268  float charge = recHit.energyLoss() / pathLen;
269  if (convertFromGeV2MeV)
270  charge *= 1000;
271  dedxHits.push_back(DeDxHit(charge, trackMomentum, pathLen, recHit.geographicalId()));
272  } else if (!recHit.isPixel()) { // && !recHit.isMatched()){//check what recHit.isMatched is doing
273  if (!useStrip)
274  return;
275  auto& detUnit = *(recHit.detUnit());
276  float pathLen = detUnit.surface().bounds().thickness() / fabs(cosine);
277  if (nothick)
278  pathLen = 1.0;
279  float dedxOfRecHit = recHit.energyLoss() / pathLen;
280  if (convertFromGeV2MeV)
281  dedxOfRecHit *= 1000;
282  if (!shapetest) {
283  dedxHits.push_back(DeDxHit(dedxOfRecHit, trackMomentum, pathLen, recHit.geographicalId()));
284  }
285  }
286 }
float energyLoss() const
bool isPixel() const override
pixel or strip?
bool isValid() const
virtual const GeomDetUnit * detUnit() const
DetId geographicalId() const
void FastTrackDeDxProducer::produce ( edm::Event iEvent,
const edm::EventSetup  
)
overrideprivate

Definition at line 202 of file FastTrackDeDxProducer.cc.

References cms::cuda::assert(), edm::Event::getByToken(), h, hcalSimParameters_cfi::hb, TrackingRecHit::isValid(), dqmiolumiharvest::j, m_estimator, m_tracksTag, eostools::move(), processHit(), edm::Handle< T >::product(), edm::Event::put(), HLT_FULL_cff::track, and HLT_FULL_cff::trackCollection.

202  {
203  auto trackDeDxEstimateAssociation = std::make_unique<ValueMap<DeDxData>>();
204  ValueMap<DeDxData>::Filler filler(*trackDeDxEstimateAssociation);
205 
206  edm::Handle<reco::TrackCollection> trackCollectionHandle;
207  iEvent.getByToken(m_tracksTag, trackCollectionHandle);
208  const auto& trackCollection = *trackCollectionHandle;
209  std::vector<DeDxData> dedxEstimate(trackCollection.size());
210 
211  for (unsigned int j = 0; j < trackCollection.size(); j++) {
212  const reco::TrackRef track = reco::TrackRef(trackCollectionHandle.product(), j);
213 
214  int NClusterSaturating = 0;
215  DeDxHitCollection dedxHits;
216 
217  auto const& trajParams = track->extra()->trajParams();
218  assert(trajParams.size() == track->recHitsSize());
219 
220  auto hb = track->recHitsBegin();
221  dedxHits.reserve(track->recHitsSize() / 2);
222 
223  for (unsigned int h = 0; h < track->recHitsSize(); h++) {
224  const FastTrackerRecHit& recHit = static_cast<const FastTrackerRecHit&>(*(*(hb + h)));
225  if (!recHit.isValid())
226  continue; //FastTrackerRecHit recHit = *(hb+h);
227  auto trackDirection = trajParams[h].direction();
228  float cosine = trackDirection.z() / trackDirection.mag();
229  processHit(recHit, track->p(), cosine, dedxHits, NClusterSaturating);
230  }
231 
232  sort(dedxHits.begin(), dedxHits.end(), less<DeDxHit>());
233  std::pair<float, float> val_and_error = m_estimator->dedx(dedxHits);
234  //WARNING: Since the dEdX Error is not properly computed for the moment
235  //It was decided to store the number of saturating cluster in that dataformat
236  val_and_error.second = NClusterSaturating;
237  dedxEstimate[j] = DeDxData(val_and_error.first, val_and_error.second, dedxHits.size());
238  }
239 
240  filler.insert(trackCollectionHandle, dedxEstimate.begin(), dedxEstimate.end());
241  // fill the association map and put it into the event
242  filler.fill();
243  iEvent.put(std::move(trackDeDxEstimateAssociation));
244 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
void processHit(const FastTrackerRecHit &recHit, float trackMomentum, float &cosine, reco::DeDxHitCollection &dedxHits, int &NClusterSaturating)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
edm::EDGetTokenT< reco::TrackCollection > m_tracksTag
std::vector< DeDxHit > DeDxHitCollection
Definition: DeDxHit.h:41
assert(be >=bs)
def move
Definition: eostools.py:511
tuple trackCollection
T const * product() const
Definition: Handle.h:70
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
bool isValid() const
std::unique_ptr< BaseDeDxEstimator > m_estimator
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

Member Data Documentation

std::vector<std::vector<float> > FastTrackDeDxProducer::calibGains
private

Definition at line 97 of file FastTrackDeDxProducer.cc.

Referenced by beginRun().

bool FastTrackDeDxProducer::convertFromGeV2MeV
private

Definition at line 108 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and processHit().

std::string FastTrackDeDxProducer::m_calibrationPath
private

Definition at line 95 of file FastTrackDeDxProducer.cc.

Referenced by beginRun(), and FastTrackDeDxProducer().

std::unique_ptr<BaseDeDxEstimator> FastTrackDeDxProducer::m_estimator
private

Definition at line 86 of file FastTrackDeDxProducer.cc.

Referenced by beginRun(), FastTrackDeDxProducer(), and produce().

unsigned int FastTrackDeDxProducer::m_off
private

Definition at line 98 of file FastTrackDeDxProducer.cc.

Referenced by beginRun().

edm::EDGetTokenT<reco::TrackCollection> FastTrackDeDxProducer::m_tracksTag
private

Definition at line 88 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and produce().

unsigned int FastTrackDeDxProducer::MaxNrStrips
private

Definition at line 93 of file FastTrackDeDxProducer.cc.

float FastTrackDeDxProducer::meVperADCPixel
private

Definition at line 90 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer().

float FastTrackDeDxProducer::meVperADCStrip
private

Definition at line 91 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer().

bool FastTrackDeDxProducer::nothick
private

Definition at line 109 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and processHit().

bool FastTrackDeDxProducer::shapetest
private

Definition at line 107 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and processHit().

edm::EDGetTokenT<FastTrackerRecHitRefCollection> FastTrackDeDxProducer::simHit2RecHitMapToken
private

Definition at line 101 of file FastTrackDeDxProducer.cc.

edm::EDGetTokenT<edm::PSimHitContainer> FastTrackDeDxProducer::simHitsToken
private

Definition at line 100 of file FastTrackDeDxProducer.cc.

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> FastTrackDeDxProducer::tkGeomToken
private

Definition at line 102 of file FastTrackDeDxProducer.cc.

Referenced by beginRun(), and FastTrackDeDxProducer().

bool FastTrackDeDxProducer::useCalibration
private

Definition at line 106 of file FastTrackDeDxProducer.cc.

Referenced by beginRun(), and FastTrackDeDxProducer().

bool FastTrackDeDxProducer::usePixel
private

Definition at line 104 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and processHit().

bool FastTrackDeDxProducer::useStrip
private

Definition at line 105 of file FastTrackDeDxProducer.cc.

Referenced by FastTrackDeDxProducer(), and processHit().