99 MsgStream log(
msgSvc(), name() );
101 log << MSG::INFO <<
"in initialize()" << endmsg;
103 status = service(
"THistSvc", m_thistsvc );
104 if ( status.isFailure() )
106 log << MSG::INFO <<
"Unable to retrieve pointer to THistSvc" << endmsg;
110 m_mumu_mass =
new TH1F(
"mumu_mass",
"mumu_mass", 80, m_ecms - 0.3, m_ecms + 0.5 );
111 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_mass", m_mumu_mass );
112 m_mumu_acoll =
new TH1F(
"mumu_acoll",
"mumu_acoll", 60, 0, 6 );
113 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_acoll", m_mumu_acoll );
114 m_mumu_eop_mup =
new TH1F(
"mumu_eop_mup",
"mumu_eop_mup", 100, 0., 0.5 );
115 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_eop_mup", m_mumu_eop_mup );
116 m_mumu_eop_mum =
new TH1F(
"mumu_eop_mum",
"mumu_eop_mum", 100, 0., 0.5 );
117 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_eop_mum", m_mumu_eop_mum );
118 m_mumu_costheta_mup =
new TH1F(
"mumu_costheta_mup",
"mumu_costheta_mup", 100, -1, 1 );
119 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_costheta_mup", m_mumu_costheta_mup );
120 m_mumu_costheta_mum =
new TH1F(
"mumu_costheta_mum",
"mumu_costheta_mum", 100, -1, 1 );
121 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_costheta_mum", m_mumu_costheta_mum );
123 m_mumu_phi_mup =
new TH1F(
"mumu_phi_mup",
"mumu_phi_mup", 120, -3.2, 3.2 );
124 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_phi_mup", m_mumu_phi_mup );
125 m_mumu_phi_mum =
new TH1F(
"mumu_phi_mum",
"mumu_phi_mum", 120, -3.2, 3.2 );
126 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_phi_mum", m_mumu_phi_mum );
128 m_mumu_nneu =
new TH1F(
"mumu_nneu",
"mumu_nneu", 5, 0, 5 );
129 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_nneu", m_mumu_nneu );
130 m_mumu_nlay =
new TH1F(
"mumu_nlay",
"mumu_nlay", 9, 0, 10 );
131 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_nlay", m_mumu_nlay );
132 m_mumu_nhit =
new TH1F(
"mumu_nhit",
"mumu_nhit", 19, 0, 20 );
133 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_nhit", m_mumu_nhit );
135 m_mumu_eemc_mup =
new TH1F(
"mumu_eemc_mup",
"mumu_eemc_mup", 100, 0.0, 1.0 );
136 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_eemc_mup", m_mumu_eemc_mup );
137 m_mumu_eemc_mum =
new TH1F(
"mumu_eemc_mum",
"mumu_eemc_mum", 100, 0.0, 1.0 );
138 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_eemc_mum", m_mumu_eemc_mum );
139 m_mumu_x_mup =
new TH1F(
"mumu_x_mup",
"mumu_x_mup", 100, -1.0, 1.0 );
140 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_x_mup", m_mumu_x_mup );
141 m_mumu_y_mup =
new TH1F(
"mumu_y_mup",
"mumu_y_mup", 100, -1.0, 1.0 );
142 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_y_mup", m_mumu_y_mup );
143 m_mumu_z_mup =
new TH1F(
"mumu_z_mup",
"mumu_z_mup", 100, -10.0, 10.0 );
144 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_z_mup", m_mumu_z_mup );
145 m_mumu_x_mum =
new TH1F(
"mumu_x_mum",
"mumu_x_mum", 100, -1.0, 1.0 );
146 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_x_mum", m_mumu_x_mum );
147 m_mumu_y_mum =
new TH1F(
"mumu_y_mum",
"mumu_y_mum", 100, -1.0, 1.0 );
148 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_y_mum", m_mumu_y_mum );
149 m_mumu_z_mum =
new TH1F(
"mumu_z_mum",
"mumu_z_mum", 100, -10.0, 10.0 );
150 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_z_mum", m_mumu_z_mum );
152 m_mumu_px_mup =
new TH1F(
"mumu_px_mup",
"mumu_px_mup", 200, -2.0, 2.0 );
153 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_px_mup", m_mumu_px_mup );
154 m_mumu_py_mup =
new TH1F(
"mumu_py_mup",
"mumu_py_mup", 200, -2.0, 2.0 );
155 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_py_mup", m_mumu_py_mup );
156 m_mumu_pz_mup =
new TH1F(
"mumu_pz_mup",
"mumu_pz_mup", 200, -2.0, 2.0 );
157 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pz_mup", m_mumu_pz_mup );
158 m_mumu_p_mup =
new TH1F(
"mumu_p_mup",
"mumu_p_mup", 100, 1.0, 2.0 );
159 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_p_mup", m_mumu_p_mup );
160 m_mumu_px_mum =
new TH1F(
"mumu_px_mum",
"mumu_px_mum", 100, -2.0, 2.0 );
161 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_px_mum", m_mumu_px_mum );
162 m_mumu_py_mum =
new TH1F(
"mumu_py_mum",
"mumu_py_mum", 100, -2.0, 2.0 );
163 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_py_mum", m_mumu_py_mum );
164 m_mumu_pz_mum =
new TH1F(
"mumu_pz_mum",
"mumu_pz_mum", 100, -2.0, 2.0 );
165 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pz_mum", m_mumu_pz_mum );
166 m_mumu_p_mum =
new TH1F(
"mumu_p_mum",
"mumu_p_mum", 100, 1.0, 2.0 );
167 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_p_mum", m_mumu_p_mum );
168 m_mumu_deltatof =
new TH1F(
"mumu_deltatof",
"mumu_deltatof", 50, 0.0, 10.0 );
169 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_deltatof", m_mumu_deltatof );
171 m_mumu_pidchidedx_mup =
new TH1F(
"mumu_pidchidedx_mup",
"mumu_pidchidedx_mup", 160, -4, 4 );
172 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchidedx_mup", m_mumu_pidchidedx_mup );
173 m_mumu_pidchidedx_mum =
new TH1F(
"mumu_pidchidedx_mum",
"mumu_pidchidedx_mum", 160, -4, 4 );
174 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchidedx_mum", m_mumu_pidchidedx_mum );
175 m_mumu_pidchitof1_mup =
new TH1F(
"mumu_pidchitof1_mup",
"mumu_pidchitof1_mup", 160, -4, 4 );
176 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchitof1_mup", m_mumu_pidchitof1_mup );
177 m_mumu_pidchitof1_mum =
new TH1F(
"mumu_pidchitof1_mum",
"mumu_pidchitof1_mum", 160, -4, 4 );
178 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchitof1_mum", m_mumu_pidchitof1_mum );
179 m_mumu_pidchitof2_mup =
new TH1F(
"mumu_pidchitof2_mup",
"mumu_pidchitof2_mup", 160, -4, 4 );
180 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchitof2_mup", m_mumu_pidchitof2_mup );
181 m_mumu_pidchitof2_mum =
new TH1F(
"mumu_pidchitof2_mum",
"mumu_pidchitof2_mum", 160, -4, 4 );
182 status = m_thistsvc->regHist(
"/DQAHist/Dimu/mumu_pidchitof2_mum", m_mumu_pidchitof2_mum );
184 NTuplePtr nt1(
ntupleSvc(),
"DQAFILE/Dimu" );
185 if ( nt1 ) m_tuple1 = nt1;
188 m_tuple1 =
ntupleSvc()->book(
"DQAFILE/Dimu", CLID_ColumnWiseTuple,
"N-Tuple" );
191 status = m_tuple1->addItem(
"run", m_run );
192 status = m_tuple1->addItem(
"rec", m_rec );
193 status = m_tuple1->addItem(
"Nchrg", m_ncharg );
194 status = m_tuple1->addItem(
"Nneu", m_nneu, 0, 40 );
195 status = m_tuple1->addItem(
"NGch", m_ngch, 0, 40 );
196 status = m_tuple1->addItem(
"NGam", m_nGam );
198 status = m_tuple1->addItem(
"dimutag", m_dimutag );
200 status = m_tuple1->addItem(
"acoll", m_acoll );
201 status = m_tuple1->addItem(
"acopl", m_acopl );
202 status = m_tuple1->addItem(
"deltatof", m_deltatof );
203 status = m_tuple1->addItem(
"eop1", m_eop1 );
204 status = m_tuple1->addItem(
"eop2", m_eop2 );
205 status = m_tuple1->addItem(
"eoeb1", m_eoeb1 );
206 status = m_tuple1->addItem(
"eoeb2", m_eoeb2 );
207 status = m_tuple1->addItem(
"poeb1", m_poeb1 );
208 status = m_tuple1->addItem(
"poeb2", m_poeb2 );
209 status = m_tuple1->addItem(
"etoeb1", m_etoeb1 );
210 status = m_tuple1->addItem(
"etoeb2", m_etoeb2 );
211 status = m_tuple1->addItem(
"mucinfo1", m_mucinfo1 );
212 status = m_tuple1->addItem(
"mucinfo2", m_mucinfo2 );
214 status = m_tuple1->addIndexedItem(
"delang", m_nneu, m_delang );
215 status = m_tuple1->addIndexedItem(
"delphi", m_nneu, m_delphi );
216 status = m_tuple1->addIndexedItem(
"delthe", m_nneu, m_delthe );
217 status = m_tuple1->addIndexedItem(
"npart", m_nneu, m_npart );
218 status = m_tuple1->addIndexedItem(
"nemchits", m_nneu, m_nemchits );
219 status = m_tuple1->addIndexedItem(
"module", m_nneu, m_module );
220 status = m_tuple1->addIndexedItem(
"x", m_nneu, m_x );
221 status = m_tuple1->addIndexedItem(
"y", m_nneu, m_y );
222 status = m_tuple1->addIndexedItem(
"z", m_nneu, m_z );
223 status = m_tuple1->addIndexedItem(
"px", m_nneu, m_px );
224 status = m_tuple1->addIndexedItem(
"py", m_nneu, m_py );
225 status = m_tuple1->addIndexedItem(
"pz", m_nneu, m_pz );
226 status = m_tuple1->addIndexedItem(
"theta", m_nneu, m_theta );
227 status = m_tuple1->addIndexedItem(
"phi", m_nneu, m_phi );
228 status = m_tuple1->addIndexedItem(
"dx", m_nneu, m_dx );
229 status = m_tuple1->addIndexedItem(
"dy", m_nneu, m_dy );
230 status = m_tuple1->addIndexedItem(
"dz", m_nneu, m_dz );
231 status = m_tuple1->addIndexedItem(
"dtheta", m_nneu, m_dtheta );
232 status = m_tuple1->addIndexedItem(
"dphi", m_nneu, m_dphi );
233 status = m_tuple1->addIndexedItem(
"energy", m_nneu, m_energy );
234 status = m_tuple1->addIndexedItem(
"dE", m_nneu, m_dE );
235 status = m_tuple1->addIndexedItem(
"eSeed", m_nneu, m_eSeed );
236 status = m_tuple1->addIndexedItem(
"nSeed", m_nneu, m_nSeed );
237 status = m_tuple1->addIndexedItem(
"e3x3", m_nneu, m_e3x3 );
238 status = m_tuple1->addIndexedItem(
"e5x5", m_nneu, m_e5x5 );
239 status = m_tuple1->addIndexedItem(
"secondMoment", m_nneu, m_secondMoment );
240 status = m_tuple1->addIndexedItem(
"latMoment", m_nneu, m_latMoment );
241 status = m_tuple1->addIndexedItem(
"a20Moment", m_nneu, m_a20Moment );
242 status = m_tuple1->addIndexedItem(
"a42Moment", m_nneu, m_a42Moment );
243 status = m_tuple1->addIndexedItem(
"getTime", m_nneu, m_getTime );
244 status = m_tuple1->addIndexedItem(
"getEAll", m_nneu, m_getEAll );
246 status = m_tuple1->addIndexedItem(
"charge", m_ngch, m_charge );
247 status = m_tuple1->addIndexedItem(
"vx", m_ngch, m_vx0 );
248 status = m_tuple1->addIndexedItem(
"vy", m_ngch, m_vy0 );
249 status = m_tuple1->addIndexedItem(
"vz", m_ngch, m_vz0 );
251 status = m_tuple1->addIndexedItem(
"px", m_ngch, m_px );
252 status = m_tuple1->addIndexedItem(
"py", m_ngch, m_py );
253 status = m_tuple1->addIndexedItem(
"pz", m_ngch, m_pz );
254 status = m_tuple1->addIndexedItem(
"p", m_ngch, m_p );
256 status = m_tuple1->addIndexedItem(
"kal_vx", m_ngch, m_kal_vx0 );
257 status = m_tuple1->addIndexedItem(
"kal_vy", m_ngch, m_kal_vy0 );
258 status = m_tuple1->addIndexedItem(
"kal_vz", m_ngch, m_kal_vz0 );
260 status = m_tuple1->addIndexedItem(
"kal_px", m_ngch, m_kal_px );
261 status = m_tuple1->addIndexedItem(
"kal_py", m_ngch, m_kal_py );
262 status = m_tuple1->addIndexedItem(
"kal_pz", m_ngch, m_kal_pz );
263 status = m_tuple1->addIndexedItem(
"kal_p", m_ngch, m_kal_p );
265 status = m_tuple1->addIndexedItem(
"probPH", m_ngch, m_probPH );
266 status = m_tuple1->addIndexedItem(
"normPH", m_ngch, m_normPH );
267 status = m_tuple1->addIndexedItem(
"chie", m_ngch, m_chie );
268 status = m_tuple1->addIndexedItem(
"chimu", m_ngch, m_chimu );
269 status = m_tuple1->addIndexedItem(
"chipi", m_ngch, m_chipi );
270 status = m_tuple1->addIndexedItem(
"chik", m_ngch, m_chik );
271 status = m_tuple1->addIndexedItem(
"chip", m_ngch, m_chip );
272 status = m_tuple1->addIndexedItem(
"ghit", m_ngch, m_ghit );
273 status = m_tuple1->addIndexedItem(
"thit", m_ngch, m_thit );
275 status = m_tuple1->addIndexedItem(
"e_emc", m_ngch, m_e_emc );
276 status = m_tuple1->addIndexedItem(
"phi_emc", m_ngch, m_phi_emc );
277 status = m_tuple1->addIndexedItem(
"theta_emc", m_ngch, m_theta_emc );
279 status = m_tuple1->addIndexedItem(
"nhit_muc", m_ngch, m_nhit_muc );
280 status = m_tuple1->addIndexedItem(
"nlay_muc", m_ngch, m_nlay_muc );
281 status = m_tuple1->addIndexedItem(
"t_btof", m_ngch, m_t_btof );
282 status = m_tuple1->addIndexedItem(
"t_etof", m_ngch, m_t_etof );
283 status = m_tuple1->addIndexedItem(
"qual_etof", m_ngch, m_qual_etof );
284 status = m_tuple1->addIndexedItem(
"tof_etof", m_ngch, m_tof_etof );
285 status = m_tuple1->addIndexedItem(
"te_etof", m_ngch, m_te_etof );
286 status = m_tuple1->addIndexedItem(
"tmu_etof", m_ngch, m_tmu_etof );
287 status = m_tuple1->addIndexedItem(
"tpi_etof", m_ngch, m_tpi_etof );
288 status = m_tuple1->addIndexedItem(
"tk_etof", m_ngch, m_tk_etof );
289 status = m_tuple1->addIndexedItem(
"tp_etof", m_ngch, m_tp_etof );
291 status = m_tuple1->addIndexedItem(
"qual_btof1", m_ngch, m_qual_btof1 );
292 status = m_tuple1->addIndexedItem(
"tof_btof1", m_ngch, m_tof_btof1 );
293 status = m_tuple1->addIndexedItem(
"te_btof1", m_ngch, m_te_btof1 );
294 status = m_tuple1->addIndexedItem(
"tmu_btof1", m_ngch, m_tmu_btof1 );
295 status = m_tuple1->addIndexedItem(
"tpi_btof1", m_ngch, m_tpi_btof1 );
296 status = m_tuple1->addIndexedItem(
"tk_btof1", m_ngch, m_tk_btof1 );
297 status = m_tuple1->addIndexedItem(
"tp_btof1", m_ngch, m_tp_btof1 );
299 status = m_tuple1->addIndexedItem(
"qual_btof2", m_ngch, m_qual_btof2 );
300 status = m_tuple1->addIndexedItem(
"tof_btof2", m_ngch, m_tof_btof2 );
301 status = m_tuple1->addIndexedItem(
"te_btof2", m_ngch, m_te_btof2 );
302 status = m_tuple1->addIndexedItem(
"tmu_btof2", m_ngch, m_tmu_btof2 );
303 status = m_tuple1->addIndexedItem(
"tpi_btof2", m_ngch, m_tpi_btof2 );
304 status = m_tuple1->addIndexedItem(
"tk_btof2", m_ngch, m_tk_btof2 );
305 status = m_tuple1->addIndexedItem(
"tp_btof2", m_ngch, m_tp_btof2 );
306 status = m_tuple1->addIndexedItem(
"pidcode", m_ngch, m_pidcode );
307 status = m_tuple1->addIndexedItem(
"pidprob", m_ngch, m_pidprob );
308 status = m_tuple1->addIndexedItem(
"pidchiDedx", m_ngch, m_pidchiDedx );
309 status = m_tuple1->addIndexedItem(
"pidchiTof1", m_ngch, m_pidchiTof1 );
310 status = m_tuple1->addIndexedItem(
"pidchiTof2", m_ngch, m_pidchiTof2 );
312 status = m_tuple1->addItem(
"px_cms_ep", m_px_cms_ep );
313 status = m_tuple1->addItem(
"py_cms_ep", m_py_cms_ep );
314 status = m_tuple1->addItem(
"pz_cms_ep", m_pz_cms_ep );
315 status = m_tuple1->addItem(
"e_cms_ep", m_e_cms_ep );
316 status = m_tuple1->addItem(
"cos_ep", m_cos_ep );
317 status = m_tuple1->addItem(
"px_cms_em", m_px_cms_em );
318 status = m_tuple1->addItem(
"py_cms_em", m_py_cms_em );
319 status = m_tuple1->addItem(
"pz_cms_em", m_pz_cms_em );
320 status = m_tuple1->addItem(
"e_cms_em", m_e_cms_em );
321 status = m_tuple1->addItem(
"cos_em", m_cos_em );
322 status = m_tuple1->addItem(
"mass_ee", m_mass_ee );
323 status = m_tuple1->addItem(
"emax", m_emax );
324 status = m_tuple1->addItem(
"esum", m_esum );
325 status = m_tuple1->addItem(
"npip", m_npip );
326 status = m_tuple1->addItem(
"npim", m_npim );
327 status = m_tuple1->addItem(
"nkp", m_nkp );
328 status = m_tuple1->addItem(
"nkm", m_nkm );
329 status = m_tuple1->addItem(
"np", m_np );
330 status = m_tuple1->addItem(
"npb", m_npb );
332 status = m_tuple1->addItem(
"nep", m_nep );
333 status = m_tuple1->addItem(
"nem", m_nem );
334 status = m_tuple1->addItem(
"nmup", m_nmup );
335 status = m_tuple1->addItem(
"nmum", m_nmum );
339 log << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
340 return StatusCode::FAILURE;
348 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
349 return StatusCode::SUCCESS;
354 setFilterPassed(
false );
355 const double beamEnergy = m_ecms / 2.;
356 const HepLorentzVector
p_cms( m_ecms *
sin( m_beamangle * 0.5 ), 0.0, 0.0, m_ecms );
357 const Hep3Vector
u_cms = -
p_cms.boostVector();
358 MsgStream log(
msgSvc(), name() );
359 log << MSG::INFO <<
"in execute()" << endmsg;
361 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
364 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
365 return StatusCode::SUCCESS;
368 m_run = eventHeader->runNumber();
369 m_rec = eventHeader->eventNumber();
374 log << MSG::FATAL <<
"Could not find EvtRecEvent" << endmsg;
375 return StatusCode::SUCCESS;
377 log << MSG::INFO <<
"ncharg, nneu, tottks = " << evtRecEvent->totalCharged() <<
" , "
378 << evtRecEvent->totalNeutral() <<
" , " << evtRecEvent->totalTracks() << endmsg;
380 m_ncharg = evtRecEvent->totalCharged();
382 m_nneu = evtRecEvent->totalNeutral();
385 HepSymMatrix Evx( 3, 0 );
389 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc ).ignore();
400 Evx[0][0] = vv[0] * vv[0];
401 Evx[0][1] = vv[0] * vv[1];
402 Evx[1][1] = vv[1] * vv[1];
403 Evx[1][2] = vv[1] * vv[2];
404 Evx[2][2] = vv[2] * vv[2];
411 log << MSG::FATAL <<
"Could not find EvtRecTrackCol" << endmsg;
412 return StatusCode::SUCCESS;
419 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
422 if ( !( *itTrk )->isMdcTrackValid() )
continue;
423 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
426 double pch = mdcTrk->
p();
427 double x0 = mdcTrk->
x();
428 double y0 = mdcTrk->
y();
429 double z0 = mdcTrk->
z();
430 double phi0 = mdcTrk->
helix( 1 );
434 double Rxy = ( x0 - xv ) *
cos( phi0 ) + ( y0 - yv ) *
sin( phi0 );
439 if ( fabs( z0 ) >= m_vz0cut )
continue;
440 if ( fabs( Rxy ) >= m_vr0cut )
continue;
442 if ( fabs( m_vz0 ) >= m_vz0cut )
continue;
443 if ( m_vr0 >= m_vr0cut )
continue;
448 iGood.push_back( i );
449 nCharge += mdcTrk->
charge();
455 int nGood = iGood.size();
457 log << MSG::DEBUG <<
"ngood, totcharge = " << nGood <<
" , " << nCharge << endmsg;
459 if ( ( nGood != 2 ) || ( nCharge != 0 ) ) {
return StatusCode::SUCCESS; }
466 Vint ipip, ipim, iep, iem, imup, imum;
475 for (
int i = 0; i < m_ngch; i++ )
499 HepLorentzVector ptrk;
500 ptrk.setPx( mdcTrk->
px() );
501 ptrk.setPy( mdcTrk->
py() );
502 ptrk.setPz( mdcTrk->
pz() );
503 double p3 = ptrk.mag();
506 m_pidprob[i] = pid->
prob( 1 );
507 m_pidchiDedx[i] = pid->
chiDedx( 1 );
508 m_pidchiTof1[i] = pid->
chiTof1( 1 );
509 m_pidchiTof2[i] = pid->
chiTof2( 1 );
510 if ( mdcTrk->
charge() > 0 ) { imup.push_back( iGood[i] ); }
511 if ( mdcTrk->
charge() < 0 ) { imum.push_back( iGood[i] ); }
516 m_nmup = imup.size();
517 m_nmum = imum.size();
527 for (
int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
529 if ( i >= evtRecTrkCol->size() )
break;
531 if ( !( *itTrk )->isEmcShowerValid() )
continue;
533 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
538 int module = emcTrk->
module();
539 double x = emcTrk->
x();
540 double y = emcTrk->
y();
541 double z = emcTrk->
z();
542 double dx = emcTrk->
dx();
543 double dy = emcTrk->
dy();
544 double dth = emcTrk->
dtheta();
545 double dph = emcTrk->
dphi();
546 double dz = emcTrk->
dz();
548 double dE = emcTrk->
dE();
549 double eSeed = emcTrk->
eSeed();
550 double e3x3 = emcTrk->
e3x3();
551 double e5x5 = emcTrk->
e5x5();
554 double getTime = emcTrk->
time();
555 double getEAll = emcTrk->
getEAll();
565 m_nemchits[iphoton] =
n;
566 m_npart[iphoton] = npart;
567 m_module[iphoton] =
module;
568 m_theta[iphoton] = EmcPos.theta();
569 m_phi[iphoton] = EmcPos.phi();
576 m_dtheta[iphoton] = dth;
577 m_dphi[iphoton] = dph;
578 m_energy[iphoton] =
energy;
580 m_eSeed[iphoton] = eSeed;
581 m_nSeed[iphoton] = nseed;
582 m_e3x3[iphoton] = e3x3;
583 m_e5x5[iphoton] = e5x5;
584 m_secondMoment[iphoton] = secondMoment;
585 m_latMoment[iphoton] = latMoment;
586 m_getTime[iphoton] = getTime;
587 m_getEAll[iphoton] = getEAll;
588 m_a20Moment[iphoton] = a20Moment;
589 m_a42Moment[iphoton] = a42Moment;
601 for (
int j = 0; j < nGood; j++ )
605 if ( !( *jtTrk )->isMdcTrackValid() )
continue;
607 double jtcharge = jtmdcTrk->
charge();
608 if ( !( *jtTrk )->isExtTrackValid() )
continue;
613 double angd = extpos.angle( emcpos );
614 double thed = extpos.theta() - emcpos.theta();
615 double phid = extpos.deltaPhi( emcpos );
616 thed = fmod( thed + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
617 phid = fmod( phid + CLHEP::twopi + CLHEP::twopi +
pi, CLHEP::twopi ) - CLHEP::pi;
619 if ( fabs( thed ) < fabs( dthe ) ) dthe = thed;
620 if ( fabs( phid ) < fabs( dphi ) ) dphi = phid;
621 if ( angd < dang ) dang = angd;
628 dthe = dthe * 180 / ( CLHEP::pi );
629 dphi = dphi * 180 / ( CLHEP::pi );
630 dang = dang * 180 / ( CLHEP::pi );
631 double eraw = emcTrk->
energy();
632 double phi = emcTrk->
phi();
633 double the = emcTrk->
theta();
635 m_delphi[iphoton] = dphi;
636 m_delthe[iphoton] = dthe;
637 m_delang[iphoton] = dang;
638 if (
energy < m_energyThreshold )
continue;
639 if ( getTime > m_gammathCut || getTime < m_gammatlCut )
continue;
641 if ( dang < m_gammaTrkCut )
continue;
644 if ( iphoton >= 40 )
return StatusCode::SUCCESS;
647 int nGam = iGam.size();
660 for (
int i = 0; i < m_nGam; i++ )
663 if ( !( *itTrk )->isEmcShowerValid() )
continue;
665 double eraw = emcTrk->
energy();
666 double phi = emcTrk->
phi();
667 double the = emcTrk->
theta();
668 HepLorentzVector ptrk;
669 ex_gam += eraw *
sin( the ) *
cos( phi );
670 ey_gam += eraw *
sin( the ) *
sin( phi );
671 ez_gam += eraw *
cos( the );
672 et_gam += eraw *
sin( the );
674 if ( eraw >= egam_ext ) { egam_ext = eraw; }
690 for (
int i = 0; i < m_ngch; i++ )
695 if ( !( *itTrk )->isMdcTrackValid() )
continue;
696 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
702 m_charge[ii] = mdcTrk->
charge();
703 m_vx0[ii] = mdcTrk->
x();
704 m_vy0[ii] = mdcTrk->
y();
705 m_vz0[ii] = mdcTrk->
z();
707 m_px[ii] = mdcTrk->
px();
708 m_py[ii] = mdcTrk->
py();
709 m_pz[ii] = mdcTrk->
pz();
710 m_p[ii] = mdcTrk->
p();
716 m_kal_vx0[ii] = mdcKalTrk->
x();
717 m_kal_vy0[ii] = mdcKalTrk->
y();
718 m_kal_vz0[ii] = mdcKalTrk->
z();
720 m_kal_px[ii] = mdcKalTrk->
px();
721 m_kal_py[ii] = mdcKalTrk->
py();
722 m_kal_pz[ii] = mdcKalTrk->
pz();
724 t_pxy2 = m_kal_px[i] * m_kal_px[i] + m_kal_py[i] * m_kal_py[i];
725 m_kal_p[i] = sqrt( t_pxy2 + m_kal_pz[i] * m_kal_pz[i] );
726 double ptrk = m_kal_p[i];
727 px_had += m_kal_px[i];
728 py_had += m_kal_py[i];
729 pz_had += m_kal_pz[i];
730 pt_had += sqrt( t_pxy2 );
732 e_had += sqrt( m_kal_p[i] * m_kal_p[i] + mdcKalTrk->
mass() * mdcKalTrk->
mass() );
734 if ( ( *itTrk )->isMdcDedxValid() )
738 m_probPH[ii] = dedxTrk->
probPH();
739 m_normPH[ii] = dedxTrk->
normPH();
741 m_chie[ii] = dedxTrk->
chiE();
742 m_chimu[ii] = dedxTrk->
chiMu();
743 m_chipi[ii] = dedxTrk->
chiPi();
744 m_chik[ii] = dedxTrk->
chiK();
745 m_chip[ii] = dedxTrk->
chiP();
750 if ( ( *itTrk )->isEmcShowerValid() )
754 m_e_emc[ii] = emcTrk->
energy();
755 m_phi_emc[ii] = emcTrk->
phi();
756 m_theta_emc[ii] = emcTrk->
theta();
759 if ( ( *itTrk )->isMucTrackValid() )
763 m_nhit_muc[ii] = mucTrk->
numHits();
774 if ( ( *itTrk )->isTofTrackValid() )
777 SmartRefVector<RecTofTrack> tofTrkCol = ( *itTrk )->tofTrack();
779 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
781 for ( ; iter_tof != tofTrkCol.end(); iter_tof++ )
784 status->
setStatus( ( *iter_tof )->status() );
788 if ( ( status->
is_cluster() ) ) m_t_etof[ii] = ( *iter_tof )->tof();
791 if ( status )
delete status;
794 if ( status->
layer() != 0 )
796 if ( status )
delete status;
799 double path = ( *iter_tof )->path();
800 double tof = ( *iter_tof )->tof();
801 double ph = ( *iter_tof )->ph();
802 double rhit = ( *iter_tof )->zrhit();
803 double qual = 0.0 + ( *iter_tof )->quality();
804 double cntr = 0.0 + ( *iter_tof )->tofID();
806 for (
int j = 0; j < 5; j++ )
808 double gb = ptrk /
xmass[j];
809 double beta = gb / sqrt( 1 + gb * gb );
810 texp[j] = path / beta /
velc;
813 m_qual_etof[ii] = qual;
814 m_tof_etof[ii] = tof;
818 if ( ( status->
is_cluster() ) ) m_t_btof[ii] = ( *iter_tof )->tof();
821 if ( status )
delete status;
824 if ( status->
layer() == 1 )
826 double path = ( *iter_tof )->path();
827 double tof = ( *iter_tof )->tof();
828 double ph = ( *iter_tof )->ph();
829 double rhit = ( *iter_tof )->zrhit();
830 double qual = 0.0 + ( *iter_tof )->quality();
831 double cntr = 0.0 + ( *iter_tof )->tofID();
833 for (
int j = 0; j < 5; j++ )
835 double gb = ptrk /
xmass[j];
836 double beta = gb / sqrt( 1 + gb * gb );
837 texp[j] = path / beta /
velc;
840 m_qual_btof1[ii] = qual;
841 m_tof_btof1[ii] = tof;
844 if ( status->
layer() == 2 )
846 double path = ( *iter_tof )->path();
847 double tof = ( *iter_tof )->tof();
848 double ph = ( *iter_tof )->ph();
849 double rhit = ( *iter_tof )->zrhit();
850 double qual = 0.0 + ( *iter_tof )->quality();
851 double cntr = 0.0 + ( *iter_tof )->tofID();
853 for (
int j = 0; j < 5; j++ )
855 double gb = ptrk /
xmass[j];
856 double beta = gb / sqrt( 1 + gb * gb );
857 texp[j] = path / beta /
velc;
860 m_qual_btof2[ii] = qual;
861 m_tof_btof2[ii] = tof;
864 if ( status )
delete status;
874 if ( m_ngch != 2 || nCharge != 0 )
return StatusCode::SUCCESS;
883 HepLorentzVector p41e, p42e, p4le;
884 Hep3Vector p31e, p32e, p3le;
885 HepLorentzVector p41m, p42m, p4lm;
886 Hep3Vector p31m, p32m, p3lm;
887 HepLorentzVector p41h, p42h, p4lh;
888 Hep3Vector p31h, p32h, p3lh;
893 for (
int i = 0; i < m_ngch; i++ )
895 if ( m_charge[i] > 0 ) itTrk1 = evtRecTrkCol->begin() + iGood[i];
896 if ( m_charge[i] < 0 ) itTrk2 = evtRecTrkCol->begin() + iGood[i];
897 if ( m_charge[i] > 0 ) mdcKalTrk1 = ( *itTrk1 )->mdcKalTrack();
898 if ( m_charge[i] < 0 ) mdcKalTrk2 = ( *itTrk2 )->mdcKalTrack();
899 if ( m_charge[i] > 0 ) iip = i;
900 if ( m_charge[i] < 0 ) iim = i;
902 if ( m_charge[i] > 0 )
905 if ( m_charge[i] < 0 )
909 if ( m_charge[i] > 0 ) p41m = w1_ini.
p();
910 if ( m_charge[i] < 0 ) p42m = w2_ini.
p();
911 if ( m_charge[i] > 0 ) p41m.boost(
u_cms );
912 if ( m_charge[i] < 0 ) p42m.boost(
u_cms );
913 if ( m_charge[i] > 0 ) p31m = p41m.vect();
914 if ( m_charge[i] < 0 ) p32m = p42m.vect();
916 if ( m_charge[i] > 0 )
918 m_px_cms_ep = p41m.px();
919 m_py_cms_ep = p41m.py();
920 m_pz_cms_ep = p41m.pz();
921 m_e_cms_ep = p41m.e();
923 if ( m_charge[i] < 0 )
925 m_px_cms_em = p42m.px();
926 m_py_cms_em = p42m.py();
927 m_pz_cms_em = p42m.pz();
928 m_e_cms_em = p42m.e();
932 double e01 = ( iip != -1 ) ? m_e_emc[iip] : 0;
933 double e02 = ( iim != -1 ) ? m_e_emc[iim] : 0;
934 int ilarge = ( e01 > e02 ) ? iip : iim;
936 p4lm = ( e01 > e02 ) ? p41m : p42m;
938 p3lm = ( e01 > e02 ) ? p31m : p32m;
940 double acollm = 180. - p31m.angle( p32m ) * 180.0 / CLHEP::pi;
941 double acoplm = 180. - ( p31m.perpPart() ).angle( p32m.perpPart() ) * 180.0 / CLHEP::pi;
942 double poeb1m = p41m.rho() / beamEnergy;
943 double poeb2m = p42m.rho() / beamEnergy;
944 double poeblm = p4lm.rho() / beamEnergy;
946 double eemc1 = m_e_emc[iip];
947 double eemc2 = m_e_emc[iim];
949 double ex1 = m_kal_vx0[iip];
950 double ey1 = m_kal_vy0[iip];
951 double ez1 = m_kal_vz0[iip];
952 double epx1 = m_kal_px[iip];
953 double epy1 = m_kal_py[iip];
954 double epz1 = m_kal_pz[iip];
955 double epp1 = m_kal_p[iip];
956 double ex2 = m_kal_vx0[iim];
957 double ey2 = m_kal_vy0[iim];
958 double ez2 = m_kal_vz0[iim];
959 double epx2 = m_kal_px[iim];
960 double epy2 = m_kal_py[iim];
961 double epz2 = m_kal_pz[iim];
962 double epp2 = m_kal_p[iim];
964 double pidchidedx1 = m_pidchiDedx[iip];
965 double pidchitof11 = m_pidchiTof1[iip];
966 double pidchitof21 = m_pidchiTof2[iip];
967 double pidchidedx2 = m_pidchiDedx[iim];
968 double pidchitof12 = m_pidchiTof1[iim];
969 double pidchitof22 = m_pidchiTof2[iim];
971 double eoeb1 = m_e_emc[iip] / beamEnergy;
972 double eoeb2 = m_e_emc[iim] / beamEnergy;
975 if ( p41m.rho() > 0 ) eopm1 = m_e_emc[iip] / p41m.rho();
977 if ( p42m.rho() > 0 ) eopm2 = m_e_emc[iim] / p42m.rho();
979 double exoeb1 = m_e_emc[iip] *
sin( m_theta_emc[iip] ) *
cos( m_phi_emc[iip] ) / beamEnergy;
980 double eyoeb1 = m_e_emc[iip] *
sin( m_theta_emc[iip] ) *
sin( m_phi_emc[iip] ) / beamEnergy;
981 double ezoeb1 = m_e_emc[iip] *
cos( m_theta_emc[iip] ) / beamEnergy;
982 double etoeb1 = m_e_emc[iip] *
sin( m_theta_emc[iip] ) / beamEnergy;
984 double exoeb2 = m_e_emc[iim] *
sin( m_theta_emc[iim] ) *
cos( m_phi_emc[iim] ) / beamEnergy;
985 double eyoeb2 = m_e_emc[iim] *
sin( m_theta_emc[iim] ) *
sin( m_phi_emc[iim] ) / beamEnergy;
986 double ezoeb2 = m_e_emc[iim] *
cos( m_theta_emc[iim] ) / beamEnergy;
987 double etoeb2 = m_e_emc[iim] *
sin( m_theta_emc[iim] ) / beamEnergy;
989 double eoebl = m_e_emc[ilarge] / beamEnergy;
992 if ( p4lm.rho() > 0 ) eopl = m_e_emc[ilarge] / p4lh.rho();
995 m_e_emc[ilarge] *
sin( m_theta_emc[ilarge] ) *
cos( m_phi_emc[ilarge] ) / beamEnergy;
997 m_e_emc[ilarge] *
sin( m_theta_emc[ilarge] ) *
sin( m_phi_emc[ilarge] ) / beamEnergy;
998 double ezoebl = m_e_emc[ilarge] *
cos( m_theta_emc[ilarge] ) / beamEnergy;
999 double etoebl = m_e_emc[ilarge] *
sin( m_theta_emc[ilarge] ) / beamEnergy;
1001 int mucinfo1 = ( m_nhit_muc[iip] >= 2 && m_nlay_muc[iip] >= 2 ) ? 1 : 0;
1002 int mucinfo2 = ( m_nhit_muc[iim] >= 2 && m_nlay_muc[iim] >= 2 ) ? 1 : 0;
1003 int mucinfol = ( m_nhit_muc[ilarge] >= 2 && m_nlay_muc[ilarge] >= 2 ) ? 1 : 0;
1004 int pidel = ( e01 > e02 ) ? m_nep : m_nem;
1005 int pidmul = ( e01 > e02 ) ? m_nmup : m_nmum;
1006 double deltatof = 0;
1008 if ( m_t_btof[iip] * m_t_btof[iim] != 0 ) deltatof += fabs( m_t_btof[iip] - m_t_btof[iim] );
1009 if ( m_t_etof[iip] * m_t_etof[iim] != 0 ) deltatof += fabs( m_t_etof[iip] - m_t_etof[iim] );
1011 if ( acollm < m_acoll_mu_cut ) m_dimutag += 1;
1012 if ( acoplm < m_acopl_mu_cut ) m_dimutag += 10;
1013 if ( fabs( m_ecms -
mpsi2s ) < 0.001 )
1015 if ( ( sqrt( ( ( poeb1m - poeb2m ) / 0.35 ) * ( ( poeb1m - poeb2m ) / 0.35 ) +
1016 ( ( poeb1m + poeb2m - 1.68 ) / 0.125 ) *
1017 ( ( poeb1m + poeb2m - 1.68 ) / 0.125 ) ) > m_tptotal_mu_cut ) &&
1018 ( ( ( poeb1m >= m_tpoebh_mu_cut ) && ( poeb2m >= m_tpoebl_mu_cut ) ) ||
1019 ( ( poeb2m >= m_tpoebh_mu_cut ) && ( poeb1m >= m_tpoebl_mu_cut ) ) ) )
1024 if ( ( fabs( poeb1m - 1 ) < m_poeb_mu_cut ) && ( fabs( poeb2m - 1 ) < m_poeb_mu_cut ) )
1027 if ( !m_useTOF || ( deltatof < m_dtof_mu_cut ) ) m_dimutag += 1000;
1028 if ( !m_useMUC || ( mucinfo1 == 1 && mucinfo2 == 1 ) ) m_dimutag += 10000;
1029 if ( etoeb1 < m_eoeb_mu_cut && eoeb2 < m_eoeb_mu_cut ) m_dimutag += 100000;
1030 if ( etoeb1 + etoeb2 < m_etotal_mu_cut ) m_dimutag += 1000000;
1031 if ( !m_usePID || ( m_nmup == 1 && m_nmum == 1 ) ) m_dimutag += 10000000;
1039 m_cos_ep = p41m.cosTheta();
1040 m_cos_em = p42m.cosTheta();
1041 m_mass_ee = ( p41m + p42m ).m();
1043 m_deltatof = deltatof;
1050 m_mucinfo1 = mucinfo1;
1051 m_mucinfo2 = mucinfo2;
1053 if ( m_dimutag == 11111111 )
1061 ( *itTrk1 )->tagMuon();
1062 ( *itTrk2 )->tagMuon();
1070 ( *itTrk1 )->setQuality( 0 );
1071 ( *itTrk2 )->setQuality( 0 );
1075 setFilterPassed(
true );
1078 m_mumu_mass->Fill( ( p41m + p42m ).m() );
1079 m_mumu_acoll->Fill( acollm );
1080 m_mumu_eop_mup->Fill( eopm1 );
1081 m_mumu_eop_mum->Fill( eopm2 );
1082 m_mumu_costheta_mup->Fill( p41m.cosTheta() );
1083 m_mumu_costheta_mum->Fill( p42m.cosTheta() );
1084 m_mumu_phi_mup->Fill( p41m.phi() );
1085 m_mumu_phi_mum->Fill( p42m.phi() );
1086 m_mumu_nneu->Fill( m_nGam );
1087 m_mumu_nhit->Fill( m_nhit_muc[ilarge] );
1088 m_mumu_nlay->Fill( m_nlay_muc[ilarge] );
1090 m_mumu_eemc_mup->Fill( eemc1 );
1091 m_mumu_eemc_mum->Fill( eemc2 );
1093 m_mumu_x_mup->Fill( ex1 );
1094 m_mumu_y_mup->Fill( ey1 );
1095 m_mumu_z_mup->Fill( ez1 );
1097 m_mumu_x_mum->Fill( ex2 );
1098 m_mumu_y_mum->Fill( ey2 );
1099 m_mumu_z_mum->Fill( ez2 );
1101 m_mumu_px_mup->Fill( epx1 );
1102 m_mumu_py_mup->Fill( epy1 );
1103 m_mumu_pz_mup->Fill( epz1 );
1104 m_mumu_p_mup->Fill( epp1 );
1106 m_mumu_px_mum->Fill( epx2 );
1107 m_mumu_py_mum->Fill( epy2 );
1108 m_mumu_pz_mum->Fill( epz2 );
1109 m_mumu_p_mum->Fill( epp2 );
1111 m_mumu_deltatof->Fill( deltatof );
1113 m_mumu_pidchidedx_mup->Fill( pidchidedx1 );
1114 m_mumu_pidchidedx_mum->Fill( pidchidedx2 );
1115 m_mumu_pidchitof1_mup->Fill( pidchitof11 );
1116 m_mumu_pidchitof1_mum->Fill( pidchitof12 );
1117 m_mumu_pidchitof2_mup->Fill( pidchitof21 );
1118 m_mumu_pidchitof2_mum->Fill( pidchitof22 );
1120 if ( m_writentuple ) m_tuple1->write().ignore();
1123 return StatusCode::SUCCESS;