00001
00002 #include "cafe/EventList.hpp"
00003 #include "cafe/Event.hpp"
00004 #include "cafe/Config.hpp"
00005
00006 #include "TFile.h"
00007 #include "TEventList.h"
00008
00009 namespace cafe {
00010
00011 EventList::EventList(const char *name)
00012 : Processor(name),
00013 _list(0),
00014 _file(0)
00015 {
00016 Config config(name);
00017
00018 std::string filename = config.get("File", "");
00019 _tags = config.getVString("Tags"," ,");
00020
00021 if(filename != "") {
00022 _file = new TFile(filename.c_str(), "RECREATE");
00023 out() << "EventList[" << name << "] : Created event list file: " << filename << std::endl;
00024 }
00025
00026 }
00027
00028 EventList::~EventList()
00029 {
00030 }
00031
00032 void EventList::inputFileOpened(TFile *file)
00033 {
00034 if(_file) {
00035 _file->cd();
00036 _list = new TEventList((std::string("EVTS-") + gSystem->BaseName(file->GetName())).c_str(), file->GetName());
00037 }
00038 }
00039
00040 void EventList::inputFileClosing(TFile *file)
00041 {
00042 _list->Write();
00043
00044 _list = 0;
00045 }
00046
00047 bool EventList::processEvent(cafe::Event& event)
00048 {
00049 if(_list && (_tags.empty() || event.hasTag(_tags))) {
00050 _list->Enter(event.getTree()->GetReadEntry());
00051 }
00052 return true;
00053 }
00054
00055 void EventList::finish()
00056 {
00057 if(_file) {
00058
00059 _file->Close();
00060 delete _file;
00061 }
00062 }
00063 }
00064
00065 ClassImp(cafe::EventList);
00066