00001
00002
00003
00004
00005
00006 #include "gl3RICH.h"
00007
00008 #include <math.h>
00009
00010
00011
00012
00013
00014 int gl3RICH::init( )
00015 {
00016
00017
00018 mGlobalRichEdgeXmin= 83.988;
00019 mGlobalRichEdgeXmax= 156.503;
00020 mGlobalRichEdgeYmin=-228.489;
00021 mGlobalRichEdgeYmax=-186.983;
00022 mGlobalRichEdgeZmin= -65.781;
00023 mGlobalRichEdgeZmax= 65.163;
00024
00025
00026 mLocalOriginR = 243.13;
00027 mLocalOriginPhi = -M_PI/3.;
00028
00029
00030 #ifdef GL3ROOT
00031 hXVertex = new TH1D("hXVertex","event vertices x [cm]",50,-2.5,2.5);
00032 hYVertex = new TH1D("hYVertex","event vertices y [cm]",50,-2.5,2.5);
00033 hZVertex = new TH1D("hZVertex","event vertices z [cm]",800,-200,200);
00034
00035 hPtGlobalPosRICH = new TH1D("hPtGlobalPosRICH","Pt global h+ in RICH",300,0,6);
00036 hPGlobalPosRICH = new TH1D("hPGlobalPosRICH","P global h + in RICH",300,0,6);
00037
00038 hPtGlobalNegRICH = new TH1D("hPtGlobalNegRICH","Pt global h- in RICH",300,0,6);
00039 hPGlobalNegRICH = new TH1D("hPGlobalNegRICH","P global h- in RICH",300,0,6);
00040
00041 hnHitsGlobalPosRICH = new TH1D("hnHitsGlobalPosRICH","nHits globals + in RICH",46,0,46);
00042 hnHitsGlobalNegRICH = new TH1D("hnHitsGlobalNegRICH","nHits globals - in RICH",46,0,46);
00043
00044 hdcaGlobal = new TH1D("hdcaGlobal", "dca global tracks", 104, -1, 25);
00045 hetaRICH = new TH1D("hethaRICH","etha global RICH",200,-1,1);
00046 hRLast = new TH1D("hRLast","last hit of TPC track",200,0,200);
00047 #endif
00048
00049 return 0 ;
00050 }
00051
00052
00053
00054
00055 int gl3RICH::setParameters(int maxAbsVertZ, int minNoOfHits, int are, int place , int holders, float minP, float minPt, float minR, float maxDCA, float minimumAbsEta )
00056 {
00057
00058 if(maxAbsVertZ>=0 && maxAbsVertZ<=200) maxAbsEventVertZ = maxAbsVertZ;
00059 else maxAbsEventVertZ=30.0;
00060
00061 if(minNoOfHits>=5 && minNoOfHits<=45) minNoOfHitsOnTrack = minNoOfHits;
00062 else minNoOfHitsOnTrack=23;
00063
00064 if(minP>=0.0 && minP<10.0) minPExtrapolated2Rich=minP;
00065 else minPExtrapolated2Rich=1.0;
00066
00067 if(minPt>=0.0 && minPt<10.0) minPtExtrapolated2Rich=minPt;
00068 else minPtExtrapolated2Rich=1.0;
00069
00070 if(minR>=50.0 && minR<200.0 ) minRofLastPointOnTrack=minR;
00071 else minRofLastPointOnTrack=160;
00072
00073 if(maxDCA>=0.0 && maxDCA<=100) maxDCAToEventVertex=maxDCA;
00074 else maxDCAToEventVertex=10;
00075
00076 if(minimumAbsEta>0.0 && minimumAbsEta<0.5) minAbsEta=minimumAbsEta;
00077 else minAbsEta=2;
00078
00079 return 0;
00080 }
00081
00082
00083
00084
00085
00086 int gl3RICH::decide ( )
00087 {
00088
00089
00090
00091
00092
00093 gl3Track* gTrack ;
00094
00095
00096 int noOfTracksExtrapolated2RICH=0;
00097
00098 event->makeVertex();
00099
00100
00101
00102
00103 if( fabs(event->getVertex().Getz()) <= maxAbsEventVertZ)
00104 {
00105 #ifdef GL3ROOT
00106 hXVertex->Fill(event->getVertex().Getx());
00107 hYVertex->Fill(event->getVertex().Gety());
00108 hZVertex->Fill(event->getVertex().Getz());
00109 #endif
00110
00111
00112 const float a = -1./tan(mLocalOriginPhi);
00113 const float b = ( mLocalOriginR*sin(mLocalOriginPhi)
00114 - a*mLocalOriginR*cos(mLocalOriginPhi) );
00115
00116 Ftf3DHit closestHitToEventVertex;
00117 Ftf3DHit richHit1, lastHit;
00118
00119
00120 for (int trkcnt = 0 ; trkcnt<event->getNTracks(); trkcnt++ )
00121 {
00122 gTrack = event->getTrack(trkcnt);
00123
00124
00125 double px = gTrack->pt * cos(gTrack->psi);
00126 double py = gTrack->pt * sin(gTrack->psi);
00127 double pz = gTrack->pt * gTrack->tanl;
00128 double p = ::sqrt(px*px+py*py+pz*pz);
00129
00130 double eta = -::log(tan(acos(pz/p)/2));
00131
00132
00133
00134 if( gTrack->nHits>=minNoOfHitsOnTrack && p>=minPExtrapolated2Rich && gTrack->pt>=minPtExtrapolated2Rich && fabs(eta)<=minAbsEta )
00135 {
00136
00137
00138 if (
00139
00140 0==gTrack->intersectorZLine( a, b, richHit1 )
00141
00142 &&
00143
00144 ( richHit1.x > mGlobalRichEdgeXmin &&
00145 richHit1.x < mGlobalRichEdgeXmax &&
00146 richHit1.y > mGlobalRichEdgeYmin &&
00147 richHit1.y < mGlobalRichEdgeYmax &&
00148 richHit1.z > mGlobalRichEdgeZmin &&
00149 richHit1.z < mGlobalRichEdgeZmax )
00150
00151
00152
00153
00154
00155
00156
00157
00158 ) {
00159
00160
00161 double trackLength= gTrack->length/cos(atan(gTrack->tanl));
00162 lastHit=gTrack->extrapolate2PathLength(trackLength);
00163
00164
00165 if( lastHit.z>=mGlobalRichEdgeZmin && lastHit.z<=mGlobalRichEdgeZmax )
00166 {
00167
00168 double Rlast=::sqrt(lastHit.x*lastHit.x+lastHit.y*lastHit.y);
00169
00170
00171 closestHitToEventVertex = gTrack->closestApproach( event->getVertex().Getx(), event->getVertex().Gety() );
00172 double dx=fabs( event->getVertex().Getx() - closestHitToEventVertex.x );
00173 double dy=fabs( event->getVertex().Gety() - closestHitToEventVertex.y );
00174 double dz=fabs( event->getVertex().Getz() - closestHitToEventVertex.z );
00175 double dca=::sqrt(dx*dx+dy*dy+dz*dz);
00176
00177 #ifdef GL3ROOT
00178
00179 #endif
00180
00181 if(dca<maxDCAToEventVertex && Rlast>minRofLastPointOnTrack)
00182 {
00183 noOfTracksExtrapolated2RICH++;
00184
00185
00186
00187
00188
00189
00190
00191
00192 #ifdef GL3ROOT
00193 hetaRICH->Fill(eta);
00194 hdcaGlobal->Fill(dca);
00195 hRLast->Fill(Rlast);
00196
00197 if(gTrack->q>0)
00198 {
00199 hPtGlobalPosRICH->Fill(gTrack->pt);
00200 hPGlobalPosRICH->Fill(p);
00201 hnHitsGlobalPosRICH->Fill(gTrack->nHits);
00202 }
00203 else
00204 {
00205 hPtGlobalNegRICH->Fill(gTrack->pt);
00206 hPGlobalNegRICH->Fill(p);
00207 hnHitsGlobalNegRICH->Fill(gTrack->nHits);
00208 }
00209 #endif
00210 }
00211
00212 }
00213
00214 }
00215
00216 }
00217
00218 }
00219
00220 }
00221
00222
00223 if( noOfTracksExtrapolated2RICH>0 ) {
00224
00225
00226 return 1;
00227 } else {
00228
00229
00230 return 0;
00231 }
00232 }
00233
00234
00235
00236
00237 int gl3RICH::end ( ) {
00238
00239 #ifdef GL3ROOT
00240 hPtGlobalPosRICH->Write();
00241 hPtGlobalNegRICH->Write();
00242
00243 hPGlobalPosRICH->Write();
00244 hPGlobalNegRICH->Write();
00245
00246 hnHitsGlobalPosRICH->Write();
00247 hnHitsGlobalNegRICH->Write();
00248
00249 hXVertex->Write();
00250 hYVertex->Write();
00251 hZVertex->Write();
00252
00253 hdcaGlobal->Write();
00254 hetaRICH->Write();
00255 hRLast->Write();
00256 #endif
00257
00258 return 0 ;
00259 }
00260
00261
00262
00263
00264