43 {
44 MsgStream log(
msgSvc(), name() );
45 log << MSG::INFO << "MdcAlignAlg initialze() ..." << endmsg;
46 log << MSG::INFO << "MdcAlignFlg = " << m_alignMeth << endmsg;
47
48 StatusCode sc = service( "MdcGeomSvc", m_mdcGeomSvc );
49 if ( sc != StatusCode::SUCCESS ) { log << MSG::ERROR << "can not use MdcGeomSvc" << endmsg; }
50
51 sc = service( "MdcCalibFunSvc", m_mdcFunSvc );
52 if ( sc != StatusCode::SUCCESS )
53 { log << MSG::FATAL << "can not use MdcCalibFunSvc" << endmsg; }
54
55 sc = service( "MdcUtilitySvc", m_mdcUtilitySvc );
56 if ( sc != StatusCode::SUCCESS )
57 { log << MSG::FATAL << "can not use MdcUtilitySvc" << endmsg; }
58
59
60 initParam();
61
62
63 int i;
64 std::string strconfig;
65 std::string strcomment;
66 std::string strTes;
67 int fgTes[50];
68 for ( i = 0; i < 50; i++ ) fgTes[i] = -999;
69 ifstream fconfig( m_configFile.c_str() );
70 if ( !fconfig.is_open() )
71 {
72 log << MSG::WARNING << "can not open config file " << m_configFile
73 << ". Use defalt config parameters" << endmsg;
74 }
75 else
76 {
77 log << MSG::INFO << "Open config file " << m_configFile << endmsg;
78 while ( fconfig >> strconfig )
79 {
80 if ( '#' == strconfig[0] ) { getline( fconfig, strcomment ); }
81 else if ( "EsTimeFlag" == strconfig )
82 {
83 getline( fconfig, strTes );
84 int n = sscanf( strTes.c_str(),
"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", fgTes + 0,
85 fgTes + 1, fgTes + 2, fgTes + 3, fgTes + 4, fgTes + 5, fgTes + 6,
86 fgTes + 7, fgTes + 8, fgTes + 9, fgTes + 10, fgTes + 11, fgTes + 12,
87 fgTes + 13, fgTes + 14, fgTes + 15, fgTes + 16, fgTes + 17, fgTes + 18,
88 fgTes + 19 );
89 for ( i = 0; i <
n; i++ ) m_param.esFlag[i] = fgTes[i];
91 }
92 else if ( "TesMin" == strconfig ) { fconfig >> m_param.tesMin; }
93 else if ( "TesMax" == strconfig ) { fconfig >> m_param.tesMax; }
94 else if ( "ResidualType" == strconfig ) { fconfig >> m_param.resiType; }
95 else if ( "FlagAdjacLayerCut" == strconfig ) { fconfig >> m_param.fgAdjacLayerCut; }
96 else if ( "FlagBoundLayerCut" == strconfig ) { fconfig >> m_param.fgBoundLayerCut; }
97 else if ( "hitStatCut" == strconfig ) { fconfig >> m_param.hitStatCut; }
98 else if ( "nTrkCut" == strconfig )
99 { fconfig >> m_param.nTrkCut[0] >> m_param.nTrkCut[1]; }
100 else if ( "nHitLayCut" == strconfig ) { fconfig >> m_param.nHitLayCut; }
101 else if ( "nHitCut" == strconfig ) { fconfig >> m_param.nHitCut; }
102 else if ( "ptCut" == strconfig ) { fconfig >> m_param.ptCut[0] >> m_param.ptCut[1]; }
103 else if ( "cosThetaCut" == strconfig )
104 { fconfig >> m_param.costheCut[0] >> m_param.costheCut[1]; }
105 else if ( "DrCut" == strconfig ) { fconfig >> m_param.drCut; }
106 else if ( "DzCut" == strconfig ) { fconfig >> m_param.dzCut; }
107 else if ( "MaximalDocaInner" == strconfig ) { fconfig >> m_param.maxDocaInner; }
108 else if ( "MaximalDocaOuter" == strconfig ) { fconfig >> m_param.maxDocaOuter; }
109 else if ( "MaximalResidual" == strconfig ) { fconfig >> m_param.maxResi; }
110 }
111 fconfig.close();
112 }
113
114
115 m_param.particle = m_evtType;
116
117 cout << "EsFlag for Mdc Alignment: ";
118 for ( int iEs = 0; iEs < m_param.nEsFlag; iEs++ ) cout << setw( 6 ) << m_param.esFlag[iEs];
119 cout << endl;
120
123
124 m_alignPar = new MdcAlignPar();
125 m_alignPar->rdAlignPar( m_alignFile );
126
127 m_mdcevt = new MdcAliEvent();
128 m_mdcevt->setParam( m_param );
129
130 m_hlist = new TObjArray();
131
132 if ( 0 == m_alignMeth ) { m_pAlign = new ResiAlign(); }
133 else if ( 1 == m_alignMeth )
134 {
135 m_pAlign = new MilleAlign();
136 m_pAlign->fixMomLab = m_fixMomLab;
137 }
138 m_pAlign->setParam( m_param );
139 m_pAlign->initialize( m_hlist, m_mdcGeomSvc, m_mdcFunSvc, m_mdcUtilitySvc );
140
141 return StatusCode::SUCCESS;
142}