00001 #include "GaudiKernel/MsgStream.h"
00002 #include "TreeMucCalibDataCnv.h"
00003 #include "CalibData/Muc/MucCalibData.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 "TH1F.h"
00012
00013 #include "GaudiKernel/CnvFactory.h"
00014 #include "GaudiKernel/IOpaqueAddress.h"
00015 #include "GaudiKernel/DataObject.h"
00016 #include "GaudiKernel/IAddressCreator.h"
00017 #include "GaudiKernel/IDataProviderSvc.h"
00018 #include "GaudiKernel/IConversionSvc.h"
00019 #include "GaudiKernel/GenericAddress.h"
00020
00021 #include "CalibDataSvc/ICalibTreeSvc.h"
00022 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00023
00024
00025 #include "CalibData/CalibModel.h"
00026
00027
00028
00029
00030 using CalibData::MucCalibData;
00031 using CalibData::MucIdTransform;
00032
00033 TreeMucCalibDataCnv::TreeMucCalibDataCnv( ISvcLocator* svc) :
00034 TreeCalBaseCnv(svc, CLID_Calib_MucCal) {
00035 m_ptrIdTr = new MucIdTransform();
00036 }
00037
00038
00039 const CLID& TreeMucCalibDataCnv::objType() const {
00040 return CLID_Calib_MucCal;
00041 }
00042
00043 const CLID& TreeMucCalibDataCnv::classID() {
00044 return CLID_Calib_MucCal;
00045 }
00046
00047 StatusCode TreeMucCalibDataCnv::i_createObj(IOpaqueAddress* addr,
00048 DataObject*& refpObject) {
00049
00050 MsgStream log(msgSvc(), "TreeMucCalibDataCnv");
00051 log<<MSG::DEBUG<<"SetProperty"<<endreq;
00052 CalibData::MucCalibData *tmpObject = new CalibData::MucCalibData ;
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 TBufferFile *buf3 = new TBufferFile(TBuffer::kRead);
00059 buf1->SetBuffer((*records)["LayTree"],512000,kFALSE);
00060 buf2->SetBuffer((*records)["BoxTree"],512000,kFALSE);
00061 buf3->SetBuffer((*records)["StrTree"],512000,kFALSE);
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 TTree* laytree = new TTree();
00068 laytree->Streamer(*buf1);
00069 log<<MSG::DEBUG<< "laytree name:\t" << laytree->GetName() << endreq;
00070 TTree* boxtree = new TTree();
00071 boxtree->Streamer(*buf2);
00072 log<<MSG::DEBUG<< "boxtree name:\t" << boxtree->GetName() << endreq;
00073 TTree* strtree= new TTree();
00074 strtree->Streamer(*buf3);
00075 log<<MSG::DEBUG<< "strtree name:\t" << strtree->GetName() << endreq;
00076
00077
00078
00079 Double_t lay_eff,box_eff,str_eff;
00080 Double_t lay_cnt, box_cnt, str_cnt;
00081 Double_t lay_nos, box_nos, str_nos;
00082 Double_t lay_nos_ratio, box_nos_ratio, str_nos_ratio;
00083 lay_eff = box_eff = str_eff = 0.0;
00084 lay_cnt = box_cnt = str_cnt = 0.0;
00085 lay_nos = box_nos = str_nos = 0.0;
00086 lay_nos_ratio = box_nos_ratio = str_nos_ratio = 0.0;
00087
00088 char name[60];
00089 laytree->SetBranchAddress("layer_eff", &lay_eff);
00090 laytree->SetBranchAddress("layer_cnt", &lay_cnt);
00091 laytree->SetBranchAddress("layer_noise", &lay_nos);
00092 laytree->SetBranchAddress("layer_nosratio",&lay_nos_ratio);
00093
00094 boxtree->SetBranchAddress("box_eff", &box_eff);
00095 boxtree->SetBranchAddress("box_cnt", &box_cnt);
00096 boxtree->SetBranchAddress("box_noise", &box_nos);
00097 boxtree->SetBranchAddress("box_nosratio", &box_nos_ratio);
00098
00099 strtree->SetBranchAddress("strip_eff", &str_eff);
00100 strtree->SetBranchAddress("strip_cnt", &str_cnt);
00101 strtree->SetBranchAddress("strip_noise", &str_nos);
00102 strtree->SetBranchAddress("strip_nosratio", &str_nos_ratio);
00103
00104 int part, segment, layer, strip;
00105 part = segment = layer = strip = 0;
00106 for(int i=0; i<LAYER_MAX; i++)
00107 {
00108 laytree->GetEntry(i);
00109 tmpObject->setLayerEff(lay_eff,i);
00110 tmpObject->setLayerCnt(lay_cnt, i);
00111 tmpObject->setLayerNos(lay_nos, i);
00112 tmpObject->setLayerNosRatio(lay_nos_ratio, i);
00113 sprintf(name,"LayClstPro");
00114 for(int j=0; j<CLST_MAX; j++) {
00115
00116
00117 tmpObject->setLayerClstPro(DEFAULT_CLST_PRO[j],i,j);
00118 }
00119 log<<MSG::DEBUG<<"layer: " << i << "\t" << lay_eff <<endreq;
00120 }
00121
00122 for(int i=0; i<BOX_MAX; i++)
00123 {
00124 m_ptrIdTr->SetBoxPos( i, &part, &segment, &layer );
00125 boxtree->GetEntry(i);
00126 tmpObject->setBoxEff(box_eff, part, segment, layer);
00127 tmpObject->setBoxCnt(box_cnt, part, segment, layer);
00128 tmpObject->setBoxNos(box_nos, part, segment, layer);
00129 tmpObject->setBoxNosRatio(box_nos_ratio, part, segment, layer);
00130
00131 sprintf(name,"BoxClstPro_B%d",i);
00132 for(int j=0; j<CLST_MAX; j++) {
00133
00134
00135 tmpObject->setBoxClstPro(DEFAULT_CLST_PRO[j],part,segment,layer,j);
00136 }
00137 log<<MSG::DEBUG<<"box: " << i << "\t" << box_eff <<endreq;
00138 }
00139
00140 log<<MSG::DEBUG<<"strtree entries:\t" << strtree->GetEntries() << endreq;
00141 for(int i=0; i<STRIP_MAX; i++)
00142 {
00143 m_ptrIdTr->SetStripPos( i, &part, &segment, &layer, &strip );
00144 strtree->GetEntry(i);
00145 tmpObject->setStripEff(str_eff, part, segment, layer, strip);
00146 tmpObject->setStripCnt(str_cnt, part, segment, layer, strip);
00147 tmpObject->setStripNos(str_nos, part, segment, layer, strip);
00148 tmpObject->setStripNosRatio(str_nos_ratio, part, segment, layer, strip);
00149 log<<MSG::DEBUG<<"strip: " << i << "\t" << str_eff <<endreq;
00150
00151 }
00152
00153 refpObject=tmpObject;
00154 delete laytree;
00155 delete boxtree;
00156 delete strtree;
00157 return StatusCode::SUCCESS;
00158
00159
00160 }
00161