00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include "StHbtMaker/CorrFctn/NonIdPurityCorrFctn.h"
00044 #include <cstdio>
00045
00046 #ifdef __ROOT__
00047 ClassImp(NonIdPurityCorrFctn)
00048 #endif
00049
00050
00051 NonIdPurityCorrFctn::NonIdPurityCorrFctn(char* title, const int& nbins, const float& QinvLo, const float& QinvHi, int p1Type, int p2Type){
00052
00053 char TitNumP[100] = "NumP";
00054 strcat(TitNumP,title);
00055 mNumP = new StHbt1DHisto(TitNumP,title,nbins,QinvLo,QinvHi);
00056
00057 char TitDenP[100] = "DenP";
00058 strcat(TitDenP,title);
00059 mDenP = new StHbt1DHisto(TitDenP,title,nbins,QinvLo,QinvHi);
00060
00061 char TitRatP[100] = "RatP";
00062 strcat(TitRatP,title);
00063 mRatP = new StHbt1DHisto(TitRatP,title,nbins,QinvLo,QinvHi);
00064
00065 char TitNumN[100] = "NumN";
00066 strcat(TitNumN,title);
00067 mNumN = new StHbt1DHisto(TitNumN,title,nbins,QinvLo,QinvHi);
00068
00069 char TitDenN[100] = "DenN";
00070 strcat(TitDenN,title);
00071 mDenN = new StHbt1DHisto(TitDenN,title,nbins,QinvLo,QinvHi);
00072
00073 char TitRatN[100] = "RatN";
00074 strcat(TitRatN,title);
00075 mRatN = new StHbt1DHisto(TitRatN,title,nbins,QinvLo,QinvHi);
00076
00077 char TitRat[100] = "Rat";
00078 strcat(TitRat,title);
00079 mRat = new StHbt1DHisto(TitRat,title,nbins,QinvLo,QinvHi);
00080
00081 char TitRatNOverP[100] = "RatNOverP";
00082 strcat(TitRatNOverP,title);
00083 mRatNOverP = new StHbt1DHisto(TitRatNOverP,title,nbins,QinvLo,QinvHi);
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 mp1Type = p1Type;
00124 mp2Type = p2Type;
00125 char TitPairPurity[100];
00126 strcpy(TitPairPurity,"PairPurityOut");
00127 strcat(TitPairPurity,title);
00128 mPairPurityOut = new TProfile(TitPairPurity,title,2*nbins,-QinvHi,QinvHi);
00129 strcpy(TitPairPurity,"PairPuritySide");
00130 strcat(TitPairPurity,title);
00131 mPairPuritySide = new TProfile(TitPairPurity,title,2*nbins,-QinvHi,QinvHi);
00132 strcpy(TitPairPurity,"PairPurityLong");
00133 strcat(TitPairPurity,title);
00134 mPairPurityLong = new TProfile(TitPairPurity,title,2*nbins,-QinvHi,QinvHi);
00135
00136
00137 mNumP->Sumw2();
00138 mDenP->Sumw2();
00139 mRatP->Sumw2();
00140 mNumN->Sumw2();
00141 mDenN->Sumw2();
00142 mRatN->Sumw2();
00143 mRat->Sumw2();
00144 mRatNOverP->Sumw2();
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 }
00167
00168
00169 NonIdPurityCorrFctn::~NonIdPurityCorrFctn(){
00170 delete mNumP;
00171 delete mDenP;
00172 delete mRatP;
00173 delete mNumN;
00174 delete mDenN;
00175 delete mRatN;
00176 delete mRat;
00177 delete mRatNOverP;
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 delete mPairPurityOut;
00197 delete mPairPuritySide;
00198 delete mPairPurityLong;
00199
00200 }
00201
00202 void NonIdPurityCorrFctn::Finish(){
00203 double tScale;
00204 int tLastNormBin = mNumP->GetNbinsX();
00205 int tFirstNormBin = tLastNormBin/2+1;
00206
00207 mRatP->Divide(mNumP,mDenP,1.0,1.0);
00208 tScale = mRatP->Integral(tFirstNormBin,tLastNormBin);
00209 tScale/= (tLastNormBin-tFirstNormBin+1);
00210 mRatP->Scale(1./tScale);
00211 mRatN->Divide(mNumN,mDenN,1.0,1.0);
00212 tScale = mRatN->Integral(tFirstNormBin,tLastNormBin);
00213 tScale/= (tLastNormBin-tFirstNormBin+1);
00214 mRatN->Scale(1./tScale);
00215 mRatNOverP->Divide(mRatN,mRatP,1.0,1.0);
00216
00217
00218
00219
00220
00221
00222 TH1D tHNum(*mNumP);
00223 tHNum.SetName("tHNum");
00224 tHNum.Add(mNumN);
00225 TH1D tHDen(*mDenP);
00226 tHDen.SetName("tHDen");
00227 tHDen.Add(mDenN);
00228 mRat->Divide(&tHNum,&tHDen);
00229 tScale = mRat->Integral(tFirstNormBin,tLastNormBin);
00230 tScale/= (tLastNormBin-tFirstNormBin+1);
00231 mRat->Scale(1./tScale);
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 }
00248
00249 void NonIdPurityCorrFctn::Write(){
00250 mNumP->Write();
00251 mDenP->Write();
00252 mRatP->Write();
00253 mNumN->Write();
00254 mDenN->Write();
00255 mRatN->Write();
00256 mRat->Write();
00257 mRatNOverP->Write();
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275 mPairPurityOut->Write();
00276 mPairPuritySide->Write();
00277 mPairPurityLong->Write();
00278 }
00279
00280
00281 StHbtString NonIdPurityCorrFctn::Report(){
00282 string stemp = "Qinv Correlation Function Report:\n";
00283 char ctemp[100];
00284 sprintf(ctemp,"Number of entries in numerator:\t%E\n",mNumP->GetEntries());
00285 stemp += ctemp;
00286 sprintf(ctemp,"Number of entries in denominator:\t%E\n",mDenP->GetEntries());
00287 stemp += ctemp;
00288 sprintf(ctemp,"Number of entries in ratio:\t%E\n",mRatP->GetEntries());
00289 stemp += ctemp;
00290 StHbtString returnThis = stemp;
00291 return returnThis;
00292 }
00293
00294 void NonIdPurityCorrFctn::AddRealPair(const StHbtPair* pair){
00295 double tKStar = fabs(pair->KStar());
00296
00297 double tCVK = pair->CVK();
00298 double pPurity = 0.0;
00299 double tKOut = pair->dKOut();
00300 double tKSide = pair->dKSide();
00301 double tKLong = pair->dKLong();
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311 if(tCVK>0.){
00312 mNumP->Fill(tKStar);
00313 }
00314 else{
00315 mNumN->Fill(tKStar);
00316 }
00317
00318
00319
00320
00321
00322
00323
00324 switch (mp1Type)
00325 {
00326 case 1:
00327 pPurity = pair->track1()->GetPionPurity();
00328 break;
00329 case 2:
00330 pPurity = pair->track1()->GetKaonPurity();
00331 break;
00332 case 3:
00333 pPurity = pair->track1()->GetProtonPurity();
00334 break;
00335 case 4:
00336 pPurity = pair->track1()->Track()->PidProbElectron();
00337 break;
00338 }
00339
00340
00341
00342 switch (mp2Type)
00343 {
00344 case 1:
00345 pPurity *= pair->track2()->GetPionPurity();
00346 break;
00347 case 2:
00348 pPurity *= pair->track2()->GetKaonPurity();
00349 break;
00350 case 3:
00351 pPurity *= pair->track2()->GetProtonPurity();
00352 break;
00353 case 4:
00354 pPurity *= pair->track2()->Track()->PidProbElectron();
00355 break;
00356 }
00357
00358
00359 mPairPurityOut->Fill(((tKOut>0)*2-1) *tKStar, pPurity);
00360 mPairPuritySide->Fill(((tKSide>0)*2-1)*tKStar, pPurity);
00361 mPairPurityLong->Fill(((tKLong>0)*2-1)*tKStar, pPurity);
00362
00363 }
00364
00365 void NonIdPurityCorrFctn::AddMixedPair(const StHbtPair* pair){
00366 double tKStar = 2*fabs(pair->KStar());
00367
00368 double tCVK = pair->CVK();
00369
00370 if(tCVK>0.){
00371 mDenP->Fill(tKStar);
00372 }
00373 else{
00374 mDenN->Fill(tKStar);
00375 }
00376
00377
00378
00379
00380
00381
00382 }
00383
00384