ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : RICH team member
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichGeometryPar
//
//
//////////////////////////////////////////////////////////////////////////////


#include "TMath.h"

#include "hades.h"
#include "hparamlist.h"
#include "hrichdetector.h"
#include "hrichgeometrypar.h"
#include "hspectrometer.h"
#include "richdef.h"

#include <cmath>
#include <iostream>

using namespace std;

ClassImp(HRichGeometryPar)

HRichGeometryPar::HRichGeometryPar(const Char_t* name,
                                   const Char_t* title,
                                   const Char_t* context)
   : HParCond(name, title, context)
{
   clear();
}

HRichGeometryPar::~HRichGeometryPar()
{
   clear();
}

void
HRichGeometryPar::clear()
{
   fSectorsNr         = 0;
   fColumns           = 0;
   fRows              = 0;
   fDistanceWiresPads = 0.;
   fSectorShift       = 0.;

   fSectorPhi.Set(6);
   fSectorActive.Set(6);
   fSectorPhi.Reset(0.);
   fSectorActive.Reset(0);
}

void
HRichGeometryPar::initParameters()
{
// Here we calculate x, y, z in LAB and phi and store it for each pad.
// The calculated phi value is compared to the value stored in oracle

   Float_t x;
   Float_t y;
   Float_t z;
   Float_t xl;
   Float_t yl;
   Float_t zl;
   Float_t len;
   Float_t phi;
   Float_t sphi;

   for (Int_t i = 0; i < 6; i++) {
      if (getSectorActive(i) > 0) {
         for (Int_t j = 0; j < getPadsNr(); j++) {
            x = fPads.getPad(j)->getY(); // local y is X in lab before rotation and shift
            y = fPads.getPad(j)->getX(); // local x is Y in lab before rotation and shift
            z = 0.;

            xl = cos(20. * TMath::DegToRad()) * x;
            yl = y;
            zl = sin(20. * TMath::DegToRad()) * x;

            //   xl += fSectorShift;

            x = cos(fSectorPhi[i] * TMath::DegToRad()) * xl -
                sin(fSectorPhi[i] * TMath::DegToRad()) * yl;
            y = sin(fSectorPhi[i] * TMath::DegToRad()) * xl +
                cos(fSectorPhi[i] * TMath::DegToRad()) * yl;
            z = zl;

            fPads.getPad(j)->setXYZlab(i, x, y, z);

            len = sqrt(xl * xl + yl * yl);
            phi = 0.;
            if (len > 0)
               phi = TMath::RadToDeg() * acos(xl / len);
            if (yl < 0)
               phi *= -1.;

            phi += fSectorPhi[i];

            sphi = fPads.getPad(j)->getPhi(i);
            if (sphi > 0. && sphi - phi > 1.e-2) {
               Error("initParameters", "Inconsistency between phi from param source and calculated phi");
               Error("initParameters", "(from pad plane coord in mm)");
               Error("initParameters", "ora phi: % f,  calc phi: % f", sphi, phi);
            }

            fPads.getPad(j)->setPhi(i, phi);

         }
      }
   }
}

Bool_t
HRichGeometryPar::getParams(HParamList* l)
{

   HRichDetector *pRichDet = static_cast<HRichDetector*>(gHades->getSetup()->getDetector("Rich"));
   if (NULL == pRichDet) {
      Error("getParams", "Pointer to RICH Detector not initialized...");
      return kFALSE;
   }

   for (Int_t i = 0; i < 6; ++i) {
      fSectorActive[i] = pRichDet->getModule(i, 0);
      if (fSectorActive[i] > 0) {
         fSectorsNr++;
      }
   }
   if (fSectorsNr > 0) {
      fColumns = RICH_MAX_COLS;
      fRows    = RICH_MAX_ROWS;
   }

   // sector parameters
   for (Int_t i = 0; i < 6; ++i) {
      if (fSectorActive[i] > 0) {
         switch (i) {
            case 0:
               fSectorPhi[i] = 90.;
               break;
            case 1:
               fSectorPhi[i] = 150.;
               break;
            case 2:
               fSectorPhi[i] = 210.;
               break;
            case 3:
               fSectorPhi[i] = 270.;
               break;
            case 4:
               fSectorPhi[i] = 330.;
               break;
            case 5:
               fSectorPhi[i] = 30.;
               break;
         }
      }
   }

   if (NULL == l) return kFALSE;
   if (kFALSE == l->fill("fDistanceWiresPads", &fDistanceWiresPads)) return kFALSE;
   if (kFALSE == l->fill("fSectorShift", &fSectorShift)) return kFALSE;

   if (fSectorsNr > 0) {
      if (kFALSE == fFrame.getParams(l)) return kFALSE;
      if (kFALSE == fWires.getParams(l)) return kFALSE;
      if (kFALSE == fPads.getParams(l))  return kFALSE;
   }

   initParameters();

#if DEBUG_LEVEL > 1
   printParams();
#endif
   return kTRUE;
}

void
HRichGeometryPar::printParams()
{
   cout << "HRichGeometryParameters" << endl;
   cout << "==========================================" << endl;
   cout << "fDistanceWiresPads     " << fDistanceWiresPads << endl;
   cout << "fSectorShift           " << fSectorShift << endl;
   cout << endl;

   fFrame.printParams();
   fWires.printParams();

#if DEBUG_LEVEL > 2
   fPads.printParams();
#endif

}

void
HRichGeometryPar::putParams(HParamList* l)
{
   if (NULL == l) return;
   l->add("fDistanceWiresPads", fDistanceWiresPads);
   l->add("fSectorShift", fSectorShift);

   if (fSectorsNr > 0) {
      fFrame.putParams(l);
      fWires.putParams(l);
      fPads.putParams(l);
   }
}
 hrichgeometrypar.cc:1
 hrichgeometrypar.cc:2
 hrichgeometrypar.cc:3
 hrichgeometrypar.cc:4
 hrichgeometrypar.cc:5
 hrichgeometrypar.cc:6
 hrichgeometrypar.cc:7
 hrichgeometrypar.cc:8
 hrichgeometrypar.cc:9
 hrichgeometrypar.cc:10
 hrichgeometrypar.cc:11
 hrichgeometrypar.cc:12
 hrichgeometrypar.cc:13
 hrichgeometrypar.cc:14
 hrichgeometrypar.cc:15
 hrichgeometrypar.cc:16
 hrichgeometrypar.cc:17
 hrichgeometrypar.cc:18
 hrichgeometrypar.cc:19
 hrichgeometrypar.cc:20
 hrichgeometrypar.cc:21
 hrichgeometrypar.cc:22
 hrichgeometrypar.cc:23
 hrichgeometrypar.cc:24
 hrichgeometrypar.cc:25
 hrichgeometrypar.cc:26
 hrichgeometrypar.cc:27
 hrichgeometrypar.cc:28
 hrichgeometrypar.cc:29
 hrichgeometrypar.cc:30
 hrichgeometrypar.cc:31
 hrichgeometrypar.cc:32
 hrichgeometrypar.cc:33
 hrichgeometrypar.cc:34
 hrichgeometrypar.cc:35
 hrichgeometrypar.cc:36
 hrichgeometrypar.cc:37
 hrichgeometrypar.cc:38
 hrichgeometrypar.cc:39
 hrichgeometrypar.cc:40
 hrichgeometrypar.cc:41
 hrichgeometrypar.cc:42
 hrichgeometrypar.cc:43
 hrichgeometrypar.cc:44
 hrichgeometrypar.cc:45
 hrichgeometrypar.cc:46
 hrichgeometrypar.cc:47
 hrichgeometrypar.cc:48
 hrichgeometrypar.cc:49
 hrichgeometrypar.cc:50
 hrichgeometrypar.cc:51
 hrichgeometrypar.cc:52
 hrichgeometrypar.cc:53
 hrichgeometrypar.cc:54
 hrichgeometrypar.cc:55
 hrichgeometrypar.cc:56
 hrichgeometrypar.cc:57
 hrichgeometrypar.cc:58
 hrichgeometrypar.cc:59
 hrichgeometrypar.cc:60
 hrichgeometrypar.cc:61
 hrichgeometrypar.cc:62
 hrichgeometrypar.cc:63
 hrichgeometrypar.cc:64
 hrichgeometrypar.cc:65
 hrichgeometrypar.cc:66
 hrichgeometrypar.cc:67
 hrichgeometrypar.cc:68
 hrichgeometrypar.cc:69
 hrichgeometrypar.cc:70
 hrichgeometrypar.cc:71
 hrichgeometrypar.cc:72
 hrichgeometrypar.cc:73
 hrichgeometrypar.cc:74
 hrichgeometrypar.cc:75
 hrichgeometrypar.cc:76
 hrichgeometrypar.cc:77
 hrichgeometrypar.cc:78
 hrichgeometrypar.cc:79
 hrichgeometrypar.cc:80
 hrichgeometrypar.cc:81
 hrichgeometrypar.cc:82
 hrichgeometrypar.cc:83
 hrichgeometrypar.cc:84
 hrichgeometrypar.cc:85
 hrichgeometrypar.cc:86
 hrichgeometrypar.cc:87
 hrichgeometrypar.cc:88
 hrichgeometrypar.cc:89
 hrichgeometrypar.cc:90
 hrichgeometrypar.cc:91
 hrichgeometrypar.cc:92
 hrichgeometrypar.cc:93
 hrichgeometrypar.cc:94
 hrichgeometrypar.cc:95
 hrichgeometrypar.cc:96
 hrichgeometrypar.cc:97
 hrichgeometrypar.cc:98
 hrichgeometrypar.cc:99
 hrichgeometrypar.cc:100
 hrichgeometrypar.cc:101
 hrichgeometrypar.cc:102
 hrichgeometrypar.cc:103
 hrichgeometrypar.cc:104
 hrichgeometrypar.cc:105
 hrichgeometrypar.cc:106
 hrichgeometrypar.cc:107
 hrichgeometrypar.cc:108
 hrichgeometrypar.cc:109
 hrichgeometrypar.cc:110
 hrichgeometrypar.cc:111
 hrichgeometrypar.cc:112
 hrichgeometrypar.cc:113
 hrichgeometrypar.cc:114
 hrichgeometrypar.cc:115
 hrichgeometrypar.cc:116
 hrichgeometrypar.cc:117
 hrichgeometrypar.cc:118
 hrichgeometrypar.cc:119
 hrichgeometrypar.cc:120
 hrichgeometrypar.cc:121
 hrichgeometrypar.cc:122
 hrichgeometrypar.cc:123
 hrichgeometrypar.cc:124
 hrichgeometrypar.cc:125
 hrichgeometrypar.cc:126
 hrichgeometrypar.cc:127
 hrichgeometrypar.cc:128
 hrichgeometrypar.cc:129
 hrichgeometrypar.cc:130
 hrichgeometrypar.cc:131
 hrichgeometrypar.cc:132
 hrichgeometrypar.cc:133
 hrichgeometrypar.cc:134
 hrichgeometrypar.cc:135
 hrichgeometrypar.cc:136
 hrichgeometrypar.cc:137
 hrichgeometrypar.cc:138
 hrichgeometrypar.cc:139
 hrichgeometrypar.cc:140
 hrichgeometrypar.cc:141
 hrichgeometrypar.cc:142
 hrichgeometrypar.cc:143
 hrichgeometrypar.cc:144
 hrichgeometrypar.cc:145
 hrichgeometrypar.cc:146
 hrichgeometrypar.cc:147
 hrichgeometrypar.cc:148
 hrichgeometrypar.cc:149
 hrichgeometrypar.cc:150
 hrichgeometrypar.cc:151
 hrichgeometrypar.cc:152
 hrichgeometrypar.cc:153
 hrichgeometrypar.cc:154
 hrichgeometrypar.cc:155
 hrichgeometrypar.cc:156
 hrichgeometrypar.cc:157
 hrichgeometrypar.cc:158
 hrichgeometrypar.cc:159
 hrichgeometrypar.cc:160
 hrichgeometrypar.cc:161
 hrichgeometrypar.cc:162
 hrichgeometrypar.cc:163
 hrichgeometrypar.cc:164
 hrichgeometrypar.cc:165
 hrichgeometrypar.cc:166
 hrichgeometrypar.cc:167
 hrichgeometrypar.cc:168
 hrichgeometrypar.cc:169
 hrichgeometrypar.cc:170
 hrichgeometrypar.cc:171
 hrichgeometrypar.cc:172
 hrichgeometrypar.cc:173
 hrichgeometrypar.cc:174
 hrichgeometrypar.cc:175
 hrichgeometrypar.cc:176
 hrichgeometrypar.cc:177
 hrichgeometrypar.cc:178
 hrichgeometrypar.cc:179
 hrichgeometrypar.cc:180
 hrichgeometrypar.cc:181
 hrichgeometrypar.cc:182
 hrichgeometrypar.cc:183
 hrichgeometrypar.cc:184
 hrichgeometrypar.cc:185
 hrichgeometrypar.cc:186
 hrichgeometrypar.cc:187
 hrichgeometrypar.cc:188
 hrichgeometrypar.cc:189
 hrichgeometrypar.cc:190
 hrichgeometrypar.cc:191
 hrichgeometrypar.cc:192
 hrichgeometrypar.cc:193
 hrichgeometrypar.cc:194
 hrichgeometrypar.cc:195
 hrichgeometrypar.cc:196
 hrichgeometrypar.cc:197
 hrichgeometrypar.cc:198
 hrichgeometrypar.cc:199
 hrichgeometrypar.cc:200
 hrichgeometrypar.cc:201
 hrichgeometrypar.cc:202
 hrichgeometrypar.cc:203
 hrichgeometrypar.cc:204
 hrichgeometrypar.cc:205
 hrichgeometrypar.cc:206
 hrichgeometrypar.cc:207
 hrichgeometrypar.cc:208
 hrichgeometrypar.cc:209
 hrichgeometrypar.cc:210
 hrichgeometrypar.cc:211
 hrichgeometrypar.cc:212
 hrichgeometrypar.cc:213
 hrichgeometrypar.cc:214
 hrichgeometrypar.cc:215
 hrichgeometrypar.cc:216