ROOT logo
//____________________________________________________________________
//
// $id$
//
// Check integrety of Hardware2Detector and Detector2Hardware
//
/** @defgroup ALTRO_test ALTRO test
    @ingroup FMD_script 
*/
#ifndef __CINT__
# include <TString.h>
// # include <FMD/AliFMDParameters.h>
# include <FMD/AliFMDAltroMapping.h>
// # include <FMD/AliFMDUShortMap.h>
// # include <FMD/AliFMDBoolMap.h>
# include <AliLog.h>
# include <TError.h>
# include <iostream>
#endif
bool show_all=false;

//____________________________________________________________________
/** @ingroup ALTRO_test
    @param ddl 
    @param hwaddr 
    @return  */
const Char_t* 
Addr2Str(UInt_t ddl, UInt_t hwaddr, UShort_t timebin)
{
  static TString s;
  UInt_t board = (hwaddr >> 7) & 0x1F;
  UInt_t chip  = (hwaddr >> 4) & 0x7;
  UInt_t chan  = hwaddr & 0xF;
  s = Form("(0x%05X,0x%02X,0x%1X,0x%1X,%04d)", ddl, board, chip, chan, timebin);
  return s.Data();
}

//____________________________________________________________________
/** @ingroup ALTRO_test
    @param det 
    @param ring 
    @param sec 
    @param str 
    @return  */
const Char_t* 
Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam)
{
  static TString s;
  s = Form("FMD%d%c[%2d,%3d]-%d", det, ring, sec, str, sam);
  return s.Data();
}

//____________________________________________________________________
/** @ingroup ALTRO_test
    @param det 
    @param ring 
    @param sec 
    @param str 
    @param ddl 
    @param hwaddr 
    @param odet 
    @param oring 
    @param osec 
    @param ostr 
*/
void 
PrintTrans(UShort_t det, Char_t ring, UShort_t sec, Short_t str, UShort_t sam,
	   UInt_t ddl, UInt_t hwaddr, UShort_t timebin,
	   UShort_t odet, Char_t oring, UShort_t osec, Short_t ostr, 
	   UShort_t osam)
{
  static TString s1, s2, s3;
  s1 = Det2Str(det, ring, sec, str, sam);
  s2 = Addr2Str(ddl,hwaddr,timebin);
  s3 = Det2Str(odet, oring, osec, ostr, osam);
  Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data());
}

//____________________________________________________________________
/** @ingroup ALTRO_test
    @param det 
    @param ring 
    @param sec 
    @param str 
    @param odet 
    @param oring 
    @param osec 
    @param ostr 
*/
void
CheckTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam,
	   UInt_t ddl, UInt_t hwaddr, UShort_t timebin,
	   UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr,
	   UShort_t osam)
{
  bool ok = true;
  if (det != odet) {
    Warning("TestHWMap", "Detector # differ %d != %d", det, odet);
    ok = false;
  }
  if (ring != oring) {
    Warning("TestHWMap", "Ring Id differ %c != %c", ring, oring);  
    ok = false;
  }
  if (sec != osec) {
    Warning("TestHWMap", "Sector # differ %d != %d", sec, osec);
    ok = false;
  }
  if (str != ostr) { 
    ok = false;
    Warning("TestHWMap", "Strip # differ %d != %d", str, ostr);
  }
  if (sam != osam) { 
    ok = false;
    Warning("TestHWMap", "Sample # differ %d != %d", sam, osam);
  }

  if (!show_all) { 
    if (!ok) 
      PrintTrans(det,ring,sec,str,sam,
		 ddl,hwaddr,timebin,
		 odet,oring,osec,ostr,osam);
  }
}

//____________________________________________________________________
/** @ingroup ALTRO_test
 */
void
TestAltroMapping(bool sa=false, Int_t min=1, Int_t max=3)
{
  show_all = sa;
  // AliLog::SetModuleDebugLevel("FMD", 1);
  // if (min < 1 || min > 3) min = 1;
  if (max < min)          max = min;
  // AliFMDParameters* param = AliFMDParameters::Instance();
  AliFMDAltroMapping m;
  UShort_t presamp  = 19;
  UShort_t oversamp = 4;

  for (UShort_t det = min; det <= max; det++) {
    for (UShort_t rng = 0; rng < 2; rng++) {
      Char_t ring = (rng == 0 ? 'I' : 'O');
      Int_t  nsec = (ring == 'I' ?  20 :  40);
      Int_t  nstr = (ring == 'I' ? 512 : 256);
      for (UShort_t sec = 0; sec < nsec; sec++) {
	for (Short_t str = 0; str < nstr; str ++ /*= 128*/) {
	  for(UShort_t sam = 0; sam < oversamp; sam++) {
	    UShort_t ddl, hwaddr;
	    UShort_t timebin;
	    if (!m.Detector2Hardware(det, ring, sec, str, sam, 
				     presamp, oversamp, 
				     ddl, hwaddr, timebin)) {
	      Warning("TestHWMap", "detector to hardware failed on %s", 
		      Det2Str(det, ring, sec, str, sam));
	      continue;
	    }
	    UShort_t odet, osec, osam;
	    Short_t ostr;
	    Char_t   oring;
	    if (!m.Hardware2Detector(ddl, hwaddr, timebin, 
				     presamp, oversamp, 
				     odet, oring, osec, ostr, osam)){
	      Warning("TestHWMap", "hardware to detector failed on %s", 
		      Addr2Str(ddl, hwaddr, timebin));
	      continue;
	    }
	    if (show_all) 
	      PrintTrans(det,ring,sec,str,sam,
			 ddl,hwaddr,timebin,
			 odet,oring,osec,ostr,osam);
	    CheckTrans(det,ring,sec,str,sam,
		       ddl,hwaddr,timebin,
		       odet,oring,osec,ostr,osam);
	  }
	}// Loop over strips
      } // Loop over sectors
    } // Loop over rings
  } // Loop over detectors
}

  
//____________________________________________________________________
//
// EOF
//
    
	

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