ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Last modified : 03/06/2009 by Ilse Koenig

#include "hparamlist.h"
#include "TClass.h"
#include "TStreamerInfo.h"
#include "RVersion.h"
#include "TBuffer.h"

#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
   #include "TBufferFile.h"
#endif

#include <iostream>
#include <iomanip>

using namespace std;

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////////////////////////////////
//
//  HParamObj
//
//  Class for parameters stored in binary format in Oracle and used as list
//  elements in HParamList::paramList.
//
//  The overloaded constructors and fill-functions accept single values or arrays of type
//    UChar_t, Int_t, UInt_t, Float_t, Double_t, char_t, Text_t.
//  The arguments for arrays are
//      the name of the parameter
//      the pointer to the array
//      the length of the array
//  The data are automatically converted to an UChar_t array. 
//  For classes also the class version is stored, for ROOT classes also the TStreamerInfo.
//
//  The input and output data format of UInt_t variables or arrays is HEX format
//    with leadings zeros, for example 0x0000ffff.
//
//  -------------------------------------------------------------------------------------
//
//  HParamList
//
//  Class for the generic Oracle and ASCII interface for parameter containers
//  derived from HParCond
//
//  The class contains a list to stores objects of type HParamObj
//  The list objects store the name, the value, the parameter type and some
//  additional information depending for the object type.  
//    
//  All add/addObject functions add an initialized parameter to the list for
//  writing. The functions create a new list element and copy the data into
//  this object.
//  Add functions:
//    1. accepted basic types: Int_t, UInt_t, Float_t, Double_t, UChar_t
//    2. accepted ROOT arrays: TArrayI, TArrayF, TArrayD, TArrayC
//    3. accepted string: Text_t*
//       This can be any text, for example also numbers in hexadecimal or
//       scientific format. The number of characters must be specified (default 1). 
//  AddObject function:
//    Accepts classes derived from TObject.
//    The persistent data elements are streamed into an UChar_t array using the
//    class streamer. For ROOT classes, for example histograms, the ROOT streamer
//    info is stored in an additional binary array. 
//       
//  All fill/fillObject functions convert the data in the list element back
//  to the type of the parameter and copy them into the data element in the
//  initialization process.
//    1. Single parameters of basic type:
//       The functions return kFALSE, if the parameter is not in the list.
//    2. Arrays:
//      a) If the array size is specified (return code Bool_t), the functions return
//         kFALSE, if the number of data elements in the list objects is not the same.
//      b) If the array size is not specified (return code Int_t), the array is
//         recreated with the size of the number of data elements in the list object.
//         The functions return the number of data elements or 0, if the parameter
//         was not found.
//    3. Classes:  
//       The class version is checked and a warning printed, if it is not identical
//       with the current version (typically class version of list object higher than
//       version in the actual parameter container). The class streamer takes care
//       for backward compatibility. A warning is printed, if the ROOT version is
//       different from the current version.
//       The function returns the number of bytes in the list object or 0, if the
//       parameter was not found in the list. 
//
//////////////////////////////////////////////////////////////////////////////////////


ClassImp(HParamObj)
ClassImp(HParamList)
 
HParamObj::HParamObj(const Text_t* name) {
  // Default constructor with parameter type "UChar_t"
  SetName(name);
  paramValue=0;
  arraySize=0;
  paramType="UChar_t";
  basicType=kFALSE;
  bytesPerValue=1;
  classVersion=-1;
  streamerInfo=0;
  streamerInfoSize=0;
}

HParamObj::HParamObj(HParamObj& o):TNamed(o) {
  // Copy constructor
  SetName(o.GetName());
  arraySize=o.getLength();
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,o.getParamValue(),arraySize);
  paramType=o.getParamType();
  if (o.isBasicType()) basicType=kTRUE;
  else basicType=kFALSE;
  bytesPerValue=o.getBytesPerValue();
  classVersion=o.getClassVersion();
  streamerInfoSize=o.getStreamerInfoSize();
  if (streamerInfoSize>0) {
    memcpy(streamerInfo,o.getStreamerInfo(),streamerInfoSize);
  }
}

HParamObj::HParamObj(const Text_t* name,Int_t value) {
  // Constructor for an Int_t value
  SetName(name);
  setParamType("Int_t");
  arraySize=bytesPerValue;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,&value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,UInt_t value) {
  // Constructor for an UInt_t value
  SetName(name);
  setParamType("UInt_t");
  arraySize=bytesPerValue;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,&value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,Float_t value) {
  // Constructor for a Float_t value
  SetName(name);
  setParamType("Float_t");
  arraySize=bytesPerValue;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,&value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,Double_t value) {
  // Constructor for a Double_t value
  SetName(name);
  setParamType("Double_t");
  arraySize=bytesPerValue;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,&value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const Int_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type Int_t
  SetName(name);
  setParamType("Int_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const UInt_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type UInt_t
  SetName(name);
  setParamType("UInt_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const Float_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type Float_t
  SetName(name);
  setParamType("Float_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const Double_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type Double_t
  SetName(name);
  setParamType("Double_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const Text_t* value) {
  // Constructor for a string value
  SetName(name);
  setParamType("Text_t");
  arraySize=strlen(value);
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const Char_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type Char_t
  SetName(name);
  setParamType("Char_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::HParamObj(const Text_t* name,const UChar_t* value,const Int_t nValues) {
  // Constructor for an array with nValues elements of type UChar_t
  SetName(name);
  setParamType("UChar_t");
  arraySize=bytesPerValue*nValues;
  paramValue=new UChar_t[arraySize];
  memcpy(paramValue,value,arraySize);
}

HParamObj::~HParamObj() {
  // Destructor
  if (paramValue) {
    delete [] paramValue;
    paramValue=0;
  }
  if (streamerInfo) {
    delete [] streamerInfo;
    streamerInfo=0;
  }
}

void HParamObj::setParamType(const Text_t* t) {
  // Sets the parameter type. Accepted type names are:
  //     UChar_t (default)
  //     Char_t
  //     Int_t
  //     Float_t
  //     Double_t
  //     Text_t
  //     class name
  paramType=t;
  if (strcmp(t,"Char_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Char_t);
  } else if (strcmp(t,"Int_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Int_t);
  } else if (strcmp(t,"UInt_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Int_t);
  } else if (strcmp(t,"Float_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Float_t);
  } else if (strcmp(t,"Double_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Double_t);
  } else if (strcmp(t,"Text_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(Char_t);
  } else if (strcmp(t,"UChar_t")==0) {
    basicType=kTRUE;
    bytesPerValue=sizeof(UChar_t);
  } else {
    basicType=kFALSE;
    bytesPerValue=1;
  }
  if (basicType==kTRUE) {
    classVersion=-1;
    streamerInfoSize=0;
    streamerInfo=0;
  }
}

UChar_t* HParamObj::setLength(Int_t l) {
  // Sets the length of the binary array
  if (paramValue) delete [] paramValue;
  arraySize=l;
  if (l>0) {
    paramValue=new UChar_t[arraySize];
  } else {
    paramValue=0;
  }
  return paramValue;
}

void HParamObj::setParamValue(UChar_t* value,const Int_t length) {
  // Sets the parameter value (the array is not copied!)
  if (paramValue) delete [] paramValue;
  arraySize=length;
  paramValue=value;
}

UChar_t* HParamObj::setStreamerInfoSize(Int_t l) {
  // Sets the length of the streamer info
  if (streamerInfo) delete [] streamerInfo;
  streamerInfoSize=l;
  if (l>0) {
    streamerInfo=new UChar_t[streamerInfoSize];
  } else {
    streamerInfo=0;
  }
  return streamerInfo;
}

void HParamObj::setStreamerInfo(UChar_t* array,const Int_t length) {
  // Sets the streamer info of ROOT classes (the array is not copied!)
  if (streamerInfo) delete [] streamerInfo;
  streamerInfoSize=length;
  streamerInfo=array;
}

Int_t HParamObj::getNumParams() {
  // Returns the number of values in the array, respectively 1 for classes and strings
  Int_t n=1;
  if (basicType) {
    n=arraySize/bytesPerValue;
  }
  return n;
}

void HParamObj::print() {
  // Prints the name and type of the parameters, respectively class name and version.
  // Prints also the numbers for an array of type Int_t, Float_t, Double_t.
  cout<<GetName()<<": ";
  if (classVersion>=0) {
    cout<<"\n  Class Type:    "<<paramType.Data()<<"\n  Class Version: "
             <<classVersion<<endl;
  } else if (strcmp(paramType,"Text_t")==0) {
    TString val((Char_t*)paramValue,arraySize);
    val.ReplaceAll("\n","\n  ");
    cout<<paramType<<"\n  "<<val.Data()<<endl;
  } else {
    Int_t nParams=getNumParams();
    if (nParams==1) {
      cout<<paramType<<"   ";    
    } else {
      cout<<paramType<<" array, nValues: "<<nParams<<"\n  ";
    }  
    if (strcmp(paramType,"Char_t")==0) {
      Char_t* val=(Char_t*)paramValue;
      printData(val,nParams);
    } else if (strcmp(paramType,"Int_t")==0) {
      Int_t* val=(Int_t*)paramValue;
      printData(val,nParams);
    } else if (strcmp(paramType,"UInt_t")==0) {
      UInt_t* val=(UInt_t*)paramValue;
      printHexData(val,nParams);
    } else if (strcmp(paramType,"Float_t")==0) {
      Float_t* val=(Float_t*)paramValue;
      printData(val,nParams);
    } else if (strcmp(paramType,"Double_t")==0) {
      Double_t* val=(Double_t*)paramValue;
      printData(val,nParams);
    } else {
      cout<<"Type: "<<paramType<<"  Array  length: "<<arraySize<<endl;
    }
  }
}

template <class type> void HParamObj::printData(type* val, Int_t nParams) {
  // template function to print data of type Char_t, Int_t, Float_t, Double_t
  Int_t i=0, k=0;
  while (k<nParams) {
    if (i==10) {
      cout<<"\n  "; 
      i=0;
    }
    cout<<val[k]<<" ";
    i++;
    k++;
    if (k>50) {
      cout<<"...";
      break;
    }
  }
  cout<<endl;
}

void HParamObj::printHexData(UInt_t* val, Int_t nParams) {
  // function to print data of type UInt_t in HEX format with leading zeros
  Int_t i=0, k=0;
  while (k<nParams) {
    if (i==10) {
      printf("\n  "); 
      i=0;
    }
    printf("0x%08x ",val[k]);
    i++;
    k++;
    if (k>50) {
      printf("...");
      break;
    }
  }
  printf("\n"); 
}

//-----------------------------------------------------------------------------------

HParamList::HParamList() {
  // Constructor
  paramList=new TList;
}

HParamList::~HParamList() {
  // Destructor
  if (paramList) {
    paramList->Delete();
    delete paramList;
    paramList=0;
  }
}

void HParamList::add(HParamObj& p) {
  // Adds a HParamObj object to the list
  paramList->Add(new HParamObj(p));
}

void HParamList::add(const Text_t* name,const Text_t* value) {
  // Adds a string parameter to the list
  // name  = name of the parameter
  // value = string value
  paramList->Add(new HParamObj(name,value));
}

void HParamList::add(const Text_t* name,const Int_t value) {
  // Adds a parameter of type Int_t to the list
  paramList->Add(new HParamObj(name,value));
}

void HParamList::add(const Text_t* name,const UInt_t value) {
  // Adds a parameter of type UInt_t to the list
  paramList->Add(new HParamObj(name,value));
}

void HParamList::add(const Text_t* name,const Float_t value) {
  // Adds a parameter of type Float_t to the list
  paramList->Add(new HParamObj(name,value));
}

void HParamList::add(const Text_t* name,const Double_t value) {
  // Adds a parameter of type Double_t to the list
  paramList->Add(new HParamObj(name,value));
}

void HParamList::add(const Text_t* name,TArrayI& value) {
  // Adds a parameter of type TArrayI to the list
  paramList->Add(new HParamObj(name,value.GetArray(),value.GetSize()));
}

void HParamList::add(const Text_t* name,TArrayC& value) {
  // Adds a parameter of type TArrayC  to the list
  paramList->Add(new HParamObj(name,value.GetArray(),value.GetSize()));
}

void HParamList::add(const Text_t* name,TArrayF& value) {
  // Adds a parameter of type TArrayF to the list
  paramList->Add(new HParamObj(name,value.GetArray(),value.GetSize()));
}

void HParamList::add(const Text_t* name,TArrayD& value) {
  // Adds a parameter of type TArrayD to the list
  paramList->Add(new HParamObj(name,value.GetArray(),value.GetSize()));
}

void HParamList::add(const Text_t* name,const UChar_t* values,const Int_t nValues) {
  // Adds a binary array of size nValues to the list
  paramList->Add(new HParamObj(name,values,nValues));
}

void HParamList::add(const Text_t* name,const Int_t* values,const Int_t nValues) {
  // Adds an array of type Int_t and of size nValues as binary to the list
  paramList->Add(new HParamObj(name,values,nValues));
}

void HParamList::add(const Text_t* name,const UInt_t* values,const Int_t nValues) {
  // Adds an array of type UInt_t and of size nValues as binary to the list
  paramList->Add(new HParamObj(name,values,nValues));
}

void HParamList::add(const Text_t* name,const Float_t* values,const Int_t nValues) {
  // Adds an array of type Float_t and of size nValues as binary to the list
  paramList->Add(new HParamObj(name,values,nValues));
}

void HParamList::add(const Text_t* name,const Double_t* values,const Int_t nValues) {
  // Adds an array of type Double_t and of size nValues as binary to the list
  paramList->Add(new HParamObj(name,values,nValues));
}

void HParamList::addObject(const Text_t* name,TObject* obj) {
  // Adds a TObject to the list, sets the class version and the streamer info for
  // ROOT classes
  if (!obj) return;
  HParamObj* o=new HParamObj(name);
  o->setParamType(obj->IsA()->GetName());
  o->setClassVersion(obj->IsA()->GetClassVersion());
  TFile* filesave=gFile;
  HParamTFile* paramFile=new HParamTFile();
  gFile=paramFile;
  const Int_t bufsize=10000;

#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
  TBufferFile* buffer=new TBufferFile(TBuffer::kWrite,bufsize);
#else
  TBuffer* buffer=new TBuffer(TBuffer::kWrite,bufsize);
#endif

  buffer->SetParent(paramFile);
  buffer->MapObject(obj);
  obj->Streamer(*buffer);
  Int_t len=buffer->Length();
  Char_t* buf=new char[len];
  memcpy(buf,buffer->Buffer(),len);
  o->setParamValue((UChar_t*)buf,len);
  TArrayC* fClassIndex=paramFile->GetClassIndex();
  if (fClassIndex&&fClassIndex->fArray[0] != 0) {
    TIter next(gROOT->GetListOfStreamerInfo());
    TStreamerInfo *info;
    TList list;
    while ((info=(TStreamerInfo*)next())) {
      Int_t uid=info->GetNumber();
      if (fClassIndex->fArray[uid]) list.Add(info);
    }
    if (list.GetSize()>0) {
      list.Sort();
      fClassIndex->fArray[0]=2; //to prevent adding classes in TStreamerInfo::TagFile

#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
  TBufferFile* infoBuffer=new TBufferFile(TBuffer::kWrite,bufsize);
#else
  TBuffer* infoBuffer=new TBuffer(TBuffer::kWrite,bufsize);
#endif

      infoBuffer->MapObject(&list);
      list.Streamer(*infoBuffer);
      Int_t infolen=infoBuffer->Length();
      Char_t* infobuf=new char[infolen];
      memcpy(infobuf,infoBuffer->Buffer(),infolen);
      o->setStreamerInfo((UChar_t*)infobuf,infolen);
      delete infoBuffer;
    } else {
      o->setStreamerInfo(0,0);
    }
  }
  fClassIndex->fArray[0]=0;
  delete paramFile;
  paramList->Add(o);
  delete buffer;
  gFile=filesave;
}

void HParamList::print() {
  // Prints the parameter list including values
  TIter next(paramList);
  HParamObj* o;
  while ((o=(HParamObj*)next())!=0) o->print();
}

Bool_t HParamList::fill(const Text_t* name,Text_t* value,const Int_t length) {
  // Copies the data from the list object into the parameter value of type string
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (value==0) return kFALSE;
  if (o!=0 && strcmp(o->getParamType(),"Text_t")==0) {
    Int_t l=o->getLength();
    if (l<length-1) {
      memcpy(value,(Char_t*)o->getParamValue(),l);
      value[l]='\0';
      return kTRUE;
    } else {
      Error("HParamList::fill(const Text_t*,Text_t*)","char array too small");
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,UChar_t* values,const Int_t nValues) {
  // Copies the data from the list object into the parameter array of type UChar_t of size nValues.
  // The function returns an error, if the array size of the list object is not equal
  // to nValues. 
  if (values==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"UChar_t")==0) {
    Int_t n=o->getLength();  
    if (n==nValues) {
      memcpy(values,o->getParamValue(),n);
      return kTRUE;
    } else {
      Error("HParamList::fill", "\nDifferent array sizes for parameter %s",name);
      return kFALSE;
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,Int_t* values,const Int_t nValues) {
  // Copies the data from the list object into the parameter array of type Int_t.
  // The function returns an error, if the array size of the list object is not equal
  // to nValues. 
  if (values==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Int_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (n==nValues) {
      memcpy(values,o->getParamValue(),l);
      return kTRUE;
    } else {
      Error("HParamList::fill","\nDifferent array sizes for parameter %s",name);
      return kFALSE;
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,UInt_t* values,const Int_t nValues) {
  // Copies the data from the list object into the parameter array of type Int_t.
  // The function returns an error, if the array size of the list object is not equal
  // to nValues. 
  if (values==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"UInt_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (n==nValues) {
      memcpy(values,o->getParamValue(),l);
      return kTRUE;
    } else {
      Error("HParamList::fill","\nDifferent array sizes for parameter %s",name);
      return kFALSE;
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,Float_t* values,const Int_t nValues) {
  // Copies the data from the list object into the parameter array of type Float_t.
  // The function returns an error, if the array size of the list object is not equal
  // to nValues. 
  if (values==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Float_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (n==nValues) {
      memcpy(values,o->getParamValue(),l);
      return kTRUE;
    } else {
      Error("HParamList::fill","\nDifferent array sizes for parameter %s",name);
      return kFALSE;
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,Double_t* values,const Int_t nValues) {
  // Copies the data from the list object into the parameter array of type Double_t.
  // The function returns an error, if the array size of the list object is not equal
  // to nValues. 
  if (values==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Double_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (n==nValues) {
      memcpy(values,o->getParamValue(),l);
      return kTRUE;
    } else {
      Error("HParamList::fill","\nDifferent array sizes for parameter %s",name);
      return kFALSE;
    }
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,TArrayI* value) {
  // Copies the data from the list object into the parameter value of type TArrayI
  // The array is resized, if the number of data is different.
  if (value==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Int_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (value->GetSize()!=n) value->Set(n);
    memcpy(value->GetArray(),o->getParamValue(),l);
    return kTRUE;
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,TArrayC* value) {
  // Copies the data from the list object into the parameter value of type TArrayC
  // The array is resized, if the number of data is different.
  if (value==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Char_t")==0) {
    Int_t l=o->getLength();
    if (value->GetSize()!=l) value->Set(l);
    memcpy(value->GetArray(),o->getParamValue(),l);
    return kTRUE;
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,TArrayF* value) {
  // Copies the data from the list object into the parameter value of type TArrayF
  // The array is resized, if the number of data is different.
  if (value==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Float_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (value->GetSize()!=n) value->Set(n);
    memcpy(value->GetArray(),o->getParamValue(),l);
    return kTRUE;
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Bool_t HParamList::fill(const Text_t* name,TArrayD* value) {
  // Copies the data from the list object into the parameter value of type TArrayD
  // The array is resized, if the number of data is different.
  if (value==0) return kFALSE;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Double_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (value->GetSize()!=n) value->Set(n);
    memcpy(value->GetArray(),o->getParamValue(),l);
    return kTRUE;
  }
  Error("HParamList::fill","Not found: %s",name);
  return kFALSE;
}

Int_t HParamList::replace(const Text_t* name,UChar_t* values) {
  // Copies the data from the list object into the parameter array of type UChar_t.
  // Recreates the array, if existing, and returns the number of array elements.
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"UChar_t")==0) {
    Int_t l=o->getLength();
    if (values) delete values;
    values=new UChar_t[l];
    memcpy(values,o->getParamValue(),l);
    return l;
  }
  Error("HParamList::fill","Not found: %s",name);
  return 0;
}

Int_t HParamList::replace(const Text_t* name,Int_t* values) {
  // Copies the data from the list object into the parameter array of type Int_t.
  // Recreates the array, if existing, and returns the number of array elements.
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Int_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (values) delete values;
    values=new Int_t[n];
    memcpy(values,o->getParamValue(),l);
    return n;
  }
  Error("HParamList::fill","Not found: %s",name);
  return 0;
}

Int_t HParamList::replace(const Text_t* name,UInt_t* values) {
  // Copies the data from the list object into the parameter array of type UInt_t.
  // Recreates the array, if existing, and returns the number of array elements.
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"UInt_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (values) delete values;
    values=new UInt_t[n];
    memcpy(values,o->getParamValue(),l);
    return n;
  }
  Error("HParamList::fill","Not found: %s",name);
  return 0;
}

Int_t HParamList::replace(const Text_t* name,Float_t* values) {
  // Copies the data from the list object into the parameter array of type Float_t.
  // Recreates the array, if existing, and returns the number of array elements.
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Float_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (values) delete values;
    values=new Float_t[n];
    memcpy(values,o->getParamValue(),l);
    return n;
  }
  Error("HParamList::fill","Not found: %s",name);
  return 0;
}

Int_t HParamList::replace(const Text_t* name,Double_t* values) {
  // Copies the data from the list object into the parameter array of type Double_t.
  // Recreates the array, if existing, and returns the number of array elements.
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),"Double_t")==0) {
    Int_t l=o->getLength();
    Int_t n=o->getNumParams();  
    if (values) delete values;
    values=new Double_t[n];
    memcpy(values,o->getParamValue(),l);
    return n;
  }
  Error("HParamList::fill","Not found: %s",name);
  return 0;
}

Bool_t HParamList::fillObject(const Text_t* name,TObject* obj) {
  // Fills the object obj (must exist!) via the Streamer and returns the class version.
  // Prints a warning if the class version in the list objects differs from the actual
  // class version.
  if (!obj) return 0;
  HParamObj* o=(HParamObj*)paramList->FindObject(name);
  if (o!=0 && strcmp(o->getParamType(),obj->IsA()->GetName())==0) {
    if (o->getClassVersion()!=obj->IsA()->GetClassVersion())
      Warning("HParamList::fillObject",
              "\n       Read Class Version = %i does not match actual version = %i",
              o->getClassVersion(),obj->IsA()->GetClassVersion());
    TFile* filesave=gFile;
    gFile=0;
#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
    TBufferFile* buf=0;
#else
    TBuffer* buf=0;
#endif

    Int_t len=o->getStreamerInfoSize();
    if (len>0&&o->getStreamerInfo()!=0) {
#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
      buf=new TBufferFile(TBuffer::kRead,len);
#else
      buf=new TBuffer(TBuffer::kRead,len);
#endif
      memcpy(buf->Buffer(),(Char_t*)o->getStreamerInfo(),len);
      buf->SetBufferOffset(0);
      TList list;
      buf->MapObject(&list);
      list.Streamer(*buf);
      delete buf;
      TStreamerInfo *info;
      TIter next(&list);
      while ((info = (TStreamerInfo*)next())) {
        if (info->IsA() != TStreamerInfo::Class()) {
	  Warning("HParamList::fillObject","not a TStreamerInfo object");
          continue;
        }
        info->BuildCheck();
      }
      list.Clear();  //this will delete all TStreamerInfo objects with kCanDelete 
    }
    len=o->getLength();
#if ROOT_VERSION_CODE  > ROOT_VERSION(4,4,2)
      buf=new TBufferFile(TBuffer::kRead,len);
#else
      buf=new TBuffer(TBuffer::kRead,len);
#endif
    memcpy(buf->Buffer(),(Char_t*)o->getParamValue(),len);
    buf->SetBufferOffset(0);
    buf->MapObject(obj);
    obj->Streamer(*buf);
    delete buf;
    gFile=filesave;
    return len;
  }
  Error("HParamList::fillObject","Not found: %s",name);
  return 0;
}
 hparamlist.cc:1
 hparamlist.cc:2
 hparamlist.cc:3
 hparamlist.cc:4
 hparamlist.cc:5
 hparamlist.cc:6
 hparamlist.cc:7
 hparamlist.cc:8
 hparamlist.cc:9
 hparamlist.cc:10
 hparamlist.cc:11
 hparamlist.cc:12
 hparamlist.cc:13
 hparamlist.cc:14
 hparamlist.cc:15
 hparamlist.cc:16
 hparamlist.cc:17
 hparamlist.cc:18
 hparamlist.cc:19
 hparamlist.cc:20
 hparamlist.cc:21
 hparamlist.cc:22
 hparamlist.cc:23
 hparamlist.cc:24
 hparamlist.cc:25
 hparamlist.cc:26
 hparamlist.cc:27
 hparamlist.cc:28
 hparamlist.cc:29
 hparamlist.cc:30
 hparamlist.cc:31
 hparamlist.cc:32
 hparamlist.cc:33
 hparamlist.cc:34
 hparamlist.cc:35
 hparamlist.cc:36
 hparamlist.cc:37
 hparamlist.cc:38
 hparamlist.cc:39
 hparamlist.cc:40
 hparamlist.cc:41
 hparamlist.cc:42
 hparamlist.cc:43
 hparamlist.cc:44
 hparamlist.cc:45
 hparamlist.cc:46
 hparamlist.cc:47
 hparamlist.cc:48
 hparamlist.cc:49
 hparamlist.cc:50
 hparamlist.cc:51
 hparamlist.cc:52
 hparamlist.cc:53
 hparamlist.cc:54
 hparamlist.cc:55
 hparamlist.cc:56
 hparamlist.cc:57
 hparamlist.cc:58
 hparamlist.cc:59
 hparamlist.cc:60
 hparamlist.cc:61
 hparamlist.cc:62
 hparamlist.cc:63
 hparamlist.cc:64
 hparamlist.cc:65
 hparamlist.cc:66
 hparamlist.cc:67
 hparamlist.cc:68
 hparamlist.cc:69
 hparamlist.cc:70
 hparamlist.cc:71
 hparamlist.cc:72
 hparamlist.cc:73
 hparamlist.cc:74
 hparamlist.cc:75
 hparamlist.cc:76
 hparamlist.cc:77
 hparamlist.cc:78
 hparamlist.cc:79
 hparamlist.cc:80
 hparamlist.cc:81
 hparamlist.cc:82
 hparamlist.cc:83
 hparamlist.cc:84
 hparamlist.cc:85
 hparamlist.cc:86
 hparamlist.cc:87
 hparamlist.cc:88
 hparamlist.cc:89
 hparamlist.cc:90
 hparamlist.cc:91
 hparamlist.cc:92
 hparamlist.cc:93
 hparamlist.cc:94
 hparamlist.cc:95
 hparamlist.cc:96
 hparamlist.cc:97
 hparamlist.cc:98
 hparamlist.cc:99
 hparamlist.cc:100
 hparamlist.cc:101
 hparamlist.cc:102
 hparamlist.cc:103
 hparamlist.cc:104
 hparamlist.cc:105
 hparamlist.cc:106
 hparamlist.cc:107
 hparamlist.cc:108
 hparamlist.cc:109
 hparamlist.cc:110
 hparamlist.cc:111
 hparamlist.cc:112
 hparamlist.cc:113
 hparamlist.cc:114
 hparamlist.cc:115
 hparamlist.cc:116
 hparamlist.cc:117
 hparamlist.cc:118
 hparamlist.cc:119
 hparamlist.cc:120
 hparamlist.cc:121
 hparamlist.cc:122
 hparamlist.cc:123
 hparamlist.cc:124
 hparamlist.cc:125
 hparamlist.cc:126
 hparamlist.cc:127
 hparamlist.cc:128
 hparamlist.cc:129
 hparamlist.cc:130
 hparamlist.cc:131
 hparamlist.cc:132
 hparamlist.cc:133
 hparamlist.cc:134
 hparamlist.cc:135
 hparamlist.cc:136
 hparamlist.cc:137
 hparamlist.cc:138
 hparamlist.cc:139
 hparamlist.cc:140
 hparamlist.cc:141
 hparamlist.cc:142
 hparamlist.cc:143
 hparamlist.cc:144
 hparamlist.cc:145
 hparamlist.cc:146
 hparamlist.cc:147
 hparamlist.cc:148
 hparamlist.cc:149
 hparamlist.cc:150
 hparamlist.cc:151
 hparamlist.cc:152
 hparamlist.cc:153
 hparamlist.cc:154
 hparamlist.cc:155
 hparamlist.cc:156
 hparamlist.cc:157
 hparamlist.cc:158
 hparamlist.cc:159
 hparamlist.cc:160
 hparamlist.cc:161
 hparamlist.cc:162
 hparamlist.cc:163
 hparamlist.cc:164
 hparamlist.cc:165
 hparamlist.cc:166
 hparamlist.cc:167
 hparamlist.cc:168
 hparamlist.cc:169
 hparamlist.cc:170
 hparamlist.cc:171
 hparamlist.cc:172
 hparamlist.cc:173
 hparamlist.cc:174
 hparamlist.cc:175
 hparamlist.cc:176
 hparamlist.cc:177
 hparamlist.cc:178
 hparamlist.cc:179
 hparamlist.cc:180
 hparamlist.cc:181
 hparamlist.cc:182
 hparamlist.cc:183
 hparamlist.cc:184
 hparamlist.cc:185
 hparamlist.cc:186
 hparamlist.cc:187
 hparamlist.cc:188
 hparamlist.cc:189
 hparamlist.cc:190
 hparamlist.cc:191
 hparamlist.cc:192
 hparamlist.cc:193
 hparamlist.cc:194
 hparamlist.cc:195
 hparamlist.cc:196
 hparamlist.cc:197
 hparamlist.cc:198
 hparamlist.cc:199
 hparamlist.cc:200
 hparamlist.cc:201
 hparamlist.cc:202
 hparamlist.cc:203
 hparamlist.cc:204
 hparamlist.cc:205
 hparamlist.cc:206
 hparamlist.cc:207
 hparamlist.cc:208
 hparamlist.cc:209
 hparamlist.cc:210
 hparamlist.cc:211
 hparamlist.cc:212
 hparamlist.cc:213
 hparamlist.cc:214
 hparamlist.cc:215
 hparamlist.cc:216
 hparamlist.cc:217
 hparamlist.cc:218
 hparamlist.cc:219
 hparamlist.cc:220
 hparamlist.cc:221
 hparamlist.cc:222
 hparamlist.cc:223
 hparamlist.cc:224
 hparamlist.cc:225
 hparamlist.cc:226
 hparamlist.cc:227
 hparamlist.cc:228
 hparamlist.cc:229
 hparamlist.cc:230
 hparamlist.cc:231
 hparamlist.cc:232
 hparamlist.cc:233
 hparamlist.cc:234
 hparamlist.cc:235
 hparamlist.cc:236
 hparamlist.cc:237
 hparamlist.cc:238
 hparamlist.cc:239
 hparamlist.cc:240
 hparamlist.cc:241
 hparamlist.cc:242
 hparamlist.cc:243
 hparamlist.cc:244
 hparamlist.cc:245
 hparamlist.cc:246
 hparamlist.cc:247
 hparamlist.cc:248
 hparamlist.cc:249
 hparamlist.cc:250
 hparamlist.cc:251
 hparamlist.cc:252
 hparamlist.cc:253
 hparamlist.cc:254
 hparamlist.cc:255
 hparamlist.cc:256
 hparamlist.cc:257
 hparamlist.cc:258
 hparamlist.cc:259
 hparamlist.cc:260
 hparamlist.cc:261
 hparamlist.cc:262
 hparamlist.cc:263
 hparamlist.cc:264
 hparamlist.cc:265
 hparamlist.cc:266
 hparamlist.cc:267
 hparamlist.cc:268
 hparamlist.cc:269
 hparamlist.cc:270
 hparamlist.cc:271
 hparamlist.cc:272
 hparamlist.cc:273
 hparamlist.cc:274
 hparamlist.cc:275
 hparamlist.cc:276
 hparamlist.cc:277
 hparamlist.cc:278
 hparamlist.cc:279
 hparamlist.cc:280
 hparamlist.cc:281
 hparamlist.cc:282
 hparamlist.cc:283
 hparamlist.cc:284
 hparamlist.cc:285
 hparamlist.cc:286
 hparamlist.cc:287
 hparamlist.cc:288
 hparamlist.cc:289
 hparamlist.cc:290
 hparamlist.cc:291
 hparamlist.cc:292
 hparamlist.cc:293
 hparamlist.cc:294
 hparamlist.cc:295
 hparamlist.cc:296
 hparamlist.cc:297
 hparamlist.cc:298
 hparamlist.cc:299
 hparamlist.cc:300
 hparamlist.cc:301
 hparamlist.cc:302
 hparamlist.cc:303
 hparamlist.cc:304
 hparamlist.cc:305
 hparamlist.cc:306
 hparamlist.cc:307
 hparamlist.cc:308
 hparamlist.cc:309
 hparamlist.cc:310
 hparamlist.cc:311
 hparamlist.cc:312
 hparamlist.cc:313
 hparamlist.cc:314
 hparamlist.cc:315
 hparamlist.cc:316
 hparamlist.cc:317
 hparamlist.cc:318
 hparamlist.cc:319
 hparamlist.cc:320
 hparamlist.cc:321
 hparamlist.cc:322
 hparamlist.cc:323
 hparamlist.cc:324
 hparamlist.cc:325
 hparamlist.cc:326
 hparamlist.cc:327
 hparamlist.cc:328
 hparamlist.cc:329
 hparamlist.cc:330
 hparamlist.cc:331
 hparamlist.cc:332
 hparamlist.cc:333
 hparamlist.cc:334
 hparamlist.cc:335
 hparamlist.cc:336
 hparamlist.cc:337
 hparamlist.cc:338
 hparamlist.cc:339
 hparamlist.cc:340
 hparamlist.cc:341
 hparamlist.cc:342
 hparamlist.cc:343
 hparamlist.cc:344
 hparamlist.cc:345
 hparamlist.cc:346
 hparamlist.cc:347
 hparamlist.cc:348
 hparamlist.cc:349
 hparamlist.cc:350
 hparamlist.cc:351
 hparamlist.cc:352
 hparamlist.cc:353
 hparamlist.cc:354
 hparamlist.cc:355
 hparamlist.cc:356
 hparamlist.cc:357
 hparamlist.cc:358
 hparamlist.cc:359
 hparamlist.cc:360
 hparamlist.cc:361
 hparamlist.cc:362
 hparamlist.cc:363
 hparamlist.cc:364
 hparamlist.cc:365
 hparamlist.cc:366
 hparamlist.cc:367
 hparamlist.cc:368
 hparamlist.cc:369
 hparamlist.cc:370
 hparamlist.cc:371
 hparamlist.cc:372
 hparamlist.cc:373
 hparamlist.cc:374
 hparamlist.cc:375
 hparamlist.cc:376
 hparamlist.cc:377
 hparamlist.cc:378
 hparamlist.cc:379
 hparamlist.cc:380
 hparamlist.cc:381
 hparamlist.cc:382
 hparamlist.cc:383
 hparamlist.cc:384
 hparamlist.cc:385
 hparamlist.cc:386
 hparamlist.cc:387
 hparamlist.cc:388
 hparamlist.cc:389
 hparamlist.cc:390
 hparamlist.cc:391
 hparamlist.cc:392
 hparamlist.cc:393
 hparamlist.cc:394
 hparamlist.cc:395
 hparamlist.cc:396
 hparamlist.cc:397
 hparamlist.cc:398
 hparamlist.cc:399
 hparamlist.cc:400
 hparamlist.cc:401
 hparamlist.cc:402
 hparamlist.cc:403
 hparamlist.cc:404
 hparamlist.cc:405
 hparamlist.cc:406
 hparamlist.cc:407
 hparamlist.cc:408
 hparamlist.cc:409
 hparamlist.cc:410
 hparamlist.cc:411
 hparamlist.cc:412
 hparamlist.cc:413
 hparamlist.cc:414
 hparamlist.cc:415
 hparamlist.cc:416
 hparamlist.cc:417
 hparamlist.cc:418
 hparamlist.cc:419
 hparamlist.cc:420
 hparamlist.cc:421
 hparamlist.cc:422
 hparamlist.cc:423
 hparamlist.cc:424
 hparamlist.cc:425
 hparamlist.cc:426
 hparamlist.cc:427
 hparamlist.cc:428
 hparamlist.cc:429
 hparamlist.cc:430
 hparamlist.cc:431
 hparamlist.cc:432
 hparamlist.cc:433
 hparamlist.cc:434
 hparamlist.cc:435
 hparamlist.cc:436
 hparamlist.cc:437
 hparamlist.cc:438
 hparamlist.cc:439
 hparamlist.cc:440
 hparamlist.cc:441
 hparamlist.cc:442
 hparamlist.cc:443
 hparamlist.cc:444
 hparamlist.cc:445
 hparamlist.cc:446
 hparamlist.cc:447
 hparamlist.cc:448
 hparamlist.cc:449
 hparamlist.cc:450
 hparamlist.cc:451
 hparamlist.cc:452
 hparamlist.cc:453
 hparamlist.cc:454
 hparamlist.cc:455
 hparamlist.cc:456
 hparamlist.cc:457
 hparamlist.cc:458
 hparamlist.cc:459
 hparamlist.cc:460
 hparamlist.cc:461
 hparamlist.cc:462
 hparamlist.cc:463
 hparamlist.cc:464
 hparamlist.cc:465
 hparamlist.cc:466
 hparamlist.cc:467
 hparamlist.cc:468
 hparamlist.cc:469
 hparamlist.cc:470
 hparamlist.cc:471
 hparamlist.cc:472
 hparamlist.cc:473
 hparamlist.cc:474
 hparamlist.cc:475
 hparamlist.cc:476
 hparamlist.cc:477
 hparamlist.cc:478
 hparamlist.cc:479
 hparamlist.cc:480
 hparamlist.cc:481
 hparamlist.cc:482
 hparamlist.cc:483
 hparamlist.cc:484
 hparamlist.cc:485
 hparamlist.cc:486
 hparamlist.cc:487
 hparamlist.cc:488
 hparamlist.cc:489
 hparamlist.cc:490
 hparamlist.cc:491
 hparamlist.cc:492
 hparamlist.cc:493
 hparamlist.cc:494
 hparamlist.cc:495
 hparamlist.cc:496
 hparamlist.cc:497
 hparamlist.cc:498
 hparamlist.cc:499
 hparamlist.cc:500
 hparamlist.cc:501
 hparamlist.cc:502
 hparamlist.cc:503
 hparamlist.cc:504
 hparamlist.cc:505
 hparamlist.cc:506
 hparamlist.cc:507
 hparamlist.cc:508
 hparamlist.cc:509
 hparamlist.cc:510
 hparamlist.cc:511
 hparamlist.cc:512
 hparamlist.cc:513
 hparamlist.cc:514
 hparamlist.cc:515
 hparamlist.cc:516
 hparamlist.cc:517
 hparamlist.cc:518
 hparamlist.cc:519
 hparamlist.cc:520
 hparamlist.cc:521
 hparamlist.cc:522
 hparamlist.cc:523
 hparamlist.cc:524
 hparamlist.cc:525
 hparamlist.cc:526
 hparamlist.cc:527
 hparamlist.cc:528
 hparamlist.cc:529
 hparamlist.cc:530
 hparamlist.cc:531
 hparamlist.cc:532
 hparamlist.cc:533
 hparamlist.cc:534
 hparamlist.cc:535
 hparamlist.cc:536
 hparamlist.cc:537
 hparamlist.cc:538
 hparamlist.cc:539
 hparamlist.cc:540
 hparamlist.cc:541
 hparamlist.cc:542
 hparamlist.cc:543
 hparamlist.cc:544
 hparamlist.cc:545
 hparamlist.cc:546
 hparamlist.cc:547
 hparamlist.cc:548
 hparamlist.cc:549
 hparamlist.cc:550
 hparamlist.cc:551
 hparamlist.cc:552
 hparamlist.cc:553
 hparamlist.cc:554
 hparamlist.cc:555
 hparamlist.cc:556
 hparamlist.cc:557
 hparamlist.cc:558
 hparamlist.cc:559
 hparamlist.cc:560
 hparamlist.cc:561
 hparamlist.cc:562
 hparamlist.cc:563
 hparamlist.cc:564
 hparamlist.cc:565
 hparamlist.cc:566
 hparamlist.cc:567
 hparamlist.cc:568
 hparamlist.cc:569
 hparamlist.cc:570
 hparamlist.cc:571
 hparamlist.cc:572
 hparamlist.cc:573
 hparamlist.cc:574
 hparamlist.cc:575
 hparamlist.cc:576
 hparamlist.cc:577
 hparamlist.cc:578
 hparamlist.cc:579
 hparamlist.cc:580
 hparamlist.cc:581
 hparamlist.cc:582
 hparamlist.cc:583
 hparamlist.cc:584
 hparamlist.cc:585
 hparamlist.cc:586
 hparamlist.cc:587
 hparamlist.cc:588
 hparamlist.cc:589
 hparamlist.cc:590
 hparamlist.cc:591
 hparamlist.cc:592
 hparamlist.cc:593
 hparamlist.cc:594
 hparamlist.cc:595
 hparamlist.cc:596
 hparamlist.cc:597
 hparamlist.cc:598
 hparamlist.cc:599
 hparamlist.cc:600
 hparamlist.cc:601
 hparamlist.cc:602
 hparamlist.cc:603
 hparamlist.cc:604
 hparamlist.cc:605
 hparamlist.cc:606
 hparamlist.cc:607
 hparamlist.cc:608
 hparamlist.cc:609
 hparamlist.cc:610
 hparamlist.cc:611
 hparamlist.cc:612
 hparamlist.cc:613
 hparamlist.cc:614
 hparamlist.cc:615
 hparamlist.cc:616
 hparamlist.cc:617
 hparamlist.cc:618
 hparamlist.cc:619
 hparamlist.cc:620
 hparamlist.cc:621
 hparamlist.cc:622
 hparamlist.cc:623
 hparamlist.cc:624
 hparamlist.cc:625
 hparamlist.cc:626
 hparamlist.cc:627
 hparamlist.cc:628
 hparamlist.cc:629
 hparamlist.cc:630
 hparamlist.cc:631
 hparamlist.cc:632
 hparamlist.cc:633
 hparamlist.cc:634
 hparamlist.cc:635
 hparamlist.cc:636
 hparamlist.cc:637
 hparamlist.cc:638
 hparamlist.cc:639
 hparamlist.cc:640
 hparamlist.cc:641
 hparamlist.cc:642
 hparamlist.cc:643
 hparamlist.cc:644
 hparamlist.cc:645
 hparamlist.cc:646
 hparamlist.cc:647
 hparamlist.cc:648
 hparamlist.cc:649
 hparamlist.cc:650
 hparamlist.cc:651
 hparamlist.cc:652
 hparamlist.cc:653
 hparamlist.cc:654
 hparamlist.cc:655
 hparamlist.cc:656
 hparamlist.cc:657
 hparamlist.cc:658
 hparamlist.cc:659
 hparamlist.cc:660
 hparamlist.cc:661
 hparamlist.cc:662
 hparamlist.cc:663
 hparamlist.cc:664
 hparamlist.cc:665
 hparamlist.cc:666
 hparamlist.cc:667
 hparamlist.cc:668
 hparamlist.cc:669
 hparamlist.cc:670
 hparamlist.cc:671
 hparamlist.cc:672
 hparamlist.cc:673
 hparamlist.cc:674
 hparamlist.cc:675
 hparamlist.cc:676
 hparamlist.cc:677
 hparamlist.cc:678
 hparamlist.cc:679
 hparamlist.cc:680
 hparamlist.cc:681
 hparamlist.cc:682
 hparamlist.cc:683
 hparamlist.cc:684
 hparamlist.cc:685
 hparamlist.cc:686
 hparamlist.cc:687
 hparamlist.cc:688
 hparamlist.cc:689
 hparamlist.cc:690
 hparamlist.cc:691
 hparamlist.cc:692
 hparamlist.cc:693
 hparamlist.cc:694
 hparamlist.cc:695
 hparamlist.cc:696
 hparamlist.cc:697
 hparamlist.cc:698
 hparamlist.cc:699
 hparamlist.cc:700
 hparamlist.cc:701
 hparamlist.cc:702
 hparamlist.cc:703
 hparamlist.cc:704
 hparamlist.cc:705
 hparamlist.cc:706
 hparamlist.cc:707
 hparamlist.cc:708
 hparamlist.cc:709
 hparamlist.cc:710
 hparamlist.cc:711
 hparamlist.cc:712
 hparamlist.cc:713
 hparamlist.cc:714
 hparamlist.cc:715
 hparamlist.cc:716
 hparamlist.cc:717
 hparamlist.cc:718
 hparamlist.cc:719
 hparamlist.cc:720
 hparamlist.cc:721
 hparamlist.cc:722
 hparamlist.cc:723
 hparamlist.cc:724
 hparamlist.cc:725
 hparamlist.cc:726
 hparamlist.cc:727
 hparamlist.cc:728
 hparamlist.cc:729
 hparamlist.cc:730
 hparamlist.cc:731
 hparamlist.cc:732
 hparamlist.cc:733
 hparamlist.cc:734
 hparamlist.cc:735
 hparamlist.cc:736
 hparamlist.cc:737
 hparamlist.cc:738
 hparamlist.cc:739
 hparamlist.cc:740
 hparamlist.cc:741
 hparamlist.cc:742
 hparamlist.cc:743
 hparamlist.cc:744
 hparamlist.cc:745
 hparamlist.cc:746
 hparamlist.cc:747
 hparamlist.cc:748
 hparamlist.cc:749
 hparamlist.cc:750
 hparamlist.cc:751
 hparamlist.cc:752
 hparamlist.cc:753
 hparamlist.cc:754
 hparamlist.cc:755
 hparamlist.cc:756
 hparamlist.cc:757
 hparamlist.cc:758
 hparamlist.cc:759
 hparamlist.cc:760
 hparamlist.cc:761
 hparamlist.cc:762
 hparamlist.cc:763
 hparamlist.cc:764
 hparamlist.cc:765
 hparamlist.cc:766
 hparamlist.cc:767
 hparamlist.cc:768
 hparamlist.cc:769
 hparamlist.cc:770
 hparamlist.cc:771
 hparamlist.cc:772
 hparamlist.cc:773
 hparamlist.cc:774
 hparamlist.cc:775
 hparamlist.cc:776
 hparamlist.cc:777
 hparamlist.cc:778
 hparamlist.cc:779
 hparamlist.cc:780
 hparamlist.cc:781
 hparamlist.cc:782
 hparamlist.cc:783
 hparamlist.cc:784
 hparamlist.cc:785
 hparamlist.cc:786
 hparamlist.cc:787
 hparamlist.cc:788
 hparamlist.cc:789
 hparamlist.cc:790
 hparamlist.cc:791
 hparamlist.cc:792
 hparamlist.cc:793
 hparamlist.cc:794
 hparamlist.cc:795
 hparamlist.cc:796
 hparamlist.cc:797
 hparamlist.cc:798
 hparamlist.cc:799
 hparamlist.cc:800
 hparamlist.cc:801
 hparamlist.cc:802
 hparamlist.cc:803
 hparamlist.cc:804
 hparamlist.cc:805
 hparamlist.cc:806
 hparamlist.cc:807
 hparamlist.cc:808
 hparamlist.cc:809
 hparamlist.cc:810
 hparamlist.cc:811
 hparamlist.cc:812
 hparamlist.cc:813
 hparamlist.cc:814
 hparamlist.cc:815
 hparamlist.cc:816
 hparamlist.cc:817
 hparamlist.cc:818
 hparamlist.cc:819
 hparamlist.cc:820
 hparamlist.cc:821
 hparamlist.cc:822
 hparamlist.cc:823
 hparamlist.cc:824
 hparamlist.cc:825
 hparamlist.cc:826
 hparamlist.cc:827
 hparamlist.cc:828
 hparamlist.cc:829
 hparamlist.cc:830
 hparamlist.cc:831
 hparamlist.cc:832
 hparamlist.cc:833
 hparamlist.cc:834
 hparamlist.cc:835
 hparamlist.cc:836
 hparamlist.cc:837
 hparamlist.cc:838
 hparamlist.cc:839
 hparamlist.cc:840
 hparamlist.cc:841
 hparamlist.cc:842
 hparamlist.cc:843
 hparamlist.cc:844
 hparamlist.cc:845
 hparamlist.cc:846
 hparamlist.cc:847
 hparamlist.cc:848
 hparamlist.cc:849
 hparamlist.cc:850
 hparamlist.cc:851
 hparamlist.cc:852
 hparamlist.cc:853
 hparamlist.cc:854
 hparamlist.cc:855
 hparamlist.cc:856
 hparamlist.cc:857
 hparamlist.cc:858
 hparamlist.cc:859
 hparamlist.cc:860
 hparamlist.cc:861
 hparamlist.cc:862
 hparamlist.cc:863
 hparamlist.cc:864
 hparamlist.cc:865
 hparamlist.cc:866
 hparamlist.cc:867
 hparamlist.cc:868
 hparamlist.cc:869
 hparamlist.cc:870
 hparamlist.cc:871
 hparamlist.cc:872
 hparamlist.cc:873
 hparamlist.cc:874
 hparamlist.cc:875
 hparamlist.cc:876
 hparamlist.cc:877
 hparamlist.cc:878
 hparamlist.cc:879
 hparamlist.cc:880
 hparamlist.cc:881
 hparamlist.cc:882
 hparamlist.cc:883
 hparamlist.cc:884