1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/ISvcLocator.h"
3#include "GaudiKernel/MsgStream.h"
4#include "GaudiKernel/SmartDataPtr.h"
6#include "EmcCalibConstSvc/IEmcCalibConstSvc.h"
7#include "facilities/Util.h"
8#include <boost/lexical_cast.hpp>
19#define _T( str ) ( "\'" + str + "\'" )
20 typedef basic_string<char>::size_type
S_T;
21 static const S_T npos = -1;
25 std::string null_subst ) {
26 if ( src.empty() || delimit.empty() )
throw "split: empty string\0";
28 S_T deli_len = delimit.size();
29 long index = npos, last_search_position = 0;
30 while ( ( index = src.find( delimit, last_search_position ) ) != npos )
32 if ( index == last_search_position )
v.push_back( null_subst );
33 else v.push_back( src.substr( last_search_position, index - last_search_position ) );
34 last_search_position = index + deli_len;
36 string last_one = src.substr( last_search_position );
37 v.push_back( last_one.empty() ? null_subst : last_one );
45 int run_No = std::abs(
runNo );
46 sprintf( stmt1,
"select EQM_fileid,EMCGain from RunParams where run_number = %d", run_No );
50 int rowNumber = m_dbsvc->query(
"run", stmt1, results );
53 std::cout <<
"ERROR Read EQM_fileid from the Database, exit." << endmsg;
57 int fileid = std::atoi( ( *results[0] )[
"EQM_fileid"] );
59 string gainnum( ( *results[0] )[
"EMCGain"] );
63 "OID,Position,Channel1,Channel2,Channel3,Channel4,Channel5,Channel6,Channel7,"
64 "Channel8,Channel9,Channel10,Channel11,"
65 "Channel12,Channel13,Channel14,Channel15,Channel16,Channel17,Channel18,Channel19,"
66 "Channel20,Channel21,Channel22,Channel23,"
67 "Channel24,Channel25,Channel26,Channel27,Channel28,Channel29,Channel30,Channel31,"
68 "Channel32 from EQM where FileId=%d",
72 rowNumber = m_dbsvc->query(
"run", stmt1, results );
75 std::cout <<
"ERROR Read EQM from the Database, exit." << endmsg;
79 std::map<std::string, std::vector<std::string>> map_EQM;
81 for (
int i = 0; i < rowNumber; i++ )
83 for (
int j = 2; j < 34; j++ )
85 std::vector<std::string> vec_tmp;
88 vec_tmp.push_back( ( *results[i] )[
"OID"] );
89 vec_tmp.push_back( ( *results[i] )[
"Position"] );
90 typedef pair<std::string, std::vector<std::string>> vpair;
92 vpair( ( *results[i] )[
"Channel" +
toString<int>( j - 1 )], vec_tmp ) );
96 vector<string>
id =
split( ids,
",",
"<null>" );
99 for (
unsigned int m = 0; m <
id.size(); m++ )
103 std::cout <<
" error: No." << m + 1 <<
" id=0,please delete it! " << std::endl;
106 if (
id[m] ==
"NULL" )
108 std::cout <<
" end of loop! " << std::endl;
111 string channelnum, oid, modu;
112 bool if_found =
false;
113 for ( std::map<std::string, std::vector<std::string>>::iterator
iter = map_EQM.begin();
116 if (
iter->first ==
id[m] )
119 channelnum =
iter->second[0];
120 oid =
iter->second[1];
121 modu =
iter->second[2];
127 std::cout <<
"can not find id " <<
id[m] <<
" in EQM, exit." << std::endl;
133 for (
int i = 0; i < 4; i++ ) { b[i] = oid[i + 4]; }
137 {
"E3_1",
"96" }, {
"E2_0",
"97" }, {
"E2_1",
"98" }, {
"E1_0",
"99" },
138 {
"E1_1",
"100" }, {
"E3_0",
"101" }, {
"E2_2",
"102" }, {
"E3_2",
"103" },
139 {
"W3_1",
"112" }, {
"W2_0",
"113" }, {
"W2_1",
"114" }, {
"W1_0",
"115" },
140 {
"W1_1",
"116" }, {
"W3_0",
"117" }, {
"W2_2",
"118" }, {
"W3_2",
"119" } };
141 string trgCrate[16] = {
"0x60",
"0x61",
"0x62",
"0x63",
"0x64",
"0x65",
"0x66",
"0x67",
142 "0x70",
"0x71",
"0x72",
"0x73",
"0x74",
"0x75",
"0x76",
"0x77" };
144 for (
int i = 0; i < 16; i++ )
146 if ( b.compare( a[i][0] ) )
continue;
147 else { trgcratenum = trgCrate[i]; }
150 std::string query_name =
"select gain from EMC_Gain where run_id=" + gainnum +
151 " and ppc_id=\"" + trgcratenum +
"\" and Qmodule_no=" + modu +
152 " and Qchannel_no=" + channelnum;
154 rowNumber = m_dbsvc->query(
"run", query_name.c_str(), results );
155 if ( rowNumber <= 0 )
157 std::cout <<
"ERROR Read gain from EMC_Gain Database, exit." << endmsg;
164 trgGain[m] =
new std::string( ( *results[0] )[
"gain"] );
171 StatusCode sc = Gaudi::svcLocator()->service(
"DatabaseSvc", m_dbsvc,
true );
172 if ( sc.isFailure() )
174 std::cout <<
"ERROR: In ConnectionProvider()--> Unable to find DatabaseSvc "
186 std::string BossRelease ) {
189 int run_No = std::abs(
runNo );
191 if (
SftVer ==
"default" )
193 if ( BossRelease ==
"default" )
195 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"."
202 "select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and "
203 "RunFrom <= %d and RunTo >= %d and "
204 "DataType = 'LumVtx'",
205 BossRelease.c_str(), run_No, run_No );
208 int rowNo = m_dbsvc->query(
"offlinedb", stmt1, records );
211 std::cout <<
"ERROR: can not find records for run = " << run_No
212 <<
" and BossRelease = " << BossRelease << endmsg;
218 std::cout <<
"Using the new SftVer and ParVer (" <<
SftVer <<
", " <<
ParVer
219 <<
") for run " << run_No <<
". " << endmsg;
223 sprintf( stmt1,
"select OfflineTwoGam,SftVer,ParVer from OfflineLum where RunNo = %d",
238 int status = m_dbsvc->query(
"offlinedb", stmt1, results );
241 std::cout <<
"ERROR Read the luminosity from the Database" << endmsg;
245 int RowNumber = results.size();
246 if ( RowNumber == 0 )
248 std::cout <<
"WARNING: No Luminosity Data in this run, return 0." << std::endl;
255 if ( std::atoi(
ParVer.c_str() ) == 0 )
257 for (
int i = 0; i < RowNumber; i++ )
259 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) > ParVerID ) &&
260 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
262 Lum = ( *results[i] )[
"OfflineTwoGam"];
263 ParVerID = std::atoi( ( *results[i] )[
"ParVer"] );
271 for (
int i = 0; i < RowNumber; i++ )
273 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) == std::atoi(
ParVer.c_str() ) ) &&
274 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
276 Lum = ( *results[i] )[
"OfflineTwoGam"];
277 ParVerID = std::atoi( ( *results[i] )[
"ParVer"] );
287 std::cout <<
"WARNING: No Luminosity infor. found by your selection criteria, please "
288 "check it (<<SftVer, <<ParVer)"
294 if ( RecordNo >= 2 && std::atoi(
ParVer.c_str() ) != 0 )
296 std::cout <<
"ERROR: More than two Lum. records found by your selection criteria, "
297 "please check it (SftVer, ParVer)"
306 std::string& tau_value,
309 std::string BossRelease ) {
312 int run_No = std::abs(
runNo );
314 if (
SftVer ==
"default" )
316 if ( BossRelease ==
"default" )
318 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"."
325 "select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and "
326 "RunFrom <= %d and RunTo >= %d and "
327 "DataType = 'LumVtx'",
328 BossRelease.c_str(), run_No, run_No );
331 int rowNo = m_dbsvc->query(
"offlinedb", stmt1, records );
334 std::cout <<
"ERROR: can not find records for run = " << run_No
335 <<
" and BossRelease = " << BossRelease << endmsg;
341 std::cout <<
"Using the new SftVer and ParVer (" <<
SftVer <<
", " <<
ParVer
342 <<
") for run " << run_No <<
". " << endmsg;
346 sprintf( stmt1,
"select runTime,Tau_Value,SftVer,ParVer from OfflineLum where RunNo = %d",
351 int status = m_dbsvc->query(
"offlinedb", stmt1, results );
354 std::cout <<
"ERROR Read the luminosity curve parameters from the Database" << endmsg;
358 int RowNumber = results.size();
359 if ( RowNumber == 0 )
361 std::cout <<
"ERROR: No Luminosity curve parameters in this run, aborted." << std::endl;
367 if ( std::atoi(
ParVer.c_str() ) == 0 )
369 for (
int i = 0; i < RowNumber; i++ )
371 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) > ParVerID ) &&
372 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
374 runTotalTime = ( *results[i] )[
"runTime"];
375 tau_value = ( *results[i] )[
"Tau_Value"];
376 ParVerID = std::atoi( ( *results[i] )[
"ParVer"] );
384 for (
int i = 0; i < RowNumber; i++ )
386 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) == std::atoi(
ParVer.c_str() ) ) &&
387 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
389 runTotalTime = ( *results[i] )[
"runTime"];
390 tau_value = ( *results[i] )[
"Tau_Value"];
391 ParVerID = std::atoi( ( *results[i] )[
"ParVer"] );
398 std::cout <<
"ERROR: No Luminosity curve parameters found by your selection criteria, "
399 "please check it (SftVer, ParVer)"
404 if ( RecordNo >= 2 && std::atoi(
ParVer.c_str() ) != 0 )
406 std::cout <<
"ERROR: More than two Lum. curve parameters records found by your "
407 "selection criteria, please check it "
419 std::string BossRelease ) {
422 int run_No = std::abs(
runNo );
424 if (
SftVer ==
"default" )
426 if ( BossRelease ==
"default" )
428 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"."
435 "select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and "
436 "RunFrom <= %d and RunTo >= %d and "
437 "DataType = 'LumVtx'",
438 BossRelease.c_str(), run_No, run_No );
441 int rowNo = m_dbsvc->query(
"offlinedb", stmt1, records );
444 std::cout <<
"ERROR: can not find records for run = " << run_No
445 <<
" and BossRelease = " << BossRelease << endmsg;
451 std::cout <<
"Using the new SftVer and ParVer (" <<
SftVer <<
", " <<
ParVer
452 <<
") for run " << run_No <<
". " << endmsg;
457 "select Vx,Vy,Vz,AcSigmaVx,AcSigmaVy,SigmaVz,SftVer,ParVer from BeamPar where "
475 int status = m_dbsvc->query(
"offlinedb", stmt1, results );
478 std::cout <<
"ERROR Read the bunch from the Database" << endmsg;
482 int RowNumber = results.size();
483 if ( RowNumber == 0 )
485 std::cout <<
"WARNING: No bunch Data in this run! Please check your selection criteria "
486 "(runNo, SftVer, ParVer)"
493 if ( std::atoi(
ParVer.c_str() ) == 0 )
495 for (
int i = 0; i < RowNumber; i++ )
497 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) > ParVerID ) &&
498 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
501 bunch.push_back( ( *results[i] )[
"Vx"] );
502 bunch.push_back( ( *results[i] )[
"Vy"] );
503 bunch.push_back( ( *results[i] )[
"Vz"] );
504 bunch.push_back( ( *results[i] )[
"AcSigmaVx"] );
505 bunch.push_back( ( *results[i] )[
"AcSigmaVy"] );
506 bunch.push_back( ( *results[i] )[
"SigmaVz"] );
507 ParVerID = std::atoi( ( *results[i] )[
"ParVer"] );
515 for (
int i = 0; i < RowNumber; i++ )
517 if ( ( std::atoi( ( *results[i] )[
"ParVer"] ) == std::atoi(
ParVer.c_str() ) ) &&
518 ( ( *results[i] )[
"SftVer"] ==
SftVer ) )
521 bunch.push_back( ( *results[i] )[
"Vx"] );
522 bunch.push_back( ( *results[i] )[
"Vy"] );
523 bunch.push_back( ( *results[i] )[
"Vz"] );
524 bunch.push_back( ( *results[i] )[
"AcSigmaVx"] );
525 bunch.push_back( ( *results[i] )[
"AcSigmaVy"] );
526 bunch.push_back( ( *results[i] )[
"SigmaVz"] );
534 std::cout <<
"WARNING: No bunch infor. found in this run, it will use other run's"
539 if ( RecordNo >= 2 && std::atoi(
ParVer.c_str() ) != 0 )
541 std::cout <<
"ERROR: More than two bunch records found by your selection criteria, "
542 "please check it (SftVer, ParVer)"
554 int run_No = std::abs(
runNo );
556 sprintf( stmt1,
"select trgtable_id from RunParams where run_number = %d ", run_No );
560 int status = m_dbsvc->query(
"run", stmt1, results );
563 std::cout <<
"ERROR Read the trigger table from the Database" << endmsg;
567 int RowNumber = results.size();
568 if ( RowNumber != 1 )
570 std::cout <<
"ERROR:error searching Trigger Type Data in the database, check your "
575 int i_trgTpye = std::atoi( ( *results[0] )[
"trgtable_id"] );
576 std::cout <<
"Obj_id is " << i_trgTpye << std::endl;
579 if ( i_trgTpye == m_trgTpye )
581 std::cout <<
"Don't need to update trigger table, it is same with the last run!"
586 m_trgTpye = i_trgTpye;
589 sprintf( stmt1,
"select EventChannelEnableRegister from TrgTable where Obj_id = %d ",
591 int status1 = m_dbsvc->query(
"run", stmt1, results );
594 std::cout <<
"ERROR Read the trigger table from the Database 1" << endmsg;
597 RowNumber = results.size();
598 if ( RowNumber != 1 )
600 std::cout <<
"ERROR:error searching Trigger Type Data in the database, check your "
601 "selection criterions"
605 m_trgTable.push_back( ( *results[0] )[
"EventChannelEnableRegister"] );
609 for (
int i = 1; i < 17; i++ )
610 for (
int j = 1; j < 5; j++ )
613 sprintf( stmt1,
"select TrgTable_CH0%d_%d from TrgTable where Obj_id = %d ", i, j,
616 sprintf( stmt1,
"select TrgTable_CH%d_%d from TrgTable where Obj_id = %d ", i, j,
618 int status2 = m_dbsvc->query(
"run", stmt1, results );
621 std::cout <<
"ERROR Read the trigger table from the Database 2" << endmsg;
624 RowNumber = results.size();
625 if ( RowNumber != 1 )
627 std::cout <<
"ERROR:error searching TrgTable Data in the database, check your "
628 "selection criterions"
632 if ( i < 10 )
sprintf( stmt1,
"TrgTable_CH0%d_%d", i, j );
633 else sprintf( stmt1,
"TrgTable_CH%d_%d", i, j );
634 m_trgTable.push_back( ( *results[0] )[stmt1] );
638 trgTable = m_trgTable;
647 ISvcLocator* svcLocator = Gaudi::svcLocator();
648 StatusCode sc = svcLocator->service(
"EmcCalibConstSvc", emcCalibConstSvc );
649 if ( sc != StatusCode::SUCCESS )
650 { cout <<
"ConnectionProvider Error: Can't get EmcCalibConstSvc." << endl; }
652 string ids =
"128005";
658 for (
int i = idBegin; i < idEnd; i++ )
660 unsigned int npart = emcCalibConstSvc->
getPartID( i );
662 unsigned int nphi = emcCalibConstSvc->
getPhiIndex( i );
664 int triPart, triTheta, triPhi;
668 triTheta = 23 + ntheta;
670 else if ( npart == 1 && ntheta < 22 )
673 triTheta = 22 - ntheta;
675 else if ( npart == 1 && ntheta >= 22 )
678 triTheta = ntheta - 21;
683 triTheta = 23 + ntheta;
687 ostringstream ssTheta;
688 if ( triPart == 1 && triTheta < 10 ) { ssTheta <<
"0" << triTheta; }
689 else { ssTheta << triTheta; }
692 if ( triPhi < 10 ) { ssPhi <<
"00" << triPhi; }
693 else if ( triPhi < 100 ) { ssPhi <<
"0" << triPhi; }
694 else { ssPhi << triPhi; }
696 if ( triPart == 0 ) { str << ssTheta.str() << ssPhi.str(); }
697 else { str << triPart << ssTheta.str() << ssPhi.str(); }
698 if ( i != idEnd - 1 ) { str <<
","; }
709 for (
int i = 0; i < id_num; i++ )
711 istringstream isin( *trgGain[i] );
714 value = ( ( 50. / 255. ) * ( value ) / 60. ) * 5 * 0.5;
715 emcGain.push_back( value );
717 trgGain[i] =
nullptr;
726 int run_No = std::abs(
runNo );
728 sprintf( stmt1,
"select Trg_fileid from RunParams where run_number = %d ", run_No );
732 int rowNumber = m_dbsvc->query(
"run", stmt1, results );
733 if ( rowNumber <= 0 )
735 std::cout <<
"ERROR: Read the Trg_fileid from RunParams, exit." << endl;
741 std::cout <<
"WARNNING: there are more than one record for Trg_fileid in run " <<
runNo
742 <<
", the first one will be selected." << std::endl;
744 int trg_fileid = std::atoi( ( *results[0] )[
"Trg_fileid"] );
748 "EtotDataSteps,VthBEtotH,VthEEtotH,VthEtotL,VthEtotM,VthBLZ,VthDiffB,VthDiffE,"
749 "VthBalBLK,VthBalEEMC,VthDiffMin "
750 "from Trg_EACC where FileId = %d ",
754 rowNumber = m_dbsvc->query(
"run", stmt1, results );
755 if ( rowNumber <= 0 )
757 std::cout <<
"ERROR: Read the EACC config infor. from Trg_EACC, exit." << endl;
763 std::cout <<
"WARNNING: there are more than one record for EACC in run " <<
runNo
764 <<
", the first one will be selected." << std::endl;
767 m_EtotDataSteps = std::atoi( ( *results[0] )[
"EtotDataSteps"] );
768 m_VthBEtotH = std::atoi( ( *results[0] )[
"VthBEtotH"] );
769 m_VthEEtotH = std::atoi( ( *results[0] )[
"VthEEtotH"] );
770 m_VthEtotL = std::atoi( ( *results[0] )[
"VthEtotL"] );
771 m_VthEtotM = std::atoi( ( *results[0] )[
"VthEtotM"] );
772 m_VthBLZ = std::atoi( ( *results[0] )[
"VthBLZ"] );
773 m_VthDiffB = std::atoi( ( *results[0] )[
"VthDiffB"] );
774 m_VthDiffE = std::atoi( ( *results[0] )[
"VthDiffE"] );
775 m_VthBalBLK = std::atoi( ( *results[0] )[
"VthBalBLK"] );
776 m_VthBalEEMC = std::atoi( ( *results[0] )[
"VthBalEEMC"] );
777 m_VthDiffMin = std::atoi( ( *results[0] )[
"VthDiffMin"] );
789 int run_No = std::abs(
runNo );
793 sprintf( stmt1,
"select FilePath,FileName from RanTrgData where RunNo = %d ", run_No );
797 int status = m_dbsvc->query(
"offlinedb", stmt1, results );
800 std::cout <<
"ERROR Read the background file from the Database" << endmsg;
804 int RowNumber = results.size();
805 if ( RowNumber == 0 )
807 std::cout <<
"WARNING: No Bg infor. in this run!" << std::endl;
812 for (
int i = 0; i < RowNumber; i++ )
818 fileInfor.push_back( ( *results[i] )[
"FilePath"] );
819 fileInfor.push_back( ( *results[i] )[
"FileName"] );
823 if ( fileInfor.size() == 0 )
825 std::cout <<
"WARNING: the total bg event number in run " <<
runNo
826 <<
" is zero, it will use other run's bg" << std::endl;
837 std::string stmt1 ) {
846 int status = m_dbsvc->query(
"offlinedb", stmt1, results );
849 std::cout <<
"ERROR Read the background file from the Database" << endmsg;
852 int RowNumber = results.size();
853 if ( RowNumber == 0 )
855 std::cout <<
"ERROR:error searching background Data in the database, check your "
856 "selection criterions"
862 for (
int i = 0; i < RowNumber; i++ )
868 fileInfor.push_back( ( *results[i] )[
"FilePath"] );
869 fileInfor.push_back( ( *results[i] )[
"FileName"] );
873 if ( fileInfor.size() == 0 )
875 std::cout <<
"WARNING: the total bg event number in your selected bg files is zero, it "
876 "will abort after error message"
888 int run_No = std::abs(
runNo );
890 sprintf( stmt1,
"select TFEE_fileid from RunParams where run_number = %d ", run_No );
894 int status = m_dbsvc->query(
"run", stmt1, results );
897 std::cout <<
"ERROR Read the Tof threshold from the Database" << endmsg;
900 int RowNumber = results.size();
901 if ( RowNumber != 1 )
903 std::cout <<
"ERROR:error searching TFEE_fileid Data in the database, check your "
904 "selection criterions"
908 int i_tfee_fileid = std::atoi( ( *results[0] )[
"TFEE_fileid"] );
909 std::cout <<
"TFEE file id is " << i_tfee_fileid << std::endl;
912 if ( i_tfee_fileid == m_tfee_fileid )
914 std::cout <<
"Don't need to update TOF FEE threshold, it is same with the last run!"
919 m_tfee_fileid = i_tfee_fileid;
923 "select PhysAddress,BarrelEnd,HighThreshold,LowThreshold from TFEE where "
926 int status1 = m_dbsvc->query(
"run", stmt1, results );
929 std::cout <<
"ERROR Read the Tof threshold from the Database 1" << endmsg;
932 int RowNumber = results.size();
933 if ( RowNumber == 0 )
935 std::cout <<
"WARNING: No TFEE infor. in this run!" << std::endl;
938 for (
int i = 0; i < RowNumber; i++ )
940 m_tofThresh.push_back( ( *results[i] )[
"PhysAddress"] );
941 m_tofThresh.push_back( ( *results[i] )[
"BarrelEnd"] );
942 m_tofThresh.push_back( ( *results[i] )[
"HighThreshold"] );
943 m_tofThresh.push_back( ( *results[i] )[
"LowThreshold"] );
948 tofThresh = m_tofThresh;
957 int run_No = std::abs(
runNo );
961 "R_TM_BPR_PatNum,R_TM_BER_PatNum,S_R3O_BI_DCCT_current,E_R3O_BI_DCCT_current,AV_"
962 "R3O_BI_DCCT_current,S_R4O_BI_DCCT_"
963 "current,E_R4O_BI_DCCT_current,AV_R4O_BI_DCCT_current,S_BPR_LIFE,E_BPR_LIFE,AV_"
964 "BPR_LIFE,S_BER_LIFE,E_BER_LIFE,AV_BER_"
965 "LIFE from RunParams where run_number = %d ",
970 int status = m_dbsvc->query(
"run", stmt1, results );
973 std::cout <<
"ERROR Read the run information from the Database" << endmsg;
976 int RowNumber = results.size();
977 if ( RowNumber == 0 )
979 std::cout <<
"WARNING: No run information in this run!" << std::endl;
983 for (
int i = 0; i < RowNumber; i++ )
985 for ( std::map<std::string, char*>::iterator
iter = ( *results[i] ).begin();
986 iter != ( *results[i] ).end();
iter++ )
987 { runInfo.push_back(
iter->second ); }
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
std::string GetString(std::string key)
virtual unsigned int getPartID(int Index) const =0
virtual unsigned int getPhiIndex(int Index) const =0
virtual unsigned int getThetaIndex(int Index) const =0
ConnectionProvider::eRet getRunInfo(std::vector< std::string > &runInfo, int runNo)
std::vector< std::string > split(const std::string &src, std::string delimit, std::string null_subst="")
ConnectionProvider()
Constructor keeps track of table of interest.
ConnectionProvider::eRet getReadBunchInfo(std::vector< std::string > &bunch, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getLumCurvePar(std::string &runTotalTime, std::string &tau_value, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getTrgConfigInfo(int runNo)
ConnectionProvider::eRet getReadLumInfo(std::string &Lum, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getEmcGain(std::vector< double > &emcGain, int runNo)
ConnectionProvider::eRet getReadTrgTableInfo(std::vector< std::string > &trgTable, int runNo)
bool getcal(int runNo, std::string ids)
ConnectionProvider::eRet getReadBackgroundInfo(std::vector< std::string > &fileInfor, int runNo)
ConnectionProvider::eRet getReadTofThreshInfo(std::vector< std::string > &tofThresh, int runNo)
std::string toString(type obj)
basic_string< char >::size_type S_T