ROOT logo
/* 
ROOT Macro to generate all numbering believed to be relevant for EMCAL
- at least as far as electronics is concerned.
Includes FEE, TRU and LED information. Sorry if this macro does not quite 
adher to ALICE coding conventions (but on the other hand it is not used in AliRoot)

Some further documentation is available at:
http://cern.ch/dsilverm/mapping/emcal_mapping.html

Author: David Silvermyr, ORNL; silvermy@mail.phy.ornl.gov
*/

/* 
First we define a number of constants; the main method EMCALNumbering starts below 
*/

const int kDDLEqIdOffsetEMCAL = 0x1200; /* From AliDAQ; first equipment Id # for EMCAL*/

// global arrays for chip, channel and CSP numbering
// - in the area covered by a single FEC (32 CSPs covering a 4x8 tower area)
const int kNROWS = 8;
const int kNCOLS = 4;
const int kNCSP = 32;

// the way CSPs are populated, as seen from the back where we
// plug in the T-cards
const int kCspMap[kNROWS][kNCOLS] = {
  0, 16,  8, 24, // 7
  1, 17,  9, 25, // |
  2, 18, 10, 26, // |
  3, 19, 11, 27, // row
  4, 20, 12, 28, // |
  5, 21, 13, 29, // |
  6, 22, 14, 30, // |
  7, 23, 15, 31  // 0
  // 0 <-col-> 3
};
// i.e. the highest row comes first, and this map should thus be indexed as [NROWS-1-irow][icol]
// - Csp help array is constructed below.

/*
  The rest of the global Chan/Chip arrays are either fixed
  from the Altro mapping, or a function of the CspMap above
*/

// Altro mapping for chips and channels, high and low gain
const int kChip[kNCSP] = {
  2,   2,   2,   2,   3,   3,   3,   3, 
  0,   0,   0,   0,   4,   4,   4,   4, 
  2,   2,   2,   2,   3,   3,   3,   3, 
  0,   0,   0,   0,   4,   4,   4,   4 
};

const int kChanHigh[kNCSP] = {
  10,  14,   5,   1,   1,   5,  14,  10, 
  10,  14,   5,   1,   1,   5,  14,  10, 
   8,  12,   7,   3,   3,   7,  12,   8, 
   8,  12,   7,   3,   3,   7,  12,   8 
};

const int kChanLow[kNCSP] = {
  11,  15,   4,   0,   0,   4,  15,  11, 
  11,  15,   4,   0,   0,   4,  15,  11, 
   9,  13,   6,   2,   2,   6,  13,   9, 
   9,  13,   6,   2,   2,   6,  13,   9 
};

// Order that CSPs appear in the data 
const int kCspOrder[kNCSP] = { // just from ALTRO mapping of chips/channels to CSP
 11,  27,  10,  26,  24,   8,  25,   9, 
  3,  19,   2,  18,  16,   0,  17,   1, 
  4,  20,   5,  21,  23,   7,  22,   6, 
 12,  28,  13,  29,  31,  15,  30,  14 
};

// LED reference info:
const int kNLED = 24; // per SuperModule; equals number of StripModules per SuperModule
const int kNLEDPerTCard = kNLED / 2;
// CSPs and LED are connected on a special T-card with only 12 connectors
// Half of the StripModules in a SuperModule will be connected to the Top
// (and half to the Bottom) T-card
// First Top
const int kCspMapLEDTop[kNLEDPerTCard] = {
  1, 17, // Strips  0, 1
  2, 18, // Strips  2, 3
  3, 19, // Strips  4, 5
  4, 20, // Strips  6, 7
  5, 21, // Strips  8, 9
  6, 22  // Strips 10,11
};
const int kStripModuleMapLEDTop[kNLEDPerTCard] = {
  0, 1,
  2, 3,
  4, 5,
  6, 7,
  8, 9,
 10,11
};

// Then Bottom
const int kCspMapLEDBottom[kNLEDPerTCard] = {
   9, 25, // Strips 12,13
  10, 26, // Strips 14,15
  11, 27, // Strips 16,17
  12, 28, // Strips 18,19
  13, 29, // Strips 20,21
  14, 30  // Strips 22,23
};
const int kStripModuleMapLEDBottom[kNLEDPerTCard] = {
  12,13,
  14,15,
  16,17,
  18,19,
  20,21,
  22,23
};

// let's make some simpler/normal help index arrays too, that we'll use later on
int ROW[kNCSP];
int COL[kNCSP];
int Csp[kNROWS][kNCOLS];

// Order that Towers, appear in the data 
int towerOrder[kNCSP];

void initTowers()
{
  for(int icol=0; icol<kNCOLS; icol++){
    for(int irow=0; irow<kNROWS; irow++){
      int csp = kCspMap[kNROWS-1-irow][icol];
      COL[csp] = icol;
      ROW[csp] = irow;
      Csp[irow][icol] = csp;

      cout << " icol " << icol
	   << " irow " << irow
	   << " csp " << csp << endl;
    }
  }

  // let's also give the order that Towers appear in the data
  for (int ic=0; ic<kNCSP; ic++) {
    int towerid = ROW[kCspOrder[ic]]*kNCOLS + COL[kCspOrder[ic]];
    towerOrder[ic] = towerid;
  }

}

// help functions for TRU mapping:
int getTRUADC(int iFEC) { // iFEC is a number 0-35, within a SM
  // ADC channel 1-12 on TRU as a function of connected iFEC
  return (iFEC%12 + 1); 
}

int getTRUADCChan(int iCSP) { // iCSP is from 0 to 31
  int bottom = (iCSP%16)/8; // 0 for top, 1 for bottom T-card
  int iADCChan = (iCSP%8)/2 + 1; // within a T-card; 1-4
  return (iADCChan + bottom*4);
}
// ok, done with TRU help methods also; let's do what needs to be done

// HERE STARTS THE MAIN METHOD..
void EMCalNumbering()
{
  /*
    General coord. info: ALICE-INT-2003-038 EDMS doc.

    z goes in the beam direction from RB26 (side C,where the muon arm is,Gex), 
    to RB24 (side A, Bellegarde), i.e. away from muon arm.

    x is horizontal, perpendicular to the beam direction and points to the 
    accelerator (LHC ring) centre. 
    [visual aid.: pos. x = Saleve; Inside/I, negative = Jura; Outside/O]

    y is vertical, perpendicular to z and x. Positive y points upward.    
    [pos. y = Up/U. neg. y = Down/D]

    The usual relation to r, phi(-pi, pi), theta (0,pi) applies:
    x = r * sin(theta) * cos(phi);
    y = r * sin(theta) * sin(phi);
    z = r * cos(theta)
  
    r = sqrt(x*x + y*y +z*z);
    theta = TMath::ACos(z/r);
    phi = TMath::ATan2(y, x);
  */

  /* Numbering rules: ALICE-INT-2003-038 EDMS doc.

  All numbering starts from 0.

  Rotational Numbering: follows phi direction
  [looks counter-clockwise from A, and clockwise from C]

  Linear numbering: follows _reverse_ z-direction from A to C, 
  without interruption at z=0
  [presumably to have a reasonable numbering in the muon system]

  Radial numbering increases outwards, but EMCAL only has one layer.
  so doesn't matter for us.
   */

  // EMCAL specifics

  initTowers(); // prepare setup

  // global info on sectors
  const int kNFullSect = 5;
  const int kNThirdSect = 1;
  const int kNSides = 2; // supermodules for both positive and negative Z
  // let's call side A '0', and side C '1'

  // Number of SuperModules and DDLs total
  const int kNSM = (kNFullSect + kNThirdSect)*kNSides; // 12
  //  const int NDDL = NSides*(NFullSect * 2 + NThirdSect*1); // 22

  // per supermodule info
  const int kNTowersZ = 48;
  const int kNTowersPhi = 24;
  const int kNTowersPerFEC = 32;
  const int kNFEC = 36;
  const int kNGTL = 4; 
  const int kNRCU = 2;
  const int kNTRU = 3;

  const int kNTowersSM = kNTowersZ*kNTowersPhi; // 1152

  const int kNModulesZ = kNTowersZ/2; // 24
  const int kNModulesPhi = kNTowersPhi/2; // 12
  const int kNModulesSM = kNTowersSM/4; // 288

  // per GTL
  const int kNFECPerGTL = kNFEC/kNGTL; // 9
  // per RCU
  const int kNFECPerRCU = kNFEC/kNRCU; // 18
  // per TRU
  const int kNFECPerTRU = kNFEC/kNTRU; // 12

  // and per FrontEndCard:
  // 2 T-cards, each with 16 towers, per FEC
  const int kNTCards = 2;
  // each T-card covers a 2x8 tower area
  const int kNTowersPhiTC = 8; 
  const int kNTowersZTC = 2; 

  // OK, that was all the setup and definitions of constants..

  /* Now, how do we populate the Supermodule and it's GTL space?
     Simplest seems to be to have 3 rows of 12 FECs each,
     where each FEC's 2 T-cards cover a 4(z)*8(phi) tower area. 
     Do the coverage in order..
  */
  const int kNFECPerRow = kNFEC/3; // 12 

  TFile *f = new TFile("map.root","RECREATE");

  // global variables
  int iside = 0; // A=0, C=1
  int isect = 0; // 0-5
  int iSM = 0;   // 0-11, offline SuperModule index
  int iDDLEqId = 0;  // kDDLEqIdOffsetEMCAL = 0x1200 upwards (NDDL) 
 
  // within SM
  int iFEC = 0;  // 0
  int iTRU = 0;  // 0-2, within SM
  int iTRUADC = 0;  // 1-8, within TRU
  int iRCU = 0;  // 0-1, within SM
  int iBranch = 0; // A=0, B=1
  int iGTL = 0;   // address 1-9; TRU is in address slot 0
  // within FEC
  int nTow = kNCSP; // # of towers, per  FEC
  int CSP[kNCSP] = {0};
  int chip[kNCSP] = {0};
  int lowGainChan[kNCSP] = {0};
  int highGainChan[kNCSP] = {0};
  int towerCol[kNCSP] = {0};
  int towerRow[kNCSP] = {0};
  int iTRUADCChan[kNCSP] = {0};

  TTree *t = new TTree("tree","ALICE EMCal tower map");
  t->Branch("iside",&iside,"iside/I");
  t->Branch("isect",&isect,"isect/I");
  t->Branch("iSM",&iSM,"iSM/I");
  t->Branch("iDDLEqId",&iDDLEqId,"iDDLEqId/I");
  t->Branch("iFEC",&iFEC,"iFEC/I");
  t->Branch("iTRU",&iTRU,"iTRU/I");
  t->Branch("iTRUADC",&iTRUADC,"iTRUADC/I");
  t->Branch("iRCU",&iRCU,"iRCU/I");
  t->Branch("iBranch",&iBranch,"iBranch/I");
  t->Branch("iGTL",&iGTL,"iGTL/I");
  t->Branch("nTow",&nTow,"nTow/I");
  t->Branch("CSP",CSP,"CSP[nTow]/I");
  t->Branch("chip",chip,"chip[nTow]/I");
  t->Branch("lowGainChan",lowGainChan,"lowGainChan[nTow]/I");
  t->Branch("highGainChan",highGainChan,"highGainChan[nTow]/I");
  t->Branch("towerCol",towerCol,"towerCol[nTow]/I");
  t->Branch("towerRow",towerRow,"towerRow[nTow]/I");
  t->Branch("towerOrder",towerOrder,"towerOrder[nTow]/I");
  t->Branch("iTRUADCChan",iTRUADCChan,"iTRUADCChan[nTow]/I");

  // LED TTree
  TTree *tLED = new TTree("tLED","ALICE EMCal LED reference map");
  tLED->Branch("iside",&iside,"iside/I");
  tLED->Branch("isect",&isect,"isect/I");
  tLED->Branch("iSM",&iSM,"iSM/I");
  tLED->Branch("iDDLEqId",&iDDLEqId,"iDDLEqId/I");
  tLED->Branch("iRCU",&iRCU,"iRCU/I");
  tLED->Branch("iBranch",&iBranch,"iBranch/I");
  tLED->Branch("iGTL",&iGTL,"iGTL/I");
  int nLED = kNLED; 
  tLED->Branch("nLED",&nLED,"nLED/I");
  int iLEDCSP[kNLED] = {0};
  int iLEDchip[kNLED] = {0};
  int iLEDhighGainChan[kNLED] = {0};
  int iLEDlowGainChan[kNLED] = {0};
  int iLEDStrip[kNLED] = {0};
  tLED->Branch("iLEDCSP",iLEDCSP,"iLEDCSP[nLED]/I");
  tLED->Branch("iLEDchip",iLEDchip,"iLEDchip[nLED]/I");
  tLED->Branch("iLEDlowGainChan",iLEDlowGainChan,"iLEDlowGainChan[nLED]/I");
  tLED->Branch("iLEDhighGainChan",iLEDhighGainChan,"iLEDhighGainChan[nLED]/I");
  tLED->Branch("iLEDStrip",iLEDStrip,"iLEDStrip[nLED]/I");

  // TRU TTree
  TTree *tTRU = new TTree("tTRU","ALICE EMCal TRU fake-altro map");
  tTRU->Branch("iside",&iside,"iside/I");
  tTRU->Branch("isect",&isect,"isect/I");
  tTRU->Branch("iSM",&iSM,"iSM/I");
  tTRU->Branch("iDDLEqId",&iDDLEqId,"iDDLEqId/I");
  tTRU->Branch("iRCU",&iRCU,"iRCU/I");
  tTRU->Branch("iBranch",&iBranch,"iBranch/I");
  tTRU->Branch("iGTL",&iGTL,"iGTL/I");
  // TRU is identified by (GTL==0 && !(Branch==0 && RCU==0))
  int iTRUFirstChan = 0; 
  int iTRULastChan = 127; // maximum allowed number of fake ALTRO channels=128 from TRU
  tTRU->Branch("iTRUFirstChan",&iTRUFirstChan,"iTRUFirstChan/I");
  tTRU->Branch("iTRULastChan",&iTRULastChan,"iTRULastChan/I");

  for (isect = 0; isect<(kNFullSect+kNThirdSect); isect++) { 
    for (iside=0; iside<kNSides; iside++) { // A or C sides
      // half sector only has one third of the FECs
      int MINFEC = 0;
      int MAXFEC = kNFEC;
      int MINTRU = 0;
      int MAXTRU = kNTRU;
      if (isect==kNFullSect) { // meaning last third-size-sector
	if (iside==0) { // A side
	  MAXFEC = kNFEC / 3;
	  MAXTRU = 1;
	}
	else if (iside==1) { // C side
	  MINFEC = 2 * kNFEC / 3;
	  MINTRU = 2;
	}
      }

      iSM = isect*2 + iside;
      for (iFEC=MINFEC; iFEC<MAXFEC; iFEC++) {

	// ok, where does this FEC belong? Use the local iFEC index which starts with 0
	// closest to the crate and revert to global z and phi index at the end..

	iTRU = iFEC / (kNFECPerTRU);
	iTRUADC = getTRUADC(iFEC); 
	iRCU = iFEC / (kNFECPerRCU); 
	iBranch = (iFEC%kNFECPerRCU) / kNFECPerGTL; // local index inside RCU
	iGTL = iFEC % kNFECPerGTL + 1;

	iDDLEqId = kDDLEqIdOffsetEMCAL + iSM*kNRCU + iRCU;

	// tower limits/indices 
	int tcolLow = (iFEC%kNFECPerRow)*kNCOLS;
	int trowLow = (iFEC/kNFECPerRow)*kNROWS;
	/*
	printf("iside %d iSM %d: FEC %02d RCU %d Branch %d iGTL\n",
	       iside, iSM, iFEC, iRCU, iBranch, iGTL);
	*/
	for (int col=0; col<kNCOLS; col++) {
	  for (int row=0; row<kNROWS; row++) {
	    int tcol = col + tcolLow;
	    int trow = row + trowLow;

	    int itow = row*kNCOLS + col;

	    CSP[itow] = Csp[row][col];
	    chip[itow] = kChip[CSP[itow]];
	    lowGainChan[itow] = kChanLow[CSP[itow]];
	    highGainChan[itow] = kChanHigh[CSP[itow]];

	    iTRUADCChan[itow] = getTRUADCChan(CSP[itow]); 

	    // we need to switch to global indices if we are on side C
	    if (iside==1) {
	      tcol =  kNTowersZ-1 - tcol; // flip axis 
	      trow = kNTowersPhi-1 - trow; // just flip axis
	    }

	    towerCol[itow] = tcol;
	    towerRow[itow] = trow;

	  } // row
	}// col
	tree->Fill();
      } // iFEC

      // also handle special LED and TRU mapping
      iGTL = 0; // they are all in GTL/FEC slot 0

      // start with LED..
      iRCU = 0; iBranch = 0; 
      iDDLEqId = kDDLEqIdOffsetEMCAL + iSM*kNRCU + iRCU;

      /* for the special 'half'/third sector, side C, there is
	 no RCU=0.. So we put the LED in RCU=1 instead then.
	 There is only 1 TRU in this sector (RCU=1, branch=1), so no problem..
      */
      if (MINTRU == 2) { // key for this special sector
	iRCU++;
	iDDLEqId++;
      }

      // loop over attached CSPs
      // First Top
      for (int iled = 0; iled<kNLEDPerTCard; iled++) {
	int il = iled;
	iLEDCSP[il] = kCspMapLEDTop[iled];
	iLEDStrip[il] = kStripModuleMapLEDTop[iled];
	/*
	cout << " LED CSP " << iLEDCSP[il]
	     << " Strip " << iLEDStrip[il] << endl;
	*/
	iLEDchip[il] = kChip[iLEDCSP[il]];
	iLEDlowGainChan[il] = kChanLow[iLEDCSP[il]];
	iLEDhighGainChan[il] = kChanHigh[iLEDCSP[il]];
      }
      // Then Bottom
      for (int iled = 0; iled<kNLEDPerTCard; iled++) {
	int il = iled + kNLEDPerTCard; // just a convenient index
	iLEDCSP[il] = kCspMapLEDBottom[iled];
	iLEDStrip[il] = kStripModuleMapLEDBottom[iled];
	/*
	cout << " LED CSP " << iLEDCSP[il]
	     << " Strip " << iLEDStrip[il] << endl;
	*/
	iLEDchip[il] = kChip[iLEDCSP[il]];
	iLEDlowGainChan[il] = kChanLow[iLEDCSP[il]];
	iLEDhighGainChan[il] = kChanHigh[iLEDCSP[il]];
      }
      tLED->Fill();

      // then we also have the TRUs (fake ALTRO)
      for (iTRU=MINTRU; iTRU<MAXTRU; iTRU++) {

	if (iTRU == 0) { iRCU = 0; iBranch = 1; } 
	else if (iTRU == 1) { iRCU = 1; iBranch = 0; } 
	else if (iTRU == 2) { iRCU = 1; iBranch = 1; } 
	/*
	cout << " TRU " << iTRU
	     << " RCU " << iRCU
	     << " Branch " << iBranch << endl;
	*/
	iDDLEqId = kDDLEqIdOffsetEMCAL + iSM*kNRCU + iRCU;
	/* 
	   last sector only has 1 TRU, but it's probably called TRU 0 on A
	   and TRU 2 on C side..
	   This is handled via MINFEC/MAXFEC and MINTRU/MAXTRU at the start
	   of this loop.
	*/
	tTRU->Fill();

      }

    } // isect / iSM
  } // iside

  f->Write();
}
 EMCalNumbering.C:1
 EMCalNumbering.C:2
 EMCalNumbering.C:3
 EMCalNumbering.C:4
 EMCalNumbering.C:5
 EMCalNumbering.C:6
 EMCalNumbering.C:7
 EMCalNumbering.C:8
 EMCalNumbering.C:9
 EMCalNumbering.C:10
 EMCalNumbering.C:11
 EMCalNumbering.C:12
 EMCalNumbering.C:13
 EMCalNumbering.C:14
 EMCalNumbering.C:15
 EMCalNumbering.C:16
 EMCalNumbering.C:17
 EMCalNumbering.C:18
 EMCalNumbering.C:19
 EMCalNumbering.C:20
 EMCalNumbering.C:21
 EMCalNumbering.C:22
 EMCalNumbering.C:23
 EMCalNumbering.C:24
 EMCalNumbering.C:25
 EMCalNumbering.C:26
 EMCalNumbering.C:27
 EMCalNumbering.C:28
 EMCalNumbering.C:29
 EMCalNumbering.C:30
 EMCalNumbering.C:31
 EMCalNumbering.C:32
 EMCalNumbering.C:33
 EMCalNumbering.C:34
 EMCalNumbering.C:35
 EMCalNumbering.C:36
 EMCalNumbering.C:37
 EMCalNumbering.C:38
 EMCalNumbering.C:39
 EMCalNumbering.C:40
 EMCalNumbering.C:41
 EMCalNumbering.C:42
 EMCalNumbering.C:43
 EMCalNumbering.C:44
 EMCalNumbering.C:45
 EMCalNumbering.C:46
 EMCalNumbering.C:47
 EMCalNumbering.C:48
 EMCalNumbering.C:49
 EMCalNumbering.C:50
 EMCalNumbering.C:51
 EMCalNumbering.C:52
 EMCalNumbering.C:53
 EMCalNumbering.C:54
 EMCalNumbering.C:55
 EMCalNumbering.C:56
 EMCalNumbering.C:57
 EMCalNumbering.C:58
 EMCalNumbering.C:59
 EMCalNumbering.C:60
 EMCalNumbering.C:61
 EMCalNumbering.C:62
 EMCalNumbering.C:63
 EMCalNumbering.C:64
 EMCalNumbering.C:65
 EMCalNumbering.C:66
 EMCalNumbering.C:67
 EMCalNumbering.C:68
 EMCalNumbering.C:69
 EMCalNumbering.C:70
 EMCalNumbering.C:71
 EMCalNumbering.C:72
 EMCalNumbering.C:73
 EMCalNumbering.C:74
 EMCalNumbering.C:75
 EMCalNumbering.C:76
 EMCalNumbering.C:77
 EMCalNumbering.C:78
 EMCalNumbering.C:79
 EMCalNumbering.C:80
 EMCalNumbering.C:81
 EMCalNumbering.C:82
 EMCalNumbering.C:83
 EMCalNumbering.C:84
 EMCalNumbering.C:85
 EMCalNumbering.C:86
 EMCalNumbering.C:87
 EMCalNumbering.C:88
 EMCalNumbering.C:89
 EMCalNumbering.C:90
 EMCalNumbering.C:91
 EMCalNumbering.C:92
 EMCalNumbering.C:93
 EMCalNumbering.C:94
 EMCalNumbering.C:95
 EMCalNumbering.C:96
 EMCalNumbering.C:97
 EMCalNumbering.C:98
 EMCalNumbering.C:99
 EMCalNumbering.C:100
 EMCalNumbering.C:101
 EMCalNumbering.C:102
 EMCalNumbering.C:103
 EMCalNumbering.C:104
 EMCalNumbering.C:105
 EMCalNumbering.C:106
 EMCalNumbering.C:107
 EMCalNumbering.C:108
 EMCalNumbering.C:109
 EMCalNumbering.C:110
 EMCalNumbering.C:111
 EMCalNumbering.C:112
 EMCalNumbering.C:113
 EMCalNumbering.C:114
 EMCalNumbering.C:115
 EMCalNumbering.C:116
 EMCalNumbering.C:117
 EMCalNumbering.C:118
 EMCalNumbering.C:119
 EMCalNumbering.C:120
 EMCalNumbering.C:121
 EMCalNumbering.C:122
 EMCalNumbering.C:123
 EMCalNumbering.C:124
 EMCalNumbering.C:125
 EMCalNumbering.C:126
 EMCalNumbering.C:127
 EMCalNumbering.C:128
 EMCalNumbering.C:129
 EMCalNumbering.C:130
 EMCalNumbering.C:131
 EMCalNumbering.C:132
 EMCalNumbering.C:133
 EMCalNumbering.C:134
 EMCalNumbering.C:135
 EMCalNumbering.C:136
 EMCalNumbering.C:137
 EMCalNumbering.C:138
 EMCalNumbering.C:139
 EMCalNumbering.C:140
 EMCalNumbering.C:141
 EMCalNumbering.C:142
 EMCalNumbering.C:143
 EMCalNumbering.C:144
 EMCalNumbering.C:145
 EMCalNumbering.C:146
 EMCalNumbering.C:147
 EMCalNumbering.C:148
 EMCalNumbering.C:149
 EMCalNumbering.C:150
 EMCalNumbering.C:151
 EMCalNumbering.C:152
 EMCalNumbering.C:153
 EMCalNumbering.C:154
 EMCalNumbering.C:155
 EMCalNumbering.C:156
 EMCalNumbering.C:157
 EMCalNumbering.C:158
 EMCalNumbering.C:159
 EMCalNumbering.C:160
 EMCalNumbering.C:161
 EMCalNumbering.C:162
 EMCalNumbering.C:163
 EMCalNumbering.C:164
 EMCalNumbering.C:165
 EMCalNumbering.C:166
 EMCalNumbering.C:167
 EMCalNumbering.C:168
 EMCalNumbering.C:169
 EMCalNumbering.C:170
 EMCalNumbering.C:171
 EMCalNumbering.C:172
 EMCalNumbering.C:173
 EMCalNumbering.C:174
 EMCalNumbering.C:175
 EMCalNumbering.C:176
 EMCalNumbering.C:177
 EMCalNumbering.C:178
 EMCalNumbering.C:179
 EMCalNumbering.C:180
 EMCalNumbering.C:181
 EMCalNumbering.C:182
 EMCalNumbering.C:183
 EMCalNumbering.C:184
 EMCalNumbering.C:185
 EMCalNumbering.C:186
 EMCalNumbering.C:187
 EMCalNumbering.C:188
 EMCalNumbering.C:189
 EMCalNumbering.C:190
 EMCalNumbering.C:191
 EMCalNumbering.C:192
 EMCalNumbering.C:193
 EMCalNumbering.C:194
 EMCalNumbering.C:195
 EMCalNumbering.C:196
 EMCalNumbering.C:197
 EMCalNumbering.C:198
 EMCalNumbering.C:199
 EMCalNumbering.C:200
 EMCalNumbering.C:201
 EMCalNumbering.C:202
 EMCalNumbering.C:203
 EMCalNumbering.C:204
 EMCalNumbering.C:205
 EMCalNumbering.C:206
 EMCalNumbering.C:207
 EMCalNumbering.C:208
 EMCalNumbering.C:209
 EMCalNumbering.C:210
 EMCalNumbering.C:211
 EMCalNumbering.C:212
 EMCalNumbering.C:213
 EMCalNumbering.C:214
 EMCalNumbering.C:215
 EMCalNumbering.C:216
 EMCalNumbering.C:217
 EMCalNumbering.C:218
 EMCalNumbering.C:219
 EMCalNumbering.C:220
 EMCalNumbering.C:221
 EMCalNumbering.C:222
 EMCalNumbering.C:223
 EMCalNumbering.C:224
 EMCalNumbering.C:225
 EMCalNumbering.C:226
 EMCalNumbering.C:227
 EMCalNumbering.C:228
 EMCalNumbering.C:229
 EMCalNumbering.C:230
 EMCalNumbering.C:231
 EMCalNumbering.C:232
 EMCalNumbering.C:233
 EMCalNumbering.C:234
 EMCalNumbering.C:235
 EMCalNumbering.C:236
 EMCalNumbering.C:237
 EMCalNumbering.C:238
 EMCalNumbering.C:239
 EMCalNumbering.C:240
 EMCalNumbering.C:241
 EMCalNumbering.C:242
 EMCalNumbering.C:243
 EMCalNumbering.C:244
 EMCalNumbering.C:245
 EMCalNumbering.C:246
 EMCalNumbering.C:247
 EMCalNumbering.C:248
 EMCalNumbering.C:249
 EMCalNumbering.C:250
 EMCalNumbering.C:251
 EMCalNumbering.C:252
 EMCalNumbering.C:253
 EMCalNumbering.C:254
 EMCalNumbering.C:255
 EMCalNumbering.C:256
 EMCalNumbering.C:257
 EMCalNumbering.C:258
 EMCalNumbering.C:259
 EMCalNumbering.C:260
 EMCalNumbering.C:261
 EMCalNumbering.C:262
 EMCalNumbering.C:263
 EMCalNumbering.C:264
 EMCalNumbering.C:265
 EMCalNumbering.C:266
 EMCalNumbering.C:267
 EMCalNumbering.C:268
 EMCalNumbering.C:269
 EMCalNumbering.C:270
 EMCalNumbering.C:271
 EMCalNumbering.C:272
 EMCalNumbering.C:273
 EMCalNumbering.C:274
 EMCalNumbering.C:275
 EMCalNumbering.C:276
 EMCalNumbering.C:277
 EMCalNumbering.C:278
 EMCalNumbering.C:279
 EMCalNumbering.C:280
 EMCalNumbering.C:281
 EMCalNumbering.C:282
 EMCalNumbering.C:283
 EMCalNumbering.C:284
 EMCalNumbering.C:285
 EMCalNumbering.C:286
 EMCalNumbering.C:287
 EMCalNumbering.C:288
 EMCalNumbering.C:289
 EMCalNumbering.C:290
 EMCalNumbering.C:291
 EMCalNumbering.C:292
 EMCalNumbering.C:293
 EMCalNumbering.C:294
 EMCalNumbering.C:295
 EMCalNumbering.C:296
 EMCalNumbering.C:297
 EMCalNumbering.C:298
 EMCalNumbering.C:299
 EMCalNumbering.C:300
 EMCalNumbering.C:301
 EMCalNumbering.C:302
 EMCalNumbering.C:303
 EMCalNumbering.C:304
 EMCalNumbering.C:305
 EMCalNumbering.C:306
 EMCalNumbering.C:307
 EMCalNumbering.C:308
 EMCalNumbering.C:309
 EMCalNumbering.C:310
 EMCalNumbering.C:311
 EMCalNumbering.C:312
 EMCalNumbering.C:313
 EMCalNumbering.C:314
 EMCalNumbering.C:315
 EMCalNumbering.C:316
 EMCalNumbering.C:317
 EMCalNumbering.C:318
 EMCalNumbering.C:319
 EMCalNumbering.C:320
 EMCalNumbering.C:321
 EMCalNumbering.C:322
 EMCalNumbering.C:323
 EMCalNumbering.C:324
 EMCalNumbering.C:325
 EMCalNumbering.C:326
 EMCalNumbering.C:327
 EMCalNumbering.C:328
 EMCalNumbering.C:329
 EMCalNumbering.C:330
 EMCalNumbering.C:331
 EMCalNumbering.C:332
 EMCalNumbering.C:333
 EMCalNumbering.C:334
 EMCalNumbering.C:335
 EMCalNumbering.C:336
 EMCalNumbering.C:337
 EMCalNumbering.C:338
 EMCalNumbering.C:339
 EMCalNumbering.C:340
 EMCalNumbering.C:341
 EMCalNumbering.C:342
 EMCalNumbering.C:343
 EMCalNumbering.C:344
 EMCalNumbering.C:345
 EMCalNumbering.C:346
 EMCalNumbering.C:347
 EMCalNumbering.C:348
 EMCalNumbering.C:349
 EMCalNumbering.C:350
 EMCalNumbering.C:351
 EMCalNumbering.C:352
 EMCalNumbering.C:353
 EMCalNumbering.C:354
 EMCalNumbering.C:355
 EMCalNumbering.C:356
 EMCalNumbering.C:357
 EMCalNumbering.C:358
 EMCalNumbering.C:359
 EMCalNumbering.C:360
 EMCalNumbering.C:361
 EMCalNumbering.C:362
 EMCalNumbering.C:363
 EMCalNumbering.C:364
 EMCalNumbering.C:365
 EMCalNumbering.C:366
 EMCalNumbering.C:367
 EMCalNumbering.C:368
 EMCalNumbering.C:369
 EMCalNumbering.C:370
 EMCalNumbering.C:371
 EMCalNumbering.C:372
 EMCalNumbering.C:373
 EMCalNumbering.C:374
 EMCalNumbering.C:375
 EMCalNumbering.C:376
 EMCalNumbering.C:377
 EMCalNumbering.C:378
 EMCalNumbering.C:379
 EMCalNumbering.C:380
 EMCalNumbering.C:381
 EMCalNumbering.C:382
 EMCalNumbering.C:383
 EMCalNumbering.C:384
 EMCalNumbering.C:385
 EMCalNumbering.C:386
 EMCalNumbering.C:387
 EMCalNumbering.C:388
 EMCalNumbering.C:389
 EMCalNumbering.C:390
 EMCalNumbering.C:391
 EMCalNumbering.C:392
 EMCalNumbering.C:393
 EMCalNumbering.C:394
 EMCalNumbering.C:395
 EMCalNumbering.C:396
 EMCalNumbering.C:397
 EMCalNumbering.C:398
 EMCalNumbering.C:399
 EMCalNumbering.C:400
 EMCalNumbering.C:401
 EMCalNumbering.C:402
 EMCalNumbering.C:403
 EMCalNumbering.C:404
 EMCalNumbering.C:405
 EMCalNumbering.C:406
 EMCalNumbering.C:407
 EMCalNumbering.C:408
 EMCalNumbering.C:409
 EMCalNumbering.C:410
 EMCalNumbering.C:411
 EMCalNumbering.C:412
 EMCalNumbering.C:413
 EMCalNumbering.C:414
 EMCalNumbering.C:415
 EMCalNumbering.C:416
 EMCalNumbering.C:417
 EMCalNumbering.C:418
 EMCalNumbering.C:419
 EMCalNumbering.C:420
 EMCalNumbering.C:421
 EMCalNumbering.C:422
 EMCalNumbering.C:423
 EMCalNumbering.C:424
 EMCalNumbering.C:425
 EMCalNumbering.C:426
 EMCalNumbering.C:427
 EMCalNumbering.C:428
 EMCalNumbering.C:429
 EMCalNumbering.C:430
 EMCalNumbering.C:431
 EMCalNumbering.C:432
 EMCalNumbering.C:433
 EMCalNumbering.C:434
 EMCalNumbering.C:435
 EMCalNumbering.C:436
 EMCalNumbering.C:437
 EMCalNumbering.C:438
 EMCalNumbering.C:439
 EMCalNumbering.C:440
 EMCalNumbering.C:441
 EMCalNumbering.C:442
 EMCalNumbering.C:443
 EMCalNumbering.C:444
 EMCalNumbering.C:445
 EMCalNumbering.C:446
 EMCalNumbering.C:447
 EMCalNumbering.C:448
 EMCalNumbering.C:449
 EMCalNumbering.C:450
 EMCalNumbering.C:451
 EMCalNumbering.C:452
 EMCalNumbering.C:453
 EMCalNumbering.C:454
 EMCalNumbering.C:455
 EMCalNumbering.C:456
 EMCalNumbering.C:457
 EMCalNumbering.C:458
 EMCalNumbering.C:459
 EMCalNumbering.C:460
 EMCalNumbering.C:461
 EMCalNumbering.C:462
 EMCalNumbering.C:463
 EMCalNumbering.C:464
 EMCalNumbering.C:465
 EMCalNumbering.C:466
 EMCalNumbering.C:467
 EMCalNumbering.C:468
 EMCalNumbering.C:469
 EMCalNumbering.C:470
 EMCalNumbering.C:471
 EMCalNumbering.C:472
 EMCalNumbering.C:473
 EMCalNumbering.C:474
 EMCalNumbering.C:475
 EMCalNumbering.C:476
 EMCalNumbering.C:477