[atlas] / groups / Asap / pilotcorba / AsapIOVTreeImpl.cc Repository:
ViewVC logotype

View of /groups/Asap/pilotcorba/AsapIOVTreeImpl.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (download) (annotate)
Thu Mar 26 21:22:38 2009 UTC (4 years, 1 month ago) by giraudpf
Branch: MAIN
CVS Tags: pfg-2009-03-27, pfg-2009-03-27-2, pfg-2009-07-03-2, pfg-2009-07-03, asap-1-2-1, pfg-2009-07-29-newSensor, pfg-2009-07-29-oldSensor, HEAD
Changes since 1.2: +0 -5 lines
migrate the complete project to the new asap::Log logging library
#include "AsapIOVTreeImpl.hh"
#include "AsapSensorSummary.hh"
#include "AsapCorrection.hh"
#include "AsapSensorResidual.hh"
#include "ScopedLock.hh"
#include "TFile.h"
#include "TROOT.h"

using namespace asap::pilot::facade::corba;
using namespace asap::jdbtree::facade::corba;

AsapIOVTreeFactoryImpl* AsapIOVTreeFactoryImpl::iovtreeFactory = NULL;


#include <iostream>
using namespace std;

AsapIOVTreeFactoryImpl::AsapIOVTreeFactoryImpl()  :
  PortableServer::RefCountServantBase(),
  POA_asap::pilot::facade::corba::AsapIOVTreeFactory()
{
}

AsapIOVTreeFactoryImpl::~AsapIOVTreeFactoryImpl() {
}


AsapIOVTree_ptr AsapIOVTreeFactoryImpl::createTree(const char* name,
						      const char* title,
						      const char* cacheFilePath) {
  // Synchronize this method
  ScopedLock lock;

  TFile* rootFile = NULL;
  if (cacheFilePath && cacheFilePath[0] != '\0') {
    rootFile = TFile::Open(cacheFilePath, "RECREATE");
    if (!rootFile) throw RootException(Form("Cannot open file %s",cacheFilePath));
    rootFile->cd();
  } else {
    gROOT->cd();
  }

  AsapIOVTreeImpl* impl = new AsapIOVTreeImpl(new TTree(name, title), rootFile);
  // ServantBase takes ownership of the new object. This is mandatory for correct reference counting.
  PortableServer::ServantBase_var servant = impl;
  AsapIOVTree_var rootTree = impl->POA_asap::pilot::facade::corba::AsapIOVTree::_this(); // side effect: increment reference count.
  return rootTree._retn(); // give up ownership of the servant
}

AsapIOVTreeFactoryImpl* AsapIOVTreeFactoryImpl::getInstance() {
  if(!iovtreeFactory) {
    iovtreeFactory = new AsapIOVTreeFactoryImpl;
  }
  return iovtreeFactory;	
}


AsapIOVTreeImpl::AsapIOVTreeImpl(TTree *tree, TFile *rootFile)
  : RootTreeImpl (tree, rootFile)
 {
  _iov = new AsapIOV();
  tree->Branch("iov", "AsapIOV", &_iov);
  // a few aliases for easy command line plotting
  tree->SetAlias("rh", "iov.resultHeader");
  tree->SetAlias("dr", "iov.resultHeader.distanceResult");
  tree->SetAlias("cr", "iov.resultHeader.correction");
  tree->SetAlias("sr", "iov.resultHeader.sensorResidual");
  tree->SetAlias("fr", "iov.resultHeader.fitresult");
}
AsapIOVTreeImpl::~AsapIOVTreeImpl() {

}
void AsapIOVTreeImpl::addIOV(const AlignIOV& corbaIOV) {
  // Synchronize this method
  ScopedLock lock;

  _iov -> Clear ();

  _iov -> setSinceT (corbaIOV.since);
  _iov -> setTillT  (corbaIOV.till);
  _iov -> setIovId  (corbaIOV.iov_id);
  _iov -> setTag ("");

  if (corbaIOV.results.length() == 0) return;
  const AlignResult& corbaResult = corbaIOV.results[0];
  AsapResultHeader* header = _iov -> newResultHeader ();
  header -> setSinceT     (corbaResult.icarasSince);
  header -> setTillT      (corbaResult.icarasTill);
  header -> setCycleStart (corbaResult.cycleStart);
  header -> setCycleEnd   (corbaResult.cycleEnd);
  header -> setChi2       (corbaResult.chi2);
  header -> setNDOF       (corbaResult.nDOF);
  header -> setChi2Norm   (corbaResult.chi2norm);

  header -> setNIteration (corbaResult.nIteration);
  header -> setNMaxIteration (corbaResult.nMaxIteration);
  header -> setExitReason (corbaResult.exitReason);

  int nSensorSummary = corbaIOV.sensorsummary.length();
  for (int i=0; i<nSensorSummary; i++) {
    AsapSensorSummary* summary = header -> newSensorSummary ();
    summary -> setSensorType ((const char*)corbaIOV.sensorsummary[i].sensorType);
    summary -> setNSensorsTotal (corbaIOV.sensorsummary[i].nSensorTotal);
    summary -> setNSensorsFailure (corbaIOV.sensorsummary[i].nSensorFailure);
  }

  int nCorr = corbaIOV.corrections.length();
  for (int i=0; i<nCorr; i++) {
    AsapCorrection* corr = header -> newCorrection ();
    const AlignCorrection& corbaCorr = corbaIOV.corrections[i];

    corr -> setSinceT   (corbaIOV.since);
    corr -> setTillT    (corbaIOV.till);
    corr -> setAsapID   ((const char*)corbaCorr.asap_id);
    corr -> setAsapType ((const char*)corbaCorr.asap_type);

    corr -> setAmdbTyp ((const char*)corbaCorr.amdb_typ);
    corr -> setAmdbJff (corbaCorr.amdb_jff);
    corr -> setAmdbJzz (corbaCorr.amdb_jzz);
    corr -> setAmdbJob (corbaCorr.amdb_job);

    corr -> setS      (corbaCorr.s);
    corr -> setZ      (corbaCorr.z);
    corr -> setT      (corbaCorr.t);
    corr -> setThetaS (corbaCorr.thetas);
    corr -> setThetaZ (corbaCorr.thetaz);
    corr -> setThetaT (corbaCorr.thetat);

    corr -> setXAtlas (corbaCorr.xatlas);
    corr -> setYAtlas (corbaCorr.yatlas);
    
//     corr -> setTORTION(corbaCorr.tortion);
//     corr -> setSAGRO  (corbaCorr.sagro );
//     corr -> setSAGHV  (corbaCorr.saghv );
//     corr -> setDWRO   (corbaCorr.dwro  );
//     corr -> setDWHV   (corbaCorr.dwhv  );
//     corr -> setSAGLBV (corbaCorr.saglbv);
//     corr -> setSAGLBH (corbaCorr.saglbh);
//     corr -> setDWAC   (corbaCorr.dwac  );
//     corr -> setTEMP   (corbaCorr.temp  );
  }

  int nSensorResidual = corbaIOV.sensorresidual.length();
  for(int i = 0; i < nSensorResidual; i++) {
    AsapSensorResidual* res = header -> newSensorResidual ();
    const AlignSensorResidual& corbaSensorResidual = corbaIOV.sensorresidual[i];

    res -> setChannelName ((const char*)corbaSensorResidual.channelName );
    res -> setType        ((const char*)corbaSensorResidual.type	   );
    res -> setNMeas       (corbaSensorResidual.nmeas	   );
    res -> setDistCL      (corbaSensorResidual.distCL	   );
    res -> setDistLM      (corbaSensorResidual.distLM	   );

    for (int imes = 0; imes < res->getNMeas(); imes++) {
      AsapSensorMeasurement& m = res->at(imes);
      const AlignSensorMeasurement& c = corbaSensorResidual.meas[imes];
      m.setId             ((const char*)c.id);
      m.setMeas           (c.meas          );
      m.setModel          (c.model	   );
      m.setError          (c.error	   );
      m.setMeasraw        (c.measraw	   );
      m.setMeasrawerror   (c.measrawerror  );
      m.setMeasrawnpoints (c.measrawnpoints);
    }
  }

  tree -> Fill ();

}

CERN Central CVS service
ViewVC Help
Powered by ViewVC 1.0.9