File indexing completed on 2023-11-04 00:02:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include "RecoTracker/MkFitCore/interface/Config.h"
0021 #include "RecoTracker/MkFitCore/standalone/ConfigStandalone.h"
0022 #include "RecoTracker/MkFitCore/interface/TrackerInfo.h"
0023
0024 #include <cmath>
0025
0026 using namespace mkfit;
0027
0028 namespace {
0029 float getTheta(float r, float z) { return std::atan2(r, z); }
0030
0031 float getEta(float r, float z) { return -1.0f * std::log(std::tan(getTheta(r, z) / 2.0f)); }
0032
0033
0034
0035
0036
0037
0038 float getTgTheta(float eta) { return std::tan(2.0 * std::atan(std::exp(-eta))); }
0039
0040 class CylCowWLidsCreator {
0041 TrackerInfo& m_trkinfo;
0042
0043 static constexpr float m_det_half_thickness = 0.005;
0044
0045
0046
0047 void add_barrel(int lid, float r, float z, float eta) {
0048
0049
0050 LayerInfo& li = m_trkinfo.layer_nc(lid);
0051
0052 li.set_layer_type(LayerInfo::Barrel);
0053
0054 li.set_limits(r - m_det_half_thickness, r + m_det_half_thickness, -z, z);
0055 li.set_propagate_to(li.rin());
0056
0057 li.set_q_bin(2.0);
0058 }
0059
0060 void add_barrel_r_eta(int lid, float r, float eta) {
0061 float z = r / getTgTheta(eta);
0062
0063 add_barrel(lid, r, z, eta);
0064 }
0065
0066 void add_barrel_r_z(int lid, float r, float z) {
0067 float eta = getEta(r, z);
0068
0069 add_barrel(lid, r, z, eta);
0070 }
0071
0072 void add_endcap(int lid, float r, float z, float eta) {
0073 float r_end = z * getTgTheta(eta);
0074
0075
0076
0077 {
0078 LayerInfo& li = m_trkinfo.layer_nc(lid);
0079
0080 li.set_layer_type(LayerInfo::EndCapPos);
0081
0082 li.set_limits(r_end, r, z - m_det_half_thickness, z + m_det_half_thickness);
0083 li.set_propagate_to(li.zmin());
0084
0085 li.set_q_bin(1.5);
0086 }
0087 {
0088 lid += 9;
0089 LayerInfo& li = m_trkinfo.layer_nc(lid);
0090
0091 li.set_layer_type(LayerInfo::EndCapNeg);
0092
0093 li.set_limits(r_end, r, -z - m_det_half_thickness, -z + m_det_half_thickness);
0094 li.set_propagate_to(li.zmax());
0095
0096 li.set_q_bin(1.5);
0097 }
0098 }
0099
0100
0101
0102 public:
0103 CylCowWLidsCreator(TrackerInfo& ti) : m_trkinfo(ti) {}
0104
0105 void FillTrackerInfo() {
0106 m_trkinfo.create_layers(10, 9, 9);
0107
0108
0109 float full_eta = 2.5;
0110 float full_eta_pix_0 = 2.55;
0111 float full_eta_ec_in[] = {0, 2.525, 2.515, 2.505};
0112
0113 float pix_0 = 4, pix_sep = 6;
0114 float pix_z0 = 24, pix_zgrow = 6;
0115
0116 float sct_sep = 10;
0117 float sct_0 = pix_0 + 2 * pix_sep + sct_sep;
0118 float sct_zgrow = 10;
0119 float sct_z0 = pix_z0 + 2 * pix_zgrow + sct_zgrow;
0120
0121 float pix_ec_zgap = 2;
0122 float pix_ec_rextra = 2;
0123
0124 float sct_ec_zgap = 4;
0125 float sct_ec_rextra = 4;
0126
0127 add_barrel_r_eta(0, pix_0, full_eta_pix_0);
0128
0129 add_barrel_r_z(1, pix_0 + 1 * pix_sep, pix_z0 + 1 * pix_zgrow);
0130 add_barrel_r_z(2, pix_0 + 2 * pix_sep, pix_z0 + 2 * pix_zgrow);
0131 add_barrel_r_z(3, pix_0 + 3 * pix_sep, pix_z0 + 3 * pix_zgrow);
0132
0133 for (int i = 0; i < 6; ++i) {
0134 add_barrel_r_z(4 + i, sct_0 + i * sct_sep, sct_z0 + i * sct_zgrow);
0135 }
0136
0137 for (int i = 1; i < 4; ++i) {
0138 add_endcap(9 + i, pix_0 + i * pix_sep + pix_ec_rextra, pix_z0 + i * pix_zgrow + pix_ec_zgap, full_eta_ec_in[i]);
0139 }
0140 for (int i = 0; i < 6; ++i) {
0141 add_endcap(13 + i, sct_0 + i * sct_sep + sct_ec_rextra, sct_z0 + i * sct_zgrow + sct_ec_zgap, full_eta);
0142 }
0143
0144 }
0145 };
0146
0147
0148
0149 void Create_CylCowWLids(TrackerInfo& ti, IterationsInfo& ii, bool verbose) {
0150 PropagationConfig& pconf = ti.prop_config_nc();
0151 pconf.backward_fit_to_pca = Config::includePCA;
0152 pconf.finding_requires_propagation_to_hit_pos = false;
0153 pconf.finding_inter_layer_pflags = PropagationFlags(PF_none);
0154 pconf.finding_intra_layer_pflags = PropagationFlags(PF_none);
0155 pconf.backward_fit_pflags = PropagationFlags(PF_use_param_b_field);
0156 pconf.forward_fit_pflags = PropagationFlags(PF_use_param_b_field);
0157 pconf.seed_fit_pflags = PropagationFlags(PF_none);
0158 pconf.pca_prop_pflags = PropagationFlags(PF_use_param_b_field);
0159 pconf.apply_tracker_info(&ti);
0160
0161 CylCowWLidsCreator creator(ti);
0162
0163 creator.FillTrackerInfo();
0164
0165 if (verbose) {
0166 printf("==========================================================================================\n");
0167 }
0168 printf("Create_CylCowWLids -- creation complete\n");
0169
0170 if (verbose) {
0171 printf("==========================================================================================\n");
0172 for (int ii = 0; ii < ti.n_layers(); ++ii)
0173 ti.layer(ii).print_layer();
0174 printf("==========================================================================================\n");
0175 }
0176 }
0177
0178 }
0179
0180 void* TrackerInfoCreator_ptr = (void*)Create_CylCowWLids;