Example #1
0
void TestSorter(Char_t *xdffilename="/afs/rhic.bnl.gov/star/data/samples/test.xdf",const Char_t *col="phep[3]")
{
 //   Read XDF file
    Load();
    St_XDFFile  xdf(xdffilename);
    TDataSet *event = xdf.NextEventGet();
    if (!event) { printf(" NO events \n"); return;}
    table=0;
    TDataSetIter root(event);
    table = (St_particle *)root["/evgen/particle"]; // [] means we are looking for the "real" table/ not just a St_DataSet
    if (table) {
       TString colName = col;
       sorter = new TTableSorter(table,colName,1,5);  
//       sorter = new TTableSorter(*table,colName,1,5);  
       table->Print(0,6);
       int cols = sorter->GetFirstRow() + sorter->GetNRows() -1;
       cout << " Result of the ordering the table: " << endl 
            << "<" << sorter->GetTableName() <<" : " << sorter->GetTableType() << "[" << sorter->GetFirstRow() << "]> - "	    
            << "<" << sorter->GetTableName() 
	    <<" : " << sorter->GetTableType() 
	    << "[" << cols << "]> "
            << " along: \"" << sorter->GetName() << "\" column" << endl;
       cout << "This table contains " << sorter->CountKeys() << " different keys" << endl;
       int i;

       cout << "Index:";
       for (i=0; i < sorter->GetNRows(); i++) cout << "   [" << sorter->GetIndex(i) << "]  ";
       cout << endl;

       cout << "Value: " ;
       particle_st *particle = table->GetTable();
       for (i=0; i < sorter->GetNRows(); i++) cout << particle[sorter->GetIndex(i)]->phep[3] << "  ";
       cout << endl;

       cout << " Binary Search test:"<< endl;
       for (i=sorter->GetNRows()-1; i >= 0 ; i--) {
          Float_t ph = particle[sorter->GetIndex(i)]->phep[3]; 
          Int_t lastFound = sorter->BinarySearch(ph);
          cout << i << ". " << ph << " == " << lastFound << " : " << sorter->GetLastFound() << endl;
       }
   
//      Int_t key2Count = 1;
//      cout << " Key: " << key2Count << " found " << sorter->CountKey(&key2Count) << " times" << endl;
//      key2Count = 10;
//      cout << " Key: " << key2Count << " found " << sorter->CountKey(&key2Count) << " times" << endl;
    }
  //  second sample:
  //   /afs/rhic.bnl.gov/star/data/samples/set0027_03_49evts_dst.xdf
    cout << " Second pass " << endl;
    St_XDFFile  xd("/afs/rhic.bnl.gov/star/data/samples/gstar.dst.xdf");
    event = xd.NextEventGet();
    if (event) {
      St_dst_vertex *table=0;
      table =  (St_dst_vertex *)event->FindByName("vertex");
      if (table) {
        TString colName = "vtx_id";
          sorter = new TTableSorter(table,colName,1,5);  
//        sorter = new TTableSorter(*table,colName,1,5);  
//        sorter = new TTableSorter(table->GetHeader(),colName,1,5);  
        TTableSorter &sort = *sorter;  
        table->Print(0,6);
        int cols = sorter->GetFirstRow() + sorter->GetNRows() - 1;
        cout << " Result of the ordering the table: " << endl 
             << "<" << sorter->GetTableName() <<" : " << sorter->GetTableType() << "[" << sorter->GetFirstRow() << "]> - "	    
             << "<" << sorter->GetTableName() 
   	     <<" : " << sorter->GetTableType() 
  	     << "[" << cols << "]> "
             << " along: \"" << sorter->GetName() << "\" column" << endl;
        cout << "This table contains " << sorter->CountKeys() << " different keys" << endl;

        cout << "Index:";
        for (i=0; i < sorter->GetNRows(); i++) cout << "   [" << sorter->GetIndex(i) << "]  ";
        cout << endl;

        cout << "Value: " ;
        dst_vertex_st *vertex = table->GetTable();
        for (i=0; i < sorter->GetNRows(); i++) cout << vertex[sorter->GetIndex(i)]->vtx_id << "  ";
        cout << endl;
        for (i=0; i < sorter->GetNRows(); i++) cout << vertex[sorter->GetIndex(i)]->z << "  ";
        cout << endl;

       cout << " Binary Search test:"<< endl;
       Int_t nrows = sorter->GetNRows() - 1;
       for (i=nrows; i >= 0 ; i--) {
          Short_t vtx = vertex[sorter->GetIndex(i)]->vtx_id; 
          Int_t lastFound = sorter->BinarySearch(vtx);
          cout << i << ". " << vtx << " == " << lastFound << " : " << sorter->GetLastFound() << endl;
          if (sort[vtx] != lastFound) 
                cout << " *** Error ****  " << lastFound << " != " << sorter[vtx] << endl;
//                printf(" *** Error ****  %d != %d \n" lastFound,sorter[vtx]);
       }
   
//      Int_t key2Count = 1;
//      cout << " Key: " << key2Count << " found " << sorter->CountKey(&key2Count) << " times" << endl;
//      key2Count = 10;
//      cout << " Key: " << key2Count << " found " << sorter->CountKey(&key2Count) << " times" << endl;
    }
   }
   else  cout << " NO events" << endl;
}