CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DPGAnalysis/Skims/src/RPCRecHitFilter.cc

Go to the documentation of this file.
00001 // Orso Iorio, INFN Napoli 
00002 //
00003 //This module is a filter based on the number of RPC Hits
00004 //
00005 
00006 #include "DPGAnalysis/Skims/src/RPCRecHitFilter.h"
00007 //#include "../interface/RecHitFilter.h"
00008 
00009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00010 //#include "DataFormats/RPCDigi/interface/RPCDigi.h"
00011 //#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
00012 #include "FWCore/Framework/interface/Frameworkfwd.h"
00013 
00014 #include "FWCore/Framework/interface/MakerMacros.h"
00015 #include "DataFormats/Common/interface/Handle.h"
00016 #include <DataFormats/RPCRecHit/interface/RPCRecHit.h>
00017 #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
00018 
00019 #include <Geometry/DTGeometry/interface/DTGeometry.h>
00020 #include <Geometry/RPCGeometry/interface/RPCGeometry.h>
00021 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00022 #include "MagneticField/Engine/interface/MagneticField.h"
00023 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00024 #include <Geometry/Records/interface/MuonGeometryRecord.h>
00025 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
00026 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00027 #include "DataFormats/DetId/interface/DetId.h"
00028 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
00029 
00030 
00031 #include <FWCore/Utilities/interface/Exception.h>
00032 #include "DataFormats/Provenance/interface/Timestamp.h"
00033 
00035 
00036 #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
00037 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h"
00038 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h"
00039 
00040 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h"
00041 #include "CondFormats/L1TObjects/interface/L1GtParameters.h"
00042 #include "CondFormats/DataRecord/interface/L1GtParametersRcd.h"
00043 
00044 
00045 /*#include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
00046 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h"
00047 
00048 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h"
00049 
00050 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h"
00051 */
00052 
00053 using namespace reco;
00054 
00055 typedef std::vector<L1MuRegionalCand> L1MuRegionalCandCollection;
00056 
00057 #include <sys/time.h>
00058 #include <algorithm>
00059 #include <memory>
00060 #include <cmath>
00061 #include "math.h"
00062 #include "TFile.h"
00063 #include "TMath.h"
00064 #include "TTree.h"
00065 
00066 #include "TDirectory.h"
00067 #include "TFile.h"
00068 #include "TTree.h"
00069 #include <cstdlib>
00070 #include <stdio.h>
00071 #include "stdlib.h"
00072 #include <string>
00073 #include <memory>
00074 #include<cmath>
00075 
00076 using namespace edm;
00077 using namespace reco;
00078 using namespace std;
00079 
00080 RPCRecHitFilter::RPCRecHitFilter(const edm::ParameterSet& iConfig){
00081 
00082 
00083   LogTrace("RPCEffTrackExtrapolation") <<"Dentro Costruttore"<<std::endl;
00084 
00085   RPCDataLabel = iConfig.getUntrackedParameter<std::string>("rpcRecHitLabel");
00086   
00087   //  RPCRecHits = iConfig.getParameter< edm::InputTag >("RPCRecHits");
00088   
00089  
00090   centralBX_ = iConfig.getUntrackedParameter<int>("CentralBunchCrossing",0);  
00091   BXWindow_ = iConfig.getUntrackedParameter<int>("BunchCrossingWindow",9999);
00092   
00093   minHits_ = iConfig.getUntrackedParameter<int>("minimumNumberOfHits",0); 
00094   hitsInStations_ =  iConfig.getUntrackedParameter<int>("HitsInStation",0); 
00095 
00096 
00097   Debug_ = iConfig.getUntrackedParameter<bool>("Debug",false);
00098   Verbose_ = iConfig.getUntrackedParameter<bool>("Verbose",false);
00099 
00100 
00101   Barrel_  = iConfig.getUntrackedParameter<bool>("UseBarrel",true);
00102   EndcapPositive_  = iConfig.getUntrackedParameter<bool>("UseEndcapPositive",true);
00103   EndcapNegative_  = iConfig.getUntrackedParameter<bool>("UseEndcapNegative",true);
00104 
00105   cosmicsVeto_  = iConfig.getUntrackedParameter<bool>("CosmicsVeto",false);
00106 
00107 
00108 
00109 }
00110 
00111 void RPCRecHitFilter::beginJob()
00112 {
00113 
00114 }
00115 
00116 bool RPCRecHitFilter::filter( edm::Event& iEvent, const edm::EventSetup& iSetup){
00117 
00118   
00119   edm::ESHandle<RPCGeometry> rpcGeo;
00120   iSetup.get<MuonGeometryRecord>().get(rpcGeo);
00121   
00122   edm::Handle<RPCRecHitCollection> rpcHits;
00123   iEvent.getByLabel(RPCDataLabel,rpcHits);
00124   
00125   
00126   ESHandle<GlobalTrackingGeometry> theTrackingGeometry;
00127   iSetup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry);
00128     
00129   
00130   std::map <int  , int > numberOfRecHitsBarrel;
00131   std::map <int  , int > numberOfDigisBarrel;
00132   std::map <int  , int > numberOfRecHitsEndcap;
00133   std::map <int  , int > numberOfDigisEndcap;
00134   
00135   std::map <pair < int  , int > , std::vector<RPCDetId> > numberOfRecHitsSameWheelSameSector;
00136   std::map <pair < int  , int > , std::vector<RPCDetId> > numberOfDigisSameWheelSameSector;
00137   std::map <pair < int  , int > , std::vector<RPCDetId> > numberOfHitsSameDiskSectorPositive;
00138   std::map <pair < int  , int > , std::vector<RPCDetId> > numberOfHitsSameDiskSectorNegative;
00139   
00140   
00141   const std::vector<  RPCRoll * > rls = rpcGeo->rolls();
00142   
00143   bool condition = true;
00144   
00145   
00146   int nRecHits = 0;
00147   int nBarrel = 0;
00148   int nEndcap = 0;
00149   
00150   
00152   for (int i = 0; i < (int) rls.size() ; ++i){
00153     
00154     RPCDetId did =  rls[i]->id();
00155     
00156     
00158     RPCRecHitCollection::range rpcRecHitRange = rpcHits->get(did);
00159     RPCRecHitCollection::const_iterator RecHitsIt;                                       
00160     
00161         
00162     for(RecHitsIt = rpcRecHitRange.first; RecHitsIt!=rpcRecHitRange.second; ++RecHitsIt){
00163       
00164       //std::cout<< " roll is "<< did << " bx recHit is " << RecHitsIt->BunchX()<< " event number " <<eventNumber  <<std::endl;
00165       
00166       if(did.region()==0){
00167         
00168         if (cosmicsVeto_ ){
00169           
00170           for(int u = -1;u<=1;++u){
00171             for(int t = -1;t<=1;++t){
00172               numberOfRecHitsSameWheelSameSector[pair< int, int >( did.ring()+u,did.sector()+t)].push_back(did);
00173             }
00174           }
00175         }
00176         
00177         else{
00178           if( did.station()==1) {
00179             for(int u = -1;u<=1;++u){
00180               for(int t = -1;t<=1;++t){
00181                 numberOfRecHitsSameWheelSameSector[pair< int, int >(did.ring()+u,did.sector()+t)].push_back(did);
00182               }
00183             }
00184           }
00185         }
00186         
00187         ++numberOfRecHitsBarrel[did.ring()];
00188         ++nBarrel;
00189         
00190       } 
00191       
00192       else {
00193         if(did.region()== -1) { 
00194           for(int t = -1;t<=1;++t){
00195                 numberOfHitsSameDiskSectorNegative[pair<int,int>(did.ring(),did.sector()+t)].push_back(did); 
00196           }
00197         }
00198 
00199         if(did.region()==  1){
00200           for(int t = -1;t<=1;++t){
00201             numberOfHitsSameDiskSectorPositive[pair<int,int>(did.ring(),did.sector()+t)].push_back(did);
00202           }
00203         }           
00204         ++numberOfRecHitsEndcap[did.station()]; 
00205         
00206         ++nEndcap;
00207       }
00208       
00209       ++nRecHits;
00210       
00211       break;
00212     }
00213         
00214     
00215   }
00217   
00218   
00221       bool cond1 = false;
00222       bool cond2 = false;
00223       bool cond3 = false;
00224 
00225       std::map < int,  bool >vectorBarrelCands;
00226       std::map < int,  bool >vectorEndcapCandsPositive;
00227       std::map < int, bool >vectorEndcapCandsNegative;
00228  
00229       bool veto = false; 
00230       
00231       // barrel
00232       for ( std::map <pair < int , int > , std::vector < RPCDetId> >::const_iterator iter = numberOfRecHitsSameWheelSameSector.begin();iter != numberOfRecHitsSameWheelSameSector.end();++iter){
00233 
00234         vectorBarrelCands[1] = false; 
00235         vectorBarrelCands[2] = false; 
00236 
00237         if(iter->second.size()>1){
00238           for(size_t i = 0; i < iter->second.size(); ++i){
00239             if(iter->second[i].layer()==1 && iter->second[i].station() == 1)vectorBarrelCands[0] = true; 
00240             if(iter->second[i].layer()==2 && iter->second[i].station() == 1)vectorBarrelCands[1] = true; 
00241             if(cosmicsVeto_)if(iter->second[i].station() > 2){ veto = true; 
00242             vectorBarrelCands[1] = false;vectorBarrelCands[2] = false ;
00243             break;
00244             } 
00245           } 
00246         }
00247         
00248         if(( vectorBarrelCands[0] && vectorBarrelCands[1])) {
00249           cond1 = true;
00250           break;
00251         } 
00252       } 
00253  
00254  
00255       // endcap positive
00256       for ( std::map <pair < int ,int >, std::vector < RPCDetId> >::const_iterator iter = numberOfHitsSameDiskSectorPositive.begin(); iter != numberOfHitsSameDiskSectorPositive.end(); ++iter){
00257 
00258         vectorEndcapCandsPositive[1] = false; 
00259         vectorEndcapCandsPositive[2] = false; 
00260         vectorEndcapCandsPositive[3] = false; 
00261 
00262         
00263         if(iter->second.size()>1){
00264           for(size_t i = 0; i < iter->second.size(); ++i){
00265             if(iter->second[i].station()==1)vectorEndcapCandsPositive[1] = true; 
00266             if(iter->second[i].station()==2)vectorEndcapCandsPositive[2] = true; 
00267             if(iter->second[i].station()==3)vectorEndcapCandsPositive[3] = true; 
00268           } 
00269         }
00270         
00271         if(( (vectorEndcapCandsPositive[1] && vectorEndcapCandsPositive[2]) ||
00272              (vectorEndcapCandsPositive[1] && vectorEndcapCandsPositive[3]) ||
00273              (vectorEndcapCandsPositive[2] && vectorEndcapCandsPositive[3])  )) {
00274           cond2 = true;
00275           break;
00276         }       
00277         
00278       } 
00279 
00280       // endcap negative
00281       for ( std::map <pair < int ,int >, std::vector < RPCDetId> >::const_iterator iter = numberOfHitsSameDiskSectorNegative.begin(); iter != numberOfHitsSameDiskSectorNegative.end(); ++iter){
00282 
00283         vectorEndcapCandsNegative[1] = false; 
00284         vectorEndcapCandsNegative[2] = false; 
00285         vectorEndcapCandsNegative[3] = false; 
00286 
00287         
00288         if(iter->second.size()>1){
00289           for(size_t i = 0; i < iter->second.size(); ++i){
00290             if(iter->second[i].station()==1)vectorEndcapCandsNegative[1] = true; 
00291             if(iter->second[i].station()==2)vectorEndcapCandsNegative[2] = true; 
00292             if(iter->second[i].station()==3)vectorEndcapCandsNegative[3] = true; 
00293           } 
00294         }
00295         
00296         if(( (vectorEndcapCandsNegative[1] && vectorEndcapCandsNegative[2]) ||
00297              (vectorEndcapCandsNegative[1] && vectorEndcapCandsNegative[3]) ||
00298              (vectorEndcapCandsNegative[2] && vectorEndcapCandsNegative[3])  )) {
00299           cond3 = true;
00300           break;
00301         }       
00302         
00303       } 
00304 
00305 
00306       condition = condition && ( nBarrel + nEndcap >= minHits_ );
00307 
00308 
00309       cond1 = Barrel_ && cond1;
00310       cond2 = EndcapPositive_ && cond2;
00311       cond3 = EndcapNegative_ && cond3;
00312 
00313       bool condition2 = (cond1 || cond2 || cond3);
00314       if(Barrel_ || EndcapPositive_ || EndcapNegative_)condition = condition && condition2;
00315       
00316 
00317       
00318       return  condition;      
00319       
00320 }
00321 
00322 void RPCRecHitFilter::endJob(){
00323 
00324 }
00325 
00326 RPCRecHitFilter::~RPCRecHitFilter(){}
00327 
00328 DEFINE_FWK_MODULE(RPCRecHitFilter);
00329