00001 #include <fstream>
00002 #include <map>
00003 using namespace std;
00004
00005 void trighistcombiner(const char* filelistname="trigevent.list")
00006 {
00007 map<int,int> trigmap;
00008 const int nTriggers = 12;
00009 int triggers[nTriggers] = {117001,137221,137222,137822,117300,137571,137575,137585,137586,137611,137501,137622};
00010 gROOT->Macro("LoadLogger.C");
00011 gROOT->Macro("loadMuDst.C");
00012 gSystem->Load("StDaqLib");
00013 gSystem->Load("StDetectorDbMaker");
00014 gSystem->Load("St_db_Maker");
00015 gSystem->Load("StEmcRawMaker");
00016 gSystem->Load("StEmcADCtoEMaker");
00017 gSystem->Load("StTriggerUtilities");
00018 gSystem->Load("StTriggerStudyMaker");
00019
00020 TFile outfile("trighists.root","RECREATE");
00021
00022 const char* dbTime = "2006-03-14 15:09:26";
00023 StBemcTablesWriter* bemctables = new StBemcTablesWriter;
00024 bemctables->loadTables(dbTime,"ofl");
00025 StEmcGeom* mEmcGeom = StEmcGeom::instance("bemc");
00026 StEmcDecoder* mDecoder = new StEmcDecoder();
00027
00028 ifstream filelist(filelistname);
00029 TH1F* dumhist;
00030 TH1F* zvertall;
00031 TH1F* bbctall;
00032 TH1F* zverttrig[nTriggers];
00033 TH1F* bbcttrig[nTriggers];
00034 TH1F* jp1et;
00035 TH1F* jp2et;
00036 TH1F* jp2eff;
00037 TH1F* jp1eff;
00038 TH1F* jp1et0;
00039 TH1F* jp0et0;
00040 int nFiles = 0;
00041 while(1){
00042 char file[100];
00043 filelist>>file;
00044 if(!filelist.good())break;
00045 TFile inputfile(file,"READ");
00046 if(!inputfile.IsOpen())continue;
00047 if(nFiles == 0){
00048 zvertall = (TH1F*)inputfile.Get("zvertall");
00049 bbctall = (TH1F*)inputfile.Get("bbctall");
00050 jp1et = (TH1F*)inputfile.Get("jp1et");
00051 jp2et = (TH1F*)inputfile.Get("jp2et");
00052 jp1et0 = (TH1F*)inputfile.Get("jp1et0");
00053 jp0et0 = (TH1F*)inputfile.Get("jp0et0");
00054 jp1eff = (TH1F*)jp0et0->Clone("jp1eff");
00055 jp2eff = (TH1F*)jp1et->Clone("jp2eff");
00056 jp1eff->Reset();
00057 jp2eff->Reset();
00058 for(int i = 0; i < nTriggers; i++){
00059 trigmap[triggers[i]] = i;;
00060 char namez[100];
00061 sprintf(namez,"zvert%i",triggers[i]);
00062 zverttrig[i] = (TH1F*)inputfile.Get(namez);
00063 char nameb[100];
00064 sprintf(nameb,"bbct%i",triggers[i]);
00065 bbcttrig[i] = (TH1F*)inputfile.Get(nameb);
00066 }
00067
00068 }else{
00069 dumhist = (TH1F*)inputfile.Get("zvertall");
00070 zvertall->Add(dumhist);
00071 dumhist->Clear();
00072 dumhist = (TH1F*)inputfile.Get("bbctall");
00073 bbctall->Add(dumhist);
00074 dumhist->Clear();
00075 dumhist = (TH1F*)inputfile.Get("jp1et");
00076 jp1et->Add(dumhist);
00077 dumhist->Clear();
00078 dumhist = (TH1F*)inputfile.Get("jp2et");
00079 jp2et->Add(dumhist);
00080 dumhist->Clear();
00081 dumhist = (TH1F*)inputfile.Get("jp0et0");
00082 jp0et0->Add(dumhist);
00083 dumhist->Clear();
00084 dumhist = (TH1F*)inputfile.Get("jp1et0");
00085 jp1et0->Add(dumhist);
00086 dumhist->Clear();
00087 for(int i = 0; i < nTriggers; i++){
00088 char namez[100];
00089 sprintf(namez,"zvert%i",triggers[i]);
00090 dumhist = (TH1F*)inputfile.Get(namez);
00091 zverttrig[i]->Add(dumhist);
00092 dumhist->Clear();
00093 char nameb[100];
00094 sprintf(nameb,"bbct%i",triggers[i]);
00095 dumhist = (TH1F*)inputfile.Get(nameb);
00096 bbcttrig[i]->Add(dumhist);
00097 dumhist->Clear();
00098 }
00099 }
00100 inputfile.Clear();
00101 nFiles++;
00102 }
00103
00104 for(int i = 1; i <= jp1eff->GetNbinsX(); i++){
00105 float jp1et0c = jp1et0->GetBinContent(i);
00106 float jp0et0c = jp0et0->GetBinContent(i);
00107 float jp1etc = jp1et->GetBinContent(i);
00108 float jp2etc = jp2et->GetBinContent(i);
00109 float jp1efferr = TMath::Sqrt(jp1et0c/(jp0et0c*jp0et0c) + (jp1et0c*jp1et0c)/(jp0et0c*jp0et0c*jp0et0c));
00110 float jp2efferr = TMath::Sqrt(jp2etc/(jp1etc*jp1etc) + (jp2etc*jp2etc)/(jp1etc*jp1etc*jp1etc));
00111 jp1eff->SetBinContent(i,jp1et0c/jp0et0c);
00112 jp1eff->SetBinError(i,jp1efferr);
00113 jp2eff->SetBinContent(i,jp2etc/jp1etc);
00114 jp2eff->SetBinError(i,jp2efferr);
00115 }
00116
00117 jp1eff->SetTitle("JP1 Efficiency");
00118 jp2eff->SetTitle("JP2 Efficiency");
00119 jp1eff->GetYaxis()->SetRangeUser(0,1.2);
00120 jp2eff->GetYaxis()->SetRangeUser(0,1.2);
00121
00122 outfile.cd();
00123 zvertall->Write();
00124 bbctall->Write();
00125 jp1et->Write();
00126 jp2et->Write();
00127 jp1et0->Write();
00128 jp0et0->Write();
00129 jp1eff->Write();
00130 jp2eff->Write();
00131 for(int i = 0; i < nTriggers; i++){
00132 zverttrig[i]->Write();
00133 bbcttrig[i]->Write();
00134 }
00135
00136 outfile.Write();
00137 outfile.Close();
00138
00139 }