ROOT logo
//*-- Created : 26/02/2014 by I.Koenig
//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
// HStart2GeomPar
//
// Container class for the basic Start geometry parameters used in the Pion
// beamtime (9 diamonds, each with 4 pads and mounted in two layers)
//
// Independent of the number of modules in the detector setup, only module 0
// is initialized.
//////////////////////////////////////////////////////////////////////////////

using namespace std;
#include "hstart2geompar.h"
#include "hgeomcompositevolume.h"
#include "hpario.h"
#include "hdetpario.h"
#include <iostream> 
#include <iomanip>

ClassImp(HStart2GeomPar)

HStart2GeomPar::HStart2GeomPar(const Char_t* name,const Char_t* title,
                               const Char_t* context)
              : HDetGeomPar(name,title,context,"Start") {
  // constructor calling the base class constructor with the detector name
  strcpy(detName, "Start");
  maxComponents = 9;
  maxCells      = maxComponents * 4;
  labPos = new TObjArray(maxCells);
  if (modules) {
    for (Int_t i=1;i<maxModules;++i) {
      if (modules->At(i)) modules->RemoveAt(i); // geometry only defined for module 0
      if (refVolumes && refVolumes->At(i)) refVolumes->RemoveAt(i);
    }
  }
  numComponents = maxComponents;
}

HStart2GeomPar::~HStart2GeomPar() {
  // destructor
  if (labPos) {
    labPos->Delete();
    delete labPos;
    labPos=0;
  }
}


Bool_t HStart2GeomPar::init(HParIo* inp,Int_t* set) {
  // intitializes the container from an input
  Bool_t rc = kFALSE;
  HDetParIo* input=inp->getDetParIo("HStartParIo");
  if (input) {
    for (Int_t i=1;i<maxModules;++i) set[i]=0;
    rc = input->init(this,set);
    if (rc) calcLabPositions();
  }
  return rc;
}

Int_t HStart2GeomPar::write(HParIo* output) {
  // writes the container to an output
  HDetParIo* out=output->getDetParIo("HStartParIo");
  if (out) return out->write(this);
  return -1;
}

Int_t HStart2GeomPar::getCellIndex(Int_t compNum, Float_t xPos, Float_t yPos) {
  // returns cell index at position xPos,yPos in diamond compNum
  // Special geometry: 3 x 3 diamonds and each diamond is divided in 4 parts
  Int_t row=(Int_t)(compNum / 3);
  Int_t col=(compNum - row * 3) * 2;
  if (xPos>=0) col += 1;
  if (yPos>=0) row = row * 2 + 1;
  else row = row * 2; 
  return row * 6 + col;
}

void HStart2GeomPar::calcLabPositions(void) {
  // calculates the lab positions of a cell/strip
  if (changed) {
    HGeomCompositeVolume* refMod=getRefVolume(0);
    if (refMod) {
      HModGeomPar* module=getModule(0);
      if (module) {
        HGeomTransform trMod2Lab=module->getLabTransform();
        for(Int_t c=0;c<maxComponents;c++) {
          HGeomVolume* volu=refMod->getComponent(c);
          if (volu && strlen(volu->GetName())>0) {
            HGeomVector gPos=volu->getTransform().getTransVector();
            for (Int_t i=0;i<4;i++) {
              HGeomVector cPos =  *(volu->getPoint(i));
              cPos /= 2.;
              Int_t ind = getCellIndex(c,cPos.getX(),cPos.getY());
              cPos += gPos;
              HGeomVector* lpos=new HGeomVector;
              (*lpos)=trMod2Lab.transFrom(cPos);
              labPos->AddAt(lpos,ind);
            }
          }
        }
      }
    }      
  }   
}

void HStart2GeomPar::printLabPositions(void) {
  // prints the lab positions
  printf("Lab positions of the START detector cells\n");
  printf("cell xLab yLab zLab\n");
  for(Int_t i=0;i<=labPos->GetLast();i++) {
    HGeomVector* v=(HGeomVector*)(labPos->At(i));
    if (v) {
      printf("%i %9.3f %9.3f %9.3f \n",i,v->getX(),v->getY(),v->getZ());
    }
  }
}
 hstart2geompar.cc:1
 hstart2geompar.cc:2
 hstart2geompar.cc:3
 hstart2geompar.cc:4
 hstart2geompar.cc:5
 hstart2geompar.cc:6
 hstart2geompar.cc:7
 hstart2geompar.cc:8
 hstart2geompar.cc:9
 hstart2geompar.cc:10
 hstart2geompar.cc:11
 hstart2geompar.cc:12
 hstart2geompar.cc:13
 hstart2geompar.cc:14
 hstart2geompar.cc:15
 hstart2geompar.cc:16
 hstart2geompar.cc:17
 hstart2geompar.cc:18
 hstart2geompar.cc:19
 hstart2geompar.cc:20
 hstart2geompar.cc:21
 hstart2geompar.cc:22
 hstart2geompar.cc:23
 hstart2geompar.cc:24
 hstart2geompar.cc:25
 hstart2geompar.cc:26
 hstart2geompar.cc:27
 hstart2geompar.cc:28
 hstart2geompar.cc:29
 hstart2geompar.cc:30
 hstart2geompar.cc:31
 hstart2geompar.cc:32
 hstart2geompar.cc:33
 hstart2geompar.cc:34
 hstart2geompar.cc:35
 hstart2geompar.cc:36
 hstart2geompar.cc:37
 hstart2geompar.cc:38
 hstart2geompar.cc:39
 hstart2geompar.cc:40
 hstart2geompar.cc:41
 hstart2geompar.cc:42
 hstart2geompar.cc:43
 hstart2geompar.cc:44
 hstart2geompar.cc:45
 hstart2geompar.cc:46
 hstart2geompar.cc:47
 hstart2geompar.cc:48
 hstart2geompar.cc:49
 hstart2geompar.cc:50
 hstart2geompar.cc:51
 hstart2geompar.cc:52
 hstart2geompar.cc:53
 hstart2geompar.cc:54
 hstart2geompar.cc:55
 hstart2geompar.cc:56
 hstart2geompar.cc:57
 hstart2geompar.cc:58
 hstart2geompar.cc:59
 hstart2geompar.cc:60
 hstart2geompar.cc:61
 hstart2geompar.cc:62
 hstart2geompar.cc:63
 hstart2geompar.cc:64
 hstart2geompar.cc:65
 hstart2geompar.cc:66
 hstart2geompar.cc:67
 hstart2geompar.cc:68
 hstart2geompar.cc:69
 hstart2geompar.cc:70
 hstart2geompar.cc:71
 hstart2geompar.cc:72
 hstart2geompar.cc:73
 hstart2geompar.cc:74
 hstart2geompar.cc:75
 hstart2geompar.cc:76
 hstart2geompar.cc:77
 hstart2geompar.cc:78
 hstart2geompar.cc:79
 hstart2geompar.cc:80
 hstart2geompar.cc:81
 hstart2geompar.cc:82
 hstart2geompar.cc:83
 hstart2geompar.cc:84
 hstart2geompar.cc:85
 hstart2geompar.cc:86
 hstart2geompar.cc:87
 hstart2geompar.cc:88
 hstart2geompar.cc:89
 hstart2geompar.cc:90
 hstart2geompar.cc:91
 hstart2geompar.cc:92
 hstart2geompar.cc:93
 hstart2geompar.cc:94
 hstart2geompar.cc:95
 hstart2geompar.cc:96
 hstart2geompar.cc:97
 hstart2geompar.cc:98
 hstart2geompar.cc:99
 hstart2geompar.cc:100
 hstart2geompar.cc:101
 hstart2geompar.cc:102
 hstart2geompar.cc:103
 hstart2geompar.cc:104
 hstart2geompar.cc:105
 hstart2geompar.cc:106
 hstart2geompar.cc:107
 hstart2geompar.cc:108
 hstart2geompar.cc:109
 hstart2geompar.cc:110
 hstart2geompar.cc:111
 hstart2geompar.cc:112
 hstart2geompar.cc:113
 hstart2geompar.cc:114
 hstart2geompar.cc:115
 hstart2geompar.cc:116
 hstart2geompar.cc:117
 hstart2geompar.cc:118