ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/PhysicsMod/interface/PublisherMod.h
(Generate patch)

Comparing UserCode/MitAna/PhysicsMod/interface/PublisherMod.h (file contents):
Revision 1.2 by loizides, Thu Dec 4 13:52:27 2008 UTC vs.
Revision 1.6 by bendavid, Wed Mar 11 18:13:10 2009 UTC

# Line 3 | Line 3
3   //
4   // PublisherMod
5   //
6 + // This module simply loads a branch and publishes its content into an ObjArray.
7 + // Using PublisherPerEvent() one can chose whether the array will be published
8 + // globally (ie only in SlaveBegin) or on per-event basis.
9 + //
10   // Authors: C.Loizides
11   //--------------------------------------------------------------------------------------------------
12  
# Line 14 | Line 18
18  
19   namespace mithep
20   {
21 <  template<class T>
21 >  template<class TIn, class TOut=TIn>
22    class PublisherMod : public BaseMod
23    {
24      public:
# Line 22 | Line 26 | namespace mithep
26                     const char *title="Publisher module");
27        ~PublisherMod() {}
28  
29 <      const char              *GetBranchName()              const { return fBranchName; }
30 <      void                     SetBranchName(const char *n)       { fBranchName=n; }
31 <      const char              *GetPublicName()              const { return fPublicName; }
32 <      void                     SetPublicName(const char *n)       { fPublicName=n; }
29 >      const char              *GetBranchName()              const { return fBranchName;     }
30 >      const char              *GetInputName()               const { return GetBranchName(); }
31 >      const char              *GetOutputName()              const { return GetPublicName(); }
32 >      const char              *GetPublicName()              const { return fPublicName;     }
33 >      Bool_t                   GetPubPerEvent()             const { return fPubPerEvent;    }
34 >      void                     SetBranchName(const char *n)       { fBranchName=n;          }
35 >      void                     SetInputName(const char *n)        { SetBranchName(n);       }
36 >      void                     SetOutputName(const char *n)       { SetPublicName(n);       }
37 >      void                     SetPublicName(const char *n)       { fPublicName=n;          }
38 >      void                     PublishPerEvent(Bool_t b)          { fPubPerEvent = b;       }
39  
40      protected:
41        TString                  fBranchName;    //name of collection
42        TString                  fPublicName;    //name of collection
43 <      T                       *fObj;           //!pointer to collection
43 >      Bool_t                   fPubPerEvent;   //=true then publish per event (def=1)
44 >      const Collection<TIn>   *fColIn;         //!pointer to collection (in)
45 >      ObjArray<TOut>          *fColOut;        //!pointer to collection (out)
46  
47        void                     Process();
48        void                     SlaveBegin();
49 +      void                     SlaveTerminate();
50  
51 <      ClassDefT(PublisherMod,1) // Publisher module
51 >      ClassDefT(PublisherMod, 1) // Publisher module
52    };
53   }
54  
55   //--------------------------------------------------------------------------------------------------
56 < template<class T>
57 < mithep::PublisherMod<T>::PublisherMod(const char *name, const char *title) :
56 > template<class TIn, class TOut>
57 > mithep::PublisherMod<TIn, TOut>::PublisherMod(const char *name, const char *title) :
58    BaseMod(name,title),
59 <  fBranchName(""),
59 >  fBranchName("SetMe"),
60    fPublicName(""),
61 <  fObj(0)
61 >  fPubPerEvent(kTRUE),
62 >  fColIn(0),
63 >  fColOut(0)
64   {
65    // Constructor.
66   }
67  
68   //--------------------------------------------------------------------------------------------------
69 < template<class T>
70 < void mithep::PublisherMod<T>::Process()
69 > template<class TIn, class TOut>
70 > void mithep::PublisherMod<TIn, TOut>::Process()
71   {
72 <  // Process entries of the tree: Just load the branch and fill the histograms.
72 >  // Load the branch, add pointers to the object array. Publish object array if needed.
73  
74    LoadBranch(GetBranchName());
75 <  AddObjThisEvt(fObj, GetPublicName());
75 >  if (fPubPerEvent)
76 >    fColOut = new mithep::ObjArray<TOut>(0, GetPublicName());
77 >  else
78 >    fColOut->Reset();
79 >
80 >  UInt_t entries = fColIn->GetEntries();
81 >  for(UInt_t i=0; i<entries; ++i)
82 >    fColOut->Add(fColIn->At(i));
83 >
84 >  if (fPubPerEvent)
85 >    AddObjThisEvt(fColOut);
86   }
87  
88   //--------------------------------------------------------------------------------------------------
89 < template<class T>
90 < void mithep::PublisherMod<T>::SlaveBegin()
89 > template<class TIn, class TOut>
90 > void mithep::PublisherMod<TIn, TOut>::SlaveBegin()
91   {
92 <  // Request a branch and create the histograms.
92 >  // Request the branch to be published. Depending on the user's decision publish the array.
93  
94 <  ReqBranch(GetBranchName(), fObj);
94 >  ReqBranch(GetBranchName(), fColIn);
95  
96    if (fPublicName.IsNull())
97      fPublicName = fBranchName;
98 +
99 +  if (!GetPubPerEvent()) {
100 +    fColOut = new mithep::ObjArray<TOut>(0, GetPublicName());
101 +    PublishObj(fColOut);
102 +  }
103 + }
104 +
105 + //--------------------------------------------------------------------------------------------------
106 + template<class TIn, class TOut>
107 + void mithep::PublisherMod<TIn, TOut>::SlaveTerminate()
108 + {
109 +  // Cleanup in case objects are published only once.
110 +
111 +  if (!fPubPerEvent) {
112 +    RetractObj(GetPublicName());
113 +    delete fColOut;
114 +  }
115   }
116   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines