/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Calibration/CalibSvc/CalibTreeCnv/CalibTreeCnv-00-01-18/src/cnv/TreeMucCalibDataCnv.cxx

Go to the documentation of this file.
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"    //maybe
00022 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00023 
00024 // Temporary.  Hope to find a better way to do this
00025 #include "CalibData/CalibModel.h"
00026 //using namespace CalibData;
00027 //static CnvFactory<TreeMucCalibDataCnv> MucCal_factory;
00028 //const  ICnvFactory& TreeMucCalibDataCnvFactory = MucCal_factory;
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         // Read in the object
00078         //read layerConst-----------------------------
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                         //                if( ht_Pro[0] != NULL ) tmpObject->setLayerClstPro(ht_Pro[0]->GetBinContent(j),i,j);
00116                         //          else tmpObject->setLayerClstPro(DEFAULT_CLST_PRO[j],i,j);
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                         //                if( ht_Pro[1] != NULL ) tmpObject->setBoxClstPro(ht_Pro[1]->GetBinContent(j),part,segment,layer,j);
00134                         //        else
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 

Generated on Tue Nov 29 22:57:52 2016 for BOSS_7.0.2 by  doxygen 1.4.7