LDMX Software
tracking::reco::SeedFinderProcessor Class Reference

Public Member Functions

 SeedFinderProcessor (const std::string &name, framework::Process &process)
 Constructor.
 
virtual ~SeedFinderProcessor ()=default
 Destructor.
 
void onProcessStart () override
 Callback for the EventProcessor to take any necessary action when the processing of events starts, such as creating histograms.
 
void onProcessEnd () override
 Callback for the EventProcessor to take any necessary action when the processing of events finishes, such as calculating job-summary quantities.
 
void configure (framework::config::Parameters &parameters) override
 Configure the processor using the given user specified parameters.
 
void produce (framework::Event &event) override
 Run the processor and create a collection of results which indicate if a charge particle can be found by the recoil tracker.
 
bool groupStrips (const std::vector< ldmx::Measurement > &measurements, const std::vector< int > strategy)
 
void findSeedsFromMap (std::vector< ldmx::Track > &seeds, const ldmx::Measurements &pmeas, const ldmx::Measurements &fit_constraints)
 
- Public Member Functions inherited from tracking::reco::TrackingGeometryUser
 TrackingGeometryUser (const std::string &name, framework::Process &p)
 
- Public Member Functions inherited from framework::Producer
 Producer (const std::string &name, Process &process)
 Class constructor.
 
virtual void process (Event &event) final
 Processing an event for a Producer is calling produce.
 
- Public Member Functions inherited from framework::EventProcessor
 DECLARE_FACTORY (EventProcessor, EventProcessor *, const std::string &, Process &)
 declare that we have a factory for this class
 
 EventProcessor (const std::string &name, Process &process)
 Class constructor.
 
virtual ~EventProcessor ()=default
 Class destructor.
 
virtual void beforeNewRun (ldmx::RunHeader &run_header)
 Callback for Producers to add parameters to the run header before conditions are initialized.
 
virtual void onNewRun (const ldmx::RunHeader &run_header)
 Callback for the EventProcessor to take any necessary action when the run being processed changes.
 
virtual void onFileOpen (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a new event input ROOT file is opened.
 
virtual void onFileClose (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a event input ROOT file is closed.
 
template<class T >
const T & getCondition (const std::string &condition_name)
 Access a conditions object for the current event.
 
TDirectory * getHistoDirectory ()
 Access/create a directory in the histogram file for this event processor to create histograms and analysis tuples.
 
void setStorageHint (framework::StorageControl::Hint hint)
 Mark the current event as having the given storage control hint from this module_.
 
void setStorageHint (framework::StorageControl::Hint hint, const std::string &purposeString)
 Mark the current event as having the given storage control hint from this module and the given purpose string.
 
int getLogFrequency () const
 Get the current logging frequency from the process.
 
int getRunNumber () const
 Get the run number from the process.
 
std::string getName () const
 Get the processor name.
 
void createHistograms (const std::vector< framework::config::Parameters > &histos)
 Internal function which is used to create histograms passed from the python configuration @parma histos vector of Parameters that configure histograms to create.
 

Private Member Functions

ldmx::Track seedTracker (const ldmx::Measurements &vmeas, double xOrigin, const Acts::Vector3 &perigee_location, const ldmx::Measurement *constraint)
 Fit the strips plus an optional target constraint (nullptr = none)
 
void lineParabolaToHelix (const Acts::Vector< 5 > parameters, Acts::Vector< 5 > &helix_parameters, Acts::Vector3 ref)
 

Private Attributes

Acts::Vector3 b_field_
 
std::shared_ptr< tracking::sim::SeedToTrackParamMaker > seed_to_track_maker_
 
double processing_time_ {0.}
 
long nevents_ {0}
 
unsigned int ntracks_ {0}
 
std::vector< double > inflate_factors_ {1., 1., 1., 1., 1.}
 
std::string out_seed_collection_ {"SeedTracks"}
 The name of the output collection of seeds to be stored.
 
std::string input_hits_collection_ {"TaggerSimHits"}
 The name of the input hits collection to use in finding seeds..
 
std::string tagger_trks_collection_ {"TaggerTracks"}
 The name of the tagger Tracks (only for Recoil Seeding)
 
std::string input_pass_name_ {""}
 
std::string sim_particles_coll_name_
 
std::string sim_particles_passname_
 
std::string tagger_trks_event_collection_passname_
 
std::string sim_particles_event_passname_
 
std::vector< double > perigee_location_ {-700., 0., 0}
 Location of the perigee for the helix track parameters.
 
double pmin_ {0.05}
 Minimum cut on the momentum of the seeds.
 
double pmax_ {8}
 Maximum cut on the momentum of the seeds.
 
double d0max_ {20.}
 Max d0 allowed for the seeds.
 
double d0min_ {20.}
 Min d0 allowed for the seeds.
 
double z0max_ {60.}
 Max z0 allowed for the seeds.
 
double piover2_ {1.5708}
 
double phicut_ {0.1}
 PhiRange.
 
double thetacut_ {0.2}
 ThetaRange.
 
double loc0cut_ {0.1}
 loc0 / loc1 cuts
 
double loc1cut_ {0.3}
 
std::vector< std::string > strategies_ {}
 List of stragies for seed finding.
 
std::vector< std::vector< int > > strategy_layers_ {}
 Layer lists parsed from strategies_, one per strategy.
 
bool prefilter_unconstrained_ {false}
 Constrained fits only after the plain fit passes the cuts.
 
long nfailprefilter_ {0}
 
std::vector< long > seeds_per_strategy_ {}
 Seeds found per strategy, for the end of job summary.
 
bool use_target_constraint_ {false}
 Put tagger track positions at the target into the seed fit.
 
std::shared_ptr< Acts::Surface > target_surface_
 Target surface the constraints live on.
 
bool warned_ambiguous_tagger_ {false}
 Warn only once about several tagger track collections.
 
double bfield_ {1.5}
 
std::vector< float > xhit_
 
std::vector< float > yhit_
 
std::vector< float > zhit_
 
std::vector< float > b0_
 
std::vector< float > b1_
 
std::vector< float > b2_
 
std::vector< float > b3_
 
std::vector< float > b4_
 
long ndoubles_ {0}
 
long nmissing_ {0}
 
long nfailpmin_ {0}
 
long nfailpmax_ {0}
 
long nfaild0min_ {0}
 
long nfaild0max_ {0}
 
long nfailz0max_ {0}
 
long nfailphi_ {0}
 
long nfailtheta_ {0}
 
std::map< int, std::vector< const ldmx::Measurement * > > groups_map_
 
std::shared_ptr< tracking::sim::TruthMatchingTool > truth_matching_tool_
 
double u_error_
 u error
 
double v_error_
 v error
 

Additional Inherited Members

- Protected Member Functions inherited from tracking::reco::TrackingGeometryUser
const Acts::GeometryContext & geometryContext ()
 
const Acts::MagneticFieldContext & magneticFieldContext ()
 
const Acts::CalibrationContext & calibrationContext ()
 
const geo::TrackersTrackingGeometry & geometry ()
 
void loadBField (const std::string &path, const BFieldDistortion &distortion={})
 Load the interpolated B-field map from path and cache it.
 
void loadBField (const BFieldDistortion &distortion={})
 Load B-field from the path recorded in the detector GDML.
 
std::shared_ptr< Acts::MagneticFieldProvider > bField () const
 Return the loaded B-field provider.
 
- Protected Member Functions inherited from framework::EventProcessor
void abortEvent ()
 Abort the event immediately.
 
- Static Protected Member Functions inherited from tracking::reco::TrackingGeometryUser
static BFieldDistortion bFieldDistortion (const framework::config::Parameters &parameters)
 Build a BFieldDistortion from processor configuration.
 
- Protected Attributes inherited from framework::EventProcessor
HistogramPool histograms_
 helper object for making and filling histograms
 
NtupleManager & ntuple_ {NtupleManager::getInstance()}
 Manager for any ntuples.
 
logging::logger the_log_
 The logger for this EventProcessor.
 

Detailed Description

Definition at line 27 of file SeedFinderProcessor.h.

Constructor & Destructor Documentation

◆ SeedFinderProcessor()

tracking::reco::SeedFinderProcessor::SeedFinderProcessor ( const std::string & name,
framework::Process & process )

Constructor.

Parameters
nameThe name of the instance of this object.
processThe process running this producer.

Definition at line 25 of file SeedFinderProcessor.cxx.

27 : TrackingGeometryUser(name, process) {
28 // TODO REMOVE FROM DEFAULT
29 /*
30 output_file_ = new TFile("seeder.root", "RECREATE");
31 output_tree_ = new TTree("seeder", "seeder");
32
33 output_tree_->Branch("nevents", &nevents_);
34 output_tree_->Branch("xhit", &xhit_);
35 output_tree_->Branch("yhit", &yhit_);
36 output_tree_->Branch("zhit", &zhit_);
37
38 output_tree_->Branch("b0", &b0_);
39 output_tree_->Branch("b1", &b1_);
40 output_tree_->Branch("b2", &b2_);
41 output_tree_->Branch("b3", &b3_);
42 output_tree_->Branch("b4", &b4_);
43 */
44}
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.

Member Function Documentation

◆ configure()

void tracking::reco::SeedFinderProcessor::configure ( framework::config::Parameters & parameters)
overridevirtual

Configure the processor using the given user specified parameters.

Parameters
parametersSet of parameters used to configure this processor.

Reimplemented from framework::EventProcessor.

Definition at line 51 of file SeedFinderProcessor.cxx.

51 {
52 // Output seed name
53 out_seed_collection_ = parameters.get<std::string>("out_seed_collection",
54 getName() + "SeedTracks");
55
56 // Input strip hits
58 parameters.get<std::string>("input_hits_collection", "TaggerSimHits");
59
60 // Tagger tracks - only for Recoil Seed finding
62 parameters.get<std::string>("tagger_trks_collection", "TaggerTracks");
63
65 parameters.get<std::vector<double>>("perigee_location", {-700, 0., 0.});
66 pmin_ = parameters.get<double>("pmin", 0.05 * Acts::UnitConstants::GeV);
67 pmax_ = parameters.get<double>("pmax", 8 * Acts::UnitConstants::GeV);
68 d0max_ = parameters.get<double>("d0max", -15. * Acts::UnitConstants::mm);
69 d0min_ = parameters.get<double>("d0min", -45. * Acts::UnitConstants::mm);
70 z0max_ = parameters.get<double>("z0max", 60. * Acts::UnitConstants::mm);
71 phicut_ = parameters.get<double>("phicut", 0.1);
72 thetacut_ = parameters.get<double>("thetacut", 0.2);
73 loc0cut_ = parameters.get<double>("loc0cut", 0.1);
74 loc1cut_ = parameters.get<double>("loc1cut", 0.3);
76 parameters.get<std::vector<std::string>>("strategies", {"0,1,2,3,4"});
77 use_target_constraint_ = parameters.get<bool>("use_target_constraint", false);
79 parameters.get<bool>("prefilter_unconstrained", false);
80
82 EXCEPTION_RAISE("BadConf",
83 "use_target_constraint needs a tagger_trks_collection");
84 }
85
86 // 5 fit parameters: one equation per strip, two per target constraint
87 const size_t min_layers = use_target_constraint_ ? 4 : 5;
88
89 // parse each "l0,l1,..." string into a layer list
90 strategy_layers_.clear();
91 for (const auto& strategy : strategies_) {
92 std::vector<int> layers;
93 std::stringstream ss(strategy);
94 std::string token;
95 while (std::getline(ss, token, ',')) {
96 if (!token.empty()) layers.push_back(std::stoi(token));
97 }
98 std::set<int> distinct(layers.begin(), layers.end());
99 if (distinct.size() < min_layers) {
100 EXCEPTION_RAISE("BadConf",
101 "Seeding strategy '" + strategy + "' has fewer than " +
102 std::to_string(min_layers) + " distinct layers");
103 }
104 strategy_layers_.push_back(layers);
105 }
106 inflate_factors_ = parameters.get<std::vector<double>>(
107 "inflate_factors", {10., 10., 10., 10., 10., 10.});
108 bfield_ = parameters.get<double>("bfield", 1.5);
109 input_pass_name_ = parameters.get<std::string>("input_pass_name");
110 sim_particles_coll_name_ =
111 parameters.get<std::string>("sim_particles_coll_name");
112 sim_particles_passname_ =
113 parameters.get<std::string>("sim_particles_passname");
114 tagger_trks_event_collection_passname_ =
115 parameters.get<std::string>("tagger_trks_event_collection_passname");
116 sim_particles_event_passname_ =
117 parameters.get<std::string>("sim_particles_event_passname");
118 u_error_ = parameters.get<double>("u_error");
119 v_error_ = parameters.get<double>("v_error");
120}
std::string getName() const
Get the processor name.
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:75
std::vector< std::vector< int > > strategy_layers_
Layer lists parsed from strategies_, one per strategy.
bool prefilter_unconstrained_
Constrained fits only after the plain fit passes the cuts.
std::string out_seed_collection_
The name of the output collection of seeds to be stored.
double pmax_
Maximum cut on the momentum of the seeds.
std::vector< std::string > strategies_
List of stragies for seed finding.
bool use_target_constraint_
Put tagger track positions at the target into the seed fit.
std::string input_hits_collection_
The name of the input hits collection to use in finding seeds..
double pmin_
Minimum cut on the momentum of the seeds.
std::string tagger_trks_collection_
The name of the tagger Tracks (only for Recoil Seeding)
std::vector< double > perigee_location_
Location of the perigee for the helix track parameters.
double d0max_
Max d0 allowed for the seeds.
double d0min_
Min d0 allowed for the seeds.
double z0max_
Max z0 allowed for the seeds.

References d0max_, d0min_, framework::config::Parameters::get(), framework::EventProcessor::getName(), input_hits_collection_, loc0cut_, out_seed_collection_, perigee_location_, phicut_, pmax_, pmin_, prefilter_unconstrained_, strategies_, strategy_layers_, tagger_trks_collection_, thetacut_, u_error_, use_target_constraint_, v_error_, and z0max_.

◆ findSeedsFromMap()

void tracking::reco::SeedFinderProcessor::findSeedsFromMap ( std::vector< ldmx::Track > & seeds,
const ldmx::Measurements & pmeas,
const ldmx::Measurements & fit_constraints )

Definition at line 530 of file SeedFinderProcessor.cxx.

532 {
533 std::map<int, std::vector<const ldmx::Measurement*>>::iterator groups_iter =
534 groups_map_.begin();
535 // Vector of iterators, one per grouped layer
536 const int k = groups_map_.size();
537 if (k < 1) return;
538 std::vector<std::vector<const ldmx::Measurement*>::iterator> it;
539 it.resize(k);
540
541 unsigned int ikey = 0;
542 for (auto& key : groups_map_) {
543 it[ikey] = key.second.begin();
544 ikey++;
545 }
546
547 // K vectors in an array v[0],v[1].... v[K-1]
548
549 // Loop over all combinations
550 while (it[0] != groups_iter->second.end()) {
551 // process the pointed-to elements
552
553 /*
554 for (int j=0; j<K; j++) {
555 const ldmx::Measurement* meas = (*(it[j]));
556 std::cout<<meas->getGlobalPosition()[0]<<","
557 <<meas->getGlobalPosition()[1]<<","
558 <<meas->getGlobalPosition()[2]<<","<<std::endl;
559 }
560 */
561
562 std::vector<ldmx::Measurement> meas_for_seeds;
563 meas_for_seeds.reserve(k);
564
565 ldmx_log(debug) << " Grouping ";
566
567 for (int j = 0; j < k; j++) {
568 const ldmx::Measurement* meas = (*(it[j]));
569 meas_for_seeds.push_back(*meas);
570 }
571
572 std::sort(meas_for_seeds.begin(), meas_for_seeds.end(),
573 [](const ldmx::Measurement& m1, const ldmx::Measurement& m2) {
574 return m1.getGlobalPosition()[0] < m2.getGlobalPosition()[0];
575 });
576
577 if (meas_for_seeds.size() < k) {
578 nmissing_++;
579 return;
580 }
581
582 ldmx_log(debug) << "making seedTrack";
583
584 Acts::Vector3 perigee{perigee_location_[0], perigee_location_[1],
586
587 // one seed per constraint; nullptr is the unconstrained fit
588 std::vector<const ldmx::Measurement*> constraints;
589 for (const auto& c : fit_constraints) constraints.push_back(&c);
590 if (constraints.empty()) constraints.push_back(nullptr);
591
592 // constrained fits only for combinations whose plain fit passes the
593 // cuts; otherwise the constraint lets many fake combinations through
594 if (prefilter_unconstrained_ && constraints.front() != nullptr &&
595 meas_for_seeds.size() >= 5) {
596 ldmx::Track plain = seedTracker(
597 meas_for_seeds, meas_for_seeds.at(k / 2).getGlobalPosition()[0],
598 perigee, nullptr);
599 b0_.pop_back();
600 b1_.pop_back();
601 b2_.pop_back();
602 b3_.pop_back();
603 b4_.pop_back();
604 const double p = 1. / std::abs(plain.getQoP());
605 if (p < pmin_ || p > pmax_ || std::abs(plain.getZ0()) > z0max_ ||
606 plain.getD0() < d0min_ || plain.getD0() > d0max_ ||
607 std::abs(plain.getPhi()) > phicut_ ||
608 std::abs(plain.getTheta() - piover2_) > thetacut_) {
609 nfailprefilter_++;
610 constraints.clear();
611 }
612 }
613
614 for (const auto* constraint : constraints) {
615 // 5 parameters need 5 equations: one per strip, two per constraint
616 if (meas_for_seeds.size() + (constraint ? 2 : 0) < 5) {
617 nmissing_++;
618 continue;
619 }
620
621 ldmx::Track seed_track = seedTracker(
622 meas_for_seeds, meas_for_seeds.at(k / 2).getGlobalPosition()[0],
623 perigee, constraint);
624
625 bool fail = false;
626
627 // Remove failed fits
628 if (1. / abs(seed_track.getQoP()) < pmin_) {
629 nfailpmin_++;
630 fail = true;
631 } else if (1. / abs(seed_track.getQoP()) > pmax_) {
632 nfailpmax_++;
633 fail = true;
634 }
635
636 // Remove large part of fake tracks and duplicates with the following cuts
637 // for various compatibility checks.
638
639 else if (abs(seed_track.getZ0()) > z0max_) {
640 nfailz0max_++;
641 fail = true;
642 } else if (seed_track.getD0() < d0min_) {
643 nfaild0min_++;
644 fail = true;
645 } else if (seed_track.getD0() > d0max_) {
646 nfaild0max_++;
647 fail = true;
648 } else if (abs(seed_track.getPhi()) > phicut_) {
649 fail = true;
650 nfailphi_++;
651 } else if (abs(seed_track.getTheta() - piover2_) > thetacut_) {
652 fail = true;
653 nfailtheta_++;
654 }
655
656 // If I didn't use the target pseudo measurements in the track finding
657 // I can use them for compatibility with the tagger track
658
659 // the tagger seeder has no tagger_trks_collection, so pmeas is empty
660 if (pmeas.size() > 0) {
661 // I can have multiple target pseudo measurements
662 // A seed is rejected if it is found incompatible with all the target
663 // extrapolations
664
665 // This is set but unused, eventually we will use tagger track position
666 // at target to inform recoil tracking bool tgt_compatible = false;
667 for (auto tgt_pseudomeas : pmeas) {
668 // The d0/z0 are in a frame with the same orientation of the target
669 // surface
670 double delta_loc0 =
671 seed_track.getD0() - tgt_pseudomeas.getLocalPosition()[0];
672 double delta_loc1 =
673 seed_track.getZ0() - tgt_pseudomeas.getLocalPosition()[1];
674
675 if (abs(delta_loc0) < loc0cut_ && abs(delta_loc1) < loc1cut_) {
676 // found at least 1 compatible target location
677 // tgt_compatible = true;
678 break;
679 }
680 }
681 } // pmeas > 0
682
683 if (!fail) {
684 if (truth_matching_tool_->configured()) {
685 auto truth_info = truth_matching_tool_->truthMatch(meas_for_seeds);
686 seed_track.setTrackID(truth_info.track_id_);
687 seed_track.setPdgID(truth_info.pdg_id_);
688 seed_track.setTruthProb(truth_info.truth_prob_);
689 }
690
691 seeds.push_back(seed_track);
692 }
693
694 else {
695 b0_.pop_back();
696 b1_.pop_back();
697 b2_.pop_back();
698 b3_.pop_back();
699 b4_.pop_back();
700 }
701 } // constraints
702
703 // Go to next combination
704 ldmx_log(debug) << "Go to the next combination";
705
706 ++it[k - 1];
707 for (int i = k - 1;
708 (i > 0) && (it[i] == (std::next(groups_iter, i))->second.end()); --i) {
709 it[i] = std::next(groups_iter, i)->second.begin();
710 ++it[i - 1];
711 }
712 }
713} // find seeds
Implementation of a track object.
Definition Track.h:54
ldmx::Track seedTracker(const ldmx::Measurements &vmeas, double xOrigin, const Acts::Vector3 &perigee_location, const ldmx::Measurement *constraint)
Fit the strips plus an optional target constraint (nullptr = none)

◆ groupStrips()

bool tracking::reco::SeedFinderProcessor::groupStrips ( const std::vector< ldmx::Measurement > & measurements,
const std::vector< int > strategy )

Definition at line 500 of file SeedFinderProcessor.cxx.

502 {
503 // std::cout<<"Using stratedy"<<std::endl;
504 // for (auto& e : strategy) {
505 // std::cout<<e<<" ";
506 //}
507 // std::cout<<std::endl;
508
509 for (auto& meas : measurements) {
510 ldmx_log(trace) << meas;
511
512 if (std::find(strategy.begin(), strategy.end(), meas.getLayer()) !=
513 strategy.end()) {
514 ldmx_log(debug) << "Adding measurement from layer_ = " << meas.getLayer();
515 groups_map_[meas.getLayer()].push_back(&meas);
516 }
517
518 } // loop meas
519
520 if (groups_map_.size() < strategy.size())
521 return false;
522 else
523 return true;
524}

◆ onProcessEnd()

void tracking::reco::SeedFinderProcessor::onProcessEnd ( )
overridevirtual

Callback for the EventProcessor to take any necessary action when the processing of events finishes, such as calculating job-summary quantities.

Reimplemented from framework::EventProcessor.

Definition at line 470 of file SeedFinderProcessor.cxx.

470 {
471 // output_file_->cd();
472 // output_tree_->Write();
473 // output_file_->Close();
474 ldmx_log(info) << "AVG Time/Event: " << std::fixed << std::setprecision(1)
475 << processing_time_ / nevents_ << " ms";
476 ldmx_log(info) << "Total Seeds/Events: " << ntracks_ << "/" << nevents_;
477 for (size_t is = 0; is < seeds_per_strategy_.size(); ++is) {
478 ldmx_log(info) << " strategy '" << strategies_[is]
479 << "' seeds: " << seeds_per_strategy_[is];
480 }
481 ldmx_log(info) << "Seeds discarded due to multiple hits on layers "
482 << ndoubles_;
483 ldmx_log(info) << "not enough seed points " << nmissing_;
484 ldmx_log(info) << " nfailpmin=" << nfailpmin_;
485 ldmx_log(info) << " nfailpmax=" << nfailpmax_;
486 ldmx_log(info) << " nfaild0max=" << nfaild0max_;
487 ldmx_log(info) << " nfaild0min=" << nfaild0min_;
488 ldmx_log(info) << " nfailphicut=" << nfailphi_;
489 ldmx_log(info) << " nfailthetacut=" << nfailtheta_;
490 ldmx_log(info) << " nfailz0max=" << nfailz0max_;
492 ldmx_log(info) << " nfailprefilter=" << nfailprefilter_;
493 }
494}
std::vector< long > seeds_per_strategy_
Seeds found per strategy, for the end of job summary.

References prefilter_unconstrained_, seeds_per_strategy_, and strategies_.

◆ onProcessStart()

void tracking::reco::SeedFinderProcessor::onProcessStart ( )
overridevirtual

Callback for the EventProcessor to take any necessary action when the processing of events starts, such as creating histograms.

Reimplemented from framework::EventProcessor.

Definition at line 46 of file SeedFinderProcessor.cxx.

46 {
47 truth_matching_tool_ = std::make_shared<tracking::sim::TruthMatchingTool>();
48 target_surface_ = tracking::sim::utils::unboundSurface(0.);
49}
std::shared_ptr< Acts::Surface > target_surface_
Target surface the constraints live on.

References target_surface_.

◆ produce()

void tracking::reco::SeedFinderProcessor::produce ( framework::Event & event)
overridevirtual

Run the processor and create a collection of results which indicate if a charge particle can be found by the recoil tracker.

Parameters
eventThe event to process.

Implements framework::Producer.

Definition at line 122 of file SeedFinderProcessor.cxx.

122 {
123 // tg is unused, should it be? FIXME
124 // const auto& tg{geometry()};
125 auto start = std::chrono::high_resolution_clock::now();
126 std::vector<ldmx::Track> seed_tracks;
127
128 nevents_++;
129
130 // check if SimParticleMap is available for truth matching
131 std::map<int, ldmx::SimParticle> particle_map;
132
133 const auto& measurements = event.getCollection<ldmx::Measurement>(
134 input_hits_collection_, input_pass_name_);
135
136 // tagger tracks give the target position; an empty name disables it
137 std::vector<ldmx::Track> tagger_tracks;
138 if (!tagger_trks_collection_.empty()) {
139 // prefer this pass so a re-reco does not see two copies
140 std::string pass = tagger_trks_event_collection_passname_;
141 if (pass.empty() &&
143 pass = event.getPassName();
144 }
145 if (event.exists(tagger_trks_collection_, pass)) {
146 tagger_tracks =
147 event.getCollection<ldmx::Track>(tagger_trks_collection_, pass);
148 } else if (use_target_constraint_) {
149 // the target constraint needs the tagger tracker
150 if (event.exists(tagger_trks_collection_, pass, false)) {
151 EXCEPTION_RAISE("BadConf",
152 "Several '" + tagger_trks_collection_ +
153 "' collections found, set "
154 "tagger_trks_event_collection_passname to pick "
155 "one");
156 }
157 EXCEPTION_RAISE("NoTaggerTracks", "No '" + tagger_trks_collection_ +
158 "' collection for the target "
159 "constraint, run tagger tracking");
160 } else if (!warned_ambiguous_tagger_ &&
161 event.exists(tagger_trks_collection_, pass, false)) {
162 ldmx_log(warn) << "Several '" << tagger_trks_collection_
163 << "' collections found, set "
164 "tagger_trks_event_collection_passname to pick one";
166 }
167 }
168
169 const auto& tgt_surf = target_surface_;
170
171 // Create the pseudomeasurements at the target
172
173 ldmx::Measurements target_pseudo_meas;
174
175 for (auto tagtrk : tagger_tracks) {
176 // For Track, the perigee parameters are stored at the target surface.
177 // Use d0/z0 as local position and the perigee covariance for the
178 // pseudo measurement. Only create the pseudo measurement if cov is
179 // available.
180
181 // The covariance matrix passed to the pseudo measurement is considered as
182 // uncorrelated. This is an approx that considers that loc-u and loc-v from
183 // the track have small correlation.
184
185 const auto& perigee_cov = tagtrk.getPerigeeCov();
186 if (!perigee_cov.empty()) {
187 Acts::BoundMatrix cov = tracking::sim::utils::unpackCov(perigee_cov);
188 double locu = tagtrk.getD0();
189 double locv = tagtrk.getZ0();
190 double covuu =
191 cov(Acts::BoundIndices::eBoundLoc0, Acts::BoundIndices::eBoundLoc0);
192 double covvv =
193 cov(Acts::BoundIndices::eBoundLoc1, Acts::BoundIndices::eBoundLoc1);
194
195 ldmx::Measurement pseudo_meas;
196 pseudo_meas.setLocalPosition(locu, locv);
197 Acts::Vector3 dummy{0., 0., 0.};
198 Acts::Vector2 local_pos{locu, locv};
199 Acts::Vector3 global_pos =
200 tgt_surf->localToGlobal(geometryContext(), local_pos, dummy);
201
202 pseudo_meas.setGlobalPosition(global_pos(0), global_pos(1),
203 global_pos(2));
204 pseudo_meas.setTime(0.);
205 pseudo_meas.setLocalCovariance(covuu, covvv);
206
207 target_pseudo_meas.push_back(pseudo_meas);
208 }
209 }
210
211 // Constraints that enter the fit: tagger tracks only
212 ldmx::Measurements fit_constraints;
213 if (use_target_constraint_) fit_constraints = target_pseudo_meas;
214
215 if (event.exists(sim_particles_coll_name_, sim_particles_event_passname_)) {
216 particle_map = event.getMap<int, ldmx::SimParticle>(
217 sim_particles_coll_name_, sim_particles_passname_);
218 truth_matching_tool_->setup(particle_map, measurements);
219 }
220
221 ldmx_log(debug) << "Preparing the strategies";
222
223 // a strategy is a list of layers from which to make the seed
224 // layer_ numbering starts at 0
225 seeds_per_strategy_.resize(strategy_layers_.size(), 0);
226 for (size_t is = 0; is < strategy_layers_.size(); ++is) {
227 groups_map_.clear();
228 const size_t n_before = seed_tracks.size();
229 if (groupStrips(measurements, strategy_layers_[is]))
230 findSeedsFromMap(seed_tracks, target_pseudo_meas, fit_constraints);
231 seeds_per_strategy_[is] += seed_tracks.size() - n_before;
232 }
233
234 groups_map_.clear();
235 // output_tree_->Fill();
236 ntracks_ += seed_tracks.size();
237 event.add(out_seed_collection_, seed_tracks);
238
239 auto end = std::chrono::high_resolution_clock::now();
240
241 // long long microseconds =
242 // std::chrono::duration_cast<std::chrono::microseconds>(end-start).count();
243
244 auto diff = end - start;
245 processing_time_ += std::chrono::duration<double, std::milli>(diff).count();
246
247 // Seed finding using 2D Hits
248 // - The hits should keep track if they are already associated to a track or
249 // not. This can be used for subsequent passes of seed-finding
250
251 // This should go into a digitization producer, which takes care of producing
252 // measurements from:
253 // - raw hits in data
254 // - sim hits in MC
255 // Step 0: Get the sim hits and project them on the surfaces to mimic 2d
256 // hits Step 1: Smear the hits and associate an uncertainty to those
257 // measurements.
258
259 xhit_.clear();
260 yhit_.clear();
261 zhit_.clear();
262
263 b0_.clear();
264 b1_.clear();
265 b2_.clear();
266 b3_.clear();
267 b4_.clear();
268
269} // produce
bool exists(const std::string &name, const std::string &passName, bool unique=true) const
Check for the existence of an object or collection with the given name and pass name in the event.
Definition Event.cxx:107
std::string getPassName()
Get the current/default pass name.
Definition Event.h:492
void setLocalPosition(const float &meas_u, const float &meas_v)
Set the local position i.e.
Definition Measurement.h:61
void setGlobalPosition(const float &meas_x, const float &meas_y, const float &meas_z)
Set the global position i.e.
Definition Measurement.h:42
void setLocalCovariance(const float &cov_uu, const float &cov_vv)
Set cov(U,U) and cov(V, V).
Definition Measurement.h:77
void setTime(const float &meas_t)
Set the measurement time in ns.
Definition Measurement.h:93
Class representing a simulated particle.
Definition SimParticle.h:25
bool warned_ambiguous_tagger_
Warn only once about several tagger track collections.

References framework::Event::exists(), framework::Event::getPassName(), input_hits_collection_, out_seed_collection_, seeds_per_strategy_, ldmx::Measurement::setGlobalPosition(), ldmx::Measurement::setLocalCovariance(), ldmx::Measurement::setLocalPosition(), ldmx::Measurement::setTime(), strategy_layers_, tagger_trks_collection_, target_surface_, use_target_constraint_, and warned_ambiguous_tagger_.

◆ seedTracker()

ldmx::Track tracking::reco::SeedFinderProcessor::seedTracker ( const ldmx::Measurements & vmeas,
double xOrigin,
const Acts::Vector3 & perigee_location,
const ldmx::Measurement * constraint )
private

Fit the strips plus an optional target constraint (nullptr = none)

Definition at line 280 of file SeedFinderProcessor.cxx.

283 {
284 // Fit a straight line in the non-bending plane and a parabola in the bending
285 // plane
286
287 // Each measurement is treated as a 3D point, where the v direction is in the
288 // center of the strip with sigma equal to the length of the strip / sqrt(12).
289 // In this way it's easier to incorporate the tagger track extrapolation to
290 // the fit
291
292 Acts::Matrix<5, 5> a = Acts::Matrix<5, 5>::Zero();
293 Acts::Vector<5> y = Acts::Vector<5>::Zero();
294
295 // accumulate one 2D point on a surface into the normal equations
296 auto add_point = [&](const Acts::Surface& surface, const Acts::Vector2& loc,
297 double xmeas, double var_u, double var_v) {
298 auto rot = surface.localToGlobalTransform(geometryContext()).rotation();
299 auto tr = surface.localToGlobalTransform(geometryContext()).translation();
300 auto rotl2g = rot.transpose();
301
302 Acts::Matrix<2, 5> a_i;
303 a_i(0, 0) = rotl2g(0, 1);
304 a_i(0, 1) = rotl2g(0, 1) * xmeas;
305 a_i(0, 2) = rotl2g(0, 1) * xmeas * xmeas;
306 a_i(0, 3) = rotl2g(0, 2);
307 a_i(0, 4) = rotl2g(0, 2) * xmeas;
308
309 a_i(1, 0) = rotl2g(1, 1);
310 a_i(1, 1) = rotl2g(1, 1) * xmeas;
311 a_i(1, 2) = rotl2g(1, 1) * xmeas * xmeas;
312 a_i(1, 3) = rotl2g(1, 2);
313 a_i(1, 4) = rotl2g(1, 2) * xmeas;
314
315 Acts::Vector2 offset = (rot.transpose() * tr).topRows<2>();
316 Acts::Vector2 xoffset = {rotl2g(0, 0) * xmeas, rotl2g(1, 0) * xmeas};
317
318 Acts::Matrix<2, 2> w_i = Acts::Matrix<2, 2>::Zero();
319 w_i(0, 0) = 1. / var_u;
320 w_i(1, 1) = 1. / var_v;
321
322 Acts::Vector2 yprime_i = loc + offset - xoffset;
323 y += (a_i.transpose()) * w_i * yprime_i;
324 a += a_i.transpose() * (w_i * a_i);
325 };
326
327 for (auto meas : vmeas) {
328 double xmeas = meas.getGlobalPosition()[0] - xOrigin;
329 const Acts::Surface* hit_surface = geometry().getSurface(meas.getLayerID());
330
331 xhit_.push_back(xmeas);
332 yhit_.push_back(meas.getGlobalPosition()[1]);
333 zhit_.push_back(meas.getGlobalPosition()[2]);
334
335 // strips measure u only; v sits at the strip center
336 Acts::Vector2 loc{meas.getLocalPosition()[0], 0.};
337 add_point(*hit_surface, loc, xmeas, u_error_ * u_error_,
339 }
340
341 if (constraint) {
342 double xmeas = constraint->getGlobalPosition()[0] - xOrigin;
343 Acts::Vector2 loc{constraint->getLocalPosition()[0],
344 constraint->getLocalPosition()[1]};
345 auto cov = constraint->getLocalCovariance();
346 // floor at (1 um)^2 so a missing covariance cannot blow up the weight
347 add_point(*target_surface_, loc, xmeas, std::max<double>(cov[0], 1e-6),
348 std::max<double>(cov[1], 1e-6));
349 }
350
351 Acts::Vector<5> b;
352 b = a.inverse() * y;
353
354 b0_.push_back(b(0));
355 b1_.push_back(b(1));
356 b2_.push_back(b(2));
357 b3_.push_back(b(3));
358 b4_.push_back(b(4));
359
360 // Acts::Vector<5> hlx = Acts::Vector<5>::Zero();
361 Acts::Vector<3> ref{0., 0., 0.};
362
363 // relative_perigee_x is the perigee position in the fit frame (fit-x = ACTS x
364 // - xOrigin). It is used only for evaluating the fitted curve (y, z, slopes).
365 // The PerigeeSurface and seed_pos must use the absolute ACTS x coordinate,
366 // which is perigee_location(0) directly.
367 double relative_perigee_x = perigee_location(0) - xOrigin;
368
369 std::shared_ptr<const Acts::PerigeeSurface> seed_perigee =
370 Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3(
371 perigee_location(0), perigee_location(1), perigee_location(2)));
372
373 // in mm — x is absolute ACTS x; y and z evaluated at fit-x =
374 // relative_perigee_x
375 Acts::Vector3 seed_pos{perigee_location(0),
376 b(0) + b(1) * relative_perigee_x +
377 b(2) * relative_perigee_x * relative_perigee_x,
378 b(3) + b(4) * relative_perigee_x};
379 Acts::Vector3 dir{1, b(1) + 2 * b(2) * relative_perigee_x, b(4)};
380 dir /= dir.norm();
381
382 // Momentum at xmeas
383 // R in meters, p in GeV
384 double p = 0.3 * bfield_ * (1. / (2. * abs(b(2)))) * 0.001;
385 // std::cout<<"Momentum "<< p*dir << std::endl;
386
387 // Convert it to MeV since that's what TrackUtils assumes
388 Acts::Vector3 seed_mom = p * dir / Acts::UnitConstants::MeV;
389 double q =
390 b(2) < 0 ? -1 * Acts::UnitConstants::e : +1 * Acts::UnitConstants::e;
391
392 // Linear intersection with the perigee line. TODO:: Use propagator instead
393 // Project the position on the surface.
394 // This is mainly necessary for the perigee surface, where
395 // the mean might not fulfill the perigee condition.
396
397 // mg Aug 2024 .. interect has changed, but just remove boundary check
398 // and change intersection to intersections
399 // auto intersection =
400 // (*seed_perigee).intersect(geometry_context(), seed_pos, dir, false);
401
402 // Acts::FreeVector seed_free = tracking::sim::utils::toFreeParameters(
403 // intersection.intersection.position, seed_mom, q);
404
405 auto intersection =
406 (*seed_perigee).intersect(geometryContext(), seed_pos, dir);
407
408 Acts::FreeVector seed_free = tracking::sim::utils::toFreeParameters(
409 intersection[0].position(), seed_mom, q);
410
411 auto bound_params = Acts::transformFreeToBoundParameters(
412 seed_free, *seed_perigee, geometryContext())
413 .value();
414
415 ldmx_log(trace) << "bound parameters at perigee location" << bound_params;
416
417 Acts::BoundVector stddev;
418 // sigma set to 75% of momentum
419 double sigma_p = 0.75 * p * Acts::UnitConstants::GeV;
420 stddev[Acts::eBoundLoc0] =
421 inflate_factors_[Acts::eBoundLoc0] * 2 * Acts::UnitConstants::mm;
422 stddev[Acts::eBoundLoc1] =
423 inflate_factors_[Acts::eBoundLoc1] * 5 * Acts::UnitConstants::mm;
424 stddev[Acts::eBoundPhi] =
425 inflate_factors_[Acts::eBoundPhi] * 5 * Acts::UnitConstants::degree;
426 stddev[Acts::eBoundTheta] =
427 inflate_factors_[Acts::eBoundTheta] * 5 * Acts::UnitConstants::degree;
428 stddev[Acts::eBoundQOverP] =
429 inflate_factors_[Acts::eBoundQOverP] * (1. / p) * (1. / p) * sigma_p;
430 stddev[Acts::eBoundTime] =
431 inflate_factors_[Acts::eBoundTime] * 1000 * Acts::UnitConstants::ns;
432
433 ldmx_log(debug)
434 << "Making covariance matrix as diagonal matrix with inflated terms";
435 Acts::BoundMatrix bound_cov = stddev.cwiseProduct(stddev).asDiagonal();
436
437 ldmx_log(debug) << "...now putting together the seed track ...";
438
439 ldmx::Track trk = ldmx::Track();
440 // Store the perigee surface position (absolute ACTS coordinates) converted to
441 // LDMX frame so CKFProcessor can reconstruct the same surface.
442 Acts::Vector3 perigee_ldmx =
443 tracking::sim::utils::acts2Ldmx(perigee_location);
444 trk.setPerigeeLocation(perigee_ldmx(0), perigee_ldmx(1), perigee_ldmx(2));
445 trk.setChi2(0.);
446 trk.setNhits(vmeas.size());
447 trk.setNdf(0);
448 trk.setNsharedHits(0);
449 trk.setCharge(q < 0 ? -1 : 1);
450 std::vector<double> v_seed_params(
451 (bound_params).data(),
452 bound_params.data() + bound_params.rows() * bound_params.cols());
453 std::vector<double> v_seed_cov;
454 tracking::sim::utils::flatCov(bound_cov, v_seed_cov);
455 trk.setPerigeeParameters(v_seed_params);
456 trk.setPerigeeCov(v_seed_cov);
457
458 ldmx_log(debug)
459 << "...making the ParticleHypothesis ...assume electron for now";
460 auto part_hypo{Acts::ParticleHypothesis::electron()};
461
462 ldmx_log(debug) << "Making BoundTrackParameters seedParameters";
463 Acts::BoundTrackParameters seed_parameters(
464 seed_perigee, std::move(bound_params), bound_cov, part_hypo);
465
466 ldmx_log(debug) << "Returning seed track";
467 return trk;
468}
std::array< float, 3 > getGlobalPosition() const
Definition Measurement.h:50
std::array< float, 2 > getLocalPosition() const
Definition Measurement.h:67
std::array< float, 2 > getLocalCovariance() const
Definition Measurement.h:84

References ldmx::Measurement::getGlobalPosition(), ldmx::Measurement::getLocalCovariance(), ldmx::Measurement::getLocalPosition(), target_surface_, u_error_, and v_error_.

Member Data Documentation

◆ b0_

std::vector<float> tracking::reco::SeedFinderProcessor::b0_
private

Definition at line 159 of file SeedFinderProcessor.h.

◆ b1_

std::vector<float> tracking::reco::SeedFinderProcessor::b1_
private

Definition at line 160 of file SeedFinderProcessor.h.

◆ b2_

std::vector<float> tracking::reco::SeedFinderProcessor::b2_
private

Definition at line 161 of file SeedFinderProcessor.h.

◆ b3_

std::vector<float> tracking::reco::SeedFinderProcessor::b3_
private

Definition at line 162 of file SeedFinderProcessor.h.

◆ b4_

std::vector<float> tracking::reco::SeedFinderProcessor::b4_
private

Definition at line 163 of file SeedFinderProcessor.h.

◆ b_field_

Acts::Vector3 tracking::reco::SeedFinderProcessor::b_field_
private

Definition at line 82 of file SeedFinderProcessor.h.

◆ bfield_

double tracking::reco::SeedFinderProcessor::bfield_ {1.5}
private

Definition at line 153 of file SeedFinderProcessor.h.

153{1.5};

◆ d0max_

double tracking::reco::SeedFinderProcessor::d0max_ {20.}
private

Max d0 allowed for the seeds.

Definition at line 118 of file SeedFinderProcessor.h.

118{20.};

Referenced by configure().

◆ d0min_

double tracking::reco::SeedFinderProcessor::d0min_ {20.}
private

Min d0 allowed for the seeds.

Definition at line 121 of file SeedFinderProcessor.h.

121{20.};

Referenced by configure().

◆ groups_map_

std::map<int, std::vector<const ldmx::Measurement*> > tracking::reco::SeedFinderProcessor::groups_map_
private

Definition at line 177 of file SeedFinderProcessor.h.

◆ inflate_factors_

std::vector<double> tracking::reco::SeedFinderProcessor::inflate_factors_ {1., 1., 1., 1., 1.}
private

Definition at line 95 of file SeedFinderProcessor.h.

95{1., 1., 1., 1., 1.};

◆ input_hits_collection_

std::string tracking::reco::SeedFinderProcessor::input_hits_collection_ {"TaggerSimHits"}
private

The name of the input hits collection to use in finding seeds..

Definition at line 100 of file SeedFinderProcessor.h.

100{"TaggerSimHits"};

Referenced by configure(), and produce().

◆ input_pass_name_

std::string tracking::reco::SeedFinderProcessor::input_pass_name_ {""}
private

Definition at line 103 of file SeedFinderProcessor.h.

103{""};

◆ loc0cut_

double tracking::reco::SeedFinderProcessor::loc0cut_ {0.1}
private

loc0 / loc1 cuts

Definition at line 135 of file SeedFinderProcessor.h.

135{0.1};

Referenced by configure().

◆ loc1cut_

double tracking::reco::SeedFinderProcessor::loc1cut_ {0.3}
private

Definition at line 136 of file SeedFinderProcessor.h.

136{0.3};

◆ ndoubles_

long tracking::reco::SeedFinderProcessor::ndoubles_ {0}
private

Definition at line 166 of file SeedFinderProcessor.h.

166{0};

◆ nevents_

long tracking::reco::SeedFinderProcessor::nevents_ {0}
private

Definition at line 92 of file SeedFinderProcessor.h.

92{0};

◆ nfaild0max_

long tracking::reco::SeedFinderProcessor::nfaild0max_ {0}
private

Definition at line 171 of file SeedFinderProcessor.h.

171{0};

◆ nfaild0min_

long tracking::reco::SeedFinderProcessor::nfaild0min_ {0}
private

Definition at line 170 of file SeedFinderProcessor.h.

170{0};

◆ nfailphi_

long tracking::reco::SeedFinderProcessor::nfailphi_ {0}
private

Definition at line 173 of file SeedFinderProcessor.h.

173{0};

◆ nfailpmax_

long tracking::reco::SeedFinderProcessor::nfailpmax_ {0}
private

Definition at line 169 of file SeedFinderProcessor.h.

169{0};

◆ nfailpmin_

long tracking::reco::SeedFinderProcessor::nfailpmin_ {0}
private

Definition at line 168 of file SeedFinderProcessor.h.

168{0};

◆ nfailprefilter_

long tracking::reco::SeedFinderProcessor::nfailprefilter_ {0}
private

Definition at line 144 of file SeedFinderProcessor.h.

144{0};

◆ nfailtheta_

long tracking::reco::SeedFinderProcessor::nfailtheta_ {0}
private

Definition at line 174 of file SeedFinderProcessor.h.

174{0};

◆ nfailz0max_

long tracking::reco::SeedFinderProcessor::nfailz0max_ {0}
private

Definition at line 172 of file SeedFinderProcessor.h.

172{0};

◆ nmissing_

long tracking::reco::SeedFinderProcessor::nmissing_ {0}
private

Definition at line 167 of file SeedFinderProcessor.h.

167{0};

◆ ntracks_

unsigned int tracking::reco::SeedFinderProcessor::ntracks_ {0}
private

Definition at line 93 of file SeedFinderProcessor.h.

93{0};

◆ out_seed_collection_

std::string tracking::reco::SeedFinderProcessor::out_seed_collection_ {"SeedTracks"}
private

The name of the output collection of seeds to be stored.

Definition at line 98 of file SeedFinderProcessor.h.

98{"SeedTracks"};

Referenced by configure(), and produce().

◆ perigee_location_

std::vector<double> tracking::reco::SeedFinderProcessor::perigee_location_ {-700., 0., 0}
private

Location of the perigee for the helix track parameters.

Definition at line 110 of file SeedFinderProcessor.h.

110{-700., 0., 0};

Referenced by configure().

◆ phicut_

double tracking::reco::SeedFinderProcessor::phicut_ {0.1}
private

PhiRange.

Definition at line 129 of file SeedFinderProcessor.h.

129{0.1};

Referenced by configure().

◆ piover2_

double tracking::reco::SeedFinderProcessor::piover2_ {1.5708}
private

Definition at line 126 of file SeedFinderProcessor.h.

126{1.5708};

◆ pmax_

double tracking::reco::SeedFinderProcessor::pmax_ {8}
private

Maximum cut on the momentum of the seeds.

Definition at line 115 of file SeedFinderProcessor.h.

115{8};

Referenced by configure().

◆ pmin_

double tracking::reco::SeedFinderProcessor::pmin_ {0.05}
private

Minimum cut on the momentum of the seeds.

Definition at line 112 of file SeedFinderProcessor.h.

112{0.05};

Referenced by configure().

◆ prefilter_unconstrained_

bool tracking::reco::SeedFinderProcessor::prefilter_unconstrained_ {false}
private

Constrained fits only after the plain fit passes the cuts.

Definition at line 143 of file SeedFinderProcessor.h.

143{false};

Referenced by configure(), and onProcessEnd().

◆ processing_time_

double tracking::reco::SeedFinderProcessor::processing_time_ {0.}
private

Definition at line 91 of file SeedFinderProcessor.h.

91{0.};

◆ seed_to_track_maker_

std::shared_ptr<tracking::sim::SeedToTrackParamMaker> tracking::reco::SeedFinderProcessor::seed_to_track_maker_
private

Definition at line 89 of file SeedFinderProcessor.h.

◆ seeds_per_strategy_

std::vector<long> tracking::reco::SeedFinderProcessor::seeds_per_strategy_ {}
private

Seeds found per strategy, for the end of job summary.

Definition at line 146 of file SeedFinderProcessor.h.

146{};

Referenced by onProcessEnd(), and produce().

◆ sim_particles_coll_name_

std::string tracking::reco::SeedFinderProcessor::sim_particles_coll_name_
private

Definition at line 105 of file SeedFinderProcessor.h.

◆ sim_particles_event_passname_

std::string tracking::reco::SeedFinderProcessor::sim_particles_event_passname_
private

Definition at line 108 of file SeedFinderProcessor.h.

◆ sim_particles_passname_

std::string tracking::reco::SeedFinderProcessor::sim_particles_passname_
private

Definition at line 106 of file SeedFinderProcessor.h.

◆ strategies_

std::vector<std::string> tracking::reco::SeedFinderProcessor::strategies_ {}
private

List of stragies for seed finding.

Definition at line 139 of file SeedFinderProcessor.h.

139{};

Referenced by configure(), and onProcessEnd().

◆ strategy_layers_

std::vector<std::vector<int> > tracking::reco::SeedFinderProcessor::strategy_layers_ {}
private

Layer lists parsed from strategies_, one per strategy.

Definition at line 141 of file SeedFinderProcessor.h.

141{};

Referenced by configure(), and produce().

◆ tagger_trks_collection_

std::string tracking::reco::SeedFinderProcessor::tagger_trks_collection_ {"TaggerTracks"}
private

The name of the tagger Tracks (only for Recoil Seeding)

Definition at line 102 of file SeedFinderProcessor.h.

102{"TaggerTracks"};

Referenced by configure(), and produce().

◆ tagger_trks_event_collection_passname_

std::string tracking::reco::SeedFinderProcessor::tagger_trks_event_collection_passname_
private

Definition at line 107 of file SeedFinderProcessor.h.

◆ target_surface_

std::shared_ptr<Acts::Surface> tracking::reco::SeedFinderProcessor::target_surface_
private

Target surface the constraints live on.

Definition at line 150 of file SeedFinderProcessor.h.

Referenced by onProcessStart(), produce(), and seedTracker().

◆ thetacut_

double tracking::reco::SeedFinderProcessor::thetacut_ {0.2}
private

ThetaRange.

Definition at line 132 of file SeedFinderProcessor.h.

132{0.2};

Referenced by configure().

◆ truth_matching_tool_

std::shared_ptr<tracking::sim::TruthMatchingTool> tracking::reco::SeedFinderProcessor::truth_matching_tool_
private
Initial value:
=
nullptr

Definition at line 180 of file SeedFinderProcessor.h.

◆ u_error_

double tracking::reco::SeedFinderProcessor::u_error_
private

u error

Definition at line 184 of file SeedFinderProcessor.h.

Referenced by configure(), and seedTracker().

◆ use_target_constraint_

bool tracking::reco::SeedFinderProcessor::use_target_constraint_ {false}
private

Put tagger track positions at the target into the seed fit.

Definition at line 148 of file SeedFinderProcessor.h.

148{false};

Referenced by configure(), and produce().

◆ v_error_

double tracking::reco::SeedFinderProcessor::v_error_
private

v error

Definition at line 186 of file SeedFinderProcessor.h.

Referenced by configure(), and seedTracker().

◆ warned_ambiguous_tagger_

bool tracking::reco::SeedFinderProcessor::warned_ambiguous_tagger_ {false}
private

Warn only once about several tagger track collections.

Definition at line 152 of file SeedFinderProcessor.h.

152{false};

Referenced by produce().

◆ xhit_

std::vector<float> tracking::reco::SeedFinderProcessor::xhit_
private

Definition at line 155 of file SeedFinderProcessor.h.

◆ yhit_

std::vector<float> tracking::reco::SeedFinderProcessor::yhit_
private

Definition at line 156 of file SeedFinderProcessor.h.

◆ z0max_

double tracking::reco::SeedFinderProcessor::z0max_ {60.}
private

Max z0 allowed for the seeds.

Definition at line 124 of file SeedFinderProcessor.h.

124{60.};

Referenced by configure().

◆ zhit_

std::vector<float> tracking::reco::SeedFinderProcessor::zhit_
private

Definition at line 157 of file SeedFinderProcessor.h.


The documentation for this class was generated from the following files: