Add Reaction Plane aware analysis
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoKTPairCut.cxx
1 /////////////////////////////////////////////////////////////////////////////
2 //                                                                         //
3 // AliFemtoKTPairCut - a pair cut which selects pairs based on their       //
4 // transverse momentum kT                                                  //
5 //                                                                         //
6 /////////////////////////////////////////////////////////////////////////////
7 /***************************************************************************
8  *
9  * $Id: AliFemtoKTPairCut.cxx,v 1.1.2.2 2007/11/09 11:20:35 akisiel Exp $
10  *
11  * Author: Adam Kisiel, Ohio State, kisiel@mps.ohio-state.edu
12  ***************************************************************************
13  *
14  * Description: part of STAR HBT Framework: AliFemtoMaker package
15  *   a cut to remove "shared" and "split" pairs
16  *
17  ***************************************************************************
18  *
19  *
20  **************************************************************************/
21
22 #include "AliFemtoKTPairCut.h"
23 #include <string>
24 #include <cstdio>
25 #include <TMath.h>
26
27 #ifdef __ROOT__
28 ClassImp(AliFemtoKTPairCut)
29 #endif
30
31 //__________________
32 AliFemtoKTPairCut::AliFemtoKTPairCut():
33   AliFemtoPairCut(),
34   fKTMin(0),
35   fKTMax(1.0e6),
36   fPhiMin(0),
37   fPhiMax(360.0)
38 {
39   fKTMin = 0;
40    fKTMax = 1.0e6;
41 }
42 //__________________
43 AliFemtoKTPairCut::AliFemtoKTPairCut(double lo, double hi) :
44   AliFemtoPairCut(),
45   fKTMin(lo),
46   fKTMax(hi),
47   fPhiMin(0),
48   fPhiMax(360)
49 {
50 }
51 //__________________
52 AliFemtoKTPairCut::AliFemtoKTPairCut(const AliFemtoKTPairCut& c) : 
53   AliFemtoPairCut(c),
54   fKTMin(0),
55   fKTMax(1.0e6),
56   fPhiMin(0),
57   fPhiMax(360)
58
59   fKTMin = c.fKTMin;
60   fKTMax = c.fKTMax;
61   fPhiMin = c.fPhiMin;
62   fPhiMax = c.fPhiMax;
63 }
64
65 //__________________
66 AliFemtoKTPairCut::~AliFemtoKTPairCut(){
67   /* no-op */
68 }
69 //__________________
70 bool AliFemtoKTPairCut::Pass(const AliFemtoPair* pair){
71   bool temp = true;
72   
73   if (pair->KT() < fKTMin)
74     temp = false;
75
76   if (pair->KT() > fKTMax)
77     temp = false;
78
79   return temp;
80 }
81 //__________________
82 AliFemtoString AliFemtoKTPairCut::Report(){
83   // Prepare a report from the execution
84   string stemp = "AliFemtoKT Pair Cut \n";  char ctemp[100];
85   sprintf(ctemp,"Accept pair with kT in range %f , %f",fKTMin,fKTMax);
86   sprintf(ctemp,"Accept pair with angle in range %f , %f",fPhiMin,fPhiMax);
87   stemp += ctemp;
88   AliFemtoString returnThis = stemp;
89   return returnThis;}
90 //__________________
91
92 TList *AliFemtoKTPairCut::ListSettings()
93 {
94   // return a list of settings in a writable form
95   TList *tListSetttings =  new TList();
96   char buf[200];
97   snprintf(buf, 200, "AliFemtoKTPairCut.ktmax=%f", fKTMax);
98   tListSetttings->AddLast(new TObjString(buf));
99   snprintf(buf, 200, "AliFemtoKTPairCut.ktmin=%f", fKTMin);
100   tListSetttings->AddLast(new TObjString(buf));
101   snprintf(buf, 200, "AliFemtoKTPairCut.phimax=%f", fPhiMax);
102   tListSetttings->AddLast(new TObjString(buf));
103   snprintf(buf, 200, "AliFemtoKTPairCut.phimin=%f", fPhiMin);
104   tListSetttings->AddLast(new TObjString(buf));
105
106   return tListSetttings;
107 }
108
109 void AliFemtoKTPairCut::SetKTRange(double ktmin, double ktmax)
110 {
111   fKTMin = ktmin;
112   fKTMax = ktmax;
113 }
114
115 void AliFemtoKTPairCut::SetPhiRange(double phimin, double phimax)
116 {
117   fPhiMin = phimin;
118   fPhiMax = phimax;
119 }
120
121 bool AliFemtoKTPairCut::Pass(const AliFemtoPair* pair, double aRPAngle)
122 {
123   if (!(Pass(pair))) return false;
124
125   //  cout << "Got pair angle RP " << pair->EmissionAngle() << "   " << aRPAngle << endl;
126
127   bool temp = true;
128   double rpangle = pair->EmissionAngle();
129   if (rpangle > 180.0) rpangle -= 180.0;
130   rpangle -= aRPAngle*180/TMath::Pi();
131   if (rpangle > 180.0) rpangle -= 180.0;
132   if (rpangle < 0.0) rpangle += 180.0;
133
134   //  cout << "Got difference " << rpangle << endl;
135
136   if (fPhiMin < 0) {
137     if ((rpangle > fPhiMax) && (rpangle < 180.0+fPhiMin)) 
138       temp = false;
139   }
140   else {
141     if ((rpangle < fPhiMin) || (rpangle > fPhiMax))
142       temp = false;
143   }
144       
145   //  if (temp) cout << "Accepted !" << endl;
146
147   return temp;
148 }