ROOT logo
//*-- Author : D.Vasiliev
//*-- Modified: 12/09/2001 by D.Zovinec
//*-- Modified: 02/07/2001 by D.Zovinec
//*-- Modified: 30/11/2000 by R.Holzmann
using namespace std;
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "htofdetector.h"
#include "hpario.h"
#include "hdetpario.h"
#include "htofdigipar.h"
#include <iostream> 
#include <iomanip>

ClassImp(HTofDigiPar)
ClassImp(HTofDigiParSec)
ClassImp(HTofDigiParMod)
ClassImp(HTofDigiParCell)

void HTofDigiParCell::setDefaults(Int_t m) {
  // Sets the default values.
  if(m==0) halfLen = 1182.5;
  if(m==1) halfLen = 1132.5;
  if(m==2) halfLen = 1067.5;
  if(m==3) halfLen = 985.0;
  if(m==4) halfLen = 970.0;
  if(m==5) halfLen = 897.5;
  if(m==6) halfLen = 812.5;
  if(m==7) halfLen = 737.5;
  if(m<=3) angleRef = 47.0;
  if(m>3 && m<=7) angleRef = 38.0;
  if(m<=3) attenLen = 2000.0;
  if(m>3 && m<=7) attenLen = 1700.0;
  if(m<=3) groupVel = 164.0;
  if(m>3 && m<=7) groupVel = 162.0;
  slopeLeftTDC = 0.065;
  slopeRightTDC = 0.065;
  if(m<=7){
    thrLeftCFD = 200;
    thrRightCFD = 200;
    thrLeftADC = 30;
    thrRightADC = 30;
  } else {
    thrLeftCFD = 0;
    thrRightCFD = 0;
    thrLeftADC = 0;
    thrRightADC = 0;
  }
}
void HTofDigiParCell::clear() {
  // Sets the default values.
  halfLen       = -1;
  angleRef      = -1;
  attenLen      = -1;
  groupVel      = -1;
  slopeLeftTDC  = 0;
  slopeRightTDC = 0;
  thrLeftCFD    = 0;
  thrRightCFD   = 0;
  thrLeftADC    = 0;
  thrRightADC   = 0;
}

HTofDigiParMod::HTofDigiParMod(Int_t s, Int_t m) {
  // Constructor creates an array of pointers of type HTofDigiParCell.
  HDetector* det=gHades->getSetup()->getDetector("Tof");
  Int_t n=det->getMaxComponents();
  if (det->getModule(s,m)) {
    array = new TObjArray(n);
    for(Int_t i=0 ; i<n ; i++) array->AddAt(new HTofDigiParCell(),i);
  } else array = new TObjArray(0);
}

HTofDigiParMod::~HTofDigiParMod(void) {
  // Destructor.
    if(array)
    {
	array->Delete();
	delete array;
    }
}


HTofDigiParSec::HTofDigiParSec(Int_t s, Int_t n) {
  // Constructor creates an array of pointers of type HTofDigiParCell.
  array = new TObjArray(n);
  for(Int_t i=0 ; i<n ; i++)
    array->AddAt(new HTofDigiParMod(s,i),i);
}

HTofDigiParSec::~HTofDigiParSec(void) {
  // Destructor.
  array->Delete();
  delete array;
}


HTofDigiPar::HTofDigiPar(const Char_t* name,const Char_t* title,
                       const Char_t* context)
            : HParSet(name,title,context) {
  // Constructor creates an array of pointers of type HTofDigiParSec.
  // The container name is set to "TofDigiPar".
  strcpy(detName,"Tof");
  array = new TObjArray(6);
  for (Int_t i=0; i<6; i++)
      array->AddAt(new HTofDigiParSec(i,22),i);
}


HTofDigiPar::~HTofDigiPar(void) {
  // Destructor.
  array->Delete();
  delete array;
}

Bool_t HTofDigiPar::init(HParIo* inp,Int_t* set) {
  // Intitializes the container from an input.
  // If input not available, default initialization.
  HDetParIo* input=inp->getDetParIo("HTofParIo");
  if (input) return (input->init(this,set));
  return kFALSE;
}

Int_t HTofDigiPar::write(HParIo* output) {
  // Writes the container to an output.
  HDetParIo* out=output->getDetParIo("HTofParIo");
  if (out) return out->write(this);
  return -1;
}

void HTofDigiPar::clear() {
  // Calls method setDefaults(Int_t m) for all HTofDigiParCell objects
  // in the detector.
  for(Int_t i0=0;i0<getSize();i0++) {
    HTofDigiParSec& sec=(*this)[i0];
    Int_t n1=sec.getSize();
    for(Int_t i1=0;i1<n1;i1++) {
      HTofDigiParMod& mod=sec[i1];
      Int_t n2=mod.getSize();
      for(Int_t i2=0;i2<n2;i2++) mod[i2].setDefaults(i1);
    }
  }
  status=kFALSE;
  resetInputVersions();
}

void HTofDigiPar::readline(const Char_t *buf, Int_t *set) {
  // Decodes one line read from ascii file I/O.
  Int_t s,m,c,lcfd,rcfd,ladc,radc;
  Float_t hl,ar,al,vg,ltdc,rtdc;
  sscanf(buf,"%d%d%d%f%f%f%f%f%f%d%d%d%d",&s,&m,&c,&hl,&ar,&al,&vg,&ltdc,&rtdc,&lcfd,&rcfd,&ladc,&radc);
  HTofDigiParCell& cell=(*this)[s][m][c];
  cell.setHalfLen(hl);
  cell.setAngleRef(ar);
  cell.setAttenLen(al);
  cell.setGroupVel(vg);
  cell.setLeftTDCSlope(ltdc);
  cell.setRightTDCSlope(rtdc);
  cell.setLeftCFDThreshold(lcfd);
  cell.setRightCFDThreshold(rcfd);
  cell.setLeftADCThreshold(ladc);
  cell.setRightADCThreshold(radc);
  set[(s*22+m)]=999;
}

void HTofDigiPar::putAsciiHeader(TString& header) {
  // Puts the ascii header to the string used in HTofParAsciiFileIo.
  header=
    "# Digitization parameters for the TOF detector\n"
    "# Format:\n"
    "# sector module cell HalfLen AngleRef AttenLen GroupVel\n"
    "# lTDCslope rTDCslope lCFDthr rCFDthr lADCthr rADCthr\n";
}

Bool_t HTofDigiPar::writeline(Char_t *buf,Int_t s, Int_t m, Int_t c) {
  // Writes one line to the buffer used by ascii file I/O.
  HTofDigiParCell& cell=(*this)[s][m][c];
  sprintf(buf,"%2i%2i%2i %8.2f %6.2f %7.1f %7.2f %7.4f %7.4f %3i %3i %3i %3i\n",
              s,m,c,cell.getHalfLen(),cell.getAngleRef(),
              cell.getAttenLen(),cell.getGroupVel(),
              cell.getLeftTDCSlope(),cell.getRightTDCSlope(),
              cell.getLeftCFDThreshold(),cell.getRightCFDThreshold(),
              cell.getLeftADCThreshold(),cell.getRightADCThreshold());
  return kTRUE;
}

void HTofDigiPar::printPause(void) {
  // Pauses printing.
  printf("Press any key to continue");
  getchar();
  printf("\n\n");
}

void HTofDigiPar::printParam(void) {
  // Prints the parameters.
  printf("\n Digitization parameters for the TOF detector\n");
  printf(" Format:\n");
  printf(" sector module cell HalfLen AngleRef AttenLen GroupVel\n");
  printf(" lTDCslope rTDCslope lCFDthr rCFDthr lADCthr rADCthr\n");
  printf("==============================================\n");
  Text_t buf[155];
  Int_t line=0;
  Int_t n0 = getSize();
  for(Int_t i0=0; i0<n0; i0++) {
    Int_t n1 = (*this)[i0].getSize();
    for(Int_t i1=0; i1<n1; i1++) {
      Int_t n2 = (*this)[i0][i1].getSize();
      for(Int_t i2=0; i2<n2; i2++) {
	line++;
	//	if (line%24 == 0) printPause();
        if (writeline(buf, i0, i1, i2)) printf(buf,strlen(buf));
      }
    }
  }
  printf("==============================================================\n");
}
 htofdigipar.cc:1
 htofdigipar.cc:2
 htofdigipar.cc:3
 htofdigipar.cc:4
 htofdigipar.cc:5
 htofdigipar.cc:6
 htofdigipar.cc:7
 htofdigipar.cc:8
 htofdigipar.cc:9
 htofdigipar.cc:10
 htofdigipar.cc:11
 htofdigipar.cc:12
 htofdigipar.cc:13
 htofdigipar.cc:14
 htofdigipar.cc:15
 htofdigipar.cc:16
 htofdigipar.cc:17
 htofdigipar.cc:18
 htofdigipar.cc:19
 htofdigipar.cc:20
 htofdigipar.cc:21
 htofdigipar.cc:22
 htofdigipar.cc:23
 htofdigipar.cc:24
 htofdigipar.cc:25
 htofdigipar.cc:26
 htofdigipar.cc:27
 htofdigipar.cc:28
 htofdigipar.cc:29
 htofdigipar.cc:30
 htofdigipar.cc:31
 htofdigipar.cc:32
 htofdigipar.cc:33
 htofdigipar.cc:34
 htofdigipar.cc:35
 htofdigipar.cc:36
 htofdigipar.cc:37
 htofdigipar.cc:38
 htofdigipar.cc:39
 htofdigipar.cc:40
 htofdigipar.cc:41
 htofdigipar.cc:42
 htofdigipar.cc:43
 htofdigipar.cc:44
 htofdigipar.cc:45
 htofdigipar.cc:46
 htofdigipar.cc:47
 htofdigipar.cc:48
 htofdigipar.cc:49
 htofdigipar.cc:50
 htofdigipar.cc:51
 htofdigipar.cc:52
 htofdigipar.cc:53
 htofdigipar.cc:54
 htofdigipar.cc:55
 htofdigipar.cc:56
 htofdigipar.cc:57
 htofdigipar.cc:58
 htofdigipar.cc:59
 htofdigipar.cc:60
 htofdigipar.cc:61
 htofdigipar.cc:62
 htofdigipar.cc:63
 htofdigipar.cc:64
 htofdigipar.cc:65
 htofdigipar.cc:66
 htofdigipar.cc:67
 htofdigipar.cc:68
 htofdigipar.cc:69
 htofdigipar.cc:70
 htofdigipar.cc:71
 htofdigipar.cc:72
 htofdigipar.cc:73
 htofdigipar.cc:74
 htofdigipar.cc:75
 htofdigipar.cc:76
 htofdigipar.cc:77
 htofdigipar.cc:78
 htofdigipar.cc:79
 htofdigipar.cc:80
 htofdigipar.cc:81
 htofdigipar.cc:82
 htofdigipar.cc:83
 htofdigipar.cc:84
 htofdigipar.cc:85
 htofdigipar.cc:86
 htofdigipar.cc:87
 htofdigipar.cc:88
 htofdigipar.cc:89
 htofdigipar.cc:90
 htofdigipar.cc:91
 htofdigipar.cc:92
 htofdigipar.cc:93
 htofdigipar.cc:94
 htofdigipar.cc:95
 htofdigipar.cc:96
 htofdigipar.cc:97
 htofdigipar.cc:98
 htofdigipar.cc:99
 htofdigipar.cc:100
 htofdigipar.cc:101
 htofdigipar.cc:102
 htofdigipar.cc:103
 htofdigipar.cc:104
 htofdigipar.cc:105
 htofdigipar.cc:106
 htofdigipar.cc:107
 htofdigipar.cc:108
 htofdigipar.cc:109
 htofdigipar.cc:110
 htofdigipar.cc:111
 htofdigipar.cc:112
 htofdigipar.cc:113
 htofdigipar.cc:114
 htofdigipar.cc:115
 htofdigipar.cc:116
 htofdigipar.cc:117
 htofdigipar.cc:118
 htofdigipar.cc:119
 htofdigipar.cc:120
 htofdigipar.cc:121
 htofdigipar.cc:122
 htofdigipar.cc:123
 htofdigipar.cc:124
 htofdigipar.cc:125
 htofdigipar.cc:126
 htofdigipar.cc:127
 htofdigipar.cc:128
 htofdigipar.cc:129
 htofdigipar.cc:130
 htofdigipar.cc:131
 htofdigipar.cc:132
 htofdigipar.cc:133
 htofdigipar.cc:134
 htofdigipar.cc:135
 htofdigipar.cc:136
 htofdigipar.cc:137
 htofdigipar.cc:138
 htofdigipar.cc:139
 htofdigipar.cc:140
 htofdigipar.cc:141
 htofdigipar.cc:142
 htofdigipar.cc:143
 htofdigipar.cc:144
 htofdigipar.cc:145
 htofdigipar.cc:146
 htofdigipar.cc:147
 htofdigipar.cc:148
 htofdigipar.cc:149
 htofdigipar.cc:150
 htofdigipar.cc:151
 htofdigipar.cc:152
 htofdigipar.cc:153
 htofdigipar.cc:154
 htofdigipar.cc:155
 htofdigipar.cc:156
 htofdigipar.cc:157
 htofdigipar.cc:158
 htofdigipar.cc:159
 htofdigipar.cc:160
 htofdigipar.cc:161
 htofdigipar.cc:162
 htofdigipar.cc:163
 htofdigipar.cc:164
 htofdigipar.cc:165
 htofdigipar.cc:166
 htofdigipar.cc:167
 htofdigipar.cc:168
 htofdigipar.cc:169
 htofdigipar.cc:170
 htofdigipar.cc:171
 htofdigipar.cc:172
 htofdigipar.cc:173
 htofdigipar.cc:174
 htofdigipar.cc:175
 htofdigipar.cc:176
 htofdigipar.cc:177
 htofdigipar.cc:178
 htofdigipar.cc:179
 htofdigipar.cc:180
 htofdigipar.cc:181
 htofdigipar.cc:182
 htofdigipar.cc:183
 htofdigipar.cc:184
 htofdigipar.cc:185
 htofdigipar.cc:186
 htofdigipar.cc:187
 htofdigipar.cc:188
 htofdigipar.cc:189
 htofdigipar.cc:190
 htofdigipar.cc:191
 htofdigipar.cc:192
 htofdigipar.cc:193
 htofdigipar.cc:194
 htofdigipar.cc:195
 htofdigipar.cc:196
 htofdigipar.cc:197
 htofdigipar.cc:198
 htofdigipar.cc:199
 htofdigipar.cc:200
 htofdigipar.cc:201
 htofdigipar.cc:202
 htofdigipar.cc:203
 htofdigipar.cc:204
 htofdigipar.cc:205
 htofdigipar.cc:206
 htofdigipar.cc:207
 htofdigipar.cc:208
 htofdigipar.cc:209
 htofdigipar.cc:210
 htofdigipar.cc:211
 htofdigipar.cc:212
 htofdigipar.cc:213
 htofdigipar.cc:214
 htofdigipar.cc:215
 htofdigipar.cc:216
 htofdigipar.cc:217