00001
00002
00003
00004
00005
00006
00007
00009 #include "MessageService/MsgService.h"
00010 #include "MinosObjectMap/MomNavigator.h"
00011 #include "JobControl/JobCModuleRegistry.h"
00012
00013 #include "Validity/VldContext.h"
00014
00015
00016 #include "RecoBase/CandStripHandle.h"
00017 #include "RecoBase/CandSliceListHandle.h"
00018 #include "RecoBase/CandSliceHandle.h"
00019 #include "RecoBase/CandShowerListHandle.h"
00020 #include "RecoBase/CandShowerHandle.h"
00021 #include "RecoBase/CandTrackListHandle.h"
00022 #include "RecoBase/CandTrackHandle.h"
00023
00024 #include "CandDigit/CandDeMuxDigitHandle.h"
00025 #include "CandDigit/CandDeMuxDigit.h"
00026
00027 #include "CandFitTrackCam/CandFitTrackCamHandle.h"
00028 #include "CandFitTrackCam/CandFitTrackCamListHandle.h"
00029 #include "CandFitTrackCam/FitTrackCamAnalysisModule.h"
00030
00031
00032 #include "Record/SimSnarlRecord.h"
00033 #include "Record/SimSnarlHeader.h"
00034 #include "REROOT_Classes/REROOT_NeuKin.h"
00035 #include "CandData/CandHeader.h"
00036 #include "DataUtil/Truthifier.h"
00037
00038
00039 #include "TH2F.h"
00040 #include "TCanvas.h"
00041 #include "TPad.h"
00042 #include "TApplication.h"
00043 #include "TSystem.h"
00044 #include "TMarker.h"
00045
00046
00047 #include <fcntl.h>
00048 #include <unistd.h>
00049
00050
00051 #include <cmath>
00052
00053 using std::cout;
00054 using std::endl;
00055
00056 JOBMODULE(FitTrackCamAnalysisModule, "FitTrackCamAnalysisModule", "Analyses track fit results");
00057 CVSID("$Id: FitTrackCamAnalysisModule.cxx,v 1.12 2007/11/11 08:43:39 rhatcher Exp $");
00058
00060 FitTrackCamAnalysisModule::FitTrackCamAnalysisModule()
00061 {
00062 isMC=0;
00063
00064 fListInSlc="CandSliceList";
00065 fListInShw="CandShowerList";
00066 fListInTrk="CandTrackSRList";
00067 fListInFitTrk="CandFitTrackCamList";
00068
00069 fTrackCanvas = new TCanvas("fTrackCanvas","TrackView",800,500);
00070 fTrackCanvas->Draw();
00071
00072
00073 fUZPad = new TPad("upad","U pad",0.010,0.505,0.495,0.990);
00074 fVZPad = new TPad("vpad","V pad",0.010,0.010,0.495,0.495);
00075 fUZMCPad = new TPad("uMCpad","U pad",0.505,0.505,0.990,0.990);
00076 fVZMCPad = new TPad("vMCpad","V pad",0.505,0.010,0.990,0.495);
00077
00078 fUZPad->SetFillColor(10);
00079 fVZPad->SetFillColor(10);
00080 fUZMCPad->SetFillColor(10);
00081 fVZMCPad->SetFillColor(10);
00082
00083 fUZPad->SetLeftMargin(0.05);
00084 fUZPad->SetRightMargin(0.001);
00085 fUZPad->SetTopMargin(0.0001);
00086 fUZPad->SetBottomMargin(0.055);
00087 fVZPad->SetLeftMargin(0.05);
00088 fVZPad->SetRightMargin(0.001);
00089 fVZPad->SetTopMargin(0.0001);
00090 fVZPad->SetBottomMargin(0.055);
00091
00092 fUZMCPad->SetLeftMargin(0.05);
00093 fUZMCPad->SetRightMargin(0.001);
00094 fUZMCPad->SetTopMargin(0.0001);
00095 fUZMCPad->SetBottomMargin(0.055);
00096 fVZMCPad->SetLeftMargin(0.05);
00097 fVZMCPad->SetRightMargin(0.001);
00098 fVZMCPad->SetTopMargin(0.0001);
00099 fVZMCPad->SetBottomMargin(0.055);
00100
00101 fUZPad->Draw();
00102 fVZPad->Draw();
00103 fUZMCPad->Draw();
00104 fVZMCPad->Draw();
00105
00106 fUZAxis=0;
00107 fVZAxis=0;
00108 fUZMCAxis=0;
00109 fVZMCAxis=0;
00110
00111
00112
00113 TDirectory* tmpd = 0;
00114 tmpd = gDirectory;
00115
00116 FTCFile = new TFile("FTCResults.root","recreate");
00117 FTCTree = new TTree("FTCTree","FTCTree");
00118
00119
00120 FTCTree->Branch("Run",&Run,"Run/I");
00121 FTCTree->Branch("Snarl",&Snarl,"Snarl/I");
00122 FTCTree->Branch("NumFittedTracks",&NumFittedTracks,"NumFittedTracks/I");
00123 FTCTree->Branch("Pass",&Pass,"Pass/I");
00124
00125
00126 FTCTree->Branch("RecoQP",&RecoQP,"RecoQP/D");
00127 FTCTree->Branch("TrueQP",&TrueQP,"TrueQP/D");
00128 FTCTree->Branch("QPVtxError",&QPVtxError,"QPVtxError/D");
00129 FTCTree->Branch("RecoMomCurve",&RecoMomCurve,"RecoMomCurve/D");
00130 FTCTree->Branch("RecoMomRange",&RecoMomRange,"RecoMomRange/D");
00131 FTCTree->Branch("TrueMom",&TrueMom,"TrueMom/D");
00132 FTCTree->Branch("RecoTime",&RecoTime,"RecoTime/D");
00133
00134
00135 FTCTree->Branch("FitTrackStrips",&FitTrackStrips,"FitTrackStrips/I");
00136 FTCTree->Branch("TrueMuonStrips",&TrueMuonStrips,"TrueMuonStrips/I");
00137 FTCTree->Branch("FitAndTruthAgree",&FitAndTruthAgree,"FitAndTruthAgree/I");
00138 FTCTree->Branch("FitTrackLength",&FitTrackLength,"FitTrackLength/I");
00139 FTCTree->Branch("TrueTrackLength",&TrueTrackLength,"TrueTrackLength/I");
00140 FTCTree->Branch("TotalStripsInSnarl",&TotalStripsInSnarl,"TotalStripsInSnarl/I");
00141 FTCTree->Branch("FDFullyContained",&FDFullyContained,"FDFullyContained/I");
00142 FTCTree->Branch("NTrackStrip",&NTrackStrip,"NTrackStrip/I");
00143 FTCTree->Branch("NTrackDigit",&NTrackDigit,"NTrackDigit/I");
00144
00145
00146 FTCTree->Branch("Chi2",&Chi2,"Chi2/D");
00147 FTCTree->Branch("NDOF",&NDOF,"NDOF/I");
00148 FTCTree->Branch("NIterate",&NIterate,"NIterate/I");
00149 FTCTree->Branch("NSwimFail",&NSwimFail,"NSwimFail/I");
00150
00151
00152 FTCTree->Branch("TimeSlope",&TimeSlope,"TimeSlope/D");
00153 FTCTree->Branch("TimeOffset",&TimeOffset,"TimeOffset/D");
00154 FTCTree->Branch("VtxT",&VtxT,"VtxT/D");
00155 FTCTree->Branch("EndT",&EndT,"EndT/D");
00156 FTCTree->Branch("TimeFitChi2",&TimeFitChi2,"TimeFitChi2/D");
00157 FTCTree->Branch("NTimeFitDigit",&NTimeFitDigit,"NTimeFitDigit/D");
00158 FTCTree->Branch("TimeForwardFitRMS",&TimeForwardFitRMS,"TimeForwardFitRMS/D");
00159 FTCTree->Branch("TimeForwardFitNDOF",&TimeForwardFitNDOF,"TimeForwardFitNDOF/I");
00160 FTCTree->Branch("TimeBackwardFitRMS",&TimeBackwardFitRMS,"TimeBackwardFitRMS/D");
00161 FTCTree->Branch("TimeBackwardFitNDOF",&TimeBackwardFitNDOF,"TimeBackwardFitNDOF/I");
00162
00163
00164 FTCTree->Branch("VtxU",&VtxU,"VtxU/D");
00165 FTCTree->Branch("VtxV",&VtxV,"VtxV/D");
00166 FTCTree->Branch("VtxZ",&VtxZ,"VtxZ/D");
00167 FTCTree->Branch("VtxPlane",&VtxPlane,"VtxPlane/I");
00168
00169 FTCTree->Branch("VtxDirCosU",&VtxDirCosU,"VtxDirCosU/D");
00170 FTCTree->Branch("VtxDirCosV",&VtxDirCosV,"VtxDirCosV/D");
00171 FTCTree->Branch("VtxDirCosZ",&VtxDirCosZ,"VtxDirCosZ/D");
00172
00173 FTCTree->Branch("VtxUError",&VtxUError,"VtxUError/D");
00174 FTCTree->Branch("VtxVError",&VtxVError,"VtxVError/D");
00175 FTCTree->Branch("VtxdUError",&VtxdUError,"VtxdUError/D");
00176 FTCTree->Branch("VtxdVError",&VtxdVError,"VtxdVError/D");
00177
00178
00179
00180 FTCTree->Branch("EndU",&EndU,"EndU/D");
00181 FTCTree->Branch("EndV",&EndV,"EndV/D");
00182 FTCTree->Branch("EndZ",&EndZ,"EndZ/D");
00183 FTCTree->Branch("EndPlane",&EndPlane,"EndPlane/I");
00184 FTCTree->Branch("EndQP",&EndQP,"EndQP/D");
00185
00186 FTCTree->Branch("EndDirCosU",&EndDirCosU,"EndDirCosU/D");
00187 FTCTree->Branch("EndDirCosV",&EndDirCosV,"EndDirCosV/D");
00188 FTCTree->Branch("EndDirCosZ",&EndDirCosZ,"EndDirCosZ/D");
00189
00190 FTCTree->Branch("EndUError",&EndUError,"EndUError/D");
00191 FTCTree->Branch("EndVError",&EndVError,"EndVError/D");
00192 FTCTree->Branch("EnddUError",&EnddUError,"EnddUError/D");
00193 FTCTree->Branch("EnddVError",&EnddVError,"EnddVError/D");
00194 FTCTree->Branch("EndQOError",&EndQPError,"EndQPError/D");
00195
00196
00197 FTCTree->Branch("Range",&Range,"Range/D");
00198 FTCTree->Branch("dS",&dS,"dS/D");
00199
00200
00201
00202 FTCTree->Branch("VtxTrace",&VtxTrace,"VtxTrace/D");
00203 FTCTree->Branch("VtxTraceZ",&VtxTraceZ,"VtxTraceZ/D");
00204 FTCTree->Branch("EndTrace",&EndTrace,"EndTrace/D");
00205 FTCTree->Branch("EndTraceZ",&EndTraceZ,"EndTraceZ/D");
00206
00207 gDirectory = tmpd;
00208 }
00210
00211
00213 FitTrackCamAnalysisModule::~FitTrackCamAnalysisModule()
00214 {
00215 if(fTrackCanvas) {delete fTrackCanvas;}
00216
00217 if(fUZAxis) {delete fUZAxis;}
00218 if(fVZAxis) {delete fVZAxis;}
00219 if(fUZMCAxis) {delete fUZMCAxis;}
00220 if(fVZMCAxis) {delete fVZMCAxis;}
00221 }
00223
00224
00226 void FitTrackCamAnalysisModule::BeginJob()
00227 {
00228 }
00230
00231
00233 void FitTrackCamAnalysisModule::EndJob()
00234 {
00235 TDirectory* tmpd = 0;
00236 tmpd = gDirectory;
00237 FTCFile->cd();
00238 FTCTree->Write();
00239 FTCFile->Close();
00240 gDirectory = tmpd;
00241 }
00243
00244
00246 JobCResult FitTrackCamAnalysisModule::Ana(const MomNavigator* mom)
00247 {
00248 MSG("FitTrack", Msg::kDebug) << " FitTrackCamAnalysisModule::Ana(const MomNavigator* mom) " << endl;
00249
00250
00251 CareAboutXTalk=true;
00252 debug=false;
00253
00255
00256 if ( fUZAxis ) { delete fUZAxis; fUZAxis=0; }
00257 if ( fVZAxis ) { delete fVZAxis; fVZAxis=0; }
00258 if ( fUZMCAxis ) { delete fUZMCAxis; fUZMCAxis=0; }
00259 if ( fVZMCAxis ) { delete fVZMCAxis; fVZMCAxis=0; }
00260
00261 fMaxZ = -1;
00262 fMinZ = 50;
00263 fMaxUorV = -20;
00264 fMinUorV = 20;
00265
00266 fFitEndPlane = -1;
00267 fFitVtxPlane = 500;
00268 fTrueMaxPlane = -1;
00269 fTrueMinPlane = 500;
00270
00271 Run=-999;
00272 Snarl=-999;
00273 NumFittedTracks=-999;
00274 Pass=-999;
00275
00276 RecoQP=-999;
00277 TrueQP=-999;
00278 QPVtxError=-999;
00279 RecoMomCurve=-999;
00280 RecoMomRange=-999;
00281 TrueMom=-999;
00282 RecoTime=-999;
00283
00284 FitTrackStrips=-999;
00285 TrueMuonStrips=-999;
00286 FitAndTruthAgree=-999;
00287 FitTrackLength=-999;
00288 TrueTrackLength=-999;
00289 TotalStripsInSnarl=-999;
00290 FDFullyContained=-999;
00291 NTrackStrip=-999;
00292 NTrackDigit=-999;
00293
00294 Chi2=-999;
00295 NDOF=-999;
00296 NIterate=-999;
00297 NSwimFail=-999;
00298
00299 TimeSlope=-999;
00300 TimeOffset=-999;
00301 VtxT=-999;
00302 EndT=-999;
00303 TimeFitChi2=-999;
00304 NTimeFitDigit=-999;
00305 TimeForwardFitRMS=-999;
00306 TimeForwardFitNDOF=-999;
00307 TimeBackwardFitRMS=-999;
00308 TimeBackwardFitNDOF=-999;
00309
00310 VtxU=-999;
00311 VtxV=-999;
00312 VtxZ=-999;
00313 VtxPlane=-999;
00314
00315 VtxDirCosU=-999;
00316 VtxDirCosV=-999;
00317 VtxDirCosZ=-999;
00318
00319 VtxUError=-999;
00320 VtxVError=-999;
00321 VtxdUError=-999;
00322 VtxdVError=-999;
00323
00324 EndU=-999;
00325 EndV=-999;
00326 EndZ=-999;
00327 EndPlane=-999;
00328 EndQP=-999;
00329
00330 EndDirCosU=-999;
00331 EndDirCosV=-999;
00332 EndDirCosZ=-999;
00333
00334 EndUError=-999;
00335 EndVError=-999;
00336 EnddUError=-999;
00337 EnddVError=-999;
00338 EndQPError=-999;
00339
00340 Range=-999;
00341 dS=-999;
00342
00343 VtxTrace=-999;
00344 VtxTraceZ=-999;
00345 EndTrace=-999;
00346 EndTraceZ=-999;
00348
00349
00350
00352 candrec = dynamic_cast<CandRecord *> (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00353
00354 if(!candrec)
00355 {
00356 MSG("FitTrack", Msg::kWarning) << " Failed to Find CandRecord " << endl;
00357 return JobCResult::kFailed;
00358 }
00359
00360
00361 CandHeader* candhead = (CandHeader*)(candrec->GetCandHeader());
00362 Run=candhead->GetRun();
00363 Snarl=candhead->GetSnarl();
00364
00365 cout << "Snarl: " << Snarl << endl;
00366
00367 VldContext *vldc = (VldContext*)(candrec->GetVldContext());
00369
00370
00371
00373 ConfigureAxes(vldc);
00374 SliceSection();
00375 ShowerSection();
00376 TrackSection();
00377 FittedTrackSection();
00378
00379
00380
00381 if(vldc->GetSimFlag()==SimFlag::kMC) {
00382 isMC=1;
00383
00384 Truthifier* mytruth = new Truthifier(mom);
00385
00386
00387 SimSnarlRecord* simrec = dynamic_cast<SimSnarlRecord *>(mom->GetFragment("SimSnarlRecord"));
00388 if(simrec) {TruthSection(simrec);}
00389
00390 TruthSliceSection(mytruth);
00391 EfficiencySection(mytruth);
00392
00393 delete mytruth;
00394 }
00395
00396
00397 TDirectory* tmpd = 0;
00398 tmpd = gDirectory;
00399 FTCFile->cd();
00400 FTCTree->Fill();
00401 gDirectory = tmpd;
00402
00403 Draw();
00404
00405 CleanUp();
00407
00408
00409 return JobCResult::kPassed;
00410 }
00413
00414
00415
00417 void FitTrackCamAnalysisModule::ConfigureAxes(VldContext *vldc)
00418 {
00419
00420
00421 if (vldc->GetDetector()==Detector::kNear)
00422 {
00423 fUZAxis = new TH2F("UZAxis", "U view Near, Reco", 200, 0., 20., 80, -4., 4.);
00424 fVZAxis = new TH2F("VZAxis", "V view Near, Reco", 200, 0., 20., 80, -4., 4.);
00425
00426 fUZMCAxis = new TH2F("UZMCAxis", "U view Near, Truth", 200, 0., 20., 80, -4., 4.);
00427 fVZMCAxis = new TH2F("VZMCAxis", "V view Near, Truth", 200, 0., 20., 80, -4., 4.);
00428 }
00429 else if (vldc->GetDetector()==Detector::kFar)
00430 {
00431 fUZAxis = new TH2F("UZAxis", "U view Far, Reco", 300, 0., 30., 100, -5., 5.);
00432 fVZAxis = new TH2F("VZAxis", "V view Far, Reco", 300, 0., 30., 100, -5., 5.);
00433
00434 fUZMCAxis = new TH2F("UZMCAxis", "U view Far, Truth", 300, 0., 30., 100, -5., 5.);
00435 fVZMCAxis = new TH2F("VZMCAxis", "V view Far, Truth", 300, 0., 30., 100, -5., 5.);
00436 }
00437 else {cout << "Require detector to be near or far!!!" << endl;}
00438
00439
00440 fUZAxis->SetStats(kFALSE);
00441 fVZAxis->SetStats(kFALSE);
00442 fUZMCAxis->SetStats(kFALSE);
00443 fVZMCAxis->SetStats(kFALSE);
00444
00445
00446 fUZAxis->SetDirectory(0);
00447 fVZAxis->SetDirectory(0);
00448 fUZMCAxis->SetDirectory(0);
00449 fVZMCAxis->SetDirectory(0);
00450
00451
00452 fUZPad->cd();
00453 fUZAxis->Draw();
00454
00455 fVZPad->cd();
00456 fVZAxis->Draw();
00457
00458 fUZMCPad->cd();
00459 fUZMCAxis->Draw();
00460
00461 fVZMCPad->cd();
00462 fVZMCAxis->Draw();
00463
00464 fTrackCanvas->cd();
00465 }
00467
00468
00469
00471 void FitTrackCamAnalysisModule::SliceSection()
00472 {
00473 vector<TMarker> fThisSliceUZ;
00474 vector<TMarker> fThisSliceVZ;
00475 CandSliceListHandle* slice_list = 0;
00476
00477
00478 slice_list = dynamic_cast<CandSliceListHandle*>
00479 (candrec->FindCandHandle("CandSliceListHandle",fListInSlc.Data()));
00480
00481 if(!slice_list) {MSG("FitTrack", Msg::kWarning) << " Failed to Find " << fListInSlc.Data() << endl; }
00482
00483 else {
00484 assert(slice_list);
00485 if(slice_list->GetNDaughters()<1) {MSG("FitTrack", Msg::kWarning) << "SliceList was empty... " << endl; }
00486
00487
00488 TIter SlcItr = slice_list->GetDaughterIterator();
00489 while(CandSliceHandle* Slc = dynamic_cast<CandSliceHandle*>(SlcItr()))
00490 {
00491
00492 TIter SlcStripItr = Slc->GetDaughterIterator();
00493 while(CandStripHandle* SlcStrip = dynamic_cast<CandStripHandle*>(SlcStripItr()))
00494 {
00495
00496 TIter digitrSlcXTalk = SlcStrip->GetDaughterIterator();
00497 while(CandDeMuxDigitHandle* SlcDigit = dynamic_cast<CandDeMuxDigitHandle*>(digitrSlcXTalk()))
00498 {
00499
00500 if(int(SlcStrip->GetPlaneView())==2 && (SlcDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00501 TMarker tmpmUSlc(SlcStrip->GetZPos(), SlcStrip->GetTPos(), 20);
00502 tmpmUSlc.SetMarkerColor(3);
00503 tmpmUSlc.SetMarkerSize(0.8);
00504 fThisSliceUZ.push_back(tmpmUSlc);
00505 }
00506
00507
00508 else if(int(SlcStrip->GetPlaneView())==3 && (SlcDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00509 TMarker tmpmVSlc(SlcStrip->GetZPos(), SlcStrip->GetTPos(), 20);
00510 tmpmVSlc.SetMarkerColor(3);
00511 tmpmVSlc.SetMarkerSize(0.8);
00512 fThisSliceVZ.push_back(tmpmVSlc);
00513 }
00514
00515 if(SlcStrip->GetZPos() > fMaxZ) fMaxZ=SlcStrip->GetZPos();
00516 if(SlcStrip->GetZPos() < fMinZ) fMinZ=SlcStrip->GetZPos();
00517
00518 if(SlcStrip->GetTPos() > fMaxUorV) fMaxUorV=SlcStrip->GetTPos();
00519 if(SlcStrip->GetTPos() < fMinUorV) fMinUorV=SlcStrip->GetTPos();
00520 }
00521 digitrSlcXTalk.Reset();
00522 }
00523 SlcStripItr.Reset();
00524
00525 fUZSliceMarker.push_back(fThisSliceUZ);
00526 fVZSliceMarker.push_back(fThisSliceVZ);
00527 }
00528 SlcItr.Reset();
00529 }
00530 }
00532
00533
00534
00536 void FitTrackCamAnalysisModule::ShowerSection()
00537 {
00538 vector<TMarker> fThisShowerUZ;
00539 vector<TMarker> fThisShowerVZ;
00540 CandShowerListHandle* shower_list = 0;
00541
00542
00543 shower_list = dynamic_cast<CandShowerListHandle*>
00544 (candrec->FindCandHandle("CandShowerListHandle",fListInShw.Data()));
00545
00546 if(!shower_list) {MSG("FitTrack", Msg::kWarning) << " Failed to Find " << fListInShw.Data() << endl; }
00547
00548 else {
00549 assert(shower_list);
00550 if(shower_list->GetNDaughters()<1) {MSG("FitTrack", Msg::kWarning) << "ShowerList was empty... " << endl; }
00551
00552
00553 TIter ShwItr = shower_list->GetDaughterIterator();
00554 while(CandShowerHandle* Shw = dynamic_cast<CandShowerHandle*>(ShwItr()))
00555 {
00556
00557 TIter ShwStripItr = Shw->GetDaughterIterator();
00558 while(CandStripHandle* ShwStrip = dynamic_cast<CandStripHandle*>(ShwStripItr()))
00559 {
00560
00561 TIter digitrShwXTalk = ShwStrip->GetDaughterIterator();
00562 while(CandDeMuxDigitHandle* ShwDigit = dynamic_cast<CandDeMuxDigitHandle*>(digitrShwXTalk()))
00563 {
00564
00565 if(int(ShwStrip->GetPlaneView())==2 && (ShwDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00566 TMarker tmpmUShw(ShwStrip->GetZPos(), ShwStrip->GetTPos(), 24);
00567 tmpmUShw.SetMarkerColor(5);
00568 fThisShowerUZ.push_back(tmpmUShw);
00569 }
00570
00571
00572 else if(int(ShwStrip->GetPlaneView())==3 && (ShwDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00573 TMarker tmpmVShw(ShwStrip->GetZPos(), ShwStrip->GetTPos(), 24);
00574 tmpmVShw.SetMarkerColor(5);
00575 fThisShowerVZ.push_back(tmpmVShw);
00576 }
00577
00578 if(ShwStrip->GetZPos() > fMaxZ) fMaxZ=ShwStrip->GetZPos();
00579 if(ShwStrip->GetZPos() < fMinZ) fMinZ=ShwStrip->GetZPos();
00580
00581 if(ShwStrip->GetTPos() > fMaxUorV) fMaxUorV=ShwStrip->GetTPos();
00582 if(ShwStrip->GetTPos() < fMinUorV) fMinUorV=ShwStrip->GetTPos();
00583
00584 }
00585 digitrShwXTalk.Reset();
00586
00587 }
00588 ShwStripItr.Reset();
00589
00590 fUZShowerMarker.push_back(fThisShowerUZ);
00591 fVZShowerMarker.push_back(fThisShowerVZ);
00592 }
00593 ShwItr.Reset();
00594 }
00595 }
00597
00598
00599
00601 void FitTrackCamAnalysisModule::TrackSection()
00602 {
00603 vector<TMarker> fThisTrackUZ;
00604 vector<TMarker> fThisTrackVZ;
00605 int numTrk=0;
00606 CandTrackListHandle* track_list = 0;
00607
00608
00609 track_list = dynamic_cast<CandTrackListHandle*>
00610 (candrec->FindCandHandle("CandTrackListHandle",fListInTrk.Data()));
00611
00612 if(!track_list) {MSG("Track", Msg::kWarning) << " Failed to Find " << fListInTrk.Data() << endl; }
00613
00614 else {
00615 assert(track_list);
00616 if(track_list->GetNDaughters()<1) {MSG("Track", Msg::kWarning) << "Tracklist was empty... " << endl; }
00617
00618
00619 TIter TrkItr = track_list->GetDaughterIterator();
00620 while(CandTrackHandle* Trk = dynamic_cast<CandTrackHandle*>(TrkItr()))
00621 {
00622 numTrk++;
00623
00624
00625 TIter TrkStripItr = Trk->GetDaughterIterator();
00626 while(CandStripHandle* TrkStrip = dynamic_cast<CandStripHandle*>(TrkStripItr()))
00627 {
00628
00629 TIter digitrTrkXTalk = TrkStrip->GetDaughterIterator();
00630 while(CandDeMuxDigitHandle* TrkDigit = dynamic_cast<CandDeMuxDigitHandle*>(digitrTrkXTalk()))
00631 {
00632
00633 if(int(TrkStrip->GetPlaneView())==2 && (TrkDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00634 TMarker tmpmUTrk(TrkStrip->GetZPos(), TrkStrip->GetTPos(), 24);
00635 tmpmUTrk.SetMarkerColor(4);
00636 fThisTrackUZ.push_back(tmpmUTrk);
00637 }
00638
00639
00640 else if(int(TrkStrip->GetPlaneView())==3 && (TrkDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00641 TMarker tmpmVTrk(TrkStrip->GetZPos(), TrkStrip->GetTPos(), 24);
00642 tmpmVTrk.SetMarkerColor(4);
00643 fThisTrackVZ.push_back(tmpmVTrk);
00644 }
00645
00646 if(TrkStrip->GetZPos() > fMaxZ) fMaxZ=TrkStrip->GetZPos();
00647 if(TrkStrip->GetZPos() < fMinZ) fMinZ=TrkStrip->GetZPos();
00648
00649 if(TrkStrip->GetTPos() > fMaxUorV) fMaxUorV=TrkStrip->GetTPos();
00650 if(TrkStrip->GetTPos() < fMinUorV) fMinUorV=TrkStrip->GetTPos();
00651
00652 }
00653 digitrTrkXTalk.Reset();
00654
00655 }
00656 TrkStripItr.Reset();
00657
00658 fUZTrackMarker.push_back(fThisTrackUZ);
00659 fVZTrackMarker.push_back(fThisTrackVZ);
00660 }
00661 TrkItr.Reset();
00662
00663 if(debug) {cout << "Number of simple tracks: " << numTrk << endl;}
00664 }
00665 }
00667
00668
00669
00670
00672 void FitTrackCamAnalysisModule::FittedTrackSection()
00673 {
00674 vector<TMarker> fThisFitTrackUZ;
00675 vector<TMarker> fThisFitTrackVZ;
00676 int numFitTrk=0;
00677 CandFitTrackListHandle* fit_track_list = 0;
00678
00679
00680 fit_track_list = dynamic_cast<CandFitTrackListHandle*>
00681 (candrec->FindCandHandle("CandFitTrackListHandle",fListInFitTrk.Data()));
00682
00683 if(!fit_track_list) {
00684 MSG("FitTrack", Msg::kWarning) << " Failed to Find " << fListInFitTrk.Data() << endl;
00685 NumFittedTracks=0;
00686 FitTrackLength=0;
00687 }
00688
00689 else {
00690 assert(fit_track_list);
00691 if(fit_track_list->GetNDaughters()<1) {MSG("FitTrack", Msg::kWarning) << "FitTracklist was empty... " << endl; }
00692
00693
00694 TIter FitTrkItr = fit_track_list->GetDaughterIterator();
00695 while(CandFitTrackCamHandle* FitTrk = dynamic_cast<CandFitTrackCamHandle*>(FitTrkItr()))
00696 {
00697 numFitTrk++;
00698
00700
00701 bool EndContained=false; bool VtxContained=false;
00702
00703 if( fabs(FitTrk->GetEndU())<3.5 && fabs(FitTrk->GetEndV())<3.5
00704 && fabs( pow(0.5,0.5)*(FitTrk->GetEndU()-FitTrk->GetEndV()) )<3.5
00705 && fabs( pow(0.5,0.5)*(FitTrk->GetEndU()+FitTrk->GetEndV()) )<3.5
00706
00707 && fabs( pow( pow(FitTrk->GetEndU(),2) + pow(FitTrk->GetEndV(),2),0.5) )>.4
00708
00709 && (FitTrk->GetTermPlane())<480 && (FitTrk->GetTermPlane())>5
00710
00711 && ( (FitTrk->GetTermPlane())>254 || (FitTrk->GetTermPlane())<243 ) )
00712
00713 {EndContained=true;}
00714
00715 if( fabs(FitTrk->GetVtxU())<3.5 && fabs(FitTrk->GetVtxV())<3.5
00716 && fabs( pow(0.5,0.5)*(FitTrk->GetVtxU()-FitTrk->GetVtxV()) )<3.5
00717 && fabs( pow(0.5,0.5)*(FitTrk->GetVtxU()+FitTrk->GetVtxV()) )<3.5
00718
00719 && fabs( pow( pow(FitTrk->GetVtxU(),2) + pow(FitTrk->GetVtxV(),2),0.5) )>.4
00720
00721 && (FitTrk->GetVtxPlane())<480 && (FitTrk->GetVtxPlane())>5
00722
00723 && ( (FitTrk->GetVtxPlane())>254 || (FitTrk->GetVtxPlane())<243 ) )
00724
00725 {VtxContained=true;}
00726
00727 if(EndContained==true && VtxContained==true) {FDFullyContained=1;}
00728 else {FDFullyContained=0;}
00730
00731
00732 TIter FitTrkStripItr = FitTrk->GetDaughterIterator();
00733 while(CandStripHandle* FitTrkStrip = dynamic_cast<CandStripHandle*>(FitTrkStripItr()))
00734 {
00735
00736 TIter digitrFitTrkXTalk = FitTrkStrip->GetDaughterIterator();
00737 while(CandDeMuxDigitHandle* FitTrkDigit = dynamic_cast<CandDeMuxDigitHandle*>(digitrFitTrkXTalk()))
00738 {
00739
00740 if(int(FitTrkStrip->GetPlaneView())==2 && (FitTrkDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00741 TMarker tmpmUFitTrk(FitTrkStrip->GetZPos(), FitTrkStrip->GetTPos(), 23+numFitTrk);
00742 tmpmUFitTrk.SetMarkerColor(2);
00743 fThisFitTrackUZ.push_back(tmpmUFitTrk);
00744 }
00745
00746
00747 else if(int(FitTrkStrip->GetPlaneView())==3 && (FitTrkDigit->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00748 TMarker tmpmVFitTrk(FitTrkStrip->GetZPos(), FitTrkStrip->GetTPos(), 23+numFitTrk);
00749 tmpmVFitTrk.SetMarkerColor(2);
00750 fThisFitTrackVZ.push_back(tmpmVFitTrk);
00751 }
00752
00753 if(FitTrkStrip->GetZPos() > fMaxZ) fMaxZ=FitTrkStrip->GetZPos();
00754 if(FitTrkStrip->GetZPos() < fMinZ) fMinZ=FitTrkStrip->GetZPos();
00755
00756 if(FitTrkStrip->GetTPos() > fMaxUorV) fMaxUorV=FitTrkStrip->GetTPos();
00757 if(FitTrkStrip->GetTPos() < fMinUorV) fMinUorV=FitTrkStrip->GetTPos();
00758
00759 if(FitTrkStrip->GetPlane() > fFitEndPlane) fFitEndPlane=FitTrkStrip->GetPlane();
00760 if(FitTrkStrip->GetPlane() < fFitVtxPlane) fFitVtxPlane=FitTrkStrip->GetPlane();
00761 }
00762 digitrFitTrkXTalk.Reset();
00763
00764 }
00765 FitTrkStripItr.Reset();
00766
00767
00768
00770 if(fit_track_list->GetNDaughters()==1) {
00771 Pass=FitTrk->GetPass();
00772
00773 RecoMomCurve=FitTrk->GetMomentumCurve();
00774 if(FitTrk->GetMomentumCurve()!=0) {RecoQP=FitTrk->GetEMCharge()/FitTrk->GetMomentumCurve();}
00775 QPVtxError=FitTrk->GetVtxQPError();
00776 RecoTime=FitTrk->GetCPUTime();
00777
00778 RecoMomRange=FitTrk->GetMomentumRange();
00779
00780 NTrackStrip=FitTrk->GetNTrackStrip();
00781 NTrackDigit=FitTrk->GetNTrackDigit();
00782
00783 Chi2=FitTrk->GetChi2();
00784 NDOF=FitTrk->GetNDOF();
00785 NIterate=FitTrk->GetNIterate();
00786 NSwimFail=FitTrk->GetNSwimFail();
00787
00788 TimeSlope=FitTrk->GetTimeSlope();
00789 TimeOffset=FitTrk->GetTimeOffset();
00790 VtxT=FitTrk->GetVtxT();
00791 EndT=FitTrk->GetEndT();
00792 TimeFitChi2=FitTrk->GetTimeFitChi2();
00793 NTimeFitDigit=FitTrk->GetNTimeFitDigit();
00794 TimeForwardFitRMS=FitTrk->GetTimeForwardFitRMS();
00795 TimeForwardFitNDOF=FitTrk->GetTimeForwardFitNDOF();
00796 TimeBackwardFitRMS=FitTrk->GetTimeBackwardFitRMS();
00797 TimeBackwardFitNDOF=FitTrk->GetTimeBackwardFitNDOF();
00798
00799 VtxU=FitTrk->GetVtxU();
00800 VtxV=FitTrk->GetVtxV();
00801 VtxZ=FitTrk->GetVtxZ();
00802 VtxPlane=FitTrk->GetVtxPlane();
00803
00804 VtxDirCosU=FitTrk->GetVtxDirCosU();
00805 VtxDirCosV=FitTrk->GetVtxDirCosV();
00806 VtxDirCosZ=FitTrk->GetVtxDirCosZ();
00807
00808 VtxUError=FitTrk->GetVtxUError();
00809 VtxVError=FitTrk->GetVtxVError();
00810 VtxdUError=FitTrk->GetVtxdUError();
00811 VtxdVError=FitTrk->GetVtxdVError();
00812
00813 EndU=FitTrk->GetEndU();
00814 EndV=FitTrk->GetEndV();
00815 EndZ=FitTrk->GetEndZ();
00816 EndPlane=FitTrk->GetTermPlane();
00817 EndQP=FitTrk->GetEndQP();
00818
00819 EndDirCosU=FitTrk->GetEndDirCosU();
00820 EndDirCosV=FitTrk->GetEndDirCosV();
00821 EndDirCosZ=FitTrk->GetEndDirCosZ();
00822
00823 EndUError=FitTrk->GetEndUError();
00824 EndVError=FitTrk->GetEndVError();
00825 EnddUError=FitTrk->GetEnddUError();
00826 EnddVError=FitTrk->GetEnddVError();
00827 EndQPError=FitTrk->GetEndQPError();
00828
00829 Range=FitTrk->GetRange();
00830 dS=FitTrk->GetdS();
00831
00832 VtxTrace=FitTrk->GetVtxTrace();
00833 VtxTraceZ=FitTrk->GetVtxTraceZ();
00834 EndTrace=FitTrk->GetEndTrace();
00835 EndTraceZ=FitTrk->GetEndTraceZ();
00836
00837 FitTrackLength=fFitEndPlane-fFitVtxPlane;
00838
00839 cout << "Cam Fitter charge * momentum result: " << FitTrk->GetEMCharge()*FitTrk->GetMomentumCurve() << endl;
00840 cout << "Cam Fitter q/p vertex error: " << FitTrk->GetVtxQPError() << endl;
00841 cout << "Cam Fitter CPU time: " << FitTrk->GetCPUTime() << endl;
00842 }
00843 else {
00844 cout << "Multiple tracks!" << endl;
00845 cout << "Cam Fitter charge * momentum result: " << FitTrk->GetEMCharge()*FitTrk->GetMomentumCurve() << endl;
00846 cout << "Cam Fitter q/p vertex error: " << FitTrk->GetVtxQPError() << endl;
00847 cout << "Cam Fitter CPU time: " << FitTrk->GetCPUTime() << endl;
00848 }
00850
00851 fUZFitTrackMarker.push_back(fThisFitTrackUZ);
00852 fVZFitTrackMarker.push_back(fThisFitTrackVZ);
00853 }
00854 FitTrkItr.Reset();
00855
00856 if(debug) {
00857 cout << "Number of fitted tracks: " << numFitTrk << endl;
00858 cout << "Fit track length: " << FitTrackLength << endl;}
00859
00860 NumFittedTracks=numFitTrk;
00861 }
00862 }
00864
00865
00866
00868 void FitTrackCamAnalysisModule::TruthSection(SimSnarlRecord* simrec)
00869 {
00870 double fEmu=0;
00871
00872 TObjArray arr(simrec->GetComponents());
00873 TIter iter(arr.MakeIterator());
00874 while(TObject* tob = (TObject*)(iter()))
00875 {
00876 if(tob->GetName()==TString("REROOT_NeuKin"))
00877 {
00878 REROOT_NeuKin* nukin = dynamic_cast<REROOT_NeuKin*>(tob);
00879 fEmu = nukin->P4Mu1()[3];
00880 }
00881 }
00882
00883 cout << "--- True muon momentum * charge: " << fEmu << endl;
00884
00885
00886
00887 CandFitTrackListHandle* fit_track_list = dynamic_cast<CandFitTrackListHandle*>
00888 (candrec->FindCandHandle("CandFitTrackListHandle",fListInFitTrk.Data()));
00889
00890
00891
00893 if(fit_track_list) {
00894 if(fit_track_list->GetNDaughters()==1) {
00895 if(fEmu!=0.) {TrueQP=1./fEmu;}
00896 else{TrueQP=-999;}
00897 TrueMom=fabs(fEmu);
00898 }
00899 else {TrueQP=-999; TrueMom=-999;}
00900 }
00901 else {TrueQP=-999; TrueMom=-999;}
00903
00904
00905
00907 if(fit_track_list) {
00908 if(fEmu!=0. && fit_track_list->GetNDaughters()==1) {
00909 cout << "--- (Reco - Truth) / Truth: " << (RecoMomCurve-TrueMom)/ TrueMom << endl;
00910 }
00911 }
00913
00914 }
00916
00917
00918
00920 void FitTrackCamAnalysisModule::TruthSliceSection(Truthifier* mytruth)
00921 {
00922 int numTrueMuonDigits=0;
00923 int numTrueMuonStrips=0;
00924
00925 int numSliceStrips=0;
00926
00927 vector<TMarker> fThisSliceUZTruth;
00928 vector<TMarker> fThisSliceVZTruth;
00929
00930 vector<TMarker> fThisTrackUZTruth;
00931 vector<TMarker> fThisTrackVZTruth;
00932
00933
00934 CandSliceListHandle* slice_list = dynamic_cast<CandSliceListHandle*>
00935 (candrec->FindCandHandle("CandSliceListHandle",fListInSlc.Data()));
00936
00937 if(!slice_list) {MSG("FitTrack", Msg::kWarning) << " Failed to Find " << fListInSlc.Data() << endl;}
00938
00939 else {
00940 assert(slice_list);
00941 if(slice_list->GetNDaughters()<1) {MSG("FitTrack", Msg::kWarning) << "SliceList was empty... " << endl; }
00942
00943 TIter SlcItrTruth = slice_list->GetDaughterIterator();
00944 while(CandSliceHandle* SlcTruth = dynamic_cast<CandSliceHandle*>(SlcItrTruth()))
00945 {
00946
00947 TIter SlcStripItrTruth = SlcTruth->GetDaughterIterator();
00948 while(CandStripHandle* SlcStripTruth = dynamic_cast<CandStripHandle*>(SlcStripItrTruth()))
00949 {
00950 numSliceStrips++;
00951
00952 TIter digitrTruth = SlcStripTruth->GetDaughterIterator();
00953 while(CandDeMuxDigitHandle* SlcDigitTruth = dynamic_cast<CandDeMuxDigitHandle*>(digitrTruth()))
00954 {
00955
00956 if(int(SlcStripTruth->GetPlaneView())==2 && (SlcDigitTruth->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00957 TMarker tmpmUSlcTruth(SlcStripTruth->GetZPos(), SlcStripTruth->GetTPos(), 20);
00958 tmpmUSlcTruth.SetMarkerColor(3);
00959 tmpmUSlcTruth.SetMarkerSize(0.8);
00960 fThisSliceUZTruth.push_back(tmpmUSlcTruth);
00961 }
00962
00963
00964 else if(int(SlcStripTruth->GetPlaneView())==3 && (SlcDigitTruth->GetDeMuxDigitFlagWord()!=1 || CareAboutXTalk)) {
00965 TMarker tmpmVSlcTruth(SlcStripTruth->GetZPos(), SlcStripTruth->GetTPos(), 20);
00966 tmpmVSlcTruth.SetMarkerColor(3);
00967 tmpmVSlcTruth.SetMarkerSize(0.8);
00968 fThisSliceVZTruth.push_back(tmpmVSlcTruth);
00969 }
00970
00971
00972
00973 if ( (mytruth->IsDigitFromParticle(13,*SlcDigitTruth)
00974 || mytruth->IsDigitFromParticle(-13,*SlcDigitTruth))
00975
00976 && mytruth->DigitIsOnlyCrosstalk(SlcDigitTruth)==0 )
00977 {
00978
00979 numTrueMuonDigits++;
00980
00981
00982 if(int(SlcStripTruth->GetPlaneView())==2) {
00983 TMarker tmpmUTrkTruth(SlcStripTruth->GetZPos(), SlcStripTruth->GetTPos(), 30);
00984 tmpmUTrkTruth.SetMarkerColor(2);
00985 fThisTrackUZTruth.push_back(tmpmUTrkTruth);
00986 }
00987
00988
00989 else if(int(SlcStripTruth->GetPlaneView())==3) {
00990 TMarker tmpmVTrkTruth(SlcStripTruth->GetZPos(), SlcStripTruth->GetTPos(), 30);
00991 tmpmVTrkTruth.SetMarkerColor(2);
00992 fThisTrackVZTruth.push_back(tmpmVTrkTruth);
00993 }
00994
00995 if(SlcStripTruth->GetPlane() > fTrueMaxPlane) {fTrueMaxPlane=SlcStripTruth->GetPlane();}
00996 if(SlcStripTruth->GetPlane() < fTrueMinPlane) {fTrueMinPlane=SlcStripTruth->GetPlane();}
00997 }
00998 }
00999 digitrTruth.Reset();
01000
01001 if(numTrueMuonDigits>0) {numTrueMuonStrips++;}
01002 numTrueMuonDigits=0;
01003
01004 }
01005 SlcStripItrTruth.Reset();
01006
01007 if(debug) {
01008 cout << "Total no. of hit strips: " << numSliceStrips << endl;
01009 cout << "No. of true muon hit strips: " << numTrueMuonStrips << endl;}
01010
01011
01012
01014 TotalStripsInSnarl=numSliceStrips;
01015 TrueMuonStrips=numTrueMuonStrips;
01016 if(TrueMuonStrips!=0) {TrueTrackLength=fTrueMaxPlane-fTrueMinPlane;}
01017 else {TrueTrackLength=0;}
01019
01020 if(debug) {cout << "True track length: " << TrueTrackLength << endl;}
01021
01022
01023 fUZSliceMarkerTruth.push_back(fThisSliceUZTruth);
01024 fVZSliceMarkerTruth.push_back(fThisSliceVZTruth);
01025
01026 fUZTrackMarkerTruth.push_back(fThisTrackUZTruth);
01027 fVZTrackMarkerTruth.push_back(fThisTrackVZTruth);
01028 }
01029 }
01030 }
01032
01033
01034
01036 void FitTrackCamAnalysisModule::EfficiencySection(Truthifier* mytruth)
01037 {
01038 int numFitTrkStrips=0;
01039 int numTrueMuonDigits=0;
01040 int numFitTrkTruthAgree=0;
01041
01042
01043 CandFitTrackListHandle* fit_track_list = dynamic_cast<CandFitTrackListHandle*>(candrec->FindCandHandle("CandFitTrackListHandle",
01044 fListInFitTrk.Data()));
01045 if(!fit_track_list) {
01046 MSG("FitTrack", Msg::kWarning) << " Failed to Find " << fListInFitTrk.Data() << endl;
01047 FitTrackStrips=0;
01048 FitAndTruthAgree=0;
01049 }
01050
01051 else {
01052 assert(fit_track_list);
01053 if(fit_track_list->GetNDaughters()<1) {MSG("FitTrack", Msg::kWarning) << "FitTracklist was empty... " << endl; }
01054
01055
01056 TIter FitTrkItr = fit_track_list->GetDaughterIterator();
01057 while(CandFitTrackHandle* FitTrk = dynamic_cast<CandFitTrackHandle*>(FitTrkItr()))
01058 {
01059
01060 TIter FitTrkStripItr = FitTrk->GetDaughterIterator();
01061 while(CandStripHandle* FitTrkStrip = dynamic_cast<CandStripHandle*>(FitTrkStripItr()))
01062 {
01063 numFitTrkStrips++;
01064
01065 TIter digitrFitTrkXTalk = FitTrkStrip->GetDaughterIterator();
01066 while(CandDeMuxDigitHandle* FitTrkDigit = dynamic_cast<CandDeMuxDigitHandle*>(digitrFitTrkXTalk()))
01067 {
01068 if ( ( mytruth->IsDigitFromParticle(13,*FitTrkDigit)
01069 || mytruth->IsDigitFromParticle(-13,*FitTrkDigit) )
01070
01071 && mytruth->DigitIsOnlyCrosstalk(FitTrkDigit)==0 )
01072 {
01073
01074 numTrueMuonDigits++;
01075 }
01076 }
01077 digitrFitTrkXTalk.Reset();
01078
01079 if(numTrueMuonDigits>0) {numFitTrkTruthAgree++;}
01080 numTrueMuonDigits=0;
01081
01082 }
01083 FitTrkStripItr.Reset();
01084
01085 if(debug) {
01086 cout << "No. of fit track hit strips: " << numFitTrkStrips << endl;
01087 cout << "No. of fit track hits that agree with true muon hits: " << numFitTrkTruthAgree << endl;}
01088
01089
01090
01092 if(fit_track_list->GetNDaughters()==1) {
01093 FitTrackStrips=numFitTrkStrips;
01094 FitAndTruthAgree=numFitTrkTruthAgree;
01095 }
01096 else {
01097 FitTrackStrips=-999;
01098 FitAndTruthAgree=-999;
01099 }
01101
01102 }
01103 FitTrkItr.Reset();
01104 }
01105 }
01107
01108
01109
01111 void FitTrackCamAnalysisModule::Draw()
01112 {
01113
01115 if(fUZSliceMarker.size() > 0) {
01116 fUZPad->cd();
01117 fUZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01118 fUZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01119 for(unsigned int j=0; j<fUZSliceMarker.size(); ++j) {
01120 if (fUZSliceMarker[j].size() > 0) {
01121 for(unsigned int i=0; i<fUZSliceMarker[j].size(); ++i) {
01122 fUZSliceMarker[j][i].Draw();
01123 }
01124 }
01125 }
01126 }
01127
01128 if(fVZSliceMarker.size() > 0) {
01129 fVZPad->cd();
01130 fVZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01131 fVZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01132 for(unsigned int j=0; j<fVZSliceMarker.size(); ++j) {
01133 if (fVZSliceMarker[j].size() > 0) {
01134 for(unsigned int i=0; i<fVZSliceMarker[j].size(); ++i) {
01135 fVZSliceMarker[j][i].Draw();
01136 }
01137 }
01138 }
01139 }
01141
01142
01143
01145 if (fUZShowerMarker.size() > 0) {
01146 fUZPad->cd();
01147 fUZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01148 fUZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01149 for(unsigned int j=0; j<fUZShowerMarker.size(); ++j) {
01150 if (fUZShowerMarker[j].size() > 0) {
01151 for(unsigned int i=0; i<fUZShowerMarker[j].size(); ++i) {
01152 fUZShowerMarker[j][i].Draw();
01153 }
01154 }
01155 }
01156 }
01157
01158 if (fVZShowerMarker.size() > 0) {
01159 fVZPad->cd();
01160 fVZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01161 fVZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01162 for(unsigned int j=0; j<fVZShowerMarker.size(); ++j) {
01163 if (fVZShowerMarker[j].size() > 0) {
01164 for(unsigned int i=0; i<fVZShowerMarker[j].size(); ++i) {
01165 fVZShowerMarker[j][i].Draw();
01166 }
01167 }
01168 }
01169 }
01171
01172
01173
01175 if (fUZTrackMarker.size() > 0) {
01176 fUZPad->cd();
01177 fUZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01178 fUZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01179 for(unsigned int j=0; j<fUZTrackMarker.size(); ++j) {
01180 if (fUZTrackMarker[j].size() > 0) {
01181 for(unsigned int i=0; i<fUZTrackMarker[j].size(); ++i) {
01182 fUZTrackMarker[j][i].Draw();
01183 }
01184 }
01185 }
01186 }
01187
01188 if (fVZTrackMarker.size() > 0) {
01189 fVZPad->cd();
01190 fVZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01191 fVZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01192 for(unsigned int j=0; j<fVZTrackMarker.size(); ++j) {
01193 if (fVZTrackMarker[j].size() > 0) {
01194 for(unsigned int i=0; i<fVZTrackMarker[j].size(); ++i) {
01195 fVZTrackMarker[j][i].Draw();
01196 }
01197 }
01198 }
01199 }
01201
01202
01203
01204
01206 if (fUZFitTrackMarker.size() > 0) {
01207 fUZPad->cd();
01208 fUZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01209 fUZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01210 for(unsigned int j=0; j<fUZFitTrackMarker.size(); ++j) {
01211 if (fUZFitTrackMarker[j].size() > 0) {
01212 for(unsigned int i=0; i<fUZFitTrackMarker[j].size(); ++i) {
01213 fUZFitTrackMarker[j][i].Draw();
01214 }
01215 }
01216 }
01217 }
01218
01219 if (fVZFitTrackMarker.size() > 0) {
01220 fVZPad->cd();
01221 fVZAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01222 fVZAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01223 for(unsigned int j=0; j<fVZFitTrackMarker.size(); ++j) {
01224 if (fVZFitTrackMarker[j].size() > 0) {
01225 for(unsigned int i=0; i<fVZFitTrackMarker[j].size(); ++i) {
01226 fVZFitTrackMarker[j][i].Draw();
01227 }
01228 }
01229 }
01230 }
01232
01233
01234
01236 if (isMC==1) {
01237
01238
01239 if(fUZSliceMarkerTruth.size() > 0) {
01240 fUZMCPad->cd();
01241 fUZMCAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01242 fUZMCAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01243 for(unsigned int j=0; j<fUZSliceMarkerTruth.size(); ++j) {
01244 if (fUZSliceMarkerTruth[j].size() > 0) {
01245 for(unsigned int i=0; i<fUZSliceMarkerTruth[j].size(); ++i) {
01246 fUZSliceMarkerTruth[j][i].Draw();
01247 }
01248 }
01249 }
01250 }
01251
01252 if(fVZSliceMarkerTruth.size() > 0) {
01253 fVZMCPad->cd();
01254 fVZMCAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01255 fVZMCAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01256 for(unsigned int j=0; j<fVZSliceMarkerTruth.size(); ++j) {
01257 if (fVZSliceMarkerTruth[j].size() > 0) {
01258 for(unsigned int i=0; i<fVZSliceMarkerTruth[j].size(); ++i) {
01259 fVZSliceMarkerTruth[j][i].Draw();
01260 }
01261 }
01262 }
01263 }
01264
01265
01266 if(fUZTrackMarkerTruth.size() > 0) {
01267 fUZMCPad->cd();
01268 fUZMCAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01269 fUZMCAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01270 for(unsigned int j=0; j<fUZTrackMarkerTruth.size(); ++j) {
01271 if (fUZTrackMarkerTruth[j].size() > 0) {
01272 for(unsigned int i=0; i<fUZTrackMarkerTruth[j].size(); ++i) {
01273 fUZTrackMarkerTruth[j][i].Draw();
01274 }
01275 }
01276 }
01277 }
01278
01279 if(fVZTrackMarkerTruth.size() > 0) {
01280 fVZMCPad->cd();
01281 fVZMCAxis->GetXaxis()->SetRangeUser(fMinZ-0.1, fMaxZ+0.1);
01282 fVZMCAxis->GetYaxis()->SetRangeUser(fMinUorV-0.4, fMaxUorV+0.4);
01283 for(unsigned int j=0; j<fVZTrackMarkerTruth.size(); ++j) {
01284 if (fVZTrackMarkerTruth[j].size() > 0) {
01285 for(unsigned int i=0; i<fVZTrackMarkerTruth[j].size(); ++i) {
01286 fVZTrackMarkerTruth[j][i].Draw();
01287 }
01288 }
01289 }
01290 }
01291
01292 }
01294
01295 fTrackCanvas->cd();
01296 fTrackCanvas->Update();
01297 }
01299
01300
01302 void FitTrackCamAnalysisModule::Pause()
01303 {
01304 cout << "Press return to continue" << endl;
01305
01306 int key = 0;
01307 while(1){
01308 gSystem->ProcessEvents();
01309 fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
01310 key = getchar();
01311 if(key=='\n') break;
01312 usleep(1000);
01313 }
01314 }
01316
01317
01318
01320 void FitTrackCamAnalysisModule::CleanUp()
01321 {
01322 fUZSliceMarker.clear();
01323 fVZSliceMarker.clear();
01324
01325 fUZShowerMarker.clear();
01326 fVZShowerMarker.clear();
01327
01328 fUZTrackMarker.clear();
01329 fVZTrackMarker.clear();
01330
01331 fUZFitTrackMarker.clear();
01332 fVZFitTrackMarker.clear();
01333
01334 fUZSliceMarkerTruth.clear();
01335 fVZSliceMarkerTruth.clear();
01336
01337 fUZTrackMarkerTruth.clear();
01338 fVZTrackMarkerTruth.clear();
01339 }
01341
01342
01343
01345 const Registry& FitTrackCamAnalysisModule::DefaultConfig() const
01346 {
01347
01348
01349
01350 static Registry r;
01351
01352
01353 std::string name = this->GetName();
01354 name += ".config.default";
01355 r.SetName(name.c_str());
01356
01357
01358 r.UnLockValues();
01359 r.Set("NameSlcListIn","CandSliceList");
01360 r.Set("NameShwListIn","CandShowerList");
01361 r.Set("NameTrkListIn","CandTrackSRList");
01362 r.Set("NameFitTrkListIn","CandFitTrackCamList");
01363 r.Set("NameFileOut","FitTrackCamAna.root");
01364 r.LockValues();
01365
01366 return r;
01367 }
01369
01370
01371
01373 void FitTrackCamAnalysisModule::Config(const Registry& r)
01374 {
01375
01376
01377
01378 const char* tmps;
01379 if (r.Get("NameSlcListIn",tmps)) { fListInSlc = tmps; }
01380 if (r.Get("NameShwListIn",tmps)) { fListInShw = tmps; }
01381 if (r.Get("NameTrkListIn",tmps)) { fListInTrk = tmps; }
01382 if (r.Get("NameFitTrkListIn",tmps)) { fListInFitTrk = tmps; }
01383 if (r.Get("NameFileOut",tmps)) { fFileName = tmps; }
01384 }