/////////////////////////////////////////////////////////////////////////////// // // Summary of fPrintLevel values: // ---------------------- // fPrintLevel = 1: print Muon block for all the events /////////////////////////////////////////////////////////////////////////////// #include "TF1.h" #include "TCanvas.h" #include "TPad.h" #include "TText.h" #include "Stntuple/obj/TStnHeaderBlock.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "Stntuple/obj/TStnDBManager.hh" #include "Stntuple/alg/TStntuple.hh" #include "Stntuple/obj/TStnTriggerTable.hh" #include "Stntuple/obj/TStnTrigger.hh" #include "Stntuple/loop/TStnAna.hh" #include "Stntuple/geom/TTrajectoryPoint.hh" #include "Stntuple/geom/TSimpleExtrapolator.hh" #include "TWmunuMonModule.hh" ClassImp(TWmunuMonModule) //_____________________________________________________________________________ TWmunuMonModule::TWmunuMonModule(const char* name, const char* title): TStnModule(name,title) { fMuonID = new TStnMuonID("TWmunuMonModule"); } //_____________________________________________________________________________ TWmunuMonModule::~TWmunuMonModule() { delete fMuonID; } //_____________________________________________________________________________ int TWmunuMonModule::BeginJob() { // register the data blocks and book histograms RegisterDataBlock("MuonBlock" , "TStnMuonBlock" , &fMuonBlock); RegisterDataBlock("TriggerBlock" , "TStnTriggerBlock" , &fTriggerBlock); RegisterDataBlock("TrackBlock" , "TStnTrackBlock" , &fTrackBlock); RegisterDataBlock("MetBlock" , "TStnMetBlock" , &fMetBlock); BookHistograms(); return 0; } //_____________________________________________________________________________ int TWmunuMonModule::BeginRun() { int rn = GetHeaderBlock()->RunNumber(); TStntuple::Init(rn); TStntuple::InitListOfL3Triggers(this); return 0; } //_____________________________________________________________________________ void TWmunuMonModule::FillEScaleHistograms(EScaleHist_t& Hist, TStnMuon* Mu) { if (Mu->HasCmxStub()) { Hist.fEmEnergyCMX->Fill(Mu->EmEnergy()); Hist.fHadEnergyCMX->Fill(Mu->HadEnergy()); } else { Hist.fEmEnergyCMUP->Fill(Mu->EmEnergy()); Hist.fHadEnergyCMUP->Fill(Mu->HadEnergy()); } } //_____________________________________________________________________________ int TWmunuMonModule::CalculateMissingParameters(TStnMuon* Muo) { //----------------------------------------------------------------------------- // reestablish track pointer //----------------------------------------------------------------------------- TStnTrack* trk; int it; it = Muo->TrackNumber(); if (it >= 0) trk = fTrackBlock->Track(it); else { GetHeaderBlock()->Print("ERROR: muon w/o a track"); trk = 0; } Muo->SetTrack(trk); return 0; } //_____________________________________________________________________________ int TWmunuMonModule::Event(int ientry) { Int_t nmu, id_word; //----------------------------------------------------------------------------- // check the trigger path //----------------------------------------------------------------------------- fTriggerBlock->GetEntry(ientry); int passed = TStntuple::CheckL3TriggerPath(fTriggerBlock,fListOfL3Triggers); //----------------------------------------------------------------------------- // always fill histogram for the run number //----------------------------------------------------------------------------- fHist.fRunNumber->Fill(GetHeaderBlock()->RunNumber()); fHist.fFilterResult->Fill(passed); if (! passed) return 0; //----------------------------------------------------------------------------- // read the necessary data for W's //----------------------------------------------------------------------------- fMuonBlock->GetEntry (ientry); fTrackBlock->GetEntry(ientry); fMetBlock->GetEntry (ientry); //select good muons nmu = fMuonBlock->NMuons(); for (int i=0; iMuon(i); CalculateMissingParameters(mu); id_word = fMuonID->IDWord(mu); if (id_word == 0) { FillEScaleHistograms(fHist.fEScaleHist[0], mu); } } TVector2 met, corr_met; met.Set(fMetBlock->MetX(1),fMetBlock->MetY(1)); TStntuple::CorrectMetForMuons(fMuonBlock,fMuonID,&met,&corr_met,0); if (corr_met.Mod() > 20.) { for (int i=0; iMuon(i); id_word = fMuonID->IDWord(mu); if (id_word == 0) { FillEScaleHistograms(fHist.fEScaleHist[0], mu); } } } return 0; } //_____________________________________________________________________________ int TWmunuMonModule::EndJob() { printf("----- end job: ---- %s\n",GetName()); return 0; }