BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
DQA_TOF.cxx
Go to the documentation of this file.
1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/ITHistSvc.h"
3#include "GaudiKernel/MsgStream.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include <vector>
6
7#include "DQAEvent/DQAEvent.h"
8#include "DstEvent/TofHitStatus.h"
9#include "EventModel/EventHeader.h"
10#include "EventModel/EventModel.h"
11#include "EvtRecEvent/EvtRecEvent.h"
12#include "EvtRecEvent/EvtRecTrack.h"
13
14#include "DQA_TOF.h"
15
16/////////////////////////////////////////////////////////////////////////////
18DQA_TOF::DQA_TOF( const std::string& name, ISvcLocator* pSvcLocator )
19 : Algorithm( name, pSvcLocator ) {
20
21 // Declare the properties
22}
23// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
24StatusCode DQA_TOF::initialize() {
25 MsgStream log( msgSvc(), name() );
26
27 log << MSG::INFO << "in initialize()" << endmsg;
28 StatusCode status;
29
30 StatusCode sc = service( "THistSvc", m_thsvc );
31 if ( sc.isFailure() )
32 {
33 log << MSG::ERROR << "Couldn't get THistSvc" << endmsg;
34 return StatusCode::FAILURE;
35 }
36
37 h_path = new TH1F( "h_path", "barrel ", 200, 0, 200 );
38 if ( m_thsvc->regHist( "/DQAHist/TOF/h_path", h_path ).isFailure() )
39 { log << MSG::ERROR << "Couldn't register h_path" << endmsg; }
40 h_Bzrhit = new TH1F( "h_Bzrhit", "barrel z hitmap", 240, -120, 120 );
41 m_thsvc->regHist( "/DQAHist/TOF/h_Bzrhit", h_Bzrhit ).ignore();
42 h_Ezrhit = new TH1F( "h_Ezrhit", "endcap z hitmap", 50, 40, 90 );
43 m_thsvc->regHist( "/DQAHist/TOF/h_Ezrhit", h_Ezrhit ).ignore();
44 h_ph = new TH1F( "h_ph", "barrel Q", 900, 0, 9000 );
45 m_thsvc->regHist( "/DQAHist/TOF/h_ph", h_ph ).ignore();
46
47 W_delT = new TH2F( "W_delT", "barrel west PMT delT", 176, 0, 176, 300, -1.5, 1.5 );
48 m_thsvc->regHist( "/DQAHist/TOF/W_delT", W_delT ).ignore();
49 E_delT = new TH2F( "E_delT", "barrel east PMT delT", 176, 0, 176, 300, -1.5, 1.5 );
50 m_thsvc->regHist( "/DQAHist/TOF/E_delT", E_delT ).ignore();
51 counter = new TH2F( "counter", "barrel counter delT", 176, 0, 176, 300, -1.5, 1.5 );
52 m_thsvc->regHist( "/DQAHist/TOF/counter", counter ).ignore();
53 cluster = new TH2F( "cluster", "barrel cluster delT", 88, 0, 88, 300, -1.5, 1.5 );
54 m_thsvc->regHist( "/DQAHist/TOF/cluster", cluster ).ignore();
55 EC_delT = new TH2F( "EC_delT", "endcap delT", 96, 0, 96, 300, -1.5, 1.5 );
56 m_thsvc->regHist( "/DQAHist/TOF/EC_delT", EC_delT ).ignore();
57 Bt_delT = new TH1F( "Bt_delT", "barrel delT", 300, -1.5, 1.5 );
58 m_thsvc->regHist( "/DQAHist/TOF/Bt_delT", Bt_delT ).ignore();
59 Et_delT = new TH1F( "Et_delT", "endcap delT", 300, -1.5, 1.5 );
60 m_thsvc->regHist( "/DQAHist/TOF/Et_delT", Et_delT ).ignore();
61
62 B_path =
63 new TH2F( "B_path", "barrel flight distance vs z", 240, -120, 120, 200, 0.0, 200.0 );
64 m_thsvc->regHist( "/DQAHist/TOF/B_path", B_path ).ignore();
65 E_path = new TH2F( "E_path", "endcap path distance vs z", 50, 40, 90, 200, 0.0, 200.0 );
66 m_thsvc->regHist( "/DQAHist/TOF/E_path", E_path ).ignore();
67
68 delT_z1 = new TH2F( "delT_z1", "barrel east delT vs Z", 240, -120, 120, 300, -1.5, 1.5 );
69 m_thsvc->regHist( "/DQAHist/TOF/delT_z1", delT_z1 ).ignore();
70 delT_z2 = new TH2F( "delT_z2", "barrel west delT vs Z", 240, -120, 120, 300, -1.5, 1.5 );
71 m_thsvc->regHist( "/DQAHist/TOF/delT_z2", delT_z2 ).ignore();
72 delT_z3 = new TH2F( "delT_z3", "barrel counter delT vs Z", 240, -120, 120, 300, -1.5, 1.5 );
73 m_thsvc->regHist( "/DQAHist/TOF/delT_z3", delT_z3 ).ignore();
74 delT_z4 = new TH2F( "delT_z4", "barrel cluster delT vs Z", 240, -120, 120, 300, -1.5, 1.5 );
75 m_thsvc->regHist( "/DQAHist/TOF/delT_z4", delT_z4 ).ignore();
76
77 W_delT_Q = new TH2F( "W_delT_Q", "west barrel delT vs Q", 900, 0, 9000, 300, -1.5, 1.5 );
78 m_thsvc->regHist( "/DQAHist/TOF/W_delT_Q", W_delT_Q ).ignore();
79 E_delT_Q = new TH2F( "E_delT_Q", "east barrel delT vs Q", 900, 0, 9000, 300, -1.5, 1.5 );
80 m_thsvc->regHist( "/DQAHist/TOF/E_delT_Q", E_delT_Q ).ignore();
81
82 delT_pp = new TH1F( "delT_pp", "proton delT", 300, -1.5, 1.5 );
83 m_thsvc->regHist( "/DQAHist/TOF/delT_pp", delT_pp ).ignore();
84 delT_pm = new TH1F( "delT_Pm", "anti-proton delT", 300, -1.5, 1.5 );
85 m_thsvc->regHist( "/DQAHist/TOF/delT_pm", delT_pm ).ignore();
86 delT_pi = new TH1F( "delT_pi", "pi delT", 300, -1.5, 1.5 );
87 m_thsvc->regHist( "/DQAHist/TOF/delT_pi", delT_pi ).ignore();
88 delT_k = new TH1F( "delT_k", "k delT", 300, -1.5, 1.5 );
89 m_thsvc->regHist( "/DQAHist/TOF/delT_k", delT_k ).ignore();
90 log << MSG::INFO << "DQA_TOF successfully return from initialize()" << endmsg;
91 return StatusCode::SUCCESS;
92}
93// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
94StatusCode DQA_TOF::execute() {
95 MsgStream log( msgSvc(), name() );
96 log << MSG::INFO << "in execute()" << endmsg;
97
98 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
99 int runNo = eventHeader->runNumber();
100 int event = eventHeader->eventNumber();
101 log << MSG::DEBUG << "run,evtnum=" << runNo << "," << event << endmsg;
102
103 SmartDataPtr<DQAEvent::DQAEvent> dqaevt( eventSvc(), "/Event/DQATag" );
104 if ( !dqaevt )
105 {
106 log << MSG::ERROR << "Error accessing DQAEvent" << endmsg;
107 return StatusCode::FAILURE;
108 }
109
110 log << MSG::DEBUG << "event tag = " << dqaevt->EventTag() << endmsg;
111
112 // if ( !dqaevt->Bhabha() )return StatusCode::SUCCESS;
113 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), EventModel::EvtRec::EvtRecEvent );
114 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(), EventModel::EvtRec::EvtRecTrackCol );
115 if ( dqaevt->Bhabha() )
116 {
117 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
118 {
119 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
120 // if ( (*itTrk)->partId() != 1 ) continue; // only e+, e-
121 if ( !( *itTrk )->isElectron() ) continue;
122 if ( !( *itTrk )->isTofTrackValid() ) continue;
123 SmartRefVector<RecTofTrack> tofTrkCol = ( *itTrk )->tofTrack();
124 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
125 for ( ; iter_tof != tofTrkCol.end(); iter_tof++ )
126 {
127 TofHitStatus status;
128 status.setStatus( ( *iter_tof )->status() );
129 int tofid = ( *iter_tof )->tofID();
130 double tof = ( *iter_tof )->tof();
131 double texpE = ( *iter_tof )->texpElectron();
132 double path = ( *iter_tof )->path();
133 double Q = ( *iter_tof )->ph();
134 double zrhit = ( *iter_tof )->zrhit();
135
136 if ( status.is_barrel() )
137 {
138 h_Bzrhit->Fill( zrhit );
139 h_path->Fill( path );
140 // h_ph->Fill(Q);
141 if ( status.is_readout() )
142 {
143 h_ph->Fill( Q );
144 B_path->Fill( zrhit, path );
145 if ( status.is_east() )
146 { // barrel readout east
147 E_delT->Fill( tofid, tof - texpE );
148 delT_z1->Fill( zrhit, tof - texpE );
149 E_delT_Q->Fill( Q, tof - texpE );
150 }
151 else
152 { // barrel readout west
153 W_delT->Fill( tofid, tof - texpE );
154 delT_z2->Fill( zrhit, tof - texpE );
155 W_delT_Q->Fill( Q, tof - texpE );
156 }
157 } // end readout
158 if ( !status.is_readout() && status.is_counter() )
159 { // barrel counter
160 counter->Fill( tofid, tof - texpE );
161 delT_z3->Fill( zrhit, tof - texpE );
162 }
163 if ( !status.is_counter() && status.is_cluster() )
164 { // barrel cluster
165 cluster->Fill( tofid, tof - texpE );
166 Bt_delT->Fill( tof - texpE );
167 delT_z4->Fill( zrhit, tof - texpE );
168 }
169 }
170 else
171 { // endcap
172 E_path->Fill( zrhit, path );
173 h_Ezrhit->Fill( zrhit );
174 EC_delT->Fill( tofid, tof - texpE );
175 Et_delT->Fill( tof - texpE );
176 }
177 } // loop 7 info fo tof
178 } // loop every track
179 }
180 else
181 {
182 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
183 {
184 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
185 // if ( (*itTrk)->partId() != 1 ) continue; // only e+, e-
186 if ( !( *itTrk )->isTofTrackValid() ) continue;
187 SmartRefVector<RecTofTrack> tofTrkCol = ( *itTrk )->tofTrack();
188 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
189 for ( ; iter_tof != tofTrkCol.end(); iter_tof++ )
190 {
191 TofHitStatus status;
192 status.setStatus( ( *iter_tof )->status() );
193 if ( !status.is_cluster() ) continue;
194 double tof = ( *iter_tof )->tof();
195 double texpPi = ( *iter_tof )->texpPion();
196 double texpK = ( *iter_tof )->texpKaon();
197 double texpP = ( *iter_tof )->texpProton();
198 // if((*itTrk)->partId()==3){ //pi
199 if ( ( *itTrk )->isPion() )
200 {
201 double texpPi = ( *iter_tof )->texpPion();
202 delT_pi->Fill( tof - texpPi );
203 }
204 // else if((*itTrk)->partId()==4){ //k
205 else if ( ( *itTrk )->isKaon() )
206 {
207 double texpK = ( *iter_tof )->texpKaon();
208 delT_k->Fill( tof - texpK );
209 }
210 // else if((*itTrk)->partId()==5){ //p
211 else if ( ( *itTrk )->isProton() )
212 {
213 double texpP = ( *iter_tof )->texpProton();
214 if ( !( *itTrk )->isMdcTrackValid() ) continue;
215 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
216 if ( mdcTrk->charge() > 0 ) delT_pp->Fill( tof - texpP );
217 else delT_pm->Fill( tof - texpP );
218 }
219 }
220 }
221 }
222 return StatusCode::SUCCESS;
223}
224// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
225StatusCode DQA_TOF::finalize() {
226 MsgStream log( msgSvc(), name() );
227 log << MSG::INFO << "in finalize()" << endmsg;
228
229 return StatusCode::SUCCESS;
230}
DECLARE_COMPONENT(BesBdkRc)
int runNo
Definition DQA_TO_DB.cxx:13
EvtRecTrackCol::iterator EvtRecTrackIterator
IMessageSvc * msgSvc()
StatusCode finalize()
Definition DQA_TOF.cxx:225
StatusCode execute()
Definition DQA_TOF.cxx:94
DQA_TOF(const std::string &name, ISvcLocator *pSvcLocator)
Definition DQA_TOF.cxx:18
StatusCode initialize()
Definition DQA_TOF.cxx:24
void setStatus(unsigned int status)