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 #include "StHbtMaker/CorrFctn/BPLCMSFrame3DCorrFctn.h"
00039
00040 #include <cstdio>
00041
00042 #ifdef __ROOT__
00043 ClassImp(BPLCMSFrame3DCorrFctn)
00044 #endif
00045
00046
00047 BPLCMSFrame3DCorrFctn::BPLCMSFrame3DCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi){
00048
00049
00050 mQinvNormLo = 0.15;
00051 mQinvNormHi = 0.18;
00052 mNumRealsNorm = 0;
00053 mNumMixedNorm = 0;
00054 mCorrection = 0;
00055
00056 mPairCut = 0;
00057
00058 mSmearPair = 0;
00059
00060
00061 char TitNum[100] = "Num";
00062 strcat(TitNum,title);
00063 mNumerator = new StHbt3DHisto(TitNum,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00064
00065 char TitDen[100] = "Den";
00066 strcat(TitDen,title);
00067 mDenominator = new StHbt3DHisto(TitDen,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00068
00069 char TitDenUncoul[100] = "DenNoCoul";
00070 strcat(TitDenUncoul,title);
00071 mUncorrectedDenominator = new StHbt3DHisto(TitDenUncoul,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00072
00073 char TitRat[100] = "Rat";
00074 strcat(TitRat,title);
00075 mRatio = new StHbt3DHisto(TitRat,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00076
00077 char TitQinv[100] = "Qinv";
00078 strcat(TitQinv,title);
00079 mQinvHisto = new StHbt3DHisto(TitQinv,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00080
00081
00082 mNumerator->Sumw2();
00083 mDenominator->Sumw2();
00084 mUncorrectedDenominator->Sumw2();
00085 mRatio->Sumw2();
00086
00087
00088
00089
00090 char TitNumID[100] = "IDNum";
00091 strcat(TitNumID,title);
00092 mIDNumHisto = new StHbt3DHisto(TitNumID,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00093 char TitDenID[100] = "IDDen";
00094 strcat(TitDenID,title);
00095 mIDDenHisto = new StHbt3DHisto(TitDenID,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00096 char TitRatID[100] = "IDRat";
00097 strcat(TitRatID,title);
00098 mIDRatHisto = new StHbt3DHisto(TitRatID,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00099
00100 mIDNumHisto->Sumw2();
00101 mIDDenHisto->Sumw2();
00102 mIDRatHisto->Sumw2();
00103
00104
00105
00106 char TitNumSM[100] = "SMNum";
00107 strcat(TitNumSM,title);
00108 mSMNumHisto = new StHbt3DHisto(TitNumSM,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00109 char TitDenSM[100] = "SMDen";
00110 strcat(TitDenSM,title);
00111 mSMDenHisto = new StHbt3DHisto(TitDenSM,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00112 char TitRatSM[100] = "SMRat";
00113 strcat(TitRatSM,title);
00114 mSMRatHisto = new StHbt3DHisto(TitRatSM,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00115
00116 mSMNumHisto->Sumw2();
00117 mSMDenHisto->Sumw2();
00118 mSMRatHisto->Sumw2();
00119
00120
00121 char TitCorrection[100] = "CorrectionFactor";
00122 strcat(TitCorrection,title);
00123 mCorrectionHisto = new StHbt3DHisto(TitCorrection,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00124 mCorrectionHisto->Sumw2();
00125
00126 char TitCorrCF[100] = "CorrectedCF";
00127 strcat(TitCorrCF,title);
00128 mCorrCFHisto = new StHbt3DHisto(TitCorrCF,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
00129 mCorrCFHisto->Sumw2();
00130
00131
00132 mLambda = 0.6;
00133 mRout2 = 6.0*6.0;
00134 mRside2 = 6.0*6.0;
00135 mRlong2 = 7.0*7.0;
00136
00137 }
00138
00139
00140 BPLCMSFrame3DCorrFctn::~BPLCMSFrame3DCorrFctn(){
00141 delete mNumerator;
00142 delete mDenominator;
00143 delete mRatio;
00144 delete mQinvHisto;
00145 delete mIDNumHisto;
00146 delete mIDDenHisto;
00147 delete mIDRatHisto;
00148 delete mSMNumHisto;
00149 delete mSMDenHisto;
00150 delete mSMRatHisto;
00151 delete mCorrectionHisto;
00152 delete mCorrCFHisto;
00153 }
00154
00155
00156 void BPLCMSFrame3DCorrFctn::WriteOutHistos(){
00157
00158 mNumerator->Write();
00159 mDenominator->Write();
00160 mUncorrectedDenominator->Write();
00161 mRatio->Write();
00162 mQinvHisto->Write();
00163
00164 if (mSmearPair){
00165 mIDNumHisto->Write();
00166 mIDDenHisto->Write();
00167 mIDRatHisto->Write();
00168
00169 mSMNumHisto->Write();
00170 mSMDenHisto->Write();
00171 mSMRatHisto->Write();
00172
00173 mCorrectionHisto->Write();
00174 mCorrCFHisto->Write();
00175 }
00176 }
00177
00178
00179 void BPLCMSFrame3DCorrFctn::Finish(){
00180
00181 double NumFact,DenFact;
00182 if ((mNumRealsNorm !=0) && (mNumMixedNorm !=0)){
00183 NumFact = double(mNumRealsNorm);
00184 DenFact = double(mNumMixedNorm);
00185 }
00186
00187
00188
00189 else{
00190 cout << "Warning! - no normalization constants defined - I do the best I can..." << endl;
00191 int nbins = mNumerator->GetNbinsX();
00192 int half_way = nbins/2;
00193 NumFact = mNumerator->Integral(half_way,nbins,half_way,nbins,half_way,nbins);
00194 DenFact = mDenominator->Integral(half_way,nbins,half_way,nbins,half_way,nbins);
00195 }
00196
00197 mRatio->Divide(mNumerator,mDenominator,DenFact,NumFact);
00198 mQinvHisto->Divide(mUncorrectedDenominator);
00199
00200
00201 if (mSmearPair){
00202 mIDRatHisto->Divide(mIDNumHisto,mIDDenHisto);
00203 mSMRatHisto->Divide(mSMNumHisto,mSMDenHisto);
00204 mCorrectionHisto->Divide(mIDRatHisto,mSMRatHisto);
00205 mCorrCFHisto->Multiply(mRatio,mCorrectionHisto);
00206 }
00207
00208 }
00209
00210
00211 StHbtString BPLCMSFrame3DCorrFctn::Report(){
00212 string stemp = "LCMS Frame Bertsch-Pratt 3D Correlation Function Report:\n";
00213 char ctemp[100];
00214 sprintf(ctemp,"Number of entries in numerator:\t%E\n",mNumerator->GetEntries());
00215 stemp += ctemp;
00216 sprintf(ctemp,"Number of entries in denominator:\t%E\n",mDenominator->GetEntries());
00217 stemp += ctemp;
00218 sprintf(ctemp,"Number of entries in ratio:\t%E\n",mRatio->GetEntries());
00219 stemp += ctemp;
00220 sprintf(ctemp,"Normalization region in Qinv was:\t%E\t%E\n",mQinvNormLo,mQinvNormHi);
00221 stemp += ctemp;
00222 sprintf(ctemp,"Number of pairs in Normalization region was:\n");
00223 stemp += ctemp;
00224 sprintf(ctemp,"In numerator:\t%lu\t In denominator:\t%lu\n",mNumRealsNorm,mNumMixedNorm);
00225 stemp += ctemp;
00226 if (mCorrection)
00227 {
00228 float radius = mCorrection->GetRadius();
00229 sprintf(ctemp,"Coulomb correction used radius of\t%E\n",radius);
00230 }
00231 else
00232 {
00233 sprintf(ctemp,"No Coulomb Correction applied to this CorrFctn\n");
00234 }
00235 stemp += ctemp;
00236
00237 if (mPairCut){
00238 sprintf(ctemp,"Here is the PairCut specific to this CorrFctn\n");
00239 stemp += ctemp;
00240 stemp += mPairCut->Report();
00241 }
00242 else{
00243 sprintf(ctemp,"No PairCut specific to this CorrFctn\n");
00244 stemp += ctemp;
00245 }
00246
00247
00248 StHbtString returnThis = stemp;
00249 return returnThis;
00250 }
00251
00252 void BPLCMSFrame3DCorrFctn::AddRealPair(const StHbtPair* pair){
00253
00254 if (mPairCut){
00255 if (!(mPairCut->Pass(pair))) return;
00256 }
00257
00258 double Qinv = fabs(pair->qInv());
00259 if ((Qinv < mQinvNormHi) && (Qinv > mQinvNormLo)) mNumRealsNorm++;
00260 double qOut = fabs(pair->qOutCMS());
00261 double qSide = fabs(pair->qSideCMS());
00262 double qLong = fabs(pair->qLongCMS());
00263
00264 mNumerator->Fill(qOut,qSide,qLong);
00265 }
00266
00267 void BPLCMSFrame3DCorrFctn::AddMixedPair(const StHbtPair* pair){
00268
00269 if (mPairCut){
00270 if (!(mPairCut->Pass(pair))) return;
00271 }
00272
00273 double CoulombWeight = (mCorrection ? mCorrection->CoulombCorrect(pair) : 1.0);
00274
00275 double Qinv = fabs(pair->qInv());
00276 if ((Qinv < mQinvNormHi) && (Qinv > mQinvNormLo)) mNumMixedNorm++;
00277 double qOut = fabs(pair->qOutCMS());
00278 double qSide = fabs(pair->qSideCMS());
00279 double qLong = fabs(pair->qLongCMS());
00280
00281 mDenominator->Fill(qOut,qSide,qLong,CoulombWeight);
00282 mUncorrectedDenominator->Fill(qOut,qSide,qLong,1.0);
00283 mQinvHisto->Fill(qOut,qSide,qLong,Qinv);
00284
00285
00286 if (mSmearPair){
00287 double CorrWeight = 1.0 +
00288 mLambda*exp((-qOut*qOut*mRout2 -qSide*qSide*mRside2 -qLong*qLong*mRlong2)/0.038936366329);
00289 CorrWeight *= CoulombWeight;
00290
00291 mIDNumHisto->Fill(qOut,qSide,qLong,CorrWeight);
00292 mIDDenHisto->Fill(qOut,qSide,qLong,CoulombWeight);
00293
00294 mSmearPair->SetUnsmearedPair(pair);
00295 double qOut_prime = fabs(mSmearPair->SmearedPair().qOutCMS());
00296 double qSide_prime = fabs(mSmearPair->SmearedPair().qSideCMS());
00297 double qLong_prime = fabs(mSmearPair->SmearedPair().qLongCMS());
00298
00299 mSMNumHisto->Fill(qOut_prime,qSide_prime,qLong_prime,CorrWeight);
00300
00301 double SmearedCoulombWeight = ( mCorrection ?
00302 mCorrection->CoulombCorrect(&(mSmearPair->SmearedPair())) :
00303 1.0);
00304
00305 mSMDenHisto->Fill(qOut_prime,qSide_prime,qLong_prime,SmearedCoulombWeight);
00306 }
00307 }
00308