00001
00002 #include "Cut.h"
00003
00004 #include "Stiostream.h"
00005 #include <string.h>
00006
00007 ClassImp(Cut)
00008
00009
00010
00011
00012
00013 Float_t Cut::mVertexZ[2] = {-200,200};
00014 Int_t Cut::mFlowCent[2] = {0,9};
00015 Float_t Cut::mZDCSum[2] = {0,1000};
00016
00017
00018 Float_t Cut::mEta[2] = {-1.,1.};
00019 Int_t Cut::mFitPts[2] = {0,50};
00020 Float_t Cut::mSDcaGl[2] = {-3,3};
00021 Float_t Cut::mDcaXYGl[2] = {-3,3};
00022 Float_t Cut::mCross[2] = {-20,20};
00023 Int_t Cut::mFirstPadrow[2] = {0,99};
00024 Bool_t Cut::mSameSector = false;
00025 Bool_t Cut::mCrossCM = true;
00026
00027 void
00028 Cut::ShowCuts()
00029 {
00030
00031 cout << "******************************************************" << endl;
00032 cout << "Cut::ShowCuts()" << endl;
00033 cout << "event cuts:" << endl;
00034
00035 cout << "\tflow cent : " << mFlowCent[0] << " -- " << mFlowCent[1] << endl;
00036 cout << "\tvertex z : " << mVertexZ[0] << " -- " << mVertexZ[1] << endl;
00037 cout << "\tZDCSum : " << mZDCSum[0] << " -- " << mZDCSum[1] << endl;
00038
00039 cout << "track cuts:" << endl
00040 << "\teta : " << mEta[0] << " -- " << mEta[1] << endl
00041 << "\tfit pts : " << mFitPts[0] << " -- " << mFitPts[1] << endl
00042 << "\tsdca : " << mSDcaGl[0] << " -- " << mSDcaGl[1] << endl
00043 << "\tdcaxy : " << mDcaXYGl[0] << " -- " << mDcaXYGl[1] << endl
00044 << "\tcross : " << mCross[0] << " -- " << mCross[1] << endl
00045 << "\tfirst row : " << mFirstPadrow[0] << " -- " << mFirstPadrow[1] << endl
00046 << "\tSameSector? : " << (Int_t)mSameSector << endl
00047 << "\tCrossCM? : " << (Int_t)mCrossCM << endl
00048 << endl;
00049 cout << "******************************************************" << endl;
00050
00051 }
00052
00053
00054 void
00055 Cut::DecodeCutList(const char *cutList)
00056 {
00057
00058 cout << "******************************************************" << endl;
00059 cout << "Cut::DecodeCutList("<< cutList << ")" << endl;
00060 cout << "Event Cuts:" << endl;
00061
00062 cout << "\tFlow centrality : " << mFlowCent[0] << " -- " << mFlowCent[1] << endl;
00063 cout << "\tZ vertex : " << mVertexZ[0] << " -- " << mVertexZ[1] << endl;
00064 cout << "\tZDCSum : " << mZDCSum[0] << " -- " << mZDCSum[1] << endl;
00065
00066 cout << "Track Cuts:" << endl
00067 << "\tEta : " << mEta[0] << " -- " << mEta[1] << endl
00068 << "\tFitpts : " << mFitPts[0] << " -- " << mFitPts[1] << endl
00069 << "\t3dDca : " << mSDcaGl[0] << " -- " << mSDcaGl[1] << endl
00070 << "\tDcaXY : " << mDcaXYGl[0] << " -- " << mDcaXYGl[1] << endl
00071 << "\tCrossing Angle : " << mCross[0] << " -- " << mCross[1] << endl
00072 << "\tFirst Row : " << mFirstPadrow[0] << " -- " << mFirstPadrow[1] << endl
00073 << "\tSameSector? : " << (Int_t)mSameSector << endl
00074 << "\tCrossCM? : " << (Int_t)mCrossCM
00075 << endl
00076 << endl;
00077 cout << "******************************************************" << endl;
00078
00079 }
00080
00081 const char* Cut::SetCuts(const char* cutList) {
00082
00083 char cut[7];
00084
00085 if (strlen(cutList) != 7) {
00086 cerr << "<W> Error, cutList has " << strlen(cutList) << " members" << endl;
00087 cerr << "<W> Expecting 7 cuts. Reverting to wide open cuts!" << endl << endl;
00088 cutList = "ZZZZZZZ";
00089 }
00090
00091 sscanf(cutList,"%c%c%c%c%c%c%c",&cut[0],&cut[1],
00092 &cut[2],&cut[3],&cut[4],&cut[5],&cut[6]);
00093
00094 cout << "Setting cuts:" << endl
00095 << "\tcentType = " << cut[0] << endl
00096 << "\tvertex = " << cut[1] << endl
00097 << "\teta = " << cut[2] << endl
00098 << "\tfitPts = " << cut[3] << endl
00099 << "\t2dDCA = " << cut[4] << endl
00100 << "\tSameSector ?= " << cut[5] << endl
00101 << "\tCrossCM ?= " << cut[6] << endl << endl;
00102
00103 SetCentCut(cut[0]);
00104 SetZVertexCut(cut[1]);
00105 SetEtaCut(cut[2]);
00106 SetFitPtsCut(cut[3]);
00107 SetDCACut(cut[4]);
00108 SetSameSectorCut(cut[5]);
00109 SetCrossCMCut(cut[6]);
00110
00111 return cutList;
00112
00113 }
00114
00115 void Cut::SetCrossCMCut(const char crossCMCut) {
00116
00117 switch(crossCMCut) {
00118 case 'y':
00119 mCrossCM = true; break;
00120 case 'n':
00121 mCrossCM = false; break;
00122 default:
00123 cerr << "<W> Unknown CrossCM Cut Type: " << crossCMCut << endl;
00124 cerr << "<W> Reverting to NO cut: CrossCM = true" << endl << endl; break;
00125 }
00126 }
00127
00128 void Cut::SetSameSectorCut(const char sameSectorCut) {
00129
00130 switch(sameSectorCut) {
00131 case 'y':
00132 mSameSector = true; break;
00133 case 'n':
00134 mSameSector = false; break;
00135 default:
00136 cerr << "<W> Unknown SameSector Cut Type: " << sameSectorCut << endl;
00137 cerr << "<W> Reverting to NO cut: SameSector = false" << endl << endl; break;
00138 }
00139 }
00140
00141 void Cut::SetDCACut(const char dcaCut) {
00142
00143 switch(dcaCut) {
00144 case '1':
00145 mSDcaGl[0] = -1.; mSDcaGl[1] = 1.;
00146 mDcaXYGl[0] = -3.; mDcaXYGl[1] = 3.; break;
00147 case '2':
00148 mSDcaGl[0] = -0.9; mSDcaGl[1] = 0.9;
00149 mDcaXYGl[0] = -3.; mDcaXYGl[1] = 3.; break;
00150 case '3':
00151 mSDcaGl[0] = -1.5; mSDcaGl[1] = 1.5;
00152 mDcaXYGl[0] = -3.; mDcaXYGl[1] = 3.; break;
00153 case '4':
00154 mSDcaGl[0] = -3.; mSDcaGl[1] = 3.;
00155 mDcaXYGl[0] = -1.; mDcaXYGl[1] = 1.; break;
00156 case '5':
00157 mSDcaGl[0] = -3.; mSDcaGl[1] = 3.;
00158 mDcaXYGl[0] = -0.9; mDcaXYGl[1] = 0.9; break;
00159 case '6':
00160 mSDcaGl[0] = -3.; mSDcaGl[1] = 3.;
00161 mDcaXYGl[0] = -1.5; mDcaXYGl[1] = 1.5; break;
00162 default:
00163 cerr << "<W> Unknown DCA Cut Type: " << dcaCut << endl;
00164 cerr << "<W> Reverting to wide open cut: " << endl;
00165 cerr << "\t-3. < SDcaGl < 3. " << endl;
00166 cerr << "\t-3. < DcaXYGl < 3. " << endl << endl;
00167 break;
00168 }
00169 }
00170
00171 void Cut::SetFitPtsCut(const char fitPtsCut) {
00172
00173 switch(fitPtsCut) {
00174 case '1':
00175 mFitPts[0] = 20; mFitPts[1] = 50; break;
00176 case '2':
00177 mFitPts[0] = 15; mFitPts[1] = 50; break;
00178 case '3':
00179 mFitPts[0] = 10; mFitPts[1] = 50; break;
00180 case '4':
00181 mFitPts[0] = 25; mFitPts[1] = 50; break;
00182 case '5':
00183 mFitPts[0] = 30; mFitPts[1] = 50; break;
00184 default:
00185 cerr << "<W> Unknown FitPts Cut Type: " << fitPtsCut << endl;
00186 cerr << "<W> Reverting to wide open cut: 0 < FitPts < 50" << endl << endl;
00187 break;
00188 }
00189 }
00190
00191 void Cut::SetEtaCut(const char etaCut) {
00192
00193 switch(etaCut) {
00194 case '1':
00195 mEta[0] = -0.75; mEta[1] = 0.75; break;
00196 case '2':
00197 mEta[0] = -0.5; mEta[1] = -0.5; break;
00198 case '3':
00199 mEta[0] = -1.; mEta[1] = 1.; break;
00200 default:
00201 cerr << "<W> Unknown Eta Cut Type: " << etaCut << endl;
00202 cerr << "<W> Reverting to wide open cut: -1. < Eta < 1." << endl << endl;
00203 break;
00204 }
00205 }
00206
00207 void Cut::SetZVertexCut(const char zVtxCut) {
00208
00209 switch(zVtxCut) {
00210 case '1':
00211 mVertexZ[0] = -25.; mVertexZ[1] = 25.; break;
00212 case '2':
00213 mVertexZ[0] = 0.; mVertexZ[1] = 25.; break;
00214 case '3':
00215 mVertexZ[0] = -25.; mVertexZ[1] = 0.; break;
00216 case '4':
00217 mVertexZ[0] = -15.; mVertexZ[1] = 15.; break;
00218 case '5':
00219 mVertexZ[0] = -10.; mVertexZ[1] = 10.; break;
00220 case '6':
00221 mVertexZ[0] = -5.; mVertexZ[1] = 5.; break;
00222 default:
00223 cerr << "<W> Unknown Vertex Z type: " << zVtxCut << endl;
00224 cerr << "<W> Reverting to wide open cut: -200 < Zvtx < 200" << endl << endl;
00225 break;
00226 }
00227 }
00228
00229 void Cut::SetCentCut(const char centType) {
00230
00231 switch(centType){
00232 case 'C':
00233 mFlowCent[0]=-1; mFlowCent[1]=-1; break;
00234 case '9':
00235 mFlowCent[0]=-1; mFlowCent[1]=-1;
00236 mZDCSum[0]=0; mZDCSum[1]=66; break;
00237 case '8':
00238 mFlowCent[0]=-1; mFlowCent[1]=-1;
00239 mZDCSum[0]=66; mZDCSum[1]=1000; break;
00240 case 'M':
00241 mFlowCent[0]=0; mFlowCent[1]=9; break;
00242
00243 case '6':
00244 mFlowCent[0]=9; mFlowCent[1]=9; break;
00245 case '5':
00246 mFlowCent[0]=8; mFlowCent[1]=8; break;
00247 case '4':
00248 mFlowCent[0]=7; mFlowCent[1]=7; break;
00249 case '3':
00250 mFlowCent[0]=6; mFlowCent[1]=6; break;
00251 case '2':
00252 mFlowCent[0]=5; mFlowCent[1]=5; break;
00253 case '1':
00254 mFlowCent[0]=3; mFlowCent[1]=4; break;
00255 case '0':
00256 mFlowCent[0]=1; mFlowCent[1]=2; break;
00257 case 'a':
00258 mFlowCent[0]=1; mFlowCent[1]=4; break;
00259 default:
00260 cerr << "<W> Unknown centrality type: " << centType << endl;
00261 cerr << "<W> Reverting to MinBias. " << endl << endl;
00262 break;
00263 }
00264
00265 }