/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[18];
};
static const struct sqlcxp sqlfpn =
{
    17,
    "hstartparoraio.pc"
};


static unsigned int sqlctx = 10010819;


static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
              int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[10];
   unsigned int   sqhstl[10];
            int   sqhsts[10];
            void  *sqindv[10];
            int   sqinds[10];
   unsigned int   sqharm[10];
   unsigned int   *sqharc[10];
   unsigned short  sqadto[10];
   unsigned short  sqtdso[10];
} sqlstm = {12,10};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(char *, int *); }

 static const char *sq0002 = 
"select crate ,slot ,channel ,module ,strip ,type_info  from start_ana.start_\
lookuptable_data where (module=:b0 and vers_id=:b1)           ";

 static const char *sq0006 = 
"select strip ,slope ,offset ,slope_r ,slope_l ,slope_m ,v_group ,p_offset  f\
rom start_ana.start_calpar_data where (module_pos=:b0 and version=:b1)        \
   ";

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4130,1,0,0,
5,0,0,1,81,0,4,126,0,0,2,0,0,1,0,2,3,0,0,2,3,0,0,
28,0,0,2,138,0,9,206,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
51,0,0,2,0,0,13,207,0,0,6,0,0,1,0,2,3,0,0,2,3,0,0,2,3,0,0,2,3,0,0,2,3,0,0,2,97,
0,0,
90,0,0,2,0,0,15,215,0,0,0,0,0,1,0,
105,0,0,3,178,0,4,256,0,0,5,1,0,1,0,2,3,0,0,2,3,0,0,2,4,0,0,2,4,0,0,1,3,0,0,
140,0,0,4,181,0,4,263,0,0,5,1,0,1,0,2,3,0,0,2,3,0,0,2,4,0,0,2,4,0,0,1,3,0,0,
175,0,0,5,183,0,4,271,0,0,5,1,0,1,0,2,3,0,0,2,3,0,0,2,4,0,0,2,4,0,0,1,3,0,0,
210,0,0,6,157,0,9,340,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
233,0,0,6,0,0,13,341,0,0,8,0,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,
0,0,2,4,0,0,2,4,0,0,
280,0,0,6,0,0,15,356,0,0,0,0,0,1,0,
295,0,0,7,134,0,4,401,0,0,4,1,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,1,3,0,0,
326,0,0,8,86,0,4,457,0,0,2,0,0,1,0,2,3,0,0,2,9,0,0,
349,0,0,9,89,0,4,502,0,0,3,0,0,1,0,2,3,0,0,2,3,0,0,2,9,0,0,
376,0,0,10,196,0,3,592,0,0,10,10,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,1,4,0,0,1,4,0,0,
1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,
431,0,0,11,141,0,3,653,0,0,5,5,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,1,4,0,0,1,4,0,0,
466,0,0,12,133,0,3,728,0,0,7,7,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,1,3,0,0,1,3,0,0,1,
3,0,0,1,97,0,0,
509,0,0,13,242,0,6,774,0,0,5,5,0,1,0,3,3,0,0,1,3,0,0,1,3,0,0,1,97,0,0,1,97,0,0,
544,0,0,14,245,0,6,783,0,0,5,5,0,1,0,3,3,0,0,1,3,0,0,1,3,0,0,1,97,0,0,1,97,0,0,
579,0,0,15,253,0,6,792,0,0,5,5,0,1,0,3,3,0,0,1,3,0,0,1,3,0,0,1,97,0,0,1,97,0,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Modified : 03/05/2002 by I. Koenig
//*-- Created : 28/09/2000 by I. Koenig

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
// HStartParOraIo
//
// Interface class to database Oracle for input/output of parameters needed
// by the START detector
// (uses the Oracle C/C++ precompiler)
//
//////////////////////////////////////////////////////////////////////////////
using namespace std;
#include "hstartparoraio.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hstartdetector.h"
#include "hstartcalpar.h"
#include "hstartselfcopar.h"
#include "hstartlookup.h"
#include "hstartgeompar.h"
#include "hgeomcompositevolume.h"
#include "hgeomoradetversion.h"
#include <iostream>
#include <iomanip>
#include <unistd.h>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern

// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>

ClassImp(HStartParOraIo)

#define START_MAXMODS 10 
#define START_MAXSTRIPS 300

HStartParOraIo::HStartParOraIo(HOraConn* pC) : HDetParOraIo(pC) {
  // constructor
  // sets the name of the I/O class "HStartParIo"
  // gets the pointer to the connection class
  fName="HStartParIo";
  numModules=0;
  startIds=0;
  initModules=0;
  geomVers=0;
}


HStartParOraIo::~HStartParOraIo() {
  // destructor
  if (initModules) delete initModules;
  if (startIds) delete startIds;
  if (geomVers) delete geomVers;
}


Bool_t HStartParOraIo::init(HParSet* pPar,Int_t* set) {
  // calls special read-function for each parameter container
  const Text_t* name=pPar->IsA()->GetName();
  if (startIo(pPar)<=0) return kFALSE;
  if (strcmp(name,"HStartCalPar")==0) return read(((HStartCalPar*)pPar),set);
  if (strcmp(name,"HStartSelfCoPar")==0) return read(((HStartSelfCoPar*)pPar),set);
  if (strcmp(name,"HStartLookup")==0) return read(((HStartLookup*)pPar),set);
  if (strcmp(name,"HStartGeomPar")==0) return read(((HStartGeomPar*)pPar),set);
  // cout<<"initialization of "<<pPar->GetName()<<" not possible from Oracle!"<<endl;
  return kFALSE;
}

Int_t HStartParOraIo::write(HParSet* pPar) {
  // calls the appropriate write function for the container
  const Text_t* name=pPar->IsA()->GetName();
  if (startIo(pPar)<=0) return 0;
  if (strcmp(name,"HStartCalPar")==0) return writePar((HStartCalPar*)pPar);
  if (strcmp(name,"HStartSelfCoPar")==0)return writePar((HStartSelfCoPar*)pPar);
  if (strcmp(name,"HStartLookup")==0) return writePar((HStartLookup*)pPar);
  cout<<"No write-interface to Oracle for parameter container "
      <<pPar->GetName()<<endl;
  return 0;
}


Int_t HStartParOraIo::startIo(HParSet* pPar) {
  // Gets the run start of the first run and reads the detector setup from Oracle
  // Returns the number of modules for this run
  // Returns -1, if run is not found, or 0, if no modules are found for this run
  runStart=getRunStart(pPar);
  if (runStart>0 && startIds==0) readIds();
  if (runStart==-1 || numModules<=0) {
    pPar->setInputVersion(-1,inputNumber);
    return -1;
  }
  return runStart;
}


Int_t HStartParOraIo::readIds() {
  // Gets the run start of the actual run
  // Reads the number of strips of all modules defined for the first run
  //   and stores them in array startIds (the position in the array is
  //   identical with the module position in the setup (0: START 1: VETO) 
  // Returns -1, if the run is not found, or 0, if no modules are found for this run
  HStartDetector* det=(HStartDetector*)(gHades->getSetup()->getDetector("Start"));
  //maxModules=det->getMaxModules();
  maxModules=det->getMaxModInSetup();
  maxStrips=det->getMaxComponents();
  if (maxModules>START_MAXMODS || START_MAXSTRIPS < (maxModules*maxStrips)) {
    Error("HStartParOraIo::readIds()",
          "Maximum i/o buffer sizes to small:\n maximum number of modules: %i\n"
          "maximum number of strips: %i",
          START_MAXMODS,START_MAXSTRIPS);
    return -1;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

  struct {
    int pos[START_MAXMODS];
    int nstrips[START_MAXMODS];
  } mods;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("readIds()"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  /* EXEC SQL SELECT module_pos, n_strips
           INTO :mods
           FROM start_ana.det_setup_at_run_hist; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 2;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select module_pos ,n_strips into :s1 ,:s2   from start_ana.\
det_setup_at_run_hist ";
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)mods.pos;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )sizeof(int);
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqharc[0] = (unsigned int   *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)mods.nstrips;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )sizeof(int);
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqharc[1] = (unsigned int   *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("readIds()");
}


  numModules=sqlca.sqlerrd[2]; // number of rows returned by select
  if (numModules>0) {
    startIds=new TArrayI(START_MAXMODS); 
    for(Int_t i=0;i<START_MAXMODS;i++) startIds->AddAt(0,i);
    initModules=new TArrayI(START_MAXMODS);
  } else {
    Error("readIds","Error now row returned");
  }
  for(Int_t i=0;i<numModules;i++) {
    if (det->getModule(-1,mods.pos[i])) {
      startIds->AddAt(mods.nstrips[i],mods.pos[i]);
      if (mods.nstrips[i]>maxStrips)
      Error("HStartParOraIo::readIds()",
            "number of strips in HStartDetector:    %i\n"
            "number of strips in Oracle at position %i: %i",
            maxStrips,mods.pos[i],mods.nstrips[i]);
    }
  }
   //printNStrips();
  return numModules;
}


void HStartParOraIo::printNStrips() {
  // prints the number of strips of all modules in the current setup,
  // which are found in the database
  if (startIds) {
    cout<<"START detector modules: ";
    for(Int_t i=0;i<maxModules;i++) cout<<"   "<<i<<": "<<startIds->At(i);
    cout<<'\n';
  }
}

Bool_t HStartParOraIo::read(HStartLookup* pPar, Int_t* set) {
  // reads and fills the container "StartLookup" for mapping TDC channels
  // to strips
  Int_t contVers=pPar->getInputVersion(inputNumber);
  Int_t versions[START_MAXMODS];
  Int_t version=getVersion(pPar,set,versions);
  if (version==-1) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;
  }
  if (contVers==version) return kTRUE;
  if (inputNumber==1) pPar->clear();
  pPar->setInputVersion(version,inputNumber);
  initModules->Reset();
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int modPos;
    int vers;
    struct {
      int cr[START_MAXSTRIPS];
      int sl[START_MAXSTRIPS];
      int ch[START_MAXSTRIPS];
      int mo[START_MAXSTRIPS];
      int st[START_MAXSTRIPS];
      char tp[START_MAXSTRIPS][2];
    } lookup;
	struct {
      short cr[START_MAXSTRIPS];
      short sl[START_MAXSTRIPS];
      short ch[START_MAXSTRIPS];
      short mo[START_MAXSTRIPS];
      short st[START_MAXSTRIPS];
      short tp[START_MAXSTRIPS];
    } lookup_ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("read(HStartLookup*,Int_t*)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  /* EXEC SQL DECLARE lookup_cur CURSOR FOR 
           SELECT crate, slot, channel, module, strip, type_info
             FROM start_ana.start_lookuptable_data
             WHERE module = :modPos AND vers_id = :vers; */ 

  for(Int_t m=0;m<maxModules;m++) {
    if (set[m] && startIds->At(m)>0 && versions[m]>0) {
      modPos=m+1;
      vers=versions[m];
      /* EXEC SQL OPEN lookup_cur; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 2;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = sq0002;
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )28;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqcmod = (unsigned int )0;
      sqlstm.sqhstv[0] = (         void  *)&modPos;
      sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)&vers;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode < 0) showSqlError("read(HStartLookup*,Int_t*)");
}


      /* EXEC SQL FETCH lookup_cur INTO :lookup INDICATOR :lookup_ind; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 6;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.iters = (unsigned int  )300;
      sqlstm.offset = (unsigned int  )51;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqfoff = (           int )0;
      sqlstm.sqfmod = (unsigned int )2;
      sqlstm.sqhstv[0] = (         void  *)lookup.cr;
      sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[0] = (         int  )sizeof(int);
      sqlstm.sqindv[0] = (         void  *)lookup_ind.cr;
      sqlstm.sqinds[0] = (         int  )sizeof(short);
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqharc[0] = (unsigned int   *)0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)lookup.sl;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[1] = (         int  )sizeof(int);
      sqlstm.sqindv[1] = (         void  *)lookup_ind.sl;
      sqlstm.sqinds[1] = (         int  )sizeof(short);
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqharc[1] = (unsigned int   *)0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqhstv[2] = (         void  *)lookup.ch;
      sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[2] = (         int  )sizeof(int);
      sqlstm.sqindv[2] = (         void  *)lookup_ind.ch;
      sqlstm.sqinds[2] = (         int  )sizeof(short);
      sqlstm.sqharm[2] = (unsigned int  )0;
      sqlstm.sqharc[2] = (unsigned int   *)0;
      sqlstm.sqadto[2] = (unsigned short )0;
      sqlstm.sqtdso[2] = (unsigned short )0;
      sqlstm.sqhstv[3] = (         void  *)lookup.mo;
      sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[3] = (         int  )sizeof(int);
      sqlstm.sqindv[3] = (         void  *)lookup_ind.mo;
      sqlstm.sqinds[3] = (         int  )sizeof(short);
      sqlstm.sqharm[3] = (unsigned int  )0;
      sqlstm.sqharc[3] = (unsigned int   *)0;
      sqlstm.sqadto[3] = (unsigned short )0;
      sqlstm.sqtdso[3] = (unsigned short )0;
      sqlstm.sqhstv[4] = (         void  *)lookup.st;
      sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[4] = (         int  )sizeof(int);
      sqlstm.sqindv[4] = (         void  *)lookup_ind.st;
      sqlstm.sqinds[4] = (         int  )sizeof(short);
      sqlstm.sqharm[4] = (unsigned int  )0;
      sqlstm.sqharc[4] = (unsigned int   *)0;
      sqlstm.sqadto[4] = (unsigned short )0;
      sqlstm.sqtdso[4] = (unsigned short )0;
      sqlstm.sqhstv[5] = (         void  *)lookup.tp;
      sqlstm.sqhstl[5] = (unsigned int  )2;
      sqlstm.sqhsts[5] = (         int  )2;
      sqlstm.sqindv[5] = (         void  *)lookup_ind.tp;
      sqlstm.sqinds[5] = (         int  )sizeof(short);
      sqlstm.sqharm[5] = (unsigned int  )0;
      sqlstm.sqharc[5] = (unsigned int   *)0;
      sqlstm.sqadto[5] = (unsigned short )0;
      sqlstm.sqtdso[5] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode < 0) showSqlError("read(HStartLookup*,Int_t*)");
}


      for(Int_t i=0;i<sqlca.sqlerrd[2];i++) {
        pPar->setAddress(lookup.cr[i],lookup.sl[i],lookup.ch[i],
                         m,lookup.st[i],(lookup_ind.tp[i]==-1)?'\0':lookup.tp[i][0]);
        initModules->AddAt(m+1,m);
      }
    }
  }
  /* EXEC SQL CLOSE lookup_cur; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )90;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("read(HStartLookup*,Int_t*)");
}


  Bool_t allFound=kTRUE;
  for(Int_t i=0;i<maxModules;i++) {
    if (set[i]>0 && initModules->At(i)<=0) {
      allFound=kFALSE;
      Error("read(HStartLookup*,...)","\n Start Lookup params for module %d not found",i);
    }
  }
  if (allFound) {
//	pPar->printParam();
    setChanged(pPar);
    printInfo(pPar->GetName());
  }
  return allFound;	
};
 

Int_t HStartParOraIo::getVersion(HParSet* pPar,Int_t* set,Int_t* versions) {
  // reads the version for the calibration and selfcoincidence parameters
  // valid for the current event file
  // returns -1, if no data are found
  HParOraSet* oraSet=getOraSet(pPar);
  if (oraSet->contextId==-1) return -1;
  Int_t contVers=pPar->getInputVersion(inputNumber);
  if (contVers!=-1 && runStart>=oraSet->versDate[0] && runStart<=oraSet->versDate[1])
      return contVers;
  oraSet->clearVersDate();
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int context;
    struct {
      int pos[START_MAXMODS];
      int vers[START_MAXMODS];
      double since[START_MAXMODS];
      double until[START_MAXMODS];
    } parvers;
  /* EXEC SQL END DECLARE SECTION; */ 

  context=oraSet->contextId;
  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("getVersion(HParOraSet*,Int_t)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  const Char_t* containerClass=pPar->IsA()->GetName();
  if (strcmp(containerClass,"HStartCalPar")==0) {
    /* EXEC SQL SELECT module_pos, version,
                    hdate.to_ansitime(valid_since),
                    hdate.to_ansitime(valid_until)
             INTO :parvers
             FROM start_ana.start_calpar_vers_at_date
             WHERE context_id = :context; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 6;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "select module_pos ,version ,hdate.to_ansitime(valid_since\
) ,hdate.to_ansitime(valid_until) into :s1 ,:s2 ,:s3 ,:s4   from start_ana.sta\
rt_calpar_vers_at_date where context_id=:b1";
    sqlstm.iters = (unsigned int  )10;
    sqlstm.offset = (unsigned int  )105;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)parvers.pos;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)parvers.vers;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)parvers.since;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)parvers.until;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[3] = (         int  )sizeof(double);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)&context;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[4] = (         int  )sizeof(int);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("getVersion(HParOraSet*,Int_t)");
}


  } else if (strcmp(containerClass,"HStartSelfCoPar")==0) {
    /* EXEC SQL SELECT module_pos, version,
                    hdate.to_ansitime(valid_since),
                    hdate.to_ansitime(valid_until)
             INTO :parvers
             FROM start_ana.start_selfcopar_vers_at_date
             WHERE context_id = :context; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 6;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "select module_pos ,version ,hdate.to_ansitime(valid_since\
) ,hdate.to_ansitime(valid_until) into :s1 ,:s2 ,:s3 ,:s4   from start_ana.sta\
rt_selfcopar_vers_at_date where context_id=:b1";
    sqlstm.iters = (unsigned int  )10;
    sqlstm.offset = (unsigned int  )140;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)parvers.pos;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)parvers.vers;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)parvers.since;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)parvers.until;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[3] = (         int  )sizeof(double);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)&context;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[4] = (         int  )sizeof(int);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("getVersion(HParOraSet*,Int_t)");
}


  }
  else if (strcmp(containerClass,"HStartLookup")==0) {
    /* EXEC SQL SELECT module_pos, version,
                    hdate.to_ansitime(valid_since),
                    hdate.to_ansitime(valid_until)
             INTO :parvers
             FROM start_ana.start_lookuptable_vers_at_date
             WHERE context_id = :context; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 6;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "select module_pos ,version ,hdate.to_ansitime(valid_since\
) ,hdate.to_ansitime(valid_until) into :s1 ,:s2 ,:s3 ,:s4   from start_ana.sta\
rt_lookuptable_vers_at_date where context_id=:b1";
    sqlstm.iters = (unsigned int  )10;
    sqlstm.offset = (unsigned int  )175;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)parvers.pos;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)parvers.vers;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)parvers.since;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)parvers.until;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[3] = (         int  )sizeof(double);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)&context;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[4] = (         int  )sizeof(int);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) showSqlError("getVersion(HParOraSet*,Int_t)");
}


  }
  for(Int_t i=0;i<sqlca.sqlerrd[2];i++) {
    Int_t m=parvers.pos[i];
    if (startIds->At(m)>0) {
      versions[m]=parvers.vers[i];
      if (parvers.since[i]>oraSet->versDate[0]) oraSet->versDate[0]=parvers.since[i];
      if (parvers.until[i]<oraSet->versDate[1]) oraSet->versDate[1]=parvers.until[i];
    }
  }
  if (oraSet->versDate[0]>=0) return getActRunId();
  return -1;
};


Bool_t HStartParOraIo::read(HStartCalPar* pPar, Int_t* set) {
  // reads the calibration parameters and fill the StartCalPar container
  Int_t contVers=pPar->getInputVersion(inputNumber);
  Int_t versions[START_MAXMODS];
  Int_t version=getVersion(pPar,set,versions);
  Float_t pVal[7]={-1,-1,-1,-1,-1,-1,-1};
  if (version==-1) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;
  }
  if (contVers==version) return kTRUE;
  if (inputNumber==1) pPar->clear();
  pPar->setInputVersion(version,inputNumber);
  initModules->Reset();
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int modPos;
    int vers;
    struct {
      int strip[START_MAXSTRIPS];
      float slo[START_MAXSTRIPS];
      float ofs[START_MAXSTRIPS];
      float sloR[START_MAXSTRIPS];
      float sloL[START_MAXSTRIPS];
      float sloM[START_MAXSTRIPS];
      float vGr[START_MAXSTRIPS];
      float pOfs[START_MAXSTRIPS];
    } cal;
    struct {
      short strip[START_MAXSTRIPS];
      short slo[START_MAXSTRIPS];
      short ofs[START_MAXSTRIPS];
      short sloR[START_MAXSTRIPS];
      short sloL[START_MAXSTRIPS];
      short sloM[START_MAXSTRIPS];
      short vGr[START_MAXSTRIPS];
      short pOfs[START_MAXSTRIPS];
    } cal_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("read(HStartCalPar*,Int_t*)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  /* EXEC SQL DECLARE cal_cur CURSOR FOR
           SELECT strip, slope, offset,
                  slope_r,slope_l,slope_m,v_group,p_offset
             FROM start_ana.start_calpar_data
             WHERE module_pos = :modPos AND version = :vers; */ 

  for(Int_t m=0;m<maxModules;m++) {
    if (set[m] && startIds->At(m)>0 && versions[m]>0) {
      modPos=m;
      vers=versions[m];
      /* EXEC SQL OPEN cal_cur; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 6;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = sq0006;
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )210;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqcmod = (unsigned int )0;
      sqlstm.sqhstv[0] = (         void  *)&modPos;
      sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)&vers;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode < 0) showSqlError("read(HStartCalPar*,Int_t*)");
}


      /* EXEC SQL FETCH cal_cur INTO :cal INDICATOR :cal_Ind; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 8;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.iters = (unsigned int  )300;
      sqlstm.offset = (unsigned int  )233;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqfoff = (           int )0;
      sqlstm.sqfmod = (unsigned int )2;
      sqlstm.sqhstv[0] = (         void  *)cal.strip;
      sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[0] = (         int  )sizeof(int);
      sqlstm.sqindv[0] = (         void  *)cal_Ind.strip;
      sqlstm.sqinds[0] = (         int  )sizeof(short);
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqharc[0] = (unsigned int   *)0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)cal.slo;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[1] = (         int  )sizeof(float);
      sqlstm.sqindv[1] = (         void  *)cal_Ind.slo;
      sqlstm.sqinds[1] = (         int  )sizeof(short);
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqharc[1] = (unsigned int   *)0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqhstv[2] = (         void  *)cal.ofs;
      sqlstm.sqhstl[2] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[2] = (         int  )sizeof(float);
      sqlstm.sqindv[2] = (         void  *)cal_Ind.ofs;
      sqlstm.sqinds[2] = (         int  )sizeof(short);
      sqlstm.sqharm[2] = (unsigned int  )0;
      sqlstm.sqharc[2] = (unsigned int   *)0;
      sqlstm.sqadto[2] = (unsigned short )0;
      sqlstm.sqtdso[2] = (unsigned short )0;
      sqlstm.sqhstv[3] = (         void  *)cal.sloR;
      sqlstm.sqhstl[3] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[3] = (         int  )sizeof(float);
      sqlstm.sqindv[3] = (         void  *)cal_Ind.sloR;
      sqlstm.sqinds[3] = (         int  )sizeof(short);
      sqlstm.sqharm[3] = (unsigned int  )0;
      sqlstm.sqharc[3] = (unsigned int   *)0;
      sqlstm.sqadto[3] = (unsigned short )0;
      sqlstm.sqtdso[3] = (unsigned short )0;
      sqlstm.sqhstv[4] = (         void  *)cal.sloL;
      sqlstm.sqhstl[4] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[4] = (         int  )sizeof(float);
      sqlstm.sqindv[4] = (         void  *)cal_Ind.sloL;
      sqlstm.sqinds[4] = (         int  )sizeof(short);
      sqlstm.sqharm[4] = (unsigned int  )0;
      sqlstm.sqharc[4] = (unsigned int   *)0;
      sqlstm.sqadto[4] = (unsigned short )0;
      sqlstm.sqtdso[4] = (unsigned short )0;
      sqlstm.sqhstv[5] = (         void  *)cal.sloM;
      sqlstm.sqhstl[5] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[5] = (         int  )sizeof(float);
      sqlstm.sqindv[5] = (         void  *)cal_Ind.sloM;
      sqlstm.sqinds[5] = (         int  )sizeof(short);
      sqlstm.sqharm[5] = (unsigned int  )0;
      sqlstm.sqharc[5] = (unsigned int   *)0;
      sqlstm.sqadto[5] = (unsigned short )0;
      sqlstm.sqtdso[5] = (unsigned short )0;
      sqlstm.sqhstv[6] = (         void  *)cal.vGr;
      sqlstm.sqhstl[6] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[6] = (         int  )sizeof(float);
      sqlstm.sqindv[6] = (         void  *)cal_Ind.vGr;
      sqlstm.sqinds[6] = (         int  )sizeof(short);
      sqlstm.sqharm[6] = (unsigned int  )0;
      sqlstm.sqharc[6] = (unsigned int   *)0;
      sqlstm.sqadto[6] = (unsigned short )0;
      sqlstm.sqtdso[6] = (unsigned short )0;
      sqlstm.sqhstv[7] = (         void  *)cal.pOfs;
      sqlstm.sqhstl[7] = (unsigned int  )sizeof(float);
      sqlstm.sqhsts[7] = (         int  )sizeof(float);
      sqlstm.sqindv[7] = (         void  *)cal_Ind.pOfs;
      sqlstm.sqinds[7] = (         int  )sizeof(short);
      sqlstm.sqharm[7] = (unsigned int  )0;
      sqlstm.sqharc[7] = (unsigned int   *)0;
      sqlstm.sqadto[7] = (unsigned short )0;
      sqlstm.sqtdso[7] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode < 0) showSqlError("read(HStartCalPar*,Int_t*)");
}


      for(Int_t i=0;i<sqlca.sqlerrd[2];i++) {
        HStartCalParChan& chan=(*pPar)[m][cal.strip[i]];
        pVal[0] = cal.slo[i];
        pVal[1] = cal.ofs[i];
        pVal[2] = (cal_Ind.sloR[i]==-1)?0:cal.sloR[i];	
        pVal[3] = (cal_Ind.sloL[i]==-1)?0:cal.sloL[i];	
        pVal[4] = (cal_Ind.sloM[i]==-1)?0:cal.sloM[i];	
        pVal[5] = (cal_Ind.vGr[i] ==-1)?0:cal.vGr[i];	
        pVal[6] = (cal_Ind.pOfs[i]==-1)?0:cal.pOfs[i];	
        chan.fill(pVal);
        initModules->AddAt(m+1,m);
      }
    }
  }
  /* EXEC SQL CLOSE cal_cur; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 8;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )280;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("read(HStartCalPar*,Int_t*)");
}


  Bool_t allFound=kTRUE;
  for ( Int_t i=0;i<maxModules;i++ ) {
    if (set[i]>0) {
      if (initModules->At(i)>0) set[i]=0;
      else allFound=kFALSE;
    }
  }
  setChanged(pPar);
  printInfo(pPar->GetName());
  return allFound;
};


Bool_t HStartParOraIo::read(HStartSelfCoPar* pPar, Int_t* set) {
  // reads the selfcoincidence parameters and fill the StartSelfCoPar container
  Int_t contVers=pPar->getInputVersion(inputNumber);
  Int_t versions[START_MAXMODS];
  Int_t s[2]={0,0};
  s[0]=set[0];   // only Start module
  Int_t version=getVersion(pPar,s,versions);
  if (version==-1) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;
  }
  if (contVers==version) return kTRUE;
  pPar->clear();
  pPar->setInputVersion(version,inputNumber);
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int vers;
    struct {
      int strip[START_MAXSTRIPS];
      float ti[START_MAXSTRIPS];
      float hw[START_MAXSTRIPS];
    } sco;
    struct {
      short strip[START_MAXSTRIPS];
      short ti[START_MAXSTRIPS];
      short hw[START_MAXSTRIPS];
    } sco_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO error_found; */ 

  if (set[0] && startIds->At(0)>0 && versions[0]>0) {
    vers=versions[0];
    // cout<<"SelfCoPar:   Version: "<<vers<<endl;
    /* EXEC SQL SELECT strip, time, halfwidth INTO :sco INDICATOR :sco_Ind
             FROM start_ana.start_selfcopar_data
             WHERE module_pos = 0 AND version = :vers; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 8;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "select strip , time  ,halfwidth into :s1:s2 ,:s3:s4 ,:s5:\
s6   from start_ana.start_selfcopar_data where (module_pos=0 and version=:b2)";
    sqlstm.iters = (unsigned int  )300;
    sqlstm.offset = (unsigned int  )295;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)sco.strip;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)sco_Ind.strip;
    sqlstm.sqinds[0] = (         int  )sizeof(short);
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)sco.ti;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[1] = (         int  )sizeof(float);
    sqlstm.sqindv[1] = (         void  *)sco_Ind.ti;
    sqlstm.sqinds[1] = (         int  )sizeof(short);
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)sco.hw;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[2] = (         int  )sizeof(float);
    sqlstm.sqindv[2] = (         void  *)sco_Ind.hw;
    sqlstm.sqinds[2] = (         int  )sizeof(short);
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)&vers;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) goto error_found;
}


    for(Int_t i=0;i<sqlca.sqlerrd[2];i++) {
      HStartSelfCoParChan& chan=(*pPar)[0][sco.strip[i]];
      chan.fill(sco.ti[i],sco.hw[i]);
    }
    if (sqlca.sqlerrd[2]>0) {
      setChanged(pPar);
      cout<<pPar->GetName()<<" initialized from Oracle\n";
      return kTRUE;
    }
  }
  return kFALSE;
error_found:
  showSqlError("read(HStartCalPar*,Int_t*)");
  return kFALSE;
}

  
Bool_t HStartParOraIo::read(HStartGeomPar* pPar, Int_t* set) {
  // reads the geometry of the START and fills the StartGeomPar container
  Bool_t allFound=kTRUE;
  Int_t detId=-1;
  if (!geomVers) {
    detId=getDetectorId(pPar->getDetectorName());
    geomVers=new HGeomOraDetVersion(pPar->getDetectorName(),detId);
  } else {
    detId=geomVers->getDetectorId();
  }
  if (detId<=0) {
    allFound=kFALSE;
    delete geomVers;
    geomVers=0;
  }
  if (detId>0&&pPar->isFirstInitialization()) {
    if (!readModGeomNames(pPar,set) || !readCompGeomNames(pPar,set)) {
      allFound=kFALSE;
      pPar->clear();
    } else addGeomOraSet(pPar);
  }  
  if (allFound) allFound=readDetectorGeometry(pPar,set,geomVers);
  return allFound;    
}


Bool_t HStartParOraIo::readModGeomNames(HStartGeomPar* pPar,Int_t* set) {
  // reads the geometry object names of all modules
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    struct {
      int pos[START_MAXMODS];
      /* varchar oname[START_MAXMODS][9]; */ 
struct { unsigned short len; unsigned char arr[10]; } oname[10];

    } mods;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("readModGeomNames"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  /* EXEC SQL SELECT module_pos, geom_obj_name
           INTO :mods
           FROM start_ana.det_setup_at_run_hist; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 8;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select module_pos ,geom_obj_name into :s1 ,:s2   from start\
_ana.det_setup_at_run_hist ";
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )326;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)mods.pos;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )sizeof(int);
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqharc[0] = (unsigned int   *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)mods.oname;
  sqlstm.sqhstl[1] = (unsigned int  )11;
  sqlstm.sqhsts[1] = (         int  )12;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqharc[1] = (unsigned int   *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("readModGeomNames");
}


  Int_t nMods=sqlca.sqlerrd[2]; // number of rows returned by select
  Bool_t allFound=kTRUE;
  if (nMods>0) {
    initModules->Reset();
    Int_t m;
    for(Int_t i=0;i<nMods;i++) {
      m=mods.pos[i];
      HModGeomPar* pMod=pPar->getModule(-1,m);
      if (set[m] && pMod && startIds->At(m)>0) {
        mods.oname[i].arr[mods.oname[i].len]='\0';
        pMod->SetName((Char_t*)(mods.oname[i].arr));
        initModules->AddAt(m+1,m);
        pMod->setRefName(pMod->GetName());
        Int_t mr=pPar->getModNumInMod(pMod->GetName());
        HGeomCompositeVolume* refMod=pPar->getRefVolume(mr);
        if (refMod==0) {
          refMod=new HGeomCompositeVolume(pPar->getNumComponents());
          refMod->SetName(pMod->GetName());
          pPar->addRefVolume(refMod,mr);
        }
        pMod->setVolume(refMod);
      }
    }
    for(Int_t i=0;i<maxModules;i++) {
      if (set[i]>0 && initModules->At(i)==0) allFound=kFALSE;
    }
  } else allFound=kFALSE;
  return allFound;
}


Bool_t HStartParOraIo::readCompGeomNames(HStartGeomPar* pPar,Int_t* set) {
  // reads the geometry object names of all modules and the geometry version
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    struct {
      int pos[START_MAXSTRIPS];
      int strip[START_MAXSTRIPS];
      /* varchar oname[START_MAXSTRIPS][9]; */ 
struct { unsigned short len; unsigned char arr[10]; } oname[300];

    } strips;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("readCompGeomNames"); */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  /* EXEC SQL SELECT module_pos, strip_no, geom_obj_name
           INTO :strips
           FROM start_ana.det_strip; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 8;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select module_pos ,strip_no ,geom_obj_name into :s1 ,:s2 ,:\
s3   from start_ana.det_strip ";
  sqlstm.iters = (unsigned int  )300;
  sqlstm.offset = (unsigned int  )349;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)strips.pos;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )sizeof(int);
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqharc[0] = (unsigned int   *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)strips.strip;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )sizeof(int);
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqharc[1] = (unsigned int   *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)strips.oname;
  sqlstm.sqhstl[2] = (unsigned int  )11;
  sqlstm.sqhsts[2] = (         int  )12;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqharc[2] = (unsigned int   *)0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("readCompGeomNames");
}


  Int_t nStrips=sqlca.sqlerrd[2]; // number of rows returned by select
  Int_t m;
  for(Int_t i=0;i<nStrips;i++) {
    m=strips.pos[i];
    HModGeomPar* pMod=pPar->getModule(-1,m);
    if (set[m] && pMod) {
      HGeomCompositeVolume* pRefMod=pMod->getRefVolume();
      HGeomVolume* volu=pRefMod->getComponent(strips.strip[i]);
      strips.oname[i].arr[strips.oname[i].len]='\0';
      volu->SetName((Char_t*)(strips.oname[i].arr));
      initModules->AddAt(m+1,m);
    }
  }
  Bool_t allFound=kTRUE;
  for(Int_t i=0;i<maxModules;i++) {
    if (set[i]>0 && initModules->At(i)==0) allFound=kFALSE;
  }
  return allFound;
};


Int_t HStartParOraIo::writePar(HStartCalPar* pPar) {
  // creates a new version and writes the calibration parameters to Oracle
  Int_t version=createVers(pPar);
  if (version==-1) return -1;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int pos[START_MAXSTRIPS];
    int strip[START_MAXSTRIPS];
    int vers[START_MAXSTRIPS];
    float slo[START_MAXSTRIPS];
    float ofs[START_MAXSTRIPS];
    float sloR[START_MAXSTRIPS];
    float sloL[START_MAXSTRIPS];
    float sloM[START_MAXSTRIPS];
    float vGr[START_MAXSTRIPS];
    float pOfs[START_MAXSTRIPS];

    int rows_to_insert;
  /* EXEC SQL END DECLARE SECTION; */ 

  for(Int_t m=0; m<pPar->getSize(); m++) {
    HStartCalParMod& rMod= (*pPar)[m];
    Int_t nChan=0;
    Int_t nModSize=0;
    //////////////////////////////////////// 
    // For 2 types of Start Det.
    // Diamond: 8 Strips, modules: 0,1,2 (HI exp.)
    // Fiber: 32 channels, modules: 3,4,5 (Sep03,Jan04)
    ////////////////////////////////////////
    if (startIds->At(m)>0) {
      switch (m) {
        case 0:
        case 1:
        case 2: 
          nModSize=8;
          break;
        default:
          nModSize=rMod.getSize();
          break;
      } 
      //printf("Module %d size %d \n",m,nModSize); 
      for(Int_t c=0; c<nModSize; c++) {
        HStartCalParChan& chan= rMod[c];
        pos[nChan]=m;
        strip[nChan]=c;
        vers[nChan]=version;
        slo[nChan]=chan.getSlope();
        ofs[nChan]=chan.getOffset();
        sloR[nChan]=chan.getSlopeR();
        sloL[nChan]=chan.getSlopeL();
        sloM[nChan]=chan.getSlopeM();
        vGr[nChan]=chan.getVGroup();
        pOfs[nChan]=chan.getPosOffset();
        nChan++;
      }
    }
    if (nChan==0) continue;
    rows_to_insert=nChan;
    if (nChan != startIds->At(m)) {
      Error("writePar(HStartCalPar*)",
            "\n Number of strips in Oracle:       %i"
            " \n Number of channels in StartCalPar: %i\n",
            startIds->At(m),nChan);
      rollback();
      return -1;
    }
    /* EXEC SQL WHENEVER SQLERROR GOTO not_found; */ 

    /* EXEC SQL WHENEVER NOT FOUND GOTO not_found; */ 

    /* EXEC SQL FOR :rows_to_insert
      INSERT INTO start_ana.calpar_data
          (strip_id, vers_id, slope, offset,slope_r,slope_l,slope_m,v_group,p_offset)
          VALUES (start_ana.start_par_query.get_strip_id(:pos,:strip),
                  :vers, :slo, :ofs, :sloR,:sloL,:sloM,:vGr,:pOfs); */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 10;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "insert into start_ana.calpar_data (strip_id,vers_id,slope\
,offset,slope_r,slope_l,slope_m,v_group,p_offset) values (start_ana.start_par_\
query.get_strip_id(:b1,:b2),:b3,:b4,:b5,:b6,:b7,:b8,:b9,:b10)";
    sqlstm.iters = (unsigned int  )rows_to_insert;
    sqlstm.offset = (unsigned int  )376;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)pos;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)strip;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)vers;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )sizeof(int);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)slo;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[3] = (         int  )sizeof(float);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)ofs;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[4] = (         int  )sizeof(float);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqharc[4] = (unsigned int   *)0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqhstv[5] = (         void  *)sloR;
    sqlstm.sqhstl[5] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[5] = (         int  )sizeof(float);
    sqlstm.sqindv[5] = (         void  *)0;
    sqlstm.sqinds[5] = (         int  )0;
    sqlstm.sqharm[5] = (unsigned int  )0;
    sqlstm.sqharc[5] = (unsigned int   *)0;
    sqlstm.sqadto[5] = (unsigned short )0;
    sqlstm.sqtdso[5] = (unsigned short )0;
    sqlstm.sqhstv[6] = (         void  *)sloL;
    sqlstm.sqhstl[6] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[6] = (         int  )sizeof(float);
    sqlstm.sqindv[6] = (         void  *)0;
    sqlstm.sqinds[6] = (         int  )0;
    sqlstm.sqharm[6] = (unsigned int  )0;
    sqlstm.sqharc[6] = (unsigned int   *)0;
    sqlstm.sqadto[6] = (unsigned short )0;
    sqlstm.sqtdso[6] = (unsigned short )0;
    sqlstm.sqhstv[7] = (         void  *)sloM;
    sqlstm.sqhstl[7] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[7] = (         int  )sizeof(float);
    sqlstm.sqindv[7] = (         void  *)0;
    sqlstm.sqinds[7] = (         int  )0;
    sqlstm.sqharm[7] = (unsigned int  )0;
    sqlstm.sqharc[7] = (unsigned int   *)0;
    sqlstm.sqadto[7] = (unsigned short )0;
    sqlstm.sqtdso[7] = (unsigned short )0;
    sqlstm.sqhstv[8] = (         void  *)vGr;
    sqlstm.sqhstl[8] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[8] = (         int  )sizeof(float);
    sqlstm.sqindv[8] = (         void  *)0;
    sqlstm.sqinds[8] = (         int  )0;
    sqlstm.sqharm[8] = (unsigned int  )0;
    sqlstm.sqharc[8] = (unsigned int   *)0;
    sqlstm.sqadto[8] = (unsigned short )0;
    sqlstm.sqtdso[8] = (unsigned short )0;
    sqlstm.sqhstv[9] = (         void  *)pOfs;
    sqlstm.sqhstl[9] = (unsigned int  )sizeof(float);
    sqlstm.sqhsts[9] = (         int  )sizeof(float);
    sqlstm.sqindv[9] = (         void  *)0;
    sqlstm.sqinds[9] = (         int  )0;
    sqlstm.sqharm[9] = (unsigned int  )0;
    sqlstm.sqharc[9] = (unsigned int   *)0;
    sqlstm.sqadto[9] = (unsigned short )0;
    sqlstm.sqtdso[9] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode == 1403) goto not_found;
    if (sqlca.sqlcode < 0) goto not_found;
}


      //cout<<"module_pos: "<<m<<"    "<<rows_to_insert<<" rows inserted\n";
  }
  commit();
  pPar->setChanged(kFALSE);
  return version;
not_found:
  showSqlError("writePar(HStartCalPar*)");
  rollback();
  pPar->setChanged(kFALSE);
  return -1;
}


Int_t HStartParOraIo::writePar(HStartSelfCoPar* pPar) {
  // creates a new version and writes the calibration parameters to Oracle
  Int_t version=createVers(pPar);
  if (version==-1) return -1;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int pos[START_MAXSTRIPS];
    int strip[START_MAXSTRIPS];
    int vers[START_MAXSTRIPS];
    float ti[START_MAXSTRIPS];
    float hw[START_MAXSTRIPS];
    int rows_to_insert;
  /* EXEC SQL END DECLARE SECTION; */ 

  HStartSelfCoParMod& rMod= (*pPar)[0];
  Int_t nChan=0;
  if (startIds->At(0)>0) {  
    for(Int_t c=0; c<rMod.getSize(); c++) {
      HStartSelfCoParChan& chan= rMod[c];
      pos[nChan]=0;
      strip[nChan]=c;
      vers[nChan]=version;
      ti[nChan]=chan.getTime();
      hw[nChan]=chan.getHalfWidth();
      if(chan.getHalfWidth()!=0 ) { //not default values
        nChan++;
      }
    }
  }
  if (nChan==0) {
    rollback();
    pPar->setChanged(kFALSE);
    return -1;
  }
  rows_to_insert=nChan;
  if (nChan != startIds->At(0)) {
    Error("writePar(HStartSelfCoPar*)",
          "\n Number of strips in Oracle:       %i"
          " \n Number of channels in StartSelfCoPar: %i\n",
          startIds->At(0),nChan);
    rollback();
    return -1;
  }
  /* EXEC SQL WHENEVER SQLERROR GOTO not_found; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO not_found; */ 

  /* EXEC SQL FOR :rows_to_insert
    INSERT INTO start_ana.selfcopar_data (strip_id, vers_id, time, halfwidth)
        VALUES (start_ana.start_par_query.get_strip_id(:pos,:strip),
                :vers, :ti, :hw); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 10;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "insert into start_ana.selfcopar_data (strip_id,vers_id, tim\
e ,halfwidth) values (start_ana.start_par_query.get_strip_id(:b1,:b2),:b3,:b4,\
:b5)";
  sqlstm.iters = (unsigned int  )rows_to_insert;
  sqlstm.offset = (unsigned int  )431;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)pos;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )sizeof(int);
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqharc[0] = (unsigned int   *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)strip;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )sizeof(int);
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqharc[1] = (unsigned int   *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)vers;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )sizeof(int);
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqharc[2] = (unsigned int   *)0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (         void  *)ti;
  sqlstm.sqhstl[3] = (unsigned int  )sizeof(float);
  sqlstm.sqhsts[3] = (         int  )sizeof(float);
  sqlstm.sqindv[3] = (         void  *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned int  )0;
  sqlstm.sqharc[3] = (unsigned int   *)0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (         void  *)hw;
  sqlstm.sqhstl[4] = (unsigned int  )sizeof(float);
  sqlstm.sqhsts[4] = (         int  )sizeof(float);
  sqlstm.sqindv[4] = (         void  *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[4] = (unsigned int  )0;
  sqlstm.sqharc[4] = (unsigned int   *)0;
  sqlstm.sqadto[4] = (unsigned short )0;
  sqlstm.sqtdso[4] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto not_found;
  if (sqlca.sqlcode < 0) goto not_found;
}


  cout<<"Start module:    "<<rows_to_insert<<" rows inserted\n";
  commit();
  pPar->setChanged(kFALSE);
  return version;
not_found:
  showSqlError("writePar(HStartSelfCoPar*)");
  rollback();
  pPar->setChanged(kFALSE);
  return -1;
}

Int_t HStartParOraIo::writePar(HStartLookup* pPar) {
  // creates a new version and writes the calibration parameters to Oracle
  Int_t version=createVers(pPar);
  if (version==-1) return -1;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int rows_to_insert;
    int vers[START_MAXSTRIPS];
    int cr[START_MAXSTRIPS];
    int sl[START_MAXSTRIPS];
    int ch[START_MAXSTRIPS];
    int mo[START_MAXSTRIPS];
    int st[START_MAXSTRIPS];
    char tp[START_MAXSTRIPS][2];
  /* EXEC SQL END DECLARE SECTION; */ 

  Int_t nTdc=pPar->getSize();
  Int_t nChan=0, module;
  Int_t nChanTmp[START_MAXMODS];
  for(Int_t n=0;n<START_MAXMODS;n++) {
    nChanTmp[n]=0;
  }
  for(Int_t i=0;i<nTdc;i++) {
    HStartLookupTdc& tdc=(*pPar)[i];
    for(Int_t j=0;j<tdc.getSize();j++) {
      HStartLookupChan& chan=tdc[j];
      module=chan.getModule();
      if (module>=0) {
        vers[nChan]=version;
        cr[nChan]=tdc.getCrate();
        sl[nChan]=tdc.getSlot();
        ch[nChan]=j;
        mo[nChan]=module+1;
        st[nChan]=chan.getStrip();
        tp[nChan][0]=chan.getType();
        tp[nChan][1]='\0';
        nChan++;
        nChanTmp[module]++;
      }
    }
  } 
  if (nChan==0) {
    version=-1;
  } else {
    for(Int_t n=0;n<START_MAXMODS;n++) {
      if (nChanTmp[n] != startIds->At(n)) {
        version=-1;
        Info("writePar(HStartLookup*)",
             "\n Check your setup or params!!!"	
             "\n Number of strips in Oracle for module %i:       %i "
             "\n Number of channels in StartLookupPar: %i\n",
             n,startIds->At(n),nChanTmp[n]);
      }
    }
  }
  if (version==-1) {
    pPar->setChanged(kFALSE); 
    return -1;
  }
  rows_to_insert=nChan;
  /* EXEC SQL WHENEVER SQLERROR GOTO not_found; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO not_found; */ 

  /* EXEC SQL FOR :rows_to_insert
    INSERT INTO start_ana.START_LOOKUPTABLE_DATA 
        (vers_id,crate, slot, channel, module, strip, type_info)
        VALUES (:vers,:cr,:sl,:ch,:mo,:st,:tp); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 10;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "insert into start_ana.START_LOOKUPTABLE_DATA (vers_id,crate\
,slot,channel,module,strip,type_info) values (:b1,:b2,:b3,:b4,:b5,:b6,:b7)";
  sqlstm.iters = (unsigned int  )rows_to_insert;
  sqlstm.offset = (unsigned int  )466;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)vers;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )sizeof(int);
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqharc[0] = (unsigned int   *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)cr;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )sizeof(int);
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqharc[1] = (unsigned int   *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)sl;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )sizeof(int);
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqharc[2] = (unsigned int   *)0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (         void  *)ch;
  sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[3] = (         int  )sizeof(int);
  sqlstm.sqindv[3] = (         void  *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned int  )0;
  sqlstm.sqharc[3] = (unsigned int   *)0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (         void  *)mo;
  sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[4] = (         int  )sizeof(int);
  sqlstm.sqindv[4] = (         void  *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[4] = (unsigned int  )0;
  sqlstm.sqharc[4] = (unsigned int   *)0;
  sqlstm.sqadto[4] = (unsigned short )0;
  sqlstm.sqtdso[4] = (unsigned short )0;
  sqlstm.sqhstv[5] = (         void  *)st;
  sqlstm.sqhstl[5] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[5] = (         int  )sizeof(int);
  sqlstm.sqindv[5] = (         void  *)0;
  sqlstm.sqinds[5] = (         int  )0;
  sqlstm.sqharm[5] = (unsigned int  )0;
  sqlstm.sqharc[5] = (unsigned int   *)0;
  sqlstm.sqadto[5] = (unsigned short )0;
  sqlstm.sqtdso[5] = (unsigned short )0;
  sqlstm.sqhstv[6] = (         void  *)tp;
  sqlstm.sqhstl[6] = (unsigned int  )2;
  sqlstm.sqhsts[6] = (         int  )2;
  sqlstm.sqindv[6] = (         void  *)0;
  sqlstm.sqinds[6] = (         int  )0;
  sqlstm.sqharm[6] = (unsigned int  )0;
  sqlstm.sqharc[6] = (unsigned int   *)0;
  sqlstm.sqadto[6] = (unsigned short )0;
  sqlstm.sqtdso[6] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto not_found;
  if (sqlca.sqlcode < 0) goto not_found;
}


  cout<<"Start Lookup table:    "<<rows_to_insert<<" rows inserted\n";
  commit();
  pPar->setChanged(kFALSE);
  return version;
not_found:
  showSqlError("writePar(HStartLookup*)");
  rollback();
  pPar->setChanged(kFALSE);
  return -1;
}


Int_t HStartParOraIo::createVers(HParSet* pPar) {
  // creates a new version for the calibration or selfcoincidence parameters
  // return the new version
  cout<<"---------------  "<<pPar->GetName()<<"   ---------------\n";
  if (strlen(pPar->getAuthor())==0) {
    Error("createVers(HParSet*)",
          "author of parameters not defined");
    return -1;
  }
  if (strlen(pPar->getDescription())==0) {
    Error("createVers(HParSet*)",
          "descriction of parameters not defined");
    return -1;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int   vers=-1;
    int   context=-1;
    int   run;
    char* creator;
    char* descript;
  /* EXEC SQL END DECLARE SECTION; */ 

  context = getContextId(pPar->IsA()->GetName(),pPar->getParamContext());
  if (context==-1) return -1;
  run=getActRunId();
  creator=(Char_t*)pPar->getAuthor();
  descript=(Char_t*)pPar->getDescription();
  /* EXEC SQL WHENEVER SQLERROR GOTO not_found; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO not_found; */ 

  const Char_t* contName=pPar->IsA()->GetName();
  if (strcmp(contName,"HStartCalPar")==0) {
    /* EXEC SQL EXECUTE
      BEGIN
        SELECT start_ana.start_par_query.next_version INTO :vers FROM DUAL;
        INSERT INTO start_ana.calpar_vers
                   (vers_id, orig_context_id, run_id, author, description)
            VALUES (:vers, :context, :run, :creator, :descript);
      END;
    END-EXEC; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 10;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "begin SELECT start_ana . start_par_query . next_version I\
NTO :vers FROM DUAL ; INSERT INTO start_ana . calpar_vers ( vers_id , orig_con\
text_id , run_id , author , description ) VALUES ( :vers , :context , :run , :\
creator , :descript ) ; END ;";
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )509;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)&vers;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )0;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)&context;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )0;
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)&run;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )0;
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)creator;
    sqlstm.sqhstl[3] = (unsigned int  )0;
    sqlstm.sqhsts[3] = (         int  )0;
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)descript;
    sqlstm.sqhstl[4] = (unsigned int  )0;
    sqlstm.sqhsts[4] = (         int  )0;
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode == 1403) goto not_found;
    if (sqlca.sqlcode < 0) goto not_found;
}


  } else if (strcmp(contName,"HStartSelfCoPar")==0) {
    /* EXEC SQL EXECUTE
      BEGIN
        SELECT start_ana.start_par_query.next_version INTO :vers FROM DUAL;
        INSERT INTO start_ana.selfcopar_vers
            (vers_id, orig_context_id, run_id, author, description)
            VALUES (:vers, :context, :run, :creator, :descript);
        END;
      END-EXEC; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 10;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "begin SELECT start_ana . start_par_query . next_version I\
NTO :vers FROM DUAL ; INSERT INTO start_ana . selfcopar_vers ( vers_id , orig_\
context_id , run_id , author , description ) VALUES ( :vers , :context , :run \
, :creator , :descript ) ; END ;";
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )544;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)&vers;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )0;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)&context;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )0;
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)&run;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )0;
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)creator;
    sqlstm.sqhstl[3] = (unsigned int  )0;
    sqlstm.sqhsts[3] = (         int  )0;
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)descript;
    sqlstm.sqhstl[4] = (unsigned int  )0;
    sqlstm.sqhsts[4] = (         int  )0;
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode == 1403) goto not_found;
    if (sqlca.sqlcode < 0) goto not_found;
}


  } else if (strcmp(contName,"HStartLookup")==0) {
    /* EXEC SQL EXECUTE
      BEGIN
        SELECT start_ana.start_par_query.next_version INTO :vers FROM DUAL;
        INSERT INTO start_ana.START_LOOKUPTABLE_VERS
                   (vers_id, orig_context_id, run_id, author, description)
            VALUES (:vers, :context, :run, :creator, :descript);
      END;
    END-EXEC; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 10;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.stmt = "begin SELECT start_ana . start_par_query . next_version I\
NTO :vers FROM DUAL ; INSERT INTO start_ana . START_LOOKUPTABLE_VERS ( vers_id\
 , orig_context_id , run_id , author , description ) VALUES ( :vers , :context\
 , :run , :creator , :descript ) ; END ;";
    sqlstm.iters = (unsigned int  )1;
    sqlstm.offset = (unsigned int  )579;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)&vers;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )0;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)&context;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )0;
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)&run;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )0;
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)creator;
    sqlstm.sqhstl[3] = (unsigned int  )0;
    sqlstm.sqhsts[3] = (         int  )0;
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)descript;
    sqlstm.sqhstl[4] = (unsigned int  )0;
    sqlstm.sqhsts[4] = (         int  )0;
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode == 1403) goto not_found;
    if (sqlca.sqlcode < 0) goto not_found;
}


  }
  cout<<"Oracle version for "<<pPar->GetName()<<" created:  "<<vers<<endl;
  return vers;
not_found:
  cout<<"Oracle version for "<<pPar->GetName()<<" created:  "<<vers<<endl;
  showSqlError("createVers(HParSet*)");
  return vers;
}


void HStartParOraIo::printInfo(const Char_t* contName) {
  // prints the modules initialized from Oracle
  // will later go to the log file
  Bool_t first=kTRUE;
  for(Int_t i=0;i<maxModules;i++) {
    if (initModules->At(i)) {
      if (first) {
        cout<<contName<<": module(s) initialized from Oracle: ";
        first=kFALSE;
      }
      cout<<(initModules->At(i)-1)<<" ";
    }
  }
  cout<<'\n';
}

Last change: Sat May 22 13:14:51 2010
Last generated: 2010-05-22 13:14

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.