00001
00002 #include <map>
00003 #include "TKey.h"
00004 #include "TList.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/MTRun.hh"
00024 #include "root/MTTrack.hh"
00025 #include "root/MTChamber.hh"
00026 #include "root/MTDetector.hh"
00027 #include "root/MTBoard.hh"
00028 #include "root/MTChip.hh"
00029 #include "root/MTChannel.hh"
00030 #include "root/MTEvent.hh"
00031 #include "root/MTDif.hh"
00032 #include "root/MTHardroc1Chip.hh"
00033 #include "root/MTHardroc2Chip.hh"
00034 #include "root/MTDiracChip.hh"
00035 #include "root/MTMicrorocChip.hh"
00036
00037
00038 using namespace std;
00039
00040
00041 int main(int argc, char**argv){
00042
00043 Mysql mysql;
00044 MYSQL_ROW row;
00045
00046 string sql = "SELECT * FROM RUN";
00047
00048 MYSQL_RES* result = mysql.executeSelect(sql);
00049
00050 int num_fields = mysql_num_fields(result);
00051
00052 while ((row = mysql_fetch_row(result)))
00053 {
00054 for( int i = 0; i < num_fields; i++)
00055 {
00056 printf("%s ", row[i] ? row[i] : "NULL");
00057 }
00058 printf("\n");
00059 }
00060
00061 int id = -1;
00062 try {
00063 id = mysql.getReconstructionSoftwareId("114");
00064 }
00065 catch (MicroException e) {}
00066
00067 cout << "Id[" << id << "]" <<endl ;
00068 id = mysql.addReconstructionSoftware("$Revision: 1770 $", "comments");
00069 cout << "Id[" << id << "]" <<endl ;
00070 try {
00071 id = mysql.getReconstructionSoftwareId("114");
00072 }
00073 catch (MicroException e) {}
00074 cout << "Id[" << id << "]" <<endl ;
00075
00076
00077
00078 if ( argc !=2 ) {
00079 FILE_LOG(logERROR) << "usage: example rootFile " << endl;
00080 exit(1);
00081 }
00082
00083 string rootName;
00084 rootName.assign(argv[1]);
00085 int nbHit = 0;
00086 int nbEvt = 0;
00087
00088 TFile f(rootName.c_str());
00089 f.ls();
00090
00091
00092
00093 TIter nextkey(f.GetListOfKeys());
00094 TKey *key;
00095 while (key = (TKey*)nextkey())
00096 {
00097 TTree *tree = (TTree*)key->ReadObj();
00098 MTRun *run=NULL;
00099 try
00100 {
00101 run=dynamic_cast<MTRun *>(tree->GetUserInfo()->First());
00102 cout << "---------------------------- NEW TTREE ---------------------------"<< endl;
00103 nbEvt =0;
00104 nbHit = 0;
00105 cout << "RunId[" << run->GetRunId() << "]" << endl;
00106
00107 bool showConfig = false;
00108 if ( run != NULL && showConfig)
00109 {
00110 run->Info();
00111 MTDetector* det = run->GetDetector();
00112
00113
00114 const std::map<UInt_t,MTChamber*>& chambers = det->GetChambers();
00115 for( std::map<UInt_t,MTChamber*>::const_iterator ii=chambers.begin(); ii!=chambers.end(); ++ii)
00116 {
00117 const MTChamber& chamber= *((*ii).second);
00118 cout << "chamber id: " << chamber.GetId() << endl;
00119 cout << "chamber type: " << chamber.GetType() << endl;
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 const std::map<UInt_t,MTBoard*>& boards = chamber.GetBoards();
00130 for( std::map<UInt_t,MTBoard*>::const_iterator ii=boards.begin(); ii!=boards.end(); ++ii)
00131 {
00132 const MTBoard& board= *((*ii).second);
00133 board.Info();
00134
00135 cout << endl << endl << "\t\t\t**** Chips configuration ****" << endl ;
00136
00137 map<UInt_t,MTChip*> chips = board.GetChips();
00138 for( map<UInt_t,MTChip*>::const_iterator iiChip=chips.begin(); iiChip!=chips.end(); ++iiChip)
00139 {
00140 const MTChip& chip = *((*iiChip).second);
00141 if ( chip.IsConfigured() )
00142 {
00143 cout << endl << " -- New Chip configuration:" << chip.GetSoftId().toString() << " softId[" << chip.GetSoftId().GetValue() <<"], serial Number[" << chip.GetSerialNumber() << "]"<< endl <<endl <<endl ;
00144 try {
00145 const MTDiracChip &diracChip = dynamic_cast<const MTDiracChip &> (chip);
00146 cout << " ** Dirac Chip config **" << endl;
00147 cout << " threshold B High: " << diracChip.GetBHiThreshold() << endl;
00148 cout << " threshold B Mid : " << diracChip.GetBMidThreshold() << endl;
00149 cout << " threshold B Low : " << diracChip.GetBLoThreshold() << endl;
00150
00151 cout << " threshold A High :" << diracChip.GetAHiThreshold() << endl;
00152 cout << " threshold A Mid : " << diracChip.GetAMidThreshold() << endl;
00153 cout << " threshold A Low : " << diracChip.GetALoThreshold() << endl;
00154 cout << " ** END Dirac Chip config **" << endl;
00155 }
00156 catch (...) {}
00157
00158 try{
00159 const MTHardroc1Chip &hr1Chip = dynamic_cast<const MTHardroc1Chip &> (chip);
00160 cout << " ** Hardroc1 Chip config **" << endl;
00161 cout << " threshold dac 0: " << hr1Chip.GetThresholdDac_0() << endl;
00162 cout << " threshold dac 1: " << hr1Chip.GetThresholdDac_1() << endl;
00163 cout << " gain : " << hr1Chip.GetGain() << endl;
00164 cout << " ** END Hardroc1 Chip config **" << endl;
00165 }
00166 catch (...) {}
00167
00168 try{
00169 const MTHardroc2Chip &hr2Chip = dynamic_cast<const MTHardroc2Chip &> (chip);
00170 cout << " ** Hardroc2 Chip config **" << endl;
00171 cout << " threshold dac 0: " << hr2Chip.GetThresholdDac_0() << endl;
00172 cout << " threshold dac 1: " << hr2Chip.GetThresholdDac_1() << endl;
00173 cout << " threshold dac 2: " << hr2Chip.GetThresholdDac_2() << endl;
00174 cout << " gain : " << hr2Chip.GetGain() << endl;
00175 cout << " ** END Hardroc2 Chip config **" << endl;
00176 }
00177 catch (...) {}
00178
00179 try{
00180 const MTMicrorocChip µ2Chip = dynamic_cast<const MTMicrorocChip &> (chip);
00181 cout << " ** MicrorocChip Chip config **" << endl;
00182 cout << dec << " Serial number : " << micro2Chip.GetSerialNumber() << endl;
00183 cout << dec << " low shaper : " << micro2Chip.GetShaper_lg() << endl;
00184 cout << dec << " high shaper : " << micro2Chip.GetShaper_hg() << endl;
00185 cout << dec << " threshold dac 0: " << micro2Chip.GetThresholdDac_0() << endl;
00186 cout << dec << " threshold dac 1: " << micro2Chip.GetThresholdDac_1() << endl;
00187 cout << dec << " threshold dac 2: " << micro2Chip.GetThresholdDac_2() << endl;
00188 cout << " ** END MicrorocChip Chip config **" << endl;
00189 }
00190 catch (...) {}
00191
00192 cout << endl << endl << "* channels config **" << endl << endl;
00193 cout <<" Enable channel:" ;
00194 for ( UInt_t num = 0 ; num <=63 ; num++)
00195 {
00196 cout << "[" << dec <<num << ":"<< chip.GetEnableChannel(num) << "]";
00197 }
00198 cout << endl <<endl << endl << " Stimulate channel:";
00199 for ( UInt_t num = 0 ; num <=63 ; num++)
00200 {
00201 cout << "[" << dec <<num << ":"<< chip.GetStimulatedChannel(num) << "]";
00202 }
00203
00204 cout << endl <<endl << endl << " Mask ( Microroc Only ) channel:";
00205 for ( UInt_t num = 0 ; num <=63 ; num++)
00206 {
00207 for ( UInt_t index = 0 ; index < 3 ; index++ )
00208 {
00209 cout << "[" << dec <<num << ":MASK" << index << "-> "<< chip.GetMaskChannel(num,index) << "]";
00210 }
00211 }
00212
00213
00214 cout << endl <<endl << endl << " pedastal correction channel:";
00215 for ( UInt_t num = 0 ; num <=63 ; num++)
00216 {
00217 cout << "[" <<dec << num << ":"<< chip.GetPedestalChannel(num) << "]";
00218 }
00219 cout << endl << " -- End Chip configuration:" << endl;
00220 }
00221
00222 }
00223 cout <<endl << "\t\t\t**** END Chips configuration **** "<< endl << endl << endl;
00224 }
00225 }
00226 }
00227 }
00228 catch (MicroException e) {}
00229
00230
00231 MTEvent *evt = new MTEvent();
00232 TBranch *branch= tree->GetBranch("MTEvent");
00233 branch->SetAddress(&evt);
00234
00235 MTChannel* channel =NULL;
00236 int nbEntries = tree->GetEntries();
00237 for ( int evtNum = 0; evtNum < nbEntries ; evtNum++)
00238 {
00239 tree->GetEntry(evtNum);
00240 nbEvt++;
00241
00242
00243
00244
00245
00246
00247
00248 {
00249 cout << "**** Event Information "<< dec << evtNum+1 << "/" << nbEntries<< " ****" << endl;
00250 cout << " event num in TTree:" << evtNum <<endl;
00251 }
00252
00253 bool spark = false;
00254 std::map< UInt_t, std::map<UInt_t, UInt_t>* >& nbHitPerAbsTime = evt->GetNbHitPerAbsTime();
00255 for (std::map< UInt_t, std::map<UInt_t, UInt_t>* >::iterator iter = nbHitPerAbsTime.begin(); iter != nbHitPerAbsTime.end(); iter++)
00256 {
00257 map<UInt_t, UInt_t> *byBoard = iter->second;
00258 for ( map<UInt_t,UInt_t>::iterator it = byBoard->begin(); it != byBoard->end(); it++)
00259 {
00260 UInt_t absTime = it->first;
00261 UInt_t nbHit = it->second;
00262 cout << "Board[" << iter->first << "] Absolute time [" << absTime << "]nbHit[" << nbHit <<"]" << endl;
00263 if (nbHit > 1) { spark = true; }
00264 }
00265 }
00266
00267
00268
00269 {
00270 cout << " event id:" << evt->GetEventId() <<endl;
00271
00272 cout << " event Dif suynchro:" << evt->GetDifSynchro() <<endl;
00273 cout << " event total Trigger counter:" << evt->GetGlobalTriggerCounter() <<endl;
00274 cout << " event Dif Trigger counter:" << evt->GetDifTriggerCounter() <<endl;
00275
00276 const map<unsigned int , float>& tempAsu1 = evt->GetTemperatureAsu1();
00277 for ( map<unsigned int , float>::const_iterator it = tempAsu1.begin() ; it != tempAsu1.end(); it++)
00278 {
00279 cout << " temperature dif: " << it->first << " Asu1:" << it->second <<endl;
00280 }
00281 const map<unsigned int , float>& tempAsu2 = evt->GetTemperatureAsu2();
00282 for ( map<unsigned int , float>::const_iterator it = tempAsu2.begin() ; it != tempAsu2.end(); it++)
00283 {
00284 cout << " temperature dif: " << it->first << " Asu2:" << it->second <<endl;
00285 }
00286 const map<unsigned int , float>& tempDif = evt->GetTemperatureDif();
00287 for ( map<unsigned int , float>::const_iterator it = tempDif.begin() ; it != tempDif.end(); it++)
00288 {
00289 cout << " temperature dif: " << it->first << " dif:" << it->second <<endl;
00290 }
00291 cout << " temperature:" << evt->GetTemperature() <<endl;
00292 cout << " pressure:"<< evt->GetPressure() <<endl;
00293 cout << " timestamp:"<< evt->GetTimestamp() <<endl;
00294 cout << " dif_synchro:"<< evt->GetDifSynchro() <<endl;
00295 cout << " CRC is correct:"<< evt->GetCrcIsCorrect() <<endl;
00296
00297 const std::map<UInt_t, std::map<UInt_t, std::map<UInt_t, Float_t>* >* >& meshs = evt->GetMeshVoltage();
00298 for ( std::map<UInt_t, std::map<UInt_t, std::map<UInt_t, Float_t>* >* >::const_iterator iterChamber = meshs.begin(); iterChamber != meshs.end(); iterChamber++)
00299 {
00300 std::map<UInt_t, std::map<UInt_t, Float_t>* >&difContainer = *(iterChamber)->second;
00301 for ( std::map<UInt_t, std::map<UInt_t, Float_t>* >::const_iterator iterDif = difContainer.begin(); iterDif != difContainer.end(); iterDif++)
00302 {
00303 std::map<UInt_t, Float_t> &boardContainer = *(iterDif)->second;
00304 for ( std::map<UInt_t, Float_t>::const_iterator iterVoltage = boardContainer.begin(); iterVoltage != boardContainer.end(); iterVoltage++)
00305 {
00306 cout << " MeshVoltage for chamber [" << iterChamber->first << "]Dif = ["<< iterDif->first << "] board[" << iterVoltage->first << "] :" <<iterVoltage->second << "]" << endl;
00307 }
00308 }
00309
00310 }
00311
00312
00313 const std::map<UInt_t, std::map<UInt_t, std::map<UInt_t, Float_t>* >* >& drifts = evt->GetDriftVoltage();
00314 for ( std::map<UInt_t, std::map<UInt_t, std::map<UInt_t, Float_t>* >* >::const_iterator iterChamber = drifts.begin(); iterChamber != drifts.end(); iterChamber++)
00315 {
00316 std::map<UInt_t, std::map<UInt_t, Float_t>* >&difContainer = *(iterChamber)->second;
00317 for ( std::map<UInt_t, std::map<UInt_t, Float_t>* >::const_iterator iterDif = difContainer.begin(); iterDif != difContainer.end(); iterDif++)
00318 {
00319 std::map<UInt_t, Float_t> &boardContainer = *(iterDif)->second;
00320 for ( std::map<UInt_t, Float_t>::const_iterator iterVoltage = boardContainer.begin(); iterVoltage != boardContainer.end(); iterVoltage++)
00321 {
00322
00323 cout << " DriftVoltage for chamber [" << iterChamber->first << "]Dif = ["<< iterDif->first << "] board[" << iterVoltage->first << "] :" <<iterVoltage->second << "]" << endl;
00324
00325 }
00326 }
00327
00328 }
00329 }
00330
00331
00332 {
00333
00334 if ( run->GetProcessed() == true )
00335 {
00336 cout << " is square[" << evt->GetSquareEvt() << "]" << endl;
00337 cout << " is time info correct[" << evt->GetTimeInfo() << "]" << endl;
00338 MTTrack *track = evt->GetTrack();
00339 if ( track != NULL )
00340 {
00341 cout << " straight: " << track->GetStraight()
00342 << ", from Strip: " << track->GetFromStrip()
00343 << ", from Pad: " << track->GetFromPad()
00344 << ", single hit: " << track->GetSingleHit()
00345 << ", ax: " << track->GetAx()
00346 << ", bx: " << track->GetBx()
00347 << ", ay: " << track->GetAy()
00348 << ", by: " << track->GetBy() << endl;
00349 }
00350 }
00351 cout << " number of channel hit:" << evt->GetNchannel() <<endl;
00352 int nbChannel = evt->GetNchannel();
00353 for(int i=0;i<nbChannel ;i++)
00354 {
00355 nbHit++;
00356 channel = (MTChannel*)evt->GetChannels()->UncheckedAt(i);
00357
00358
00359
00360
00361 {
00362 cout << "****** Channels Information "<< i+1 << "/" << nbChannel << " ******" << endl;
00363 cout << " Hit num: " << i << endl;
00364 cout << " chamber id: " << channel->GetChamberId() <<endl;
00365 cout << " dif id: " << channel->GetDifId() <<endl;
00366 cout << " boardId id: " << channel->GetBoardId() <<endl;
00367 cout << " chip id(format dec):" << dec << channel->GetChipId() <<endl;
00368 cout << " hard id : " << dec << channel->GetHardId() <<endl;
00369 cout << " row inside chip : " << channel->GetRowInChip() <<endl;
00370 cout << " col inside chip: " << channel->GetColInChip() <<endl ;
00371 cout << " soft id: " << channel->GetSoftId().GetValue() << endl<< endl;
00372 cout << " soft id: " << channel->GetSoftId().GetValue() << endl<< endl;
00373 cout << " asu row: " << channel->GetSoftId().GetBoardRow() << endl<< endl;
00374 cout << " asu col: " << channel->GetSoftId().GetBoardCol() << endl<< endl;
00375 cout << " channel row inside chamber: " << channel->GetRowInChamber() <<endl;
00376 cout << " channel col inside chamber: " << channel->GetColInChamber() <<endl ;
00377 cout << " analog value: " << channel->GetAnalogValue() <<endl;
00378 cout << " digital value: " << channel->GetDigitalValue() <<endl;
00379 cout << " x: " << channel->GetX() <<endl;
00380 cout << " y: " << channel->GetY() <<endl;
00381 cout << " z: " << channel->GetZ() <<endl;
00382 cout << " order: " << channel->GetOrder() <<endl;
00383 cout << " timestamp: " << channel->GetTimestamp() <<endl;
00384 cout << " bcId abs: " << channel->GetBcId_Abs() <<endl;
00385 cout << " bcId dif: " << channel->GetBcId_Dif() <<endl;
00386 cout << " bcId hit: " << channel->GetBcId_Hit() <<endl;
00387 UInt_t absTime = channel->GetBcId_Abs() - (channel->GetBcId_Dif() - channel->GetBcId_Hit() );
00388 cout << " absolute time:bcid_abs - (bcid_dif - bcid_hit) " << absTime <<endl;
00389 cout << " nbHit for this absolute time:" << evt->GetNbHitPerAbsTime(channel->GetSoftId().GetBoardId(),absTime)<<endl;
00390 cout << " bcId hit Fine: " << channel->GetBcId_Hit_Fine() <<endl;
00391 cout << " memory order : " << channel->GetMemoryOrder() <<endl;
00392 }
00393 }
00394 }
00395 }
00396 cout << "End of TTree[" << tree->GetName() << "]" <<endl;
00397 cout << endl << "** Nombre d Event["<< nbEvt <<"] ** "<< endl;
00398 cout << endl << "** Nombre de Hits["<< nbHit <<"] ** "<< endl;
00399
00400 }
00401 return 0 ;
00402 }
00403
00404
00405
00406