ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : Witold Przygoda (przygoda@psja1.if.uj.edu.pl)
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichPad
//
//  These classes contain definition of pads.
//
//////////////////////////////////////////////////////////////////////////////


#include "hades.h"
#include "hrichpad.h"
#include "hrichpadcorner.h"

using namespace std;

ClassImp(HRichPad)

HRichPad::HRichPad()
{
   fCornersNr = 0;
   fX = 0.;
   fY = 0.;
   fPadX = 0;
   fPadY = 0;
   fPadNr = 0;
   fXmin = 0.;
   fYmin = 0.;
   fXmax = 0.;
   fYmax = 0.;
   fPadFlag = 0;
   fAmplitFraction = 0.;
   fPadActive = kFALSE;

   fTheta = 0.;
   for (Int_t i = 0; i < 6; i++) {
      fXlab[i] = 0.;
      fYlab[i] = 0.;
      fZlab[i] = 0.;
      fPhi[i] = 0.;
   }
}

HRichPad::~HRichPad()
{
   reset();
}

HRichPad::HRichPad(const HRichPad& source):TObject(source)
{
   fCornersNr = 0; // this will be set to real number afterwards
   Int_t i;
   for (i = 0; i < source.fCornersNr; i++) {
      HRichPadCorner *pCor = new HRichPadCorner;
      *pCor = *((HRichPadCorner*)source.fPadCornersArray.At(i));
      addCorner(pCor);
   }

   fCornersNr = source.fCornersNr;
   fX = source.fX;
   fY = source.fY;
   fPadX = source.fPadX;
   fPadY = source.fPadY;
   fPadNr = source.fPadNr;
   fXmin = source.fXmin;
   fYmin = source.fYmin;
   fXmax = source.fXmax;
   fYmax = source.fYmax;
   fPadFlag = source.fPadFlag;
   fAmplitFraction = source.fAmplitFraction;
   fPadActive = source.fPadActive;
   fTheta = source.fTheta;
   for (Int_t i = 0; i < 6; i++) {
      fXlab[i] = source.fXlab[i];
      fYlab[i] = source.fYlab[i];
      fZlab[i] = source.fZlab[i];
      fPhi[i] = source.fPhi[i];
   }
}

HRichPad& HRichPad::operator=(const HRichPad& source)
{
   if (this != &source) {
      fX = source.fX;
      fY = source.fY;
      fPadX = source.fPadX;
      fPadY = source.fPadY;
      fPadNr = source.fPadNr;
      fXmin = source.fXmin;
      fYmin = source.fYmin;
      fXmax = source.fXmax;
      fYmax = source.fYmax;
      fPadFlag = source.fPadFlag;
      fAmplitFraction = source.fAmplitFraction;
      fPadActive = source.fPadActive;
      fTheta = source.fTheta;
      for (Int_t i = 0; i < 6; i++) {
         fXlab[i] = source.fXlab[i];
         fYlab[i] = source.fYlab[i];
         fZlab[i] = source.fZlab[i];
         fPhi[i] = source.fPhi[i];
      }
   }
   return *this;
}

void HRichPad::reset()
{
   fCornersNr = 0;
   fX = 0.;
   fY = 0.;
   fPadX = 0;
   fPadY = 0;
   fPadNr = 0;
   fPadFlag = 0;
   fAmplitFraction = 0.;
   fPadActive = kFALSE;
   fTheta = 0.;
   for (Int_t i = 0; i < 6; i++) {
      fXlab[i] = 0.;
      fYlab[i] = 0.;
      fZlab[i] = 0.;
      fPhi[i] = 0.;
   }
   if (fPadCornersArray.GetSize() > 0) {
      fPadCornersArray.Delete();
   }
}

void HRichPad::CalcNrtoXY(Int_t padsx)
{
   fPadX = fPadNr % padsx;
   fPadY = fPadNr / padsx;
}

void HRichPad::CalcXYtoNr(Int_t padsx)
{
   fPadNr = fPadX + padsx * fPadY;
}

void HRichPad::getXY(Float_t *pX, Float_t *pY)
{
   *pX = fX;
   *pY = fY;
}

void HRichPad::getPadXY(Int_t *pX, Int_t *pY)
{
   *pX = fPadX;
   *pY = fPadY;
}

void HRichPad::getXYZlab(const Int_t sec, Float_t *pX, Float_t *pY, Float_t *pZ)
{
   *pX = fXlab[sec];
   *pY = fYlab[sec];
   *pZ = fZlab[sec];
}

void HRichPad::getAngles(const Int_t sec, Float_t *pTheta, Float_t *pPhi)
{
   *pTheta = fTheta;
   *pPhi = fPhi[sec];
}


HRichPadCorner* HRichPad::getCorner(Int_t n)
{
   if (n < 0 || n >= fCornersNr) return NULL;
   return (HRichPadCorner*)fPadCornersArray.At(n);
}

Int_t HRichPad::addCorner(HRichPadCorner* corner)
{
   fPadCornersArray.Add(corner);
   return fCornersNr++;
}

Int_t HRichPad::setCorner(HRichPadCorner* corner, Int_t n)
{
   if (n < 0 || n >= fCornersNr) return 0;
   delete fPadCornersArray.At(n);
   fPadCornersArray.AddAt(corner, n);
   return 1;
}

void HRichPad::calcPadCenter()
{

   Int_t i;
   Float_t xcor = 0., ycor = 0., xsum = 0., ysum = 0.;

   for (i = 0; i < fCornersNr; i++) {
      getCorner(i)->getXY(&xcor, &ycor);
      xsum += xcor;
      ysum += ycor;
   }
   fX = xsum / fCornersNr;
   fY = ysum / fCornersNr;
}

Bool_t HRichPad::isOut(Float_t x, Float_t y)
{
   Int_t i, areaFlag1;
   Float_t xcor1, ycor1, xcor2, ycor2, a , b;

   for (i = 0; i < fCornersNr; i++) {

      getCorner(i)->getXY(&xcor1, &ycor1);
      areaFlag1 = getCorner(i)->getAreaFlag();
      if (i + 1 < fCornersNr) {
         getCorner(i + 1)->getXY(&xcor2, &ycor2);
      } else {
         getCorner(0)->getXY(&xcor2, &ycor2);
      }

      if (xcor1 == xcor2) {

         if (areaFlag1 > 0) {
            if (x < xcor1) return kTRUE;
         } else {
            if (x > xcor1) return kTRUE;
         }

      } else if (ycor1 == ycor2) {

         if (areaFlag1 > 0) {
            if (y < ycor1) return kTRUE;
         } else {
            if (y > ycor1) return kTRUE;
         }

      } else {

         a = (ycor2 - ycor1) / (xcor2 - xcor1);
         b = (xcor2 * ycor1 - xcor1 * ycor2) / (xcor2 - xcor1);

         if (areaFlag1 > 0) {
            if (y < a * x + b) return kTRUE;
         } else {
            if (y > a * x + b) return kTRUE;
         }

      }

   } // end of loop over all corners

   return kFALSE;
}

Bool_t HRichPad::isOutX(Float_t x)
{

   Int_t i, areaFlag1;
   Float_t xcor1, ycor1, xcor2, ycor2;

   for (i = 0; i < fCornersNr; i++) {

      getCorner(i)->getXY(&xcor1, &ycor1);
      if (i + 1 < fCornersNr) getCorner(i + 1)->getXY(&xcor2, &ycor2);
      else getCorner(0)->getXY(&xcor2, &ycor2);

      if (xcor1 == xcor2) {
         areaFlag1 = getCorner(i)->getAreaFlag();
         if (areaFlag1 > 0) {
            if (x < xcor1) return kTRUE;
         } else {
            if (x > xcor1) return kTRUE;
         }
      }

   } // end of loop over all corners

   return kFALSE;
}
 hrichpad.cc:1
 hrichpad.cc:2
 hrichpad.cc:3
 hrichpad.cc:4
 hrichpad.cc:5
 hrichpad.cc:6
 hrichpad.cc:7
 hrichpad.cc:8
 hrichpad.cc:9
 hrichpad.cc:10
 hrichpad.cc:11
 hrichpad.cc:12
 hrichpad.cc:13
 hrichpad.cc:14
 hrichpad.cc:15
 hrichpad.cc:16
 hrichpad.cc:17
 hrichpad.cc:18
 hrichpad.cc:19
 hrichpad.cc:20
 hrichpad.cc:21
 hrichpad.cc:22
 hrichpad.cc:23
 hrichpad.cc:24
 hrichpad.cc:25
 hrichpad.cc:26
 hrichpad.cc:27
 hrichpad.cc:28
 hrichpad.cc:29
 hrichpad.cc:30
 hrichpad.cc:31
 hrichpad.cc:32
 hrichpad.cc:33
 hrichpad.cc:34
 hrichpad.cc:35
 hrichpad.cc:36
 hrichpad.cc:37
 hrichpad.cc:38
 hrichpad.cc:39
 hrichpad.cc:40
 hrichpad.cc:41
 hrichpad.cc:42
 hrichpad.cc:43
 hrichpad.cc:44
 hrichpad.cc:45
 hrichpad.cc:46
 hrichpad.cc:47
 hrichpad.cc:48
 hrichpad.cc:49
 hrichpad.cc:50
 hrichpad.cc:51
 hrichpad.cc:52
 hrichpad.cc:53
 hrichpad.cc:54
 hrichpad.cc:55
 hrichpad.cc:56
 hrichpad.cc:57
 hrichpad.cc:58
 hrichpad.cc:59
 hrichpad.cc:60
 hrichpad.cc:61
 hrichpad.cc:62
 hrichpad.cc:63
 hrichpad.cc:64
 hrichpad.cc:65
 hrichpad.cc:66
 hrichpad.cc:67
 hrichpad.cc:68
 hrichpad.cc:69
 hrichpad.cc:70
 hrichpad.cc:71
 hrichpad.cc:72
 hrichpad.cc:73
 hrichpad.cc:74
 hrichpad.cc:75
 hrichpad.cc:76
 hrichpad.cc:77
 hrichpad.cc:78
 hrichpad.cc:79
 hrichpad.cc:80
 hrichpad.cc:81
 hrichpad.cc:82
 hrichpad.cc:83
 hrichpad.cc:84
 hrichpad.cc:85
 hrichpad.cc:86
 hrichpad.cc:87
 hrichpad.cc:88
 hrichpad.cc:89
 hrichpad.cc:90
 hrichpad.cc:91
 hrichpad.cc:92
 hrichpad.cc:93
 hrichpad.cc:94
 hrichpad.cc:95
 hrichpad.cc:96
 hrichpad.cc:97
 hrichpad.cc:98
 hrichpad.cc:99
 hrichpad.cc:100
 hrichpad.cc:101
 hrichpad.cc:102
 hrichpad.cc:103
 hrichpad.cc:104
 hrichpad.cc:105
 hrichpad.cc:106
 hrichpad.cc:107
 hrichpad.cc:108
 hrichpad.cc:109
 hrichpad.cc:110
 hrichpad.cc:111
 hrichpad.cc:112
 hrichpad.cc:113
 hrichpad.cc:114
 hrichpad.cc:115
 hrichpad.cc:116
 hrichpad.cc:117
 hrichpad.cc:118
 hrichpad.cc:119
 hrichpad.cc:120
 hrichpad.cc:121
 hrichpad.cc:122
 hrichpad.cc:123
 hrichpad.cc:124
 hrichpad.cc:125
 hrichpad.cc:126
 hrichpad.cc:127
 hrichpad.cc:128
 hrichpad.cc:129
 hrichpad.cc:130
 hrichpad.cc:131
 hrichpad.cc:132
 hrichpad.cc:133
 hrichpad.cc:134
 hrichpad.cc:135
 hrichpad.cc:136
 hrichpad.cc:137
 hrichpad.cc:138
 hrichpad.cc:139
 hrichpad.cc:140
 hrichpad.cc:141
 hrichpad.cc:142
 hrichpad.cc:143
 hrichpad.cc:144
 hrichpad.cc:145
 hrichpad.cc:146
 hrichpad.cc:147
 hrichpad.cc:148
 hrichpad.cc:149
 hrichpad.cc:150
 hrichpad.cc:151
 hrichpad.cc:152
 hrichpad.cc:153
 hrichpad.cc:154
 hrichpad.cc:155
 hrichpad.cc:156
 hrichpad.cc:157
 hrichpad.cc:158
 hrichpad.cc:159
 hrichpad.cc:160
 hrichpad.cc:161
 hrichpad.cc:162
 hrichpad.cc:163
 hrichpad.cc:164
 hrichpad.cc:165
 hrichpad.cc:166
 hrichpad.cc:167
 hrichpad.cc:168
 hrichpad.cc:169
 hrichpad.cc:170
 hrichpad.cc:171
 hrichpad.cc:172
 hrichpad.cc:173
 hrichpad.cc:174
 hrichpad.cc:175
 hrichpad.cc:176
 hrichpad.cc:177
 hrichpad.cc:178
 hrichpad.cc:179
 hrichpad.cc:180
 hrichpad.cc:181
 hrichpad.cc:182
 hrichpad.cc:183
 hrichpad.cc:184
 hrichpad.cc:185
 hrichpad.cc:186
 hrichpad.cc:187
 hrichpad.cc:188
 hrichpad.cc:189
 hrichpad.cc:190
 hrichpad.cc:191
 hrichpad.cc:192
 hrichpad.cc:193
 hrichpad.cc:194
 hrichpad.cc:195
 hrichpad.cc:196
 hrichpad.cc:197
 hrichpad.cc:198
 hrichpad.cc:199
 hrichpad.cc:200
 hrichpad.cc:201
 hrichpad.cc:202
 hrichpad.cc:203
 hrichpad.cc:204
 hrichpad.cc:205
 hrichpad.cc:206
 hrichpad.cc:207
 hrichpad.cc:208
 hrichpad.cc:209
 hrichpad.cc:210
 hrichpad.cc:211
 hrichpad.cc:212
 hrichpad.cc:213
 hrichpad.cc:214
 hrichpad.cc:215
 hrichpad.cc:216
 hrichpad.cc:217
 hrichpad.cc:218
 hrichpad.cc:219
 hrichpad.cc:220
 hrichpad.cc:221
 hrichpad.cc:222
 hrichpad.cc:223
 hrichpad.cc:224
 hrichpad.cc:225
 hrichpad.cc:226
 hrichpad.cc:227
 hrichpad.cc:228
 hrichpad.cc:229
 hrichpad.cc:230
 hrichpad.cc:231
 hrichpad.cc:232
 hrichpad.cc:233
 hrichpad.cc:234
 hrichpad.cc:235
 hrichpad.cc:236
 hrichpad.cc:237
 hrichpad.cc:238
 hrichpad.cc:239
 hrichpad.cc:240
 hrichpad.cc:241
 hrichpad.cc:242
 hrichpad.cc:243
 hrichpad.cc:244
 hrichpad.cc:245
 hrichpad.cc:246
 hrichpad.cc:247
 hrichpad.cc:248
 hrichpad.cc:249
 hrichpad.cc:250
 hrichpad.cc:251
 hrichpad.cc:252
 hrichpad.cc:253
 hrichpad.cc:254
 hrichpad.cc:255
 hrichpad.cc:256
 hrichpad.cc:257
 hrichpad.cc:258
 hrichpad.cc:259
 hrichpad.cc:260
 hrichpad.cc:261
 hrichpad.cc:262
 hrichpad.cc:263
 hrichpad.cc:264
 hrichpad.cc:265
 hrichpad.cc:266
 hrichpad.cc:267
 hrichpad.cc:268
 hrichpad.cc:269
 hrichpad.cc:270
 hrichpad.cc:271
 hrichpad.cc:272
 hrichpad.cc:273
 hrichpad.cc:274
 hrichpad.cc:275
 hrichpad.cc:276
 hrichpad.cc:277
 hrichpad.cc:278
 hrichpad.cc:279
 hrichpad.cc:280
 hrichpad.cc:281
 hrichpad.cc:282