00001 #include "GaudiKernel/IInterface.h"
00002 #include "GaudiKernel/StatusCode.h"
00003 #include "GaudiKernel/SvcFactory.h"
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/SmartDataPtr.h"
00007 #include "GaudiKernel/IDataProviderSvc.h"
00008 #include "GaudiKernel/PropertyMgr.h"
00009 #include "GaudiKernel/SmartIF.h"
00010 #include "GaudiKernel/IAppMgrUI.h"
00011 #include "GaudiKernel/IProperty.h"
00012
00013
00014 #include "GaudiKernel/IIncidentSvc.h"
00015 #include "GaudiKernel/Incident.h"
00016 #include "GaudiKernel/IIncidentListener.h"
00017 #include "GaudiKernel/ISvcLocator.h"
00018 #include "GaudiKernel/Bootstrap.h"
00019
00020 #include "TagFilterSvc/TagFilterSvc.h"
00021 #include <iostream>
00022 #include <fstream>
00023 #include "TFile.h"
00024 #include "TTree.h"
00025 #include "TFormula.h"
00026
00027 TagFilterSvc::TagFilterSvc( const string& name, ISvcLocator* svcloc) :
00028 Service (name, svcloc){
00029
00030 declareProperty("Criteria", m_criteria="");
00031 declareProperty("tagFiles", m_tagFiles);
00032 }
00033
00034 TagFilterSvc::~TagFilterSvc(){
00035 }
00036
00037 StatusCode TagFilterSvc::queryInterface(const InterfaceID& riid, void** ppvInterface){
00038 if( IID_ITagFilterSvc.versionMatch(riid) ){
00039 *ppvInterface = static_cast<ITagFilterSvc*> (this);
00040 } else{
00041 return Service::queryInterface(riid, ppvInterface);
00042 }
00043 return StatusCode::SUCCESS;
00044 }
00045
00046 StatusCode TagFilterSvc::initialize(){
00047 MsgStream log(messageService(), name());
00048 log << MSG::INFO << "TagFilterSvc::initialize()" << endreq;
00049
00050 StatusCode sc = Service::initialize();
00051 sc = setProperties();
00052 return StatusCode::SUCCESS;
00053 }
00054
00055 vector<string> TagFilterSvc::getDstFiles()
00056 {
00057 int nFiles = m_tagFiles.size();
00058 std::cout<<"TagFilterSvc, number of tag files: "<<m_tagFiles.size()<<std::endl;
00059 for(int i=0;i<nFiles;i++)
00060 {
00061 TFile* tagFile = new TFile(m_tagFiles[i].c_str());
00062 TTree* fileTree = (TTree*)tagFile->Get("File");
00063 std::string* dstFile = new std::string;
00064 fileTree->SetBranchAddress("fileName",&dstFile);
00065 fileTree->GetEntry(0);
00066 std::cout<<"dstFile: "<<*dstFile<<std::endl;
00067 m_dstFiles.push_back(*dstFile);
00068 delete dstFile;
00069 delete tagFile;
00070 }
00071 return m_dstFiles;
00072 }
00073
00074
00075 StatusCode TagFilterSvc::getVEntry(string tagFileName, std::vector<int>& ventry) {
00076 TFormula f("crt",m_criteria.c_str());
00077 TFile* file = new TFile(tagFileName.c_str());
00078 TTree* tree = (TTree*)file->Get("Tag");
00079 int entry=-1;
00080 int runNo=-1;
00081 int eventId=-1;
00082 int totalCharged=-1;
00083 int totalNeutral=-1;
00084 int totalTrks=-1;
00085 tree->SetBranchAddress("entry",&entry);
00086 tree->SetBranchAddress("runNo",&runNo);
00087 tree->SetBranchAddress("eventId",&eventId);
00088 tree->SetBranchAddress("totalCharged",&totalCharged);
00089 tree->SetBranchAddress("totalNeutral",&totalNeutral);
00090 tree->SetBranchAddress("totalTrks",&totalTrks);
00091 for(int j=0;j<tree->GetEntries();j++)
00092 {
00093 tree->GetEntry(j);
00094 f.SetParameter(1,entry);
00095 f.SetParameter(2,runNo);
00096 f.SetParameter(3,eventId);
00097 f.SetParameter(4,totalCharged);
00098 f.SetParameter(5,totalNeutral);
00099 f.SetParameter(6,totalTrks);
00100 if(m_criteria!="")
00101 {
00102 if(f.Eval(0)==1)
00103 ventry.push_back(entry);
00104 }
00105 else
00106 ventry.push_back(entry);
00107 }
00108 delete file;
00109
00110 return StatusCode::SUCCESS;
00111 }
00112
00113 StatusCode TagFilterSvc::finalize(){
00114 MsgStream log(messageService(), name());
00115 log << MSG::INFO << "TagFilterSvc::finalize()" << endreq;
00116 return StatusCode::SUCCESS;
00117 }
00118
00119