00001 #include "EventAssembly/EventAssemblyAlg.h"
00002
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/AlgFactory.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/SmartDataPtr.h"
00007 #include "GaudiKernel/IDataProviderSvc.h"
00008 #include "GaudiKernel/IDataManagerSvc.h"
00009 #include "GaudiKernel/PropertyMgr.h"
00010
00011
00012
00013 #include "EventModel/EventHeader.h"
00014 #include "EvtRecEvent/EvtRecObject.h"
00015 #include "EvtRecEvent/EvtRecTrack.h"
00016 #include "EvtRecEvent/EvtRecEvent.h"
00017 #include "EvTimeEvent/RecEsTime.h"
00018 #include "Identifier/Identifier.h"
00019 #include "Identifier/TofID.h"
00020
00021
00023 EventAssemblyAlg::EventAssemblyAlg(const std::string& name, ISvcLocator* pSvcLocator):Algorithm(name, pSvcLocator)
00024 {
00025
00026 declareProperty("MsgFlag",myMsgFlag=false);
00027 declareProperty("ActiveCutFlag",myActiveCutFlag=true);
00028 declareProperty("EmcThetaMatchCut",myEmcThetaCut=-1);
00029 declareProperty("EmcPhiMatchCut",myEmcPhiCut=-1);
00030 declareProperty("EmcThetaNSigmaCut",myEmcThetaNSigmaCut=5);
00031 declareProperty("EmcPhiNSigmaCut",myEmcPhiNSigmaCut=5);
00032 declareProperty("ParticleId",myParticleId);
00033 declareProperty("Output", m_Output = 0);
00034 }
00035
00037 StatusCode EventAssemblyAlg::initialize()
00038 {
00039 MsgStream log(msgSvc(), name());
00040 log << MSG::INFO << "in initialize()" << endreq;
00041
00042 if(myEmcThetaCut<0) myEmcThetaCut = 0.1745;
00043 if(myEmcPhiCut<0) myEmcPhiCut = 0.2618;
00044
00045 log << MSG::INFO <<"EmcThetaCut,EmcPhiCut: "<<myEmcThetaCut<<", "<<myEmcPhiCut<<endreq;
00046 log << MSG::INFO <<"emcThetaNSigmaCut, emcPhiNSigmaCut: "<<myEmcThetaNSigmaCut<<", "<<myEmcPhiNSigmaCut<<endreq;
00047
00048 if(m_Output == 1){
00049 NTuplePtr nt1(ntupleSvc(), "FILE998/match");
00050 if ( nt1 ) myNTuple1 = nt1;
00051 else {
00052 myNTuple1 = ntupleSvc()->book("FILE998/match", CLID_ColumnWiseTuple, "match");
00053 if ( myNTuple1 ) {
00054 myNTuple1->addItem("exted",myExted);
00055 myNTuple1->addItem("matched",myMatched);
00056 myNTuple1->addItem("Ematched",myEnergyMatched);
00057 }
00058 else {
00059 log << MSG::ERROR << " Cannot book N-tuple:" << long(myNTuple1) << endmsg;
00060
00061 }
00062 }
00063 }
00064 return StatusCode::SUCCESS;
00065 }
00066
00068 StatusCode EventAssemblyAlg::execute()
00069 {
00070 MsgStream log(msgSvc(), name());
00071 log << MSG::INFO << "in execute()" << endreq;
00072
00073 int numOfChargedTrks = 0;
00074 int numOfKalTrks = 0;
00075 int numOfDedx = 0;
00076 int numOfExt = 0;
00077 int numOfTof = 0;
00078 int numOfShower = 0;
00079 int numOfMatchedShower = 0;
00080 int numOfMucTrks = 0;
00081
00082
00083 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00084 if (!eventHeader)
00085 {
00086 log << MSG::FATAL << "Could not find Event Header" << endreq;
00087 return( StatusCode::FAILURE);
00088 }
00089 log << MSG::INFO << ": retrieved event: " << eventHeader->eventNumber() << " run: " << eventHeader->runNumber() << endreq;
00090
00091
00092 SmartDataPtr<RecMdcTrackCol> recMdcTrackCol(eventSvc(),EventModel::Recon::RecMdcTrackCol);
00093 RecMdcTrackCol::iterator beginOfMdcTrkCol = RecMdcTrackCol::iterator(NULL);
00094 if(!recMdcTrackCol)
00095 {
00096 log<<MSG::INFO<<"Could not find RecMdcTrackCol!"<<endreq;
00097 }
00098 else
00099 {
00100 beginOfMdcTrkCol = recMdcTrackCol->begin();
00101 numOfChargedTrks = recMdcTrackCol->size();
00102 }
00103
00104 SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol(eventSvc(), EventModel::Recon::RecMdcKalTrackCol);
00105 RecMdcKalTrackCol::iterator beginOfMdcKalTrackCol = RecMdcKalTrackCol::iterator(NULL);
00106 if(!mdcKalTrackCol)
00107 {
00108 log<<MSG::INFO<<"Could not find MdcKalTrackCol!"<<endreq;
00109 }
00110 else
00111 {
00112 numOfKalTrks = mdcKalTrackCol->size();
00113 beginOfMdcKalTrackCol = mdcKalTrackCol->begin();
00114 }
00115
00116
00117 SmartDataPtr<RecMdcDedxCol> mdcDedxCol(eventSvc(), EventModel::Recon::RecMdcDedxCol);
00118 RecMdcDedxCol::iterator beginOfDedxCol = RecMdcDedxCol::iterator(NULL);
00119 if(!mdcDedxCol)
00120 {
00121 log<<MSG::INFO<<"Could not find MdcDedxCol!"<<endreq;
00122 }
00123 else {
00124 numOfDedx = mdcDedxCol->size();
00125 beginOfDedxCol = mdcDedxCol->begin();
00126 }
00127
00128
00129 SmartDataPtr<RecExtTrackCol> extTrackCol(eventSvc(), EventModel::Recon::RecExtTrackCol);
00130 RecExtTrackCol::iterator beginOfExtTrackCol = RecExtTrackCol::iterator(NULL);
00131 if(!extTrackCol)
00132 {
00133 log<<MSG::INFO<<"Could not find RecExtTrackCol!"<<endreq;
00134 }
00135 else
00136 {
00137 beginOfExtTrackCol = extTrackCol->begin();
00138 numOfExt = extTrackCol->size();
00139 }
00140
00141 SmartDataPtr<RecTofTrackCol> TofTrackCol(eventSvc(), EventModel::Recon::RecTofTrackCol);
00142 RecTofTrackCol::iterator beginOfTofTrackCol = RecTofTrackCol::iterator(NULL);
00143 if(!TofTrackCol)
00144 {
00145 log<<MSG::INFO<<"Could not find RecTofTrackCol!"<<endreq;
00146 }
00147 else
00148 {
00149 beginOfTofTrackCol = TofTrackCol->begin();
00150 numOfTof = TofTrackCol->size();
00151 }
00152
00153 SmartDataPtr<RecEmcShowerCol> emcRecShowerCol(eventSvc(), EventModel::Recon::RecEmcShowerCol);
00154 RecEmcShowerCol::iterator beginOfEmcTrackCol = RecEmcShowerCol::iterator(NULL);
00155 if(!emcRecShowerCol)
00156 {
00157 log<<MSG::INFO<<"Could not find RecEmcShowerCol!"<<endreq;
00158 }
00159 else
00160 {
00161 beginOfEmcTrackCol = emcRecShowerCol->begin();
00162 numOfShower = emcRecShowerCol->size();
00163 }
00164
00165 SmartDataPtr<RecMucTrackCol> mucTrackCol(eventSvc(), EventModel::Recon::RecMucTrackCol);
00166 RecMucTrackCol::iterator beginOfMucTrackCol = RecMucTrackCol::iterator(NULL);
00167 if(!mucTrackCol)
00168 {
00169 log<<MSG::INFO<<"Could not find RecMucTrackCol!"<<endreq;
00170 }
00171 else
00172 {
00173 beginOfMucTrackCol = mucTrackCol->begin();
00174 numOfMucTrks = mucTrackCol->size();
00175 }
00176
00177
00178
00179 int MaxHit = numOfChargedTrks+numOfShower+numOfTof;
00180
00181 vector<bool> dEdxMatched;
00182 vector<bool> kalTrkMatched;
00183 vector<bool> extMatched;
00184 vector<bool> TofMatched;
00185 vector<bool> emcMatched;
00186 vector<bool> mucMatched;
00187
00188 for(int i=0;i<MaxHit;i++)
00189 {
00190 dEdxMatched.push_back(false);
00191 kalTrkMatched.push_back(false);
00192 extMatched.push_back(false);
00193 TofMatched.push_back(false);
00194 emcMatched.push_back(false);
00195 mucMatched.push_back(false);
00196 }
00197
00198
00199
00200
00201 EvtRecTrackCol* aNewEvtRecTrackCol = new EvtRecTrackCol;
00202 if(numOfChargedTrks+numOfShower)
00203 {
00204 for(int i=0;i<numOfChargedTrks;i++)
00205 {
00206 EvtRecTrack* aNewEvtRecTrack = new EvtRecTrack;
00207 int mdcTrkID = (*(beginOfMdcTrkCol+i))->trackId();
00208 aNewEvtRecTrack->setTrackId(mdcTrkID);
00209 aNewEvtRecTrack->setMdcTrack(*(beginOfMdcTrkCol+i));
00210
00211 for(int j=0;j<numOfKalTrks;j++)
00212 if( !kalTrkMatched[j] && mdcTrkID==(*(beginOfMdcKalTrackCol+j))->trackId() )
00213 {
00214 aNewEvtRecTrack->setMdcKalTrack(*(beginOfMdcKalTrackCol+j));
00215
00216 kalTrkMatched[j]=true;
00217 }
00218
00219 for(int j=0;j<numOfDedx;j++)
00220 if( !dEdxMatched[j] && mdcTrkID==(*(beginOfDedxCol+j))->trackId() )
00221 {
00222 aNewEvtRecTrack->setMdcDedx(*(beginOfDedxCol+j));
00223
00224 dEdxMatched[j]=true;
00225 }
00226
00227 for(int j=0;j<numOfExt;j++)
00228 if( !extMatched[j] && mdcTrkID==(*(beginOfExtTrackCol+j))->trackId() )
00229 {
00230 aNewEvtRecTrack->setExtTrack(*(beginOfExtTrackCol+j));
00231
00232 extMatched[j]=true;
00233 }
00234 for(int j=0;j<numOfTof;j++)
00235 if( !TofMatched[j] && mdcTrkID==(*(beginOfTofTrackCol+j))->trackID() )
00236 {
00237 aNewEvtRecTrack->addTofTrack(*(beginOfTofTrackCol+j));
00238
00239 TofMatched[j]=true;
00240 }
00241 for(int j=0;j<numOfMucTrks;j++)
00242 if( !mucMatched[j] && mdcTrkID==(*(beginOfMucTrackCol+j))->trackId() )
00243 {
00244 aNewEvtRecTrack->setMucTrack(*(beginOfMucTrackCol+j));
00245
00246 mucMatched[j]=true;
00247 }
00248
00249 if(m_Output==1){
00250 myExted = -1.;
00251 myMatched = -1.;
00252 myEnergyMatched = -1.;
00253 }
00254 if(aNewEvtRecTrack->isExtTrackValid()&&(aNewEvtRecTrack->extTrack())->emcVolumeNumber()!=-1)
00255 {
00256 if(m_Output==1)myExted = 1.;
00257
00258 Hep3Vector extPos = (aNewEvtRecTrack->extTrack())->emcPosition();
00259 double extTheta = extPos.theta();
00260 double extPhi = extPos.phi();
00261
00262 double dAngleMin = 9999.;
00263 int indexOfEmcNearest = -1;
00264
00265 for(int j=0;j<numOfShower;j++)
00266 {
00267 if(!emcMatched[j])
00268 {
00269 HepPoint3D emcPot = (*(beginOfEmcTrackCol+j))->position();
00270 Hep3Vector emcPos(emcPot.x(),emcPot.y(),emcPot.z());
00271 double dAngle = extPos.angle(emcPos);
00272 if(dAngle<dAngleMin)
00273 {
00274 dAngleMin = dAngle;
00275 indexOfEmcNearest = j;
00276 }
00277 }
00278 }
00279 if(indexOfEmcNearest>=0)
00280 {
00281 HepPoint3D emcPot = (*(beginOfEmcTrackCol+indexOfEmcNearest))->position();
00282 double theta = emcPot.theta();
00283 double phi = emcPot.phi();
00284 double deltaTheta = (extTheta-theta);
00285 double deltaPhi = fmod(extPhi-phi+5*M_PI,2*M_PI)-M_PI;
00286 if(myActiveCutFlag)
00287 {
00288 double tanLamda = (*(beginOfMdcTrkCol+i))->helix(4);
00289 double kappa = (*(beginOfMdcTrkCol+i))->helix(2);
00290 double p = sqrt(1+tanLamda*tanLamda)/fabs(kappa);
00291 double aThetaCut = thetaCut(p,myEmcThetaNSigmaCut,myParticleId);
00292 double aPhiCUt = phiCut(p,myEmcPhiNSigmaCut,myParticleId);
00293 if(fabs(deltaTheta)<aThetaCut && fabs(deltaPhi)<aPhiCUt)
00294 {
00295 aNewEvtRecTrack->setEmcShower(*(beginOfEmcTrackCol+indexOfEmcNearest));
00296
00297 emcMatched[indexOfEmcNearest]=true;
00298 numOfMatchedShower++;
00299 if(m_Output==1)myMatched = 1.;
00300 }
00301 }
00302 else if(fabs(deltaTheta)<myEmcThetaCut && fabs(deltaPhi)<myEmcPhiCut)
00303 {
00304 aNewEvtRecTrack->setEmcShower(*(beginOfEmcTrackCol+indexOfEmcNearest));
00305
00306 emcMatched[indexOfEmcNearest]=true;
00307 numOfMatchedShower++;
00308 if(m_Output==1)myMatched = 1.;
00309 }
00310 }
00311 }
00312 aNewEvtRecTrackCol->push_back(aNewEvtRecTrack);
00313 if(m_Output==1){
00314 myEnergyMatched = 0.;
00315 myNTuple1->write();
00316 }
00317 }
00318
00319 int id=0;
00320 for(int i=0;i<numOfShower;i++)
00321 {
00322 if(!emcMatched[i])
00323 {
00324 EvtRecTrack* aNewEvtRecTrack = new EvtRecTrack;
00325 aNewEvtRecTrack->setTrackId(id+numOfChargedTrks);
00326 aNewEvtRecTrack->setEmcShower(*(beginOfEmcTrackCol+i));
00327
00328
00329
00330 HepPoint3D emcPos((*(beginOfEmcTrackCol+i))->position());
00331 double emcPhi = emcPos.phi();
00332 emcPhi = emcPhi < 0 ? emcPhi+CLHEP::twopi : emcPhi;
00333
00334 int module=9999, nphi1=9999, nphi2=9999, nphi1_mrpc=9999;
00335 module = (*(beginOfEmcTrackCol+i))->module();
00336 if(module==1) {
00337 nphi1 = (int)(emcPhi*88./CLHEP::twopi);
00338 nphi2 = (int)(emcPhi*88./CLHEP::twopi+0.5);
00339 nphi2 += 88;
00340 } else {
00341 nphi1 = (int)(emcPhi*48./CLHEP::twopi+0.5);
00342
00343
00344
00345 double fi_endtof_mrpc = atan2(emcPos.y(),emcPos.x())-3.141592654/2.;
00346 if(fi_endtof_mrpc<0) fi_endtof_mrpc += 2*3.141592654;
00347 nphi1_mrpc=((int)(fi_endtof_mrpc/(3.141593/18)))+1;
00348
00349 if(nphi1_mrpc%2==0){nphi1_mrpc=nphi1_mrpc/2;}
00350 else {nphi1_mrpc=(nphi1_mrpc+1)/2;}
00351
00352 if(emcPos.z()>0) {(nphi1_mrpc -= 19); nphi1_mrpc=nphi1_mrpc*(-1);}
00353
00354
00355 }
00356
00357 int dPhiMin = 9999;
00358 int partid_dPhiMin = 7;
00359 bool mrpcmatch = false;
00360
00361 int indexOfTofNearest = -1;
00362 for(int j=0;j<numOfTof;j++) {
00363 if( !TofMatched[j] ) {
00364
00365 Identifier id((*(beginOfTofTrackCol+j))->tofID());
00366 bool is_mrpc = TofID::is_mrpc(id);
00367
00368 if(!is_mrpc)
00369 {
00370 int barrel_ec = TofID::barrel_ec(id);
00371 int layer = TofID::layer(id);
00372 int im = TofID::phi_module(id);
00373 im += layer * 88;
00374
00375 if(module!=barrel_ec) continue;
00376
00377 int dPhi;
00378 if(layer == 0) {
00379 dPhi = abs(im - nphi1);
00380 } else {
00381 dPhi = abs(im - nphi2);
00382 }
00383 if(module==1) {
00384 dPhi = dPhi>=44 ? 88-dPhi : dPhi;
00385 } else {
00386 dPhi = dPhi>=24 ? 48-dPhi : dPhi;
00387 }
00388
00389 if(dPhi < dPhiMin) {
00390 dPhiMin = dPhi;
00391 indexOfTofNearest = j;
00392 }
00393 }
00394 else
00395 {
00396 int barrel_ec = TofID::barrel_ec(id);
00397 int module_mrpc = TofID::module(id);
00398
00399 int dphi;
00400 dphi = abs(module_mrpc-nphi1_mrpc);
00401
00402 if(dphi < dPhiMin)
00403 {
00404 dPhiMin=dphi;
00405 partid_dPhiMin=barrel_ec;
00406 indexOfTofNearest = j;
00407 mrpcmatch = true;
00408 }
00409 }
00410
00411 }
00412 }
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428 if(indexOfTofNearest>=0) {
00429 HepPoint3D tofPos(0,0.867,(*(beginOfTofTrackCol+indexOfTofNearest))->zrhit());
00430 double matWindow = 0;
00431 double eShower = (*(beginOfEmcTrackCol+i))->e5x5();
00432 if(eShower>0) {
00433 matWindow = 0.01277+0.004268/sqrt(eShower);
00434 }
00435 }
00436
00437
00438 if(indexOfTofNearest>=0 && dPhiMin<=1) {
00439
00440 double eShower = (*(beginOfEmcTrackCol+i))->e5x5();
00441 double matWindow = 0;
00442 if(eShower>0) {
00443 matWindow = 0.01277+0.004268/sqrt(eShower);
00444 }
00445 matWindow = 0.2;
00446
00447 HepPoint3D tofPos(0,0.867,(*(beginOfTofTrackCol+indexOfTofNearest))->zrhit());
00448 if(fabs(tofPos.theta()-emcPos.theta())<matWindow || module!=1) {
00449 aNewEvtRecTrack->addTofTrack(*(beginOfTofTrackCol+indexOfTofNearest));
00450 TofMatched[indexOfTofNearest]=true;
00451
00452
00453 }
00454 }
00455
00456 aNewEvtRecTrackCol->push_back(aNewEvtRecTrack);
00457 id++;
00458 }
00459 }
00460 }
00461
00462
00463 if(myMsgFlag) cout<<"Charged tracks: "<<numOfChargedTrks<<" Ext track: "<<numOfExt <<" Shower:"<<numOfShower<<" Matched shower:"<<numOfMatchedShower<<endl;
00464
00465
00466 DataObject *aDataObject1;
00467 eventSvc()->findObject(EventModel::EvtRec::Event, aDataObject1);
00468 if ( aDataObject1 == NULL ) {
00469 EvtRecObject* aRecObject = new EvtRecObject;
00470 StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::Event, aRecObject);
00471 if ( sc.isFailure() ) {
00472 log << MSG::FATAL << "Could not register EvtRecObject in TDS!" << endreq;
00473 return StatusCode::FAILURE;
00474 }
00475 }
00476
00477 DataObject* aDataObject2;
00478 eventSvc()->findObject(EventModel::EvtRec::EvtRecEvent, aDataObject2);
00479 if ( aDataObject2 == NULL ) {
00480 EvtRecEvent* aRecEvent = new EvtRecEvent;
00481 aRecEvent->setTotalTracks(numOfChargedTrks+numOfShower-numOfMatchedShower);
00482 aRecEvent->setTotalCharged(numOfChargedTrks);
00483 aRecEvent->setTotalNeutral(numOfShower-numOfMatchedShower);
00484 StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::EvtRecEvent, aRecEvent);
00485 if ( sc.isFailure() ) {
00486 log << MSG::FATAL << "Could not register EvtRecEvent in TDS!" << endreq;
00487 return( StatusCode::FAILURE);
00488 }
00489 }
00490 else {
00491 EvtRecEvent* aRecEvent = dynamic_cast<EvtRecEvent*>(aDataObject2);
00492 aRecEvent->setTotalTracks(numOfChargedTrks+numOfShower-numOfMatchedShower);
00493 aRecEvent->setTotalCharged(numOfChargedTrks);
00494 aRecEvent->setTotalNeutral(numOfShower-numOfMatchedShower);
00495 }
00496
00497 DataObject* aDataObject3;
00498 eventSvc()->findObject(EventModel::EvtRec::EvtRecTrackCol, aDataObject3);
00499 if ( aDataObject3 != NULL ) {
00500
00501 SmartIF<IDataManagerSvc> dataMgrSvc(eventSvc());
00502 dataMgrSvc->clearSubTree(EventModel::EvtRec::EvtRecTrackCol);
00503 eventSvc()->unregisterObject(EventModel::EvtRec::EvtRecTrackCol);
00504 }
00505
00506 StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::EvtRecTrackCol, aNewEvtRecTrackCol);
00507 if ( sc.isFailure() ) {
00508 log << MSG::FATAL << "Could not register EvtRecTrackCol in TDS!" << endreq;
00509 return( StatusCode::FAILURE);
00510 }
00511
00512
00513 SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00514 if(!evtRecTrackCol)
00515 {
00516 log<<MSG::FATAL<<"Could not find RecTrackListCol in TDS!"<<endreq;
00517 }
00518
00519 EvtRecTrackCol::iterator itOfRecTrkListCol = evtRecTrackCol->begin();
00520 if(myMsgFlag)
00521 for(int i=0;itOfRecTrkListCol!=evtRecTrackCol->end();itOfRecTrkListCol++,i++)
00522 {
00523 cout<<"******************** Track "<<i<<": *********************"<<endl;
00524 cout<<"Track ID: "<<(*itOfRecTrkListCol)->trackId()<<endl;
00525 if((*itOfRecTrkListCol)->isMdcTrackValid())
00526 {
00527 RecMdcTrack* mdcTrk = (*itOfRecTrkListCol)->mdcTrack();
00528 double kappa = mdcTrk->helix(2);
00529 double tanl = mdcTrk->helix(4);
00530 cout<<"Mdc kappa, tanl: "<<kappa<<", "<<tanl<<endl;
00531 }
00532 if((*itOfRecTrkListCol)->isExtTrackValid())
00533 {
00534 RecExtTrack* extTrack = (*itOfRecTrkListCol)->extTrack();
00535 Hep3Vector emcPos = extTrack->emcPosition();
00536 cout<<"Ext Emc pos:"<<emcPos.x()<<","<<emcPos.y()<<","<<emcPos.z()<<endl;
00537 }
00538 if((*itOfRecTrkListCol)->isEmcShowerValid())
00539 {
00540 RecEmcShower* emcTrack = (*itOfRecTrkListCol)->emcShower();
00541 HepPoint3D emcPos = emcTrack->position();
00542 double x = emcPos.x();
00543 double y = emcPos.y();
00544 double z = emcPos.z();
00545 cout<<"Emc rec pos:"<<x<<","<<y<<","<<z<<endl;
00546 }
00547 }
00548
00549 return StatusCode::SUCCESS;
00550 }
00551
00552
00553 StatusCode EventAssemblyAlg::finalize()
00554 {
00555 MsgStream log(msgSvc(), name());
00556 log << MSG::INFO << "in finalize()" << endreq;
00557
00558 return StatusCode::SUCCESS;
00559 }
00560
00561
00562
00564 double EventAssemblyAlg::thetaCut(double p,double nSigma,int parId)
00565 {
00566 if(p<0.3) p=0.3;
00567 if(parId<1||parId>3) parId=3;
00568 if(nSigma<=0) nSigma = 5.;
00569 double cut = myEmcThetaCut;
00570 switch(parId)
00571 {
00572 case 1:cut = fabs(-0.00159)+(exp(-3.566*p-4.14)+0.006804)*nSigma; break;
00573 case 2:cut = fabs(-0.00145)+(exp(-4.268*p-3.305)+0.01129)*nSigma; break;
00574 case 3:cut = fabs(-0.00161)+(exp(-5.955*p-3.052)+0.01751)*nSigma; break;
00575 }
00576
00577 return cut;
00578 }
00579
00581 double EventAssemblyAlg::phiCut(double p,double nSigma,int parId)
00582 {
00583 if(p<0.3) p=0.3;
00584 if(parId<1||parId>3) parId=3;
00585 if(nSigma<=0) nSigma = 5.;
00586 double cut = myEmcPhiCut;
00587 switch(parId)
00588 {
00589 case 1:cut = fabs(exp(-2.187*p-2.945)+0.03236)+(exp(-2.977*p-3.558)+0.005566)*nSigma; break;
00590 case 2:cut = fabs(exp(-2.216*p-2.13)+0.03314)+(exp(-2.436*p-3.392)+0.005049)*nSigma; break;
00591 case 3:cut = fabs(exp(-1.63*p-2.931)+0.03223)+(exp(-3.192*p-2.756)+0.01533)*nSigma; break;
00592 }
00593
00594 return cut;
00595 }
00596