AlgMCDigitList Class Reference

#include <AlgMCDigitList.h>

Inheritance diagram for AlgMCDigitList:

AlgBase List of all members.

Public Member Functions

 AlgMCDigitList ()
virtual ~AlgMCDigitList ()
virtual void RunAlg (AlgConfig &ac, CandHandle &ch, CandContext &cx)
virtual void Trace (const char *c) const

Detailed Description

Definition at line 16 of file AlgMCDigitList.h.


Constructor & Destructor Documentation

AlgMCDigitList::AlgMCDigitList (  ) 

Definition at line 39 of file AlgMCDigitList.cxx.

00040 {
00041 }

AlgMCDigitList::~AlgMCDigitList (  )  [virtual]

Definition at line 44 of file AlgMCDigitList.cxx.

00045 {
00046 }


Member Function Documentation

void AlgMCDigitList::RunAlg ( AlgConfig ac,
CandHandle ch,
CandContext cx 
) [virtual]

Implements AlgBase.

Definition at line 49 of file AlgMCDigitList.cxx.

References CandHandle::AddDaughterLink(), Registry::Get(), AlgFactory::GetAlgHandle(), CandContext::GetCandRecord(), CandContext::GetDataIn(), AlgFactory::GetInstance(), CandContext::GetMom(), RawRecord::GetRawBlockIter(), RecMinos::GetVldContext(), Msg::kDebug, CandDigit::MakeCandidate(), MSG, Munits::nanosecond, CandDigitListHandle::SetAbsTime(), and CandDigitHandle::SetRawDigitIndex().

00051 {
00052    MSG("AlgMCDigitList", Msg::kDebug)
00053                          << "Starting AlgMCDigitList::RunAlg()" << endl;
00054 
00055    assert(cx.GetDataIn());
00056 
00057 // Get VldContext
00058    const VldContext &vldc = *(cx.GetCandRecord()->GetVldContext());
00059 
00060 // Iterate over RawDigitDataBlock or CandDigitList daughters.
00061    if (cx.GetDataIn()->InheritsFrom("RawRecord")) {
00062 
00063 // Set up to iterate over input RawDigit's to fill output CandDigitList.
00064 
00065 // Get Singleton instance of AlgFactory.
00066      MSG("AlgMCDigitList", Msg::kDebug)
00067                << "AlgFactory &af = AlgFactory::GetInstance();" << endl;
00068      AlgFactory &af = AlgFactory::GetInstance();
00069 
00070 // Get correct Algorithm by name from AlgFactory
00071      const char *tmpcs = 0;
00072      const char *mcdigitalgorithm = 0;
00073      const char *mcdigitalgconfig = 0;
00074 
00075      if (ac.Get("MCDigitAlgorithm", tmpcs)) mcdigitalgorithm = tmpcs;
00076      if (ac.Get("MCDigitAlgConfig", tmpcs)) mcdigitalgconfig = tmpcs;
00077 
00078 // Get an AlgHandle to an Algorithm with requested AlgConfig.
00079      MSG("AlgMCDigitList", Msg::kDebug)
00080          << "AlgHandle ah = af.GetAlgHandle("
00081          << mcdigitalgorithm << ", "
00082          << mcdigitalgconfig << ");" << endl;
00083      AlgHandle ah = af.GetAlgHandle(mcdigitalgorithm, mcdigitalgconfig);
00084 
00085      MSG("AlgMCDigitList", Msg::kDebug)
00086                                << "Create CandContext instance." << endl
00087                                     << "CandContext cxx(this);" << endl;
00088      CandContext cxx(this, cx.GetMom());
00089 
00090 // Set CandRecord pointer in CandContext.
00091      MSG("AlgMCDigitList", Msg::kDebug)
00092                     << "Set CandRecord pointer in CandContext." << endl;
00093      cxx.SetCandRecord(cx.GetCandRecord());
00094 
00095 // Iterate over RawRecord's RawDataBlockList to find RawDigitDataBlock.
00096      RawRecord *rr = (RawRecord *) (cx.GetDataIn());
00097      TIter rdbit = rr->GetRawBlockIter();
00098      TObject *tob;
00099      while ((tob = rdbit())) {
00100        if (tob->InheritsFrom("RawDigitDataBlock")) {
00101          RawDigitDataBlock *rdb = (RawDigitDataBlock *) tob;
00102          TIter rdit = rdb->GetDatumIter();
00103          RawDigit *rd;
00104          Int_t rawdigitindex = -1;
00105          while ((rd = (RawDigit *) rdit())) { 
00106            ++rawdigitindex;
00107 
00108            MSG("AlgMCDigitList", Msg::kDebug)
00109              << "Set RawDigit object as CandContext input data." << endl
00110                                         << "cxx.SetDataIn(rd);" << endl;
00111            cxx.SetDataIn(rd);
00112 
00113            MSG("AlgMCDigitList", Msg::kDebug)
00114                   << "Get handle to CandDigit." << endl
00115                   << "cdh = CandDigit::MakeCandidate(ah, cxx);" << endl;
00116 
00117            CandDigitHandle cdh = CandDigit::MakeCandidate(ah, cxx);
00118            cdh.SetRawDigitIndex(rawdigitindex);
00119 
00120            ch.AddDaughterLink(cdh, kFALSE);      // Don't check for dups
00121          }
00122        }
00123      }
00124 
00125 // Set absolute time offset in CandDigitList.
00126 // It's no longer subtracted from CandDigits in AlgDigit.
00127      CandDigitListHandle &cdlh =
00128                                 dynamic_cast<CandDigitListHandle &>(ch);
00129      cdlh.SetAbsTime(((Double_t) vldc.GetTimeStamp().GetNanoSec()) *
00130                                                     Munits::nanosecond);
00131    }
00132 
00133    else if (cx.GetDataIn()->InheritsFrom("TCollection")) {
00134      TCollection *cdl = (TCollection *) cx.GetDataIn();
00135      TIter cdit(cdl);
00136      CandDigitHandle *cdh;
00137      while ((cdh = (CandDigitHandle *) cdit())) { 
00138        ch.AddDaughterLink(*cdh, kFALSE);         // Don't check for dups
00139      }
00140    }
00141 }

void AlgMCDigitList::Trace ( const char *  c  )  const [virtual]

Reimplemented from AlgBase.

Definition at line 144 of file AlgMCDigitList.cxx.

00145 {
00146 }


The documentation for this class was generated from the following files:
Generated on Mon Aug 11 01:05:22 2014 for loon by  doxygen 1.4.7