ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


//-----------------------------------------------------------------------
// Author : A. Mastroserio
//-----------------------------------------------------------------------


#ifndef ALISPDUTILS_CXX
#define ALISPDUTILS_CXX

#include <TString.h>
#include "AliSPDUtils.h"
ClassImp(AliSPDUtils)
  //______________________________________________________________________________
  const Int_t AliSPDUtils::fgkDDLModuleMap[20][12] = {
    { 4, 5, 0, 1, 80, 81, 84, 85, 88, 89, 92, 93},
    {12,13, 8, 9, 96, 97,100,101,104,105,108,109},
    {20,21,16,17,112,113,116,117,120,121,124,125},
    {28,29,24,25,128,129,132,133,136,137,140,141},
    {36,37,32,33,144,145,148,149,152,153,156,157},
    {44,45,40,41,160,161,164,165,168,169,172,173},
    {52,53,48,49,176,177,180,181,184,185,188,189},
    {60,61,56,57,192,193,196,197,200,201,204,205},
    {68,69,64,65,208,209,212,213,216,217,220,221},
    {76,77,72,73,224,225,228,229,232,233,236,237},
    { 7, 6, 3, 2, 83, 82, 87, 86, 91, 90, 95, 94},
    {15,14,11,10, 99, 98,103,102,107,106,111,110},
    {23,22,19,18,115,114,119,118,123,122,127,126},
    {31,30,27,26,131,130,135,134,139,138,143,142},
    {39,38,35,34,147,146,151,150,155,154,159,158},
    {47,46,43,42,163,162,167,166,171,170,175,174},
    {55,54,51,50,179,178,183,182,187,186,191,190},
    {63,62,59,58,195,194,199,198,203,202,207,206},
    {71,70,67,66,211,210,215,214,219,218,223,222},
    {79,78,75,74,227,226,231,230,235,234,239,238}
  };
//___________________________________________________________________________
AliSPDUtils::~AliSPDUtils() {
  //
  //destructor
  //
}
//__________________________________________________________________________
Bool_t AliSPDUtils::OfflineToOnline(UInt_t module, UInt_t colM, UInt_t rowM, UInt_t& eq, UInt_t& hs, UInt_t& chip, UInt_t& col, UInt_t& row) {
  // converts offline coordinates to online
  eq = GetOnlineEqIdFromOffline(module);
  hs = GetOnlineHSFromOffline(module);
  chip = GetOnlineChipFromOffline(module,colM);
  col = GetOnlineColFromOffline(module,colM);
  row = GetOnlineRowFromOffline(module,rowM);
  if (eq>=20 || hs>=6 || chip>=10 || col>=32 || row>=256) return kFALSE;
  else return kTRUE;
}
//__________________________________________________________________________
Bool_t AliSPDUtils::OnlineToOffline(UInt_t eq, UInt_t hs, UInt_t chip, UInt_t col, UInt_t row, UInt_t& module, UInt_t& colM, UInt_t& rowM) {
  // converts online coordinates to offline
  module = GetOfflineModuleFromOnline(eq,hs,chip);
  colM = GetOfflineColFromOnline(eq,hs,chip,col);
  rowM = GetOfflineRowFromOnline(eq,hs,chip,row);
  if (module>=240 || colM>=160 || rowM>=256) return kFALSE;
  else return kTRUE;
}
//__________________________________________________________________________
Bool_t AliSPDUtils::GetOfflineFromOfflineChipKey(UInt_t chipkey,UInt_t& module, UInt_t& chip){
  // converts offline chip key to offline chip coordinates (V. Altini)
  if (chipkey>=1200) {
    TString errMess = Form("%d is not a valid Chip Key number",chipkey);
    printf(" ERROR : %s\n", errMess.Data());
    return 0;
  }

  module = chipkey/5;
  chip=chipkey%20%5;

  return 1;
}
//________________________________________________________________________
UInt_t AliSPDUtils::GetOfflineModuleFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip) {
  // online->offline (module)
  if (eqId<20 && hs<6 && chip<10) return fgkDDLModuleMap[eqId][hs*2+chip/5];
  else return 240;
}
//________________________________________________________________________
UInt_t AliSPDUtils::GetOfflineChipKeyFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip) {
  // online->offline (chip key: 0-1199)
  if (eqId<20 && hs<6 && chip<10) {
    UInt_t module = GetOfflineModuleFromOnline(eqId,hs,chip);
    UInt_t chipInModule = ( chip>4 ? chip-5 : chip );
    if(eqId>9) chipInModule = 4 - chipInModule;  // side C only
    return (module*5 + chipInModule);
  } else return 1200;
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOnlineEqIdFromOffline(UInt_t module) {
  // offline->online (eq)
  for (UInt_t eqId=0; eqId<20; eqId++) {
    for (UInt_t iModule=0; iModule<12; iModule++) {
      if (GetModuleNumber(eqId,iModule)==(Int_t)module) return eqId;
    }
  }
  return 20; // error
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOnlineHSFromOffline(UInt_t module) {
  // offline->online (hs)
  for (UInt_t eqId=0; eqId<20; eqId++) {
    for (UInt_t iModule=0; iModule<12; iModule++) {
      if (GetModuleNumber(eqId,iModule)==(Int_t)module) return iModule/2;
    }
  }
  return 6; // error
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOnlineChipFromOffline(UInt_t module, UInt_t colM) {
  // offline->online (chip)
  for (UInt_t eq=0; eq<20; eq++) {
    for (UInt_t iModule=0; iModule<12; iModule++) {
      if (GetModuleNumber(eq,iModule)==(Int_t)module) {
	if (module<80) {
	  if (eq<10) { // side A
	    return (159-colM)/32 + 5*(iModule%2);
	  }
	  else { // side C
	    return colM/32 + 5*(iModule%2);
	  }
	}
	else if (module<240) {
	  if (eq<10) { // side A
	    return colM/32 + 5*(iModule%2);
	  }
	  else { // side C
	    return (159-colM)/32 + 5*(iModule%2);
	  }
	}
      }
    }
  }
  return 10; // error
}
//__________________________________________________________________________
Int_t AliSPDUtils::GetModuleNumber(UInt_t iDDL, UInt_t iModule) {
  if (iDDL<20 && iModule<12) return fgkDDLModuleMap[iDDL][iModule];
  else return 240;
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOnlineColFromOffline(UInt_t module, UInt_t colM) {
  // offline->online (col)
  if (module<80) { // inner layer
    return colM%32;
  }
  else if (module<240) { // outer layer
    return colM%32;
  }
  return 32; // error
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOnlineRowFromOffline(UInt_t module, UInt_t rowM) {
  // offline->online (row)
  if (module<80) { // inner layer
    return (255-rowM);
  }
  else if (module<240) { // outer layer
    return (255-rowM);
  }
  return 256; // error
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOfflineColFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip, UInt_t col) {
  // online->offline (col)
  if (eqId>=20 || hs>=6 || chip>=10 || col>=32) return 160; // error
  UInt_t offset = 32 * (chip % 5);
  if (hs<2) {
    if (eqId<10) {
      return 159 - (31-col + offset); // inner layer, side A
    }
    else {
      return col + offset; // inner layer, side C
    }
  }
  else {
    if (eqId<10) {
      return (col + offset); // outer layer, side A
    }
    else {
      return 159 - (31-col + offset); // outer layer, side C
    }
  }
}
//__________________________________________________________________________
UInt_t AliSPDUtils::GetOfflineRowFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip, UInt_t row) {
  // online->offline (row)
  if (eqId>=20 || hs>=6 || chip>=10 || row>=256) return 256; // error
  return 255-row;
}
//__________________________________________________________________________
Bool_t AliSPDUtils::GetOnlineFromOfflineChipKey(UInt_t chipkey,UInt_t& eq, UInt_t& hs, UInt_t& chip){
  // online Eq, hs and chip from offline chipkey (V. Altini)
  if (chipkey>=1200) {
    TString errMess = Form("%d is not a valid Chip Key number",chipkey);
    printf("ERROR : %s \n", errMess.Data());
    return 0;
  }

  eq = GetOnlineEqIdFromOffline(chipkey/5);
  hs = GetOnlineHSFromOffline(chipkey/5);
  chip=chipkey%20;
  if(chip>9) chip=19-chip;

  return 1;
}

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