10 #include "TrackerInfo.h"
11 #include "mkFit/HitStructures.h"
12 #include "mkFit/IterationConfig.h"
15 using namespace mkfit;
17 [[maybe_unused]]
void partitionSeeds0(
const TrackerInfo &trk_info,
19 const EventOfHits &eoh,
20 IterationSeedPartition &
part) {
21 const size_t size = in_seeds.size();
23 for (
size_t i = 0;
i <
size; ++
i) {
24 const Track &
S = in_seeds[
i];
26 const bool z_dir_pos = S.pz() > 0;
28 const auto &hot = S.getLastHitOnTrack();
29 const float eta = eoh[hot.layer].GetHit(hot.index).eta();
32 TrackerInfo::EtaRegion reg;
35 constexpr
float maxEta_regSort = 7.0;
37 const LayerInfo &outer_brl = trk_info.outer_barrel_layer();
40 constexpr
int tib1_id = 4;
41 constexpr
int tob1_id = 10;
42 constexpr
int tecp1_id = 27;
43 constexpr
int tecn1_id = 54;
45 const LayerInfo &tib1 = trk_info.m_layers[tib1_id];
46 const LayerInfo &tob1 = trk_info.m_layers[tob1_id];
48 const LayerInfo &tecp1 = trk_info.m_layers[tecp1_id];
49 const LayerInfo &tecn1 = trk_info.m_layers[tecn1_id];
51 const LayerInfo &tec_first = z_dir_pos ? tecp1 : tecn1;
53 const float maxR = S.maxReachRadius();
56 bool can_reach_outer_brl = S.canReachRadius(outer_brl.m_rout);
58 bool misses_first_tec;
59 if (can_reach_outer_brl) {
60 z_at_outer_brl = S.zAtR(outer_brl.m_rout);
62 misses_first_tec = z_at_outer_brl < tec_first.m_zmin;
64 misses_first_tec = z_at_outer_brl > tec_first.m_zmax;
66 z_at_maxr = S.zAtR(maxR);
68 misses_first_tec = z_at_maxr < tec_first.m_zmin;
70 misses_first_tec = z_at_maxr > tec_first.m_zmax;
73 if (misses_first_tec) {
74 reg = TrackerInfo::Reg_Barrel;
76 if ((S.canReachRadius(tib1.m_rin) && tib1.is_within_z_limits(S.zAtR(tib1.m_rin))) ||
77 (S.canReachRadius(tob1.m_rin) && tob1.is_within_z_limits(S.zAtR(tob1.m_rin)))) {
78 reg = z_dir_pos ? TrackerInfo::Reg_Transition_Pos : TrackerInfo::Reg_Transition_Neg;
80 reg = z_dir_pos ? TrackerInfo::Reg_Endcap_Pos : TrackerInfo::Reg_Endcap_Neg;
84 part.m_region[
i] = reg;
88 part.m_sort_score[
i] = maxEta_regSort * (reg - TrackerInfo::Reg_Barrel) + eta;
92 [[maybe_unused]]
void partitionSeeds1(
const TrackerInfo &trk_info,
94 const EventOfHits &eoh,
95 IterationSeedPartition &part) {
97 constexpr
int tib1_id = 4;
98 constexpr
int tob1_id = 10;
99 constexpr
int tidp1_id = 21;
100 constexpr
int tidn1_id = 48;
101 constexpr
int tecp1_id = 27;
102 constexpr
int tecn1_id = 54;
104 const LayerInfo &tib1 = trk_info.m_layers[tib1_id];
105 const LayerInfo &tob1 = trk_info.m_layers[tob1_id];
107 const LayerInfo &tidp1 = trk_info.m_layers[tidp1_id];
108 const LayerInfo &tidn1 = trk_info.m_layers[tidn1_id];
110 const LayerInfo &tecp1 = trk_info.m_layers[tecp1_id];
111 const LayerInfo &tecn1 = trk_info.m_layers[tecn1_id];
115 const auto &
L = trk_info.m_layers;
116 const float tidp_rin =
std::min(
L[tidp1_id].m_rin,
L[tidp1_id + 1].m_rin);
117 const float tidp_rout =
std::max(
L[tidp1_id].m_rout,
L[tidp1_id + 1].m_rout);
118 const float tecp_rin =
std::min(
L[tecp1_id].m_rin,
L[tecp1_id + 1].m_rin);
119 const float tecp_rout =
std::max(
L[tecp1_id].m_rout,
L[tecp1_id + 1].m_rout);
120 const float tidn_rin =
std::min(
L[tidn1_id].m_rin,
L[tidn1_id + 1].m_rin);
121 const float tidn_rout =
std::max(
L[tidn1_id].m_rout,
L[tidn1_id + 1].m_rout);
122 const float tecn_rin =
std::min(
L[tecn1_id].m_rin,
L[tecn1_id + 1].m_rin);
123 const float tecn_rout =
std::max(
L[tecn1_id].m_rout,
L[tecn1_id + 1].m_rout);
127 const float tid_z_extra = 0.0f;
128 const float tec_z_extra = 0.0f;
130 const size_t size = in_seeds.size();
132 auto barrel_pos_check = [](
const Track &
S,
float maxR,
float rin,
float zmax) ->
bool {
133 bool inside = maxR > rin && S.zAtR(rin) < zmax;
137 auto barrel_neg_check = [](
const Track &
S,
float maxR,
float rin,
float zmin) ->
bool {
138 bool inside = maxR > rin && S.zAtR(rin) > zmin;
142 auto endcap_pos_check = [](
const Track &
S,
float maxR,
float rout,
float rin,
float zmin) ->
bool {
143 bool inside = maxR > rout ? S.zAtR(rout) > zmin : (maxR > rin && S.zAtR(maxR) > zmin);
147 auto endcap_neg_check = [](
const Track &
S,
float maxR,
float rout,
float rin,
float zmax) ->
bool {
148 bool inside = maxR > rout ? S.zAtR(rout) < zmax : (maxR > rin && S.zAtR(maxR) < zmax);
152 for (
size_t i = 0;
i <
size; ++
i) {
153 const Track &S = in_seeds[
i];
155 const auto &hot = S.getLastHitOnTrack();
156 const float eta = eoh[hot.layer].GetHit(hot.index).eta();
159 TrackerInfo::EtaRegion reg;
162 constexpr
float maxEta_regSort = 7.0;
164 const bool z_dir_pos = S.pz() > 0;
165 const float maxR = S.maxReachRadius();
168 const bool in_tib = barrel_pos_check(S, maxR, tib1.m_rin, tib1.m_zmax);
169 const bool in_tob = barrel_pos_check(S, maxR, tob1.m_rin, tob1.m_zmax);
171 if (!in_tib && !in_tob) {
172 reg = TrackerInfo::Reg_Endcap_Pos;
174 const bool in_tid = endcap_pos_check(S, maxR, tidp_rout, tidp_rin, tidp1.m_zmin - tid_z_extra);
175 const bool in_tec = endcap_pos_check(S, maxR, tecp_rout, tecp_rin, tecp1.m_zmin - tec_z_extra);
177 if (!in_tid && !in_tec) {
178 reg = TrackerInfo::Reg_Barrel;
180 reg = TrackerInfo::Reg_Transition_Pos;
184 const bool in_tib = barrel_neg_check(S, maxR, tib1.m_rin, tib1.m_zmin);
185 const bool in_tob = barrel_neg_check(S, maxR, tob1.m_rin, tob1.m_zmin);
187 if (!in_tib && !in_tob) {
188 reg = TrackerInfo::Reg_Endcap_Neg;
190 const bool in_tid = endcap_neg_check(S, maxR, tidn_rout, tidn_rin, tidn1.m_zmax + tid_z_extra);
191 const bool in_tec = endcap_neg_check(S, maxR, tecn_rout, tecn_rin, tecn1.m_zmax + tec_z_extra);
193 if (!in_tid && !in_tec) {
194 reg = TrackerInfo::Reg_Barrel;
196 reg = TrackerInfo::Reg_Transition_Neg;
201 part.m_region[
i] = reg;
205 part.m_sort_score[
i] = maxEta_regSort * (reg - TrackerInfo::Reg_Barrel) + eta;
229 desc.
add<
std::string>(
"ComponentName")->setComment(
"Product label");
230 desc.
add<
edm::FileInPath>(
"config")->setComment(
"Path to the JSON file for the mkFit configuration parameters");
236 auto it_conf = mkfit::ConfigJson_Load_File(
configFile_);
237 it_conf->m_partition_seeds = partitionSeeds1;
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
const std::string configFile_
std::unique_ptr< mkfit::IterationConfig > produce(const TrackerRecoGeometryRecord &iRecord)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< Track > TrackVec
const edm::ESGetToken< MkFitGeometry, TrackerRecoGeometryRecord > geomToken_
T getParameter(std::string const &) const
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
double S(const TLorentzVector &, const TLorentzVector &)
tuple size
Write out results.
MkFitIterationConfigESProducer(const edm::ParameterSet &iConfig)