Example #1
0
//---------------------------------------------------------------------------
void __fastcall TFormSummaryRep::AddCurrentRow(GridData& GData,int Mul, bool Show, bool Clear)
{
//	bool Selected;
	TDataSet* DSet = GData.WrkDSet;
	if (Clear) {
		ClearSums(PageTag);
	}
	else {
		int ID;
		TDBGridColumnsEh* Columns;
		switch (PageTag) {
			case 1:	Columns = DBGridEh1->Columns;
						for (int i = 1; i < 14; i++) {
							Sum1[i] += Mul * DSet->FieldByName(Columns->Items[i]->FieldName)->AsFloat;
						}
						break;
			case 2:	Columns = DBGridEh2->Columns;
						for (int i = 2; i < 41; i++) {
							Sum2[i] += Mul * DSet->FieldByName(Columns->Items[i]->FieldName)->AsInteger;
						}
						break;
		}
		if (Show) ShowHighFooter(GData.WrkDSet);
	}
}
Example #2
0
read_fgtSimuParams() {
    // base libraries
    gSystem->Load("St_base");
    gSystem->Load("StChain");
    gSystem->Load("StUtilities");
    gSystem->Load("StIOMaker");
    gSystem->Load("StarClassLibrary");

    // db-related libraries
    gSystem->Load("St_Tables");
    gSystem->Load("StDbLib");
    gSystem->Load("StDbBroker");
    gSystem->Load("St_db_Maker");

    St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
    dbMk->SetDebug();
    dbMk->SetDateTime(20120301,0); // event or run start time, set to your liking
    dbMk->SetFlavor("ofl");

    dbMk->Init();
    dbMk->Make();

    TDataSet *DB = 0;
    DB = dbMk->GetDataBase("Calibrations/fgt/fgtSimuParams");
    if (!DB) {
        std::cout << "ERROR: no table found in db, or malformed local db config" << std::endl;
    }

    St_fgtSimuParams *dataset = 0;
    dataset = (St_fgtSimuParams*) DB->Find("fgtSimuParams");
    Int_t rows = dataset->GetNRows();
    if (rows > 1) {
        std::cout << "BAD INFO: found INDEXED table with " << rows << " rows, abort" << std::endl;
        return;
    }

    if (dataset) {
        fgtSimuParams_st *table = dataset->GetTable();
        int irow=0;
        printf(" print fgtSimuParams: comment=%s=\n", table[irow].comment);
        for (Int_t i = 0; i < 15; i++) {
            // sample output of few params
            std::cout << i << "th param : " << table[irow].param[i] << std::endl;
        }
    } else {
        std::cout << "ERROR: dataset does not contain requested table" << std::endl;
        return;
    }

}
Example #3
0
//_____________________________________________________________________________
void StarMCHits::MakeDetectorDescriptors() {
  if (! gGeoManager) {
    cout << "No gGeoManager" << endl;
    return;
  }
  TDataSet *Detectors = StMaker::GetChain()->GetDataBase("VmcGeometry/Index");
  if (! Detectors) {
    cout << "No Detectors found in VmcGeometry/Index" << endl;
  }
  // Make List of sensitive volumes
  TObjArray *vols = gGeoManager->GetListOfVolumes();
  Int_t nvol = vols->GetEntriesFast();
  Int_t nSensVol = 0;
  Int_t nsize = 100;
  TArrayI Indx(nsize); Int_t *indx = Indx.GetArray();
  for (Int_t i = 0; i < nvol; i++) {
    TGeoVolume *vol = (TGeoVolume *) vols->At(i);
    if (! vol) continue;
    TGeoMedium *med = vol->GetMedium();
    if (! med) continue;
    Int_t       isvol = (Int_t) med->GetParam(0);
    if (! isvol) continue;
    indx[nSensVol] = i;
    nSensVol++;
    if (nSensVol >= nsize) {
      nsize *= 2;
      Indx.Set(nsize); 
      indx = Indx.GetArray();
    }
    TString Path(MakeDetectorDescriptor(vol->GetName()));
    if (Detectors) {
      // Check consistency 
      StarVMCDetector *det = (StarVMCDetector *) Detectors->Find(vol->GetName());
      if (! det) {
	cout << "Detector description for " << vol->GetName() << "\t" << vol->GetTitle() << " is missing" << endl;
      } else {
	TString FMT = det->GetFMT();
	cout << "Found path:\t" << Path.Data() << endl;
	cout << "Set   path:\t" << FMT.Data();
	if (Path == FMT) cout << " are the same" << endl;
	else             cout << " are the different" << endl;
      }
    }
    
  }
}
String TGridModeDemoMainForm::GetSQLCondition(TcxGridDBTableView *AView, bool AAddFilter)
{
  String Result = "",
    AStr = "where ";
  TcxGridDBDataController *ADataController = AView->DataController;
  if (AView->IsDetail){
    AStr = " and ";
    String AFieldName = ADataController->DetailKeyFieldNames;
    String AMasterKeyFieldName = ADataController->MasterKeyFieldNames;
	TcxGridDBTableView *AMasterGridView =
      (TcxGridDBTableView*)AView->MasterGridView;
    TDataSet *AMasterDataSet = AMasterGridView->DataController->DataSet;
    Variant AMasterKeyValue = AMasterDataSet->FindField(AMasterKeyFieldName)->Value;
    Result = "where " + AFieldName + " = " + VarToStr(AMasterKeyValue);
  }
  if (AAddFilter && !ADataController->Filter->IsEmpty() && ADataController->Filter->Active)
    Result = Result + AStr + ADataController->Filter->FilterText;
  return Result;
}
Example #5
0
TestSorter() {
    gROOT->Macro("loadMuDst.C");
    gSystem->Load("StDbBroker");
    gSystem->Load("St_db_Maker");
    
    // get the table
    St_db_Maker dbMk("StarDb", "MySQL:StarDb");
    dbMk.Init();
    TDataSet *DB = dbMk.GetInputDB("Calibrations/emc/map");
    St_bemcMap* bemc = (St_bemcMap*)DB->Find("bemcMap");
    
    // build the sorter
    TString key="daqID";
    TTableSorter sorter(bemc, key);
    
    int matches = 0;
    int linearFound = 0;
    int sorterFound = 0;
    for(short daq=0; daq<4800; ++daq) {
        // find row by linear search first
        short linearSearchResult = -1;
        for(int i=0; i<4800; ++i) {
            if( ((*bemc)[i]).daqID == daq ) {
                linearSearchResult = i;
                linearFound += 1;
                break;
            }
        }
        
        // now try to find daqID using TTableSorter
        int sorterResult = sorter[daq];
        if(sorterResult > -1) sorterFound += 1;
        
        cout << "daqID " << daq << "\tlinear found row: " << linearSearchResult 
            << "\tsorter found row: " << sorterResult << endl;
        
        if(linearSearchResult == sorterResult) matches += 1;
    }
    
    cout << "Summary: linear found " << linearFound << ", sorter found " << 
        sorterFound << " and we had " << matches << " agreements." << endl;
}
Example #6
0
void UNV2417::ReadGroup(const std::string& myGroupLabel, std::ifstream& in_stream, TDataSet& theDataSet)
{
  TGroupId aId;
  for(; !in_stream.eof();){
    in_stream >> aId ;
    if(aId == -1){
      // end of dataset is reached
      break;
    }

    int n_nodes;
    TRecord aRec;
    int aTmp;
    in_stream>>aTmp; // miss not necessary values
    in_stream>>aTmp;
    in_stream>>aTmp;
    in_stream>>aTmp;
    in_stream>>aTmp;
    in_stream>>aTmp;
    in_stream>>n_nodes;

    std::getline(in_stream, aRec.GroupName, '\n'); // Finalise previous reading
    std::getline(in_stream, aRec.GroupName, '\n');

    int aElType;
    int aElId;
    int aNum;
    for(int j=0; j < n_nodes; j++){
      in_stream>>aElType;
      in_stream>>aElId;
      if ((myGroupLabel.compare("2435") == 0) ||
	  (myGroupLabel.compare("2452") == 0) ||
	  (myGroupLabel.compare("2467") == 0) ||
	  (myGroupLabel.compare("2477") == 0)) {
	in_stream>>aTmp;
	in_stream>>aTmp;
      }
      switch (aElType) {
      case 7: // Nodes
	aNum = aRec.NodeList.size();
	aRec.NodeList.resize(aNum + 1);
	aRec.NodeList[aNum] = aElId;
	break;
      case 8: // Elements
	aNum = aRec.ElementList.size();
	aRec.ElementList.resize(aNum + 1);
	aRec.ElementList[aNum] = aElId;
	break;
      }
    }
    theDataSet.insert(TDataSet::value_type(aId,aRec));
  }
Example #7
0
//---------------------------------------------------------------------------
void __fastcall TFormClientRep::AddCurrentRow(GridData& GData,int Mul, bool Show, bool Clear)
{
//	bool Selected;
	TDataSet* DSet = GData.WrkDSet;
	if (Clear) {
		ClearSums();
		if (PageTag == 4) {
//			DrawMap.clear();
		}
	}
	else {
		int ID;
		switch (PageTag) {
			case 3:	SumPayCalc += Mul*DSet->FieldByName("PAY_CALC")->AsInteger;
						SumPayRes  += Mul*DSet->FieldByName("PAY_RES")->AsInteger;
						SumPayAvc  += Mul*DSet->FieldByName("PAY_AVC")->AsInteger;
						SumPayRest += Mul*DSet->FieldByName("PAY_REST")->AsInteger;

						break;
		}
		if (Show) ShowHighFooter(GData.WrkDSet);
	}
}
void __fastcall TGridModeDemoMainForm::tvDataControllerFilterGetValueList(
    TcxFilterCriteria *Sender, int AItemIndex,
    TcxDataFilterValueList *AValueList)
{
  TDataSet *ADataSet = ((TcxGridDBTableView*)Grid->FocusedView)->DataController->DataSet;
  TcxGridDBColumn *AColumn = ((TcxGridDBTableView*)Grid->FocusedView)->Columns[AItemIndex];
  bool AIsLookupColumn = (AColumn->PropertiesClass == __classid(TcxLookupComboBoxProperties));
  try{
    Screen->Cursor = crHourGlass;
    GridModeDemoDataDM->qryHelper->SQL->Clear();
    GridModeDemoDataDM->qryHelper->SQL->Add(
      "Select DISTINCT " + AColumn->DataBinding->FieldName + " From " +
      GridModeDemoDataDM->GetTableNameByDataSet(ADataSet));
    GridModeDemoDataDM->qryHelper->SQL->Add(
      GetSQLCondition((TcxGridDBTableView*)Grid->FocusedView, false));
    GridModeDemoDataDM->qryHelper->Open();
    GridModeDemoDataDM->qryHelper->First();
    while (!GridModeDemoDataDM->qryHelper->Eof){
      Variant ADisplayValue = GridModeDemoDataDM->qryHelper->Fields->Fields[0]->Value;
      if (AIsLookupColumn){
        TcxLookupComboBoxProperties *AProperties =
          (TcxLookupComboBoxProperties*)AColumn->GetProperties();
        ADataSet = AProperties->ListSource->DataSet;
        ADisplayValue = ADataSet->Lookup(
          AProperties->KeyFieldNames,ADisplayValue, AProperties->ListFieldNames);
      }
      if (VarIsNull(ADisplayValue)) return;
      AValueList->Add(fviValue, GridModeDemoDataDM->qryHelper->Fields->Fields[0]->Value,
        ADisplayValue, false);
      GridModeDemoDataDM->qryHelper->Next();
    }
    GridModeDemoDataDM->qryHelper->Close();
  }
  __finally{
    Screen->Cursor = crDefault;
  }
}
Example #9
0
// Author V.Fine 06/12/2001 BNL mailto:[email protected]
// This run Pythia using ROOT TPYthia6 interface
// Thanks Michael Bussmann <*****@*****.**> for Pythia living example
void ReadPythia(const char *fileName="pythia.root")
{
  struct pythia_particle {
        Int_t status;        // status of particle          ( LUJETS K[1] )
        Int_t pdg_id;        // flavour code                ( LUJETS K[2] )
        Int_t parent;        // parrent's id                ( LUJETS K[3] )
        Int_t firstChild;    // id of first child           ( LUJETS K[4] )
        Int_t lastChild;     // id of last  child           ( LUJETS K[5] )
        Float_t momentum[4]; // X.Y,Z,energy momenta [GeV/c]( LUJETS P[1]=P[4] )
        Float_t mass;        // Mass      [Gev/c^2]         ( LUJETS P[5] )
        Float_t vertex[4];   // X,Y,Z vertex  [mm]; time of procuction [mm/c]( LUJETS V[1]-V[4] )
        Float_t lifetime;    // proper lifetime [mm/c]      ( LUJETS V[5] )
  };
  TFileIter readEvents(fileName);
  TObject *nextObject = 0;
  // the number of the object available directly from "MyDataSet.root"
  Int_t size = readEvents.TotalKeys();
  printf(" The total number of the events: %d\n",size);

  //-----------------------------------------------------------------------
  // Loop over all events, read them in to memory one by one

  printf(" -- > Loop over all events, read them in to memory one by one < -- \n");
  for( readEvents = 0; int(readEvents) < size; readEvents.SkipObjects() ){
      nextObject = *readEvents;
      printf(" %d bytes of the object \"%s\" of class \"%s\" written with TKey \"%s\"  has been read from file\n"
               ,readEvents.GetObjlen()
               ,nextObject->GetName()
               ,nextObject->IsA()->GetName()
               ,(const char *)readEvents
            );
      TDataSet *event = (TDataSet *)nextObject;
      event->ls(9);
      delete nextObject;
  }
}
void ExtractFeatures(const TDataSet& data_set, TFeatures* features, bool sse_on) {
    Timer t;
    t.start();
    for (size_t image_idx = 0; image_idx < data_set.size(); ++image_idx) {
        vector<float> one_image_features;
        BMP *im = data_set[image_idx].first;
        uint h = im->TellHeight() - 2, w = im->TellWidth() - 2;
        Matrix <float>  Direct(h, w), Abs(h, w);
        if (sse_on){
            get_dir_abs_SSE(im, Direct, Abs);
            to_features(Direct, Abs, one_image_features);
        }
        else{
            get_dir_abs(im, Direct, Abs);
            to_features(Direct, Abs, one_image_features);
        }
        features->push_back(make_pair(one_image_features,  data_set[image_idx].second));
    }
    if (sse_on)
        t.check("SSE ON");
    else
        t.check("SSE OFF");
}
//---------------------------------------------------------------------------
void __fastcall TfrmHomePhotosBase::InitializeFrame()
{
    TDataSet* dsHomes;
    TdxTileControlItem* AItem;
    TFormatSettings AFmtSettings;
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, AFmtSettings);
    tcHomePhotos->BeginUpdate();
    __try
    {
        dsHomes = DMRealtorWorld->clHomesAndHomes;
        dsHomes->First();
        while (!dsHomes->Eof)
        {
            AItem = tcHomePhotos->CreateItem(true);
            AItem->Glyph->Image->LoadFromFieldValue(dsHomes->FieldByName("Photo")->Value);
            AItem->Glyph->Mode = ifmStretch;
            AItem->Text2->Value = " " + dsHomes->FieldByName("Beds")->AsString + " Beds" + "\n" + " " + dsHomes->FieldByName("Baths")->AsString + " Baths ";
            AItem->Text2->IndentHorz = 0;
            AItem->Text2->Font->Size = 13;
            AItem->Text2->IndentVert = 0;
            AItem->Text2->Transparent = false;
            AItem->Text3->Value = " " + FloatToStrF(dsHomes->FieldByName("Price")->AsFloat, ffCurrency, 10, 0, AFmtSettings) + " ";
            AItem->Text3->IndentHorz = 0;
            AItem->Text3->IndentVert = 0;
            AItem->Text3->Font->Size = 13;
            AItem->Text3->Transparent = false;
            AItem->Tag = dsHomes->FieldByName("ID")->AsInteger;
            AItem->OnClick = OnItemClick;
            dsHomes->Next();
        }
    }
    __finally
    {
        tcHomePhotos->EndUpdate();
    }
}
Example #12
0
void fpsGain_db(char* opt="", char* year="15sim") {
  TString option(opt), yr(year);  
  TString storeTime; // storetime is begin time for validity range for WRITING DB
  int date,time;     // time for READING DB
  std::cout << "year = " << year << "\n";
  if(yr.Contains("15ofl")){
    storeTime="2014-12-20 00:00:01";
    date = 20141225; time = 0;
  }else if(yr.Contains("15sim")){
    storeTime="2014-12-10 00:00:02";
    date = 20141215; time = 0;
  }else{
    std::cout << "Please specify valid year tag\n"; exit;
  }
  std::cout << "Opt =" << opt << "\n";
  std::cout << "write = " << option.Contains("writedb")   << "\n";
  std::cout << "storetime =" << storeTime << "\n";
  std::cout << "date,time =" << date <<" "<< time << "\n";
  
  gROOT->Macro("loadlib.C");
  
  const Int_t MAX_DB_INDEX = 252;
  fpsGain_st table[MAX_DB_INDEX];

  if(option.Contains("writedb")) {
    gSystem->Setenv("DB_ACCESS_MODE","write");
    StDbManager* mgr = StDbManager::Instance();
    StDbConfigNode* node = mgr->initConfig("Calibrations_fps");
    StDbTable* dbtable = node->addDbTable("fpsGain");
    mgr->setStoreTime(storeTime.Data());
    
    int id=0;
    for (Int_t q = 1; q <= 4; q++) {
      for (Int_t l = 1; l <= 3; l++) {
	for (Int_t s = 1; s <= 21; s++) {
	  table[id].slatid = id; 
	  int flag=0;
	  if(q==2 || q==4){
	    if(s>=20) flag=1;
	  }	    
	  float mip=100.0;
	  if(l==3) mip=50.0;
	  if(flag==0){table[id].slatid = id; table[id].MIP=mip;} 
	  else       {table[id].slatid = id; table[id].MIP=0;} 
	  printf("id=%3d Q%1dL%1dS%2d mip=%f\n",id,q,l,s,table[id].MIP);
	  id++;
	}
      }
    }

    dbtable->SetTable((char*)&table, MAX_DB_INDEX);
    if(yr.Contains("sim")) dbtable->setFlavor("sim");
    mgr->storeDbTable(dbtable);    
    std::cout << "INFO: table saved to database" << std::endl;
  }

  std::cout << "INFO: Reading database" << std::endl;  
  gSystem->Unsetenv("DB_ACCESS_MODE");
  //gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
  St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
  dbMk->SetDebug();
  dbMk->SetDateTime(date,time); // event or run start time, set to your liking
  if(yr.Contains("ofl"))      {dbMk->SetFlavor("ofl");}
  else if(yr.Contains("sim")) {dbMk->SetFlavor("sim");}
  dbMk->Init();
  dbMk->Make();
  TDataSet *DB = 0;
  DB = dbMk->GetDataBase("Calibrations/fps/fpsGain");
  if (!DB) std::cout << "ERROR: no table found in db, or malformed local db config" << std::endl;
  St_fpsGain *dataset = 0;
  dataset = (St_fpsGain*) DB->Find("fpsGain");
  if (!dataset) {
    td::cout << "ERROR: dataset does not contain requested table" << std::endl;
    return;
  }
  Int_t rows = dataset->GetNRows();
  if (rows > 1) {
    std::cout << "INFO: found INDEXED table with " << rows << " rows" << std::endl;
  }
  TDatime val[2];
  dbMk->GetValidity((TTable*)dataset,val);
  std::cout << "Dataset validity range: [ " << val[0].GetDate() << "." << val[0].GetTime() << " - " 
	    << val[1].GetDate() << "." << val[1].GetTime() << " ] "
	    << std::endl;    
  fpsGain_st *tbl = dataset->GetTable();
  for (Int_t i = 0; i < rows; i++) {
    std::cout << Form("Row=%4d slatid=%3d MIP=%8.4f\n",i,
		      tbl[i].slatid,tbl[i].MIP);
  }
}
Example #13
0
void fPostStatus_db(
		const char* opt   = "",
		const char* year  = "17sim",
		const char* input = "fPostStatus.txt",
		int readdate = 0,
		int readtime = 0)
{
    // storeTime is beginning time for validity range in case of WRITING DB
    TString option(opt), yr(year), storeTime;
    int date, time; // time for READING DB
    
    std::cout <<"year = " <<year <<std::endl;
    if (yr.Contains("17sim"))
	{
	    storeTime = "2016-12-10 00:00:00";
	    date = 20161210;
	    time = 0;
	}
    else if (yr.Contains("17ofl"))
	{
	    storeTime = "2016-12-20 00:00:00";
	    date = 20161220;
	    time = 0;
	}
    else { std::cout << "Please specify valid year tag\n"; exit; }

	if (readdate > 0) date = readdate;
	if (readtime > 0) time = readtime;

    std::cout << "Opt ="         << opt << "\n";
    std::cout << "write = "      << option.Contains("writedb") << "\n";
    std::cout << "storetime = "  << storeTime << "\n";
    std::cout << "date, time = " << date <<" "<< time << "\n";
    
    gROOT->Macro("./loadlib.C");
    
    //-------------------------------------------
    
    const Int_t MAX_DB_INDEX = 241;
    fpostStatus_st in[MAX_DB_INDEX];
    
    FILE *FP = fopen(input, "r");
    if (!FP) { printf("Could not open %s\n", input); exit; }
    printf("\nReading %s\n", input);
    
    char line[1000];
    int n = 0;
    while (fgets(line, 1000, FP) != NULL)
    {	
        sscanf(line,"%hu %hu", &in[n].slatid, &in[n].status);
        printf("slatId=%3d status=%1d\n", in[n].slatid, in[n].status);
        n++;
    }
    printf("Found %d entries\n", n);
    fclose(FP);
    printf("File Closed\n", n);
    
    //-------------------------------------------
    
	#if 1
    if (option.Contains("writedb"))
	{
	    gSystem->Setenv("DB_ACCESS_MODE", "write");
	    StDbManager*    mgr     = StDbManager::Instance();
	    StDbConfigNode* node    = mgr->initConfig("Calibrations_fps");
	    StDbTable*      dbtable = node->addDbTable("fpostStatus");
	    mgr->setStoreTime(storeTime.Data());
	    dbtable->SetTable((char*)&in, MAX_DB_INDEX);
	    if (yr.Contains("sim")) dbtable->setFlavor("sim");
	    mgr->storeDbTable(dbtable);
	    std::cout << "INFO: table saved to database" << std::endl;
	}

	//-------------------------------------------

    if (option.Contains("readdb"))
	{
	    std::cout << "INFO: Reading database" << std::endl;
	    gSystem->Unsetenv("DB_ACCESS_MODE");
	    //gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
	    
	    St_db_Maker* dbMk = new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
	    dbMk->SetDebug();
	    dbMk->SetDateTime(date, time); // event or run start time, set to your liking
	    if      (yr.Contains("ofl")) { dbMk->SetFlavor("ofl"); }
	    else if (yr.Contains("sim")) { dbMk->SetFlavor("sim"); }
	    dbMk->Init();
	    dbMk->Make();
	    
	    TDataSet *DB = 0;
	    DB = dbMk->GetDataBase("Calibrations/fps/fpostStatus");
	    if (!DB) std::cout << "ERROR: no table found in db, or malformed local db config" << std::endl;
	    
	    St_fpostStatus *dataset = 0;
	    dataset = (St_fpostStatus*) DB->Find("fpostStatus");
	    if (!dataset) { std::cout << "ERROR: dataset does not contain requested table" << std::endl; return; }
	    Int_t rows = dataset->GetNRows();
	    if (rows > 1) std::cout << "INFO: found INDEXED table with " << rows << " rows" << std::endl;
	    
	    TDatime val[2];
	    dbMk->GetValidity((TTable*)dataset, val);
	    std::cout << "Dataset validity range: [ " << val[0].GetDate() << "." << val[0].GetTime() << " - "
		      << val[1].GetDate() << "." << val[1].GetTime() << " ] " << std::endl;
	    
	    fpostStatus_st *table = (fpostStatus_st*)dataset->GetTable();
	    for (Int_t i = 0; i < rows; i++)
		{
		    std::cout << Form("Row=%3d slatid=%3d status=%1d\n", i, table[i].slatid, table[i].status);
		}
	}
	#endif

    return;
}//Main
Example #14
0
void fpsMap_db(char* opt="", char* year="15sim", char* input="fpsmap.txt") {
  TString option(opt), yr(year);  
  TString storeTime; // storetime is begin time for validity range for WRITING DB
  int date,time;     // time for READING DB
  std::cout << "year = " << year << "\n";
  if(yr.Contains("15ofl")){
    storeTime="2014-12-20 00:00:3";
    date = 20141221; time = 0;
  }else if(yr.Contains("15sim")){
    storeTime="2014-12-10 00:00:01";
    date = 20141210; time = 1;
  }else if(yr.Contains("17ofl")){
      storeTime="2016-12-20 00:00:00";
      date = 20161220; time = 0;
  }else if(yr.Contains("17sim")){
      storeTime="2016-12-10 00:00:00";
      date = 20161210; time = 0;
  }else{
    std::cout << "Please specify valid year tag\n"; exit;
  }
  std::cout << "Opt =" << opt << "\n";
  std::cout << "write = " << option.Contains("writedb")   << "\n";
  std::cout << "storetime =" << storeTime << "\n";
  std::cout << "date,time =" << date <<" "<< time << "\n";
  
  gROOT->Macro("./loadlib.C");
  
  const Int_t MAX_DB_INDEX = 252;
  fpsMap_st in[MAX_DB_INDEX];
  for(int i=0; i<MAX_DB_INDEX; i++){
    in[i].slatid=i;
    in[i].QTaddr=-1;
    in[i].QTch=-1;
  }
  
  FILE *FP = fopen(input,"r");
  if(!FP) { printf("Could not open %s\n",input); exit;}
  printf("Reading %s\n",input);
  char line[1000], nw[10], dc[10], posi[10];
  int id,q,l,s,sipm,sipmbd,feebd,tbox,tgrp,qtaddr,qtch,cbl;
  int n=0;
  while(fgets(line,1000,FP)!=NULL){
    sscanf(line,"%d %d %d %d %d %s %d %d %d %d",
	   &id,&q,&l,&s,
	   &sipm,nw,
	   &tbox,&tgrp,
	   &qtaddr,&qtch);
    //printf("Id=%3d Q=%3d L=%3d S=%3d QTaddr=%1d QTch=%2d\n",id,q,l,s,qtaddr,qtch);
    in[id].QTaddr=qtaddr;
    in[id].QTch=qtch;
    n++;
  }    
  for(int i=0; i<MAX_DB_INDEX; i++){
    printf("Id=%3d QTaddr=%1d QTch=%2d\n",in[i].slatid,in[i].QTaddr,in[i].QTch);
  }
  printf("Found %d entries\n",n);
  
  if(option.Contains("writedb")) {
    gSystem->Setenv("DB_ACCESS_MODE","write");
    StDbManager* mgr = StDbManager::Instance();
    StDbConfigNode* node = mgr->initConfig("Geometry_fps");
    StDbTable* dbtable = node->addDbTable("fpsMap");
    mgr->setStoreTime(storeTime.Data());    
    dbtable->SetTable((char*)&in, MAX_DB_INDEX);
    if(yr.Contains("sim")) dbtable->setFlavor("sim");
    mgr->storeDbTable(dbtable);    
    std::cout << "INFO: table saved to database" << std::endl;
  }
  
  std::cout << "INFO: Reading database" << std::endl;  
  gSystem->Unsetenv("DB_ACCESS_MODE");
  //gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
  St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
  dbMk->SetDebug();
  dbMk->SetDateTime(date,time); // event or run start time, set to your liking
  if(yr.Contains("ofl"))      {dbMk->SetFlavor("ofl");}
  else if(yr.Contains("sim")) {dbMk->SetFlavor("sim");}
  dbMk->Init();
  dbMk->Make();
  TDataSet *DB = 0;
  DB = dbMk->GetDataBase("Geometry/fps/fpsMap");
  if (!DB) std::cout << "ERROR: no table found in db, or malformed local db config" << std::endl;
  St_fpsMap *dataset = 0;
  dataset = (St_fpsMap*) DB->Find("fpsMap");
  if (!dataset) {
    td::cout << "ERROR: dataset does not contain requested table" << std::endl;
    return;
  }
  Int_t rows = dataset->GetNRows();
  if (rows > 1) {
    std::cout << "INFO: found INDEXED table with " << rows << " rows" << std::endl;
  }
  TDatime val[2];
  dbMk->GetValidity((TTable*)dataset,val);
  std::cout << "Dataset validity range: [ " << val[0].GetDate() << "." << val[0].GetTime() << " - " 
	    << val[1].GetDate() << "." << val[1].GetTime() << " ] "
	    << std::endl;    
  fpsMap_st *table = dataset->GetTable();
  for (Int_t i = 0; i < rows; i++) {
    std::cout << Form("Row=%4d slatid=%3d QTaddr=%2d QTch=%2d\n",i,
		      table[i].slatid,
		      table[i].QTaddr,table[i].QTch);
  }
}
Example #15
0
void fpsChannelGeometry_db(char* opt="", char* year="15sim") {
  TString option(opt), yr(year);  
  TString storeTime; // storetime is begin time for validity range for WRITING DB
  int date,time;     // time for READING DB
  std::cout << "year = " << year << "\n";
  if(yr.Contains("15ofl")){
    storeTime="2014-12-20 00:00:01";
    date = 20141220; time = 1;
  }else if(yr.Contains("15sim")){
    storeTime="2014-12-10 00:00:01";
    date = 20141210; time = 1;
  }else if (yr.Contains("17ofl")){      
      storeTime="2016-12-20 00:00:00";
      date = 20161220; time = 0;
  }else if(yr.Contains("17sim")){
      storeTime="2016-12-10 00:00:00";
      date = 20161210; time = 0;      
  }else{
    std::cout << "Please specify valid year tag\n"; exit;
  }
  std::cout << "Opt =" << opt << "\n";
  std::cout << "write = " << option.Contains("writedb")   << "\n";
  std::cout << "storetime =" << storeTime << "\n";
  std::cout << "date,time =" << date <<" "<< time << "\n";
  
  gROOT->Macro("loadlib.C");
  
  const Int_t MAX_DB_INDEX = 12;
  fpsChannelGeometry_st table[MAX_DB_INDEX];

  if(option.Contains("writedb")) {
    gSystem->Setenv("DB_ACCESS_MODE","write");
    StDbManager* mgr = StDbManager::Instance();
    StDbConfigNode* node = mgr->initConfig("Geometry_fps");
    StDbTable* dbtable = node->addDbTable("fpsChannelGeometry");
    mgr->setStoreTime(storeTime.Data());

    table[ 0].quad = 1; table[ 0].layer = 1; table[ 0].nslat = 21; 
    table[ 1].quad = 1; table[ 1].layer = 2; table[ 1].nslat = 21; 
    table[ 2].quad = 1; table[ 2].layer = 3; table[ 2].nslat = 21; 
    table[ 3].quad = 2; table[ 3].layer = 1; table[ 3].nslat = 19; 
    table[ 4].quad = 2; table[ 4].layer = 2; table[ 4].nslat = 19; 
    table[ 5].quad = 2; table[ 5].layer = 3; table[ 5].nslat = 19; 
    table[ 6].quad = 3; table[ 6].layer = 1; table[ 6].nslat = 21; 
    table[ 7].quad = 3; table[ 7].layer = 2; table[ 7].nslat = 21; 
    table[ 8].quad = 3; table[ 8].layer = 3; table[ 8].nslat = 21; 
    table[ 9].quad = 4; table[ 9].layer = 1; table[ 9].nslat = 19; 
    table[10].quad = 4; table[10].layer = 2; table[10].nslat = 19; 
    table[11].quad = 4; table[11].layer = 3; table[11].nslat = 19; 

    dbtable->SetTable((char*)&table, MAX_DB_INDEX);
    if(yr.Contains("sim")) dbtable->setFlavor("sim");
    mgr->storeDbTable(dbtable);    
    std::cout << "INFO: table saved to database" << std::endl;
  }

  std::cout << "INFO: Reading database" << std::endl;  
  gSystem->Unsetenv("DB_ACCESS_MODE");
  //gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
  St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
  dbMk->SetDebug();
  dbMk->SetDateTime(date,time); // event or run start time, set to your liking
  if(yr.Contains("ofl"))      {dbMk->SetFlavor("ofl");}
  else if(yr.Contains("sim")) {dbMk->SetFlavor("sim");}
  dbMk->Init();
  dbMk->Make();
  TDataSet *DB = 0;
  DB = dbMk->GetDataBase("Geometry/fps/fpsChannelGeometry");
  if (!DB) std::cout << "ERROR: no table found in db, or malformed local db config" << std::endl;
  St_fpsChannelGeometry *dataset = 0;
  dataset = (St_fpsChannelGeometry*) DB->Find("fpsChannelGeometry");
  if (!dataset) {
    td::cout << "ERROR: dataset does not contain requested table" << std::endl;
    return;
  }
  Int_t rows = dataset->GetNRows();
  if (rows > 1) {
    std::cout << "INFO: found INDEXED table with " << rows << " rows" << std::endl;
  }
  TDatime val[2];
  dbMk->GetValidity((TTable*)dataset,val);
  std::cout << "Dataset validity range: [ " << val[0].GetDate() << "." << val[0].GetTime() << " - " 
	    << val[1].GetDate() << "." << val[1].GetTime() << " ] "
	    << std::endl;    
  fpsChannelGeometry_st *tbl = dataset->GetTable();
  for (Int_t i = 0; i < rows; i++) {
    std::cout << Form("Row=%4d quad=%1d layer=%1d nslat=%2d\n",i,
		      tbl[i].quad,tbl[i].layer,tbl[i].nslat);
  }
}
Example #16
0
//________________________________________________________________________________
//void Db(const Char_t *tabNam  = "Calibrations/tpc/noiseElim", 
// void DbS(const Char_t *tabNam  = 
// 	"Survey/svt/LadderOnSurvey",Int_t date = 20051101, Int_t time = 0 
void MakeSvtWaferOnGlobal(Int_t date = 20050101, Int_t time = 65 ){ 
  TGeoHMatrix GL, WL,LSU,LSH,SHG,WG;
  if (dbMk == 0) Load();
  dbMk->SetDebug(2);
  dbMk->SetDateTime(date,time); 
  //  dbMk->SetFlavor("ofl+laserDV","tpcDriftVelocity");
  //  dbMk->SetMaxEntryTime(20040520,0);
  // to browse 1 database, use this one
  TDataSet *set = dbMk->GetDataBase("Geometry/ssd");
  if (! set) return;                                                              // Positioning of the SSD: 
  St_Survey *SsdOnGlobal = (St_Survey *) set->Find("SsdOnGlobal");
  if (! SsdOnGlobal)  {cout << "SsdOnGlobal has not been found"  << endl; return;}
  Survey_st *OnGlobal         = SsdOnGlobal->GetTable();        // SSD and SVT as whole 
  GL.SetRotation(&OnGlobal->r00);
  GL.SetTranslation(&OnGlobal->t0); //cout << "WL\t"; WL.Print();
  set = dbMk->GetDataBase("Geometry/svt");
  St_Survey *WaferOnLadder = (St_Survey *) set->Find("WaferOnLadder");
  St_Survey *LadderOnSurvey = (St_Survey *) set->Find("LadderOnSurvey");
  St_Survey *LadderOnShell = (St_Survey *) set->Find("LadderOnShell");
  St_Survey *ShellOnGlobal = (St_Survey *) set->Find("ShellOnGlobal");
  Int_t NW = WaferOnLadder->GetNRows();
  Int_t NL = LadderOnSurvey->GetNRows();
  Survey_st *waferOnLadder = WaferOnLadder->GetTable();
  Survey_st *ladderOnSurvey = LadderOnSurvey->GetTable();
  Survey_st *ladderOnShell = LadderOnShell->GetTable();
  Survey_st *shellOnGlobal0 = ShellOnGlobal->GetTable(0);
  Survey_st *shellOnGlobal1 = ShellOnGlobal->GetTable(1);
  St_svtWafersPosition *svtwafer = new St_svtWafersPosition("svtWafersPosition",216);
  svtWafersPosition_st row;
  for (Int_t i = 0; i < NW; i++, waferOnLadder++)
    {
      Int_t Idw = waferOnLadder->Id;
      WL.SetRotation(&waferOnLadder->r00);
      WL.SetTranslation(&waferOnLadder->t0);
      //	    if (i==0) WL.Print();
      Int_t wshell  = 0;
      Int_t wbarrel  = Idw/1000;
      Int_t wwafer  = (Idw - 1000*wbarrel)/100;
      Int_t wladder = Idw%100;
      Int_t wlayer = 2*wbarrel + wladder%2 - 1;
      //	    cout << waferOnLadder->Id << "  "<< Idw<< " " <<  100*wwafer + wladder + 1000*wlayer <<endl;
      for ( Int_t j = 0; j < NL; j++, ladderOnSurvey++, ladderOnShell++)
	{
	  Int_t Idl =  ladderOnSurvey->Id;
	  Int_t lbarrel  = Idl/1000;
	  Int_t lladder = Idl%100;
	  if( wladder ==  lladder )
	    {
	      LSU.SetRotation(&ladderOnSurvey->r00);
	      LSU.SetTranslation(&ladderOnSurvey->t0);
	      LSH.SetRotation(&ladderOnShell->r00);
	      LSH.SetTranslation(&ladderOnShell->t0);
	      if( (wbarrel == 1 && wladder <= 4) || (wbarrel == 2 && wladder <= 6) ||  (wbarrel == 3 && wladder <= 8) )
		{
		  SHG.SetRotation(&shellOnGlobal0->r00);
		  SHG.SetTranslation(&shellOnGlobal0->t0);
		}else
		{
		  SHG.SetRotation(&shellOnGlobal1->r00);
		  SHG.SetTranslation(&shellOnGlobal1->t0);
		}		    
	      //   SsdOnGlobal * ShellOnGlobal * LadderOnShell * LadderOnSurvey * WaferOnLadder 
	      WG = GL * SHG * LSH * LSU * WL; //  WG.Print();
	      //			    TGeoHMatrix WGInv = WG.Inverse();
	      Double_t *r = WG.GetRotationMatrix();
	      Int_t fail = 0;
	      for (int l = 0; l < 9; l++) {
		if (TMath::Abs(r[l]) >=  1.000001) fail++;
	      }
	      if (fail) {
		cout << "===============" << waferOnLadder->Id << "  "<< Idw << " " <<  100*wwafer + wladder + 1000*wlayer <<endl;
		cout << "WG\t"; WG.Print();
		//			      cout << "SHG\t"; SHG.Print();
		//			      cout << "LSH\t"; LSH.Print();
		//			      cout << "LSU\t"; LSU.Print();
		//			      cout << "WL\t"; WL.Print();
	      }
	      row.driftDirection[0] = r[0]; row.normalDirection[0] = r[1]; row.transverseDirection[0] = r[2];
	      row.driftDirection[1] = r[3]; row.normalDirection[1] = r[4]; row.transverseDirection[1] = r[5];
	      row.driftDirection[2] = r[6]; row.normalDirection[2] = r[7]; row.transverseDirection[2] = r[8];
	      Double_t norm;
	      TVector3 d(row.driftDirection); norm = 1/d.Mag(); d *= norm;
	      TVector3 t(row.transverseDirection); norm = 1/t.Mag(); t *= norm;
	      TVector3 n(row.normalDirection);
	      TVector3 c = d.Cross(t);
	      if (c.Dot(n) < 0) c *= -1;
	      d.GetXYZ(row.driftDirection);
	      t.GetXYZ(row.transverseDirection);
	      c.GetXYZ(row.normalDirection);
	      
	      row.ID = 100*wwafer + wladder + 1000*wlayer;
	      Double_t *wgtr = WG.GetTranslation();
	      memcpy(row.centerPosition,wgtr, 3*sizeof(Double_t));
	      svtwafer->AddAt(&row);
	      break;
	      
	    }
	}
    }
  ofstream out;
  out.open(Form("svtWafersPosition.%8i.%06i.C",date,time));
  svtwafer->SavePrimitive(out,""); 
  out.close();
  
}
Example #17
0
void fms_db_ChannelGeometry(char* opt="readdb", int year = 15) {

  TString option(opt);
  std::cout << "Opt =" << opt << "\n";
  std::cout << "readdb = " << option.Contains("readdb")    << "\n";
  std::cout << "writedb = " << option.Contains("writedb")   << "\n";
  std::cout << "\n";  

  TString storeTime; // storetime is begin time for validity range for WRITING DB
  int date,time;     // time for READING DB
  std::cout << "year = " << year << "\n";
  if(year==8){
    storeTime="2007-11-09 00:00:02";
    date = 20080301;
    time = 0;
  }else if(year==9){
    storeTime="2008-11-09 00:00:01";
    date = 20090301;
    time = 0;
  }else if(year=15){
    storeTime="2014-12-20 00:00:00";
    date = 20141220;
//    date = 20140222;
    time = 0;
  }
  else{
    std::cout << "Please specify year\n";
    exit;
  }
  std::cout << "storetime =" << storeTime << "\n";
  std::cout << "date,time =" << date <<" "<< time << "\n";
  
  gROOT->Macro("LoadLogger.C");
  gSystem->Load("St_base.so");
  gSystem->Load("libStDb_Tables.so");
  gSystem->Load("StDbLib.so");

  // max index dimensions
  const Int_t MAXINDEX = 12;
  int n=0;

  // structure to fill up
  fmsChannelGeometry_st g[MAXINDEX];
  memset(g,0,sizeof(g));

  gSystem->Load("StChain");
  gSystem->Load("StBFChain");
  gSystem->Load("StUtilities");
  gSystem->Load("StIOMaker");
  gSystem->Load("StarClassLibrary");
  gSystem->Load("St_Tables");
  gSystem->Load("StDbLib");
  gSystem->Load("StDbBroker");
  gSystem->Load("St_db_Maker");
  
  St_db_Maker *dbMk=new St_db_Maker("db", "MySQL:StarDb", "$STAR/StarDb");
  dbMk->SetDebug();
  dbMk->SetDateTime(date,time);
  dbMk->SetFlavor("ofl"); // for offline calibrations/mapping
  // dbMk->SetFlavor("simu"); // for simulations
  dbMk->Init();
  dbMk->Make();
  
  // this is done inside ::Make method
  TDataSet *DB = 0;
  // "dbMk->" will NOT be needed. 
  //  if done inside your FmsDbMaker. Simply use DB = GetInputDb("Geometry/fms")
  DB = dbMk->GetInputDB("Geometry/fms/");
  if (!DB) { std::cout << "ERROR: no db maker?" << std::endl; }
  
  if(option.Contains("readdb")){
    gSystem->Unsetenv("DB_ACCESS_MODE");
    gSystem->Unsetenv("DB_SERVER_LOCAL_CONFIG");
    St_fmsChannelGeometry *db = 0;
    db = (St_fmsChannelGeometry*) DB->Find("fmsChannelGeometry");
    // fetch data and place it to appropriate structure
    if (db) {
      std::cout << "Reading fmsMap table\n";
      fmsChannelGeometry_st *table = db->GetTable();
      n = db->GetNRows();
      memcpy(g,table,sizeof(fmsChannelGeometry_st)*n);
    } else {
      std::cout << "WARNING: No data in fmsChannelGeometry table (wrong timestamp?). Nothing to return, then.\n";
    }
  }
 
 if(option.Contains("writedb")) {
    gSystem->Setenv("DB_ACCESS_MODE","write");
    cout << "DB_ACCESS_MODE="<<gSystem->Getenv("DB_ACCESS_MODE")<<endl;
    StDbManager* mgr = StDbManager::Instance();
    StDbConfigNode* node = mgr->initConfig("Geometry_fms");
    StDbTable* wtable = node->addDbTable("fmsChannelGeometry");	  
    mgr->setStoreTime(storeTime.Data());

    // input data
    /* Detector Name   detectorId  ew  ns  type   nX   nY  */
    /* FPD-North            0       0   0   0      7    7  */
    /* FPD-South            1       0   1   0      7    7  */
    /* FPD-North-Pres       2       0   0   1      7    1  */
    /* FPD-South-Pres       3       0   1   1      7    1  */
    /* FPD-North-SMDV       4       0   0   2     48    1  */
    /* FPD-South-SMDV       5       0   1   2     48    1  */
    /* FPD-North-SMDH       6       0   0   3      1   48  */
    /* FPD-South-SMDH       7       0   1   3      1   48  */
    /* FMS-North-Large      8       1   0   4     17   34  */
    /* FMS-South-Large      9       1   1   4     17   34  */
    /* FMS-North-Small     10       1   0   0     12   24  */
    /* FMS-South-Small     11       1   1   0     12   24  */
    /* FHC-North           12       1   0   5      9   12  */
    /* FHC-South           13       1   1   5      9   12  */

    int n=0;
    g[n].detectorId = 0; g[n].type=0; g[n].ew=0; g[n].ns=0; g[n].nX= 7; g[n].nY= 7;    n++;
    g[n].detectorId = 1; g[n].type=0; g[n].ew=0; g[n].ns=1; g[n].nX= 7; g[n].nY= 7;    n++;
    g[n].detectorId = 2; g[n].type=1; g[n].ew=0; g[n].ns=0; g[n].nX= 7; g[n].nY= 1;    n++;
    g[n].detectorId = 3; g[n].type=1; g[n].ew=0; g[n].ns=1; g[n].nX= 7; g[n].nY= 1;    n++;
    if(year>=9){								       	   
      g[n].detectorId = 4; g[n].type=2; g[n].ew=0; g[n].ns=0; g[n].nX=48; g[n].nY= 1;  n++;
      g[n].detectorId = 5; g[n].type=2; g[n].ew=0; g[n].ns=1; g[n].nX=48; g[n].nY= 1;  n++;
      g[n].detectorId = 6; g[n].type=3; g[n].ew=0; g[n].ns=0; g[n].nX= 1; g[n].nY=48;  n++;
      g[n].detectorId = 7; g[n].type=3; g[n].ew=0; g[n].ns=1; g[n].nX= 1; g[n].nY=48;  n++;
    }										       	   
    g[n].detectorId = 8; g[n].type=4; g[n].ew=1; g[n].ns=0; g[n].nX=17; g[n].nY=34;    n++;
    g[n].detectorId = 9; g[n].type=4; g[n].ew=1; g[n].ns=1; g[n].nX=17; g[n].nY=34;    n++;
    g[n].detectorId =10; g[n].type=0; g[n].ew=1; g[n].ns=0; g[n].nX=12; g[n].nY=24;    n++;
    g[n].detectorId =11; g[n].type=0; g[n].ew=1; g[n].ns=1; g[n].nX=12; g[n].nY=24;    n++;
    
    // store data in the table
    wtable->SetTable((char*)&g,n);
    // store table in dBase
    mgr->storeDbTable(wtable); 
    gSystem->Unsetenv("DB_ACCESS_MODE");
    std::cout << "Done with database upload \n";
 }
 
 printf("n = %d\n",n);
 printf(" Id Typ  ew  ns  nX  nY\n");
 for(int i=0; i<n; i++){
   printf("%3d %3d %3d %3d %3d %3d\n",g[i].detectorId,g[i].type,g[i].ew,g[i].ns,g[i].nX,g[i].nY);
 }
}
Example #18
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;
}