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
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 #include "StHbtMaker/CorrFctn/NonId3DCorrFctn.h"
00066 #include <cstdio>
00067
00068 #ifdef __ROOT__
00069 ClassImp(NonId3DCorrFctn)
00070 #endif
00071
00072
00073 NonId3DCorrFctn::NonId3DCorrFctn(char* title, const int& nbins, const float& QinvLo, const float& QinvHi){
00074 makeHistos(title, nbins, QinvLo, QinvHi);
00075 }
00076
00077
00078 void NonId3DCorrFctn::makeHistos(char* title, const int& nbins, const float& QinvLo, const float& QinvHi){
00079
00080 char TitNumOutP[100] = "NumOutP";
00081 strcat(TitNumOutP,title);
00082 mNumOutP = new StHbt1DHisto(TitNumOutP,title,nbins,QinvLo,QinvHi);
00083
00084 char TitDenOutP[100] = "DenOutP";
00085 strcat(TitDenOutP,title);
00086 mDenOutP = new StHbt1DHisto(TitDenOutP,title,nbins,QinvLo,QinvHi);
00087
00088 char TitRatOutP[100] = "RatOutP";
00089 strcat(TitRatOutP,title);
00090 mRatOutP = new StHbt1DHisto(TitRatOutP,title,nbins,QinvLo,QinvHi);
00091
00092 char TitNumOutN[100] = "NumOutN";
00093 strcat(TitNumOutN,title);
00094 mNumOutN = new StHbt1DHisto(TitNumOutN,title,nbins,QinvLo,QinvHi);
00095
00096 char TitDenOutN[100] = "DenOutN";
00097 strcat(TitDenOutN,title);
00098 mDenOutN = new StHbt1DHisto(TitDenOutN,title,nbins,QinvLo,QinvHi);
00099
00100 char TitRatOutN[100] = "RatOutN";
00101 strcat(TitRatOutN,title);
00102 mRatOutN = new StHbt1DHisto(TitRatOutN,title,nbins,QinvLo,QinvHi);
00103
00104 char TitRatOut[100] = "RatOut";
00105 strcat(TitRatOut,title);
00106 mRatOut = new StHbt1DHisto(TitRatOut,title,nbins,QinvLo,QinvHi);
00107
00108 char TitRatOutNOverP[100] = "RatOutNOverP";
00109 strcat(TitRatOutNOverP,title);
00110 mRatOutNOverP = new StHbt1DHisto(TitRatOutNOverP,title,nbins,QinvLo,QinvHi);
00111
00112
00113 char TitNumSideP[100] = "NumSideP";
00114 strcat(TitNumSideP,title);
00115 mNumSideP = new StHbt1DHisto(TitNumSideP,title,nbins,QinvLo,QinvHi);
00116
00117 char TitDenSideP[100] = "DenSideP";
00118 strcat(TitDenSideP,title);
00119 mDenSideP = new StHbt1DHisto(TitDenSideP,title,nbins,QinvLo,QinvHi);
00120
00121 char TitRatSideP[100] = "RatSideP";
00122 strcat(TitRatSideP,title);
00123 mRatSideP = new StHbt1DHisto(TitRatSideP,title,nbins,QinvLo,QinvHi);
00124
00125 char TitNumSideN[100] = "NumSideN";
00126 strcat(TitNumSideN,title);
00127 mNumSideN = new StHbt1DHisto(TitNumSideN,title,nbins,QinvLo,QinvHi);
00128
00129 char TitDenSideN[100] = "DenSideN";
00130 strcat(TitDenSideN,title);
00131 mDenSideN = new StHbt1DHisto(TitDenSideN,title,nbins,QinvLo,QinvHi);
00132
00133 char TitRatSideN[100] = "RatSideN";
00134 strcat(TitRatSideN,title);
00135 mRatSideN = new StHbt1DHisto(TitRatSideN,title,nbins,QinvLo,QinvHi);
00136
00137 char TitRatSide[100] = "RatSide";
00138 strcat(TitRatSide,title);
00139 mRatSide = new StHbt1DHisto(TitRatSide,title,nbins,QinvLo,QinvHi);
00140
00141 char TitRatSideNOverP[100] = "RatSideNOverP";
00142 strcat(TitRatSideNOverP,title);
00143 mRatSideNOverP = new StHbt1DHisto(TitRatSideNOverP,
00144 title,nbins,QinvLo,QinvHi);
00145
00146
00147 char TitNumLongP[100] = "NumLongP";
00148 strcat(TitNumLongP,title);
00149 mNumLongP = new StHbt1DHisto(TitNumLongP,title,nbins,QinvLo,QinvHi);
00150
00151 char TitDenLongP[100] = "DenLongP";
00152 strcat(TitDenLongP,title);
00153 mDenLongP = new StHbt1DHisto(TitDenLongP,title,nbins,QinvLo,QinvHi);
00154
00155 char TitRatLongP[100] = "RatLongP";
00156 strcat(TitRatLongP,title);
00157 mRatLongP = new StHbt1DHisto(TitRatLongP,title,nbins,QinvLo,QinvHi);
00158
00159 char TitNumLongN[100] = "NumLongN";
00160 strcat(TitNumLongN,title);
00161 mNumLongN = new StHbt1DHisto(TitNumLongN,title,nbins,QinvLo,QinvHi);
00162
00163 char TitDenLongN[100] = "DenLongN";
00164 strcat(TitDenLongN,title);
00165 mDenLongN = new StHbt1DHisto(TitDenLongN,title,nbins,QinvLo,QinvHi);
00166
00167 char TitRatLongN[100] = "RatLongN";
00168 strcat(TitRatLongN,title);
00169 mRatLongN = new StHbt1DHisto(TitRatLongN,title,nbins,QinvLo,QinvHi);
00170
00171 char TitRatLong[100] = "RatLong";
00172 strcat(TitRatLong,title);
00173 mRatLong = new StHbt1DHisto(TitRatLong,title,nbins,QinvLo,QinvHi);
00174
00175 char TitRatLongNOverP[100] = "RatLongNOverP";
00176 strcat(TitRatLongNOverP,title);
00177 mRatLongNOverP = new StHbt1DHisto(TitRatLongNOverP,title,nbins,QinvLo,QinvHi);
00178
00179
00180 mNumOutP->Sumw2();
00181 mDenOutP->Sumw2();
00182 mRatOutP->Sumw2();
00183 mNumOutN->Sumw2();
00184 mDenOutN->Sumw2();
00185 mRatOutN->Sumw2();
00186 mRatOut->Sumw2();
00187 mRatOutNOverP->Sumw2();
00188
00189 mNumSideP->Sumw2();
00190 mDenSideP->Sumw2();
00191 mRatSideP->Sumw2();
00192 mNumSideN->Sumw2();
00193 mDenSideN->Sumw2();
00194 mRatSideN->Sumw2();
00195 mRatSide->Sumw2();
00196 mRatSideNOverP->Sumw2();
00197
00198 mNumLongP->Sumw2();
00199 mDenLongP->Sumw2();
00200 mRatLongP->Sumw2();
00201 mNumLongN->Sumw2();
00202 mDenLongN->Sumw2();
00203 mRatLongN->Sumw2();
00204 mRatLong->Sumw2();
00205 mRatLongNOverP->Sumw2();
00206
00207 float kstarlim = 0.5;
00208 float klim = 0.6 * kstarlim;
00209
00210 char htitle[200];
00211 strcpy(htitle,"HOutKSame");
00212 mHOutKSame = new StHbt2DHisto(strcat(htitle,title),htitle,
00213 100,-klim,klim,nbins,QinvLo,kstarlim);
00214 strcpy(htitle,"HOutKDiff");
00215 mHOutKDiff = new StHbt2DHisto(strcat(htitle,title),htitle,
00216 100,-klim,klim,nbins,QinvLo,kstarlim);
00217 strcpy(htitle,"HSideKSame");
00218 mHSideKSame = new StHbt2DHisto(strcat(htitle,title),htitle,
00219 100,-klim,klim,nbins,QinvLo,kstarlim);
00220 strcpy(htitle,"HSideKDiff");
00221 mHSideKDiff = new StHbt2DHisto(strcat(htitle,title),htitle,
00222 100,-klim,klim,nbins,QinvLo,kstarlim);
00223 strcpy(htitle,"HLongKSame");
00224 mHLongKSame = new StHbt2DHisto(strcat(htitle,title),htitle,
00225 100,-klim,klim,nbins,QinvLo,kstarlim);
00226 strcpy(htitle,"HLongKDiff");
00227 mHLongKDiff = new StHbt2DHisto(strcat(htitle,title),htitle,
00228 100,-klim,klim,nbins,QinvLo,kstarlim);
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266 mKCompCut = -1000.0;
00267 mqSideSel = 0;
00268 }
00269
00270
00271 NonId3DCorrFctn::NonId3DCorrFctn(char* title, const int& nbins, const float& QinvLo,
00272 const float& QinvHi, const int aqSideSel){
00273 makeHistos(title, nbins, QinvLo, QinvHi);
00274 mqSideSel = aqSideSel;
00275 mKCompCut = -1000.0;
00276 }
00277
00278
00279 NonId3DCorrFctn::NonId3DCorrFctn(char* title, const int& nbins, const float& QinvLo,
00280 const float& QinvHi, const float KCompCut)
00281 {
00282 makeHistos(title, nbins, QinvLo, QinvHi);
00283 mKCompCut = KCompCut;
00284 mqSideSel = 0;
00285 }
00286
00287
00288
00289 NonId3DCorrFctn::~NonId3DCorrFctn(){
00290 delete mNumOutP;
00291 delete mDenOutP;
00292 delete mRatOutP;
00293 delete mNumOutN;
00294 delete mDenOutN;
00295 delete mRatOutN;
00296 delete mRatOut;
00297 delete mRatOutNOverP;
00298
00299 delete mNumSideP;
00300 delete mDenSideP;
00301 delete mRatSideP;
00302 delete mNumSideN;
00303 delete mDenSideN;
00304 delete mRatSideN;
00305 delete mRatSide;
00306 delete mRatSideNOverP;
00307
00308 delete mNumLongP;
00309 delete mDenLongP;
00310 delete mRatLongP;
00311 delete mNumLongN;
00312 delete mDenLongN;
00313 delete mRatLongN;
00314 delete mRatLong;
00315 delete mRatLongNOverP;
00316
00317 delete mHOutKSame;
00318 delete mHOutKDiff;
00319 delete mHSideKSame;
00320 delete mHSideKDiff;
00321 delete mHLongKSame;
00322 delete mHLongKDiff;
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341 }
00342
00343 void NonId3DCorrFctn::Finish(){
00344 double tScale;
00345 int tLastNormBin = mNumOutP->GetNbinsX();
00346 int tFirstNormBin = tLastNormBin/2+1;
00347
00348
00349
00350 mRatOutP->Divide(mNumOutP,mDenOutP,1.0,1.0);
00351 tScale = mRatOutP->Integral(tFirstNormBin,tLastNormBin);
00352 tScale/= (tLastNormBin-tFirstNormBin+1);
00353 mRatOutP->Scale(1./tScale);
00354 mRatOutN->Divide(mNumOutN,mDenOutN,1.0,1.0);
00355 tScale = mRatOutN->Integral(tFirstNormBin,tLastNormBin);
00356 tScale/= (tLastNormBin-tFirstNormBin+1);
00357 mRatOutN->Scale(1./tScale);
00358 mRatOutNOverP->Divide(mRatOutN,mRatOutP,1.0,1.0);
00359
00360 TH1D tHNumOut(*mNumOutP);
00361 tHNumOut.SetName("tHNumOut");
00362 tHNumOut.Add(mNumOutN);
00363 TH1D tHDenOut(*mDenOutP);
00364 tHDenOut.SetName("tHDenOut");
00365 tHDenOut.Add(mDenOutN);
00366 mRatOut->Divide(&tHNumOut,&tHDenOut);
00367 tScale = mRatOut->Integral(tFirstNormBin,tLastNormBin);
00368 tScale/= (tLastNormBin-tFirstNormBin+1);
00369 mRatOut->Scale(1./tScale);
00370
00371
00372
00373 mRatSideP->Divide(mNumSideP,mDenSideP,1.0,1.0);
00374 tScale = mRatSideP->Integral(tFirstNormBin,tLastNormBin);
00375 tScale/= (tLastNormBin-tFirstNormBin+1);
00376 mRatSideP->Scale(1./tScale);
00377 mRatSideN->Divide(mNumSideN,mDenSideN,1.0,1.0);
00378 tScale = mRatSideN->Integral(tFirstNormBin,tLastNormBin);
00379 tScale/= (tLastNormBin-tFirstNormBin+1);
00380 mRatSideN->Scale(1./tScale);
00381 mRatSideNOverP->Divide(mRatSideN,mRatSideP,1.0,1.0);
00382
00383 TH1D tHNumSide(*mNumSideP);
00384 tHNumSide.SetName("tHNumSide");
00385 tHNumSide.Add(mNumSideN);
00386 TH1D tHDenSide(*mDenSideP);
00387 tHDenSide.SetName("tHDenSide");
00388 tHDenSide.Add(mDenSideN);
00389 mRatSide->Divide(&tHNumSide,&tHDenSide);
00390 tScale = mRatSide->Integral(tFirstNormBin,tLastNormBin);
00391 tScale/= (tLastNormBin-tFirstNormBin+1);
00392 mRatSide->Scale(1./tScale);
00393
00394
00395
00396 mRatLongP->Divide(mNumLongP,mDenLongP,1.0,1.0);
00397 tScale = mRatLongP->Integral(tFirstNormBin,tLastNormBin);
00398 tScale/= (tLastNormBin-tFirstNormBin+1);
00399 mRatLongP->Scale(1./tScale);
00400 mRatLongN->Divide(mNumLongN,mDenLongN,1.0,1.0);
00401 tScale = mRatLongN->Integral(tFirstNormBin,tLastNormBin);
00402 tScale/= (tLastNormBin-tFirstNormBin+1);
00403 mRatLongN->Scale(1./tScale);
00404 mRatLongNOverP->Divide(mRatLongN,mRatLongP,1.0,1.0);
00405
00406 TH1D tHNumLong(*mNumLongP);
00407 tHNumLong.SetName("tHNumLong");
00408 tHNumLong.Add(mNumLongN);
00409 TH1D tHDenLong(*mDenLongP);
00410 tHDenLong.SetName("tHDenLong");
00411 tHDenLong.Add(mDenLongN);
00412 mRatLong->Divide(&tHNumLong,&tHDenLong);
00413 tScale = mRatLong->Integral(tFirstNormBin,tLastNormBin);
00414 tScale/= (tLastNormBin-tFirstNormBin+1);
00415 mRatLong->Scale(1./tScale);
00416 }
00417
00418 void NonId3DCorrFctn::Write(){
00419 mNumOutP->Write();
00420 mDenOutP->Write();
00421 mRatOutP->Write();
00422 mNumOutN->Write();
00423 mDenOutN->Write();
00424 mRatOutN->Write();
00425 mRatOut->Write();
00426 mRatOutNOverP->Write();
00427
00428 mNumSideP->Write();
00429 mDenSideP->Write();
00430 mRatSideP->Write();
00431 mNumSideN->Write();
00432 mDenSideN->Write();
00433 mRatSideN->Write();
00434 mRatSide->Write();
00435 mRatSideNOverP->Write();
00436
00437 mNumLongP->Write();
00438 mDenLongP->Write();
00439 mRatLongP->Write();
00440 mNumLongN->Write();
00441 mDenLongN->Write();
00442 mRatLongN->Write();
00443 mRatLong->Write();
00444 mRatLongNOverP->Write();
00445
00446 mHOutKSame->Write();
00447 mHOutKDiff->Write();
00448 mHSideKSame->Write();
00449 mHSideKDiff->Write();
00450 mHLongKSame->Write();
00451 mHLongKDiff->Write();
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470 }
00471
00472
00473 StHbtString NonId3DCorrFctn::Report(){
00474 string stemp = "Non-Identical 3D Correlation Function Report:\n";
00475 char ctemp[1000];
00476 sprintf(ctemp,"Number of entries in out numerator:\t%E\n",mHOutKSame->GetEntries());
00477 stemp += ctemp;
00478 sprintf(ctemp,"Number of entries in out denominator:\t%E\n",mHOutKDiff->GetEntries());
00479 stemp += ctemp;
00480 sprintf(ctemp,"Number of entries in out ratio:\t%E\n",mRatOut->GetEntries());
00481 stemp += ctemp;
00482 sprintf(ctemp,"Number of entries in side numerator:\t%E\n",mHSideKSame->GetEntries());
00483 stemp += ctemp;
00484 sprintf(ctemp,"Number of entries in side denominator:\t%E\n",mHSideKDiff->GetEntries());
00485 stemp += ctemp;
00486 sprintf(ctemp,"Number of entries in side ratio:\t%E\n",mRatSide->GetEntries());
00487 stemp += ctemp;
00488 sprintf(ctemp,"Number of entries in long numerator:\t%E\n",mHLongKSame->GetEntries());
00489 stemp += ctemp;
00490 sprintf(ctemp,"Number of entries in long denominator:\t%E\n",mHLongKDiff->GetEntries());
00491 stemp += ctemp;
00492 sprintf(ctemp,"Number of entries in long ratio:\t%E\n",mRatLong->GetEntries());
00493 stemp += ctemp;
00494 StHbtString returnThis = stemp;
00495 return returnThis;
00496 }
00497
00498 void NonId3DCorrFctn::AddRealPair(const StHbtPair* pair){
00499 double tKStar = fabs(pair->KStar());
00500 double tKOut = pair->dKOut();
00501 double tKSide = pair->dKSide();
00502 double tKLong = pair->dKLong();
00503
00504
00505 if (mKCompCut <= 0.0)
00506 {
00507 if ((!mqSideSel) || (mqSideSel * tKSide > 0)) {
00508 if(tKOut>0.){
00509 mNumOutP->Fill(tKStar);
00510
00511 }
00512 else{
00513 mNumOutN->Fill(tKStar);
00514
00515 }
00516 if(tKSide>0.){
00517 mNumSideP->Fill(tKStar);
00518
00519 }
00520 else{
00521 mNumSideN->Fill(tKStar);
00522
00523 }
00524 if(tKLong>0.){
00525 mNumLongP->Fill(tKStar);
00526 }
00527 else{
00528 mNumLongN->Fill(tKStar);
00529 }
00530 }
00531 }
00532 else
00533 {
00534 if ((fabs(tKLong) < mKCompCut) && (fabs(tKSide) < mKCompCut))
00535 {
00536 if(tKOut>0.){
00537 mNumOutP->Fill(tKStar);
00538
00539 }
00540 else{
00541 mNumOutN->Fill(tKStar);
00542
00543 }
00544 }
00545 if ((fabs(tKOut) < mKCompCut) && (fabs(tKLong) < mKCompCut))
00546 {
00547 if(tKSide>0.){
00548 mNumSideP->Fill(tKStar);
00549
00550 }
00551 else{
00552 mNumSideN->Fill(tKStar);
00553
00554 }
00555 }
00556 if ((fabs(tKOut) < mKCompCut) && (fabs(tKSide) < mKCompCut))
00557 {
00558 if(tKLong>0.){
00559 mNumLongP->Fill(tKStar);
00560 }
00561 else{
00562 mNumLongN->Fill(tKStar);
00563 }
00564 }
00565 }
00566 mHOutKSame->Fill(tKOut, tKStar, 1.);
00567 mHSideKSame->Fill(tKSide, tKStar, 1.);
00568 mHLongKSame->Fill(tKLong, tKStar, 1.);
00569
00570
00571
00572
00573
00574
00575 }
00576
00577 void NonId3DCorrFctn::AddMixedPair(const StHbtPair* pair){
00578 double tKStar = fabs(pair->KStar());
00579 double tKOut = pair->dKOut();
00580 double tKSide = pair->dKSide();
00581 double tKLong = pair->dKLong();
00582
00583
00584 if (mKCompCut <= 0.0)
00585 {
00586 if ((!mqSideSel) || (mqSideSel * tKSide > 0)) {
00587 if(tKOut>0.){
00588 mDenOutP->Fill(tKStar);
00589
00590 }
00591 else{
00592 mDenOutN->Fill(tKStar);
00593
00594 }
00595 if(tKSide>0.){
00596 mDenSideP->Fill(tKStar);
00597
00598 }
00599 else{
00600 mDenSideN->Fill(tKStar);
00601
00602 }
00603 if(tKLong>0.){
00604 mDenLongP->Fill(tKStar);
00605 }
00606 else{
00607 mDenLongN->Fill(tKStar);
00608 }
00609 }
00610 }
00611 else
00612 {
00613 if ((fabs(tKLong) < mKCompCut) && (fabs(tKSide) < mKCompCut))
00614 {
00615 if(tKOut>0.){
00616 mDenOutP->Fill(tKStar);
00617
00618 }
00619 else{
00620 mDenOutN->Fill(tKStar);
00621
00622 }
00623 }
00624 if ((fabs(tKOut) < mKCompCut) && (fabs(tKLong) < mKCompCut))
00625 {
00626 if(tKSide>0.){
00627 mDenSideP->Fill(tKStar);
00628
00629 }
00630 else{
00631 mDenSideN->Fill(tKStar);
00632
00633 }
00634 }
00635 if ((fabs(tKOut) < mKCompCut) && (fabs(tKSide) < mKCompCut))
00636 {
00637 if(tKLong>0.){
00638 mDenLongP->Fill(tKStar);
00639 }
00640 else{
00641 mDenLongN->Fill(tKStar);
00642 }
00643 }
00644 }
00645
00646 mHOutKDiff->Fill(tKOut, tKStar, 1.);
00647 mHSideKDiff->Fill(tKSide, tKStar, 1.);
00648 mHLongKDiff->Fill(tKLong, tKStar, 1.);
00649
00650
00651
00652
00653
00654 }
00655
00656