TreeTofSimDataCnv Class Reference

#include <TreeTofSimCnv.h>

Inheritance diagram for TreeTofSimDataCnv:

TreeCalBaseCnv Converter< Ty1, Ty2 > List of all members.

Public Types

typedef Ty1 source
typedef Ty2 destination

Public Member Functions

const CLID & objType () const
 TreeTofSimDataCnv (ISvcLocator *svc)
virtual ~TreeTofSimDataCnv ()
virtual long repSvcType () const
virtual StatusCode initialize ()
virtual StatusCode finalize ()
virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&refpObject)
ICalibTreeSvcgetCalibTreeSvc ()
virtual StatusCode createRoot (const std::string &fname, CalibData::CalibBase1 *pTDSObj)
destinationoperator (const source &) const

Static Public Member Functions

static const CLID & classID ()
static const unsigned char storageType ()

Protected Member Functions

virtual StatusCode i_createObj (IOpaqueAddress *address, DataObject *&refpObject)
virtual StatusCode internalCreateObj (DataObject *&refpObject, IOpaqueAddress *address)
virtual StatusCode i_processObj (DataObject *pObject, IOpaqueAddress *address)
 In case there is additional work to do on the created object.
virtual StatusCode fillRoot (CalibData::CalibBase *pTDSObj, TObject *pRootObj)
void setBaseInfo (CalibData::CalibBase1 *pObj)
 Another utility for derived classes to use.
virtual destinationconvert (const source &) const =0

Protected Attributes

ICalibTreeSvcm_treeSvc
ICalibMetaCnvSvcm_metaSvc
IInstrumentNamem_instrSvc
int m_serNo
int m_runfrm
int m_runto
TFile * m_outFile
TTree * m_ttree
TFile * m_inFile
TDirectory * m_saveDir

Friends

class CnvFactory< TreeTofSimDataCnv >

Detailed Description

Base class for CAL calibration converters from Ttrees to TCDS. All such converters need to do certain things, which are handled here. Methods common to *all* calibrations are in the base class TreeCalBaseCnv

Author:
huang bin

Definition at line 20 of file TreeTofSimCnv.h.


Member Typedef Documentation

template<class Ty1, class Ty2>
typedef Ty2 Converter< Ty1, Ty2 >::destination [inherited]

Definition at line 19 of file Converter.h.

template<class Ty1, class Ty2>
typedef Ty1 Converter< Ty1, Ty2 >::source [inherited]

Definition at line 18 of file Converter.h.


Constructor & Destructor Documentation

TreeTofSimDataCnv::TreeTofSimDataCnv ( ISvcLocator *  svc  ) 

Definition at line 31 of file TreeTofSimCnv.cxx.

00031                                                       :
00032         TreeCalBaseCnv(svc, CLID_Calib_TofSim) { 
00033 
00034         }

virtual TreeTofSimDataCnv::~TreeTofSimDataCnv (  )  [inline, virtual]

Definition at line 29 of file TreeTofSimCnv.h.

00029 {};


Member Function Documentation

const CLID & TreeTofSimDataCnv::classID (  )  [static]

Definition at line 41 of file TreeTofSimCnv.cxx.

References CLID_Calib_TofSim.

00041                                        {
00042         return CLID_Calib_TofSim;
00043 }

template<class Ty1, class Ty2>
virtual destination* Converter< Ty1, Ty2 >::convert ( const source  )  const [protected, pure virtual, inherited]

StatusCode TreeCalBaseCnv::createObj ( IOpaqueAddress *  addr,
DataObject *&  refpObject 
) [virtual, inherited]

Create the transient representation of an object, given an opaque address. This and the following update method comprise the core functionality of calibration converters.

Definition at line 111 of file TreeCalBaseCnv.cxx.

References Bes_Common::DEBUG, TreeCalBaseCnv::internalCreateObj(), and msgSvc().

00112                                                            {
00113   //  StatusCode ret;
00114 
00115   // first do the things we always need:
00116   //   First string parameter of opaque address is file ident
00117   MsgStream log(msgSvc(), "TreeCalBaseCnv");
00118    log << MSG::DEBUG<<"TreeCalBaseCnv::createObj( starting ...."<<endreq;
00119  //  const std::string* par = addr->par();
00120 
00121  // std::string par0 = par[0];
00122    
00123 //  return internalCreateObj(par0, refpObject, addr);
00124   return internalCreateObj(refpObject, addr);
00125 
00126 }

StatusCode TreeCalBaseCnv::createRoot ( const std::string fname,
CalibData::CalibBase1 pTDSObj 
) [virtual, inherited]

Create ROOT file corresponding to TDS object input. Default implementation is to return an error. Must be separately implemented for each calibration type.

Parameters:
fname Filename for output file
pTDSObj Pointer to tds object to be converted

Definition at line 89 of file TreeCalBaseCnv.cxx.

References calibUtil::ERROR, and msgSvc().

00090                                                                        {
00091   MsgStream log(msgSvc(), "TreeCalBaseCnv");
00092   log << MSG::ERROR 
00093       << "createRoot method not implemented for this calibration type" 
00094       << endreq;
00095   return StatusCode::FAILURE;
00096 }

StatusCode TreeCalBaseCnv::fillRoot ( CalibData::CalibBase pTDSObj,
TObject *  pRootObj 
) [protected, virtual, inherited]

Given a pointer to a TDS object which can be cast to "our" type, fill in corresponding information in the corresponding root class

Parameters:
pTDSObj Pointer to tds object to be converted
pRootObj Pointer to destination root object
...maybe don't need pRootObj argument; keep this as the (protected) data member m_rootObj. Or else this routine could set the protected member to this passed-in value

Definition at line 100 of file TreeCalBaseCnv.cxx.

00101                                                           {
00102 
00103   // Get instrument name from InstrumentName service  Now handled by 
00104   // TreeCalBaseCnv
00105   //  TString instr = TString((m_instrSvc->getInstrumentName()).c_str());
00106   //  pRootObj->setInstrument(instr);
00107   return StatusCode::SUCCESS;
00108 }

StatusCode TreeCalBaseCnv::finalize (  )  [virtual, inherited]

Definition at line 82 of file TreeCalBaseCnv.cxx.

00082                                     {
00083   return Converter::finalize();
00084 }

ICalibTreeSvc* TreeCalBaseCnv::getCalibTreeSvc (  )  [inline, inherited]

Definition at line 58 of file TreeCalBaseCnv.h.

References TreeCalBaseCnv::m_treeSvc.

00058                                    {
00059     return m_treeSvc;
00060   }

StatusCode TreeTofSimDataCnv::i_createObj ( IOpaqueAddress *  address,
DataObject *&  refpObject 
) [protected, virtual]

This creates the transient representation of an object from the corresponding ROOT object. This actually does the "new" operation and deals with the attributes of the node. This base class implementation does nothing; it should not normally be called because it doesn't correspond to any TCDS class. Instead, i_createObj of some derived class will be called.

Parameters:
fname The ROOT file to be read in to be used to builds the object
refpObject the object to be built
Returns:
status depending on the completion of the call

Reimplemented from TreeCalBaseCnv.

Definition at line 45 of file TreeTofSimCnv.cxx.

References Bes_Common::DEBUG, msgSvc(), TreeAddress::pp(), CalibData::ETofSimBase::setAttenLength(), CalibData::BTofSimBase::setAttenLength(), CalibData::TofSimConstBase::setBarConstant(), CalibData::TofSimConstBase::setBarHighThres(), CalibData::TofSimConstBase::setBarLowThres(), CalibData::TofSimConstBase::setBarPMTGain(), CalibData::TofSimConstBase::setEndConstant(), CalibData::TofSimConstBase::setEndHighThres(), CalibData::TofSimConstBase::setEndLowThres(), CalibData::TofSimConstBase::setEndNoiseSwitch(), CalibData::TofSimConstBase::setEndPMTGain(), CalibData::ETofSimBase::setGain(), CalibData::BTofSimBase::setGain(), CalibData::ETofSimBase::setNoiseSmear(), and CalibData::BTofSimBase::setRatio().

00046                                          {
00047 
00048         MsgStream log(msgSvc(), "TreeTofSimDataCnv");
00049         log<<MSG::DEBUG<<"SetProperty"<<endreq;
00050 
00051         TreeAddress* add = dynamic_cast<TreeAddress*>(addr);
00052 
00053         DatabaseRecord *records=add->pp();
00054 
00055         TBufferFile *buf1 = new TBufferFile(TBuffer::kRead);
00056         TBufferFile *buf2 = new TBufferFile(TBuffer::kRead);
00057         TBufferFile *buf3 = new TBufferFile(TBuffer::kRead);
00058 
00059         buf1->SetBuffer((*records)["BTofSim"],512000,kFALSE);
00060         buf2->SetBuffer((*records)["ETofSim"],512000,kFALSE);
00061         buf3->SetBuffer((*records)["SimConstants"],512000,kFALSE);
00062 
00063 
00064         std::cout<<" SftVer is "<<(*records)["SftVer"];
00065         std::cout<<" CalVerSft is "<<(*records)["TofSimParVer"];
00066         std::cout<<"  File name  is "<<(*records)["FileName"]<<std::endl;
00067 
00068 
00069 
00070         TTree *btoftree= new TTree();
00071         TTree *etoftree= new TTree();
00072         TTree *btofcommontree = new TTree();
00073         btoftree->Streamer(*buf1);
00074         etoftree->Streamer(*buf2);
00075         btofcommontree->Streamer(*buf3);
00076 
00077         CalibData::BTofSimBase bTof;
00078         CalibData::ETofSimBase eTof;
00079         CalibData::TofSimConstBase tofbase;
00080         std::vector<CalibData::BTofSimBase> tmpbTof;//; = new vector<CalibData::bTofCalibBase>;
00081         std::vector<CalibData::ETofSimBase> tmpeTof;
00082         std::vector<CalibData::TofSimConstBase> tofbaseCol;
00083         // Read in the object
00084         int cnt;
00085         // read btoftree ------------------------------------------------------------
00086         double AttenLength;
00087         double Gain;
00088         double Ratio;
00089         double NoiseSmear;
00090         btoftree -> SetBranchAddress("AttenLength", &AttenLength);
00091         btoftree -> SetBranchAddress("Gain", &Gain);
00092         btoftree -> SetBranchAddress("Ratio", &Ratio);
00093         int entries=btoftree->GetEntries();
00094         for(cnt=0; cnt<entries; cnt++){
00095                 btoftree -> GetEntry(cnt);
00096                 bTof.setGain(Gain);
00097                 bTof.setRatio(Ratio);
00098                 bTof.setAttenLength(AttenLength);
00099                 tmpbTof.push_back(bTof);
00100         }
00101         //read etoftree
00102         etoftree -> SetBranchAddress("Gain", &Gain);
00103         etoftree -> SetBranchAddress("AttenLength", &AttenLength);
00104         etoftree -> SetBranchAddress("NoiseSmear",  &NoiseSmear );
00105         entries=etoftree->GetEntries();
00106         for(cnt=0; cnt<entries; cnt++){
00107                 etoftree->GetEntry(cnt);
00108                 eTof.setGain(Gain);
00109                 eTof.setAttenLength(AttenLength);
00110                 eTof.setNoiseSmear(NoiseSmear);
00111                 tmpeTof.push_back(eTof);
00112         }
00113         //read SimConstants
00114         double BarConstant,BarPMTGain,BarHighThres,BarLowThres,EndConstant,EndPMTGain,EndHighThres,EndLowThres,EndNoiseSwitch;
00115         btofcommontree-> SetBranchAddress("BarConstant", &BarConstant);
00116         btofcommontree-> SetBranchAddress("BarPMTGain",  &BarPMTGain);
00117         btofcommontree-> SetBranchAddress("BarHighThres", &BarHighThres);
00118         btofcommontree-> SetBranchAddress("BarLowThres", &BarLowThres);
00119         btofcommontree-> SetBranchAddress("EndConstant", &EndConstant);
00120         btofcommontree-> SetBranchAddress("EndPMTGain",  &EndPMTGain);
00121         btofcommontree-> SetBranchAddress("EndHighThres", &EndHighThres);
00122         btofcommontree-> SetBranchAddress("EndLowThres", &EndLowThres);
00123         btofcommontree-> SetBranchAddress("EndNoiseSwitch", &EndNoiseSwitch);
00124         entries = btofcommontree->GetEntries();
00125         for(cnt=0;cnt<entries;cnt++){
00126                 btofcommontree->GetEntry(cnt);
00127                 tofbase.setBarLowThres(BarLowThres);
00128                 tofbase.setBarHighThres(BarHighThres);
00129                 tofbase.setEndLowThres(EndLowThres);
00130                 tofbase.setEndHighThres(EndHighThres);
00131                 tofbase.setBarPMTGain(BarPMTGain);
00132                 tofbase.setEndPMTGain(EndPMTGain);
00133                 tofbase.setBarConstant(BarConstant);
00134                 tofbase.setEndConstant(EndConstant);
00135                 tofbase.setEndNoiseSwitch(EndNoiseSwitch);
00136                 tofbaseCol.push_back(tofbase);
00137         }
00138 
00139         CalibData::TofSimData *tmpObject = new CalibData::TofSimData(&tofbaseCol,&tmpbTof,&tmpeTof);
00140         refpObject=tmpObject;
00141         delete btoftree;
00142         delete etoftree;
00143         delete btofcommontree;
00144 
00145         return StatusCode::SUCCESS;
00146 
00147 
00148 }

StatusCode TreeCalBaseCnv::i_processObj ( DataObject *  pObject,
IOpaqueAddress *  address 
) [protected, virtual, inherited]

In case there is additional work to do on the created object.

Definition at line 190 of file TreeCalBaseCnv.cxx.

Referenced by TreeCalBaseCnv::internalCreateObj().

00191                                                                       {
00192   return StatusCode::SUCCESS;
00193 }

StatusCode TreeCalBaseCnv::initialize (  )  [virtual, inherited]

Definition at line 46 of file TreeCalBaseCnv.cxx.

References IID_ICalibMetaCnvSvc(), IID_ICalibTreeSvc(), IID_IInstrumentName(), TreeCalBaseCnv::m_instrSvc, TreeCalBaseCnv::m_metaSvc, and TreeCalBaseCnv::m_treeSvc.

00046                                       {
00047   StatusCode status = Converter::initialize();
00048 
00049   IDataProviderSvc* dp;
00050 
00051   // I guess the service names are assigned in jobOptions?
00052 
00053 /*  serviceLocator()->getService ("CalibDataSvc",
00054                                 IID_IDataProviderSvc,
00055                                 (IInterface*&)dp);*/
00056   serviceLocator()->getService ("CalibDataSvc",
00057                                 IDataProviderSvc::interfaceID(),
00058                                 (IInterface*&)dp);
00059   setDataProvider(dp);
00060   
00061   // Locate the Root Conversion Service
00062   serviceLocator()->getService ("CalibTreeCnvSvc",
00063                                 IID_ICalibTreeSvc,
00064                                 (IInterface*&) m_treeSvc);
00065 
00066   // Locate meta conversion service
00067   // Will anything need to be changed here to accommodate possibility
00068   // of two concrete implementations of ICalibMetaCnvSvc?  Would
00069   // have different storage types.  Could specify type desired
00070   // as job option.  Ditto for name of class?
00071   serviceLocator()->getService("CalibMySQLCnvSvc", 
00072                                IID_ICalibMetaCnvSvc,
00073                                 (IInterface*&)m_metaSvc);
00074 
00075   serviceLocator()->getService ("CalibDataSvc",
00076                                 IID_IInstrumentName,
00077                                 (IInterface*&)m_instrSvc);
00078 
00079   return status;
00080 }

StatusCode TreeCalBaseCnv::internalCreateObj ( DataObject *&  refpObject,
IOpaqueAddress *  address 
) [protected, virtual, inherited]

This creates the transient representation of an object from the corresponding ROOT object it, then fills it and process it. This implementation actually only calls the i_* methods of the "right" converter to do the job; so the very first thing it does is get a pointer to the appropriate derived converter. Converters typically don't need to override this method but only to override/implement some of the i_* methods.

Parameters:
pRootObj pointer to the ROOT object
refpObject the object to be built
address the opaque address for this object
Returns:
status depending on the completion of the call

Definition at line 131 of file TreeCalBaseCnv.cxx.

References Bes_Common::DEBUG, calibUtil::ERROR, TreeAddress::getRunFrom(), TreeAddress::getRunTo(), TreeCalBaseCnv::i_createObj(), TreeCalBaseCnv::i_processObj(), TreeCalBaseCnv::m_runfrm, TreeCalBaseCnv::m_runto, msgSvc(), TreeCalBaseCnv::setBaseInfo(), and Bes_Common::WARNING.

Referenced by TreeCalBaseCnv::createObj().

00132                                                                    {
00133 
00134   MsgStream log(msgSvc(), "TreeCalBaseCnv");
00135    log << MSG::DEBUG<<"TreeCalBaseCnv::internalCreateObj( starting ..... "<<endreq;
00136    TreeCalBaseCnv* converter = this;
00137   CLID classId = address->clID();
00138 
00139   IConverter* conv = this->conversionSvc()->converter(classId);
00140   if (0 == conv) {
00141     log << MSG::WARNING
00142         << "No proper converter found for classID " << classId
00143             << ", the default converter"
00144             << " will be used. " << endreq;
00145   } else {
00146     converter = dynamic_cast <TreeCalBaseCnv*> (conv);
00147     if (0 == converter) {
00148       log << MSG::ERROR
00149           << "The converter found for classID " << classId
00150               << " was not a descendent of TreeCalBaseCnv as it should be "
00151               << "( was of type " << typeid (*converter).name() << "). "
00152               << "The default converter will be used" << endreq;
00153       converter = this;
00154     }
00155   }
00156 
00157   TreeAddress* treeAddress =  dynamic_cast <TreeAddress*> (address);
00158   m_runfrm = treeAddress->getRunFrom();
00159   m_runto = treeAddress->getRunTo();
00160     //m_runfrm =*( address->ipar());
00161     //m_runto =*( address->ipar()+1);
00162  //   m_runfrm = 100;
00163  //   m_runto =1000;
00164    // creates an object for the node found
00165    StatusCode sc = converter->i_createObj(address, refpObject);
00166      if (sc.isFailure()) {
00167     return sc;
00168   } 
00169      CalibData::CalibBase1* tmpObject =  dynamic_cast <CalibData::CalibBase1*> (refpObject);
00170      setBaseInfo(tmpObject);
00171   // ends up the object construction
00172   sc = converter->i_processObj(refpObject, address);
00173   if (sc.isSuccess()) {
00174     log << MSG::DEBUG << "Successfully created calib. object " << endreq;
00175   }
00176  // closeRead();
00177   return sc;
00178 }

const CLID & TreeTofSimDataCnv::objType (  )  const

Definition at line 37 of file TreeTofSimCnv.cxx.

References CLID_Calib_TofSim.

00037                                              {
00038         return CLID_Calib_TofSim;
00039 }

template<class Ty1, class Ty2>
destination* Converter< Ty1, Ty2 >::operator ( const source  )  const [inline, inherited]

virtual long TreeTofSimDataCnv::repSvcType (  )  const [inline, virtual]

Definition at line 34 of file TreeTofSimCnv.h.

References CALIBTREE_StorageType.

00034                                   { 
00035           return CALIBTREE_StorageType; 
00036       } 

void TreeCalBaseCnv::setBaseInfo ( CalibData::CalibBase1 pObj  )  [protected, inherited]

Another utility for derived classes to use.

Another convenience for derived classes: sets information belonging to the calibration base class, namely validity interval and serial number.

Definition at line 196 of file TreeCalBaseCnv.cxx.

References Bes_Common::DEBUG, TreeCalBaseCnv::m_runfrm, TreeCalBaseCnv::m_runto, msgSvc(), CalibData::CalibBase1::setrunfrm(), and CalibData::CalibBase1::setrunto().

Referenced by TreeCalBaseCnv::internalCreateObj().

00196                                                           {
00197    MsgStream log(msgSvc(), "TreeCalBaseCnv");
00198    log << MSG::DEBUG<<"set the runfrm and runto Numbers in the converter"<<endreq;
00199   pObj->setrunfrm(m_runfrm);
00200   pObj->setrunto(m_runto);
00201 }

static const unsigned char TreeCalBaseCnv::storageType (  )  [inline, static, inherited]

Definition at line 62 of file TreeCalBaseCnv.h.

References CALIBTREE_StorageType.

00062 {return CALIBTREE_StorageType;}


Friends And Related Function Documentation

friend class CnvFactory< TreeTofSimDataCnv > [friend]

Definition at line 22 of file TreeTofSimCnv.h.


Member Data Documentation

TFile* TreeCalBaseCnv::m_inFile [protected, inherited]

Definition at line 212 of file TreeCalBaseCnv.h.

IInstrumentName* TreeCalBaseCnv::m_instrSvc [protected, inherited]

Definition at line 202 of file TreeCalBaseCnv.h.

Referenced by TreeCalBaseCnv::initialize().

ICalibMetaCnvSvc* TreeCalBaseCnv::m_metaSvc [protected, inherited]

Definition at line 201 of file TreeCalBaseCnv.h.

Referenced by TreeCalBaseCnv::initialize().

TFile* TreeCalBaseCnv::m_outFile [protected, inherited]

Definition at line 209 of file TreeCalBaseCnv.h.

int TreeCalBaseCnv::m_runfrm [protected, inherited]

Definition at line 205 of file TreeCalBaseCnv.h.

Referenced by TreeCalBaseCnv::internalCreateObj(), and TreeCalBaseCnv::setBaseInfo().

int TreeCalBaseCnv::m_runto [protected, inherited]

Definition at line 206 of file TreeCalBaseCnv.h.

Referenced by TreeCalBaseCnv::internalCreateObj(), and TreeCalBaseCnv::setBaseInfo().

TDirectory* TreeCalBaseCnv::m_saveDir [protected, inherited]

Definition at line 214 of file TreeCalBaseCnv.h.

int TreeCalBaseCnv::m_serNo [protected, inherited]

Definition at line 204 of file TreeCalBaseCnv.h.

ICalibTreeSvc* TreeCalBaseCnv::m_treeSvc [protected, inherited]

Definition at line 200 of file TreeCalBaseCnv.h.

Referenced by TreeCalBaseCnv::getCalibTreeSvc(), and TreeCalBaseCnv::initialize().

TTree* TreeCalBaseCnv::m_ttree [protected, inherited]

Definition at line 210 of file TreeCalBaseCnv.h.


Generated on Tue Nov 29 23:36:11 2016 for BOSS_7.0.2 by  doxygen 1.4.7