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

TreeTofElecDataCnv Class Reference

#include <TreeTofQElecCnv.h>

Inheritance diagram for TreeTofElecDataCnv:

TreeCalBaseCnv 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 ()
ICalibTreeSvcgetCalibTreeSvc ()
virtual StatusCode initialize ()
const CLID & objType () const
destinationoperator (const source &) const
destinationoperator (const source &) const
virtual long repSvcType () const
 TreeTofElecDataCnv (ISvcLocator *svc)
virtual ~TreeTofElecDataCnv ()

Static Public Member Functions

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

Protected Member Functions

virtual destinationconvert (const source &) const =0
virtual destinationconvert (const source &) const =0
virtual StatusCode fillRoot (CalibData::CalibBase *pTDSObj, TObject *pRootObj)
virtual StatusCode i_createObj (IOpaqueAddress *address, 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 (DataObject *&refpObject, IOpaqueAddress *address)
void setBaseInfo (CalibData::CalibBase1 *pObj)
 Another utility for derived classes to use.

Protected Attributes

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

Friends

class CnvFactory<TreeTofElecDataCnv>

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


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

TreeTofElecDataCnv::TreeTofElecDataCnv ISvcLocator *  svc  ) 
 

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

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

00029 {};


Member Function Documentation

const CLID & TreeTofElecDataCnv::classID  )  [static]
 

00041                                         {
00042   return CLID_TofQ_Elec;
00043 }

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 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.

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

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
00086                                                                        {
00087   MsgStream log(msgSvc(), "TreeCalBaseCnv");
00088   log << MSG::ERROR 
00089       << "createRoot method not implemented for this calibration type" 
00090       << endreq;
00091   return StatusCode::FAILURE;
00092 }

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
00097                                                           {
00098 
00099   // Get instrument name from InstrumentName service  Now handled by 
00100   // TreeCalBaseCnv
00101   //  TString instr = TString((m_instrSvc->getInstrumentName()).c_str());
00102   //  pRootObj->setInstrument(instr);
00103   return StatusCode::SUCCESS;
00104 }

StatusCode TreeCalBaseCnv::finalize  )  [virtual, inherited]
 

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

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

00057                                    {
00058     return m_treeSvc;
00059   }

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

00046                                                                 {
00047 
00048   MsgStream log(msgSvc(), "TreeTofElecDataCnv");
00049   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00050   
00051  TreeAddress* add = dynamic_cast<TreeAddress*>(addr);
00052   DatabaseRecord *records=add->pp();
00053 
00054    TBuffer *buf1 = new TBuffer(TBuffer::kRead);
00055    TBuffer *buf2 = new TBuffer(TBuffer::kRead);
00056    TBuffer *buf3 = new TBuffer(TBuffer::kRead);
00057    TBuffer *buf4 = new TBuffer(TBuffer::kRead);
00058    TBuffer *buf5 = new TBuffer(TBuffer::kRead);
00059    TBuffer *buf6 = new TBuffer(TBuffer::kRead);
00060    TBuffer *buf7 = new TBuffer(TBuffer::kRead);
00061    TBuffer *buf8 = new TBuffer(TBuffer::kRead);
00062  
00063  buf1->SetBuffer((*records)["BarBoardNum"],512000,kFALSE);
00064  buf2->SetBuffer((*records)["EndBoardNum"],512000,kFALSE);
00065  buf3->SetBuffer((*records)["QELecBarParEast"],512000,kFALSE);
00066  buf4->SetBuffer((*records)["QELecBarParWest"],512000,kFALSE);
00067  buf5->SetBuffer((*records)["QELecEndPar"],512000,kFALSE);
00068  buf6->SetBuffer((*records)["SimQELecBarParEast"],512000,kFALSE);
00069  buf7->SetBuffer((*records)["SimQELecBarParWest"],512000,kFALSE);
00070  buf8->SetBuffer((*records)["SimQELecEndPar"],512000,kFALSE);
00071 
00072  std::cout<<" CalVerSft is "<<(*records)["CalParVer"];
00073  std::cout<<"  File name  is "<<(*records)["FileName"]<<std::endl;
00074 
00075 
00076   TTree *BarBoardNum= new TTree();
00077   TTree *EndBoardNum= new TTree();
00078   TTree *QElecBarParEast = new TTree();
00079   TTree *QElecBarParWest = new TTree();
00080   TTree *QElecEndPar = new TTree();
00081   TTree *SimQElecBarParEast = new TTree();
00082   TTree *SimQElecBarParWest = new TTree();
00083   TTree *SimQElecEndPar = new TTree();
00084      BarBoardNum->Streamer(*buf1);
00085      EndBoardNum->Streamer(*buf2);
00086      QElecBarParEast->Streamer(*buf3);
00087      QElecBarParWest->Streamer(*buf4);
00088      QElecEndPar->Streamer(*buf5);
00089      SimQElecBarParEast->Streamer(*buf6);
00090      SimQElecBarParWest->Streamer(*buf7);
00091      SimQElecEndPar->Streamer(*buf8);
00092 
00093 
00094   CalibData::BarrelElec bTof;
00095   CalibData::EndcapElec eTof;
00096 
00097   std::vector<CalibData::BarrelElec> tmpbTof;//; = new vector<CalibData::bTofCalibBase>;
00098   std::vector<CalibData::EndcapElec> tmpeTof;
00099 
00100     // Read in the object
00101   int cnt;
00102   // read btoftree ------------------------------------------------------------
00103   unsigned int num[4];
00104   double num1[4];
00105      BarBoardNum -> SetBranchAddress("Board", &num1[0]);
00106      BarBoardNum -> SetBranchAddress("Channel", &num1[1]);
00107      BarBoardNum -> SetBranchAddress("Crate", &num1[2]);
00108      BarBoardNum -> SetBranchAddress("Fee", &num1[3]);
00109   double p[11];
00110      QElecBarParEast->SetBranchAddress("P0",&p[0]);
00111      QElecBarParEast->SetBranchAddress("P1",&p[1]);
00112      QElecBarParEast->SetBranchAddress("P2",&p[2]);
00113      QElecBarParEast->SetBranchAddress("P3",&p[3]);
00114      QElecBarParEast->SetBranchAddress("P4",&p[4]);
00115      QElecBarParEast->SetBranchAddress("P5",&p[5]);
00116      QElecBarParEast->SetBranchAddress("P6",&p[6]);
00117      QElecBarParEast->SetBranchAddress("P7",&p[7]);
00118      QElecBarParEast->SetBranchAddress("P8",&p[8]);
00119      QElecBarParEast->SetBranchAddress("P9",&p[9]);
00120      QElecBarParEast->SetBranchAddress("P10",&p[10]);
00121    double p_w[11];
00122      QElecBarParWest->SetBranchAddress("P0",&p_w[0]);
00123      QElecBarParWest->SetBranchAddress("P1",&p_w[1]);
00124      QElecBarParWest->SetBranchAddress("P2",&p_w[2]);
00125      QElecBarParWest->SetBranchAddress("P3",&p_w[3]);
00126      QElecBarParWest->SetBranchAddress("P4",&p_w[4]);
00127      QElecBarParWest->SetBranchAddress("P5",&p_w[5]);
00128      QElecBarParWest->SetBranchAddress("P6",&p_w[6]);
00129      QElecBarParWest->SetBranchAddress("P7",&p_w[7]);
00130      QElecBarParWest->SetBranchAddress("P8",&p_w[8]);
00131      QElecBarParWest->SetBranchAddress("P9",&p_w[9]);
00132      QElecBarParWest->SetBranchAddress("P10",&p_w[10]);
00133       double p_se[11];
00134      SimQElecBarParEast->SetBranchAddress("P0",&p_se[0]);
00135      SimQElecBarParEast->SetBranchAddress("P1",&p_se[1]);
00136      SimQElecBarParEast->SetBranchAddress("P2",&p_se[2]);
00137      SimQElecBarParEast->SetBranchAddress("P3",&p_se[3]);
00138      SimQElecBarParEast->SetBranchAddress("P4",&p_se[4]);
00139      SimQElecBarParEast->SetBranchAddress("P5",&p_se[5]);
00140      SimQElecBarParEast->SetBranchAddress("P6",&p_se[6]);
00141      SimQElecBarParEast->SetBranchAddress("P7",&p_se[7]);
00142      SimQElecBarParEast->SetBranchAddress("P8",&p_se[8]);
00143      SimQElecBarParEast->SetBranchAddress("P9",&p_se[9]);
00144      SimQElecBarParEast->SetBranchAddress("P10",&p_se[10]);
00145        double p_sw[11];
00146      SimQElecBarParWest->SetBranchAddress("P0",&p_sw[0]);
00147      SimQElecBarParWest->SetBranchAddress("P1",&p_sw[1]);
00148      SimQElecBarParWest->SetBranchAddress("P2",&p_sw[2]);
00149      SimQElecBarParWest->SetBranchAddress("P3",&p_sw[3]);
00150      SimQElecBarParWest->SetBranchAddress("P4",&p_sw[4]);
00151      SimQElecBarParWest->SetBranchAddress("P5",&p_sw[5]);
00152      SimQElecBarParWest->SetBranchAddress("P6",&p_sw[6]);
00153      SimQElecBarParWest->SetBranchAddress("P7",&p_sw[7]);
00154      SimQElecBarParWest->SetBranchAddress("P8",&p_sw[8]);
00155      SimQElecBarParWest->SetBranchAddress("P9",&p_sw[9]);
00156      SimQElecBarParWest->SetBranchAddress("P10",&p_sw[10]);
00157 
00158      for(cnt=0; cnt<352; cnt++){
00159          BarBoardNum -> GetEntry(cnt);
00160          num[0]=num1[0];
00161          num[1]=num1[1];
00162          num[2]=num1[2];
00163          num[3]=num1[3];
00164          if(cnt%2!=0){
00165           bTof.setNumWest(num);
00166           }
00167          if(cnt%2==0){
00168           bTof.setNumEast(num);
00169          int kkk=cnt/2;
00170          QElecBarParEast->GetEntry(kkk);
00171          QElecBarParWest->GetEntry(kkk);
00172          SimQElecBarParEast->GetEntry(kkk);
00173          SimQElecBarParWest->GetEntry(kkk);
00174            bTof.setP1(p);
00175            bTof.setP2(p_w);
00176            bTof.setSimP1(p_se);
00177            bTof.setSimP2(p_sw);
00178           }           
00179          if(cnt%2!=0)
00180            tmpbTof.push_back(bTof);
00181           }
00182 
00183        //read etoftree
00184        EndBoardNum -> SetBranchAddress("Board", &num1[0]);
00185        EndBoardNum -> SetBranchAddress("Channel", &num1[1]);
00186        EndBoardNum -> SetBranchAddress("Crate", &num1[2]);
00187        EndBoardNum -> SetBranchAddress("Fee", &num1[3]);
00188        QElecEndPar-> SetBranchAddress("P0",&p[0]);
00189        QElecEndPar->SetBranchAddress("P1",&p[1]);
00190        QElecEndPar->SetBranchAddress("P2",&p[2]);
00191        QElecEndPar->SetBranchAddress("P3",&p[3]);
00192        QElecEndPar->SetBranchAddress("P4",&p[4]);
00193        QElecEndPar->SetBranchAddress("P5",&p[5]);
00194        QElecEndPar->SetBranchAddress("P6",&p[6]);
00195        QElecEndPar->SetBranchAddress("P7",&p[7]);
00196        QElecEndPar->SetBranchAddress("P8",&p[8]);
00197        QElecEndPar->SetBranchAddress("P9",&p[9]);
00198        QElecEndPar->SetBranchAddress("P10",&p[10]);
00199        SimQElecEndPar-> SetBranchAddress("P0",&p_w[0]);
00200        SimQElecEndPar->SetBranchAddress("P1",&p_w[1]);
00201        SimQElecEndPar->SetBranchAddress("P2",&p_w[2]);
00202        SimQElecEndPar->SetBranchAddress("P3",&p_w[3]);
00203        SimQElecEndPar->SetBranchAddress("P4",&p_w[4]);
00204        SimQElecEndPar->SetBranchAddress("P5",&p_w[5]);
00205        SimQElecEndPar->SetBranchAddress("P6",&p_w[6]);
00206        SimQElecEndPar->SetBranchAddress("P7",&p_w[7]);
00207        SimQElecEndPar->SetBranchAddress("P8",&p_w[8]);
00208        SimQElecEndPar->SetBranchAddress("P9",&p_w[9]);
00209        SimQElecEndPar->SetBranchAddress("P10",&p_w[10]);
00210         for(cnt=0; cnt<96; cnt++){
00211         EndBoardNum->GetEntry(cnt);
00212         QElecEndPar->GetEntry(cnt);
00213         SimQElecEndPar->GetEntry(cnt);
00214         num[0]=num1[0];
00215          num[1]=num1[1];
00216          num[2]=num1[2];
00217          num[3]=num1[3];
00218 
00219         eTof.setNum(num);
00220         eTof.setP(p);
00221         eTof.setSimP(p_w);
00222         tmpeTof.push_back(eTof);
00223    }
00224 
00225    CalibData::TofElecData *tmpObject = new CalibData::TofElecData(&tmpbTof,&tmpeTof);
00226 
00227   
00228       refpObject=tmpObject;
00229   delete BarBoardNum;
00230   delete EndBoardNum;
00231   delete QElecBarParEast;
00232   delete QElecBarParWest; 
00233   delete QElecEndPar; 
00234   delete SimQElecBarParEast;
00235   delete SimQElecBarParWest; 
00236   delete SimQElecEndPar; 
00237 
00238   return StatusCode::SUCCESS;
00239 
00240 
00241 }

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

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

00184                                                                       {
00185   return StatusCode::SUCCESS;
00186 }

StatusCode TreeCalBaseCnv::initialize  )  [virtual, inherited]
 

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

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

const CLID & TreeTofElecDataCnv::objType  )  const
 

00037                                               {
00038   return CLID_TofQ_Elec;
00039 }

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]
 

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

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.

00189                                                           {
00190    MsgStream log(msgSvc(), "TreeCalBaseCnv");
00191    log << MSG::DEBUG<<"set the runfrm and runto Numbers in the converter"<<endreq;
00192   pObj->setrunfrm(m_runfrm);
00193   pObj->setrunto(m_runto);
00194 }

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

00061 {return CALIBTREE_StorageType;}


Friends And Related Function Documentation

friend class CnvFactory<TreeTofElecDataCnv> [friend]
 


Member Data Documentation

TFile* TreeCalBaseCnv::m_inFile [protected, inherited]
 

IInstrumentName* TreeCalBaseCnv::m_instrSvc [protected, inherited]
 

ICalibMetaCnvSvc* TreeCalBaseCnv::m_metaSvc [protected, inherited]
 

TFile* TreeCalBaseCnv::m_outFile [protected, inherited]
 

int TreeCalBaseCnv::m_runfrm [protected, inherited]
 

int TreeCalBaseCnv::m_runto [protected, inherited]
 

TDirectory* TreeCalBaseCnv::m_saveDir [protected, inherited]
 

int TreeCalBaseCnv::m_serNo [protected, inherited]
 

ICalibTreeSvc* TreeCalBaseCnv::m_treeSvc [protected, inherited]
 

TTree* TreeCalBaseCnv::m_ttree [protected, inherited]
 


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