15 using namespace mkfit;
17 [[maybe_unused]]
void partitionSeeds0(
const TrackerInfo &trk_info,
21 const size_t size = in_seeds.size();
23 for (
size_t i = 0;
i <
size; ++
i) {
26 const bool z_dir_pos =
S.pz() > 0;
28 const auto &hot =
S.getLastHitOnTrack();
29 const float eta = eoh[hot.layer].refHit(hot.index).eta();
37 constexpr
int tib1_id = 4;
38 constexpr
int tob1_id = 10;
39 constexpr
int tecp1_id = 27;
40 constexpr
int tecn1_id = 54;
48 const LayerInfo &tec_first = z_dir_pos ? tecp1 : tecn1;
50 const float maxR =
S.maxReachRadius();
53 bool can_reach_outer_brl =
S.canReachRadius(outer_brl.
rout());
55 bool misses_first_tec;
56 if (can_reach_outer_brl) {
57 z_at_outer_brl =
S.zAtR(outer_brl.
rout());
59 misses_first_tec = z_at_outer_brl < tec_first.
zmin();
61 misses_first_tec = z_at_outer_brl > tec_first.
zmax();
63 z_at_maxr =
S.zAtR(maxR);
65 misses_first_tec = z_at_maxr < tec_first.
zmin();
67 misses_first_tec = z_at_maxr > tec_first.
zmax();
70 if (misses_first_tec) {
81 part.m_region[
i] = reg;
82 if (
part.m_phi_eta_foo)
83 part.m_phi_eta_foo(eoh[hot.layer].refHit(hot.index).phi(),
eta);
87 [[maybe_unused]]
void partitionSeeds1(
const TrackerInfo &trk_info,
92 constexpr
int tib1_id = 4;
93 constexpr
int tob1_id = 10;
94 constexpr
int tidp1_id = 21;
95 constexpr
int tidn1_id = 48;
96 constexpr
int tecp1_id = 27;
97 constexpr
int tecn1_id = 54;
110 const auto &
L = trk_info;
111 const float tidp_rin =
std::min(
L[tidp1_id].rin(),
L[tidp1_id + 1].rin());
112 const float tidp_rout =
std::max(
L[tidp1_id].rout(),
L[tidp1_id + 1].rout());
113 const float tecp_rin =
std::min(
L[tecp1_id].rin(),
L[tecp1_id + 1].rin());
114 const float tecp_rout =
std::max(
L[tecp1_id].rout(),
L[tecp1_id + 1].rout());
115 const float tidn_rin =
std::min(
L[tidn1_id].rin(),
L[tidn1_id + 1].rin());
116 const float tidn_rout =
std::max(
L[tidn1_id].rout(),
L[tidn1_id + 1].rout());
117 const float tecn_rin =
std::min(
L[tecn1_id].rin(),
L[tecn1_id + 1].rin());
118 const float tecn_rout =
std::max(
L[tecn1_id].rout(),
L[tecn1_id + 1].rout());
122 const float tid_z_extra = 0.0f;
123 const float tec_z_extra = 0.0f;
125 const size_t size = in_seeds.size();
127 auto barrel_pos_check = [](
const Track &
S,
float maxR,
float rin,
float zmax) ->
bool {
128 bool inside = maxR > rin &&
S.zAtR(rin) <
zmax;
132 auto barrel_neg_check = [](
const Track &
S,
float maxR,
float rin,
float zmin) ->
bool {
133 bool inside = maxR > rin &&
S.zAtR(rin) >
zmin;
137 auto endcap_pos_check = [](
const Track &
S,
float maxR,
float rout,
float rin,
float zmin) ->
bool {
138 bool inside = maxR > rout ?
S.zAtR(rout) >
zmin : (maxR > rin &&
S.zAtR(maxR) >
zmin);
142 auto endcap_neg_check = [](
const Track &
S,
float maxR,
float rout,
float rin,
float zmax) ->
bool {
143 bool inside = maxR > rout ?
S.zAtR(rout) <
zmax : (maxR > rin &&
S.zAtR(maxR) <
zmax);
147 for (
size_t i = 0;
i <
size; ++
i) {
150 const auto &hot =
S.getLastHitOnTrack();
151 const float eta = eoh[hot.layer].refHit(hot.index).eta();
156 const bool z_dir_pos =
S.pz() > 0;
157 const float maxR =
S.maxReachRadius();
160 const bool in_tib = barrel_pos_check(
S, maxR, tib1.
rin(), tib1.
zmax());
161 const bool in_tob = barrel_pos_check(
S, maxR, tob1.
rin(), tob1.
zmax());
163 if (!in_tib && !in_tob) {
166 const bool in_tid = endcap_pos_check(
S, maxR, tidp_rout, tidp_rin, tidp1.
zmin() - tid_z_extra);
167 const bool in_tec = endcap_pos_check(
S, maxR, tecp_rout, tecp_rin, tecp1.
zmin() - tec_z_extra);
169 if (!in_tid && !in_tec) {
176 const bool in_tib = barrel_neg_check(
S, maxR, tib1.
rin(), tib1.
zmin());
177 const bool in_tob = barrel_neg_check(
S, maxR, tob1.
rin(), tob1.
zmin());
179 if (!in_tib && !in_tob) {
182 const bool in_tid = endcap_neg_check(
S, maxR, tidn_rout, tidn_rin, tidn1.
zmax() + tid_z_extra);
183 const bool in_tec = endcap_neg_check(
S, maxR, tecn_rout, tecn_rin, tecn1.
zmax() + tec_z_extra);
185 if (!in_tid && !in_tec) {
193 part.m_region[
i] = reg;
194 if (
part.m_phi_eta_foo)
195 part.m_phi_eta_foo(eoh[hot.layer].refHit(hot.index).phi(),
eta);
218 minPtCut_{(
float)iConfig.getParameter<
double>(
"minPt")},
219 maxClusterSize_{iConfig.getParameter<
unsigned int>(
"maxClusterSize")} {}
224 desc.add<
edm::FileInPath>(
"config")->setComment(
"Path to the JSON file for the mkFit configuration parameters");
225 desc.add<
double>(
"minPt", 0.0)->setComment(
"min pT cut applied during track building");
226 desc.add<
unsigned int>(
"maxClusterSize", 8)->setComment(
"Max cluster size of SiStrip hits");
235 it_conf->m_backward_params.minPtCut =
minPtCut_;
236 it_conf->m_partition_seeds = partitionSeeds1;
const unsigned int maxClusterSize_
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
T getParameter(std::string const &) const
const std::string configFile_
std::unique_ptr< mkfit::IterationConfig > produce(const TrackerRecoGeometryRecord &iRecord)
const LayerInfo & outer_barrel_layer() const
bool is_within_z_limits(float z) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const LayerInfo & layer(int l) const
std::vector< Track > TrackVec
const edm::ESGetToken< MkFitGeometry, TrackerRecoGeometryRecord > geomToken_
std::unique_ptr< IterationConfig > load_File(const std::string &fname)
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
MkFitIterationConfigESProducer(const edm::ParameterSet &iConfig)