00001
00002
00003
00004
00006
00007 #include <cassert>
00008
00009 #include "Algorithm/AlgFactory.h"
00010 #include "Algorithm/AlgHandle.h"
00011 #include "Algorithm/AlgConfig.h"
00012 #include "Candidate/CandContext.h"
00013 #include "MessageService/MsgService.h"
00014 #include "RecoBase/CandEventListHandle.h"
00015 #include "RecoBase/CandTrackListHandle.h"
00016 #include "RecoBase/CandEventHandle.h"
00017 #include "RecoBase/CandTrackHandle.h"
00018 #include "CandDigit/CandDigitListHandle.h"
00019 #include "MuonRemoval/AlgRmMuList.h"
00020 #include "MuonRemoval/CandRmMu.h"
00021 #include "MuonRemoval/CandRmMu.h"
00022 #include "MuonRemoval/CandRmMuHandle.h"
00023 #include "MuonRemoval/CandRmMuList.h"
00024 #include "MuonRemoval/CandRmMuListHandle.h"
00025 #include "MuonRemoval/SelectEvent.h"
00026
00027 ClassImp(AlgRmMuList)
00028
00029
00030 CVSID("$Id: AlgRmMuList.cxx,v 1.5 2009/12/08 23:04:08 rhatcher Exp $");
00031
00032
00033 AlgRmMuList::AlgRmMuList()
00034 {
00035 }
00036
00037
00038 AlgRmMuList::~AlgRmMuList()
00039 {
00040 }
00041
00042
00043 void AlgRmMuList::RunAlg(AlgConfig &ac, CandHandle &ch,CandContext &cx)
00044 {
00045
00046 MSG("AlgRmMu", Msg::kDebug) << "Starting AlgRmMuList::RunAlg()" << endl;
00047 assert(cx.GetDataIn());
00048 if (!(cx.GetDataIn()->InheritsFrom("TObjArray"))) {
00049 return;
00050 }
00051
00052 Int_t cMaxTrackLikePlanes = 0;
00053 const char *charRmMuAlgConfig = 0;
00054 ac.Get("MaxTrackLikePlanes",cMaxTrackLikePlanes);
00055 ac.Get("RmMuAlgConfig",charRmMuAlgConfig);
00056
00057 AlgFactory &af = AlgFactory::GetInstance();
00058 AlgHandle ah = af.GetAlgHandle("AlgRmMu",charRmMuAlgConfig);
00059 AlgConfig& algconfig = ah.GetAlgConfig();
00060 algconfig.UnLockKeys();
00061 algconfig.UnLockValues();
00062 algconfig.Set("MaxTrackLikePlanes",cMaxTrackLikePlanes);
00063 algconfig.LockKeys();
00064 algconfig.LockValues();
00065
00066 CandEventListHandle *eventlist = 0;
00067 CandTrackListHandle *tracklist = 0;
00068 CandDigitListHandle *digitlist = 0;
00069 const TObjArray *cxin = dynamic_cast<const TObjArray *>(cx.GetDataIn());
00070 for (Int_t i=0; i<=cxin->GetLast(); i++) {
00071 TObject *tobj = cxin->At(i);
00072 if(!tobj) continue;
00073 if(tobj->InheritsFrom("CandEventListHandle")){
00074 eventlist = dynamic_cast<CandEventListHandle*>(tobj);
00075 MSG("RlgRmMu", Msg::kDebug) << "Got EventList" << endl;
00076 }
00077 if(tobj->InheritsFrom("CandTrackListHandle")){
00078 tracklist = dynamic_cast<CandTrackListHandle*>(tobj);
00079 MSG("RlgRmMu", Msg::kDebug) << "Got TrackList" << endl;
00080 }
00081 if(tobj->InheritsFrom("CandDigitListHandle")){
00082 digitlist = dynamic_cast<CandDigitListHandle*>(tobj);
00083 MSG("RlgRmMu", Msg::kDebug) << "Got DigitList" << endl;
00084 }
00085 }
00086
00087 if(eventlist==NULL || digitlist==NULL || tracklist==NULL) {
00088 MSG("AlgRmMu",Msg::kSynopsis) << " Bailing out of Event eventlist = "
00089 << eventlist << " tracklist = " << tracklist
00090 << " digitlist = " << digitlist <<endl;
00091 return;
00092 }
00093
00094 CandContext cxx(this,cx.GetMom());
00095 CandRecord *candrec = cx.GetCandRecord();
00096 assert(candrec);
00097 cxx.SetCandRecord(candrec);
00098
00099 Int_t evtIndex = 0;
00100 CandEventHandleItr eventItr(eventlist->GetDaughterIterator());
00101 while( CandEventHandle *event =
00102 dynamic_cast<const CandEventHandle*>(eventItr()) ){
00103 if(SelectEvent(event)){
00104 CandTrackHandle* track = GetRemovableTrack(event,tracklist);
00105 if(track){
00106 TObjArray rmmuarray;
00107 rmmuarray.Add(event);
00108 rmmuarray.Add(track);
00109 rmmuarray.Add(digitlist);
00110 cxx.SetDataIn(&rmmuarray);
00111 MSG("RmMu",Msg::kDebug) << "forming rumu candidate\n";
00112 CandRmMuHandle rmmuhandle = CandRmMu::MakeCandidate(ah,cxx);
00113 rmmuhandle.SetOrigEvtIndex(evtIndex);
00114 ch.AddDaughterLink(rmmuhandle);
00115 }
00116 }
00117 evtIndex+=1;
00118 }
00119 }
00120
00121
00122 void AlgRmMuList::Trace(const char * ) const
00123 {
00124 }
00125