16 {
17
18 float* distance = 0;
19 int* steps = 0;
20
21 int MAX_SAMPLING = geo->max_sample;
24
25 if ( sampling < 0 ) return -1;
26 if ( sampling >= MAX_SAMPLING ) return -1;
27
28 int sample_size = SampleIdx[sampling].
size;
29 unsigned int sample_index = SampleIdx[sampling].
index;
30
32 if ( sample_size == 0 ) return -1;
33 float dist{};
34 long long bestDDE = -1;
35 if ( !distance ) distance = &dist;
36 *distance = +10000000;
37 int intsteps;
38 int beststeps;
39 if ( steps )
40 beststeps = ( *steps );
41 else
42 beststeps = 0;
43
44 if ( sampling < 21 ) {
45 for ( int skip_range_check = 0; skip_range_check <= 1; ++skip_range_check ) {
46 for ( unsigned int j = sample_index; j < sample_index + sample_size; ++j ) {
47 if ( !skip_range_check ) {
48 if (
eta <
gr[j].mineta() )
continue;
49 if (
eta >
gr[j].maxeta() )
continue;
50 }
51 if ( steps )
52 intsteps = ( *steps );
53 else
54 intsteps = 0;
55 float newdist;
56 long long newDDE =
gr[j].getDDE(
eta,
phi, &newdist, &intsteps );
57 if ( newdist < *distance ) {
58 bestDDE = newDDE;
60 if ( steps ) beststeps = intsteps;
61 if ( newdist < -0.1 ) break;
62 }
63 }
64 if ( bestDDE >= 0 ) break;
65 }
66 } else {
67 return -3;
68 }
69 if ( steps ) *
steps = beststeps;
70
71 return bestDDE;
72 }
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space