CGEM BOSS 6.6.5.i
BESIII Offline Software System
Loading...
Searching...
No Matches
DQASelDimu.cxx
Go to the documentation of this file.
1#include <vector>
2
3#include "GaudiKernel/MsgStream.h"
4#include "GaudiKernel/AlgFactory.h"
5#include "GaudiKernel/ISvcLocator.h"
6#include "GaudiKernel/SmartDataPtr.h"
7#include "GaudiKernel/IDataProviderSvc.h"
8#include "GaudiKernel/PropertyMgr.h"
10#include "GaudiKernel/Bootstrap.h"
11#include "GaudiKernel/ISvcLocator.h"
12
14#include "EventModel/Event.h"
15
20
21#include "TMath.h"
22#include "GaudiKernel/INTupleSvc.h"
23#include "GaudiKernel/NTuple.h"
24#include "GaudiKernel/Bootstrap.h"
25#include "GaudiKernel/IHistogramSvc.h"
26#include "CLHEP/Vector/ThreeVector.h"
27#include "CLHEP/Vector/LorentzVector.h"
28#include "CLHEP/Vector/TwoVector.h"
29
30using CLHEP::Hep3Vector;
31using CLHEP::Hep2Vector;
32using CLHEP::HepLorentzVector;
33#include "CLHEP/Geometry/Point3D.h"
34
36#include "VertexFit/VertexFit.h"
39
40//
42
43#ifndef ENABLE_BACKWARDS_COMPATIBILITY
45#endif
46using CLHEP::HepLorentzVector;
47const double mpsi2s=3.68609;
48const double mpi = 0.13957;
49const double mk = 0.493677;
50const double xmass[5] = {0.000511, 0.105658, 0.139570,0.493677, 0.938272};
51const double velc = 299.792458; // tof path unit in mm
52typedef std::vector<int> Vint;
53typedef std::vector<HepLorentzVector> Vp4;
54//declare one counter
55static int counter[10]={0,0,0,0,0,0,0,0,0,0};
56static int ndimu=0;
57/////////////////////////////////////////////////////////////////////////////
58
59DQASelDimu::DQASelDimu(const std::string& name, ISvcLocator* pSvcLocator) :
60 Algorithm(name, pSvcLocator) {
61
62 //Declare the properties
63 declareProperty("writentuple",m_writentuple = false);
64 declareProperty("ecms",m_ecms = 3.097);
65 declareProperty("beamangle",m_beamangle = 0.022);
66 declareProperty("Vr0cut", m_vr0cut=1.0);
67 declareProperty("Vz0cut", m_vz0cut=8.0);
68 declareProperty("Coscut", m_coscut=0.93);
69
70 declareProperty("EnergyThreshold", m_energyThreshold=0.04);
71 declareProperty("GammaPhiCut", m_gammaPhiCut=20.0);
72 declareProperty("GammaThetaCut", m_gammaThetaCut=20.0);
73 declareProperty("GammaTrkCut", m_gammaTrkCut=20.0);
74 declareProperty("GammaTLCut", m_gammatlCut=0);
75 declareProperty("GammaTHCut", m_gammathCut=60);
76
77 declareProperty ("acoll_mu_cut", m_acoll_mu_cut=6.);
78 declareProperty ("acopl_mu_cut", m_acopl_mu_cut=6.);
79 declareProperty ("poeb_mu_cut", m_poeb_mu_cut=0.3);
80 declareProperty ("dtof_mu_cut", m_dtof_mu_cut=4.);
81 declareProperty ("eoeb_mu_cut", m_eoeb_mu_cut=0.35);
82 declareProperty ("etotal_mu_cut", m_etotal_mu_cut=0.6);
83 declareProperty ("tpoebh_mu_cut", m_tpoebh_mu_cut=0.9);
84 declareProperty ("tpoebl_mu_cut", m_tpoebl_mu_cut=0.7);
85 declareProperty ("tptotal_mu_cut", m_tptotal_mu_cut=1.0);
86
87
88
89 //normally, MDC+EMC, otherwise EMC only
90 declareProperty ("m_useEMConly", m_useEMConly= false);
91 declareProperty ("m_usePID", m_usePID= false);// sub-system is under study
92 declareProperty ("m_useMDC", m_useMDC= true);
93 declareProperty ("m_useDEDX", m_useDEDX= false);// not used
94 declareProperty ("m_useTOF", m_useTOF= false);//sub-system is under study
95 declareProperty ("m_useEMC", m_useEMC= true);
96 declareProperty ("m_useMUC", m_useMUC= false);// efficiency
97
98}
99
100
101// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
103 MsgStream log(msgSvc(), name());
104
105 log << MSG::INFO << "in initialize()" << endmsg;
106 StatusCode status;
107 status = service("THistSvc", m_thistsvc);
108 if(status.isFailure() ){
109 log << MSG::INFO << "Unable to retrieve pointer to THistSvc" << endreq;
110 return status;
111 }
112
113
114
115
116 m_mumu_mass = new TH1F( "mumu_mass", "mumu_mass", 80, m_ecms-0.3, m_ecms+0.5);
117 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_mass", m_mumu_mass);
118 m_mumu_acoll = new TH1F( "mumu_acoll", "mumu_acoll", 60, 0, 6 );
119 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_acoll", m_mumu_acoll);
120 m_mumu_eop_mup = new TH1F( "mumu_eop_mup", "mumu_eop_mup", 100,0.,0.5 );
121 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_eop_mup", m_mumu_eop_mup);
122 m_mumu_eop_mum = new TH1F( "mumu_eop_mum", "mumu_eop_mum", 100,0.,0.5 );
123 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_eop_mum", m_mumu_eop_mum);
124 m_mumu_costheta_mup = new TH1F( "mumu_costheta_mup", "mumu_costheta_mup", 100,-1,1 );
125 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_costheta_mup", m_mumu_costheta_mup);
126 m_mumu_costheta_mum = new TH1F( "mumu_costheta_mum", "mumu_costheta_mum", 100,-1,1 );
127 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_costheta_mum", m_mumu_costheta_mum);
128
129 m_mumu_phi_mup = new TH1F( "mumu_phi_mup", "mumu_phi_mup", 120,-3.2,3.2 );
130 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_phi_mup", m_mumu_phi_mup);
131 m_mumu_phi_mum = new TH1F( "mumu_phi_mum", "mumu_phi_mum", 120,-3.2,3.2 );
132 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_phi_mum", m_mumu_phi_mum);
133
134 m_mumu_nneu = new TH1F( "mumu_nneu", "mumu_nneu", 5,0,5 );
135 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_nneu", m_mumu_nneu);
136 m_mumu_nlay = new TH1F( "mumu_nlay", "mumu_nlay", 9,0,10 );
137 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_nlay", m_mumu_nlay);
138 m_mumu_nhit = new TH1F( "mumu_nhit", "mumu_nhit", 19,0,20 );
139 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_nhit", m_mumu_nhit);
140
141 m_mumu_eemc_mup=new TH1F("mumu_eemc_mup","mumu_eemc_mup",100,0.0,1.0);
142 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_eemc_mup", m_mumu_eemc_mup);
143 m_mumu_eemc_mum=new TH1F("mumu_eemc_mum","mumu_eemc_mum",100,0.0,1.0);
144 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_eemc_mum", m_mumu_eemc_mum);
145 m_mumu_x_mup=new TH1F("mumu_x_mup","mumu_x_mup",100,-1.0,1.0);
146 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_x_mup", m_mumu_x_mup);
147 m_mumu_y_mup=new TH1F("mumu_y_mup","mumu_y_mup",100,-1.0,1.0);
148 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_y_mup", m_mumu_y_mup);
149 m_mumu_z_mup=new TH1F("mumu_z_mup","mumu_z_mup",100,-10.0,10.0);
150 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_z_mup", m_mumu_z_mup);
151 m_mumu_x_mum=new TH1F("mumu_x_mum","mumu_x_mum",100,-1.0,1.0);
152 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_x_mum", m_mumu_x_mum);
153 m_mumu_y_mum=new TH1F("mumu_y_mum","mumu_y_mum",100,-1.0,1.0);
154 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_y_mum", m_mumu_y_mum);
155 m_mumu_z_mum=new TH1F("mumu_z_mum","mumu_z_mum",100,-10.0,10.0);
156 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_z_mum", m_mumu_z_mum);
157
158 m_mumu_px_mup=new TH1F("mumu_px_mup","mumu_px_mup",200,-2.0,2.0);
159 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_px_mup", m_mumu_px_mup);
160 m_mumu_py_mup=new TH1F("mumu_py_mup","mumu_py_mup",200,-2.0,2.0);
161 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_py_mup", m_mumu_py_mup);
162 m_mumu_pz_mup=new TH1F("mumu_pz_mup","mumu_pz_mup",200,-2.0,2.0);
163 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pz_mup", m_mumu_pz_mup);
164 m_mumu_p_mup=new TH1F("mumu_p_mup","mumu_p_mup",100,1.0,2.0);
165 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_p_mup", m_mumu_p_mup);
166 m_mumu_px_mum=new TH1F("mumu_px_mum","mumu_px_mum",100,-2.0,2.0);
167 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_px_mum", m_mumu_px_mum);
168 m_mumu_py_mum=new TH1F("mumu_py_mum","mumu_py_mum",100,-2.0,2.0);
169 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_py_mum", m_mumu_py_mum);
170 m_mumu_pz_mum=new TH1F("mumu_pz_mum","mumu_pz_mum",100,-2.0,2.0);
171 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pz_mum", m_mumu_pz_mum);
172 m_mumu_p_mum=new TH1F("mumu_p_mum","mumu_p_mum",100,1.0,2.0);
173 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_p_mum", m_mumu_p_mum);
174 m_mumu_deltatof=new TH1F("mumu_deltatof","mumu_deltatof",50,0.0,10.0);
175 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_deltatof", m_mumu_deltatof);
176
177 m_mumu_pidchidedx_mup=new TH1F("mumu_pidchidedx_mup","mumu_pidchidedx_mup",160,-4,4);
178 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchidedx_mup", m_mumu_pidchidedx_mup);
179 m_mumu_pidchidedx_mum=new TH1F("mumu_pidchidedx_mum","mumu_pidchidedx_mum",160,-4,4);
180 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchidedx_mum", m_mumu_pidchidedx_mum);
181 m_mumu_pidchitof1_mup=new TH1F("mumu_pidchitof1_mup","mumu_pidchitof1_mup",160,-4,4);
182 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchitof1_mup", m_mumu_pidchitof1_mup);
183 m_mumu_pidchitof1_mum=new TH1F("mumu_pidchitof1_mum","mumu_pidchitof1_mum",160,-4,4);
184 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchitof1_mum", m_mumu_pidchitof1_mum);
185 m_mumu_pidchitof2_mup=new TH1F("mumu_pidchitof2_mup","mumu_pidchitof2_mup",160,-4,4);
186 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchitof2_mup", m_mumu_pidchitof2_mup);
187 m_mumu_pidchitof2_mum=new TH1F("mumu_pidchitof2_mum","mumu_pidchitof2_mum",160,-4,4);
188 status = m_thistsvc->regHist("/DQAHist/Dimu/mumu_pidchitof2_mum", m_mumu_pidchitof2_mum);
189
190
191
192
193
194NTuplePtr nt1(ntupleSvc(), "DQAFILE/Dimu");
195if ( nt1 ) m_tuple1 = nt1;
196else {
197 m_tuple1 = ntupleSvc()->book ("DQAFILE/Dimu", CLID_ColumnWiseTuple, "N-Tuple");
198 if ( m_tuple1 ) {
199 status = m_tuple1->addItem ("run", m_run);
200 status = m_tuple1->addItem ("rec", m_rec);
201 status = m_tuple1->addItem ("Nchrg", m_ncharg);
202 status = m_tuple1->addItem ("Nneu", m_nneu,0,40);
203 status = m_tuple1->addItem ("NGch", m_ngch, 0, 40);
204 status = m_tuple1->addItem ("NGam", m_nGam);
205
206
207 status = m_tuple1->addItem ("dimutag", m_dimutag);
208
209 status = m_tuple1->addItem ("acoll", m_acoll);
210 status = m_tuple1->addItem ("acopl", m_acopl);
211 status = m_tuple1->addItem ("deltatof", m_deltatof);
212 status = m_tuple1->addItem ("eop1", m_eop1);
213 status = m_tuple1->addItem ("eop2", m_eop2);
214 status = m_tuple1->addItem ("eoeb1", m_eoeb1);
215 status = m_tuple1->addItem ("eoeb2", m_eoeb2);
216 status = m_tuple1->addItem ("poeb1", m_poeb1);
217 status = m_tuple1->addItem ("poeb2", m_poeb2);
218 status = m_tuple1->addItem ("etoeb1", m_etoeb1);
219 status = m_tuple1->addItem ("etoeb2", m_etoeb2);
220 status = m_tuple1->addItem ("mucinfo1", m_mucinfo1);
221 status = m_tuple1->addItem ("mucinfo2", m_mucinfo2);
222
223
224 status = m_tuple1->addIndexedItem ("delang",m_nneu, m_delang);
225 status = m_tuple1->addIndexedItem ("delphi",m_nneu, m_delphi);
226 status = m_tuple1->addIndexedItem ("delthe",m_nneu, m_delthe);
227 status = m_tuple1->addIndexedItem ("npart",m_nneu, m_npart);
228 status = m_tuple1->addIndexedItem ("nemchits",m_nneu, m_nemchits);
229 status = m_tuple1->addIndexedItem ("module",m_nneu, m_module);
230 status = m_tuple1->addIndexedItem ("x",m_nneu, m_x);
231 status = m_tuple1->addIndexedItem ("y",m_nneu, m_y);
232 status = m_tuple1->addIndexedItem ("z",m_nneu, m_z);
233 status = m_tuple1->addIndexedItem ("px",m_nneu, m_px);
234 status = m_tuple1->addIndexedItem ("py",m_nneu, m_py);
235 status = m_tuple1->addIndexedItem ("pz",m_nneu, m_pz);
236 status = m_tuple1->addIndexedItem ("theta",m_nneu, m_theta);
237 status = m_tuple1->addIndexedItem ("phi",m_nneu, m_phi);
238 status = m_tuple1->addIndexedItem ("dx",m_nneu, m_dx);
239 status = m_tuple1->addIndexedItem ("dy",m_nneu, m_dy);
240 status = m_tuple1->addIndexedItem ("dz",m_nneu, m_dz);
241 status = m_tuple1->addIndexedItem ("dtheta",m_nneu, m_dtheta);
242 status = m_tuple1->addIndexedItem ("dphi",m_nneu, m_dphi);
243 status = m_tuple1->addIndexedItem ("energy",m_nneu, m_energy);
244 status = m_tuple1->addIndexedItem ("dE",m_nneu, m_dE);
245 status = m_tuple1->addIndexedItem ("eSeed",m_nneu, m_eSeed);
246 status = m_tuple1->addIndexedItem ("nSeed",m_nneu, m_nSeed);
247 status = m_tuple1->addIndexedItem ("e3x3",m_nneu, m_e3x3);
248 status = m_tuple1->addIndexedItem ("e5x5",m_nneu, m_e5x5);
249 status = m_tuple1->addIndexedItem ("secondMoment",m_nneu, m_secondMoment);
250 status = m_tuple1->addIndexedItem ("latMoment",m_nneu, m_latMoment);
251 status = m_tuple1->addIndexedItem ("a20Moment",m_nneu, m_a20Moment);
252 status = m_tuple1->addIndexedItem ("a42Moment",m_nneu, m_a42Moment);
253 status = m_tuple1->addIndexedItem ("getTime",m_nneu, m_getTime);
254 status = m_tuple1->addIndexedItem ("getEAll",m_nneu, m_getEAll);
255
256
257
258 status = m_tuple1->addIndexedItem("charge", m_ngch, m_charge);
259 status = m_tuple1->addIndexedItem ("vx", m_ngch, m_vx0);
260 status = m_tuple1->addIndexedItem ("vy", m_ngch, m_vy0);
261 status = m_tuple1->addIndexedItem ("vz", m_ngch, m_vz0);
262
263
264 status = m_tuple1->addIndexedItem ("px", m_ngch, m_px) ;
265 status = m_tuple1->addIndexedItem ("py", m_ngch, m_py) ;
266 status = m_tuple1->addIndexedItem ("pz", m_ngch, m_pz) ;
267 status = m_tuple1->addIndexedItem ("p", m_ngch, m_p) ;
268
269
270
271 status = m_tuple1->addIndexedItem ("kal_vx", m_ngch, m_kal_vx0);
272 status = m_tuple1->addIndexedItem ("kal_vy", m_ngch, m_kal_vy0);
273 status = m_tuple1->addIndexedItem ("kal_vz", m_ngch, m_kal_vz0);
274
275
276 status = m_tuple1->addIndexedItem ("kal_px", m_ngch, m_kal_px) ;
277 status = m_tuple1->addIndexedItem ("kal_py", m_ngch, m_kal_py) ;
278 status = m_tuple1->addIndexedItem ("kal_pz", m_ngch, m_kal_pz) ;
279 status = m_tuple1->addIndexedItem ("kal_p", m_ngch, m_kal_p) ;
280
281
282 status = m_tuple1->addIndexedItem ("probPH" , m_ngch, m_probPH) ;
283 status = m_tuple1->addIndexedItem ("normPH" , m_ngch, m_normPH) ;
284 status = m_tuple1->addIndexedItem ("chie" , m_ngch, m_chie) ;
285 status = m_tuple1->addIndexedItem ("chimu" , m_ngch, m_chimu) ;
286 status = m_tuple1->addIndexedItem ("chipi" , m_ngch, m_chipi) ;
287 status = m_tuple1->addIndexedItem ("chik" , m_ngch, m_chik) ;
288 status = m_tuple1->addIndexedItem ("chip" , m_ngch, m_chip) ;
289 status = m_tuple1->addIndexedItem ("ghit" , m_ngch, m_ghit) ;
290 status = m_tuple1->addIndexedItem ("thit" , m_ngch, m_thit) ;
291
292 status = m_tuple1->addIndexedItem ("e_emc" , m_ngch, m_e_emc) ;
293 status = m_tuple1->addIndexedItem ("phi_emc" , m_ngch, m_phi_emc) ;
294 status = m_tuple1->addIndexedItem ("theta_emc" , m_ngch, m_theta_emc) ;
295
296 status = m_tuple1->addIndexedItem ("nhit_muc" , m_ngch, m_nhit_muc) ;
297 status = m_tuple1->addIndexedItem ("nlay_muc" , m_ngch, m_nlay_muc) ;
298 status = m_tuple1->addIndexedItem ("t_btof" , m_ngch, m_t_btof );
299 status = m_tuple1->addIndexedItem ("t_etof" , m_ngch, m_t_etof );
300 status = m_tuple1->addIndexedItem ("qual_etof" , m_ngch, m_qual_etof );
301 status = m_tuple1->addIndexedItem ("tof_etof" , m_ngch, m_tof_etof );
302 status = m_tuple1->addIndexedItem ("te_etof" , m_ngch, m_te_etof );
303 status = m_tuple1->addIndexedItem ("tmu_etof" , m_ngch, m_tmu_etof );
304 status = m_tuple1->addIndexedItem ("tpi_etof" , m_ngch, m_tpi_etof );
305 status = m_tuple1->addIndexedItem ("tk_etof" , m_ngch, m_tk_etof );
306 status = m_tuple1->addIndexedItem ("tp_etof" , m_ngch, m_tp_etof );
307
308 status = m_tuple1->addIndexedItem ("qual_btof1", m_ngch, m_qual_btof1 );
309 status = m_tuple1->addIndexedItem ("tof_btof1" , m_ngch, m_tof_btof1 );
310 status = m_tuple1->addIndexedItem ("te_btof1" , m_ngch, m_te_btof1 );
311 status = m_tuple1->addIndexedItem ("tmu_btof1" , m_ngch, m_tmu_btof1 );
312 status = m_tuple1->addIndexedItem ("tpi_btof1" , m_ngch, m_tpi_btof1 );
313 status = m_tuple1->addIndexedItem ("tk_btof1" , m_ngch, m_tk_btof1 );
314 status = m_tuple1->addIndexedItem ("tp_btof1" , m_ngch, m_tp_btof1 );
315
316 status = m_tuple1->addIndexedItem ("qual_btof2", m_ngch, m_qual_btof2 );
317 status = m_tuple1->addIndexedItem ("tof_btof2" , m_ngch, m_tof_btof2 );
318 status = m_tuple1->addIndexedItem ("te_btof2" , m_ngch, m_te_btof2 );
319 status = m_tuple1->addIndexedItem ("tmu_btof2" , m_ngch, m_tmu_btof2 );
320 status = m_tuple1->addIndexedItem ("tpi_btof2" , m_ngch, m_tpi_btof2 );
321 status = m_tuple1->addIndexedItem ("tk_btof2" , m_ngch, m_tk_btof2 );
322 status = m_tuple1->addIndexedItem ("tp_btof2" , m_ngch, m_tp_btof2 );
323 status = m_tuple1->addIndexedItem ("pidcode" , m_ngch, m_pidcode);
324 status = m_tuple1->addIndexedItem ("pidprob" , m_ngch, m_pidprob);
325 status = m_tuple1->addIndexedItem ("pidchiDedx" , m_ngch, m_pidchiDedx);
326 status = m_tuple1->addIndexedItem ("pidchiTof1" , m_ngch, m_pidchiTof1);
327 status = m_tuple1->addIndexedItem ("pidchiTof2" , m_ngch, m_pidchiTof2);
328
329 status = m_tuple1->addItem ("px_cms_ep", m_px_cms_ep); //momentum of electron+
330 status = m_tuple1->addItem ("py_cms_ep", m_py_cms_ep); //momentum of electron+
331 status = m_tuple1->addItem ("pz_cms_ep", m_pz_cms_ep); //momentum of electron+
332 status = m_tuple1->addItem ("e_cms_ep", m_e_cms_ep); //momentum of electron+
333 status = m_tuple1->addItem ("cos_ep", m_cos_ep); //momentum of electron+
334 status = m_tuple1->addItem ("px_cms_em", m_px_cms_em); //momentum of electron-
335 status = m_tuple1->addItem ("py_cms_em", m_py_cms_em); //momentum of electron-
336 status = m_tuple1->addItem ("pz_cms_em", m_pz_cms_em); //momentum of electron-
337 status = m_tuple1->addItem ("e_cms_em", m_e_cms_em); //momentum of electron-
338 status = m_tuple1->addItem ("cos_em", m_cos_em); //momentum of electron-
339 status = m_tuple1->addItem ("mass_ee", m_mass_ee); //
340 status = m_tuple1->addItem ("emax", m_emax); //
341 status = m_tuple1->addItem ("esum", m_esum); //
342 status = m_tuple1->addItem ( "npip", m_npip );
343 status = m_tuple1->addItem ( "npim", m_npim );
344 status = m_tuple1->addItem ( "nkp", m_nkp );
345 status = m_tuple1->addItem ( "nkm", m_nkm );
346 status = m_tuple1->addItem ( "np", m_np );
347 status = m_tuple1->addItem ( "npb", m_npb );
348
349 status = m_tuple1->addItem ( "nep", m_nep );
350 status = m_tuple1->addItem ( "nem", m_nem );
351 status = m_tuple1->addItem ( "nmup", m_nmup );
352 status = m_tuple1->addItem ( "nmum", m_nmum );
353
354 }
355 else {
356 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple1) << endmsg;
357 return StatusCode::FAILURE;
358 }
359}
360
361//
362//--------end of book--------
363//
364
365log << MSG::INFO << "successfully return from initialize()" <<endmsg;
366return StatusCode::SUCCESS;
367
368
369
370
371}
372
373// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
375 setFilterPassed(false);
376 const double beamEnergy = m_ecms/2.;
377 const HepLorentzVector p_cms(m_ecms*sin(m_beamangle*0.5),0.0,0.0,m_ecms);
378 const Hep3Vector u_cms = -p_cms.boostVector();
379 MsgStream log(msgSvc(), name());
380 log << MSG::INFO << "in execute()" << endreq;
381
382
383 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
384 if (!eventHeader)
385 {
386 log << MSG::FATAL << "Could not find Event Header" << endreq;
387 return StatusCode::SUCCESS;
388 }
389
390 m_run = eventHeader->runNumber();
391 m_rec = eventHeader->eventNumber();
392
393
394
395
396 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
397 if (!evtRecEvent)
398 {
399 log << MSG::FATAL << "Could not find EvtRecEvent" << endreq;
400 return StatusCode::SUCCESS;
401 }
402 log << MSG::INFO <<"ncharg, nneu, tottks = "
403 << evtRecEvent->totalCharged() << " , "
404 << evtRecEvent->totalNeutral() << " , "
405 << evtRecEvent->totalTracks() <<endreq;
406 // if(evtRecEvent->totalNeutral()>30)return sc;
407 m_ncharg = evtRecEvent->totalCharged();
408
409 m_nneu = evtRecEvent->totalNeutral();
410
411
412
413 HepPoint3D vx(0., 0., 0.);
414 HepSymMatrix Evx(3, 0);
415 IVertexDbSvc* vtxsvc;
416 Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc);
417 if(vtxsvc->isVertexValid()){
418 double* dbv = vtxsvc->PrimaryVertex();
419 double* vv = vtxsvc->SigmaPrimaryVertex();
420 // if (m_reader.isRunNumberValid( m_run)) {
421 // HepVector dbv = m_reader.PrimaryVertex( m_run);
422 // HepVector vv = m_reader.SigmaPrimaryVertex( m_run);
423 vx.setX(dbv[0]);
424 vx.setY(dbv[1]);
425 vx.setZ(dbv[2]);
426 Evx[0][0]=vv[0]*vv[0];
427 Evx[0][1]=vv[0]*vv[1];
428 Evx[1][1]=vv[1]*vv[1];
429 Evx[1][2]=vv[1]*vv[2];
430 Evx[2][2]=vv[2]*vv[2];
431 }
432
433 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
434 if (!evtRecTrkCol)
435 {
436 log << MSG::FATAL << "Could not find EvtRecTrackCol" << endreq;
437 return StatusCode::SUCCESS;
438 }
439 Vint iGood;
440 iGood.clear();
441
442 int nCharge = 0;
443
444 for(int i = 0; i < evtRecEvent->totalCharged(); i++){
445 EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
446 if(!(*itTrk)->isMdcTrackValid()) continue;
447 if(!(*itTrk)->isMdcKalTrackValid()) continue;
448
449 RecMdcTrack *mdcTrk = (*itTrk)->mdcTrack();
450 double pch=mdcTrk->p();
451 double x0=mdcTrk->x();
452 double y0=mdcTrk->y();
453 double z0=mdcTrk->z();
454 double phi0=mdcTrk->helix(1);
455 double xv=vx.x();
456 double yv=vx.y();
457 double zv=vx.z();
458 double Rxy=(x0-xv)*cos(phi0)+(y0-yv)*sin(phi0);
459 double m_vx0 = x0;
460 double m_vy0 = y0;
461 double m_vz0 = z0;
462 double m_vr0 = Rxy;
463 if(fabs(z0) >= m_vz0cut) continue;
464 if(fabs(Rxy) >= m_vr0cut) continue;
465
466
467 if(fabs(m_vz0) >= m_vz0cut) continue;
468 if(m_vr0 >= m_vr0cut) continue;
469
470 // double cost = cos(mdcTrk->theta());
471 // if(fabs(cost) >= m_coscut ) continue;
472// iGood.push_back((*itTrk)->trackId());
473 iGood.push_back(i);
474 nCharge += mdcTrk->charge();
475
476 }
477
478
479
480
481
482 //
483 // Finish Good Charged Track Selection
484 //
485 int nGood = iGood.size();
486 m_ngch=nGood;
487 log << MSG::DEBUG << "ngood, totcharge = " << nGood << " , " << nCharge << endreq;
488
489 if((nGood != 2)||(nCharge!=0)){
490 return StatusCode::SUCCESS;
491 }
492
493 counter[1]++;
494
495 //
496 // Particle ID
497 //
498 Vint ipip, ipim, iep,iem,imup,imum;
499 ipip.clear();
500 ipim.clear();
501 iep.clear();
502 iem.clear();
503 imup.clear();
504 imum.clear();
505
506
508 for(int i = 0; i < m_ngch; i++) {
509 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i];
510 // if(pid) delete pid;
511 pid->init();
512 pid->setMethod(pid->methodProbability());
513 pid->setChiMinCut(4);
514 pid->setRecTrack(*itTrk);
515 pid->usePidSys(pid->useDedx() | pid->useTof1() | pid->useTof2());//|pid->useEmc()|pid->useMuc()); // use PID sub-system
516 pid->identify(pid->onlyElectron()|pid->onlyMuon()|pid->onlyPion()); // seperater Pion/Kaon/Proton
517 pid->calculate();
518 if(!(pid->IsPidInfoValid())) continue;
519 RecMdcTrack* mdcTrk = (*itTrk)->mdcTrack();
520 /// RecMdcKalTrack* mdcKalTrk = 0 ;
521 /// if((*itTrk)->isMdcKalTrackValid()) mdcKalTrk = (*itTrk)->mdcKalTrack();
522 double prob_pi = pid->probPion();
523 double prob_K = pid->probKaon();
524 double prob_p = pid->probProton();
525 double prob_e = pid->probElectron();
526 double prob_mu = pid->probMuon();
527 // std::cout << "prob "<< prob_pi << ", "<< prob_K << ", "<< prob_p << std::endl;
528 HepLorentzVector ptrk;
529 ptrk.setPx(mdcTrk->px()) ;
530 ptrk.setPy(mdcTrk->py()) ;
531 ptrk.setPz(mdcTrk->pz()) ;
532 double p3 = ptrk.mag() ;
533
534
535
536 m_pidcode[i]=1;
537 m_pidprob[i]=pid->prob(1);
538 m_pidchiDedx[i]=pid->chiDedx(1);
539 m_pidchiTof1[i]=pid->chiTof1(1);
540 m_pidchiTof2[i]=pid->chiTof2(1);
541 if(mdcTrk->charge() > 0) {
542 imup.push_back(iGood[i]);
543
544 }
545 if (mdcTrk->charge() < 0) {
546 imum.push_back(iGood[i]);
547
548 }
549
550
551 }
552
553 m_nep = iep.size() ;
554 m_nem = iem.size() ;
555 m_nmup = imup.size() ;
556 m_nmum = imum.size() ;
557
558 counter[2]++;
559
560 //
561 // Good neutral track selection
562 //
563 Vint iGam;
564 iGam.clear();
565 int iphoton=0;
566 for(int i = evtRecEvent->totalCharged(); i< evtRecEvent->totalTracks(); i++) {
567 if(i>=evtRecTrkCol->size())break;
568 EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
569 if(!(*itTrk)->isEmcShowerValid()) continue;
570 RecEmcShower *emcTrk = (*itTrk)->emcShower();
571 Hep3Vector emcpos(emcTrk->x(), emcTrk->y(), emcTrk->z());
572
573 RecEmcID showerId = emcTrk->getShowerId();
574 unsigned int npart = EmcID::barrel_ec(showerId);
575 int n = emcTrk->numHits();
576 int module=emcTrk->module();
577 double x = emcTrk->x();
578 double y = emcTrk->y();
579 double z = emcTrk->z();
580 double dx = emcTrk->dx();
581 double dy = emcTrk->dy();
582 double dth = emcTrk->dtheta();
583 double dph = emcTrk->dphi();
584 double dz = emcTrk->dz();
585 double energy = emcTrk->energy();
586 double dE = emcTrk->dE();
587 double eSeed = emcTrk->eSeed();
588 double e3x3 = emcTrk->e3x3();
589 double e5x5 = emcTrk->e5x5();
590 double secondMoment = emcTrk->secondMoment();
591 double latMoment = emcTrk->latMoment();
592 double getTime = emcTrk->time();
593 double getEAll = emcTrk->getEAll();
594 double a20Moment = emcTrk->a20Moment();
595 double a42Moment = emcTrk->a42Moment();
596 // int phigap=emcTrk->PhiGap();
597 // int thetagap=emcTrk->ThetaGap();
598 // double getETof2x1 = emcTrk->getETof2x1();
599 // double getETof2x3 = emcTrk->getETof2x3();
600 // double getELepton = emcTrk->getELepton();
601 double nseed=0;//(emcTrk->getCluster() )->getSeedSize() ;
602 HepPoint3D EmcPos(x,y,z);
603 m_nemchits[iphoton]=n;
604 m_npart[iphoton]=npart;
605 m_module[iphoton]=module;
606 m_theta[iphoton]=EmcPos.theta();
607 m_phi[iphoton]=EmcPos.phi();
608 m_x[iphoton]=x;
609 m_y[iphoton]=y;
610 m_z[iphoton]=z;
611 m_dx[iphoton]=dx;
612 m_dy[iphoton]=dy;
613 m_dz[iphoton]=dz;
614 m_dtheta[iphoton]=dth;
615 m_dphi[iphoton]=dph;
616 m_energy[iphoton]=energy;
617 m_dE[iphoton]=dE;
618 m_eSeed[iphoton]=eSeed;
619 m_nSeed[iphoton]=nseed;
620 m_e3x3[iphoton]=e3x3;
621 m_e5x5[iphoton]=e5x5;
622 m_secondMoment[iphoton]=secondMoment;
623 m_latMoment[iphoton]=latMoment;
624 m_getTime[iphoton]=getTime;
625 m_getEAll[iphoton]=getEAll;
626 m_a20Moment[iphoton]=a20Moment;
627 m_a42Moment[iphoton]=a42Moment;
628
629 // m_getELepton[iphoton]=getELepton;
630 // m_getETof2x1[iphoton]=getETof2x1;
631 // m_getETof2x3[iphoton]=getETof2x3;
632 // m_PhiGap[iphoton]=phigap;
633 // m_ThetaGap[iphoton]=thetagap;
634 double dthe = 200.;
635 double dphi = 200.;
636 double dang = 200.;
637
638 // find the nearest charged track
639 for(int j = 0; j < nGood; j++) {
640
641
642 EvtRecTrackIterator jtTrk = evtRecTrkCol->begin() +iGood[j];
643 if (!(*jtTrk)->isMdcTrackValid()) continue;
644 RecMdcTrack *jtmdcTrk = (*jtTrk)->mdcTrack();
645 double jtcharge = jtmdcTrk->charge();
646 if(!(*jtTrk)->isExtTrackValid()) continue;
647 RecExtTrack *extTrk = (*jtTrk)->extTrack();
648 if(extTrk->emcVolumeNumber() == -1) continue;
649 Hep3Vector extpos = extTrk->emcPosition();
650 // double ctht = extpos.cosTheta(emcpos);
651 double angd = extpos.angle(emcpos);
652 double thed = extpos.theta() - emcpos.theta();
653 double phid = extpos.deltaPhi(emcpos);
654 thed = fmod(thed+CLHEP::twopi+CLHEP::twopi+pi, CLHEP::twopi) - CLHEP::pi;
655 phid = fmod(phid+CLHEP::twopi+CLHEP::twopi+pi, CLHEP::twopi) - CLHEP::pi;
656
657 if(fabs(thed) < fabs(dthe)) dthe = thed;
658 if(fabs(phid) < fabs(dphi)) dphi = phid;
659 if(angd < dang) dang = angd;
660
661 }
662
663
664
665 //
666 // good photon cut will be set here
667 //
668
669 dthe = dthe * 180 / (CLHEP::pi);
670 dphi = dphi * 180 / (CLHEP::pi);
671 dang = dang * 180 / (CLHEP::pi);
672 double eraw = emcTrk->energy();
673 double phi = emcTrk->phi();
674 double the = emcTrk->theta();
675
676 m_delphi[iphoton]=dphi;
677 m_delthe[iphoton]=dthe;
678 m_delang[iphoton]=dang;
679 if(energy < m_energyThreshold) continue;
680 if(getTime>m_gammathCut||getTime<m_gammatlCut)continue;
681 // if((fabs(dthe) < m_gammaThetaCut) && (fabs(dphi)<m_gammaPhiCut) ) continue;
682 if(dang< m_gammaTrkCut) continue;
683 iphoton++;
684 iGam.push_back(i);
685 if(iphoton>=40)return StatusCode::SUCCESS;
686 }
687
688 int nGam = iGam.size();
689 m_nGam=nGam;
690 // std::cout << "num Good Photon " << m_nGam << " , " <<evtRecEvent->totalNeutral()<<std::endl;
691 //std::cout<<"dbg_4"<<std::endl;
692 counter[3]++;
693
694 double egam_ext=0;
695 double ex_gam=0;
696 double ey_gam=0;
697 double ez_gam=0;
698 double et_gam=0;
699 double e_gam=0;
700 for(int i = 0; i < m_nGam; i++) {
701 EvtRecTrackIterator itTrk = evtRecTrkCol->begin()+ iGam[i];
702 if(!(*itTrk)->isEmcShowerValid()) continue;
703 RecEmcShower* emcTrk = (*itTrk)->emcShower();
704 double eraw = emcTrk->energy();
705 double phi = emcTrk->phi();
706 double the = emcTrk->theta();
707 HepLorentzVector ptrk;
708 ex_gam+=eraw*sin(the)*cos(phi);
709 ey_gam+=eraw*sin(the)*sin(phi);
710 ez_gam+=eraw*cos(the);
711 et_gam+=eraw*sin(the);
712 e_gam+=eraw ;
713 if(eraw>=egam_ext)
714 {
715 egam_ext=eraw;
716 }
717
718 }
719
720
721
722
723
724 double px_had=0;
725 double py_had=0;
726 double pz_had=0;
727 double pt_had=0;
728 double p_had=0;
729 double e_had=0;
730 //
731 // check good charged track's infomation
732 //
733 int ii ;
734 m_e_emc[0]=-0.1;
735 m_e_emc[1]=-0.1;
736 for(int i = 0; i < m_ngch; i++ ){
737
738 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i];
739
740 if(!(*itTrk)->isMdcTrackValid()) continue; // MDC information
741 if(!(*itTrk)->isMdcKalTrackValid()) continue;
742 // if(!(*itTrk)->isEmcShowerValid()) return StatusCode::SUCCESS;///dbg
743 RecMdcTrack* mdcTrk = (*itTrk)->mdcTrack();
744 RecMdcKalTrack *mdcKalTrk = (*itTrk)->mdcKalTrack();
745 ii=i;
746
747
748 m_charge[ii] = mdcTrk->charge();
749 m_vx0[ii] = mdcTrk->x();
750 m_vy0[ii] = mdcTrk->y();
751 m_vz0[ii] = mdcTrk->z();
752
753
754 m_px[ii] = mdcTrk->px();
755 m_py[ii] = mdcTrk->py();
756 m_pz[ii] = mdcTrk->pz();
757 m_p[ii] = mdcTrk->p();
758
759
761
762
763 /// if(m_pidcode[ii]==3)mdcKalTrk->setPidType(RecMdcKalTrack::kaon);
764 /// if(m_pidcode[ii]==4)mdcKalTrk->setPidType(RecMdcKalTrack::proton);
765 m_kal_vx0[ii] = mdcKalTrk->x();
766 m_kal_vy0[ii] = mdcKalTrk->y();
767 m_kal_vz0[ii] = mdcKalTrk->z();
768
769
770 m_kal_px[ii] = mdcKalTrk->px();
771 m_kal_py[ii] = mdcKalTrk->py();
772 m_kal_pz[ii] = mdcKalTrk->pz();
773 m_kal_p[ii] = mdcKalTrk->p();
774
775
776 px_had+=mdcKalTrk->px();
777 py_had+=mdcKalTrk->py();
778 pz_had+=mdcKalTrk->pz();
779 pt_had+=mdcKalTrk->pxy();
780 p_had+=mdcKalTrk->p();
781 e_had+=sqrt(mdcKalTrk->p()*mdcKalTrk->p()+mdcKalTrk->mass()*mdcKalTrk->mass());
782
783 double ptrk = mdcKalTrk->p() ;
784
785
786 if((*itTrk)->isMdcDedxValid()) { // DEDX information
787
788 RecMdcDedx* dedxTrk = (*itTrk)->mdcDedx();
789 m_probPH[ii]= dedxTrk->probPH();
790 m_normPH[ii]= dedxTrk->normPH();
791
792 m_chie[ii] = dedxTrk->chiE();
793 m_chimu[ii] = dedxTrk->chiMu();
794 m_chipi[ii] = dedxTrk->chiPi();
795 m_chik[ii] = dedxTrk->chiK();
796 m_chip[ii] = dedxTrk->chiP();
797 m_ghit[ii] = dedxTrk->numGoodHits();
798 m_thit[ii] = dedxTrk->numTotalHits();
799 }
800
801 if((*itTrk)->isEmcShowerValid()) {
802
803 RecEmcShower *emcTrk = (*itTrk)->emcShower();
804 m_e_emc[ii] = emcTrk->energy();
805 m_phi_emc[ii] = emcTrk->phi();
806 m_theta_emc[ii] = emcTrk->theta();
807 }
808
809
810 if((*itTrk)->isMucTrackValid()){
811
812 RecMucTrack* mucTrk = (*itTrk)->mucTrack() ;
813 m_nhit_muc[ii] = mucTrk->numHits() ;
814 m_nlay_muc[ii] = mucTrk->numLayers() ;
815
816 }
817
818 if((*itTrk)->isTofTrackValid()) { //TOF information
819
820 SmartRefVector<RecTofTrack> tofTrkCol = (*itTrk)->tofTrack();
821
822 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
823
824 for(;iter_tof != tofTrkCol.end(); iter_tof++ ) {
825 TofHitStatus *status = new TofHitStatus;
826 status->setStatus((*iter_tof)->status());
827
828 if(!(status->is_barrel())){//endcap
829 if( (status->is_cluster()) ) m_t_etof[ii] = (*iter_tof)->tof();
830 if( !(status->is_counter()) ){ if(status) delete status; continue;} // ?
831 if( status->layer()!=0 ) { if(status) delete status;continue;}//layer1
832 double path=(*iter_tof)->path(); // ?
833 double tof = (*iter_tof)->tof();
834 double ph = (*iter_tof)->ph();
835 double rhit = (*iter_tof)->zrhit();
836 double qual = 0.0 + (*iter_tof)->quality();
837 double cntr = 0.0 + (*iter_tof)->tofID();
838 double texp[5];
839 for(int j = 0; j < 5; j++) {
840 double gb = ptrk/xmass[j];
841 double beta = gb/sqrt(1+gb*gb);
842 texp[j] = path /beta/velc;
843 }
844
845 m_qual_etof[ii] = qual;
846 m_tof_etof[ii] = tof ;
847 }
848 else {//barrel
849 if( (status->is_cluster()) ) m_t_btof[ii] = (*iter_tof)->tof();
850 if( !(status->is_counter()) ){ if(status) delete status; continue;} // ?
851 if(status->layer()==1){ //layer1
852 double path=(*iter_tof)->path(); // ?
853 double tof = (*iter_tof)->tof();
854 double ph = (*iter_tof)->ph();
855 double rhit = (*iter_tof)->zrhit();
856 double qual = 0.0 + (*iter_tof)->quality();
857 double cntr = 0.0 + (*iter_tof)->tofID();
858 double texp[5];
859 for(int j = 0; j < 5; j++) {
860 double gb = ptrk/xmass[j];
861 double beta = gb/sqrt(1+gb*gb);
862 texp[j] = path /beta/velc;
863 }
864
865 m_qual_btof1[ii] = qual;
866 m_tof_btof1[ii] = tof ;
867 }
868
869 if(status->layer()==2){//layer2
870 double path=(*iter_tof)->path(); // ?
871 double tof = (*iter_tof)->tof();
872 double ph = (*iter_tof)->ph();
873 double rhit = (*iter_tof)->zrhit();
874 double qual = 0.0 + (*iter_tof)->quality();
875 double cntr = 0.0 + (*iter_tof)->tofID();
876 double texp[5];
877 for(int j = 0; j < 5; j++) {
878 double gb = ptrk/xmass[j];
879 double beta = gb/sqrt(1+gb*gb);
880 texp[j] = path /beta/velc;
881 }
882
883 m_qual_btof2[ii] = qual;
884 m_tof_btof2[ii] = tof ;
885 }
886 }
887 if(status) delete status;
888 }
889 }
890
891 }
892 counter[4]++;
893
894 //std::cout<<"dbg_5"<<std::endl;
895 //tag
896
897
898 m_dimutag=0;
899 if(m_ngch != 2 || nCharge != 0 ) return StatusCode::SUCCESS;
900
901 EvtRecTrackIterator itTrk1;
902
903 EvtRecTrackIterator itTrk2;
904
905 RecMdcKalTrack *mdcKalTrk1;
906
907 RecMdcKalTrack *mdcKalTrk2;
908
909 HepLorentzVector p41e,p42e,p4le;
910 Hep3Vector p31e,p32e,p3le;
911 HepLorentzVector p41m,p42m,p4lm;
912 Hep3Vector p31m,p32m,p3lm;
913 HepLorentzVector p41h,p42h,p4lh;
914 Hep3Vector p31h,p32h,p3lh;
915 WTrackParameter w1_ini;
916 WTrackParameter w2_ini;
917 int iip=-1;
918 int iim=-1;
919 for(int i = 0; i < m_ngch; i++ ){
920 if(m_charge[i]>0)itTrk1= evtRecTrkCol->begin() + iGood[i];
921 if(m_charge[i]<0) itTrk2= evtRecTrkCol->begin() + iGood[i];
922 if(m_charge[i]>0) mdcKalTrk1 = (*itTrk1)->mdcKalTrack();
923 if(m_charge[i]<0) mdcKalTrk2 = (*itTrk2)->mdcKalTrack();
924 if(m_charge[i]>0)iip=i;
925 if(m_charge[i]<0)iim=i;
926
927
928 if(m_charge[i]>0) w1_ini=WTrackParameter (xmass[1],mdcKalTrk1->getZHelixMu(),mdcKalTrk1->getZErrorMu());
929 if(m_charge[i]<0) w2_ini=WTrackParameter (xmass[1],mdcKalTrk2 ->getZHelixMu(),mdcKalTrk2 ->getZErrorMu());
930
931
932 if(m_charge[i]>0) p41m =w1_ini.p();
933 if(m_charge[i]<0) p42m =w2_ini.p();
934 if(m_charge[i]>0) p41m.boost(u_cms);
935 if(m_charge[i]<0) p42m.boost(u_cms);
936 if(m_charge[i]>0) p31m = p41m.vect();
937 if(m_charge[i]<0) p32m = p42m.vect();
938
939
940 if(m_charge[i]>0){
941 m_px_cms_ep=p41m.px();
942 m_py_cms_ep=p41m.py();
943 m_pz_cms_ep=p41m.pz();
944 m_e_cms_ep=p41m.e();
945 }
946 if(m_charge[i]<0){
947 m_px_cms_em=p42m.px();
948 m_py_cms_em=p42m.py();
949 m_pz_cms_em=p42m.pz();
950 m_e_cms_em=p42m.e();
951 }
952
953
954 }
955
956 double e01=(iip!=-1)?m_e_emc[iip]:0;//m_e_cms_ep;
957 double e02=(iim!=-1)?m_e_emc[iim]:0;//m_e_cms_em;
958 int ilarge=( e01 > e02 ) ?iip:iim;
959
960 p4lm=( e01 > e02 ) ?p41m:p42m;
961
962
963 p3lm=( e01 > e02 ) ?p31m:p32m;
964
965
966 double acollm= 180.-p31m.angle(p32m)* 180.0 / CLHEP::pi;
967 double acoplm= 180.- (p31m.perpPart()).angle(p32m.perpPart ())* 180.0 / CLHEP::pi;
968 double poeb1m=p41m.rho()/beamEnergy;
969 double poeb2m=p42m.rho()/beamEnergy;
970 double poeblm=p4lm.rho()/beamEnergy;
971
972 double eemc1=m_e_emc[iip];
973 double eemc2=m_e_emc[iim];
974
975
976 double ex1=m_kal_vx0[iip];
977 double ey1=m_kal_vy0[iip];
978 double ez1=m_kal_vz0[iip];
979 double epx1=m_kal_px[iip];
980 double epy1=m_kal_py[iip];
981 double epz1=m_kal_pz[iip];
982 double epp1=m_kal_p[iip];
983 double ex2=m_kal_vx0[iim];
984 double ey2=m_kal_vy0[iim];
985 double ez2=m_kal_vz0[iim];
986 double epx2=m_kal_px[iim];
987 double epy2=m_kal_py[iim];
988 double epz2=m_kal_pz[iim];
989 double epp2=m_kal_p[iim];
990
991 double pidchidedx1=m_pidchiDedx[iip];
992 double pidchitof11= m_pidchiTof1[iip];
993 double pidchitof21= m_pidchiTof2[iip];
994 double pidchidedx2=m_pidchiDedx[iim];
995 double pidchitof12= m_pidchiTof1[iim];
996 double pidchitof22= m_pidchiTof2[iim];
997
998 double eoeb1=m_e_emc[iip]/beamEnergy;
999 double eoeb2=m_e_emc[iim]/beamEnergy;
1000
1001
1002 double eopm1=0;
1003 if(p41m.rho()>0)eopm1=m_e_emc[iip]/p41m.rho();
1004 double eopm2=0;
1005 if(p42m.rho()>0)eopm2=m_e_emc[iim]/p42m.rho();
1006
1007
1008 double exoeb1= m_e_emc[iip]*sin(m_theta_emc[iip])*cos(m_phi_emc[iip])/beamEnergy;
1009 double eyoeb1= m_e_emc[iip]*sin(m_theta_emc[iip])*sin(m_phi_emc[iip])/beamEnergy;
1010 double ezoeb1=m_e_emc[iip]*cos(m_theta_emc[iip])/beamEnergy;
1011 double etoeb1=m_e_emc[iip]*sin(m_theta_emc[iip])/beamEnergy;
1012
1013 double exoeb2= m_e_emc[iim]*sin(m_theta_emc[iim])*cos(m_phi_emc[iim])/beamEnergy;
1014 double eyoeb2= m_e_emc[iim]*sin(m_theta_emc[iim])*sin(m_phi_emc[iim])/beamEnergy;
1015 double ezoeb2=m_e_emc[iim]*cos(m_theta_emc[iim])/beamEnergy;
1016 double etoeb2=m_e_emc[iim]*sin(m_theta_emc[iim])/beamEnergy;
1017
1018 double eoebl=m_e_emc[ilarge]/beamEnergy;
1019
1020 double eopl=0;
1021 if(p4lm.rho()>0)eopl=m_e_emc[ilarge]/p4lh.rho();
1022
1023 double exoebl= m_e_emc[ilarge]*sin(m_theta_emc[ilarge])*cos(m_phi_emc[ilarge])/beamEnergy;
1024 double eyoebl= m_e_emc[ilarge]*sin(m_theta_emc[ilarge])*sin(m_phi_emc[ilarge])/beamEnergy;
1025 double ezoebl=m_e_emc[ilarge]*cos(m_theta_emc[ilarge])/beamEnergy;
1026 double etoebl=m_e_emc[ilarge]*sin(m_theta_emc[ilarge])/beamEnergy;
1027
1028 int mucinfo1=(m_nhit_muc[iip]>=2&&m_nlay_muc[iip]>=2 ) ? 1 : 0;
1029 int mucinfo2=(m_nhit_muc[iim]>=2&&m_nlay_muc[iim]>=2) ? 1 : 0;
1030 int mucinfol=(m_nhit_muc[ilarge]>=2&&m_nlay_muc[ilarge]>=2) ? 1 : 0;
1031 int pidel=( e01 > e02 ) ? m_nep : m_nem;
1032 int pidmul=( e01 > e02 ) ? m_nmup : m_nmum;
1033 double deltatof=0;
1034
1035 if(m_t_btof[iip]*m_t_btof[iim]!=0) deltatof+=fabs(m_t_btof[iip]-m_t_btof[iim]);
1036 if(m_t_etof[iip]*m_t_etof[iim]!=0) deltatof+=fabs(m_t_etof[iip]-m_t_etof[iim]);
1037
1038
1039 if(acollm<m_acoll_mu_cut)m_dimutag+=1;
1040 if (acoplm<m_acopl_mu_cut)m_dimutag+=10;
1041 if (fabs(m_ecms-mpsi2s)<0.001){
1042 if((sqrt(((poeb1m-poeb2m)/0.35)*((poeb1m-poeb2m)/0.35)+((poeb1m+poeb2m-1.68)/0.125)*((poeb1m+poeb2m-1.68)/0.125))>m_tptotal_mu_cut)
1043 &&(((poeb1m>=m_tpoebh_mu_cut)&&(poeb2m>=m_tpoebl_mu_cut))
1044 ||((poeb2m>=m_tpoebh_mu_cut)&&(poeb1m>=m_tpoebl_mu_cut))))m_dimutag+=100;
1045 }
1046 else{
1047 if((fabs(poeb1m-1)<m_poeb_mu_cut)&&(fabs(poeb2m-1)<m_poeb_mu_cut))m_dimutag+=100;
1048 }
1049 if(!m_useTOF||(deltatof<m_dtof_mu_cut))m_dimutag+=1000;
1050 if(!m_useMUC||(mucinfo1==1&&mucinfo2==1))m_dimutag+=10000;
1051 if(etoeb1<m_eoeb_mu_cut&&eoeb2<m_eoeb_mu_cut)m_dimutag+=100000;
1052 if(etoeb1+etoeb2<m_etotal_mu_cut)m_dimutag+=1000000;
1053 if(!m_usePID||(m_nmup==1&&m_nmum==1))m_dimutag+=10000000;
1054
1055
1056
1057
1058
1059
1060
1061 m_acoll=acollm;
1062 m_acopl=acoplm;
1063 m_poeb1=poeb1m;
1064 m_poeb2=poeb2m;
1065 m_eop1=eopm1;
1066 m_eop2=eopm2;
1067 m_cos_ep=p41m.cosTheta ();
1068 m_cos_em=p42m.cosTheta ();
1069 m_mass_ee=(p41m+p42m).m();
1070
1071 m_deltatof=deltatof;
1072
1073 m_eoeb1=eoeb1;
1074 m_eoeb2=eoeb2;
1075
1076 m_etoeb1=etoeb1;
1077 m_etoeb2=etoeb2;
1078 m_mucinfo1=mucinfo1;
1079 m_mucinfo2=mucinfo2;
1080
1081 if(m_dimutag==11111111){
1082 ndimu++;
1083 if(m_writentuple)m_tuple1 -> write();
1084 ////////////////////////////////////////////////////////////
1085 // DQA
1086 // set tag and quality
1087
1088 // Pid: 1 - electron, 2 - muon, 3 - pion, 4 - kaon, 5 - proton
1089 (*itTrk1)->setPartId(2);
1090 (*itTrk2)->setPartId(2);
1091
1092 // Quality: defined by whether dE/dx or TOF is used to identify particle
1093 // 0 - no dE/dx, no TOF (can be used for dE/dx and TOF calibration)
1094 // 1 - only dE/dx (can be used for TOF calibration)
1095 // 2 - only TOF (can be used for dE/dx calibration)
1096 // 3 - Both dE/dx and TOF
1097
1098 (*itTrk1)->setQuality(0);
1099 (*itTrk2)->setQuality(0);
1100 // DQA
1101 // Add the line below at the end of execute(), (before return)
1102 //
1103 setFilterPassed(true);
1104 ////////////////////////////////////////////////////////////
1105
1106
1107
1108 m_mumu_mass->Fill((p41m+p42m).m());
1109 m_mumu_acoll->Fill(acollm);
1110 m_mumu_eop_mup->Fill(eopm1);
1111 m_mumu_eop_mum->Fill(eopm2);
1112 m_mumu_costheta_mup->Fill(p41m.cosTheta ());
1113 m_mumu_costheta_mum->Fill(p42m.cosTheta ());
1114 m_mumu_phi_mup->Fill(p41m.phi ());
1115 m_mumu_phi_mum->Fill(p42m.phi ());
1116 m_mumu_nneu->Fill(m_nGam);
1117 m_mumu_nhit->Fill(m_nhit_muc[ilarge]);
1118 m_mumu_nlay->Fill(m_nlay_muc[ilarge]);
1119
1120
1121 m_mumu_eemc_mup->Fill(eemc1);
1122 m_mumu_eemc_mum->Fill(eemc2);
1123
1124 m_mumu_x_mup->Fill(ex1);
1125 m_mumu_y_mup->Fill(ey1);
1126 m_mumu_z_mup->Fill(ez1);
1127
1128 m_mumu_x_mum->Fill(ex2);
1129 m_mumu_y_mum->Fill(ey2);
1130 m_mumu_z_mum->Fill(ez2);
1131
1132
1133 m_mumu_px_mup->Fill(epx1);
1134 m_mumu_py_mup->Fill(epy1);
1135 m_mumu_pz_mup->Fill(epz1);
1136 m_mumu_p_mup->Fill(epp1);
1137
1138 m_mumu_px_mum->Fill(epx2);
1139 m_mumu_py_mum->Fill(epy2);
1140 m_mumu_pz_mum->Fill(epz2);
1141 m_mumu_p_mum->Fill(epp2);
1142
1143 m_mumu_deltatof->Fill(deltatof);
1144
1145 m_mumu_pidchidedx_mup->Fill(pidchidedx1);
1146 m_mumu_pidchidedx_mum->Fill(pidchidedx2);
1147 m_mumu_pidchitof1_mup->Fill(pidchitof11);
1148 m_mumu_pidchitof1_mum->Fill(pidchitof12);
1149 m_mumu_pidchitof2_mup->Fill(pidchitof21);
1150 m_mumu_pidchitof2_mum->Fill(pidchitof22);
1151
1152
1153
1154 }
1155
1156
1157
1158
1159
1160
1161
1162
1163 return StatusCode::SUCCESS;
1164
1165
1166
1167
1168
1169
1170}
1171
1172// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1174
1175 MsgStream log(msgSvc(), name());
1176 log << MSG::INFO << "in finalize()" << endmsg;
1177 return StatusCode::SUCCESS;
1178}
1179
1180
double sin(const BesAngle a)
Definition BesAngle.h:210
double cos(const BesAngle a)
Definition BesAngle.h:213
const Hep3Vector u_cms
const HepLorentzVector p_cms(0.034067, 0.0, 0.0, 3.097)
const double mpsi2s
HepGeom::Point3D< double > HepPoint3D
std::vector< HepLorentzVector > Vp4
const double xmass[5]
const double mpsi2s
const double velc
const double mk
const double mpi
std::vector< int > Vint
const Int_t n
Double_t x[10]
EvtRecTrackCol::iterator EvtRecTrackIterator
const double xmass[5]
Definition Gam4pikp.cxx:50
const double velc
Definition Gam4pikp.cxx:51
std::vector< int > Vint
Definition Gam4pikp.cxx:52
************Class m_ypar INTEGER m_KeyWgt INTEGER m_nphot INTEGER m_KeyGPS INTEGER m_IsBeamPolarized INTEGER m_EvtGenInterface DOUBLE PRECISION m_Emin DOUBLE PRECISION m_sphot DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_q2 DOUBLE PRECISION m_PolBeam2 DOUBLE PRECISION m_xErrPb *COMMON c_KK2f $ !CMS energy average $ !Spin Polarization vector first beam $ !Spin Polarization vector second beam $ !Beam energy spread[GeV] $ !minimum hadronization energy[GeV] $ !input READ never touch them !$ !debug facility $ !maximum weight $ !inverse alfaQED $ !minimum real photon energy
Definition KK2f.h:50
INTupleSvc * ntupleSvc()
IMessageSvc * msgSvc()
DQASelDimu(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize()
StatusCode finalize()
StatusCode execute()
double dy() const
double latMoment() const
double a42Moment() const
double eSeed() const
double dphi() const
double theta() const
int module() const
double e3x3() const
double dz() const
double phi() const
double dx() const
double secondMoment() const
double x() const
double e5x5() const
double time() const
double z() const
int numHits() const
double a20Moment() const
double energy() const
double dE() const
double dtheta() const
double y() const
const Hep3Vector emcPosition() const
const int emcVolumeNumber() const
double probPH() const
Definition DstMdcDedx.h:66
double chiE() const
Definition DstMdcDedx.h:59
int numTotalHits() const
Definition DstMdcDedx.h:65
int numGoodHits() const
Definition DstMdcDedx.h:64
double normPH() const
Definition DstMdcDedx.h:67
double chiPi() const
Definition DstMdcDedx.h:61
double chiK() const
Definition DstMdcDedx.h:62
double chiMu() const
Definition DstMdcDedx.h:60
double chiP() const
Definition DstMdcDedx.h:63
const double y() const
const double px() const
const double z() const
static void setPidType(PidType pidType)
const double pz() const
const double py() const
const double p() const
const double mass() const
const double x() const
const double pxy() const
const double py() const
Definition DstMdcTrack.h:56
const int charge() const
Definition DstMdcTrack.h:53
const double px() const
Definition DstMdcTrack.h:55
const double pz() const
Definition DstMdcTrack.h:57
const HepVector helix() const
......
const double z() const
Definition DstMdcTrack.h:63
const double p() const
Definition DstMdcTrack.h:58
const double y() const
Definition DstMdcTrack.h:62
const double x() const
Definition DstMdcTrack.h:61
int numHits() const
Definition DstMucTrack.h:41
int numLayers() const
Definition DstMucTrack.h:42
static unsigned int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0)
Definition EmcID.cxx:38
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
int useTof2() const
int methodProbability() const
int useDedx() const
int onlyMuon() const
int onlyElectron() const
int onlyPion() const
int useTof1() const
void setChiMinCut(const double chi=4)
void setRecTrack(EvtRecTrack *trk)
double probKaon() const
Definition ParticleID.h:131
void setMethod(const int method)
Definition ParticleID.h:101
double prob(int n) const
Definition ParticleID.h:121
double chiTof2(int n) const
void identify(const int pidcase)
Definition ParticleID.h:110
double probMuon() const
Definition ParticleID.h:129
double probElectron() const
Definition ParticleID.h:128
void usePidSys(const int pidsys)
Definition ParticleID.h:104
static ParticleID * instance()
bool IsPidInfoValid() const
double probPion() const
Definition ParticleID.h:130
double chiTof1(int n) const
void calculate()
void init()
double probProton() const
Definition ParticleID.h:132
double chiDedx(int n) const
RecEmcID getShowerId() const
RecEmcEnergy getEAll() const
HepVector & getZHelixMu()
HepSymMatrix & getZErrorMu()
bool is_barrel() const
unsigned int layer() const
bool is_cluster() const
void setStatus(unsigned int status)
bool is_counter() const
HepLorentzVector p() const
_EXTERN_ std::string EvtRecEvent
Definition EventModel.h:134
_EXTERN_ std::string EvtRecTrackCol
Definition EventModel.h:135
const float pi
Definition vector3.h:133