00001
00012
00013 #include "Trigger/MdcTF.h"
00014 #include <iostream>
00015 #include <fstream>
00016 #include <TString.h>
00017
00018 using namespace std;
00019
00020 MdcTF::MdcTF()
00021 {
00022 m_MdcTSF = MdcTSF::get_Mdc();
00023 ReadTFLut();
00024
00025 }
00026 MdcTF::~MdcTF()
00027 {
00028 }
00029 void MdcTF::GetTrack()
00030 {
00031 intrkSL1.clear();
00032 intrkSL2.clear();
00033
00034 m_MdcTSF->GetTS();
00035 for(int i=0;i<128;i++) { strack[i] = 0; ltrack[i] = 0; }
00036
00037 for(int i=0; i<48; i++) {
00038 if(m_MdcTSF->GetSL1TSF(i)==1) intrkSL1.push_back(i);
00039 }
00040 for(int i=0; i<80; i++) {
00041 if(m_MdcTSF->GetSL2TSF(i)==1) intrkSL2.push_back(i);
00042 }
00043
00044 std::vector<std::vector<int> >::iterator viter=TF.begin();
00045 std::vector<int>::iterator iter;
00046 for(int i=0;i<128;i++)
00047 {
00048 int tracId5 = m_MdcTSF->GetSL5TSF(i);
00049 if(tracId5!=0)
00050 {
00051 iter = (*(viter + i)).begin();
00052 for(;iter!=(*(viter + i)).end();iter+=4)
00053 {
00054 int cellId3 = *(iter+3)-1;
00055 int cellId4 = *(iter+2)-1;
00056 int cellId10 =*(iter)-1;
00057 int trackId3 = m_MdcTSF->GetSL3TSF(cellId3);
00058 int trackId4 = m_MdcTSF->GetSL4TSF(cellId4);
00059 int trackId10 = m_MdcTSF->GetSL10TSF(cellId10);
00060 if(trackId3 > 0 && trackId4 > 0) { strack[i] = 1; }
00061 if(trackId3 > 0 && trackId4 > 0 && trackId10 > 0) ltrack[i] = 1;
00062 }
00063 }
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 }
00076 void MdcTF::ReadTFLut()
00077 {
00078 fstream readin;
00079 TF.clear();
00080 int a,b,l1,l2,l3,l4;
00081 for(int i=1;i<129;i++)
00082 {
00083 int num=0;
00084 std::vector<int> tmp;
00085 tmp.clear();
00086 TString filename = TString(getenv( "TRIGGERROOT" ));
00087 filename+="/data/tf/ptd5-2/PTD-SL5C-L19-C";
00088 filename+=i;
00089 filename+=".pat";
00090 readin.open(filename,ios_base::in);
00091 if(!readin) cerr<<"can not open the file "<<filename<<endl;
00092 while(readin.good())
00093 {
00094 readin>>a>>b>>l4>>l3>>l2>>l1;
00095 num++;
00096 }
00097 if(i==1) std::cout<<"number of line is "<<num-1<<std::endl;
00098 readin.close();
00099 readin.clear();
00100 readin.open(filename,ios_base::in);
00101 if(!readin) std::cerr<<"can not open the file again "<<filename<<std::endl;
00102 for(int j=0;j<(num-1);j++)
00103 {
00104 readin>>a>>b>>l4>>l3>>l2>>l1;
00105 tmp.push_back(l4);
00106 tmp.push_back(l3);
00107 tmp.push_back(l2);
00108 tmp.push_back(l1);
00109 }
00110 readin.close();
00111 TF.push_back(tmp);
00112 }
00113 }
00114 void MdcTF::Dump()
00115 {
00116 std::vector<int> combine_size;
00117 cout<<endl;
00118 cout<<" ***************check data file tf: ***************** "<<endl;
00119 cout<<"*--------------------------BEGIN-------------------------------*"<<endl;
00120 cout<<endl;
00121 combine_size.clear();
00122 for(unsigned int i=0; i<TF.size(); i++) {
00123 cout<<"Cell ID --> "<<i<<endl;
00124 combine_size.push_back(TF[i].size());
00125 for(unsigned int j=0; j<TF[i].size(); j++) {
00126 cout<<TF[i][j]<<" ";
00127 if((j+1)%4==0) cout<<endl;
00128 }
00129 cout<<endl;
00130 }
00131 sort(combine_size.begin(),combine_size.end());
00132 cout<<"The Max Number of Combination is "<<combine_size[combine_size.size()-1]/4<<endl;
00133 cout<<endl;
00134 cout<<"*----------------------------END-------------------------------*"<<endl;
00135 }