#include "AliMpMotifSpecial.h"
#include "AliMpMotifType.h"
#include "AliMpEncodePair.h"
#include "AliMpConstants.h"
#include "AliLog.h"
#include <TString.h>
#include <Riostream.h>
#include <TVector2.h>
ClassImp(AliMpMotifSpecial)
Int_t AliMpMotifSpecial::fgkPadDimensions2Size = 5;
AliMpMotifSpecial::AliMpMotifSpecial(const TString &id,
AliMpMotifType *motifType)
: AliMpVMotif(id,motifType),
fDimensionX(0.),
fDimensionY(0.),
fPadDimensionsVector(),
fNofPadDimensions2(0),
fPadDimensions2X(fgkPadDimensions2Size),
fPadDimensions2Y(fgkPadDimensions2Size)
{
}
AliMpMotifSpecial::AliMpMotifSpecial(TRootIOCtor* ioCtor):
AliMpVMotif(),
fDimensionX(0.),
fDimensionY(0.),
fPadDimensionsVector(ioCtor),
fNofPadDimensions2(),
fPadDimensions2X(),
fPadDimensions2Y()
{
}
AliMpMotifSpecial::~AliMpMotifSpecial()
{
}
void
AliMpMotifSpecial::GetPadDimensionsByIndices(MpPair_t localIndices,
Double_t& dx, Double_t& dy) const
{
GetPadDimensionsByIndices(AliMp::PairFirst(localIndices),
AliMp::PairSecond(localIndices),
dx, dy);
}
void
AliMpMotifSpecial::GetPadDimensionsByIndices(Int_t ixLocal, Int_t iyLocal,
Double_t& dx, Double_t& dy) const
{
if ( GetMotifType()->HasPadByLocalIndices(ixLocal, iyLocal) ) {
if (!fPadDimensionsVector.GetValue(ixLocal, iyLocal)) {
Warning("GetPadDimensionsByIndices","Indices outside limits");
dx = 0.;
dy = 0.;
}
else {
dx = ((TVector2*)fPadDimensionsVector.GetValue(ixLocal, iyLocal))->X();
dy = ((TVector2*)fPadDimensionsVector.GetValue(ixLocal, iyLocal))->Y();
}
}
else {
Warning("GetPadDimensionsByIndices","Indices outside limits");
dx = 0.;
dy = 0.;
}
}
Int_t AliMpMotifSpecial::GetNofPadDimensions() const
{
return fNofPadDimensions2;
}
Double_t AliMpMotifSpecial::GetPadDimensionX(Int_t i) const
{
if ( i < 0 || i > fNofPadDimensions2 ) {
AliFatal("Index outside limits.");
return 0;
}
return fPadDimensions2X[i];
}
Double_t AliMpMotifSpecial::GetPadDimensionY(Int_t i) const
{
if ( i < 0 || i > fNofPadDimensions2 ) {
AliFatal("Index outside limits.");
return 0;
}
return fPadDimensions2Y[i];
}
void AliMpMotifSpecial::CalculateDimensions()
{
Int_t i,j;
fDimensionY = 0.;
fDimensionX = 0.;
Double_t* tabSizeX = new Double_t[GetMotifType()->GetNofPadsY()];
for ( j=0; j<GetMotifType()->GetNofPadsY(); ++j ) tabSizeX[j]=0.0;
for ( i=0; i<GetMotifType()->GetNofPadsX(); ++i ) {
Double_t trSizeY=0.;
for ( j=0; j<GetMotifType()->GetNofPadsY(); ++j ) {
Double_t dimx, dimy;
GetPadDimensionsByIndices(i,j, dimx, dimy);
trSizeY += dimy;
tabSizeX[j] += dimx;
}
if ( trSizeY > fDimensionY ) fDimensionY = trSizeY;
}
for ( j=0; j<GetMotifType()->GetNofPadsY(); ++j ) {
if ( tabSizeX[j] > fDimensionX ) fDimensionX = tabSizeX[j];
}
delete [] tabSizeX;
}
Double_t AliMpMotifSpecial::DimensionX() const
{
return fDimensionX;
}
Double_t AliMpMotifSpecial::DimensionY() const
{
return fDimensionY;
}
void
AliMpMotifSpecial::PadPositionLocal(MpPair_t localIndices,
Double_t& posx, Double_t& posy) const
{
return PadPositionLocal(AliMp::PairFirst(localIndices),
AliMp::PairSecond(localIndices),
posx, posy);
}
void
AliMpMotifSpecial::PadPositionLocal(Int_t ixLocal, Int_t iyLocal,
Double_t& posx, Double_t& posy) const
{
Double_t dx0, dy0;
GetPadDimensionsByIndices(ixLocal, iyLocal, dx0, dy0);
posx = dx0;
for ( Int_t i=0 ;i<ixLocal; ++i ) {
Double_t dxi, dyi;
GetPadDimensionsByIndices(i, iyLocal, dxi, dyi);
posx += 2.*dxi;
}
posy = dy0;
for ( Int_t j=0; j<iyLocal; ++j ) {
Double_t dxi, dyi;
GetPadDimensionsByIndices(ixLocal, j, dxi, dyi);
posy += 2.*dyi;
}
posx -= DimensionX();
posy -= DimensionY();
}
MpPair_t
AliMpMotifSpecial::PadIndicesLocal(Double_t localPosX, Double_t localPosY) const
{
Int_t j=0;
Double_t y = localPosY + DimensionY();
while (j<GetMotifType()->GetNofPadsY()) {
Double_t padDimX, padDimY;
GetPadDimensionsByIndices(0, j, padDimX, padDimY);
y -= 2.*padDimY;
if ( y < 0. ) break;
j++;
}
if (j==GetMotifType()->GetNofPadsY()){
Warning("PadIndicesLocal","The position is outside the motif");
return -1;
}
Int_t i=0;
Double_t x = localPosX + DimensionX();
while (i<GetMotifType()->GetNofPadsX()) {
Double_t padDimX, padDimY;
GetPadDimensionsByIndices(i, j, padDimX, padDimY);
x -= 2.*padDimX;
if ( x < 0. ) break;
i++;
}
if (i==GetMotifType()->GetNofPadsX()){
Warning("PadIndicesLocal","The position is outside the motif");
return -1;
}
return AliMp::Pair(i,j);
}
void AliMpMotifSpecial::SetPadDimensions(MpPair_t localIndices,
Double_t dx, Double_t dy)
{
SetPadDimensions(AliMp::PairFirst(localIndices),
AliMp::PairSecond(localIndices), dx, dy);
}
void AliMpMotifSpecial::SetPadDimensions(Int_t ixLocal, Int_t iyLocal,
Double_t dx, Double_t dy)
{
if ( ! GetMotifType()->HasPadByLocalIndices(ixLocal, iyLocal) ) {
Warning("SetPadDimensions","Pad indices outside limits");
return;
}
TVector2* dimensionsObj = new TVector2(dx, dy);
fPadDimensionsVector.Add(ixLocal, iyLocal, dimensionsObj);
Bool_t isPresent = false;
for (Int_t i=0; i<GetNofPadDimensions(); i++) {
if ( AliMpConstants::IsEqual(
fPadDimensions2X[i], fPadDimensions2Y[i], dx, dy) )
isPresent = true;
}
if (!isPresent) {
fPadDimensions2X.AddAt(dx, fNofPadDimensions2);
fPadDimensions2Y.AddAt(dy, fNofPadDimensions2++);
}
}
AliMpMotifSpecial.cxx:100 AliMpMotifSpecial.cxx:101 AliMpMotifSpecial.cxx:102 AliMpMotifSpecial.cxx:103 AliMpMotifSpecial.cxx:104 AliMpMotifSpecial.cxx:105 AliMpMotifSpecial.cxx:106 AliMpMotifSpecial.cxx:107 AliMpMotifSpecial.cxx:108 AliMpMotifSpecial.cxx:109 AliMpMotifSpecial.cxx:110 AliMpMotifSpecial.cxx:111 AliMpMotifSpecial.cxx:112 AliMpMotifSpecial.cxx:113 AliMpMotifSpecial.cxx:114 AliMpMotifSpecial.cxx:115 AliMpMotifSpecial.cxx:116 AliMpMotifSpecial.cxx:117 AliMpMotifSpecial.cxx:118 AliMpMotifSpecial.cxx:119 AliMpMotifSpecial.cxx:120 AliMpMotifSpecial.cxx:121 AliMpMotifSpecial.cxx:122 AliMpMotifSpecial.cxx:123 AliMpMotifSpecial.cxx:124 AliMpMotifSpecial.cxx:125 AliMpMotifSpecial.cxx:126 AliMpMotifSpecial.cxx:127 AliMpMotifSpecial.cxx:128 AliMpMotifSpecial.cxx:129 AliMpMotifSpecial.cxx:130 AliMpMotifSpecial.cxx:131 AliMpMotifSpecial.cxx:132 AliMpMotifSpecial.cxx:133 AliMpMotifSpecial.cxx:134 AliMpMotifSpecial.cxx:135 AliMpMotifSpecial.cxx:136 AliMpMotifSpecial.cxx:137 AliMpMotifSpecial.cxx:138 AliMpMotifSpecial.cxx:139 AliMpMotifSpecial.cxx:140 AliMpMotifSpecial.cxx:141 AliMpMotifSpecial.cxx:142 AliMpMotifSpecial.cxx:143 AliMpMotifSpecial.cxx:144 AliMpMotifSpecial.cxx:145 AliMpMotifSpecial.cxx:146 AliMpMotifSpecial.cxx:147 AliMpMotifSpecial.cxx:148 AliMpMotifSpecial.cxx:149 AliMpMotifSpecial.cxx:150 AliMpMotifSpecial.cxx:151 AliMpMotifSpecial.cxx:152 AliMpMotifSpecial.cxx:153 AliMpMotifSpecial.cxx:154 AliMpMotifSpecial.cxx:155 AliMpMotifSpecial.cxx:156 AliMpMotifSpecial.cxx:157 AliMpMotifSpecial.cxx:158 AliMpMotifSpecial.cxx:159 AliMpMotifSpecial.cxx:160 AliMpMotifSpecial.cxx:161 AliMpMotifSpecial.cxx:162 AliMpMotifSpecial.cxx:163 AliMpMotifSpecial.cxx:164 AliMpMotifSpecial.cxx:165 AliMpMotifSpecial.cxx:166 AliMpMotifSpecial.cxx:167 AliMpMotifSpecial.cxx:168 AliMpMotifSpecial.cxx:169 AliMpMotifSpecial.cxx:170 AliMpMotifSpecial.cxx:171 AliMpMotifSpecial.cxx:172 AliMpMotifSpecial.cxx:173 AliMpMotifSpecial.cxx:174 AliMpMotifSpecial.cxx:175 AliMpMotifSpecial.cxx:176 AliMpMotifSpecial.cxx:177 AliMpMotifSpecial.cxx:178 AliMpMotifSpecial.cxx:179 AliMpMotifSpecial.cxx:180 AliMpMotifSpecial.cxx:181 AliMpMotifSpecial.cxx:182 AliMpMotifSpecial.cxx:183 AliMpMotifSpecial.cxx:184 AliMpMotifSpecial.cxx:185 AliMpMotifSpecial.cxx:186 AliMpMotifSpecial.cxx:187 AliMpMotifSpecial.cxx:188 AliMpMotifSpecial.cxx:189 AliMpMotifSpecial.cxx:190 AliMpMotifSpecial.cxx:191 AliMpMotifSpecial.cxx:192 AliMpMotifSpecial.cxx:193 AliMpMotifSpecial.cxx:194 AliMpMotifSpecial.cxx:195 AliMpMotifSpecial.cxx:196 AliMpMotifSpecial.cxx:197 AliMpMotifSpecial.cxx:198 AliMpMotifSpecial.cxx:199 AliMpMotifSpecial.cxx:200 AliMpMotifSpecial.cxx:201 AliMpMotifSpecial.cxx:202 AliMpMotifSpecial.cxx:203 AliMpMotifSpecial.cxx:204 AliMpMotifSpecial.cxx:205 AliMpMotifSpecial.cxx:206 AliMpMotifSpecial.cxx:207 AliMpMotifSpecial.cxx:208 AliMpMotifSpecial.cxx:209 AliMpMotifSpecial.cxx:210 AliMpMotifSpecial.cxx:211 AliMpMotifSpecial.cxx:212 AliMpMotifSpecial.cxx:213 AliMpMotifSpecial.cxx:214 AliMpMotifSpecial.cxx:215 AliMpMotifSpecial.cxx:216 AliMpMotifSpecial.cxx:217 AliMpMotifSpecial.cxx:218 AliMpMotifSpecial.cxx:219 AliMpMotifSpecial.cxx:220 AliMpMotifSpecial.cxx:221 AliMpMotifSpecial.cxx:222 AliMpMotifSpecial.cxx:223 AliMpMotifSpecial.cxx:224 AliMpMotifSpecial.cxx:225 AliMpMotifSpecial.cxx:226 AliMpMotifSpecial.cxx:227 AliMpMotifSpecial.cxx:228 AliMpMotifSpecial.cxx:229 AliMpMotifSpecial.cxx:230 AliMpMotifSpecial.cxx:231 AliMpMotifSpecial.cxx:232 AliMpMotifSpecial.cxx:233 AliMpMotifSpecial.cxx:234 AliMpMotifSpecial.cxx:235 AliMpMotifSpecial.cxx:236 AliMpMotifSpecial.cxx:237 AliMpMotifSpecial.cxx:238 AliMpMotifSpecial.cxx:239 AliMpMotifSpecial.cxx:240 AliMpMotifSpecial.cxx:241 AliMpMotifSpecial.cxx:242 AliMpMotifSpecial.cxx:243 AliMpMotifSpecial.cxx:244 AliMpMotifSpecial.cxx:245 AliMpMotifSpecial.cxx:246 AliMpMotifSpecial.cxx:247 AliMpMotifSpecial.cxx:248 AliMpMotifSpecial.cxx:249 AliMpMotifSpecial.cxx:250 AliMpMotifSpecial.cxx:251 AliMpMotifSpecial.cxx:252 AliMpMotifSpecial.cxx:253 AliMpMotifSpecial.cxx:254 AliMpMotifSpecial.cxx:255 AliMpMotifSpecial.cxx:256 AliMpMotifSpecial.cxx:257 AliMpMotifSpecial.cxx:258 AliMpMotifSpecial.cxx:259 AliMpMotifSpecial.cxx:260 AliMpMotifSpecial.cxx:261 AliMpMotifSpecial.cxx:262 AliMpMotifSpecial.cxx:263 AliMpMotifSpecial.cxx:264 AliMpMotifSpecial.cxx:265 AliMpMotifSpecial.cxx:266 AliMpMotifSpecial.cxx:267 AliMpMotifSpecial.cxx:268 AliMpMotifSpecial.cxx:269 AliMpMotifSpecial.cxx:270 AliMpMotifSpecial.cxx:271 AliMpMotifSpecial.cxx:272 AliMpMotifSpecial.cxx:273 AliMpMotifSpecial.cxx:274 AliMpMotifSpecial.cxx:275 AliMpMotifSpecial.cxx:276 AliMpMotifSpecial.cxx:277 AliMpMotifSpecial.cxx:278 AliMpMotifSpecial.cxx:279 AliMpMotifSpecial.cxx:280 AliMpMotifSpecial.cxx:281 AliMpMotifSpecial.cxx:282 AliMpMotifSpecial.cxx:283 AliMpMotifSpecial.cxx:284 AliMpMotifSpecial.cxx:285 AliMpMotifSpecial.cxx:286 AliMpMotifSpecial.cxx:287 AliMpMotifSpecial.cxx:288 AliMpMotifSpecial.cxx:289 AliMpMotifSpecial.cxx:290 AliMpMotifSpecial.cxx:291 AliMpMotifSpecial.cxx:292 AliMpMotifSpecial.cxx:293 AliMpMotifSpecial.cxx:294 AliMpMotifSpecial.cxx:295 AliMpMotifSpecial.cxx:296 AliMpMotifSpecial.cxx:297 AliMpMotifSpecial.cxx:298 AliMpMotifSpecial.cxx:299 AliMpMotifSpecial.cxx:300 AliMpMotifSpecial.cxx:301 AliMpMotifSpecial.cxx:302 AliMpMotifSpecial.cxx:303 AliMpMotifSpecial.cxx:304 AliMpMotifSpecial.cxx:305 AliMpMotifSpecial.cxx:306 AliMpMotifSpecial.cxx:307 AliMpMotifSpecial.cxx:308 AliMpMotifSpecial.cxx:309 AliMpMotifSpecial.cxx:310 AliMpMotifSpecial.cxx:311 AliMpMotifSpecial.cxx:312 AliMpMotifSpecial.cxx:313 AliMpMotifSpecial.cxx:314 AliMpMotifSpecial.cxx:315 AliMpMotifSpecial.cxx:316 AliMpMotifSpecial.cxx:317 AliMpMotifSpecial.cxx:318 AliMpMotifSpecial.cxx:319 AliMpMotifSpecial.cxx:320 AliMpMotifSpecial.cxx:321 AliMpMotifSpecial.cxx:322 AliMpMotifSpecial.cxx:323 AliMpMotifSpecial.cxx:324 AliMpMotifSpecial.cxx:325 AliMpMotifSpecial.cxx:326 AliMpMotifSpecial.cxx:327 AliMpMotifSpecial.cxx:328 AliMpMotifSpecial.cxx:329 AliMpMotifSpecial.cxx:330 AliMpMotifSpecial.cxx:331 AliMpMotifSpecial.cxx:332 AliMpMotifSpecial.cxx:333 AliMpMotifSpecial.cxx:334 AliMpMotifSpecial.cxx:335 AliMpMotifSpecial.cxx:336 AliMpMotifSpecial.cxx:337 AliMpMotifSpecial.cxx:338 AliMpMotifSpecial.cxx:339 AliMpMotifSpecial.cxx:340 AliMpMotifSpecial.cxx:341 AliMpMotifSpecial.cxx:342 AliMpMotifSpecial.cxx:343