CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/FWCore/Skeletons/scripts/mkTemplates/TSelector/TSelector.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    __pkgname__
00004 // Class:      __class__
00005 // 
00006 /*
00007 
00008  Description: [one line class summary]
00009 
00010  Implementation:
00011      [Notes on implementation]
00012 */
00013 //
00014 // Original Author:  __author__
00015 //         Created:  __date__
00016 // __rcsid__
00017 //
00018 //
00019 
00020 
00021 // system include files
00022 #include <memory>
00023 #include <iostream>
00024 
00025 #include "TCanvas.h"
00026 // user include files
00027 #include "__subsys__/__pkgname__/plugins/__class__.h"
00028 #include "DataFormats/Common/interface/Handle.h"
00029 #include "FWCore/Framework/interface/Event.h"
00030 
00031 @example_track #include "DataFormats/TrackReco/interface/Track.h"
00032 //
00033 // constants shared between the Selector and the Workers
00034 //
00035 @example_track const char* const kPt = "pt";
00036 //const char* const kA = "a";
00037 
00038 //===============================================
00039 //A worker processes the events.
00040 // A new worker is created each time the events are processed
00041 //===============================================
00042 
00043 // ------------ constructed for each PROOF Node  ------------
00044 // The arguments are
00045 //   fromSelector: these are copies of values set in the selector and sent to all workers
00046 //            out: these are the items which will be passed back to the selector (e.g. histograms)
00047 __class__Worker::__class__Worker(const TList* fromSelector, TList& out ) {
00048   //h_a  = new TH1F( kA , "a"  , 100,  0, 20 );
00049   //out.Add(h_a);  
00050 @example_track  h_pt = new TH1F(kPt, "P_t",100,0,100);
00051 @example_track  out.Add(h_pt);
00052 }
00053 
00054 __class__Worker::~__class__Worker()
00055 {
00056 }
00057 // ------------ method called for each event  ------------
00058 void 
00059 __class__Worker::process( const edm::Event& iEvent ) {
00060   using namespace edm;
00061 @example_track    using reco::TrackCollection;
00062   
00063 @example_track    Handle<TrackCollection> tracks;
00064 @example_track    iEvent.getByLabel("ctfWithMaterialTracks",tracks);
00065 @example_track    for(TrackCollection::const_iterator itTrack = tracks->begin();
00066 @example_track        itTrack != tracks->end();                      
00067 @example_track        ++itTrack) {
00068 @example_track       h_pt->Fill(itTrack->pt());  
00069 @example_track    }
00070   
00071 //  using namespace edmtest;
00072 //  edm::Handle<ThingCollection> hThings;
00073 //  iEvent.getByLabel("Thing",hThings);
00074 //  for ( ThingCollection::const_iterator it = hThings->begin(); 
00075 //        it != hThings->end(); ++it ) {
00076 //    h_a ->Fill( it->a );
00077 //  }
00078   
00079 }
00080 
00081 // ------------ called after processing the events  ------------
00082 // The argument is the same as for the constructor
00083 void 
00084 __class__Worker::postProcess(TList& out)
00085 {
00086 }
00087 
00088 
00089 //===============================================
00090 //Only one Selector is made per job. It gets all the results from each worker.
00091 //===============================================
00092 __class__::__class__()
00093 {
00094 }
00095 
00096 __class__::~__class__()
00097 {
00098 }
00099 
00100 // ------------ called just before all workers are constructed  ------------
00101 void __class__::begin(TList*& toWorkers)
00102 {
00103 }
00104 
00105 // ------------ called after all workers have finished  ------------
00106 // The argument 'fromWorkers' contains the accumulated output of all Workers
00107 void __class__::terminate(TList& fromWorkers) {
00108   using namespace std;
00109   std::auto_ptr<TCanvas> canvas( new TCanvas() );
00110 //  {
00111 //    TObject* hist = fromWorkers.FindObject(kA);
00112 //    if(0!=hist) {
00113 //      hist->Draw();
00114 //      canvas->SaveAs( "a.jpg" );
00115 //    } else {
00116 //      cout <<"no '"<<kA<<"' histogram"<<endl;
00117 //    }
00118  // }
00119 
00120 @example_track  {
00121 @example_track    TObject* hist = fromWorkers.FindObject(kPt);
00122 @example_track    if(0!=hist) {
00123 @example_track      hist->Draw();
00124 @example_track      canvas->SaveAs( "pt.jpg" );
00125 @example_track    } else {
00126 @example_track      cout <<"no '"<<kPt<<"' histogram"<<endl;
00127 @example_track    }
00128 @example_track  }
00129   
00130 }