CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FastSimulation/CaloRecHitsProducer/src/CaloRecHitCopy.cc

Go to the documentation of this file.
00001 
00002 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00003 #include "FWCore/Framework/interface/Event.h"
00004 #include "FWCore/Framework/interface/MakerMacros.h"
00005 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00006 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00007 
00008 #include "FastSimulation/CaloRecHitsProducer/interface/CaloRecHitCopy.h"
00009 
00010 #include <iostream>
00011 
00012 CaloRecHitCopy::CaloRecHitCopy(edm::ParameterSet const & p)
00013 
00014 {    
00015 
00016   theInputRecHitCollectionTypes = p.getParameter<std::vector<unsigned> >("InputRecHitCollectionTypes");
00017   theInputRecHitCollections = p.getParameter<std::vector<edm::InputTag> >("InputRecHitCollections");
00018   theOutputRecHitCollections = p.getParameter<std::vector<std::string> >("OutputRecHitCollections");
00019 
00020   theOutputRecHitInstances.resize(theInputRecHitCollectionTypes.size());
00021   
00022   for ( unsigned input=0; input<theInputRecHitCollectionTypes.size(); ++input ) { 
00023 
00024     theOutputRecHitInstances[input] = 
00025       theOutputRecHitCollections[input] == "none" ?
00026       false : true;
00027 
00028     switch ( theInputRecHitCollectionTypes[input] ) { 
00029       
00030     case 1: 
00031       {
00032         //Preshower
00033         if ( !theOutputRecHitInstances[input] ) 
00034           produces<ESRecHitCollection>();
00035         else
00036           produces<ESRecHitCollection>(theOutputRecHitCollections[input]);
00037       }
00038       break;
00039       
00040     case 2:
00041       { 
00042         //Ecal Barrel 
00043         if ( !theOutputRecHitInstances[input] ) 
00044           produces<EBRecHitCollection>();
00045         else
00046           produces<EBRecHitCollection>(theOutputRecHitCollections[input]);
00047       }
00048       break;
00049       
00050     case 3:
00051       { 
00052         //EcalEndcap
00053         if ( !theOutputRecHitInstances[input] ) 
00054           produces<EERecHitCollection>();
00055         else
00056           produces<EERecHitCollection>(theOutputRecHitCollections[input]);
00057       }
00058       break;
00059       
00060     case 4:
00061       { 
00062         //HCAL
00063         if ( !theOutputRecHitInstances[input] ) 
00064           produces<HBHERecHitCollection>();
00065         else
00066           produces<HBHERecHitCollection>(theOutputRecHitCollections[input]);
00067       }
00068       break;
00069       
00070     case 5:
00071       { 
00072         //HO
00073         if ( !theOutputRecHitInstances[input] ) 
00074           produces<HORecHitCollection>();
00075         else
00076           produces<HORecHitCollection>(theOutputRecHitCollections[input]);
00077       }
00078       break;
00079       
00080     case 6:
00081       { 
00082         //HF
00083         if ( !theOutputRecHitInstances[input] ) 
00084           produces<HFRecHitCollection>();
00085         else
00086           produces<HFRecHitCollection>(theOutputRecHitCollections[input]);
00087       }
00088       break;
00089       
00090     default:
00091       // Should not happen
00092       break;
00093       
00094     }
00095     
00096   }
00097   
00098 
00099 }
00100 
00101 CaloRecHitCopy::~CaloRecHitCopy() { }
00102 
00103 void 
00104 CaloRecHitCopy::produce(edm::Event & iEvent, const edm::EventSetup & es)
00105 {
00106 
00107 
00108   for ( unsigned input=0; input<theInputRecHitCollectionTypes.size(); ++input ) { 
00109 
00110     switch ( theInputRecHitCollectionTypes[input] ) { 
00111       
00112     case 1: 
00113       {
00114         //Preshower
00115         std::auto_ptr< ESRecHitCollection > copiedESRecHitCollection( new ESRecHitCollection );
00116         edm::Handle<ESRecHitCollection> ESRecHits;
00117         iEvent.getByLabel(theInputRecHitCollections[input],ESRecHits);
00118         ESRecHitCollection::const_iterator itES = ESRecHits->begin();
00119         ESRecHitCollection::const_iterator lastES = ESRecHits->end();
00120         // saves a bit of CPU
00121         copiedESRecHitCollection->reserve(ESRecHits->size());
00122         for ( ; itES!=lastES; ++itES++ ) {
00123           EcalRecHit aHit(*itES);
00124           copiedESRecHitCollection->push_back(aHit);
00125         }
00126         if ( !theOutputRecHitInstances[input] ) 
00127           iEvent.put(copiedESRecHitCollection);
00128         else
00129           iEvent.put(copiedESRecHitCollection,theOutputRecHitCollections[input]);
00130       }
00131       break;
00132       
00133     case 2: 
00134       {
00135         //Ecal Barrel 
00136         std::auto_ptr< EBRecHitCollection > copiedEBRecHitCollection( new EBRecHitCollection );
00137         edm::Handle<EBRecHitCollection> EBRecHits;
00138         iEvent.getByLabel(theInputRecHitCollections[input],EBRecHits);
00139         EBRecHitCollection::const_iterator itEB = EBRecHits->begin();
00140         EBRecHitCollection::const_iterator lastEB = EBRecHits->end();
00141         //saves a bit of CPU
00142         copiedEBRecHitCollection->reserve(EBRecHits->size());
00143 
00144         for ( ; itEB!=lastEB; ++itEB++ ) {
00145           EcalRecHit aHit(*itEB);
00146           copiedEBRecHitCollection->push_back(aHit);
00147         }
00148         if ( !theOutputRecHitInstances[input] ) 
00149           iEvent.put(copiedEBRecHitCollection);
00150         else
00151           iEvent.put(copiedEBRecHitCollection,theOutputRecHitCollections[input]);
00152       }
00153       break;
00154       
00155     case 3:
00156       {
00157         //EcalEndcap
00158         std::auto_ptr< EERecHitCollection > copiedEERecHitCollection( new EERecHitCollection );
00159         edm::Handle<EERecHitCollection> EERecHits;
00160         iEvent.getByLabel(theInputRecHitCollections[input],EERecHits);
00161         EERecHitCollection::const_iterator itEE = EERecHits->begin();
00162         EERecHitCollection::const_iterator lastEE = EERecHits->end();
00163         //saves a bit of CPU
00164         copiedEERecHitCollection->reserve(EERecHits->size());
00165 
00166         for ( ; itEE!=lastEE; ++itEE++ ) {
00167           EcalRecHit aHit(*itEE);
00168           copiedEERecHitCollection->push_back(aHit);
00169         }
00170         if ( !theOutputRecHitInstances[input] ) 
00171           iEvent.put(copiedEERecHitCollection);
00172         else
00173           iEvent.put(copiedEERecHitCollection,theOutputRecHitCollections[input]);
00174       }
00175       break;
00176       
00177     case 4:
00178       {
00179         //HCAL
00180         std::auto_ptr< HBHERecHitCollection > copiedHBHERecHitCollection( new HBHERecHitCollection );
00181         edm::Handle<HBHERecHitCollection> HBHERecHits;
00182         iEvent.getByLabel(theInputRecHitCollections[input],HBHERecHits);
00183         HBHERecHitCollection::const_iterator itHBHE = HBHERecHits->begin();
00184         HBHERecHitCollection::const_iterator lastHBHE = HBHERecHits->end();
00185         //saves a bit of CPU
00186         copiedHBHERecHitCollection->reserve(HBHERecHits->size());
00187 
00188         for ( ; itHBHE!=lastHBHE; ++itHBHE++ ) {
00189           HBHERecHit aHit(*itHBHE);
00190           copiedHBHERecHitCollection->push_back(aHit);
00191         }
00192         if ( !theOutputRecHitInstances[input] ) 
00193           iEvent.put(copiedHBHERecHitCollection);
00194         else
00195           iEvent.put(copiedHBHERecHitCollection,theOutputRecHitCollections[input]);
00196       }
00197       break;
00198       
00199     case 5:
00200       {
00201         //HO
00202         std::auto_ptr< HORecHitCollection > copiedHORecHitCollection( new HORecHitCollection );
00203         edm::Handle<HORecHitCollection> HORecHits;
00204         iEvent.getByLabel(theInputRecHitCollections[input],HORecHits);
00205         HORecHitCollection::const_iterator itHO = HORecHits->begin();
00206         HORecHitCollection::const_iterator lastHO = HORecHits->end();
00207         //saves a bit of CPU
00208         copiedHORecHitCollection->reserve(HORecHits->size());
00209 
00210         for ( ; itHO!=lastHO; ++itHO++ ) {
00211           HORecHit aHit(*itHO);
00212           copiedHORecHitCollection->push_back(aHit);
00213         }
00214         if ( !theOutputRecHitInstances[input] ) 
00215           iEvent.put(copiedHORecHitCollection);
00216         else
00217           iEvent.put(copiedHORecHitCollection,theOutputRecHitCollections[input]);
00218       }
00219       break;
00220       
00221     case 6:
00222       {
00223         //HF
00224         std::auto_ptr< HFRecHitCollection > copiedHFRecHitCollection( new HFRecHitCollection );
00225         edm::Handle<HFRecHitCollection> HFRecHits;
00226         iEvent.getByLabel(theInputRecHitCollections[input],HFRecHits);
00227         HFRecHitCollection::const_iterator itHF = HFRecHits->begin();
00228         HFRecHitCollection::const_iterator lastHF = HFRecHits->end();
00229         //saves a bit of CPU
00230         copiedHFRecHitCollection->reserve(HFRecHits->size());
00231         
00232         for ( ; itHF!=lastHF; ++itHF++ ) {
00233           HFRecHit aHit(*itHF);
00234           copiedHFRecHitCollection->push_back(aHit);
00235         }
00236         if ( !theOutputRecHitInstances[input] ) 
00237           iEvent.put(copiedHFRecHitCollection);
00238         else
00239           iEvent.put(copiedHFRecHitCollection,theOutputRecHitCollections[input]);
00240       }
00241       break;
00242       
00243     default:
00244       // Should not happen
00245       break;
00246       
00247     }
00248     
00249   }
00250 
00251 }
00252 
00253 DEFINE_FWK_MODULE(CaloRecHitCopy);