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 #include "StHbtMaker/CorrFctn/BPLabFrame3DCorrFctn.h"
00033
00034 #include <cstdio>
00035
00036 #ifdef __ROOT__
00037 ClassImp(BPLabFrame3DCorrFctn)
00038 #endif
00039
00040
00041 BPLabFrame3DCorrFctn::BPLabFrame3DCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi){
00042
00043
00044 mQinvNormLo = 0.15;
00045 mQinvNormHi = 0.18;
00046 mNumRealsNorm = 0;
00047 mNumMixedNorm = 0;
00048 mCorrection = 0;
00049
00050
00051 char TitNum[100] = "Num";
00052 strcat(TitNum,title);
00053 mNumerator = new StHbt3DHisto(TitNum,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00054
00055 char TitDen[100] = "Den";
00056 strcat(TitDen,title);
00057 mDenominator = new StHbt3DHisto(TitDen,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00058
00059 char TitRat[100] = "Rat";
00060 strcat(TitRat,title);
00061 mRatio = new StHbt3DHisto(TitRat,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00062
00063 char TitQinv[100] = "Qinv";
00064 strcat(TitQinv,title);
00065 mQinvHisto = new StHbt3DHisto(TitQinv,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00066
00067
00068 mNumerator->Sumw2();
00069 mDenominator->Sumw2();
00070 mRatio->Sumw2();
00071
00072 }
00073
00074
00075 BPLabFrame3DCorrFctn::~BPLabFrame3DCorrFctn(){
00076 delete mNumerator;
00077 delete mDenominator;
00078 delete mRatio;
00079 delete mQinvHisto;
00080 }
00081
00082 void BPLabFrame3DCorrFctn::Finish(){
00083
00084 double NumFact,DenFact;
00085 if ((mNumRealsNorm !=0) && (mNumMixedNorm !=0)){
00086 NumFact = double(mNumRealsNorm);
00087 DenFact = double(mNumMixedNorm);
00088 }
00089
00090
00091
00092 else{
00093 cout << "Warning! - no normalization constants defined - I do the best I can..." << endl;
00094 int nbins = mNumerator->GetNbinsX();
00095 int half_way = nbins/2;
00096 NumFact = mNumerator->Integral(half_way,nbins,half_way,nbins,half_way,nbins);
00097 DenFact = mDenominator->Integral(half_way,nbins,half_way,nbins,half_way,nbins);
00098 }
00099
00100 mRatio->Divide(mNumerator,mDenominator,DenFact,NumFact);
00101 mQinvHisto->Divide(mDenominator);
00102 }
00103
00104
00105 StHbtString BPLabFrame3DCorrFctn::Report(){
00106 string stemp = "Labframe Bertsch-Pratt 3D Correlation Function Report:\n";
00107 char ctemp[100];
00108 sprintf(ctemp,"Number of entries in numerator:\t%E\n",mNumerator->GetEntries());
00109 stemp += ctemp;
00110 sprintf(ctemp,"Number of entries in denominator:\t%E\n",mDenominator->GetEntries());
00111 stemp += ctemp;
00112 sprintf(ctemp,"Number of entries in ratio:\t%E\n",mRatio->GetEntries());
00113 stemp += ctemp;
00114 sprintf(ctemp,"Normalization region in Qinv was:\t%E\t%E\n",mQinvNormLo,mQinvNormHi);
00115 stemp += ctemp;
00116 sprintf(ctemp,"Number of pairs in Normalization region was:\n");
00117 stemp += ctemp;
00118 sprintf(ctemp,"In numerator:\t%lu\t In denominator:\t%lu\n",mNumRealsNorm,mNumMixedNorm);
00119 stemp += ctemp;
00120 if (mCorrection)
00121 {
00122 float radius = mCorrection->GetRadius();
00123 sprintf(ctemp,"Coulomb correction used radius of\t%E\n",radius);
00124 }
00125 else
00126 {
00127 sprintf(ctemp,"No Coulomb Correction applied to this CorrFctn\n");
00128 }
00129 stemp += ctemp;
00130
00131 StHbtString returnThis = stemp;
00132 return returnThis;
00133 }
00134
00135 void BPLabFrame3DCorrFctn::AddRealPair(const StHbtPair* pair){
00136 double Qinv = fabs(pair->qInv());
00137 if ((Qinv < mQinvNormHi) && (Qinv > mQinvNormLo)) mNumRealsNorm++;
00138 double qOut = fabs(pair->qOutBf());
00139 double qSide = fabs(pair->qSideBf());
00140 double qLong = fabs(pair->qLongBf());
00141
00142 mNumerator->Fill(qOut,qSide,qLong);
00143 }
00144
00145 void BPLabFrame3DCorrFctn::AddMixedPair(const StHbtPair* pair){
00146 double weight=1.0;
00147 if (mCorrection)
00148 {
00149 weight = mCorrection->CoulombCorrect(pair);
00150 }
00151 double Qinv = fabs(pair->qInv());
00152 if ((Qinv < mQinvNormHi) && (Qinv > mQinvNormLo)) mNumMixedNorm++;
00153 double qOut = fabs(pair->qOutBf());
00154 double qSide = fabs(pair->qSideBf());
00155 double qLong = fabs(pair->qLongBf());
00156
00157 mDenominator->Fill(qOut,qSide,qLong,weight);
00158 mQinvHisto->Fill(qOut,qSide,qLong,Qinv);
00159 }
00160
00161