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 #include "StHbtMaker/CorrFctn/MinvCorrFctnArmenteros.h"
00037
00038 #include <cstdio>
00039
00040 #ifdef __ROOT__
00041 ClassImp(MinvCorrFctnArmenteros)
00042 #endif
00043
00044
00045
00046 pairD armenteros(const StHbtPair*);
00047 double ptArm(const StHbtPair*);
00048 double alphaArm(const StHbtPair*);
00049
00050
00051 MinvCorrFctnArmenteros::MinvCorrFctnArmenteros(char* title,
00052 const int& nbins1, const float& MinvLo1, const float& MinvHi1,
00053 const int& nbins2, const float& MinvLo2, const float& MinvHi2){
00054 char theTitle[100];
00055
00056 char TitNum[100] = "NumArmenteros1 ";
00057 sprintf(theTitle,"Num %s",title);
00058 mNumerator = new StHbt2DHisto(TitNum,theTitle,nbins1,MinvLo1,MinvHi1,nbins2,MinvLo2,MinvHi2);
00059
00060 char TitDen[100] = "DenArmenteros1";
00061 sprintf(theTitle,"Den %s",title);
00062 mDenominator = new StHbt2DHisto(TitDen,theTitle,nbins1,MinvLo1,MinvHi1,nbins2,MinvLo2,MinvHi2);
00063
00064 char TitDif[100] = "DifArmenteros1";
00065 sprintf(theTitle,"Dif %s",title);
00066 mDifference = new StHbt2DHisto(TitDif,theTitle,nbins1,MinvLo1,MinvHi1,nbins2,MinvLo2,MinvHi2);
00067
00068
00069 mNumerator->SetDirectory(0);
00070 mDenominator->SetDirectory(0);
00071 mDifference->SetDirectory(0);
00072
00073 mRealPairs = 0;
00074 mMixedPairs = 0;
00075 }
00076
00077
00078 MinvCorrFctnArmenteros::~MinvCorrFctnArmenteros(){
00079 delete mNumerator;
00080 delete mDenominator;
00081 delete mDifference;
00082 }
00083
00084 void MinvCorrFctnArmenteros::Finish(){
00085 int NEvents = 1;
00086 if ( dynamic_cast<StHbtAnalysis*>( HbtAnalysis() ) ) {
00087 if ( dynamic_cast<mikesEventCut*>( ((StHbtAnalysis*)HbtAnalysis())->EventCut() ) )
00088 NEvents = ((mikesEventCut*)((StHbtAnalysis*)HbtAnalysis())->EventCut())->NEventsPassed();
00089 }
00090
00091 mNumerator->Scale(1./NEvents);
00092 mDenominator->Scale(1./NEvents);
00093 mDifference->Scale(1./NEvents);
00094
00095
00096
00097
00098 mDifference->Add(mNumerator,mDenominator,1.0,-1.*mRealPairs/mMixedPairs);
00099
00100 }
00101
00102
00103 StHbtString MinvCorrFctnArmenteros::Report(){
00104 string stemp = "Minv Correlation Function Report:\n";
00105 char ctemp[100];
00106 sprintf(ctemp,"Number of entries in numerator:\t%E\n",mNumerator->GetEntries());
00107 stemp += ctemp;
00108 sprintf(ctemp,"Number of entries in denominator:\t%E\n",mDenominator->GetEntries());
00109 stemp += ctemp;
00110 sprintf(ctemp,"Number of entries in difference:\t%E\n",mDifference->GetEntries());
00111 stemp += ctemp;
00112 StHbtString returnThis = stemp;
00113 return returnThis;
00114 }
00115
00116 inline void MinvCorrFctnArmenteros::AddRealPair(const StHbtPair* pair){
00117 if ( pair->mInv()>mLo && pair->mInv()<mHi || mHi == mLo) {
00118 pairD ptArmAlpha = armenteros(pair);
00119 mNumerator->Fill( ptArmAlpha.first, ptArmAlpha.second, 1.);
00120 mRealPairs++;
00121 }
00122 }
00123
00124 inline void MinvCorrFctnArmenteros::AddMixedPair(const StHbtPair* pair){
00125 if ( pair->mInv()>mLo && pair->mInv()<mHi || mHi == mLo) {
00126 pairD ptArmAlpha = armenteros(pair);
00127 mDenominator->Fill( ptArmAlpha.first, ptArmAlpha.second, 1.);
00128 mMixedPairs++;
00129 }
00130 }
00131
00132 inline pairD armenteros(const StHbtPair* pair ) {
00133 StHbtThreeVector pp = pair->track1()->FourMomentum().vect();
00134 StHbtThreeVector pn = pair->track2()->FourMomentum().vect();
00135 float pdotn = pp.dot(pn);
00136 float ptotp2 = pp.mag2();
00137 float ptotn2 = pn.mag2();
00138
00139 float ptot = pair->fourMomentumSum().vect().mag();
00140
00141 float ppp = ( ptotp2 + pdotn )/ptot;
00142 float ppn = ( ptotn2 + pdotn )/ptot;
00143
00144 return pairD( (ppp - ppn)/(ppp + ppn), ::sqrt(fabs(ptotp2 - ppp*ppp)) );
00145 }