ATLAS Offline Software
TileMuonTrackDistance.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /********************************************************************
6  *
7  * NAME: TileMuonTrackDistance
8  * PACKAGE: offline/TileCalorimeter/TileCosmicAlgs
9  *
10  * AUTHOR : J. Maneira
11  * CREATED: 10-Jul-2006
12  *
13  * PURPOSE: Minuit fit function for TileMuonFitter
14  * Supplies summed distance from cells to track
15  *
16  * Input: Cells
17  * Output: Track parameters
18  *
19  ********************************************************************/
20 //
22 
23 using CLHEP::Hep3Vector;
24 
25 namespace ROOT {
26  namespace Minuit2 {
27 
29  m_meanX = m_meanY = m_meanZ = 0.;
30  double eSum = 0.;
31  int ncells = m_theX.size();
32 
33  if (m_doWeighted) {
34  for (int i = 0; i < ncells; i++) {
35  m_meanX += m_theE[i] * m_theX[i];
36  m_meanY += m_theE[i] * m_theY[i];
37  m_meanZ += m_theE[i] * m_theZ[i];
38  eSum += m_theE[i];
39  }
40  if (eSum > 0) {
41  m_meanX /= eSum;
42  m_meanY /= eSum;
43  m_meanZ /= eSum;
44  } else {
45  m_meanX = 0;
46  m_meanY = 0;
47  m_meanZ = 0;
48  }
49  } else {
50  for (int i = 0; i < ncells; i++) {
51  m_meanX += m_theX[i];
52  m_meanY += m_theY[i];
53  m_meanZ += m_theZ[i];
54  }
55  m_meanX /= (double) (ncells);
56  m_meanY /= (double) (ncells);
57  m_meanZ /= (double) (ncells);
58  }
59 
60  }
61  /*==========================================================================*/
62  double TileMuonTrackDistance::operator()(const std::vector<double>& par) const {
63  double distSum2 = 0;
64  std::vector<double> fourPar;
65 
66  fourPar.push_back(m_meanY - par[0] * m_meanX);
67  fourPar.push_back(par[0]);
68  fourPar.push_back(m_meanZ - par[1] * m_meanX);
69  fourPar.push_back(par[1]);
70 
71  for (int i = 0; i < (int) (m_theX.size()); i++) {
72  if (m_doWeighted) {
73  distSum2 += m_theE[i] * Distance2SinglePoint(m_theX[i], m_theY[i], m_theZ[i], fourPar);
74  } else {
75  distSum2 += Distance2SinglePoint(m_theX[i], m_theY[i], m_theZ[i], fourPar);
76  }
77  }
78 
79  return distSum2;
80 
81  }
82  /*==========================================================================*/
83  double TileMuonTrackDistance::Distance2SinglePoint(double x, double y, double z,
84  const std::vector<double>& par) const {
85 
86  Hep3Vector dataP(x, y, z);
87  Hep3Vector lineP(ClosestPoint(&dataP, par));
88 
89  return (dataP - lineP).mag2();
90  }
91  /*==========================================================================*/
92  Hep3Vector TileMuonTrackDistance::ClosestPoint(Hep3Vector *dataPoint, const std::vector<double>& par) const {
93 
94  double aa, bb, cc, dd;
95  double xort = 0;
96  Hep3Vector linePoint;
97 
98  aa = par[0];
99  bb = par[1];
100  cc = par[2];
101  dd = par[3];
102 
103  xort = dataPoint->getX() + bb * (dataPoint->getY() - aa) + dd * (dataPoint->getZ() - cc);
104  xort /= (1 + bb * bb + dd * dd);
105  linePoint.setX(xort);
106  linePoint.setY(aa + bb * xort);
107  linePoint.setZ(cc + dd * xort);
108 
109  return linePoint;
110  }
111 
112  } //namespace Minuit2
113 
114 } //namespace ROOT
115 
ROOT::Minuit2::TileMuonTrackDistance::m_meanY
double m_meanY
Definition: TileMuonTrackDistance.h:131
ROOT::Minuit2::TileMuonTrackDistance::m_doWeighted
bool m_doWeighted
Weight/no-weight flag.
Definition: TileMuonTrackDistance.h:128
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
ROOT::Minuit2::TileMuonTrackDistance::m_theZ
std::vector< double > m_theZ
Vector of cell center Z coordinates.
Definition: TileMuonTrackDistance.h:123
x
#define x
ROOT::Minuit2::TileMuonTrackDistance::Distance2SinglePoint
double Distance2SinglePoint(double x, double y, double z, const std::vector< double > &par) const
Returns squared distance from point to track defined by par.
Definition: TileMuonTrackDistance.cxx:83
ROOT::Minuit2::TileMuonTrackDistance::m_theE
std::vector< double > m_theE
Vector of cell energies.
Definition: TileMuonTrackDistance.h:125
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
ROOT::Minuit2::TileMuonTrackDistance::operator()
virtual double operator()(const std::vector< double > &) const
Provides Chi-square in function of parameter vector.
Definition: TileMuonTrackDistance.cxx:62
ROOT::Minuit2::TileMuonTrackDistance::Means
void Means()
Calculates means (weighted or not) of cell positions.
Definition: TileMuonTrackDistance.cxx:28
TileMuonTrackDistance.h
ROOT::Minuit2::TileMuonTrackDistance::m_theY
std::vector< double > m_theY
Vector of cell center Y coordinates.
Definition: TileMuonTrackDistance.h:121
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
library_scraper.dd
list dd
Definition: library_scraper.py:46
ROOT::Minuit2::TileMuonTrackDistance::ClosestPoint
CLHEP::Hep3Vector ClosestPoint(CLHEP::Hep3Vector *dataPoint, const std::vector< double > &par) const
Returns point in track defined by par closest to dataPoint.
Definition: TileMuonTrackDistance.cxx:92
y
#define y
ROOT::Minuit2::TileMuonTrackDistance::m_meanZ
double m_meanZ
Definition: TileMuonTrackDistance.h:132
ROOT::Minuit2::TileMuonTrackDistance::m_meanX
double m_meanX
Definition: TileMuonTrackDistance.h:130
ROOT::Minuit2::TileMuonTrackDistance::m_theX
std::vector< double > m_theX
Vector of cell center X coordinates.
Definition: TileMuonTrackDistance.h:119
test_AnalysisBaseEventLoopJob.aa
aa
Definition: test_AnalysisBaseEventLoopJob.py:37
ROOT
Definition: ViewVectorBaseStreamer.cxx:43
python.handimod.cc
int cc
Definition: handimod.py:523