Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

RootEstTofCalibDataCnv Class Reference

#include <RootEstTofCalibDataCnv.h>

Inheritance diagram for RootEstTofCalibDataCnv:

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

Public Types

typedef Ty2 destination
typedef Ty2 destination
typedef Ty1 source
typedef Ty1 source

Public Member Functions

virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&refpObject)
virtual StatusCode createRoot (const std::string &fname, CalibData::CalibBase1 *pTDSObj)
virtual StatusCode finalize ()
ICalibRootSvcgetCalibRootSvc ()
virtual StatusCode initialize ()
const CLID & objType () const
destinationoperator (const source &) const
destinationoperator (const source &) const
virtual StatusCode readRootObj (TTree *tree, const std::string &branch, TObject *&pCalib, unsigned index=0)
virtual StatusCode readRootObj (const std::string &treename, const std::string &branch, TObject *&pCalib, unsigned index=0)
virtual long repSvcType () const
 RootEstTofCalibDataCnv (ISvcLocator *svc)
virtual ~RootEstTofCalibDataCnv ()

Static Public Member Functions

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

Protected Member Functions

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

Protected Attributes

TFile * m_inFile
IInstrumentNamem_instrSvc
ICalibMetaCnvSvcm_metaSvc
TFile * m_outFile
ICalibRootSvcm_rootSvc
int m_runfrm
int m_runto
TDirectory * m_saveDir
int m_serNo
TTree * m_ttree
ITime * m_vend
ITime * m_vstart

Friends

class CnvFactory<RootEstTofCalibDataCnv>

Member Typedef Documentation

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

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

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

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


Constructor & Destructor Documentation

RootEstTofCalibDataCnv::RootEstTofCalibDataCnv ISvcLocator *  svc  ) 
 

00039                                                                 :
00040   RootCalBaseCnv(svc, CLID_Calib_EstTofCal) { 
00041  }

virtual RootEstTofCalibDataCnv::~RootEstTofCalibDataCnv  )  [inline, virtual]
 

00029 {};


Member Function Documentation

const CLID & RootEstTofCalibDataCnv::classID  )  [static]
 

00048                                             {
00049   return CLID_Calib_EstTofCal;
00050 }

StatusCode RootCalBaseCnv::closeRead  )  [protected, inherited]
 

Clean up when we've finished reading in

00132                                      {
00133   m_inFile->Close();
00134 
00135   delete m_inFile;
00136   m_inFile = 0;
00137 
00138   if (m_saveDir) {
00139     m_saveDir->cd();
00140     m_saveDir = 0;
00141   }
00142   return StatusCode::SUCCESS;
00143 }

StatusCode RootCalBaseCnv::closeWrite  )  [protected, inherited]
 

Finish up writing file opened with openWrite: fill the tree write the file close the file Delete TFile (causes associated Tree to be deleted)

00179                                       {
00180 
00181   MsgStream log(msgSvc(), "RootCalBaseCnv");
00182 
00183   StatusCode ret = StatusCode::SUCCESS;
00184 
00185   m_outFile->cd();
00186   m_outFile->Close();
00187   delete m_outFile;
00188   m_outFile = 0;
00189   if (m_saveDir) m_saveDir->cd();
00190   m_saveDir = 0;
00191   return ret;
00192 }

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

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

StatusCode RootCalBaseCnv::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.

00250                                                            {
00251   //  StatusCode ret;
00252 
00253   // first do the things we always need:
00254   //   First string parameter of opaque address is file ident
00255   MsgStream log(msgSvc(), "RootCalBaseCnv");
00256    log << MSG::DEBUG<<"RootCalBaseCnv::createObj( starting ...."<<endreq;
00257    const std::string* par = addr->par();
00258 
00259   std::string par0 = par[0];
00260    
00261   return internalCreateObj(par0, refpObject, addr);
00262 
00263 }

StatusCode RootEstTofCalibDataCnv::createRoot const std::string &  fname,
CalibData::CalibBase1 pTDSObj
[virtual]
 

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

Reimplemented from RootCalBaseCnv.

00151                                                                       {
00152   MsgStream log(msgSvc(), "RootEstTofCalibDataCnv");
00153 
00154   // Open the file, create the branch
00155   StatusCode sc = openWrite(fname);
00156   if(!sc)
00157     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00158     }
00159   // write the Data in the TCDS to RootFile
00160   CalibData::TofCalibData* btof = dynamic_cast<CalibData::TofCalibData*>(pTDSObj);
00161 
00162   // write  btoftree----------------------------------------------------------------
00163   double cnvBarPar1[nBarPar];
00164   double cnvBarPar2[nBarPar];
00165 
00166   char brname[8], ibrname[8];
00167   TTree *btoftree = new TTree("BarTofPar", "BarTofPar");
00168   for( unsigned int i=0; i<nBarPar; i++ ) {
00169     sprintf(  brname, "P%i",   i );
00170     sprintf( ibrname, "P%i/D", i );
00171     btoftree -> Branch( brname, &cnvBarPar1[i], ibrname );
00172   }
00173 
00174   for( int i=0; i<176; i++ ) {
00175     for( int j=0;j<static_cast<int>(nBarPar);j++){
00176       cnvBarPar1[j] = btof->getBTofPleft(i,j);
00177       cnvBarPar2[j] = btof->getBTofPright(i,j);
00178     }
00179     btoftree -> Fill();
00180   }
00181      
00182  //write  etoftree----------------------------------------------------------------
00183   double cnvEndPar[nEndPar];
00184 
00185   char ecname[8], iecname[8];
00186   TTree *etoftree = new TTree("EndTofPar", "EndTofPar");
00187   for( unsigned int i=0; i<nEndPar; i++ ) {
00188     sprintf(  ecname, "P%i",   i );
00189     sprintf( iecname, "P%i/D", i );
00190     etoftree -> Branch( ecname, &cnvEndPar[i], iecname );
00191   }
00192 
00193   for(int i=0; i<96; i++){
00194     for(int j=0;j<static_cast<int>(nEndPar);j++){
00195       cnvEndPar[j] = btof->getETofP(i,j);
00196     }
00197     etoftree->Fill();
00198   }
00199 
00200   //  write all the trees
00201   btoftree -> Write();
00202   etoftree -> Write();
00203   delete btoftree;
00204   delete etoftree;
00205   closeWrite();
00206   log<<MSG::INFO<<"successfully create RootFile"<<endreq;
00207   
00208   return sc;
00209 }

StatusCode RootCalBaseCnv::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
00239                                                           {
00240 
00241   // Get instrument name from InstrumentName service  Now handled by 
00242   // RootCalBaseCnv
00243   //  TString instr = TString((m_instrSvc->getInstrumentName()).c_str());
00244   //  pRootObj->setInstrument(instr);
00245   return StatusCode::SUCCESS;
00246 }

StatusCode RootCalBaseCnv::finalize  )  [virtual, inherited]
 

00079                                     {
00080   return Converter::finalize();
00081 }

ICalibRootSvc* RootCalBaseCnv::getCalibRootSvc  )  [inline, inherited]
 

00058                                    {
00059     return m_rootSvc;
00060   }

StatusCode RootEstTofCalibDataCnv::i_createObj const std::string &  fname,
DataObject *&  refpObject
[protected, virtual]
 

Read in object from specified branch. Don't need tree name; it's always Calib

Reimplemented from RootCalBaseCnv.

00053                                                                 {
00054 
00055   MsgStream log(msgSvc(), "RootEstTofCalibDataCnv");
00056   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00057  
00058  // open the file
00059   StatusCode sc = openRead(fname);
00060   if(!sc)
00061     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00062     }
00063  
00064   CalibData::bTofCalibBase bTof;
00065   CalibData::eTofCalibBase eTof;
00066   CalibData::bTofCommonCalibBase bTofCommon;
00067   CalibData::tofCalibInfoBase tofinfo;
00068 
00069   std::vector<CalibData::bTofCalibBase> tmpbTof;
00070   std::vector<CalibData::eTofCalibBase> tmpeTof;
00071   std::vector<CalibData::bTofCommonCalibBase> tmpbTofCommon;
00072   std::vector<CalibData::tofCalibInfoBase> tofinfoCol;
00073 
00074   // Read in the object
00075   int cnt;
00076   // read btoftree ------------------------------------------------------------
00077   double cnvBarPar1[nBarPar];
00078   double cnvBarPar2[nBarPar];
00079   double cnvBarParOff1[nBarParOff];
00080   double cnvBarParOff2[nBarParOff];
00081 
00082   TTree *btoftree = (TTree*)m_inFile -> Get("BarTofPar");
00083 
00084   char brname[10];
00085   for( unsigned int i=0; i<nBarPar; i++ ) {
00086     sprintf( brname, "P%i", i );
00087     btoftree -> SetBranchAddress( brname, &cnvBarPar1[i] );    
00088   }
00089   for( unsigned int i=0; i<nBarPar; i++ ) {
00090     sprintf( brname, "P%i", i+nBarPar );
00091     btoftree -> SetBranchAddress( brname, &cnvBarPar2[i] );    
00092   }
00093   for( unsigned int i=0; i<nBarParOff; i++ ) {
00094     sprintf( brname, "Poff%i", i );
00095     btoftree -> SetBranchAddress( brname, &cnvBarParOff1[i] );    
00096   }
00097   for( unsigned int i=0; i<nBarParOff; i++ ) {
00098     sprintf( brname, "Poff%i", i+nBarParOff );
00099     btoftree -> SetBranchAddress( brname, &cnvBarParOff2[i] );    
00100   }
00101 
00102   for(cnt=0; cnt<176; cnt++){
00103     btoftree -> GetEntry(cnt);
00104     bTof.setP1( cnvBarPar1 );
00105     bTof.setP2( cnvBarPar2 );
00106     bTof.setPoff1( cnvBarParOff1 );
00107     bTof.setPoff2( cnvBarParOff2 );
00108     tmpbTof.push_back( bTof );
00109   }
00110 
00111   //read etoftree
00112   double cnvEndPar[nEndPar];
00113 
00114   TTree *etoftree = (TTree*)m_inFile -> Get("EndTofPar");
00115 
00116   char ecname[10];
00117   for( unsigned int i=0; i<nEndPar; i++ ) {
00118     sprintf( ecname, "P%i", i );
00119     etoftree -> SetBranchAddress( ecname, &cnvEndPar[i] );
00120   }
00121    
00122   for(cnt=0; cnt<96; cnt++){
00123     etoftree->GetEntry(cnt);
00124     eTof.setP( cnvEndPar );
00125     tmpeTof.push_back(eTof);
00126   }
00127 
00128   //read bTofCommonCalibBase
00129   double cnvBarOffset[nBarOffset];
00130   TTree *btofcommontree = (TTree*)m_inFile -> Get("BarTofParCommon");
00131   for( unsigned int i=0; i<nBarOffset; i++ ) {
00132     sprintf( brname, "t0offset%i", i );
00133     btofcommontree-> SetBranchAddress( brname, &cnvBarOffset[i]);
00134   }
00135 
00136   int entries = btofcommontree->GetEntries();
00137   for(cnt=0;cnt<entries;cnt++){
00138     btofcommontree->GetEntry(cnt);
00139     bTofCommon.setOffset( cnvBarOffset );
00140     tmpbTofCommon.push_back(bTofCommon);   
00141   }
00142 
00143   CalibData::TofCalibData *tmpObject = new CalibData::TofCalibData(&tmpbTof,&tmpbTofCommon,&tmpeTof,&tofinfoCol);
00144 
00145   refpObject=tmpObject;
00146 
00147   return StatusCode::SUCCESS;
00148 }

StatusCode RootCalBaseCnv::i_processObj DataObject *  pObject,
IOpaqueAddress *  address
[protected, virtual, inherited]
 

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

00320                                                                       {
00321   return StatusCode::SUCCESS;
00322 }

StatusCode RootCalBaseCnv::initialize  )  [virtual, inherited]
 

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   setDataProvider(dp);
00057   
00058   // Locate the Root Conversion Service
00059   serviceLocator()->getService ("CalibRootCnvSvc",
00060                                 IID_ICalibRootSvc,
00061                                 (IInterface*&) m_rootSvc);
00062 
00063   // Locate meta conversion service
00064   // Will anything need to be changed here to accommodate possibility
00065   // of two concrete implementations of ICalibMetaCnvSvc?  Would
00066   // have different storage types.  Could specify type desired
00067   // as job option.  Ditto for name of class?
00068   serviceLocator()->getService("CalibMySQLCnvSvc", 
00069                                IID_ICalibMetaCnvSvc,
00070                                 (IInterface*&)m_metaSvc);
00071 
00072   serviceLocator()->getService ("CalibDataSvc",
00073                                 IID_IInstrumentName,
00074                                 (IInterface*&)m_instrSvc);
00075 
00076   return status;
00077 }

StatusCode RootCalBaseCnv::internalCreateObj const std::string &  fname,
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
00267                                                                    {
00268   MsgStream log(msgSvc(), "RootCalBaseCnv");
00269    log << MSG::DEBUG<<"RootCalBaseCnv::internalCreateObj( starting ..... "<<endreq;
00270    RootCalBaseCnv* converter = this;
00271   CLID classId = address->clID();
00272 
00273   IConverter* conv = this->conversionSvc()->converter(classId);
00274   if (0 == conv) {
00275     log << MSG::WARNING
00276         << "No proper converter found for classID " << classId
00277             << ", the default converter"
00278             << " will be used. " << endreq;
00279   } else {
00280     converter = dynamic_cast <RootCalBaseCnv*> (conv);
00281     if (0 == converter) {
00282       log << MSG::ERROR
00283           << "The converter found for classID " << classId
00284               << " was not a descendent of RootCalBaseCnv as it should be "
00285               << "( was of type " << typeid (*converter).name() << "). "
00286               << "The default converter will be used" << endreq;
00287       converter = this;
00288     }
00289   }
00290 
00291     m_runfrm =*( address->ipar());
00292     m_runto =*( address->ipar()+1);
00293    // creates an object for the node found
00294    StatusCode sc = converter->i_createObj(fname, refpObject);
00295      if (sc.isFailure()) {
00296     return sc;
00297   } 
00298      CalibData::CalibBase1* tmpObject =  dynamic_cast <CalibData::CalibBase1*> (refpObject);
00299      setBaseInfo(tmpObject);
00300   // ends up the object construction
00301   sc = converter->i_processObj(refpObject, address);
00302   if (sc.isSuccess()) {
00303     log << MSG::DEBUG << "Successfully created calib. object " << endreq;
00304   }
00305   closeRead();
00306   return sc;
00307 }

const CLID & RootEstTofCalibDataCnv::objType  )  const
 

00044                                                   {
00045   return CLID_Calib_EstTofCal;
00046 }

StatusCode RootCalBaseCnv::openRead const std::string &  fname  )  [protected, inherited]
 

Utility for "leaf" converters to call

Parameters:
Root file to open for read
Name of branch to be read in
ref. to pCalib pointer which will be set to address of read-in object
00095                                                           { 
00096 
00097   MsgStream log(msgSvc(), "RootCalBaseCnv");
00098 
00099   // Check fname isn't empty
00100   if (fname == std::string("")) return StatusCode::FAILURE;
00101 
00102   if (doClean() ) {
00103     log << MSG::WARNING << "Previous operation didn't clean up! " << endreq;
00104   }
00105   m_saveDir = gDirectory;
00106 
00107   std::string ourName(fname);
00108   facilities::Util::expandEnvVar(&ourName);
00109 
00110   m_inFile = new TFile(ourName.c_str());
00111   
00112   if (!m_inFile->IsOpen() ) {
00113     log << MSG::ERROR << "ROOT file " << ourName 
00114         << "could not be opened for reading " << endreq;
00115     delete m_inFile;
00116     m_inFile = 0;
00117     return StatusCode::FAILURE;
00118   }
00119   else {
00120     log << MSG::INFO
00121         << "Successfully opened ROOT file " << fname << " aka " << ourName
00122         << " for reading " << endreq;
00123   }
00124 
00125 
00126   m_inFile->cd();             //    Maybe will need this
00127 
00128 
00129   return StatusCode::SUCCESS;
00130 }

StatusCode RootCalBaseCnv::openWrite const std::string &  fname  )  [protected, virtual, inherited]
 

Utility used by derived converters to start writing a ROOT file (open TFile, make a TTree, give it a branch)

Parameters:
fname Name for new file
className Name of class for object specified in next parameter; used to name branch as well)
pCalib pointer to object used to create the branch
00145                                                            {
00146 
00147   MsgStream log(msgSvc(), "RootCalBaseCnv");
00148 
00149   // Check fname isn't empty
00150   if (fname == std::string("")) return StatusCode::FAILURE;
00151 
00152   std::string ourName(fname);
00153   facilities::Util::expandEnvVar(&ourName);
00154 
00155   if (doClean() ) {
00156     log << MSG::WARNING << "Previous operation didn't clean up! " << endreq;
00157   }
00158 
00159   m_saveDir = gDirectory;
00160 
00161  
00162   m_outFile = new TFile(ourName.c_str(), "RECREATE");
00163   if (!m_outFile->IsOpen()) {
00164     log << MSG::ERROR << "ROOT file " << fname << " aka " << ourName 
00165         << " could not be opened for writing" << endreq;
00166     delete m_outFile;
00167     m_outFile = 0;
00168     return StatusCode::FAILURE;
00169   }
00170   else {
00171     log << MSG::INFO
00172         << "Successfully opened ROOT file " << fname << " aka " << ourName
00173         << " for writing " << endreq;
00174   }
00175    m_outFile->cd();
00176   return StatusCode::SUCCESS;
00177 }

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

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

StatusCode RootCalBaseCnv::readRootObj TTree *  tree,
const std::string &  branch,
TObject *&  pCalib,
unsigned  index = 0
[virtual, inherited]
 

00205                                                                 {
00206   TBranch* pBranch=pTree->GetBranch(branch.c_str());
00207   pBranch->SetAddress(&pObj);
00208   int nBytes = pBranch->GetEntry(ix);
00209   return (nBytes > 0) ? StatusCode::SUCCESS : StatusCode::FAILURE;
00210  }

StatusCode RootCalBaseCnv::readRootObj const std::string &  treename,
const std::string &  branch,
TObject *&  pCalib,
unsigned  index = 0
[virtual, inherited]
 

Read in object (by default the first) from specified branch.

00197                                                                 {
00198   TTree* pTree = (TTree*)m_inFile->Get(treename.c_str());
00199 
00200   return readRootObj(pTree, branch, pObj, ix);
00201  }

virtual long RootEstTofCalibDataCnv::repSvcType  )  const [inline, virtual]
 

00034                                  { 
00035           return CALIBROOT_StorageType; 
00036       } 

void RootCalBaseCnv::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.

00325                                                           {
00326    MsgStream log(msgSvc(), "RootCalBaseCnv");
00327    log << MSG::DEBUG<<"set the runfrm and runto Numbers in the converter"<<endreq;
00328   pObj->setrunfrm(m_runfrm);
00329   pObj->setrunto(m_runto);
00330 }

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

00062 {return CALIBROOT_StorageType;}


Friends And Related Function Documentation

friend class CnvFactory<RootEstTofCalibDataCnv> [friend]
 


Member Data Documentation

TFile* RootCalBaseCnv::m_inFile [protected, inherited]
 

IInstrumentName* RootCalBaseCnv::m_instrSvc [protected, inherited]
 

ICalibMetaCnvSvc* RootCalBaseCnv::m_metaSvc [protected, inherited]
 

TFile* RootCalBaseCnv::m_outFile [protected, inherited]
 

ICalibRootSvc* RootCalBaseCnv::m_rootSvc [protected, inherited]
 

int RootCalBaseCnv::m_runfrm [protected, inherited]
 

int RootCalBaseCnv::m_runto [protected, inherited]
 

TDirectory* RootCalBaseCnv::m_saveDir [protected, inherited]
 

int RootCalBaseCnv::m_serNo [protected, inherited]
 

TTree* RootCalBaseCnv::m_ttree [protected, inherited]
 

ITime* RootCalBaseCnv::m_vend [protected, inherited]
 

ITime* RootCalBaseCnv::m_vstart [protected, inherited]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 18:48:28 2011 for BOSS6.5.5 by  doxygen 1.3.9.1