00001
00002 #include <map>
00003 #include "TKey.h"
00004 #include <TH2F.h>
00005 #include <TROOT.h>
00006 #include <TRint.h>
00007 #include <TKey.h>
00008 #include <TList.h>
00009 #include <TTree.h>
00010 #include <TFile.h>
00011 #include <stdlib.h>
00012 #include <TSystem.h>
00013 #include <iostream>
00014 #include <sstream>
00015 #include "Log.hh"
00016
00017 #include "MicroException.hh"
00018 #include <string>
00019
00020 #include "mysql/Mysql.hh"
00021
00022
00023 #include "root/CaloRun.hh"
00024 #include "root/CaloEvent.hh"
00025 #include "root/CaloHit.hh"
00026 #include "root/MTRun.hh"
00027 #include "root/MTEvent.hh"
00028 #include "root/MTChannel.hh"
00029
00030 using namespace std;
00031
00032
00033 int main(int argc, char**argv){
00034
00035 if ( argc !=2 ) {
00036 FILE_LOG(logERROR) << "usage: example rootFile " << endl;
00037 exit(1);
00038 }
00039
00040 Mysql mysql;
00041
00042
00043
00044 int search = 1;
00045 TH2F * hxy = new TH2F("hxy","",100,0,100,100,0,100);
00046 TH1I * hnhit = new TH1I("hnhit","Number of hits",100,0,100);
00047 TH1I * hnhit_roi = new TH1I("hnhit_roi","Number of hits in region of interest",100,0,100);
00048 TH1F * hxres = new TH1F("hxres","Residual in x direction;xm2 - xtel",201,-100,100);
00049 TH1F * hyres = new TH1F("hyres","Residual in x direction;xm2 - xtel",201,-100,100);
00050
00051 string rootName;
00052 rootName.assign(argv[1]);
00053 int nbHit = 0;
00054 int nbEvt = 0;
00055
00056 TFile f(rootName.c_str());
00057 TIter nextkey(f.GetListOfKeys());
00058 TKey *key;
00059
00060 while (key = (TKey*)nextkey())
00061 {
00062
00063 TString keyname = key->GetName();
00064 if ((keyname == "hResidualX") || (keyname == "hResidualY")){}
00065 else{
00066
00067 TTree *tree = (TTree*)key->ReadObj();
00068 cout << "---------------------------- NEW TTREE ---------------------------"<< endl;
00069 nbEvt =0;
00070 nbHit = 0;
00071
00072 float xoffset = 0;
00073 float yoffset = 0;
00074
00075 try {
00076 CaloRun *run=dynamic_cast<CaloRun *>(tree->GetUserInfo()->First());
00077
00078
00079
00080
00081
00082
00083 string beam;
00084 try {
00085
00086 beam = mysql.getRunEnergy(run->GetRunId());
00087 }
00088 catch (MicroException e) {}
00089
00090
00091
00092 }
00093 catch ( ... ) {}
00094
00095 CaloEvent *evt = new CaloEvent();
00096 TBranch *branch= tree->GetBranch("CaloEvent");
00097 branch->SetAddress(&evt);
00098
00099 CaloHit* hit =NULL;
00100 int nbEntries = tree->GetEntries();
00101
00102 bool micromegasHit = false;
00103 for ( int evtNum = 0; evtNum < nbEntries ; evtNum++)
00104 {
00105 tree->GetEntry(evtNum);
00106 UInt_t nbRPCHit=0;
00107 nbEvt++;
00108
00109
00110
00111
00112
00113 int nbHits = evt->GetNHits();
00114
00115
00116 float xtel = 0;
00117 float ytel = 0;
00118
00119 float xextrapol = xtel - xoffset;
00120 float yextrapol = ytel - yoffset;
00121
00122 hnhit->Fill(nbHits);
00123
00124
00125 int nhit_roi = 0;
00126 float xpos = 0;
00127 float ypos = 0;
00128 float xresidual = 0;
00129 float yresidual = 0;
00130
00131 for(int i=0 ; i < nbHits ; i++)
00132 {
00133 hit = (CaloHit*)evt->GetHits()->UncheckedAt(i);
00134 xpos = hit->GetX();
00135 ypos = hit->GetY();
00136 hxy->Fill(xpos,ypos);
00137 if ( hit->GetLayer() >= 50)
00138 {
00139 micromegasHit = true;
00140 }
00141 if ( hit->GetLayer() < 50 ) { nbRPCHit++ ;}
00142
00143
00144 xresidual = xpos - xextrapol;
00145 yresidual = ypos - yextrapol;
00146
00147 hxres->Fill(xresidual);
00148 hyres->Fill(yresidual);
00149
00150 if ((fabs(xresidual)<=search) && (fabs(yresidual)<=search))
00151 {
00152 nhit_roi++;
00153 }
00154 }
00155
00156 hnhit_roi->Fill(nhit_roi);
00157
00158 if ( evt->GetNHits()> 130 && micromegasHit && nbRPCHit < 100 )
00159 {
00160 cout << " number of channel hit:" << evt->GetNHits() <<"for event[" << evt->GetEventId() << "] RPCHIT[" << nbRPCHit << "]" << endl;
00161 }
00162 }
00163 }
00164 }
00165 TFile tf("temp.root","RECREATE");
00166 hxres->Write();
00167 hyres->Write();
00168 hxy->Write();
00169 hnhit->Write();
00170 hnhit_roi->Write();
00171
00172 }