//--------------------------------------------------------------------------- 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); } }
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; } }
//_____________________________________________________________________________ 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; }
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; }
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)); }
//--------------------------------------------------------------------------- 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; } }
// 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(); } }
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); } }
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
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); } }
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); } }
//________________________________________________________________________________ //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(); }
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); } }
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; }