00001 #include "GaudiKernel/MsgStream.h"
00002 #include "TreeDedxSimDataCnv.h"
00003 #include "CalibData/Dedx/DedxSimData.h"
00004 #include "CalibDataSvc/IInstrumentName.h"
00005 #include "CalibMySQLCnv/TreeAddress.h"
00006 #include "TFile.h"
00007 #include "TTree.h"
00008 #include "TDirectory.h"
00009 #include "TObject.h"
00010 #include "TBuffer.h"
00011 #include "TBufferFile.h"
00012 #include "TROOT.h"
00013
00014 #include "GaudiKernel/CnvFactory.h"
00015 #include "GaudiKernel/IOpaqueAddress.h"
00016 #include "GaudiKernel/DataObject.h"
00017 #include "GaudiKernel/IAddressCreator.h"
00018 #include "GaudiKernel/IDataProviderSvc.h"
00019 #include "GaudiKernel/IConversionSvc.h"
00020 #include "GaudiKernel/GenericAddress.h"
00021
00022 #include "CalibDataSvc/ICalibTreeSvc.h"
00023 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00024
00025
00026 #include "CalibData/CalibModel.h"
00027 using namespace CalibData;
00028
00029
00030
00031
00032
00033 TreeDedxSimDataCnv::TreeDedxSimDataCnv( ISvcLocator* svc) :
00034 TreeCalBaseCnv(svc, CLID_Dedx_Sim) {
00035
00036 }
00037
00038
00039 const CLID& TreeDedxSimDataCnv::objType() const {
00040 return CLID_Dedx_Sim;
00041 }
00042
00043 const CLID& TreeDedxSimDataCnv::classID() {
00044 return CLID_Dedx_Sim;
00045 }
00046
00047 StatusCode TreeDedxSimDataCnv::i_createObj(IOpaqueAddress* addr,
00048 DataObject*& refpObject) {
00049
00050 MsgStream log(msgSvc(), "TreeDedxSimDataCnv");
00051
00052 CalibData::DedxSimData *tmpObject = new CalibData::DedxSimData;
00053 TreeAddress* add = dynamic_cast<TreeAddress*>(addr);
00054 DatabaseRecord *records=add->pp();
00055
00056 TBufferFile *buf1 = new TBufferFile(TBuffer::kRead);
00057 TBufferFile *buf2 = new TBufferFile(TBuffer::kRead);
00058
00059 buf1->SetBuffer((*records)["TH1F_Col"],51200000,kFALSE);
00060 buf2->SetBuffer((*records)["bin"],512000,kFALSE);
00061
00062 std::cout<<" SftVer is "<<(*records)["SftVer"];
00063 std::cout<<" CalVerSft is "<<(*records)["CalParVer"];
00064 std::cout<<" File name is "<<(*records)["FileName"]<<std::endl;
00065
00066
00067
00068
00069 TTree* tree = new TTree();
00070 tree->Streamer(*buf1);
00071
00072 TTree* bin = new TTree();
00073 bin->Streamer(*buf2);
00074
00075 TH1F *h1=new TH1F();
00076
00077 std::vector<TH1F> hist;
00078 std::vector<double> hRange;
00079
00080 int cnt;
00081 tree -> SetBranchAddress("TH1F_Col", &h1);
00082 int entries=tree->GetEntries();
00083 for(cnt=0; cnt<entries; cnt++){
00084 tree -> GetEntry(cnt);
00085 gROOT->cd();
00086 TH1F *h2=new TH1F();
00087 h2=(TH1F*)h1->Clone();
00088 hist.push_back(*h2);
00089 }
00090 int ver;
00091 double betagamma[5000];
00092 int totalNum;
00093 int bgNum;
00094 int thetaNum;
00095 if (bin->FindBranch("version")) bin->SetBranchAddress("version", &ver);
00096 else ver = 0;
00097 if (bin->FindBranch("thetaNum")) bin->SetBranchAddress("thetaNum", &thetaNum);
00098 else thetaNum = 16;
00099 bin-> SetBranchAddress("totalNum", &totalNum);
00100 bin-> SetBranchAddress("betagamma", betagamma);
00101 bin-> SetBranchAddress("betagammaBounds", &bgNum);
00102 bin->GetEntry(0);
00103
00104 for(cnt=0; cnt<bgNum; cnt++){
00105 hRange.push_back(betagamma[cnt]);
00106 }
00107 tmpObject->setVersion(ver);
00108 tmpObject->setRangeNo(bgNum);
00109 tmpObject->setRange(&hRange);
00110 tmpObject->setHistNo(totalNum);
00111 tmpObject->setThetaNo(thetaNum);
00112 tmpObject->setHist(&hist);
00113 refpObject=tmpObject;
00114
00115 delete tree;
00116 delete bin;
00117
00118 return StatusCode::SUCCESS;
00119
00120
00121 }