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.9 by loizides, Mon Jun 15 15:00:16 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  
13   #ifndef MITANA_PHYSICSMOD_PUBLISHERMOD_H
14   #define MITANA_PHYSICSMOD_PUBLISHERMOD_H
15  
16 + #include "MitAna/DataCont/interface/Collection.h"
17 + #include "MitAna/DataCont/interface/ObjArray.h"
18   #include "MitAna/TreeMod/interface/BaseMod.h"
13 #include "MitAna/DataTree/interface/Collections.h"
19  
20   namespace mithep
21   {
22 <  template<class T>
22 >  template<class TIn, class TOut=TIn>
23    class PublisherMod : public BaseMod
24    {
25      public:
26        PublisherMod(const char *name="PublisherMod",
27                     const char *title="Publisher module");
23      ~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;
97 >    fPublicName = GetBranchName();
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