00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class TTableSorter;
00026 class St_particle;
00027 TTableSorter *sorter = 0;
00028 St_particle *table=0;
00029 void Load() {
00030 if (gSystem.Load("xdf2root")) printf(" Loading DLL \"xdf2root\" failed \n");
00031 if (gSystem.Load("St_Tables")) printf(" Loading DLL \"St_Tables\" failed \n");
00032 }
00033 void TestSorter(Char_t *xdffilename="/afs/rhic.bnl.gov/star/data/samples/test.xdf",const Char_t *col="phep[3]")
00034 {
00035
00036 Load();
00037 St_XDFFile xdf(xdffilename);
00038 TDataSet *event = xdf.NextEventGet();
00039 if (!event) { printf(" NO events \n"); return;}
00040 table=0;
00041 TDataSetIter root(event);
00042 table = (St_particle *)root["/evgen/particle"];
00043 if (table) {
00044 TString colName = col;
00045 sorter = new TTableSorter(table,colName,1,5);
00046
00047 table->Print(0,6);
00048 int cols = sorter->GetFirstRow() + sorter->GetNRows() -1;
00049 cout << " Result of the ordering the table: " << endl
00050 << "<" << sorter->GetTableName() <<" : " << sorter->GetTableType() << "[" << sorter->GetFirstRow() << "]> - "
00051 << "<" << sorter->GetTableName()
00052 <<" : " << sorter->GetTableType()
00053 << "[" << cols << "]> "
00054 << " along: \"" << sorter->GetName() << "\" column" << endl;
00055 cout << "This table contains " << sorter->CountKeys() << " different keys" << endl;
00056 int i;
00057
00058 cout << "Index:";
00059 for (i=0; i < sorter->GetNRows(); i++) cout << " [" << sorter->GetIndex(i) << "] ";
00060 cout << endl;
00061
00062 cout << "Value: " ;
00063 particle_st *particle = table->GetTable();
00064 for (i=0; i < sorter->GetNRows(); i++) cout << particle[sorter->GetIndex(i)]->phep[3] << " ";
00065 cout << endl;
00066
00067 cout << " Binary Search test:"<< endl;
00068 for (i=sorter->GetNRows()-1; i >= 0 ; i--) {
00069 Float_t ph = particle[sorter->GetIndex(i)]->phep[3];
00070 Int_t lastFound = sorter->BinarySearch(ph);
00071 cout << i << ". " << ph << " == " << lastFound << " : " << sorter->GetLastFound() << endl;
00072 }
00073
00074
00075
00076
00077
00078 }
00079
00080
00081 cout << " Second pass " << endl;
00082 St_XDFFile xd("/afs/rhic.bnl.gov/star/data/samples/gstar.dst.xdf");
00083 event = xd.NextEventGet();
00084 if (event) {
00085 St_dst_vertex *table=0;
00086 table = (St_dst_vertex *)event->FindByName("vertex");
00087 if (table) {
00088 TString colName = "vtx_id";
00089 sorter = new TTableSorter(table,colName,1,5);
00090
00091
00092 TTableSorter &sort = *sorter;
00093 table->Print(0,6);
00094 int cols = sorter->GetFirstRow() + sorter->GetNRows() - 1;
00095 cout << " Result of the ordering the table: " << endl
00096 << "<" << sorter->GetTableName() <<" : " << sorter->GetTableType() << "[" << sorter->GetFirstRow() << "]> - "
00097 << "<" << sorter->GetTableName()
00098 <<" : " << sorter->GetTableType()
00099 << "[" << cols << "]> "
00100 << " along: \"" << sorter->GetName() << "\" column" << endl;
00101 cout << "This table contains " << sorter->CountKeys() << " different keys" << endl;
00102
00103 cout << "Index:";
00104 for (i=0; i < sorter->GetNRows(); i++) cout << " [" << sorter->GetIndex(i) << "] ";
00105 cout << endl;
00106
00107 cout << "Value: " ;
00108 dst_vertex_st *vertex = table->GetTable();
00109 for (i=0; i < sorter->GetNRows(); i++) cout << vertex[sorter->GetIndex(i)]->vtx_id << " ";
00110 cout << endl;
00111 for (i=0; i < sorter->GetNRows(); i++) cout << vertex[sorter->GetIndex(i)]->z << " ";
00112 cout << endl;
00113
00114 cout << " Binary Search test:"<< endl;
00115 Int_t nrows = sorter->GetNRows() - 1;
00116 for (i=nrows; i >= 0 ; i--) {
00117 Short_t vtx = vertex[sorter->GetIndex(i)]->vtx_id;
00118 Int_t lastFound = sorter->BinarySearch(vtx);
00119 cout << i << ". " << vtx << " == " << lastFound << " : " << sorter->GetLastFound() << endl;
00120 if (sort[vtx] != lastFound)
00121 cout << " *** Error **** " << lastFound << " != " << sorter[vtx] << endl;
00122
00123 }
00124
00125
00126
00127
00128
00129 }
00130 }
00131 else cout << " NO events" << endl;
00132 }