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 if(_file) {
00043 _file->cd();
00044 _list->Write();
00045 delete _list;
00046 _list = 0;
00047 }
00048 }
00049
00050 bool EventList::processEvent(cafe::Event& event)
00051 {
00052 if(_list && (_tags.empty() || event.hasTag(_tags))) {
00053 _list->Enter(event.getTree()->GetReadEntry());
00054 }
00055 return true;
00056 }
00057
00058 void EventList::finish()
00059 {
00060 if(_file) {
00061
00062 _file->Close();
00063 delete _file;
00064 }
00065 }
00066 }
00067
00068 ClassImp(cafe::EventList);
00069