ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/IPHCalignment2/TrackingTools/PatternTools/test/ClosestApproachInRPhi_t.cpp
Revision: 1.1
Committed: Fri Nov 25 16:38:26 2011 UTC (13 years, 5 months ago) by econte
Branch: MAIN
CVS Tags: TBD2011, TBD_2011, HEAD
Log Message:
new IPHC alignment

File Contents

# User Rev Content
1 econte 1.1 #define private public
2     #include "TrackingTools/PatternTools/interface/ClosestApproachInRPhi.h"
3     #include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistanceHelixHelix.h"
4     #undef private
5    
6     // #include "DataFormats/GeometrySurface/interface/BoundPlane.h"
7     #include "MagneticField/Engine/interface/MagneticField.h"
8    
9     // #include "TrackingTools/TrajectoryState/interface/BasicSingleTrajectoryState.h"
10     #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
11    
12    
13     #include <iostream>
14    
15     class ConstMagneticField : public MagneticField {
16     public:
17    
18     virtual GlobalVector inTesla ( const GlobalPoint& ) const {
19     return GlobalVector(0,0,4);
20     }
21    
22     };
23    
24    
25     namespace {
26     inline GlobalPoint mean ( std::pair<GlobalPoint, GlobalPoint> pr ) {
27     return GlobalPoint ( 0.5*(pr.first.basicVector() + pr.second.basicVector()) );
28     }
29    
30     inline double dist ( std::pair<GlobalPoint, GlobalPoint> pr ) {
31     return ( pr.first - pr.second ).mag();
32     }
33     }
34    
35    
36     void compute(GlobalTrajectoryParameters const & gtp1, GlobalTrajectoryParameters const & gtp2) {
37     ClosestApproachInRPhi ca;
38     TwoTrackMinimumDistanceHelixHelix TTMDhh;
39    
40     std::cout << "CAIR" << std::endl;
41     bool ok = ca.calculate(gtp1,gtp2);
42     if(!ok)
43     std::cout << "no intercept!" << std::endl;
44     else {
45     std::cout << "distance, xpoint " << ca.distance() << ca.crossingPoint() << std::endl;
46     std::pair <GlobalTrajectoryParameters, GlobalTrajectoryParameters > tca = ca.trajectoryParameters();
47     std::cout << tca.first << std::endl;
48     std::cout << tca.second << std::endl;
49     }
50    
51     std::cout << "TTMDhh" << std::endl;
52     bool nok = TTMDhh.calculate(gtp1,gtp2,.0001);
53     if(nok)
54     std::cout << "no intercept!" << std::endl;
55     else {
56     std::pair<GlobalPoint, GlobalPoint> pr = TTMDhh.points();
57     std::cout << "distance, xpoint " << dist(pr) << mean(pr) << std::endl;
58     // std::pair <GlobalTrajectoryParameters, GlobalTrajectoryParameters > thh = TTMDhh.trajectoryParameters();
59     // std::cout << thh.first << std::endl;
60     // std::cout << thh.second << std::endl;
61     }
62     }
63    
64    
65     int main() {
66    
67     MagneticField * field = new ConstMagneticField;
68    
69     {
70     // going back and forth gtp2 should be identical to gpt1....
71     GlobalPoint gp1(1,0,0);
72     GlobalVector gv1(1,1,-1);
73     GlobalTrajectoryParameters gtp1(gp1,gv1,1,field);
74     double bz = field->inTesla(gp1).z() * 2.99792458e-3;
75     GlobalPoint np(0.504471, -0.498494, 0.497014);
76     GlobalTrajectoryParameters gtpN = ClosestApproachInRPhi::newTrajectory(np,gtp1,bz);
77     GlobalTrajectoryParameters gtp2 = ClosestApproachInRPhi::newTrajectory(gp1,gtpN,bz);
78     std::cout << gtp1 << std::endl;
79     std::cout << gtpN << std::endl;
80     std::cout << gtp2 << std::endl;
81     std::cout << std::endl;
82     }
83    
84    
85     {
86     std::cout <<"opposite sign, same direction, same origin: the two circles are tangent to each other at gp1\n" << std::endl;
87     GlobalPoint gp1(0,0,0);
88     GlobalVector gv1(1,1,1);
89     GlobalTrajectoryParameters gtp1(gp1,gv1,1,field);
90    
91     GlobalPoint gp2(0,0,0);
92     GlobalVector gv2(1,1,-1);
93     GlobalTrajectoryParameters gtp2(gp2,gv2,-1,field);
94    
95     compute(gtp1,gtp2);
96     std::cout << std::endl;
97    
98     }
99     {
100     std::cout <<" not crossing: the pcas are on the line connecting the two centers\n"
101     <<"the momenta at the respective pcas shall be parallel as they are perpendicular to the same line\n"
102     <<"(the one connecting the two centers)\n" << std::endl;
103     GlobalPoint gp1(-1,0,0);
104     GlobalVector gv1(1,1,1);
105     GlobalTrajectoryParameters gtp1(gp1,gv1,-1,field);
106    
107     GlobalPoint gp2(1,0,0);
108     GlobalVector gv2(1,1,-1);
109     GlobalTrajectoryParameters gtp2(gp2,gv2,1,field);
110    
111     compute(gtp1,gtp2);
112     std::cout << std::endl;
113     }
114     {
115     std::cout <<"crossing (only opposite changes w.r.t. previous)\n" << std::endl;
116     GlobalPoint gp1(-1,0,0);
117     GlobalVector gv1(1,1,1);
118     GlobalTrajectoryParameters gtp1(gp1,gv1,1,field);
119    
120     GlobalPoint gp2(1,0,0);
121     GlobalVector gv2(1,1,-1);
122     GlobalTrajectoryParameters gtp2(gp2,gv2,-1,field);
123    
124     compute(gtp1,gtp2);
125     std::cout << std::endl;
126     }
127    
128     {
129     std::cout <<"crossing\n" << std::endl;
130     GlobalPoint gp1(-1,0,0);
131     GlobalVector gv1(1,1,1);
132     GlobalTrajectoryParameters gtp1(gp1,gv1,-1,field);
133    
134     GlobalPoint gp2(1,0,0);
135     GlobalVector gv2(-1,1,-1);
136     GlobalTrajectoryParameters gtp2(gp2,gv2,1,field);
137    
138     compute(gtp1,gtp2);
139     std::cout << std::endl;
140     }
141    
142    
143     return 0;
144    
145     }