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 #include "StHbtMaker/Cut/rotationEventCut.h"
00031 #include "Randomize.h"
00032 #include "PhysicalConstants.h"
00033 #include "SystemOfUnits.h"
00034 #include "StHbtParticle.hh"
00035 #include "StHbtPair.hh"
00036 #include "StHbtMaker/Infrastructure/StHbtEvent.hh"
00037
00038 #include <cstdio>
00039
00040 #ifdef __ROOT__
00041 ClassImp(rotationEventCut)
00042 #endif
00043
00044 rotationEventCut::rotationEventCut() : mRotation(false), mRandom(false), mSmear(0), mL3TriggerAlgorithm(0) {
00045 mNEventsPassed = mNEventsFailed = 0;
00046 mEventRefMult[0] = 0; mEventRefMult[1] = 100000;
00047 mEventMult[0] = 0; mEventMult[1] = 100000;
00048 mEventMultGood[0] = 0; mEventMultGood[1] = 100000;
00049 mNumberOfTracks[0] = 0; mNumberOfTracks[1] = 100000;
00050 mNumberOfV0s[0] = 0; mNumberOfV0s[1] = 100000;
00051 mReactionPlaneError[0]=-10.; mReactionPlaneError[1]=+10.;
00052
00053 engine = new HepJamesRandom();
00054 gauss = new RandGauss(engine);
00055 }
00056
00057
00058
00059
00060
00061 bool rotationEventCut::Pass(const StHbtEvent* event){
00062 int refMult,mult,multGood;
00063 double VertexZPos;
00064 double angle;
00065 double smear;
00066 bool goodEvent = true;
00067
00068 refMult = event->UncorrectedNumberOfNegativePrimaries();
00069 mult = event->NumberOfTracks();
00070 multGood = event->NumberOfGoodTracks();
00071
00072
00073
00074
00075 VertexZPos = event->PrimVertPos().z();
00076 goodEvent =
00077 (
00078 (refMult >= mEventRefMult[0]) &&
00079 (refMult <= mEventRefMult[1]) &&
00080 (mult >= mEventMult[0]) &&
00081 (mult <= mEventMult[1]) &&
00082 (multGood >= mEventMultGood[0]) &&
00083 (multGood <= mEventMultGood[1]) &&
00084 (event->ReactionPlaneError() >= mReactionPlaneError[0]) &&
00085 (event->ReactionPlaneError() <= mReactionPlaneError[1]) &&
00086 ((int)event->TrackCollection()->size() >= mNumberOfTracks[0]) &&
00087 ((int)event->TrackCollection()->size() <= mNumberOfTracks[1]) &&
00088 ((int)event->V0Collection()->size() >= mNumberOfV0s[0]) &&
00089 ((int)event->V0Collection()->size() <= mNumberOfV0s[1])
00090 );
00091
00092 if (mL3TriggerAlgorithm) goodEvent = goodEvent && (mL3TriggerAlgorithm & event->L3TriggerAlgorithm(0));
00093
00094 if ( mVertZPos[0] < mVertZPos[1])
00095 goodEvent = goodEvent && ( (VertexZPos >= mVertZPos[0]) && (VertexZPos <= mVertZPos[1]) );
00096 else {
00097 goodEvent = goodEvent && !( (VertexZPos >= mVertZPos[0]) && (VertexZPos <= mVertZPos[1]) );
00098 cout << " rotationEventCut::Pass(const StHbtEvent* event) : upper limit < lower limit - inverting the cut" << endl;
00099 }
00100
00101 if (goodEvent && mRotation ) {
00102 angle = gauss->shoot()*2.*pi;
00103 ((StHbtEvent*)event)->RotateZ(-1.* event->ReactionPlane() + angle);
00104 }
00105
00106 if (goodEvent && mRandom ) {
00107 angle = engine->flat()*2.*pi;
00108 ((StHbtEvent*)event)->RotateZ(angle);
00109 }
00110
00111 if (goodEvent && mSmear!=0 ) {
00112 smear = gauss->shoot()*mSmear/360.*2*pi;
00113 ((StHbtEvent*)event)->RotateZ(smear);
00114 }
00115
00116
00117 if (event->PrimVertPos().x() == event->PrimVertPos().y() == event->PrimVertPos().z() ) {
00118 for ( int i=0; i<50; i++) cout << " rotationEventCut::Pass(...) - flagged bad from embedding " << endl;
00119 goodEvent = false;
00120 }
00121
00122
00123
00124
00125 goodEvent ? mNEventsPassed++ : mNEventsFailed++ ;
00126
00127
00128 return (goodEvent);
00129 }
00130
00131
00132 StHbtString rotationEventCut::Report(){
00133 string Stemp="";
00134 char Ctemp[100];
00135 sprintf(Ctemp,"rotationEventCut: ");
00136 Stemp += Ctemp;
00137 sprintf(Ctemp,"\n Rotation :\t %d",mRotation);
00138 Stemp += Ctemp;
00139 sprintf(Ctemp,"\n Random :\t %d",mRandom);
00140 Stemp += Ctemp;
00141 sprintf(Ctemp,"\n Smear :\t %E",mSmear);
00142 Stemp += Ctemp;
00143 sprintf(Ctemp,"\n Reference Multiplicity:\t %d-%d",mEventRefMult[0],mEventRefMult[1]);
00144 Stemp += Ctemp;
00145 sprintf(Ctemp,"\n Multiplicity:\t %d-%d",mEventMult[0],mEventMult[1]);
00146 Stemp += Ctemp;
00147 sprintf(Ctemp,"\n Multiplicity good tracks:\t %d-%d",mEventMultGood[0],mEventMultGood[1]);
00148 Stemp += Ctemp;
00149 sprintf(Ctemp,"\n NumberOfTracks:\t %d-%d",mNumberOfTracks[0],mNumberOfTracks[1]);
00150 Stemp += Ctemp;
00151 sprintf(Ctemp,"\n NumberOfV0s:\t %d-%d",mNumberOfV0s[0],mNumberOfV0s[1]);
00152 Stemp += Ctemp;
00153 sprintf(Ctemp,"\n Vertex Z-position:\t %E-%E",mVertZPos[0],mVertZPos[1]);
00154 Stemp += Ctemp;
00155 sprintf(Ctemp,"\n Number of events which passed:\t%ld Number which failed:\t%ld",mNEventsPassed,mNEventsFailed);
00156 Stemp += Ctemp;
00157 StHbtString returnThis = Stemp;
00158 return returnThis;
00159 }