ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/Angles/src/Angles_ANL_NWU.cc
Revision: 1.2
Committed: Mon Feb 13 10:06:01 2012 UTC (13 years, 3 months ago) by khahn
Content type: text/plain
Branch: MAIN
CVS Tags: synced_FSR_2, synced_FSR, synched2, synched
Changes since 1.1: +3 -3 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 khahn 1.1 #include "Angles.h"
2     #include <iostream>
3    
4     //
5     // angles from Gainer, et. al.
6     // arVix:1108.2274v1 [hep-ph], 10 Aug 2011
7     //
8     // NB : phi1 will look quite different from the plots on pg 14, which have no kinematic cuts. phi1 looks
9     // more like the plots on pg 22, which do have cuts.
10    
11     void getAngles_ANL_NWU( LabVectors &l, Angles &a ) {
12    
13     //
14     // define the frames & coordinate systems
15     // --------------------------------------------------------------------------------------------------
16    
17     TVector3 Xframe = l.vec4l.BoostVector();
18     TVector3 Z1frame = l.vecz1.BoostVector();
19     TVector3 Z2frame = l.vecz2.BoostVector();
20    
21     // "partons" (pg6)
22     TLorentzVector kq( 0, 0, (l.vec4l.E()+l.vec4l.Pz())/2, (l.vec4l.E()+l.vec4l.Pz())/2 );
23     TLorentzVector kqbar( 0, 0, (l.vec4l.Pz()-l.vec4l.E())/2, (l.vec4l.E()-l.vec4l.Pz())/2 );
24     TLorentzVector veckq_in_Xframe(kq);
25     TLorentzVector veckqbar_in_Xframe(kqbar);
26     veckq_in_Xframe.Boost(-1*Xframe);
27     veckqbar_in_Xframe.Boost(-1*Xframe);
28    
29     // Z vectors
30     TLorentzVector vecz1_in_Xframe (l.vecz1);
31     TLorentzVector vecz2_in_Xframe (l.vecz2);
32     TLorentzVector vecz1_in_Z1frame (l.vecz1);
33     TLorentzVector vecz2_in_Z2frame (l.vecz2);
34     vecz1_in_Xframe.Boost(-1*Xframe);
35     vecz2_in_Xframe.Boost(-1*Xframe);
36     vecz1_in_Z1frame.Boost(-1*Z1frame);
37     vecz2_in_Z2frame.Boost(-1*Z2frame);
38    
39     // coord system in the CM frame
40     TVector3 uz_in_Xframe = vecz1_in_Xframe.Vect().Unit();
41     TVector3 uy_in_Xframe = (veckq_in_Xframe.Vect().Unit().Cross(uz_in_Xframe.Unit())).Unit();
42     TVector3 ux_in_Xframe = (uy_in_Xframe.Unit().Cross(uz_in_Xframe.Unit())).Unit();
43     TRotation rotation;
44     rotation = rotation.RotateAxes( ux_in_Xframe,uy_in_Xframe,uz_in_Xframe ).Inverse();
45    
46     // coords for Z2. rotate CM around y by pi
47     TVector3 ux_in_Xframe_z2(ux_in_Xframe);
48     TVector3 uy_in_Xframe_z2(uy_in_Xframe);
49     TVector3 uz_in_Xframe_z2(uz_in_Xframe);
50     TRotation aroundy;
51     aroundy.Rotate(TMath::Pi(),uy_in_Xframe_z2);
52     ux_in_Xframe_z2.Transform(aroundy);
53     uz_in_Xframe_z2.Transform(aroundy);
54     TRotation rotation2;
55     rotation2 = rotation2.RotateAxes( ux_in_Xframe_z2,uy_in_Xframe_z2,uz_in_Xframe_z2 ).Inverse();
56    
57     //
58     // for going to the Z frames from the CM frame
59     //
60     TLorentzVector vecz1_in_Xframe_newcoords(vecz1_in_Xframe);
61     vecz1_in_Xframe_newcoords.Transform(rotation);
62     TVector3 Z1frame_from_Xframe_newcoords = vecz1_in_Xframe_newcoords.BoostVector();
63     TLorentzVector vecz2_in_Xframe_newcoords(vecz2_in_Xframe);
64     vecz2_in_Xframe_newcoords.Transform(rotation2);
65     TVector3 Z2frame_from_Xframe_newcoords = vecz2_in_Xframe_newcoords.BoostVector();
66    
67    
68     //
69     // theta(l1m), phi(l1m) in Z1 frame
70     // --------------------------------------------------------------------------------------------------
71     TLorentzVector vecl1m_in_Z1frame(l.vecl1m);
72    
73     // redefine coords
74     vecl1m_in_Z1frame.Boost(-1*Xframe);
75     vecl1m_in_Z1frame.Transform(rotation);
76    
77     // then boost to Z1
78     vecl1m_in_Z1frame.Boost(-1*Z1frame_from_Xframe_newcoords);
79    
80     // now get angles
81     a.costheta1 = vecl1m_in_Z1frame.CosTheta();
82     a.phi1 = vecl1m_in_Z1frame.Phi();
83    
84    
85     //
86     // theta(l2m), phi(l2m) in Z2 frame
87     // --------------------------------------------------------------------------------------------------
88     TLorentzVector vecl2m_in_Z2frame(l.vecl2m);
89    
90     // redefine coords
91     vecl2m_in_Z2frame.Boost(-1*Xframe);
92     vecl2m_in_Z2frame.Transform(rotation2);
93    
94     // then boost to Z
95     vecl2m_in_Z2frame.Boost(-1*Z2frame_from_Xframe_newcoords);
96    
97     // now get angles
98     a.costheta2 = vecl2m_in_Z2frame.CosTheta();
99     a.phi2 = vecl2m_in_Z2frame.Phi();
100    
101     a.Phi = TVector2::Phi_0_2pi(TMath::Pi()
102     -TVector2::Phi_0_2pi(a.phi1)
103     -TVector2::Phi_0_2pi(a.phi2) );
104    
105     //
106     // Theta(Z1,pp) in X frame
107     // --------------------------------------------------------------------------------------------------
108     // but store it under Phi1 ...
109    
110     // redefine coords
111     veckq_in_Xframe.Transform(rotation);
112    
113     // already boosted ....
114     a.Phi1 = veckq_in_Xframe.Theta();
115    
116    
117     //
118     // why not ... let's add some masses
119     // --------------------------------------------------------------------------------------------------
120 khahn 1.2 // a.mz1 = (l.vecl1m+l.vecl1p).M();
121     // a.mz2 = (l.vecl2m+l.vecl2p).M();
122     // a.m4l = (l.vec4l).M();
123 khahn 1.1
124     };