13
13
#include < memory>
14
14
#include < algorithm>
15
15
#include < map>
16
- #include " FWCore/Framework/interface/Event.h"
17
- #include " FWCore/ParameterSet/interface/ParameterSet.h"
18
- #include " FWCore/Utilities/interface/InputTag.h"
19
16
20
- #include " DataFormats/TrackReco/interface/TrackFwd.h"
17
+ #include " CommonTools/Utils/interface/StringCutObjectSelector.h"
18
+ #include " DataFormats/BeamSpot/interface/BeamSpot.h"
21
19
#include " DataFormats/TrackReco/interface/Track.h"
22
20
#include " DataFormats/TrackReco/interface/TrackExtra.h"
23
- #include " DataFormats/VertexReco/interface/VertexFwd.h"
21
+ #include " DataFormats/TrackReco/interface/TrackFwd.h"
22
+ #include " DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
24
23
#include " DataFormats/VertexReco/interface/Vertex.h"
25
- #include " DataFormats/BeamSpot/interface/BeamSpot.h"
26
- #include " TrackingTools/PatternTools/interface/Trajectory.h"
24
+ #include " DataFormats/VertexReco/interface/VertexFwd.h"
25
+ #include " FWCore/Framework/interface/Event.h"
26
+ #include " FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
27
+ #include " FWCore/ParameterSet/interface/ParameterSet.h"
28
+ #include " FWCore/ParameterSet/interface/ParameterSetDescription.h"
29
+ #include " FWCore/Utilities/interface/InputTag.h"
27
30
#include " TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
28
- #include " DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
29
- #include " CommonTools/Utils/interface/StringCutObjectSelector.h"
31
+ #include " TrackingTools/PatternTools/interface/Trajectory.h"
30
32
31
33
#include " MultiTrackSelector.h"
32
34
@@ -38,7 +40,9 @@ class dso_hidden AnalyticalTrackSelector final : public MultiTrackSelector {
38
40
// / constructor
39
41
explicit AnalyticalTrackSelector (const edm::ParameterSet& cfg);
40
42
// / destructor
41
- ~AnalyticalTrackSelector () override ;
43
+ ~AnalyticalTrackSelector () override = default ;
44
+ // / fillDescriptions
45
+ static void fillDescriptions (edm::ConfigurationDescriptions& descriptions);
42
46
43
47
private:
44
48
typedef math::XYZPoint Point ;
@@ -101,10 +105,8 @@ AnalyticalTrackSelector::AnalyticalTrackSelector(const edm::ParameterSet& cfg) :
101
105
produces<edm::ValueMap<float >>(" MVAVals" );
102
106
// foward compatibility
103
107
produces<MVACollection>(" MVAValues" );
104
- useAnyMVA_ = false ;
105
108
forest_[0 ] = nullptr ;
106
- if (cfg.exists (" useAnyMVA" ))
107
- useAnyMVA_ = cfg.getParameter <bool >(" useAnyMVA" );
109
+ useAnyMVA_ = cfg.getParameter <bool >(" useAnyMVA" );
108
110
109
111
src_ = consumes<reco::TrackCollection>(cfg.getParameter <edm::InputTag>(" src" ));
110
112
hSrc_ = consumes<TrackingRecHitCollection>(cfg.getParameter <edm::InputTag>(" src" ));
@@ -146,16 +148,14 @@ AnalyticalTrackSelector::AnalyticalTrackSelector(const edm::ParameterSet& cfg) :
146
148
min_hits_bypass_.push_back (cfg.getParameter <uint32_t >(" minHitsToBypassChecks" ));
147
149
max_relpterr_.push_back (cfg.getParameter <double >(" max_relpterr" ));
148
150
min_nhits_.push_back (cfg.getParameter <uint32_t >(" min_nhits" ));
149
- max_minMissHitOutOrIn_.push_back (
150
- cfg.existsAs <int32_t >(" max_minMissHitOutOrIn" ) ? cfg.getParameter <int32_t >(" max_minMissHitOutOrIn" ) : 99 );
151
- max_lostHitFraction_.push_back (
152
- cfg.existsAs <double >(" max_lostHitFraction" ) ? cfg.getParameter <double >(" max_lostHitFraction" ) : 1.0 );
151
+ max_minMissHitOutOrIn_.push_back (cfg.getParameter <int32_t >(" max_minMissHitOutOrIn" ));
152
+ max_lostHitFraction_.push_back (cfg.getParameter <double >(" max_lostHitFraction" ));
153
153
min_eta_.push_back (cfg.getParameter <double >(" min_eta" ));
154
154
max_eta_.push_back (cfg.getParameter <double >(" max_eta" ));
155
155
156
156
// Flag to apply absolute cuts if no PV passes the selection
157
157
applyAbsCutsIfNoPV_.push_back (cfg.getParameter <bool >(" applyAbsCutsIfNoPV" ));
158
- keepAllTracks_.push_back (cfg.exists ( " keepAllTracks " ) ? cfg. getParameter <bool >(" keepAllTracks" ) : false );
158
+ keepAllTracks_.push_back (cfg.getParameter <bool >(" keepAllTracks" ));
159
159
160
160
setQualityBit_.push_back (false );
161
161
std::string qualityStr = cfg.getParameter <std::string>(" qualityBit" );
@@ -165,12 +165,9 @@ AnalyticalTrackSelector::AnalyticalTrackSelector(const edm::ParameterSet& cfg) :
165
165
throw ;
166
166
}
167
167
168
- if (cfg.exists (" qualityBit" )) {
169
- std::string qualityStr = cfg.getParameter <std::string>(" qualityBit" );
170
- if (!qualityStr.empty ()) {
171
- setQualityBit_[0 ] = true ;
172
- qualityToSet_[0 ] = TrackBase::qualityByName (cfg.getParameter <std::string>(" qualityBit" ));
173
- }
168
+ if (!qualityStr.empty ()) {
169
+ setQualityBit_[0 ] = true ;
170
+ qualityToSet_[0 ] = TrackBase::qualityByName (cfg.getParameter <std::string>(" qualityBit" ));
174
171
}
175
172
176
173
if (keepAllTracks_[0 ] && !setQualityBit_[0 ])
@@ -189,19 +186,14 @@ AnalyticalTrackSelector::AnalyticalTrackSelector(const edm::ParameterSet& cfg) :
189
186
}
190
187
191
188
if (useAnyMVA_) {
192
- bool thisMVA = false ;
193
- if (cfg.exists (" useMVA" ))
194
- thisMVA = cfg.getParameter <bool >(" useMVA" );
189
+ bool thisMVA = cfg.getParameter <bool >(" useMVA" );
195
190
useMVA_.push_back (thisMVA);
196
191
if (thisMVA) {
197
- double minVal = -1 ;
198
- if (cfg.exists (" minMVA" ))
199
- minVal = cfg.getParameter <double >(" minMVA" );
192
+ double minVal = cfg.getParameter <double >(" minMVA" );
200
193
min_MVA_.push_back (minVal);
201
- mvaType_.push_back (cfg.exists (" mvaType" ) ? cfg.getParameter <std::string>(" mvaType" ) : " Detached" );
202
- forestLabel_.push_back (cfg.exists (" GBRForestLabel" ) ? cfg.getParameter <std::string>(" GBRForestLabel" )
203
- : " MVASelectorIter0" );
204
- useMVAonly_.push_back (cfg.exists (" useMVAonly" ) ? cfg.getParameter <bool >(" useMVAonly" ) : false );
194
+ mvaType_.push_back (cfg.getParameter <std::string>(" mvaType" ));
195
+ forestLabel_.push_back (cfg.getParameter <std::string>(" GBRForestLabel" ));
196
+ useMVAonly_.push_back (cfg.getParameter <bool >(" useMVAonly" ));
205
197
} else {
206
198
min_MVA_.push_back (-9999.0 );
207
199
useMVAonly_.push_back (false );
@@ -231,8 +223,6 @@ AnalyticalTrackSelector::AnalyticalTrackSelector(const edm::ParameterSet& cfg) :
231
223
produces<reco::TrackCollection>().setBranchAlias (alias + " Tracks" );
232
224
}
233
225
234
- AnalyticalTrackSelector::~AnalyticalTrackSelector () {}
235
-
236
226
void AnalyticalTrackSelector::run (edm::Event& evt, const edm::EventSetup& es) const {
237
227
// storage....
238
228
std::unique_ptr<reco::TrackCollection> selTracks_;
@@ -397,6 +387,76 @@ void AnalyticalTrackSelector::run(edm::Event& evt, const edm::EventSetup& es) co
397
387
}
398
388
}
399
389
390
+ void AnalyticalTrackSelector::fillDescriptions (edm::ConfigurationDescriptions& descriptions) {
391
+ edm::ParameterSetDescription desc;
392
+
393
+ desc.add <edm::InputTag>(" src" , edm::InputTag (" generalTracks" ));
394
+ desc.add <bool >(" keepAllTracks" , false )
395
+ ->setComment (" if set to true tracks failing this filter are kept in the output" );
396
+ desc.add <edm::InputTag>(" beamspot" , edm::InputTag (" offlineBeamSpot" ));
397
+
398
+ // vertex selection
399
+ desc.add <bool >(" useVertices" , true );
400
+ desc.add <bool >(" useVtxError" , false );
401
+ desc.add <edm::InputTag>(" vertices" , edm::InputTag (" firstStepPrimaryVertices" ));
402
+ desc.add <int32_t >(" vtxNumber" , -1 );
403
+ desc.add <std::string>(" vertexCut" , " ndof>=2&!isFake" );
404
+
405
+ desc.addUntracked <bool >(" copyExtras" , false );
406
+ desc.addUntracked <bool >(" copyTrajectories" , false );
407
+ desc.add <std::string>(" qualityBit" , std::string (" " ))->setComment (" set to ''if you don't want to set the bit" );
408
+
409
+ // parameters for adapted optimal cuts on chi2 and primary vertex compatibility
410
+ desc.add <double >(" chi2n_no1Dmod_par" , 9999 .)
411
+ ->setComment (" parameter for adapted optimal cuts on chi2 and primary vertex compatibility" );
412
+ desc.add <double >(" chi2n_par" , 1.6 )
413
+ ->setComment (" parameter for adapted optimal cuts on chi2 and primary vertex compatibility" );
414
+ desc.add <std::vector<double >>(" res_par" , {0.003 , 0.01 })->setComment (" default: Loose" );
415
+ desc.add <std::vector<double >>(" d0_par1" , {0.55 , 4.0 })->setComment (" default: Loose" );
416
+ desc.add <std::vector<double >>(" d0_par2" , {0.65 , 4.0 })->setComment (" default: Loose" );
417
+ desc.add <std::vector<double >>(" dz_par1" , {0.55 , 4.0 })->setComment (" default: Loose" );
418
+ desc.add <std::vector<double >>(" dz_par2" , {0.45 , 4.0 })->setComment (" default: Loose" );
419
+ desc.add <bool >(" applyAdaptedPVCuts" , true )
420
+ ->setComment (" Boolean indicating if adapted primary vertex compatibility cuts are to be applied." );
421
+
422
+ // Impact parameter absolute cuts.
423
+ desc.add <double >(" max_d0" , 100 .)->setComment (" transverse impact parameter absolute cut" );
424
+ desc.add <double >(" max_z0" , 100 .)->setComment (" longitudinal impact parameter absolute cut" );
425
+ desc.add <double >(" nSigmaZ" , 4 .);
426
+
427
+ // Cuts on numbers of layers with hits/3D hits/lost hits.
428
+ desc.add <uint32_t >(" minNumberLayers" , 0 );
429
+ desc.add <uint32_t >(" minNumber3DLayers" , 0 );
430
+ desc.add <uint32_t >(" minHitsToBypassChecks" , 20 );
431
+ desc.add <uint32_t >(" maxNumberLostLayers" , 999 );
432
+
433
+ // Absolute cuts in case of no PV. If yes, please define also max_d0NoPV and max_z0NoPV
434
+ desc.add <bool >(" applyAbsCutsIfNoPV" , false );
435
+ desc.add <double >(" max_d0NoPV" , 100 .);
436
+ desc.add <double >(" max_z0NoPV" , 100 .);
437
+
438
+ // parameters for cutting on pterror/pt and number of valid hits
439
+ desc.add <double >(" max_relpterr" , 9999 )->setComment (" parameter for cutting on pterror/pt" );
440
+ desc.add <uint32_t >(" min_nhits" , 0 )->setComment (" parameter for cutting on number of valid hits" );
441
+
442
+ desc.add <double >(" max_lostHitFraction" , 1.0 );
443
+ desc.add <int32_t >(" max_minMissHitOutOrIn" , 99 );
444
+
445
+ // parameters for cutting on eta
446
+ desc.add <double >(" max_eta" , 9999 .);
447
+ desc.add <double >(" min_eta" , -9999 .);
448
+
449
+ // optional parameters for MVA selection
450
+ desc.add <bool >(" useMVA" , false );
451
+ desc.add <bool >(" useAnyMVA" , false );
452
+ desc.add <bool >(" useMVAonly" , false );
453
+ desc.add <double >(" minMVA" , -1 .);
454
+ desc.add <std::string>(" GBRForestLabel" , " MVASelectorIter0" );
455
+ desc.add <std::string>(" mvaType" , " Detached" );
456
+
457
+ descriptions.addWithDefaultLabel (desc);
458
+ }
459
+
400
460
#include " FWCore/PluginManager/interface/ModuleDef.h"
401
461
#include " FWCore/Framework/interface/MakerMacros.h"
402
462
0 commit comments