/** * \file CbmMuonAnalysis.cxx **/ #include "CbmMuonAnalysis.h" #include "FairRootManager.h" #include "CbmGlobalTrack.h" #include "CbmStsTrack.h" #include "CbmMuchTrack.h" #include "TCanvas.h" #include using std::cout; using std::endl; CbmMuonAnalysis::CbmMuonAnalysis(): FairTask("CbmMuonAnalysis"), fGlobalTracks(NULL), fStsTracks(NULL), fhStsParamFirstMom(NULL) { } CbmMuonAnalysis::~CbmMuonAnalysis() { } InitStatus CbmMuonAnalysis::Init() { ReadDataBranches(); CreateHistograms(); return kSUCCESS; } void CbmMuonAnalysis::Exec( Option_t* option) { Int_t nofGlobalTracks = fGlobalTracks->GetEntriesFast(); // Loop over reconstructed global tracks. for (Int_t iGlobalTrack = 0; iGlobalTrack < nofGlobalTracks; iGlobalTrack++) { // Declare const pointer to CbmGlobalTrack. // Use static_cast to explicitly cast the object returned by TClonesArray::At(). const CbmGlobalTrack* globalTrack = static_cast(fGlobalTracks->At(iGlobalTrack)); // Get index of CbmStsTrack from CbmGlobalTrack. Int_t stsId = globalTrack->GetStsTrackIndex(); if (stsId != -1) { // Declare pointer to CbmStsTrack. // Use C-style type casting with braces (). CbmStsTrack* stsTrack = (CbmStsTrack*)fStsTracks->At(stsId); // Take the first STS track parameters. FairTrackParam* stsParamFirst = stsTrack->GetParamFirst(); // Fill the histogram with inverse Q/p parameter. fhStsParamFirstMom->Fill(1. / stsParamFirst->GetQp()); } } static Int_t nofEvents = 0; cout << "-I- CbmMuonAnalysis::Exec: event: " << nofEvents++ << endl; } void CbmMuonAnalysis::Finish() { DrawHistograms(); WriteHistograms(); } void CbmMuonAnalysis::SetParContainers() { } void CbmMuonAnalysis::ReadDataBranches() { FairRootManager* ioman = FairRootManager::Instance(); if (NULL == ioman) { Fatal("Init","FairRootManager is not instantiated"); } fGlobalTracks = (TClonesArray*) ioman->GetObject("GlobalTrack"); if (NULL == fGlobalTracks) { Fatal("Init","No GlobalTrack array!"); } fStsTracks = (TClonesArray*) ioman->GetObject("StsTrack"); if (NULL == fStsTracks) { Fatal("Init","No StsTrack array!"); } } void CbmMuonAnalysis::CreateHistograms() { fhStsParamFirstMom = new TH1D("hStsParamFirstMom", "hStsParamFirstMom;P [GeV/c]; Entries", 100, -25, 25); } void CbmMuonAnalysis::DrawHistograms() { TCanvas* canvas = new TCanvas("muon_analysis_mom_distribution", "muon_analysis_mom_distribution", 800, 400); canvas->Divide(2, 1); canvas->cd(1); fhStsParamFirstMom->Draw(); } void CbmMuonAnalysis::WriteHistograms() { fhStsParamFirstMom->Write(); } ClassImp(CbmMuonAnalysis)