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 #include "StHbtMaker/Infrastructure/StHbtVertexMultAnalysis.h"
00034 #include "StHbtMaker/Infrastructure/StHbtParticleCollection.hh"
00035 #include "StHbtMaker/Base/StHbtTrackCut.h"
00036 #include "StHbtMaker/Base/StHbtV0Cut.h"
00037 #include "StHbtMaker/Base/StHbtKinkCut.h"
00038 #include "StHbtMaker/Infrastructure/StHbtPicoEventCollectionVector.hh"
00039 #include "StHbtMaker/Infrastructure/StHbtPicoEventCollectionVectorHideAway.hh"
00040
00041
00042 #ifdef __ROOT__
00043 ClassImp(StHbtVertexMultAnalysis)
00044 #endif
00045
00046 extern void FillHbtParticleCollection(StHbtParticleCut* partCut,
00047 StHbtEvent* hbtEvent,
00048 StHbtParticleCollection* partCollection);
00049
00050
00051
00052 StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(unsigned int binsVertex, double minVertex, double maxVertex,
00053 unsigned int binsMult, double minMult, double maxMult)
00054 : mVertexZBins(binsVertex), mMultBins(binsMult) {
00055
00056 mEventCut = 0;
00057 mFirstParticleCut = 0;
00058 mSecondParticleCut = 0;
00059 mPairCut = 0;
00060 mCorrFctnCollection= 0;
00061 mCorrFctnCollection = new StHbtCorrFctnCollection;
00062 mVertexZ[0] = minVertex;
00063 mVertexZ[1] = maxVertex;
00064 mUnderFlowVertexZ = 0;
00065 mOverFlowVertexZ = 0;
00066 mMult[0] = minMult;
00067 mMult[1] = maxMult;
00068 mUnderFlowMult = 0;
00069 mOverFlowMult = 0;
00070 if (mMixingBuffer) delete mMixingBuffer;
00071 mPicoEventCollectionVectorHideAway = new StHbtPicoEventCollectionVectorHideAway(mVertexZBins,mVertexZ[0],mVertexZ[1],
00072 mMultBins,mMult[0],mMult[1]);
00073 };
00074
00075
00076 StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) : StHbtAnalysis() {
00077
00078 mEventCut = 0;
00079 mFirstParticleCut = 0;
00080 mSecondParticleCut = 0;
00081 mPairCut = 0;
00082 mCorrFctnCollection= 0;
00083 mCorrFctnCollection = new StHbtCorrFctnCollection;
00084 mVertexZBins = a.mVertexZBins;
00085 mVertexZ[0] = a.mVertexZ[0];
00086 mVertexZ[1] = a.mVertexZ[1];
00087 mUnderFlowVertexZ = 0;
00088 mOverFlowVertexZ = 0;
00089 mMultBins = a.mMultBins;
00090 mMult[0] = a.mMult[0];
00091 mMult[1] = a.mMult[1];
00092 mUnderFlowMult = 0;
00093 mOverFlowMult = 0;
00094 if (mMixingBuffer) delete mMixingBuffer;
00095 mPicoEventCollectionVectorHideAway = new StHbtPicoEventCollectionVectorHideAway(mVertexZBins,mVertexZ[0],mVertexZ[1],
00096 mMultBins,mMult[0],mMult[1]);
00097
00098
00099 mEventCut = a.mEventCut->Clone();
00100
00101 mFirstParticleCut = a.mFirstParticleCut->Clone();
00102
00103 if (a.mFirstParticleCut==a.mSecondParticleCut)
00104 SetSecondParticleCut(mFirstParticleCut);
00105 else
00106 mSecondParticleCut = a.mSecondParticleCut->Clone();
00107
00108 mPairCut = a.mPairCut->Clone();
00109
00110 if ( mEventCut ) {
00111 SetEventCut(mEventCut);
00112 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - event cut set " << endl;
00113 }
00114 if ( mFirstParticleCut ) {
00115 SetFirstParticleCut(mFirstParticleCut);
00116 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - first particle cut set " << endl;
00117 }
00118 if ( mSecondParticleCut ) {
00119 SetSecondParticleCut(mSecondParticleCut);
00120 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - second particle cut set " << endl;
00121 } if ( mPairCut ) {
00122 SetPairCut(mPairCut);
00123 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - pair cut set " << endl;
00124 }
00125
00126 StHbtCorrFctnIterator iter;
00127 for (iter=a.mCorrFctnCollection->begin(); iter!=a.mCorrFctnCollection->end();iter++){
00128 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - looking for correlation functions " << endl;
00129 StHbtCorrFctn* fctn = (*iter)->Clone();
00130 if (fctn) AddCorrFctn(fctn);
00131 else cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - correlation function not found " << endl;
00132 }
00133
00134 mNumEventsToMix = a.mNumEventsToMix;
00135
00136 cout << " StHbtVertexMultAnalysis::StHbtVertexMultAnalysis(const StHbtVertexMultAnalysis& a) - analysis copied " << endl;
00137
00138 }
00139
00140 StHbtVertexMultAnalysis::~StHbtVertexMultAnalysis(){
00141
00142 delete mPicoEventCollectionVectorHideAway;
00143 }
00144
00145
00146 StHbtString StHbtVertexMultAnalysis::Report()
00147 {
00148 cout << "StHbtVertexMultAnalysis - constructing Report..."<<endl;
00149 char Ctemp[200];
00150 StHbtString temp = "-----------\nHbt StHbtVertexMultAnalysis Report:\n";
00151 sprintf(Ctemp,"Events are mixed in %d VertexZ bins in the range %E cm to %E cm.\n",mVertexZBins,mVertexZ[0],mVertexZ[1]);
00152 temp += Ctemp;
00153 sprintf(Ctemp,"Events underflowing: %d\n",mUnderFlowVertexZ);
00154 temp += Ctemp;
00155 sprintf(Ctemp,"Events overflowing: %d\n",mOverFlowVertexZ);
00156 temp += Ctemp;
00157 sprintf(Ctemp,"Events are mixed in %d Mult bins in the range %E cm to %E cm.\n",mMultBins,mMult[0],mMult[1]);
00158 temp += Ctemp;
00159 sprintf(Ctemp,"Events underflowing: %d\n",mUnderFlowMult);
00160 temp += Ctemp;
00161 sprintf(Ctemp,"Events overflowing: %d\n",mOverFlowMult);
00162 temp += Ctemp;
00163 sprintf(Ctemp,"Now adding StHbtAnalysis(base) Report\n");
00164 temp += Ctemp;
00165 temp += StHbtAnalysis::Report();
00166 StHbtString returnThis=temp;
00167 return returnThis;
00168 }
00169
00170 void StHbtVertexMultAnalysis::ProcessEvent(const StHbtEvent* hbtEvent) {
00171 cout << " StHbtVertexMultAnalysis::ProcessEvent(const StHbtEvent* hbtEvent) " << endl;
00172
00173 double vertexZ = hbtEvent->PrimVertPos().z();
00174 double mult = hbtEvent->UncorrectedNumberOfPrimaries();
00175 mMixingBuffer = mPicoEventCollectionVectorHideAway->PicoEventCollection(vertexZ,mult);
00176 if (!mMixingBuffer) {
00177 if ( vertexZ < mVertexZ[0] ) mUnderFlowVertexZ++;
00178 if ( vertexZ > mVertexZ[1] ) mOverFlowVertexZ++;
00179 if ( mult < mMult[0] ) mUnderFlowMult++;
00180 if ( mult > mMult[1] ) mOverFlowMult++;
00181 return;
00182 }
00183
00184 StHbtAnalysis::ProcessEvent(hbtEvent);
00185 }