ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/interface/MergerMod.h
Revision: 1.2
Committed: Mon Mar 2 13:27:17 2009 UTC (16 years, 2 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_008pre2, Mit_008pre1
Changes since 1.1: +5 -5 lines
Log Message:
Removed Vector<std:string>

File Contents

# User Rev Content
1 loizides 1.1 //--------------------------------------------------------------------------------------------------
2 loizides 1.2 // $Id: MergerMod.h,v 1.1 2008/12/11 17:37:29 loizides Exp $
3 loizides 1.1 //
4     // MergerMod
5     //
6     // This templated module merges arbitrarily many collections of objects. It puts them into an
7     // object array of the templated type.
8     //
9     // Authors: C.Loizides
10     //--------------------------------------------------------------------------------------------------
11    
12     #ifndef MITPHYSICS_MODS_MERGERMOD_H
13     #define MITPHYSICS_MODS_MERGERMOD_H
14    
15     #include "MitAna/TreeMod/interface/BaseMod.h"
16     #include "MitAna/DataTree/interface/Collections.h"
17    
18     namespace mithep
19     {
20     template <class T>
21     class MergerMod : public BaseMod
22     {
23     public:
24     MergerMod(const char *name="MergerMod",
25     const char *title="Merger module");
26     ~MergerMod() {}
27    
28     void AddInputName(const char *n);
29     const char *GetMergedName() const { return fMergedName; }
30     const char *GetOutputName() const { return GetMergedName(); }
31     void SetMergedName(const char *n) { fMergedName=n; }
32     void SetOutputName(const char *n) { SetMergedName(n); }
33    
34     protected:
35     void SlaveBegin();
36     void Process();
37    
38 loizides 1.2 std::vector<std::string> fInList; //list of to be merged objects (input)
39 loizides 1.1 TString fMergedName; //name of merged collection (output)
40    
41     ClassDefT(MergerMod, 1) // Merger module
42     };
43     }
44     #endif
45    
46     //--------------------------------------------------------------------------------------------------
47     template <class T>
48     mithep::MergerMod<T>::MergerMod<T>(const char *name, const char *title) :
49     BaseMod(name,title),
50     fInList(0)
51     {
52     // Constructor.
53     }
54    
55     template <class T>
56     void mithep::MergerMod<T>::AddInputName(const char *n)
57     {
58     // Add name to the list of input collections.
59    
60     if (!n)
61     return;
62 loizides 1.2 fInList.push_back(std::string(n));
63 loizides 1.1 }
64    
65     //--------------------------------------------------------------------------------------------------
66     template <class T>
67     void mithep::MergerMod<T>::Process()
68     {
69     // Merge the input objects and publish merged collection.
70    
71     ObjArray<T> *colout = new mithep::ObjArray<T>(0);
72     colout->SetName(GetMergedName());
73    
74 loizides 1.2 UInt_t n = fInList.size();
75 loizides 1.1 for (UInt_t i=0; i<n; ++i) {
76 loizides 1.2 const TObject *in = GetObjThisEvt<TObject>(fInList.at(i).c_str());
77 loizides 1.1 if (!in)
78     continue;
79    
80     const BaseCollection *bcol = dynamic_cast<const BaseCollection*>(in);
81     if (bcol)
82     colout->Add(bcol);
83     else {
84     const T *optr = dynamic_cast<const T*>(in);
85     if (optr)
86     colout->Add(optr);
87     }
88     }
89    
90     // attempt sorting (if implemented by underlying objects)
91     colout->Sort();
92    
93     // add to event for other modules to use
94     AddObjThisEvt(colout);
95     }
96    
97     //--------------------------------------------------------------------------------------------------
98     template <class T>
99     void mithep::MergerMod<T>::SlaveBegin()
100     {
101     // Check if output name was set.
102    
103     if (!fMergedName.IsNull())
104     return;
105    
106     SendError(kAbortModule, "SlaveBegin", "No output name given.");
107     }