#include <TROOT.h>
#include <TRint.h>
#include <TKey.h>
#include <TCanvas.h>
#include <TTree.h>
#include <TFile.h>
#include <TSystem.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <iostream>
#include <sstream>
#include "Log.hh"
#include "Chamber.hh"
#include "Detector.hh"
#include "DiracChamber1.hh"
#include "GassiplexChamber1.hh"
#include "GassiplexChamber4.hh"
#include "Hardroc1Chamber.hh"
#include "MicroException.hh"
#include <TApplication.h>
#include <TGClient.h>
#include <TGListBox.h>
#include <TList.h>
#include "root/MTRun.hh"
#include "root/MTEvent.hh"
#include "root/MTChannel.hh"
Include dependency graph for EventDisplayer.cpp:
Go to the source code of this file.
Functions | |
int | main (int argc, char **argv) |
int main | ( | int | argc, | |
char ** | argv | |||
) |
Definition at line 43 of file EventDisplayer.cpp.
00045 { //un-named script to be run in ROOT framework 00046 00047 FILELog::ReportingLevel() = FILELog::FromString(INFO); 00048 00049 //----- Control usage and option 00050 if ( argc != 3 ) { 00051 FILE_LOG(logERROR) << "usage: EventDisplay rootFile eventNum" << endl; 00052 exit(1); 00053 } 00054 00055 00056 00057 //string steerName; 00058 //steerName.assign(argv[1]); 00059 //streeName.assign(argv[1]); 00060 00061 string rootName; 00062 rootName.assign(argv[1]); 00063 00064 int eventNum = atoi(argv[2]); 00065 00066 TApplication *theApp; 00067 00068 argc = 1; 00069 theApp = new TRint("App", &argc, argv); 00070 00071 00072 /******************************************/ 00073 /******************************************/ 00074 /******************************************/ 00075 /******************************************/ 00076 /******************************************/ 00077 /******************************************/ 00078 00079 00080 TFile *f = new TFile(rootName.c_str()); 00081 if ( f->IsZombie()) { 00082 FILE_LOG(logERROR) << "Root file ["<< rootName.c_str() << "] does not exist" << endl; 00083 exit(-1); 00084 } 00085 00086 00087 gSystem->Load("libGeom"); 00088 TGeoManager *frame =new TGeoManager("Frame","mM event displayer"); 00089 frame->SetMaxVisNodes(40000); 00090 //cout << "--------max vis node[" <<frame->GetMaxVisNodes() << "]" << endl; 00091 00092 TGeoMaterial *mat = new TGeoMaterial("SomeMaterial",1,1,1); 00093 TGeoMedium *med = new TGeoMedium("SomeMedium",1,mat); 00094 00095 //TGeoVolume *world = frame->MakeBox("World", med, xLength, yLength, zLength); // x, y , z size unit cm 00096 00097 // ----- create World volume who contains all other. 00098 TGeoVolume *world = frame->MakeBox("World", med, 1, 1, 1); // x, y , z size unit cm 00099 00100 map<string,bool> node; 00101 00102 MTEvent *evt = new MTEvent(); 00103 TIter nextkey(f->GetListOfKeys()); 00104 TKey *key; 00105 int padNumber = 0; 00106 while ((key = (TKey*)nextkey())) 00107 { 00108 TTree *tree = (TTree*)key->ReadObj(); 00109 MTRun* run = (MTRun*)tree->GetUserInfo()->FindObject("MTRun"); 00110 00111 // FILE_LOG(logINFO) << "Number of reoncstruct events: " << tree->GetEntries() << endl; 00112 00113 TBranch *branch= tree->GetBranch("MTEvent"); 00114 branch->SetAddress(&evt); 00115 00116 Int_t globalTriggerCounter = -1; 00117 Int_t nbEvent = tree->GetEntries(); 00118 bool find = false; 00119 tree->GetEntry(eventNum); 00120 std::vector<UInt_t>& dtValid = evt->GetDtCandidate(); 00121 00122 UInt_t dt = 0; 00123 if (dtValid.size() >0) 00124 { 00125 dt = dtValid[0]; 00126 cout << "valid dt [" << dt << "]" << endl; 00127 } 00128 00129 Int_t NC=evt->GetNchannel(); 00130 frame->SetMaxVisNodes(NC); 00131 00132 float x,y,z;// 694 node MaxMax 00133 for(int i=0;i<NC ;i++) 00134 //for(int i=0;i<10 ;i++) 00135 { 00136 //if ( padNumber < 693) 00137 //cout << "pad number]" << padNumber << "]" << endl; 00138 if ( padNumber < 169300) 00139 { 00140 int nodes = world->CountNodes(); 00141 //cout << "nodes]" << nodes << "]" << endl; 00142 00143 //the only known way to get the information from the channels number i 00144 MTChannel* channel = (MTChannel*)evt->GetChannels()->UncheckedAt(i); 00145 UInt_t t2 = channel->GetBcIdDif(); 00146 UInt_t t3 = channel->GetBcIdHit(); 00147 UInt_t dtcurr = t2 - t3; 00148 00149 if ( dtcurr == dt ) 00150 { 00151 00152 float xLength = .098 * 4; //cm 00153 float yLength = .098 * 4; // cm 00154 float zLength = .12; // cm 00155 // ChannelPad name 00156 string padID=""; 00157 stringstream currentpad;// (stringstream::in | stringstream::out); 00158 padNumber++; 00159 currentpad<<padNumber; 00160 padID="pad_"+currentpad.str(); 00161 00162 //TGeoVolume *pad = frame->MakeBox(padID.c_str(),med,xLength,yLength,zLength ); 00163 TGeoVolume *pad = frame->MakeBox(padID.c_str(),med,yLength,xLength,zLength ); 00164 x=channel->GetX() ;//+xOffset; 00165 y=channel->GetY() ;//+yOffset; 00166 z=channel->GetZ() ; 00167 /* 00168 z=channel->GetZ(); 00169 x=channel->GetX();//+xOffset; 00170 y=channel->GetY();//+yOffset; 00171 */ 00172 cout << "-----> Draw x[" << x << "], y[" << y << "], z[" << z << "]" << endl; 00173 //set now the color of the pad 00174 int color; 00175 int sMax = 30;//set to limit of saturation 00176 stringstream ch; 00177 ch<<i; 00178 00179 color = channel->GetAnalogValue()+channel->GetDigitalValue()*10; 00180 ostringstream ox,oy,oz; 00181 ox << x; oy << y; oz <<z ; 00182 string key = "x[" + ox.str() + "]y[" + oy.str() + "]z[" + oz.str() +"]" ; 00183 //cout << "key[" << key <<"]" <<endl; 00184 if ( node[key]==false) 00185 { 00186 world->AddNode(pad,1,new TGeoTranslation(x,y,z)); 00187 node[key] = true; 00188 color = color * 2; 00189 } 00190 pad->SetLineColor(color); 00191 00192 } 00193 } 00194 else 00195 { 00196 FILE_LOG(logERROR) << "------------------Too Many Nodes !" << endl<< endl << endl ; 00197 break; 00198 } 00199 } 00200 } 00201 frame->SetTopVolume(world); 00202 frame->CloseGeometry(); 00203 00204 world->Draw(); 00205 00206 theApp->Run(); 00207 delete theApp; 00208 // run ROOT application 00209 00210 return 0; 00211 }