23 chan =
new evioFileChannel(source_name,
"r", 65536);
25 jout <<
"Opened EVIO file \""<<source_name<<
"\" for reading"<<endl;
29 tagMap[
"DTrackTimeBased"] = pair<int, int>(11500,0);
30 tagMap[
"DTrackTimeBased.objId"] = pair<int, int>(11500, 1);
31 tagMap[
"DTrackTimeBased.chisq"] = pair<int, int>(11500, 2);
32 tagMap[
"DTrackTimeBased.Ndof"] = pair<int, int>(11500, 3);
33 tagMap[
"DTrackTimeBased.FOM"] = pair<int, int>(11500, 4);
34 tagMap[
"DTrackTimeBased.x"] = pair<int, int>(11500, 5);
35 tagMap[
"DTrackTimeBased.y"] = pair<int, int>(11500, 6);
36 tagMap[
"DTrackTimeBased.z"] = pair<int, int>(11500, 7);
37 tagMap[
"DTrackTimeBased.px"] = pair<int, int>(11500, 8);
38 tagMap[
"DTrackTimeBased.py"] = pair<int, int>(11500, 9);
39 tagMap[
"DTrackTimeBased.pz"] = pair<int, int>(11500, 10);
40 tagMap[
"DTrackTimeBased.q"] = pair<int, int>(11500, 11);
41 tagMap[
"DTrackTimeBased.E"] = pair<int, int>(11500, 12);
42 tagMap[
"DTrackTimeBased.mass"] = pair<int, int>(11500, 13);
43 tagMap[
"DTrackTimeBased.t0"] = pair<int, int>(11500, 14);
44 tagMap[
"DTrackTimeBased.assocObjectBanks"] = pair<int, int>(11500, 254);
45 tagMap[
"DTrackTimeBased.assocObjects"] = pair<int, int>(11500, 255);
47 }
catch (evioException
e) {
48 jerr << e.toString() << endl;
51 jerr <<
"?unknown exception" << endl;
70 }
catch (evioException
e) {
71 jerr << e.toString() << endl;
74 jerr <<
"?unknown exception" << endl;
84 if(
chan==NULL)
return NO_MORE_EVENTS_IN_SOURCE;
87 evioDOMTree *evt =
new evioDOMTree(
chan);
90 event.SetJEventSource(
this);
91 event.SetEventNumber(++Nevents_read);
92 event.SetRunNumber(1);
96 return NO_MORE_EVENTS_IN_SOURCE;
107 evioDOMTree *evt = (evioDOMTree*)event.GetRef();
112 map<evioDOMTree*, vector<DReferenceTrajectory*> >::iterator iter =
rt_by_event.find(evt);
114 vector<DReferenceTrajectory*> &rts = iter->second;
115 for(
unsigned int i=0; i<rts.size(); i++)
rt_pool.push_back(rts[i]);
132 if(!factory)
throw RESOURCE_UNAVAILABLE;
134 evioDOMTree *evt = (evioDOMTree*)event.GetRef();
135 if(!evt)
throw RESOURCE_UNAVAILABLE;
138 JEventLoop *loop =
event.GetJEventLoop();
148 string dataClassName = factory->GetDataClassName();
150 if(dataClassName ==
"DTrackTimeBased")
153 return OBJECT_NOT_AVAILABLE;
167 if(factory==NULL)
return OBJECT_NOT_AVAILABLE;
169 vector<DTrackTimeBased*> data;
170 vector<DReferenceTrajectory*> rts;
172 bool event_had_tracktimebaseds =
false;
177 evioDOMNodeListP bList = evt->getNodeList(tagNumEquals(
tagMap[
"DTrackTimeBased"]));
180 evioDOMNodeList::const_iterator iter1;
181 for(iter1=bList->begin(); iter1!=bList->end(); iter1++) {
183 evioDOMNodeList *members = (*iter1)->getChildList();
186 const vector<uint64_t> &v_objId = GetVector<uint64_t>(members,
"DTrackTimeBased.objId");
187 const vector<float> &v_chisq = GetVector<float>(members,
"DTrackTimeBased.chisq");
188 const vector<int> &v_Ndof = GetVector<int>(members,
"DTrackTimeBased.Ndof");
189 const vector<float> &v_FOM = GetVector<float>(members,
"DTrackTimeBased.FOM");
190 const vector<float> &v_x = GetVector<float>(members,
"DTrackTimeBased.x");
191 const vector<float> &v_y = GetVector<float>(members,
"DTrackTimeBased.y");
192 const vector<float> &v_z = GetVector<float>(members,
"DTrackTimeBased.z");
193 const vector<float> &v_px = GetVector<float>(members,
"DTrackTimeBased.px");
194 const vector<float> &v_py = GetVector<float>(members,
"DTrackTimeBased.py");
195 const vector<float> &v_pz = GetVector<float>(members,
"DTrackTimeBased.pz");
196 const vector<float> &v_q = GetVector<float>(members,
"DTrackTimeBased.q");
198 const vector<float> &v_mass = GetVector<float>(members,
"DTrackTimeBased.mass");
204 list<DReferenceTrajectory*> my_rts;
206 while(my_rts.size() < v_objId.size()){
208 my_rts.push_back(
rt_pool.back());
217 event_had_tracktimebaseds =
true;
218 for(
unsigned int i=0; i<v_objId.size(); i++){
220 DVector3 pos(v_x[i], v_y[i], v_z[i]);
221 DVector3 mom(v_px[i], v_py[i], v_pz[i]);
227 track->setCharge(v_q[i]);
228 track->setMass(v_mass[i]);
229 track->
chisq = v_chisq[i];
230 track->
Ndof = v_Ndof[i];
231 track->
FOM = v_FOM[i];
232 track->id = v_objId[i];
245 data.push_back(track);
248 }
catch(JException &
e){
249 cout<<e.toString()<<endl;
254 if(event_had_tracktimebaseds){
255 factory->CopyTo(data);
263 map<evioDOMTree*, vector<DReferenceTrajectory*> >::iterator iter =
rt_by_event.find(evt);
265 vector<DReferenceTrajectory*> &my_rts = iter->second;
266 my_rts.insert(my_rts.end(), rts.begin(), rts.end());
279 return OBJECT_NOT_AVAILABLE;
void setMomentum(const DVector3 &aMomentum)
float chisq
Chi-squared for the track (not chisq/dof!)
DEventSourceEVIO(const char *source_name)
void FreeEvent(JEvent &event)
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
void SetMass(double mass)
void Swim(const DVector3 &pos, const DVector3 &mom, double q=-1000.0, const TMatrixFSym *cov=NULL, double smax=2000.0, const DCoordinateSystem *wire=NULL)
void SetDGeometry(const DGeometry *geom)
jerror_t Extract_DTrackTimeBased(evioDOMTree *evt, JFactory< DTrackTimeBased > *factory)
DMagneticFieldMap * bfield
map< evioDOMTree *, vector< DReferenceTrajectory * > > rt_by_event
DGeometry * GetDGeometry(unsigned int run_number)
int Ndof
Number of degrees of freedom in the fit.
double charge(void) const
virtual ~DEventSourceEVIO()
list< DReferenceTrajectory * > rt_pool
jerror_t GetEvent(JEvent &event)
void setPosition(const DVector3 &aPosition)
jerror_t GetObjects(JEvent &event, JFactory_base *factory)
map< string, pair< int, int > > tagMap