// =====================================================================
//  $Id: sw01eventdump.C,v 1.3 2005/04/07 07:25:36 goiwai Exp $
//  $Name: CLDAQ-1-14-06 $
//  $Log: sw01eventdump.C,v $
//  Revision 1.3  2005/04/07 07:25:36  goiwai
//  ROOTのバージョンあがったらキャンバスのマージンの取り方が変わった。
//
//  Revision 1.2  2005/04/07 00:45:19  goiwai
//  *** empty log message ***
//
//  Revision 1.1  2004/03/11 16:41:47  goiwai
//  レコードの階層を指定して、エレメント情報を出力します。
//  使ってみればわかると思います。
//  root [0] .L sw01eventdump.C
//  root [1] eventdump()
//
// =====================================================================
void eventdump( const char* filename="run000000.drec", int rec=0, int sec=0, int seg=0, int ele=0 )
{
  gROOT->Reset();
  if ( !gROOT->GetInterpreter()->IsLoaded("libCINT.so") ) {
    gSystem->Load("$CLDAQ_INSTALL/lib/bindings/libCINT.so");
  }
  if ( good(filename,rec,sec,seg,ele) ) {
    TInputObjectFile file( filename );
    cout << file[rec][sec][seg][ele] << endl;
  }
}

bool good( const char* filename, int rec, int sec, int seg, int ele )
{
  // TODO: isexist とか使えない LinkDef.h 直す
  //if ( !isexist( filename ) ) {
  //cout << "Not found: " << filename << endl;
  //return false;
  //}
  TInputObjectFile file( filename );

  Tint n = file.Size();
  if ( rec < 0 || rec >= n ) {
    cout << "No record: [" << rec << "], size: " << n << endl;
    return false;
  }

  n = file[rec].Size();
  if ( sec < 0 || sec >= n ) {
    cout << "No section: [" << sec << "], size: " << n << endl;
    return false;
  }

  n = file[rec][sec].Size();
  if ( seg < 0 || seg >= n ) {
    cout << "No segment: [" << seg << "], size: " << n << endl;
    return false;
  }

  n = file[rec][sec][seg].Size();
  if ( ele < 0 || ele >= n ) {
    cout << "No element: [" << ele << "], size: " << n << endl;
    return false;
  }

  // TODO: Ttrue とか Tcout も使いたい
  return true;
}
