|
//____________________________________________________________________ // // A module to select events with specific triggers. The module looks // at the triggers _after_ downscaling, that is, the upper byte (8 // bits) of the first triggerword in the event header. The trigger // mask is inclusive. // // // $Id: BrTriggerFilter.cxx,v 1.2 2001/12/14 15:38:54 cholm Exp $ // $Author: cholm $ // $Date: 2001/12/14 15:38:54 $ // $Copyright: (C) 2001 BRAHMS Collaboration <brahmlib@rhic.bnl.gov> // #ifndef ROOT_TDirectory #include "TDirectory.h" #endif #include "BrTriggerFilter.h" #include "BrEvent.h" #include "BrEventHeader.h" #include <iostream.h> //____________________________________________________________________ ClassImp(BrTriggerFilter); //____________________________________________________________________ BrTriggerFilter::BrTriggerFilter() { // Default constructor fTriggerMask = 0; fAllTriggersHisto = 0; fAccTriggersHisto = 0; fProcessedEvents = 0; fAcceptedEvents = 0; SetState(kSetup); } //____________________________________________________________________ BrTriggerFilter::BrTriggerFilter(const Char_t* name, const Char_t* title) : BrModule(name, title) { // Default constructor fTriggerMask = 0; fAllTriggersHisto = 0; fAccTriggersHisto = 0; fProcessedEvents = 0; fAcceptedEvents = 0; SetState(kSetup); } //_______________________________________________________ void BrTriggerFilter::AddTrigger(UInt_t triggerBit) { // Accept events with triggerBit set if (GetState() != kSetup) { Warning("AddTrigger", "must be called before Init"); return; } SetTrigger(triggerBit, kTRUE); } //_______________________________________________________ void BrTriggerFilter::RemoveTrigger(UInt_t triggerBit) { // Reject events with triggerBit set if (GetState() != kSetup) { Warning("RemoveTrigger", "must be called before Init"); return; } SetTrigger(triggerBit, kFALSE); } //_______________________________________________________ void BrTriggerFilter::SetTrigger(UInt_t triggerBit, Bool_t on) { // Accept/Reject events with triggerBit set if (GetState() != kSetup) { Warning("SetTrigger", "must be called before Init"); return; } if (on) SETBIT(fTriggerMask,triggerBit-1); else CLRBIT(fTriggerMask,triggerBit-1); } //_______________________________________________________ Bool_t BrTriggerFilter::GetTrigger(UInt_t triggerBit) const { // Is events with triggerBit Accepted/Rejected return TESTBIT(fTriggerMask,triggerBit-1); } //_______________________________________________________ void BrTriggerFilter::DefineHistograms() { // Define histograms // if (GetState() != kInit) { // Failure("Define Histograms", "must be called after Init"); // return; // } // remember current directory TDirectory* savdir = gDirectory; // Make directory for this module TDirectory* hdir = savdir->mkdir("trigger"); if (!hdir) { Warning("DefineHistograms","could not create histogram subdirectory"); return; } // Change directory to histogram directory hdir->cd(); // Make histograms fAllTriggersHisto = new TH1F("allTrigger", "All Triggers", 8, .5, 8.5); fAccTriggersHisto = new TH1F("accTrigger", "Accepted Triggers", 8, .5, 8.5); // Restore directory gDirectory = savdir; } //_______________________________________________________ void BrTriggerFilter::Init() { // Noting to be done here SetState(kInit); } //_______________________________________________________ void BrTriggerFilter::Begin() { // Nothing to be done here SetState(kBegin); } //_______________________________________________________ void BrTriggerFilter::Event(BrEventNode* input, BrEventNode*) { // Return with status set to kDisaster if the input was note a // BrEvent object, or the trigger mask doesn't fit with the selected // triggers. SetState(kEvent); if (input->IsA() != BrEvent::Class()) { Failure("Event", "input node not an event"); return; } // Cout this event fProcessedEvents++; // Reinterpret as a BrEvent BrEvent* e = (BrEvent*)input; BrEventHeader* header = e->GetEventHeader(); Int_t trigger = header->TriggerWord(1); // Select the upper 8 bits of the trigger word Int_t uppTrigger = trigger >> 8; // Set the status of this module, so that the container may react. if (uppTrigger & fTriggerMask) { if (Verbose() > 10) cout << "Accepting trigger " << uppTrigger << " & " << fTriggerMask << " == " << (uppTrigger & fTriggerMask) << endl; SetStatus(kOk); } else Stop("Event", "not a the right trigger: %d", uppTrigger); if (fStatus == kOk) fAcceptedEvents++; uppTrigger &= fTriggerMask; trigger = trigger >> 8; // Update histograms if (HistOn()) { for (Int_t i = 0; i < 8; i++) { if (TESTBIT(trigger, i)) fAllTriggersHisto->Fill(Float_t(i+1)); if (TESTBIT(uppTrigger, i)) fAccTriggersHisto->Fill(Float_t(i+1)); } } } //_______________________________________________________ void BrTriggerFilter::End() { // Nothing to be done here SetState(kEnd); } //_______________________________________________________ void BrTriggerFilter::Finish() { // Nothing to be done here SetState(kFinish); Print("s"); } //_______________________________________________________ void BrTriggerFilter::Print(Option_t* option) const { // Print info on module // S Print statistics // P Print parameters // See also BrModule::Print(); BrModule::Print(option); TString opt(option); opt.ToLower(); if (opt.Contains("s")) cout << "BrTriggerFilter statistics summary: " << endl << " Processed events: " << fProcessedEvents << endl << " Accepted events: " << fAcceptedEvents << endl; if (opt.Contains("p")) { cout << " Triggers looked for: " << flush; for (Int_t i = 0; i < 8; i++) if (TESTBIT(fTriggerMask, i)) cout << i+1 << " " << flush; cout << endl; } if (opt.Contains("d")) { Print("p"); cout << endl << " Original author: Christian Holm" << endl << " Revisted by: $Author: cholm $" << endl << " Revision date: $Date: 2001/12/14 15:38:54 $" << endl << " Revision number: $Revision: 1.2 $ " << endl << endl << "*************************************************" << endl; } } // // $Log: BrTriggerFilter.cxx,v $ // Revision 1.2 2001/12/14 15:38:54 cholm // Added some statistics output to finish, and some extra doc. // // Revision 1.1.1.1 2001/06/21 14:55:14 hagel // Initial revision of brat2 // // Revision 1.5 2001/03/07 12:13:22 cholm // Changed Info to Print. // // |
||||||
This page automatically generated by script docBrat by Christian Holm |
Copyright ; 2002 BRAHMS Collaboration
<brahmlib@rcf.rhic.bnl.gov>
|