7 #include "TrackerInfo.h"
8 #include "mkFit/IterationConfig.h"
9 #include "mkFit/HitStructures.h"
13 using namespace mkfit;
16 #include "createPhase1TrackerGeometryAutoGen.acc"
18 void setupSteeringParamsIter0(IterationConfig &ic) {
19 ic.m_region_order[0] = TrackerInfo::Reg_Transition_Pos;
20 ic.m_region_order[1] = TrackerInfo::Reg_Transition_Neg;
21 ic.m_region_order[2] = TrackerInfo::Reg_Endcap_Pos;
22 ic.m_region_order[3] = TrackerInfo::Reg_Endcap_Neg;
23 ic.m_region_order[4] = TrackerInfo::Reg_Barrel;
26 SteeringParams &sp = ic.m_steering_params[TrackerInfo::Reg_Endcap_Neg];
27 sp.reserve_plan(3 + 3 + 6 + 18);
28 sp.fill_plan(0, 1,
false,
true);
29 sp.append_plan(2,
true);
30 sp.append_plan(45,
false);
31 sp.append_plan(46,
false);
32 sp.append_plan(47,
false);
38 SteeringParams &sp = ic.m_steering_params[TrackerInfo::Reg_Transition_Neg];
39 sp.reserve_plan(4 + 3 + 6 + 6 + 8 + 18);
40 sp.fill_plan(0, 1,
false,
true);
41 sp.append_plan(2,
true);
42 sp.append_plan(3,
false);
43 sp.append_plan(45,
false);
44 sp.append_plan(46,
false);
45 sp.append_plan(47,
false);
53 SteeringParams &sp = ic.m_steering_params[TrackerInfo::Reg_Barrel];
54 sp.reserve_plan(4 + 6 + 8);
55 sp.fill_plan(0, 1,
false,
true);
56 sp.append_plan(2,
true);
57 sp.append_plan(3,
false);
63 SteeringParams &sp = ic.m_steering_params[TrackerInfo::Reg_Transition_Pos];
64 sp.reserve_plan(4 + 3 + 6 + 6 + 8 + 18);
65 sp.fill_plan(0, 1,
false,
true);
66 sp.append_plan(2,
true);
67 sp.append_plan(3,
false);
68 sp.append_plan(18,
false);
69 sp.append_plan(19,
false);
70 sp.append_plan(20,
false);
78 SteeringParams &sp = ic.m_steering_params[TrackerInfo::Reg_Endcap_Pos];
79 sp.reserve_plan(3 + 3 + 6 + 18);
80 sp.fill_plan(0, 1,
false,
true);
81 sp.append_plan(2,
true);
82 sp.append_plan(18,
false);
83 sp.append_plan(19,
false);
84 sp.append_plan(20,
false);
91 void partitionSeeds0(
const TrackerInfo &trk_info,
93 const EventOfHits &eoh,
94 IterationSeedPartition &
part) {
97 const int size = in_seeds.size();
99 for (
int i = 0;
i <
size; ++
i) {
100 const Track &
S = in_seeds[
i];
102 const bool z_dir_pos =
S.pz() > 0;
104 HitOnTrack hot =
S.getLastHitOnTrack();
107 float eta = eoh[hot.layer].GetHit(hot.index).eta();
115 const LayerInfo &outer_brl = trk_info.outer_barrel_layer();
117 const LayerInfo &tib1 = trk_info.m_layers[4];
118 const LayerInfo &tob1 = trk_info.m_layers[10];
120 const LayerInfo &tecp1 = trk_info.m_layers[27];
121 const LayerInfo &tecn1 = trk_info.m_layers[54];
123 const LayerInfo &tec_first = z_dir_pos ? tecp1 : tecn1;
132 float maxR =
S.maxReachRadius();
135 bool can_reach_outer_brl =
S.canReachRadius(outer_brl.m_rout);
136 float z_at_outer_brl;
137 bool misses_first_tec;
138 if (can_reach_outer_brl) {
139 z_at_outer_brl =
S.zAtR(outer_brl.m_rout);
141 misses_first_tec = z_at_outer_brl < tec_first.m_zmin;
143 misses_first_tec = z_at_outer_brl > tec_first.m_zmax;
145 z_at_maxr =
S.zAtR(maxR);
147 misses_first_tec = z_at_maxr < tec_first.m_zmin;
149 misses_first_tec = z_at_maxr > tec_first.m_zmax;
152 if ( misses_first_tec)
155 reg = TrackerInfo::Reg_Barrel;
160 if ((
S.canReachRadius(tib1.m_rin) && tib1.is_within_z_limits(
S.zAtR(tib1.m_rin))) ||
161 (
S.canReachRadius(tob1.m_rin) && tob1.is_within_z_limits(
S.zAtR(tob1.m_rin)))) {
164 reg = z_dir_pos ? TrackerInfo::Reg_Transition_Pos : TrackerInfo::Reg_Transition_Neg;
168 reg = z_dir_pos ? TrackerInfo::Reg_Endcap_Pos : TrackerInfo::Reg_Endcap_Neg;
172 part.m_region[
i] = reg;
173 part.m_sort_score[
i] = 5.0f * (reg - 2) +
eta;
181 Config::nTotalLayers = 18 + 2 * 27;
183 Config::useCMSGeom =
true;
185 Config::finding_requires_propagation_to_hit_pos =
true;
186 Config::finding_inter_layer_pflags = PropagationFlags(PF_use_param_b_field | PF_apply_material);
187 Config::finding_intra_layer_pflags = PropagationFlags(PF_none);
188 Config::backward_fit_pflags = PropagationFlags(PF_use_param_b_field | PF_apply_material);
189 Config::forward_fit_pflags = PropagationFlags(PF_use_param_b_field | PF_apply_material);
190 Config::seed_fit_pflags = PropagationFlags(PF_none);
191 Config::pca_prop_pflags = PropagationFlags(PF_none);
193 ti.set_eta_regions(0.9, 1.7, 2.45,
false);
194 ti.create_layers(18, 27, 27);
198 ii[0].set_num_regions_layers(5, 72);
200 createPhase1TrackerGeometryAutoGen(ti,
ii);
202 setupSteeringParamsIter0(
ii[0]);
203 ii[0].m_partition_seeds = partitionSeeds0;
236 printf(
"==========================================================================================\n");
237 printf(
"Phase1 tracker -- Create_TrackerInfo finished\n");
238 printf(
"==========================================================================================\n");
239 for (
auto &
i : ti.m_layers)
241 printf(
"==========================================================================================\n");