Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BDTestDataModule.cxx

Go to the documentation of this file.
00001 #include "BDTestDataModule.h"
00002 #include "BDTestData.h"
00003 
00004 #include <BeamDataUtil/BDUniquify.h>
00005 #include <RawData/RawBeamMonBlock.h>
00006 #include <RawData/RawBeamMonHeaderBlock.h>
00007 
00008 #include <MinosObjectMap/MomNavigator.h>
00009 
00010 #include <MessageService/MsgService.h>
00011 CVSID("$Id: BDTestDataModule.cxx,v 1.1 2005/12/15 22:06:32 bv Exp $");
00012 
00013 #include <JobControl/JobCModuleRegistry.h>
00014 JOBMODULE(BDTestDataModule, "BDTestData", "Fill the bdtest tree");
00015 
00016 #include <TFile.h>
00017 #include <TTree.h>
00018 #include <TString.h>
00019 #include <TSystem.h>
00020 
00021 #include <string>
00022 using namespace std;
00023 
00024 class BDTestDataModuleImp {
00025     TFile* outfile;
00026     TTree* outtree;
00027     BDTestData* bdtd;
00028     string output_file;
00029 public:
00030 
00031     BDTestDataModuleImp(string output) 
00032         : outfile(0)
00033         , outtree(0)
00034         , bdtd(0)
00035         , output_file(output) 
00036     {
00037         cerr << "Starting output file: " << output_file << endl;
00038         outfile = new TFile(output_file.c_str(),"RECREATE");
00039         outtree = new TTree("bdtest", "Beam Monitoring Data");
00040         bdtd = new BDTestData;
00041         outtree->Branch("pot","BDTestData",&bdtd);
00042         cerr << "Bdtd at " << (void*)bdtd << endl;
00043     }
00044     ~BDTestDataModuleImp() {
00045         cerr << "~BDTestDataModuleImp() \n";
00046         outfile->cd();
00047         outtree->Write();
00048         outfile->Close();
00049         delete outfile;
00050         //delete outtree;
00051         delete bdtd;
00052         outfile = 0;
00053         outtree = 0;
00054         bdtd = 0;
00055         cerr << output_file << " written\n";
00056     }
00057 
00058     void Fill(const RawBeamMonBlock& block, const RawBeamMonHeaderBlock& head)
00059     {
00060         if (fill_bdtest(*bdtd,block,head))
00061             outtree->Fill();
00062     }
00063 };
00064 
00065 BDTestDataModule::BDTestDataModule()
00066 {
00067     fImp = 0;
00068 }
00069 BDTestDataModule::~BDTestDataModule()
00070 {
00071     if (fImp) delete fImp;
00072 }
00073 
00074 void BDTestDataModule::BeginFile()
00075 {
00076     if (fImp) {
00077         cerr << "BDTestDataModule::BeginFile: deleting non-zero fImp\n";
00078         delete fImp; fImp = 0;
00079     }
00080 
00081     const char* output_dir = gSystem->Getenv("BEAM_DATA_TESTDATA_DIR");
00082     if (!output_dir || output_dir[0] == '\0') output_dir = ".";
00083     TString file = output_dir;
00084     file += "/";
00085 
00086     const char* input_file = this->GetCurrentFile();
00087     const char* base_name = gSystem->BaseName(input_file);
00088 
00089     file += base_name;
00090     file.Remove(file.Index(".mbeam.root"));
00091     file += ".bdtd.root";
00092     fImp = new BDTestDataModuleImp(file.Data());
00093 }
00094 
00095 void BDTestDataModule::EndFile()
00096 {
00097     cerr << "BDTestDataModule::EndFile with fImp at " << (void*)fImp << endl;
00098     if (fImp) delete fImp;
00099     fImp = 0;
00100 }
00101 
00102 JobCResult BDTestDataModule::Reco(MomNavigator* mom)
00103 {
00104     if (!fImp) {
00105         cerr << "Error: BDTestDataModule::Reco called w/out an implementation\n";
00106         return JobCResult::kError;
00107     }
00108 
00109     static BDUniquify uniqifier;
00110     vector<BDUniquify::BlockPair> blocks = uniqifier.GetUniqueBlocks(*mom);
00111     size_t nblocks = blocks.size();
00112 
00113     if (nblocks == 0) {
00114         MSG("BD",Msg::kWarning)
00115             << "No good beam monitoring data in MOM\n";
00116         return JobCResult::kFailed;
00117     }
00118     for (size_t iblock=0; iblock<nblocks; ++iblock) {
00119         const RawBeamMonHeaderBlock& rbmhb = *blocks[iblock].first;
00120         const RawBeamMonBlock& rbmb = *blocks[iblock].second;
00121 
00122         fImp->Fill(rbmb,rbmhb);
00123     }
00124     return JobCResult::kAOK;
00125 
00126 }

Generated on Mon Feb 15 11:06:24 2010 for loon by  doxygen 1.3.9.1