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