Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EventAssemblyAlg Class Reference

#include <EventAssemblyAlg.h>

List of all members.

Public Member Functions

 EventAssemblyAlg (const std::string &name, ISvcLocator *pSvcLocator)
 EventAssemblyAlg (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute ()
StatusCode execute ()
StatusCode finalize ()
StatusCode finalize ()
StatusCode initialize ()
StatusCode initialize ()

Private Member Functions

double phiCut (double p, double nSigma, int parId)
double phiCut (double p, double nSigma, int parId)
double thetaCut (double p, double nSigma, int parId)
double thetaCut (double p, double nSigma, int parId)

Private Attributes

int m_Output
bool myActiveCutFlag
double myEmcPhiCut
double myEmcPhiNSigmaCut
double myEmcThetaCut
double myEmcThetaNSigmaCut
NTuple::Item< double > myEnergyMatched
NTuple::Item< double > myEnergyMatched
NTuple::Item< double > myExted
NTuple::Item< double > myExted
NTuple::Item< double > myMatched
NTuple::Item< double > myMatched
bool myMsgFlag
NTuple::Tuple * myNTuple1
NTuple::Tuple * myNTuple1
int myParticleId


Constructor & Destructor Documentation

EventAssemblyAlg::EventAssemblyAlg const std::string &  name,
ISvcLocator *  pSvcLocator
 

00023                                                                                  :Algorithm(name, pSvcLocator)
00024 {
00025   //Declare the properties
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 }

EventAssemblyAlg::EventAssemblyAlg const std::string &  name,
ISvcLocator *  pSvcLocator
 


Member Function Documentation

StatusCode EventAssemblyAlg::execute  ) 
 

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   // Part 1: Get the event header, print out event and run number
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   //Part 2: Retrieve Rec data
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     //Some match flag
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   //Part 3: Match tracks
00200   //  RecTrackListCol* aNewRecTrkListCol = new RecTrackListCol;
00201   EvtRecTrackCol* aNewEvtRecTrackCol = new EvtRecTrackCol;
00202   if(numOfChargedTrks+numOfShower)//if mdc trackCol and emc trackCol neither exists,there is no match job.
00203     {
00204       for(int i=0;i<numOfChargedTrks;i++)//match charged tracks
00205         {
00206           EvtRecTrack* aNewEvtRecTrack = new EvtRecTrack;
00207           int mdcTrkID = (*(beginOfMdcTrkCol+i))->trackId();
00208           aNewEvtRecTrack->setTrackId(mdcTrkID);
00209           aNewEvtRecTrack->setMdcTrack(*(beginOfMdcTrkCol+i));
00210           //      aNewEvtRecTrack->setMdcTrkIdx(i);
00211           for(int j=0;j<numOfKalTrks;j++)//match MdcKalTrack
00212             if( !kalTrkMatched[j] && mdcTrkID==(*(beginOfMdcKalTrackCol+j))->trackId() )
00213               {
00214                 aNewEvtRecTrack->setMdcKalTrack(*(beginOfMdcKalTrackCol+j));
00215                 //              aNewRecTrkList->setMdcKalTrkIdx(j);
00216                 kalTrkMatched[j]=true;
00217               }
00218           
00219           for(int j=0;j<numOfDedx;j++)//match dEdx
00220             if( !dEdxMatched[j] && mdcTrkID==(*(beginOfDedxCol+j))->trackId() )
00221               {
00222                 aNewEvtRecTrack->setMdcDedx(*(beginOfDedxCol+j));
00223                 //              aNewRecTrkList->setDedxTrkIdx(j);
00224                 dEdxMatched[j]=true;
00225               }
00226             
00227           for(int j=0;j<numOfExt;j++)//match ExtTrack
00228             if( !extMatched[j] && mdcTrkID==(*(beginOfExtTrackCol+j))->trackId() )
00229               {
00230                 aNewEvtRecTrack->setExtTrack(*(beginOfExtTrackCol+j));
00231                 //              aNewRecTrkList->setExtTrkIdx(j);
00232                 extMatched[j]=true;
00233               }
00234           for(int j=0;j<numOfTof;j++)//match Tof
00235             if( !TofMatched[j] && mdcTrkID==(*(beginOfTofTrackCol+j))->trackID() )
00236               {
00237                 aNewEvtRecTrack->addTofTrack(*(beginOfTofTrackCol+j));
00238                 //              aNewRecTrkList->setTofTrkIdx(j);
00239                 TofMatched[j]=true;
00240               }
00241           for(int j=0;j<numOfMucTrks;j++)//match MucTrack
00242             if( !mucMatched[j] && mdcTrkID==(*(beginOfMucTrackCol+j))->trackId() )
00243               {
00244                 aNewEvtRecTrack->setMucTrack(*(beginOfMucTrackCol+j));
00245                 //              aNewRecTrkList->setMucTrkIdx(j);
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)//start to match Emc showers
00255             {
00256               if(m_Output==1)myExted = 1.;
00257               //resieve ext information @ Emc
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++)//start to find nearest emc shower
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)//if nearest Emc shower is found
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                           //                      aNewRecTrkList->setEmcTrkIdx(indexOfEmcNearest);
00297                           emcMatched[indexOfEmcNearest]=true;
00298                           numOfMatchedShower++;
00299                           if(m_Output==1)myMatched = 1.;
00300                         }
00301                     }
00302                   else if(fabs(deltaTheta)<myEmcThetaCut && fabs(deltaPhi)<myEmcPhiCut)//if the nearest shower is in the fixed match window,it will be matched.
00303                     {
00304                       aNewEvtRecTrack->setEmcShower(*(beginOfEmcTrackCol+indexOfEmcNearest));
00305                       //                      aNewRecTrkList->setEmcTrkIdx(indexOfEmcNearest);
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         }//end charged track match
00318                 
00319       int id=0;
00320       for(int i=0;i<numOfShower;i++)//If Emc shower isn't macthed, it will be added to the end of RecTrackListCol
00321         {
00322           if(!emcMatched[i])
00323             {
00324               EvtRecTrack* aNewEvtRecTrack = new EvtRecTrack;
00325               aNewEvtRecTrack->setTrackId(id+numOfChargedTrks);
00326               aNewEvtRecTrack->setEmcShower(*(beginOfEmcTrackCol+i));
00327               //              aNewRecTrkList->setEmcTrkIdx(i);
00328 
00329   //EMC and TOF match
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;
00335         module = (*(beginOfEmcTrackCol+i))->module();
00336         if(module==1) {    //barrel
00337           nphi1 = (int)(emcPhi*88./CLHEP::twopi);      //tof layer1 number
00338           nphi2 = (int)(emcPhi*88./CLHEP::twopi+0.5);  //tof layer2 number
00339           nphi2 += 88;
00340         } else {    //endcap
00341           nphi1 = (int)(emcPhi*48./CLHEP::twopi+0.5);
00342         }
00343 
00344         int dPhiMin = 9999;
00345         int indexOfTofNearest = -1;
00346         for(int j=0;j<numOfTof;j++) { //start to find nearest Tof shower
00347           if( !TofMatched[j] ) {
00348 
00349             Identifier id((*(beginOfTofTrackCol+j))->tofID());
00350             int barrel_ec = TofID::barrel_ec(id);
00351             int layer = TofID::layer(id);
00352             int im = TofID::phi_module(id);
00353             im += layer * 88;
00354 
00355             if(module!=barrel_ec) continue;
00356             
00357             int dPhi;
00358             if(layer == 0) {
00359               dPhi = abs(im - nphi1);
00360             } else {
00361               dPhi = abs(im - nphi2);
00362             }
00363             if(module==1) {
00364               dPhi = dPhi>=44 ? 88-dPhi : dPhi;
00365             } else {
00366               dPhi = dPhi>=24 ? 48-dPhi : dPhi;
00367             } 
00368 
00369             if(dPhi < dPhiMin) {
00370               dPhiMin = dPhi;
00371               indexOfTofNearest = j;
00372             }
00373           }
00374         }
00375 
00376         //match in z-direction
00377         if(indexOfTofNearest>=0) {
00378           HepPoint3D tofPos(0,0.867,(*(beginOfTofTrackCol+indexOfTofNearest))->zrhit());
00379           double matWindow = 0;                    
00380           double eShower = (*(beginOfEmcTrackCol+i))->e5x5();
00381           if(eShower>0) {
00382             matWindow = 0.01277+0.004268/sqrt(eShower);
00383           }
00384         }
00385 
00386         if(indexOfTofNearest>=0 && dPhiMin<=1) {  //if nearest Tof shower is found
00387           // calculate matching window for barrel
00388           double eShower = (*(beginOfEmcTrackCol+i))->e5x5();
00389           double matWindow = 0;
00390           if(eShower>0) {
00391             matWindow = 0.01277+0.004268/sqrt(eShower);
00392           }
00393           matWindow = 0.2;  //temp code
00394 
00395           HepPoint3D tofPos(0,0.867,(*(beginOfTofTrackCol+indexOfTofNearest))->zrhit());
00396           if(fabs(tofPos.theta()-emcPos.theta())<matWindow || module!=1) {
00397             aNewEvtRecTrack->addTofTrack(*(beginOfTofTrackCol+indexOfTofNearest));
00398             TofMatched[indexOfTofNearest]=true;
00399           }
00400         }
00401 
00402               aNewEvtRecTrackCol->push_back(aNewEvtRecTrack);
00403               id++;
00404             }
00405         }
00406     }//end match
00407 
00408   //match statistics
00409   if(myMsgFlag) cout<<"Charged tracks:"<<numOfChargedTrks<<"    Ext track:"<<numOfExt
00410                     <<"  Shower:"<<numOfShower<<"  Matched shower:"<<numOfMatchedShower<<endl;
00411 
00412   //Part 4: register RecTrackListCol and EventList in TDS
00413   DataObject *aDataObject1;
00414   eventSvc()->findObject(EventModel::EvtRec::Event, aDataObject1);
00415   if ( aDataObject1 == NULL ) {
00416      EvtRecObject* aRecObject = new EvtRecObject; 
00417      StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::Event, aRecObject);
00418      if ( sc.isFailure() ) {
00419         log << MSG::FATAL << "Could not register EvtRecObject in TDS!" << endreq;
00420         return StatusCode::FAILURE;
00421      }
00422   }
00423 
00424   DataObject* aDataObject2;
00425   eventSvc()->findObject(EventModel::EvtRec::EvtRecEvent, aDataObject2);
00426   if ( aDataObject2 == NULL ) {
00427      EvtRecEvent* aRecEvent = new EvtRecEvent;
00428      aRecEvent->setTotalTracks(numOfChargedTrks+numOfShower-numOfMatchedShower);
00429      aRecEvent->setTotalCharged(numOfChargedTrks);
00430      aRecEvent->setTotalNeutral(numOfShower-numOfMatchedShower);
00431      StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::EvtRecEvent, aRecEvent);
00432      if ( sc.isFailure() ) {
00433         log << MSG::FATAL << "Could not register EvtRecEvent in TDS!" << endreq;
00434         return( StatusCode::FAILURE);
00435      }
00436   }
00437   else {
00438      EvtRecEvent* aRecEvent = dynamic_cast<EvtRecEvent*>(aDataObject2);
00439      aRecEvent->setTotalTracks(numOfChargedTrks+numOfShower-numOfMatchedShower);
00440      aRecEvent->setTotalCharged(numOfChargedTrks);
00441      aRecEvent->setTotalNeutral(numOfShower-numOfMatchedShower);
00442   }
00443 
00444   DataObject* aDataObject3;
00445   eventSvc()->findObject(EventModel::EvtRec::EvtRecTrackCol, aDataObject3);
00446   if ( aDataObject3 != NULL ) {
00447      IDataManagerSvc* dataMgrSvc = dynamic_cast<IDataManagerSvc*> (eventSvc());
00448      dataMgrSvc->clearSubTree(EventModel::EvtRec::EvtRecTrackCol);
00449      eventSvc()->unregisterObject(EventModel::EvtRec::EvtRecTrackCol);
00450   }
00451   
00452   StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::EvtRecTrackCol, aNewEvtRecTrackCol);
00453   if ( sc.isFailure() ) {
00454      log << MSG::FATAL << "Could not register EvtRecTrackCol in TDS!" << endreq;
00455      return( StatusCode::FAILURE);
00456   }
00457         
00458   //Part 5: check RecTrackListCol in TDS
00459   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00460   if(!evtRecTrackCol)
00461     {
00462       log<<MSG::FATAL<<"Could not find RecTrackListCol in TDS!"<<endreq;
00463     }
00464   
00465   EvtRecTrackCol::iterator itOfRecTrkListCol = evtRecTrackCol->begin();
00466   if(myMsgFlag)
00467     for(int i=0;itOfRecTrkListCol!=evtRecTrackCol->end();itOfRecTrkListCol++,i++)
00468       {
00469         cout<<"******************** Track "<<i<<": *********************"<<endl;
00470         cout<<"Track ID: "<<(*itOfRecTrkListCol)->trackId()<<endl;
00471         if((*itOfRecTrkListCol)->isMdcTrackValid())
00472           {
00473             RecMdcTrack* mdcTrk = (*itOfRecTrkListCol)->mdcTrack();
00474             double kappa = mdcTrk->helix(2);
00475             double tanl = mdcTrk->helix(4);
00476             cout<<"Mdc kappa, tanl: "<<kappa<<", "<<tanl<<endl;
00477           }
00478         if((*itOfRecTrkListCol)->isExtTrackValid())
00479           {
00480             RecExtTrack* extTrack = (*itOfRecTrkListCol)->extTrack();
00481             Hep3Vector emcPos = extTrack->emcPosition();
00482             cout<<"Ext Emc pos:"<<emcPos.x()<<","<<emcPos.y()<<","<<emcPos.z()<<endl;
00483           }
00484         if((*itOfRecTrkListCol)->isEmcShowerValid())
00485           {
00486             RecEmcShower* emcTrack = (*itOfRecTrkListCol)->emcShower();
00487             HepPoint3D emcPos = emcTrack->position();
00488             double x = emcPos.x();
00489             double y = emcPos.y();
00490             double z = emcPos.z();
00491             cout<<"Emc rec pos:"<<x<<","<<y<<","<<z<<endl;
00492           }
00493       }
00494   
00495   return StatusCode::SUCCESS;
00496 }

StatusCode EventAssemblyAlg::finalize  ) 
 

StatusCode EventAssemblyAlg::finalize  ) 
 

00500 {
00501   MsgStream log(msgSvc(), name());
00502   log << MSG::INFO << "in finalize()" << endreq;
00503   
00504   return StatusCode::SUCCESS;
00505 }

StatusCode EventAssemblyAlg::initialize  ) 
 

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         //return StatusCode::FAILURE;
00061       }
00062     }
00063   }
00064         return StatusCode::SUCCESS;
00065 }

double EventAssemblyAlg::phiCut double  p,
double  nSigma,
int  parId
[private]
 

double EventAssemblyAlg::phiCut double  p,
double  nSigma,
int  parId
[private]
 

00528 {
00529   if(p<0.3) p=0.3;
00530   if(parId<1||parId>3) parId=3;
00531   if(nSigma<=0) nSigma = 5.;
00532   double cut = myEmcPhiCut;
00533   switch(parId)
00534     {
00535     case 1:cut = fabs(exp(-2.187*p-2.945)+0.03236)+(exp(-2.977*p-3.558)+0.005566)*nSigma;
00536     case 2:cut = fabs(exp(-2.216*p-2.13)+0.03314)+(exp(-2.436*p-3.392)+0.005049)*nSigma;
00537     case 3:cut = fabs(exp(-1.63*p-2.931)+0.03223)+(exp(-3.192*p-2.756)+0.01533)*nSigma;
00538     }
00539   
00540   return cut;
00541 }

double EventAssemblyAlg::thetaCut double  p,
double  nSigma,
int  parId
[private]
 

double EventAssemblyAlg::thetaCut double  p,
double  nSigma,
int  parId
[private]
 

00511 {
00512   if(p<0.3) p=0.3;
00513   if(parId<1||parId>3) parId=3;
00514   if(nSigma<=0) nSigma = 5.;
00515   double cut = myEmcThetaCut;
00516   switch(parId)
00517     {
00518     case 1:cut = fabs(-0.00159)+(exp(-3.566*p-4.14)+0.006804)*nSigma;
00519     case 2:cut = fabs(-0.00145)+(exp(-4.268*p-3.305)+0.01129)*nSigma;
00520     case 3:cut = fabs(-0.00161)+(exp(-5.955*p-3.052)+0.01751)*nSigma;
00521     }
00522 
00523   return cut;
00524 }


Member Data Documentation

int EventAssemblyAlg::m_Output [private]
 

bool EventAssemblyAlg::myActiveCutFlag [private]
 

double EventAssemblyAlg::myEmcPhiCut [private]
 

double EventAssemblyAlg::myEmcPhiNSigmaCut [private]
 

double EventAssemblyAlg::myEmcThetaCut [private]
 

double EventAssemblyAlg::myEmcThetaNSigmaCut [private]
 

NTuple::Item<double> EventAssemblyAlg::myEnergyMatched [private]
 

NTuple::Item<double> EventAssemblyAlg::myEnergyMatched [private]
 

NTuple::Item<double> EventAssemblyAlg::myExted [private]
 

NTuple::Item<double> EventAssemblyAlg::myExted [private]
 

NTuple::Item<double> EventAssemblyAlg::myMatched [private]
 

NTuple::Item<double> EventAssemblyAlg::myMatched [private]
 

bool EventAssemblyAlg::myMsgFlag [private]
 

NTuple::Tuple* EventAssemblyAlg::myNTuple1 [private]
 

NTuple::Tuple* EventAssemblyAlg::myNTuple1 [private]
 

int EventAssemblyAlg::myParticleId [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:02:40 2011 for BOSS6.5.5 by  doxygen 1.3.9.1