00001 #include "StL3Nuclei.h"
00002 #include "StL3RareTrack.h"
00003 #include "StEventTypes.h"
00004 #include <stdlib.h>
00005
00006 ClassImp(StL3Nuclei)
00007
00008 StL3Nuclei::StL3Nuclei(float plow, float phigh, int charge, int mass)
00009 {
00010 pcut[0] = plow;
00011 pcut[1] = phigh;
00012 chargeToAccept = charge;
00013 minMass = mass;
00014 }
00015
00016 int StL3Nuclei::Accept(StGlobalTrack* trk)
00017 {
00018 int iret = 0;
00019 int chargeOK = 0;
00020 int dedxOK = 0;
00021 int pOK=0;
00022 StL3RareTrack track(trk);
00023 if (chargeToAccept==0)
00024 chargeOK = 1;
00025 else if (chargeToAccept<0 && track.chargesign()<0)
00026 chargeOK = 1;
00027 else if (chargeToAccept>0 && track.chargesign()>0)
00028 chargeOK = 1;
00029
00030 float dedxmin;
00031 int theCharge = 1;
00032 if (abs(chargeToAccept)>1)
00033 theCharge = 2;
00034 float dedxExp = track.dedxExpected(minMass*0.939, theCharge);
00035 dedxmin = 0.6 * dedxExp;
00036 float dedx = track.dedx();
00037
00038
00039 float dedxbad;
00040 if (minMass>1)
00041 dedxbad = 1.1 * track.dedxExpected((minMass-1)*0.939, theCharge);
00042 if (minMass==1)
00043 dedxbad = 1.1 * track.dedxExpected(0.494, 1);
00044 if (dedx>dedxmin && dedx>dedxbad)
00045 dedxOK = 1;
00046
00047
00048 float random_number = (float)rand()/(float)RAND_MAX;
00049
00050 if (random_number<0.005)
00051 dedxOK = 1;
00052
00053 if (track.p()>pcut[0] && track.p()<pcut[1] && track.npntfit()>20) pOK = 1;
00054
00055 iret = chargeOK*dedxOK*pOK;
00056 return iret;
00057 }
00058 void StL3Nuclei::Report(){
00059 cout << "StL3Nuclei: charge = " << chargeToAccept << endl;
00060 cout << "StL3Nuclei: mass >= " << minMass << endl;
00061 cout << "StL3Nuclei: momentum > " << pcut << endl;
00062 }