ROOT logo
#include <iomanip>
/**
 * Script to test for compatibility to read/write ESD information 
 */

Float_t EtaValue(UShort_t d, Char_t r, UShort_t t)
{
  return (d * 1000 + (r == 'I' || r == 'i' ? 0 : 1) * 100 + 0.001 * t);
}
Float_t MultValue(UShort_t d, Char_t r, UShort_t s, UShort_t t)
{
  return (EtaValue(d, r, t) + s);
}

void 
FillESD(AliESDFMD* esd)
{
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nRng = (d == 1 ? 1 : 2);
    for (UShort_t i = 0; i < nRng; i++) {
      Char_t   r    = (i == 0 ? 'I' : 'O');
      UShort_t nSec = (i == 0 ?  20 :  40);
      UShort_t nStr = (i == 0 ? 512 : 256);
      for (UShort_t s = 0; s < nSec; s++) { 
	for (UShort_t t = 0; t < nStr; t++) {
	  if (s == 0) esd->SetEta(d, r, 0, t, EtaValue(d, r, t));
	  esd->SetMultiplicity(d, r, s, t, MultValue(d, r, s, t));
	}
      } // for s
    } // for i 
  } // for d
}
	  
void 
WriteESD(const char* fileName)
{
  TFile*     file = TFile::Open(fileName, "RECREATE");
  TTree*     tree = new TTree("T", "T");
  AliESDFMD* fmd  = new AliESDFMD();
  tree->Branch("FMD", "AliESDFMD", &fmd);
  
  for (UShort_t i = 0; i < 10; i++) { 
    FillESD(fmd);
    tree->Fill();
  }
  file->Write();
  file->Close();
}

Bool_t 
PrintOne(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
	 Float_t  m, Float_t e)
{
  Float_t em = MultValue(d, r, s, t);
  Float_t ee = EtaValue(d, r, t);
  if (m != em || ee != e) {
    std::cerr << "FMD" << d << r << '[' 
	      << std::setw(2) << s  << ',' 
	      << std::setw(3) << t  << "]: " 
	      << std::setw(8) << m  << " (" 
	      << std::setw(8) << em << ' ' 
	      << (m == em ? "ok" : "bad") << ") @ "
	      << std::setw(8) << e << " ("
	      << std::setw(8) << ee << ' ' 
	      << (ee == e ? "ok" : "bad") << ')' << std::endl;
    return kFALSE;
  }
  return kTRUE;
}

Bool_t
PrintESD(AliESDFMD* esd)
{

  Bool_t ret = kTRUE;
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nRng = (d == 1 ? 1 : 2);
    for (UShort_t i = 0; i < nRng; i++) {
      Char_t   r    = (i == 0 ? 'I' : 'O');
      UShort_t nSec = (i == 0 ?  20 :  40);
      UShort_t nStr = (i == 0 ? 512 : 256);
      for (UShort_t s = 0; s < nSec; s++) { 
	for (UShort_t t = 0; t < nStr; t++) {
	  Float_t m = esd->Multiplicity(d, r, s, t);
	  Float_t e = esd->Eta(d, r, s, t);
	  if (!PrintOne(d, r, s, t, m, e)) ret = kFALSE;
	}
      }
    }
  }
  return ret;
}
  
void
ReadESD(const char* fileName)
{
  TFile*     file = TFile::Open(fileName, "READ");
  TTree*     tree = static_cast<TTree*>(file->Get("T"));
  AliESDFMD* fmd  = new AliESDFMD();
  tree->SetBranchAddress("FMD", &fmd);

  Bool_t ret = kTRUE;
  for (UShort_t i = 0; i < 10; i++) {
    fmd->Clear();
    tree->GetEntry(i);
    if (!PrintESD(fmd)) ret = kFALSE;
  }
  file->Close();
  if (!ret) 
    std::cerr << "There have been errors!" << std::endl;
  else 
    std::cout << "All correct" << std::endl;

}


void
TestESD(const char* fileName=0)
{
  if (!fileName) { 
    WriteESD("esd_test.root");
    return;
  }
  ReadESD(fileName);
}
 TestESD.C:1
 TestESD.C:2
 TestESD.C:3
 TestESD.C:4
 TestESD.C:5
 TestESD.C:6
 TestESD.C:7
 TestESD.C:8
 TestESD.C:9
 TestESD.C:10
 TestESD.C:11
 TestESD.C:12
 TestESD.C:13
 TestESD.C:14
 TestESD.C:15
 TestESD.C:16
 TestESD.C:17
 TestESD.C:18
 TestESD.C:19
 TestESD.C:20
 TestESD.C:21
 TestESD.C:22
 TestESD.C:23
 TestESD.C:24
 TestESD.C:25
 TestESD.C:26
 TestESD.C:27
 TestESD.C:28
 TestESD.C:29
 TestESD.C:30
 TestESD.C:31
 TestESD.C:32
 TestESD.C:33
 TestESD.C:34
 TestESD.C:35
 TestESD.C:36
 TestESD.C:37
 TestESD.C:38
 TestESD.C:39
 TestESD.C:40
 TestESD.C:41
 TestESD.C:42
 TestESD.C:43
 TestESD.C:44
 TestESD.C:45
 TestESD.C:46
 TestESD.C:47
 TestESD.C:48
 TestESD.C:49
 TestESD.C:50
 TestESD.C:51
 TestESD.C:52
 TestESD.C:53
 TestESD.C:54
 TestESD.C:55
 TestESD.C:56
 TestESD.C:57
 TestESD.C:58
 TestESD.C:59
 TestESD.C:60
 TestESD.C:61
 TestESD.C:62
 TestESD.C:63
 TestESD.C:64
 TestESD.C:65
 TestESD.C:66
 TestESD.C:67
 TestESD.C:68
 TestESD.C:69
 TestESD.C:70
 TestESD.C:71
 TestESD.C:72
 TestESD.C:73
 TestESD.C:74
 TestESD.C:75
 TestESD.C:76
 TestESD.C:77
 TestESD.C:78
 TestESD.C:79
 TestESD.C:80
 TestESD.C:81
 TestESD.C:82
 TestESD.C:83
 TestESD.C:84
 TestESD.C:85
 TestESD.C:86
 TestESD.C:87
 TestESD.C:88
 TestESD.C:89
 TestESD.C:90
 TestESD.C:91
 TestESD.C:92
 TestESD.C:93
 TestESD.C:94
 TestESD.C:95
 TestESD.C:96
 TestESD.C:97
 TestESD.C:98
 TestESD.C:99
 TestESD.C:100
 TestESD.C:101
 TestESD.C:102
 TestESD.C:103
 TestESD.C:104
 TestESD.C:105
 TestESD.C:106
 TestESD.C:107
 TestESD.C:108
 TestESD.C:109
 TestESD.C:110
 TestESD.C:111
 TestESD.C:112
 TestESD.C:113
 TestESD.C:114
 TestESD.C:115
 TestESD.C:116
 TestESD.C:117
 TestESD.C:118
 TestESD.C:119
 TestESD.C:120
 TestESD.C:121
 TestESD.C:122
 TestESD.C:123
 TestESD.C:124
 TestESD.C:125
 TestESD.C:126