BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesGeoSelector.cxx
Go to the documentation of this file.
1/*
2 * 2018/5/11 Long Peixun IHEP
3 * Geometry Selection for EventDisplay
4 */
5
6#include "BesGeoSelector.h"
7#include "DetVerSvc/IDetVerSvc.h"
8#include "GaudiKernel/Bootstrap.h"
9#include "GaudiKernel/ISvcLocator.h"
10#include <algorithm>
11#include <iostream>
12
13using namespace std;
14
16
17void BesGeoSelector::addGeomFile( const char* fname, int startno ) {
18 cout << "BesGeoSelector: " << fname << " start phase " << startno << endl;
19 fgeom.push_back( GeomFileInfo( fname, startno ) );
20 sort( fgeom.begin(), fgeom.end() );
21}
22
23void BesGeoSelector::clear() { fgeom.clear(); }
24
25// Given run number, select a suitable geometry file, and return file name.
27 auto dvs = Gaudi::svcLocator()->service<IDetVerSvc>( "DetVerSvc" );
28 if ( !dvs )
29 {
30 cerr << "BesGeoSelector Error: DetVerSvc not found!" << endl;
31 return "";
32 }
33 // dvs->initialize();
34 int absno = ( run_no >= 0 ? run_no : -run_no );
35
36 for ( vector<GeomFileInfo>::reverse_iterator i = fgeom.rbegin(); i != fgeom.rend(); ++i )
37 {
38 // if (absno >= i->startno)
39 // {
40 // return i->filename.c_str();
41 // }
42
43 // In BOSS 7.0.3, use DecVerSvc package to choose geometry
44 int phase = dvs->fromRun( absno );
45 if ( phase >= i->startno ) { return i->filename.c_str(); }
46 }
47 cout << "BesGeoSelector Error: There is no suitable detector geometry!" << endl;
48 return "";
49}
50
51// Given file name, find whether the list contains this file.
52bool BesGeoSelector::hasGeomFile( const char* fname ) {
53 string filename( fname );
54 for ( vector<GeomFileInfo>::iterator i = fgeom.begin(); i != fgeom.end(); ++i )
55 {
56 if ( filename == i->filename ) return true;
57 }
58 return false;
59}
const char * getGeomFileNameFromRunNo(int run_no)
bool hasGeomFile(const char *fname)
void addGeomFile(const char *fname, int startno)