/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Trigger/Trigger/Trigger-00-01-05/src/BesMdcTrig.cxx

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------//
00002 //      BOOST --- BESIII Object_Oriented Simulation Tool                     /
00003 //
00004 //---------------------------------------------------------------------------/
00005 //
00006 //Description:
00007 //Author:   Caogf
00008 //Created:  Feb, 2006
00009 //Modified:
00010 //Comment:
00011 
00012 #include "Trigger/BesMdcTrig.h"
00013 #include "Trigger/MdcTCount.h"
00014 #include "Trigger/TrigPara.h"
00015 #include <iostream>
00016 #include <vector>
00017 #include <algorithm>
00018 
00019 #include "Trigger/IBesGlobalTrigSvc.h"
00020 #include "Trigger/BesGlobalTrigSvc.h"
00021 #include "GaudiKernel/ISvcLocator.h"
00022 #include "GaudiKernel/Bootstrap.h"
00023 #include "GaudiKernel/IDataProviderSvc.h"
00024 
00025 using namespace TrigConf;
00026 
00027 BesMdcTrig::BesMdcTrig()
00028 {
00029   m_MdcTCount = new MdcTCount();
00030 }
00031 BesMdcTrig::~BesMdcTrig()
00032 {
00033   if(m_MdcTCount) delete m_MdcTCount;
00034 }
00035 void BesMdcTrig::startMdcTrig()
00036 {
00037   StatusCode sc = Gaudi::svcLocator()->service("BesGlobalTrigSvc", m_tmpSvc);
00038   m_pIBGT = dynamic_cast<BesGlobalTrigSvc* >(m_tmpSvc);
00039 
00040   NLtrk1 = false;
00041   NLtrk2 = false;
00042   NLtrkN = false;
00043   LTrk_BB = false;
00044   NStrk1 = false;
00045   NStrk2 = false;
00046   NStrkN = false;
00047   STrk_BB = false;
00048   NItrk1 = false;
00049   NItrk2 = false;
00050 
00051   if(!m_MdcTCount) std::cerr<<"can not initialize mdcTCount"<<std::endl;
00052   m_MdcTCount->GetTCount();
00053   int nItrk1 = m_MdcTCount->GetnItrkSL1();
00054   int nItrk2 = m_MdcTCount->GetnItrkSL2();
00055 
00056 //  std::cout<<"track number is "<<s<<" "<<l<<std::endl;
00057   //trigger condition of short and long track in outer room
00058   int MAXMDCTRACK = m_pIBGT->getMAXMDCTRACK();
00059   if((nItrk1 >= 1) || (nItrk2 >= 1)) NItrk1 = true;
00060   if((nItrk1 >= 1) && (nItrk2 >= 1)) NItrk2 = true;
00061    
00062   //trigger condition of babar using short track information
00063   std::vector<int> stmp;
00064   std::vector<int>::iterator siter;
00065   stmp.clear();
00066   stmp = m_MdcTCount->GetstrackId();
00067   int nstrk = stmp.size();
00068   if(nstrk>=1) NStrk1 = true;
00069   if(nstrk>=2) NStrk2 = true;
00070   if(nstrk>=MAXMDCTRACK) NStrkN = true;
00071   
00072  // if(stmp.empty()) std::cout<<"have no short track id infor in vector tmp"<<std::endl;
00073   
00074   for(siter=stmp.begin();siter!=stmp.end();siter++)
00075   {
00076     for(int i=0;i<15;i++)
00077     {
00078       if(((*siter)+i+57)>127) 
00079       {
00080         int id;
00081         id = (*siter)+i+57-128;
00082         if(find(stmp.begin(),stmp.end(),id)!=stmp.end()) { STrk_BB = true; break; }
00083       }
00084       else
00085       {
00086         int id;
00087         id = (*siter)+i+57;
00088         if(find(stmp.begin(),stmp.end(),id)!=stmp.end()) { STrk_BB = true; break; }
00089       }
00090     }
00091     
00092     if(STrk_BB == true) break;
00093   }
00094   //trigger condition of babar using long track information
00095   std::vector<int> ltmp;
00096   std::vector<int>::iterator liter;
00097   ltmp.clear();
00098   ltmp = m_MdcTCount->GetltrackId();
00099   int nltrk = ltmp.size();
00100   if(nltrk>=1) NLtrk1 = true;
00101   if(nltrk>=2) NLtrk2 = true;
00102   if(nltrk>=MAXMDCTRACK) NLtrkN = true;
00103 //  if(ltmp.empty()) std::cout<<"have no long track id infor in vector tmp"<<std::endl;
00104   for(liter=ltmp.begin();liter!=ltmp.end();liter++)
00105   {
00106     for(int i=0;i<15;i++)
00107     {
00108       if(((*liter)+i+57)>127)
00109       {
00110         int id;
00111         id = (*liter)+i+57-128;
00112         if(find(ltmp.begin(),ltmp.end(),id)!=ltmp.end()) { LTrk_BB = true; break; }
00113       }
00114       else
00115       {
00116         int id;
00117         id = (*liter)+i+57;
00118         if(find(ltmp.begin(),ltmp.end(),id)!=ltmp.end()) { LTrk_BB = true; break; }
00119       }
00120     }
00121 //    std::cout<<"LTrk_BB is "<<LTrk_BB<<std::endl;
00122     if(LTrk_BB == true) break;
00123   }         
00124 
00125   //set trigger conditions in service
00126   m_pIBGT->setSTrk_BB(STrk_BB);
00127   m_pIBGT->setNStrkN(NStrkN);
00128   m_pIBGT->setNStrk2(NStrk2);
00129   m_pIBGT->setNStrk1(NStrk1);
00130   m_pIBGT->setLTrk_BB(LTrk_BB);
00131   m_pIBGT->setNLtrkN(NLtrkN);
00132   m_pIBGT->setNLtrk2(NLtrk2);
00133   m_pIBGT->setNLtrk1(NLtrk1);
00134   m_pIBGT->setNItrk2(NItrk2);
00135   m_pIBGT->setNItrk1(NItrk1);
00136 }

Generated on Tue Nov 29 23:14:40 2016 for BOSS_7.0.2 by  doxygen 1.4.7