File indexing completed on 2024-04-06 12:13:11
0001 #include "FWCore/TFWLiteSelectorTest/src/ThingsTSelector.h"
0002 #include <TCanvas.h>
0003 #include <iostream>
0004 #include "Rtypes.h"
0005 #include "DataFormats/Common/interface/Handle.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "DataFormats/TestObjects/interface/OtherThingCollection.h"
0008 #include "DataFormats/TestObjects/interface/ThingCollection.h"
0009 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0010
0011 using namespace tfwliteselectortest;
0012
0013 static const char* kA = "a";
0014 static const char* kRefA = "refA";
0015 void ThingsTSelector::begin(TList*&) {}
0016
0017 void ThingsTSelector::preProcessing(const TList*, TList& out) {
0018 if (nullptr != h_a) {
0019 out.Remove(h_a);
0020 delete h_a.get();
0021 h_a = nullptr;
0022 }
0023 h_a = new TH1F(kA, "a", 100, 0, 20);
0024 out.Add(h_a);
0025
0026 if (nullptr != h_refA) {
0027 out.Remove(h_refA);
0028 delete h_refA.get();
0029 h_refA = nullptr;
0030 }
0031 h_refA = new TH1F(kRefA, "refA", 100, 0, 20);
0032 out.Add(h_refA);
0033 }
0034
0035 void ThingsTSelector::process(const edm::Event& iEvent) {
0036 std::cout << "processing event " << std::endl;
0037
0038 using namespace edmtest;
0039 edm::Handle<OtherThingCollection> hOThings;
0040
0041 CMS_SA_ALLOW try {
0042 iEvent.getByLabel("OtherThing", "testUserTag", hOThings);
0043 std::cout << ">> other things found:" << hOThings->size() << std::endl;
0044
0045 for (size_t i = 0; i < hOThings->size(); ++i) {
0046 const OtherThing& thing = (*hOThings)[i];
0047 h_refA->Fill(thing.ref->a);
0048 std::cout << ">> ref->a: " << thing.ref->a << std::endl;
0049 }
0050
0051 edm::Handle<ThingCollection> hThings;
0052 iEvent.getByLabel("Thing", hThings);
0053 const ThingCollection& things = *hThings;
0054 std::cout << ">> things found:" << things.size() << std::endl;
0055 for (size_t i = 0; i < things.size(); ++i) {
0056 const Thing& thing = things[i];
0057 h_a->Fill(thing.a);
0058 std::cout << ">> a: " << thing.a << std::endl;
0059 }
0060 } catch (cms::Exception& x) {
0061 std::cout << std::endl << "Failed with cms::Exception: " << std::endl;
0062 std::cout << x.what() << std::endl;
0063 abort();
0064 } catch (std::exception& x) {
0065 std::cout << std::endl << "Failed with std::exception" << std::endl;
0066 std::cout << x.what() << std::endl;
0067 abort();
0068 } catch (...) {
0069 std::cout << std::endl << "Failed with unknown exception" << std::endl;
0070 abort();
0071 }
0072 }
0073
0074 void ThingsTSelector::postProcessing(TList&) {}
0075
0076 void ThingsTSelector::terminate(TList& out) {
0077 std::cout << "terminate" << std::endl;
0078 TCanvas* canvas = new TCanvas();
0079 {
0080 TObject* hist = out.FindObject(kA);
0081 if (nullptr != hist) {
0082 hist->Draw();
0083 canvas->SaveAs("a.jpg");
0084 } else {
0085 std::cout << "no '" << kA << "' histogram" << std::endl;
0086 }
0087 }
0088 {
0089 TObject* hist = out.FindObject(kRefA);
0090 if (nullptr != hist) {
0091 hist->Draw();
0092 canvas->SaveAs("refA.jpg");
0093 } else {
0094 std::cout << "no '" << kRefA << "' histogram" << std::endl;
0095 }
0096 }
0097 delete canvas;
0098 }