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

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 #include "TreeDedxCalibDataCnv.h"
00003 #include "CalibData/Dedx/DedxCalibData.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 
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<TreeDedxCalibDataCnv> DedxCal_factory;
00028 //const  ICnvFactory& TreeDedxCalibDataCnvFactory = DedxCal_factory;
00029 
00030 
00031 
00032 TreeDedxCalibDataCnv::TreeDedxCalibDataCnv( ISvcLocator* svc) :
00033   TreeCalBaseCnv(svc, CLID_Calib_DedxCal) { 
00034 
00035 }
00036 
00037 
00038 const CLID& TreeDedxCalibDataCnv::objType() const {
00039   return CLID_Calib_DedxCal;
00040 }
00041 
00042 const CLID& TreeDedxCalibDataCnv::classID() {
00043   return CLID_Calib_DedxCal;
00044 }
00045 
00046 StatusCode TreeDedxCalibDataCnv::i_createObj(IOpaqueAddress* addr,
00047                                        DataObject*& refpObject) {
00048 
00049   MsgStream log(msgSvc(), "TreeDedxCalibDataCnv");
00050   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00051 
00052   CalibData::DedxCalibData *tmpObject = new CalibData::DedxCalibData;
00053  TreeAddress* add = dynamic_cast<TreeAddress*>(addr);
00054   DatabaseRecord *records=add->pp();
00055 
00056  /*TBuffer *buf1 = new TBuffer(TBuffer::kRead);
00057  TBuffer *buf2 = new TBuffer(TBuffer::kRead);
00058  TBuffer *buf3 = new TBuffer(TBuffer::kRead);
00059  TBuffer *buf4 = new TBuffer(TBuffer::kRead);
00060  TBuffer *buf5 = new TBuffer(TBuffer::kRead);
00061  TBuffer *buf6 = new TBuffer(TBuffer::kRead);
00062  TBuffer *buf7 = new TBuffer(TBuffer::kRead);
00063  TBuffer *buf8 = new TBuffer(TBuffer::kRead);
00064  TBuffer *buf9 = new TBuffer(TBuffer::kRead);*/
00065  
00066 TBufferFile *buf1 = new TBufferFile(TBuffer::kRead);
00067  TBufferFile *buf2 = new TBufferFile(TBuffer::kRead);
00068  TBufferFile *buf3 = new TBufferFile(TBuffer::kRead);
00069  TBufferFile *buf4 = new TBufferFile(TBuffer::kRead);
00070  TBufferFile *buf5 = new TBufferFile(TBuffer::kRead);
00071  TBufferFile *buf6 = new TBufferFile(TBuffer::kRead);
00072  TBufferFile *buf7 = new TBufferFile(TBuffer::kRead);
00073  TBufferFile *buf8 = new TBufferFile(TBuffer::kRead);
00074  TBufferFile *buf9 = new TBufferFile(TBuffer::kRead);
00075 
00076  buf1->SetBuffer((*records)["DriftDist"],512000,kFALSE);
00077  buf2->SetBuffer((*records)["EntranceAng"],512000,kFALSE);
00078  buf3->SetBuffer((*records)["MeanGain"],512000,kFALSE);
00079  buf4->SetBuffer((*records)["GasGain"],512000,kFALSE);
00080  buf5->SetBuffer((*records)["LayerGain"],512000,kFALSE);
00081  buf6->SetBuffer((*records)["Resolution"],512000,kFALSE);
00082  buf7->SetBuffer((*records)["WireGain"],512000,kFALSE);
00083  buf8->SetBuffer((*records)["ZDep"],512000,kFALSE);
00084  buf9->SetBuffer((*records)["RunGain"],512000,kFALSE);
00085 
00086 
00087 
00088  std::cout<<" SftVer is "<<(*records)["SftVer"];
00089  std::cout<<" CalVerSft is "<<(*records)["CalParVer"];
00090  std::cout<<"  File name  is "<<(*records)["FileName"]<<std::endl;
00091 
00092 
00093 
00094   TTree* ddgtree = new TTree(); 
00095   ddgtree->Streamer(*buf1); 
00096  
00097   TTree* entratree = new TTree(); 
00098   entratree->Streamer(*buf2);
00099 
00100   TTree* gaintree= new TTree(); 
00101   gaintree->Streamer(*buf3); 
00102 
00103   TTree* ggstree = new TTree(); 
00104   ggstree->Streamer(*buf4); 
00105 
00106   TTree* layergtree = new TTree(); 
00107   layergtree->Streamer(*buf5); 
00108 
00109   TTree* resoltree = new TTree(); 
00110   resoltree->Streamer(*buf6); 
00111 
00112   TTree* wiregtree = new TTree(); 
00113   wiregtree->Streamer(*buf7); 
00114 
00115   TTree* zdeptree = new TTree(); 
00116   zdeptree->Streamer(*buf8); 
00117 
00118   TTree *rungtree = new TTree();
00119   rungtree->Streamer(*buf9);
00120 
00121   double rungain;
00122   double runmean;
00123   int runno;
00124   double runresol;
00125 
00126   rungtree -> SetBranchAddress("rungain", &rungain);
00127   rungtree -> SetBranchAddress("runmean", &runmean);
00128   rungtree -> SetBranchAddress("runno", &runno);
00129   rungtree -> SetBranchAddress("runresol", &runresol);
00130   int N = rungtree -> GetEntries();
00131   tmpObject -> setrunNO(N);
00132   for(int i=0; i<N; i++){
00133        rungtree -> GetEntry(i);
00134        tmpObject -> setrung(rungain,0,i);
00135        tmpObject -> setrung(runmean,1,i);
00136        tmpObject -> setrung(runno,2,i);
00137        tmpObject -> setrung(runresol,3,i);
00138           }
00139 
00140     
00141      double ddg0[43];
00142      double ddg1[43];
00143      double ddg2[43];
00144      double ddg3[43];
00145      double id_doca[1600];
00146      double iner_chi[1600];
00147      double iner_gain[1600]; 
00148      double iner_hits[1600]; 
00149      double ip_eangle[1600]; 
00150      double out_chi[1600];
00151      double out_gain[1600];
00152      double out_hits[1600];
00153 
00154      ddgtree -> SetBranchAddress("ddg0", ddg0);
00155      ddgtree -> SetBranchAddress("ddg1", ddg1);
00156      ddgtree -> SetBranchAddress("ddg2", ddg2);
00157      ddgtree -> SetBranchAddress("ddg3", ddg3);
00158      TBranch *bbb = ddgtree->FindBranch("Id_doca");
00159      if(bbb){
00160         ddgtree -> SetBranchAddress("Id_doca", id_doca);
00161         ddgtree -> SetBranchAddress("Iner_chi", iner_chi);
00162         ddgtree -> SetBranchAddress("Iner_gain", iner_gain);
00163         ddgtree -> SetBranchAddress("Iner_hits", iner_hits);
00164         ddgtree -> SetBranchAddress("Ip_eangle", ip_eangle);
00165         ddgtree -> SetBranchAddress("Out_chi", out_chi);
00166         ddgtree -> SetBranchAddress("Out_gain", out_gain);
00167         ddgtree -> SetBranchAddress("Out_hits", out_hits);
00168      }
00169 
00170       ddgtree -> GetEntry(0);
00171         for(int i=0; i<43; i++){
00172 
00173              tmpObject -> setddg(ddg0[i],0,i);
00174              tmpObject -> setddg(ddg1[i],1,i);
00175              tmpObject -> setddg(ddg2[i],2,i);
00176              tmpObject -> setddg(ddg3[i],3,i);
00177           }
00178   
00179       for(int i=0; i<1600; i++){
00180          if(!bbb){
00181             id_doca[i]=0;
00182             iner_chi[i]=0;
00183             iner_gain[i]=0;
00184             iner_hits[i]=0;
00185             ip_eangle[i]=0;
00186             out_chi[i]=0;
00187             out_gain[i]=0;
00188             out_hits[i]=0;
00189          }
00190                 tmpObject -> set_id_doca(id_doca[i],i);
00191                 tmpObject -> set_iner_chi(iner_chi[i],i);
00192                 tmpObject -> set_iner_gain(iner_gain[i],i);
00193                 tmpObject -> set_iner_hits(iner_hits[i],i);
00194                 tmpObject -> set_ip_eangle(ip_eangle[i],i);
00195                 tmpObject -> set_out_chi(out_chi[i],i);
00196                 tmpObject -> set_out_gain(out_gain[i],i);
00197                 tmpObject -> set_out_hits(out_hits[i],i);
00198         }
00199  
00200  
00201      double entra0[43];
00202      double entra1[43];
00203      double entra2[43];
00204      double entra3[43];
00205      double engle[100];
00206      int engle_no;
00207      entratree -> SetBranchAddress("entra0", entra0);
00208      entratree -> SetBranchAddress("entra1", entra1);
00209      entratree -> SetBranchAddress("entra2", entra2);
00210      entratree -> SetBranchAddress("entra3", entra3);
00211      entratree -> SetBranchAddress("1denangle", engle);
00212      entratree -> SetBranchAddress("1denangle_entry", &engle_no);
00213        entratree -> GetEntry(0);
00214         for(int i=0; i<43; i++){
00215              tmpObject -> setenta(entra0[i],0,i);
00216              tmpObject -> setenta(entra1[i],1,i);
00217              tmpObject -> setenta(entra2[i],2,i);
00218              tmpObject -> setenta(entra3[i],3,i);
00219           }
00220 
00221     tmpObject -> set_enanglesize(engle_no);
00222       for(int i=0; i<engle_no; i++){
00223              tmpObject -> set_enangle(engle[i],i);
00224           }
00225 
00226 
00227 
00228 
00229 // read ggscalib ------------------------------------------------------------
00230      double ggs0[43];
00231      double ggs1[43];
00232      double ggs2[43];
00233      double ggs3[43];
00234      double gcostheta[80];
00235      int hadron_entry;
00236      double hadron[20];
00237      ggstree -> SetBranchAddress("ggs0", ggs0);
00238      ggstree -> SetBranchAddress("ggs1", ggs1);
00239      ggstree -> SetBranchAddress("ggs2", ggs2);
00240      ggstree -> SetBranchAddress("ggs3", ggs3);
00241      ggstree -> SetBranchAddress("hadron", hadron);
00242      ggstree -> SetBranchAddress("hadronNo", &hadron_entry);
00243      if(bbb){
00244      ggstree -> SetBranchAddress("costheta", gcostheta);}
00245      ggstree -> GetEntry(0);
00246       for(int i=0; i<43;i++){
00247            tmpObject -> setggs(ggs0[i],0,i);
00248            tmpObject -> setggs(ggs1[i],1,i);
00249            tmpObject -> setggs(ggs2[i],2,i);
00250            tmpObject -> setggs(ggs3[i],3,i);
00251           }
00252       for(int i=0; i<80;i++){
00253            if(!bbb) gcostheta[i]=0;
00254            tmpObject ->set_costheta(gcostheta[i],i);
00255          }
00256      if(hadron_entry>20){
00257        log<<MSG::FATAL<<"hadron entry is larger than 20, larger than designed"<<endreq;
00258        return StatusCode::FAILURE;
00259       }
00260      tmpObject->set_hadronNo(hadron_entry);
00261      for(int i=0;i<hadron_entry;i++){
00262           tmpObject->set_hadron(hadron[i],i);
00263         }
00264 
00265  
00266 // read zdepcalib ------------------------------------------------------------
00267      double zdep0[43];
00268      double zdep1[43];
00269      double zdep2[43];
00270      double zdep3[43];
00271      zdeptree -> SetBranchAddress("zdep0", zdep0);
00272      zdeptree -> SetBranchAddress("zdep1", zdep1);
00273      zdeptree -> SetBranchAddress("zdep2", zdep2);
00274      zdeptree -> SetBranchAddress("zdep3", zdep3);
00275      zdeptree -> GetEntry(0);
00276 
00277      for(int i=0; i<43;i++){
00278            tmpObject -> setzdep(zdep0[i],0,i);
00279            tmpObject -> setzdep(zdep1[i],1,i);
00280            tmpObject -> setzdep(zdep2[i],2,i);
00281            tmpObject -> setzdep(zdep3[i],3,i);
00282           }
00283 // read gain ------------------------------------------------------------
00284      double gain;
00285      double gt0[35],gdedx[35];
00286      gaintree -> SetBranchAddress("gain", &gain);
00287      if(bbb){
00288      gaintree -> SetBranchAddress("t0",   gt0);
00289      gaintree -> SetBranchAddress("dedx", gdedx);}
00290            gaintree -> GetEntry(0);
00291            tmpObject -> setgain(gain);
00292      for(int i=0; i<35;i++){
00293       if(!bbb){
00294          gt0[i]=0;
00295          gdedx[i]=0;
00296       }
00297       tmpObject->set_t0(gt0[i],i);
00298       tmpObject->set_dedx(gdedx[i],i);
00299       }
00300 
00301 // read resol----------------------------------------------------------------
00302      double resol;
00303      resoltree -> SetBranchAddress("resol", &resol);
00304            resoltree -> GetEntry(0);
00305            tmpObject -> setresol(resol);
00306     
00307 // read wireg----------------------------------------------------------------
00308      double wireg[6796];
00309      wiregtree -> SetBranchAddress("wireg",wireg);
00310     wiregtree -> GetEntry(0);
00311      for(int i=0;i<6796;i++){
00312            if(wireg[i]>5||wireg[i]<0.2) wireg[i]=0;
00313            tmpObject -> setwireg(wireg[i],i);
00314      }
00315  
00316 // read layerg----------------------------------------------------------------
00317      double layerg[43];
00318      layergtree -> SetBranchAddress("layerg",layerg);
00319     layergtree -> GetEntry(0);
00320 
00321      for(int i=0;i<43;i++){
00322             tmpObject -> setlayerg(layerg[i],i);
00323      }
00324 
00325 
00326 
00327     // Read in the object
00328 
00329   
00330       refpObject=tmpObject;
00331 
00332    delete ddgtree;
00333   delete entratree;
00334   delete gaintree;
00335   delete ggstree;
00336   delete layergtree;
00337   delete resoltree;
00338   delete wiregtree;
00339   delete zdeptree;
00340   delete rungtree;
00341 
00342   return StatusCode::SUCCESS;
00343 
00344 
00345 }
00346 

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