BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesMdcTrig.cxx
Go to the documentation of this file.
1//---------------------------------------------------------------------------//
2// BOOST --- BESIII Object_Oriented Simulation Tool /
3//
4//---------------------------------------------------------------------------/
5//
6// Description:
7// Author: Caogf
8// Created: Feb, 2006
9// Modified:
10// Comment:
11
12#include "Trigger/BesMdcTrig.h"
13#include "Trigger/MdcTCount.h"
14#include "Trigger/TrigPara.h"
15#include <algorithm>
16#include <iostream>
17#include <vector>
18
19#include "GaudiKernel/Bootstrap.h"
20#include "GaudiKernel/IDataProviderSvc.h"
21#include "GaudiKernel/ISvcLocator.h"
24
25using namespace TrigConf;
26
27BesMdcTrig::BesMdcTrig() { m_MdcTCount = new MdcTCount(); }
29 if ( m_MdcTCount ) delete m_MdcTCount;
30}
32 StatusCode sc = Gaudi::svcLocator()->service( "BesGlobalTrigSvc", m_tmpSvc );
33 m_pIBGT = dynamic_cast<BesGlobalTrigSvc*>( m_tmpSvc );
34
35 NLtrk1 = false;
36 NLtrk2 = false;
37 NLtrkN = false;
38 LTrk_BB = false;
39 NStrk1 = false;
40 NStrk2 = false;
41 NStrkN = false;
42 STrk_BB = false;
43 NItrk1 = false;
44 NItrk2 = false;
45
46 if ( !m_MdcTCount ) std::cerr << "can not initialize mdcTCount" << std::endl;
47 m_MdcTCount->GetTCount();
48 int nItrk1 = m_MdcTCount->GetnItrkSL1();
49 int nItrk2 = m_MdcTCount->GetnItrkSL2();
50
51 // std::cout<<"track number is "<<s<<" "<<l<<std::endl;
52 // trigger condition of short and long track in outer room
53 int MAXMDCTRACK = m_pIBGT->getMAXMDCTRACK();
54 if ( ( nItrk1 >= 1 ) || ( nItrk2 >= 1 ) ) NItrk1 = true;
55 if ( ( nItrk1 >= 1 ) && ( nItrk2 >= 1 ) ) NItrk2 = true;
56
57 // trigger condition of babar using short track information
58 std::vector<int> stmp;
59 std::vector<int>::iterator siter;
60 stmp.clear();
61 stmp = m_MdcTCount->GetstrackId();
62 int nstrk = stmp.size();
63 if ( nstrk >= 1 ) NStrk1 = true;
64 if ( nstrk >= 2 ) NStrk2 = true;
65 if ( nstrk >= MAXMDCTRACK ) NStrkN = true;
66
67 // if(stmp.empty()) std::cout<<"have no short track id infor in vector tmp"<<std::endl;
68
69 for ( siter = stmp.begin(); siter != stmp.end(); siter++ )
70 {
71 for ( int i = 0; i < 15; i++ )
72 {
73 if ( ( ( *siter ) + i + 57 ) > 127 )
74 {
75 int id;
76 id = ( *siter ) + i + 57 - 128;
77 if ( find( stmp.begin(), stmp.end(), id ) != stmp.end() )
78 {
79 STrk_BB = true;
80 break;
81 }
82 }
83 else
84 {
85 int id;
86 id = ( *siter ) + i + 57;
87 if ( find( stmp.begin(), stmp.end(), id ) != stmp.end() )
88 {
89 STrk_BB = true;
90 break;
91 }
92 }
93 }
94
95 if ( STrk_BB == true ) break;
96 }
97 // trigger condition of babar using long track information
98 std::vector<int> ltmp;
99 std::vector<int>::iterator liter;
100 ltmp.clear();
101 ltmp = m_MdcTCount->GetltrackId();
102 int nltrk = ltmp.size();
103 if ( nltrk >= 1 ) NLtrk1 = true;
104 if ( nltrk >= 2 ) NLtrk2 = true;
105 if ( nltrk >= MAXMDCTRACK ) NLtrkN = true;
106 // if(ltmp.empty()) std::cout<<"have no long track id infor in vector tmp"<<std::endl;
107 for ( liter = ltmp.begin(); liter != ltmp.end(); liter++ )
108 {
109 for ( int i = 0; i < 15; i++ )
110 {
111 if ( ( ( *liter ) + i + 57 ) > 127 )
112 {
113 int id;
114 id = ( *liter ) + i + 57 - 128;
115 if ( find( ltmp.begin(), ltmp.end(), id ) != ltmp.end() )
116 {
117 LTrk_BB = true;
118 break;
119 }
120 }
121 else
122 {
123 int id;
124 id = ( *liter ) + i + 57;
125 if ( find( ltmp.begin(), ltmp.end(), id ) != ltmp.end() )
126 {
127 LTrk_BB = true;
128 break;
129 }
130 }
131 }
132 // std::cout<<"LTrk_BB is "<<LTrk_BB<<std::endl;
133 if ( LTrk_BB == true ) break;
134 }
135
136 // set trigger conditions in service
137 m_pIBGT->setSTrk_BB( STrk_BB );
138 m_pIBGT->setNStrkN( NStrkN );
139 m_pIBGT->setNStrk2( NStrk2 );
140 m_pIBGT->setNStrk1( NStrk1 );
141 m_pIBGT->setLTrk_BB( LTrk_BB );
142 m_pIBGT->setNLtrkN( NLtrkN );
143 m_pIBGT->setNLtrk2( NLtrk2 );
144 m_pIBGT->setNLtrk1( NLtrk1 );
145 m_pIBGT->setNItrk2( NItrk2 );
146 m_pIBGT->setNItrk1( NItrk1 );
147}
void startMdcTrig()