//*-- Author : G.Agakishiev

using namespace std;
#include <iostream>
#include <iomanip>

#include "hmdcalignerparam.h"
#include "hmdcalignerd.h"
#include "hmdclookuptb.h"
#include "hmdcgetcontainers.h"
#include "hgeomcompositevolume.h"

ClassImp(HMdcAlignerParam)

 HMdcAlignerParam::HMdcAlignerParam(void) {

   cluster = kFALSE;
   offset = kFALSE;
   firstFile = kTRUE;
   firstMod = -1;
   lastMod  = -1;

}
 HMdcAlignerParam::HMdcAlignerParam(const HMdcAlignerParam& ap) {

   copy(ap);
   cluster = kFALSE;
   offset = kFALSE;
   firstFile = kTRUE;

   
}

 HMdcAlignerParam::HMdcAlignerParam(Int_t alsec, Double_t * par, Double_t * st, Int_t * fl, HMdcLookUpTb * look) {

   alignSec = alsec;
   fLookUpTb = look;
   cluster = kFALSE;
   offset = kFALSE;
   firstFile = kTRUE;
   
   setAlignParams(par);
   setSteps(st);
   setFlags(fl);
   setMinParams();
   setPlanes();
   setNewPosition();
   
}

 void HMdcAlignerParam::init() {

   fLookUpTb=HMdcLookUpTb::getObject();
   if(firstFile) {
      setMinParams();
      setPlanes();
      setOriginalTransforms();
      setActualTransforms();
      setNewPosition(minParams,offset);
      firstFile = kFALSE;
   }

}
   
 void HMdcAlignerParam::setNewPosition(Double_t * minPar, Int_t offset) {
   
   HMdcSizesCells* fSizesCells   =  HMdcSizesCells::getObject();

   HMdcSizesCellsSec& fSCSec = (*fSizesCells)[alignSec];
   
   if(minPar == 0) minPar = minParams;

   setNewAlignParams(minPar);
   
   Double_t alignPar[6]; 
   Double_t corr[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 
   HGeomTransform alignTrans;

   switch(offset) {
   case 0:
      alignPar[0] = alignParams[0];
      alignPar[1] = alignParams[1];
      alignPar[2] = alignParams[2];
      alignPar[3] = alignParams[3];
      alignPar[4] = alignParams[4];
      alignPar[5] = alignParams[5];
      HMdcSizesCells::setTransform(alignPar, alignTrans);
      if(fSCSec.modStatus(0)) fSizesCells->fillModCont(alignSec,0,&alignTrans,1);
      alignPar[0] = alignParams[6];
      alignPar[1] = alignParams[7];
      alignPar[2] = alignParams[8];
      alignPar[3] = alignParams[9];
      alignPar[4] = alignParams[10];
      alignPar[5] = alignParams[11];
      HMdcSizesCells::setTransform(alignPar, alignTrans);
      if(fSCSec.modStatus(1)) fSizesCells->fillModCont(alignSec,1,&alignTrans,1);
      alignPar[0] = alignParams[12];
      alignPar[1] = alignParams[13];
      alignPar[2] = alignParams[14];
      alignPar[3] = alignParams[15];
      alignPar[4] = alignParams[16];
      alignPar[5] = alignParams[17];
      HMdcSizesCells::setTransform(alignPar, alignTrans);
      if(fSCSec.modStatus(2)) fSizesCells->fillModCont(alignSec,2,&alignTrans,1);
      alignPar[0] = alignParams[18];
      alignPar[1] = alignParams[19];
      alignPar[2] = alignParams[20];
      alignPar[3] = alignParams[21];
      alignPar[4] = alignParams[22];
      alignPar[5] = alignParams[23];
      HMdcSizesCells::setTransform(alignPar, alignTrans);
      if(fSCSec.modStatus(3)) fSizesCells->fillModCont(alignSec,3,&alignTrans,1);
      break;
   case 1:
      corr[0] = alignParams[0];
      corr[1] = alignParams[1];
      corr[2] = alignParams[2];
      corr[3] = alignParams[3];
      corr[4] = alignParams[4];
      corr[5] = alignParams[5];
      if(fSCSec.modStatus(0)) fSizesCells->fillModCont(alignSec,0,corr);
      corr[0] = alignParams[6];
      corr[1] = alignParams[7];
      corr[2] = alignParams[8];
      corr[3] = alignParams[9];
      corr[4] = alignParams[10];
      corr[5] = alignParams[11];
      if(fSCSec.modStatus(1)) fSizesCells->fillModCont(alignSec,1,corr);
      corr[0] = alignParams[12];
      corr[1] = alignParams[13];
      corr[2] = alignParams[14];
      corr[3] = alignParams[15];
      corr[4] = alignParams[16];
      corr[5] = alignParams[17];
      if(fSCSec.modStatus(2)) fSizesCells->fillModCont(alignSec,2,corr);
      corr[0] = alignParams[18];
      corr[1] = alignParams[19];
      corr[2] = alignParams[20];
      corr[3] = alignParams[21];
      corr[4] = alignParams[22];
      corr[5] = alignParams[23];
      if(fSCSec.modStatus(3)) fSizesCells->fillModCont(alignSec,3,corr);
      break;
   case 2:
      corr[6] = alignParams[0];
      corr[7] = alignParams[1];
      corr[8] = alignParams[2];
      corr[9] = alignParams[3];
      corr[10] = alignParams[4];
      corr[11] = alignParams[5];
      if(fSCSec.modStatus(0)) fSizesCells->fillModCont(alignSec,0,corr);
      corr[6] = alignParams[6];
      corr[7] = alignParams[7];
      corr[8] = alignParams[8];
      corr[9] = alignParams[9];
      corr[10] = alignParams[10];
      corr[11] = alignParams[11];
      if(fSCSec.modStatus(1)) fSizesCells->fillModCont(alignSec,1,corr);
      corr[6] = alignParams[12];
      corr[7] = alignParams[13];
      corr[8] = alignParams[14];
      corr[9] = alignParams[15];
      corr[10] = alignParams[16];
      corr[11] = alignParams[17];
      if(fSCSec.modStatus(2)) fSizesCells->fillModCont(alignSec,2,corr);
      corr[6] = alignParams[18];
      corr[7] = alignParams[19];
      corr[8] = alignParams[20];
      corr[9] = alignParams[21];
      corr[10] = alignParams[22];
      corr[11] = alignParams[23];
      if(fSCSec.modStatus(3)) fSizesCells->fillModCont(alignSec,3,corr);
      break;
   case 3:
      corr[12] = alignParams[0] + alignParams[1] + alignParams[2];
      corr[13] = alignParams[1] + alignParams[2];
      corr[14] = alignParams[2];
      corr[15] = alignParams[3];
      corr[16] = alignParams[4] + alignParams[3];
      corr[17] = alignParams[5] + alignParams[4] + alignParams[3];
      if(fSCSec.modStatus(0)) fSizesCells->fillModCont(alignSec,0,corr);
      corr[12] = alignParams[6] + alignParams[7] + alignParams[8];
      corr[13] = alignParams[7] + alignParams[8];
      corr[14] = alignParams[8];
      corr[15] = alignParams[9];
      corr[16] = alignParams[10] + alignParams[9];
      corr[17] = alignParams[11] + alignParams[10] + alignParams[9];
      if(fSCSec.modStatus(1)) fSizesCells->fillModCont(alignSec,1,corr);
      corr[12] = alignParams[12] + alignParams[13] + alignParams[14];  
      corr[13] = alignParams[13] + alignParams[14];		    
      corr[14] = alignParams[14];
      corr[15] = alignParams[15];
      corr[16] = alignParams[16] + alignParams[15];		    
      corr[17] = alignParams[17] + alignParams[16] + alignParams[15];
      if(fSCSec.modStatus(2)) fSizesCells->fillModCont(alignSec,2,corr);
      corr[12] = alignParams[18] + alignParams[19] + alignParams[20];;
      corr[13] = alignParams[19] + alignParams[20];		     ;
      corr[14] = alignParams[20];
      corr[15] = alignParams[21];
      corr[16] = alignParams[22] + alignParams[21];		     ;
      corr[17] = alignParams[23] + alignParams[22] + alignParams[21];;
      if(fSCSec.modStatus(3)) fSizesCells->fillModCont(alignSec,3,corr);
      break;
   }

   fLookUpTb->initContainer();
   
}

 Bool_t HMdcAlignerParam::setPlanes() {
   
  HMdcSizesCells* fSizesCells   =  HMdcSizesCells::getObject();
  HMdcSizesCellsSec& fSizesCellsSec = (*fSizesCells)[alignSec];
  
  firstMod = -1;
  lastMod = -1;
  for(Int_t iMod = 0; iMod < 4; iMod++) {
     if(fSizesCellsSec.modStatus(iMod) && firstMod < 0) firstMod = iMod;
     if(fSizesCellsSec.modStatus(iMod) && firstMod >= 0) lastMod = iMod;
  }
  
  if(firstMod < 0 || lastMod < 0) return kFALSE;
  
  fSizesCellsFirstMod = &(fSizesCellsSec[firstMod]); 
  fSizesCellsLastMod  = &(fSizesCellsSec[lastMod]);

  return kTRUE;
  
}

 void HMdcAlignerParam::printTransforms(Double_t * targetPar) {

   HMdcSizesCells* fSizesCells   =  HMdcSizesCells::getObject();
   HMdcSizesCellsSec& fSCSec = (*fSizesCells)[alignSec];
   const HGeomTransform * sysRLab = fSCSec.getLabTrans();
   cout.precision(10);

      
//    HGeomVector chamberVol[4][8];  // Drift gas vol. (8-points)
//    for(Int_t cham=0; cham<3; cham++) {
//       HGeomCompositeVolume * fComVol = fGetCont->getGeomCompositeVolume(cham);
//       for(Int_t point=0; point<8; point++) {
// 	 chamberVol[cham][point] = *(fComVol->getPoint(point));
// 	 cout << cham << " " << point << " " << chamberVol[cham][point] << endl;
//       }
//    }
//    HGeomVector chamberVol[4][8];  // Drift gas vol. (8-points)
//    for(Int_t cham=0; cham<3; cham++) {
//       HGeomCompositeVolume * fComVol = fGetCont->getGeomCompositeVolume(cham);
//       for(Int_t point=0; point<8; point++) {
// 	 chamberVol[cham][point] = *(fComVol->getPoint(point));
// 	 cout << cham << " " << point << " " << chamberVol[cham][point] << endl;
//       }
//    }
	 


   HGeomTransform targetTrans;
   if(targetPar != 0) HMdcSizesCells::setTransform(targetPar, targetTrans);

   cout << " original sec transforms " << endl;
   
   for(Int_t modNum=0; modNum<4; modNum++) sysRSecOrg[modNum].print();

   cout << " original lab transforms " << endl;
   
   for(Int_t modNum=0; modNum<4; modNum++) sysRSecOrg[modNum].transFrom(*sysRLab);

   for(Int_t modNum=0; modNum<4; modNum++) sysRSecOrg[modNum].print();

   setActualTransforms();
   
   cout << " actual sector transforms " << endl;

   for(Int_t modNum=0; modNum<4; modNum++) sysRSec[modNum].print();
   

//    cout << " target transforms " << endl;

//    targetTrans.print();

//    cout << " actual sector transforms corrected for target position" << endl;

//    sysRSec0.transTo(targetTrans);
//    sysRSec1.transTo(targetTrans);
//    sysRSec2.transTo(targetTrans);
//    sysRSec3.transTo(targetTrans);
   
//    sysRSec0.print();
//    sysRSec1.print();
//    sysRSec2.print();
//    sysRSec3.print();
   
   cout << " actual lab transforms " << endl;
   
   for(Int_t modNum=0; modNum<4; modNum++) sysRSec[modNum].transFrom(*sysRLab);

   for(Int_t modNum=0; modNum<4; modNum++) sysRSec[modNum].print();
   
   HMdcGetContainers * fGetCont = HMdcGetContainers::getObject();
   HGeomVector chamberVol[4][8];  // Drift gas vol. (8-points)
   for(Int_t cham=0; cham<4; cham++) {
      HGeomCompositeVolume * fComVol = fGetCont->getGeomCompositeVolume(cham);
      if(!fComVol) continue;
      for(Int_t point=0; point<8; point++) {
	 chamberVol[cham][point] = *(fComVol->getPoint(point));
	 chamberVol[cham][point] = sysRSec[cham].transFrom(chamberVol[cham][point]);
	 cout << alignSec << " " << cham << " " << point << " " << chamberVol[cham][point] << endl;
      }
   }
//    sysRSec0.transFrom(*sysRLab);
//    sysRSec1.transFrom(*sysRLab);
//    sysRSec2.transFrom(*sysRLab);
//    sysRSec3.transFrom(*sysRLab);

//    sysRSec0.print();
//    sysRSec1.print();
//    sysRSec2.print();
//    sysRSec3.print();
   
   
//    cout << " final transforms" << endl;

//    sysRSec0.transTo(sysRSec0Org);
//    sysRSec1.transTo(sysRSec1Org);
//    sysRSec2.transTo(sysRSec2Org);
//    sysRSec3.transTo(sysRSec3Org);
	 
//    sysRSec0.print();
//    sysRSec1.print();
//    sysRSec2.print();
//    sysRSec3.print();

}
   


ROOT page - Class index - Class Hierarchy - Top of the page

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.