// -------------------------------------------------------------------------------------- // ----- CbmRichRingFinderTrack macro ----- ----- // ----- Implementation: Simeon Lebedev (salebedev@jinr.ru)----- //------ DrawRichEvent method by Soloviev Alexei --------- void CbmRichRingFindTrack ( Int_t NStart = 0, Int_t NStop = 0) { TStopwatch timer; timer.Start(); // Special libs... gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C"); basiclibs(); gSystem->Load("libGeoBase"); gSystem->Load("libBase"); gSystem->Load("libPassive"); gSystem->Load("libSts"); gSystem->Load("libTof"); gSystem->Load("libRich"); gSystem->Load("libTrd"); gSystem->Load("libEcal"); gSystem->Load("libGen"); // Here we go!!! CbmRunAna *fRun = new CbmRunAna(); CbmRuntimeDb *rtdb = fRun->GetRuntimeDb(); CbmParRootFileIo *io1 = new CbmParRootFileIo(); io1->open("parfiles/testparams.root"); rtdb->setFirstInput(io1); fRun->SetInputFile ( "Electron_hit.root" ); fRun->AddFriend ( "Electron_cp.root" ); fRun->SetOutputFile ( "Electron_ring.root" ); // Ring finder of Simeon Lebedev Track based ring reconstraction CbmRichRingFinderTrack * fTask = new CbmRichRingFinderTrack ( "RichHits2Rings" ); fTask->SetParameters(20,3,6,15); fRun->AddTask ( fTask ); fRun->Init(); if(NStart == 0 && NStop == 0) fRun->Run (); else fRun->Run ( NStart, NStop ); fTask->Finish(); // Here we done!!! timer.Stop(); cout<< "RealTime = "<GetListOfCanvases()->GetSize() ) fCanvas = gPad; else { fCanvas = new TCanvas ( "RICH Canvas", "RICH Event", 640, 640 ); fCanvas->GetCanvasImp()->ShowMenuBar(false); fCanvas->ToggleEventStatus(); fCanvas->SetFillColor ( 10 ); fCanvas->SetGrid(); } fCanvas->Clear(); // I/O manager... CbmRootManager * fManager = CbmRootManager::Instance(); // hits & guidances... TTree * fHitTree = fManager->GetInChain(); TClonesArray * fHitCollection = new TClonesArray ( "CbmRichHit" ); fHitTree->SetBranchAddress ( "RichHit", &fHitCollection ); TClonesArray * fProjectionCollection = new TClonesArray ( "CbmRichRing" ); fHitTree->SetBranchAddress ( "RichProjection", &fProjectionCollection ); fHitTree->GetEntry ( event ); fHitTree->Draw ( "RichHit.fY:RichHit.fX", "", "axis", 1, event ); TMarker fDisplayedHit; fDisplayedHit.SetMarkerStyle ( 21 ); fDisplayedHit.SetMarkerSize ( 0.2 ); fDisplayedHit.SetMarkerColor ( kBlue ); for ( int i = 0; i < fHitCollection->GetEntriesFast(); ++i ) { CbmRichHit * hit = (CbmRichHit*)fHitCollection->At ( i ); fDisplayedHit.DrawMarker ( hit->X(), hit->Y() ); } delete fHitCollection; TMarker fDisplayedProjection; fDisplayedProjection.SetMarkerStyle ( 2 ); fDisplayedProjection.SetMarkerSize ( 0.8 ); fDisplayedProjection.SetMarkerColor ( 28 ); if(drawProjection) { for ( int i = 0; i < fProjectionCollection->GetEntriesFast(); ++i ) { CbmRichRing * projection = (CbmRichRing*)fProjectionCollection->At ( i ); fDisplayedProjection.DrawMarker ( projection->GetCenterX(),projection->GetCenterY() ); } } // * but this approach is too slow! // */ // rings... TTree * fRingTree = fManager->GetOutTree(); TClonesArray * fRingCollection = new TClonesArray ( "CbmRichLightSpot" ); fRingTree->SetBranchAddress ( "RichRing", &fRingCollection ); fRingTree->GetEntry ( event ); TArc fDisplayedRing; fDisplayedRing.SetLineWidth ( 1.5 ); fDisplayedRing.SetLineColor ( kRed ); fDisplayedRing.SetFillStyle ( 0 ); TMarker fDisplayedCenter; fDisplayedCenter.SetMarkerStyle ( 5 ); fDisplayedCenter.SetMarkerSize ( 0.7 ); fDisplayedCenter.SetMarkerColor ( 4 ); printf("\t%d rings found.\n",fRingCollection->GetEntriesFast()); for ( int i = 0; i < fRingCollection->GetEntriesFast(); ++i ) { CbmRichRing * ring = (CbmRichRing*)fRingCollection->At ( i ); // Int_t track_id = ring->GetTrackID(); ring->Print(); fDisplayedRing.DrawArc ( ring->GetCenterX(),ring->GetCenterY(),ring->GetRadius() ); fDisplayedCenter.DrawMarker ( ring->GetCenterX(),ring->GetCenterY() ); } delete fRingCollection; delete fProjectionCollection; // title... char fTitle[32]; sprintf ( fTitle, "RICH Event no.%i", event ); TH2 * fHistogram =(TH2*)gROOT->FindObject ( fHitTree->GetHistogram()->GetName() ); fHistogram->SetTitle ( fTitle ); fHistogram->SetStats ( false ); // saving... if ( save ) { char fFileName[32]; sprintf ( fFileName, "RichEvent-%i.gif", event ); fCanvas->Draw(); fCanvas->Print ( fFileName ); } }