00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <memory>
00023
00024
00025 #include "FWCore/Framework/interface/Frameworkfwd.h"
00026 #include "FWCore/Framework/interface/EDProducer.h"
00027
00028 #include "FWCore/Framework/interface/Event.h"
00029 #include "FWCore/Framework/interface/MakerMacros.h"
00030
00031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00032
00033 #include "DataFormats/Common/interface/Handle.h"
00034 #include "FWCore/Framework/interface/ESHandle.h"
00035 #include "DataFormats/RPCDigi/interface/RPCDigi.h"
00036 #include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
00037 #include <DataFormats/RPCRecHit/interface/RPCRecHit.h>
00038 #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
00039 #include <DataFormats/MuonDetId/interface/RPCDetId.h>
00040 #include <Geometry/RPCGeometry/interface/RPCGeometry.h>
00041 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00042 #include <DataFormats/GeometrySurface/interface/LocalError.h>
00043 #include <DataFormats/GeometryVector/interface/LocalPoint.h>
00044 #include "DataFormats/GeometrySurface/interface/Surface.h"
00045 #include "DataFormats/DetId/interface/DetId.h"
00046 #include <Geometry/Records/interface/MuonGeometryRecord.h>
00047 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
00048 #include "DataFormats/Candidate/interface/Candidate.h"
00049 #include "DataFormats/Candidate/interface/CandMatchMap.h"
00050 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00051 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
00052
00053 #include "MagneticField/Engine/interface/MagneticField.h"
00054 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00055 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00056 #include <DataFormats/GeometrySurface/interface/LocalError.h>
00057 #include <DataFormats/GeometryVector/interface/LocalPoint.h>
00058 #include "DataFormats/GeometrySurface/interface/Surface.h"
00059 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00060
00061 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00062 #include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
00063 #include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h"
00064
00065 #include "SimDataFormats/Track/interface/SimTrack.h"
00066 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
00067 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00068 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
00069 #include "FastSimulation/Tracking/test/FastTrackAnalyzer.h"
00070
00071 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00072 #include "RecoMuon/TrackingTools/interface/MuonPatternRecoDumper.h"
00073
00074 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
00075
00076 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
00077
00078 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
00079 #include <Geometry/RPCGeometry/interface/RPCRoll.h>
00080 #include <Geometry/Records/interface/MuonGeometryRecord.h>
00081 #include <Geometry/RPCGeometry/interface/RPCGeomServ.h>
00082 #include <Geometry/CommonDetUnit/interface/GeomDet.h>
00083
00084 #include <cmath>
00085
00086
00087 #include "TFile.h"
00088 #include "TF1.h"
00089 #include "TH1F.h"
00090 #include "TH1.h"
00091 #include "TH2F.h"
00092 #include "TROOT.h"
00093 #include "TMath.h"
00094 #include "TCanvas.h"
00095
00096
00097 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00098 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00099 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
00100 #include "DataFormats/TrackCandidate/interface/TrackCandidate.h"
00101 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
00102
00103 #include<fstream>
00104
00105
00106
00107
00108
00109
00110 class SimHitShifter : public edm::EDProducer {
00111 public:
00112 explicit SimHitShifter(const edm::ParameterSet&);
00113 ~SimHitShifter();
00114
00115 virtual void beginRun(const edm::Run&, const edm::EventSetup&);
00116 std::map<int,float> shiftinfo;
00117
00118
00119 private:
00120 std::string ShiftFileName;
00121 virtual void beginJob(const edm::Run&, const edm::EventSetup&) ;
00122 virtual void produce(edm::Event&, const edm::EventSetup&);
00123 virtual void endJob() ;
00124
00125 };
00126
00127 SimHitShifter::SimHitShifter(const edm::ParameterSet& iConfig)
00128 {
00129 std::cout<<"in the constructor"<<std::endl;
00130
00131 ShiftFileName = iConfig.getUntrackedParameter<std::string>("ShiftFileName","/afs/cern.ch/user/c/carrillo/simhits/CMSSW_3_5_8_patch2/src/simhitshifter/SimHitShifter/Merged_Muon_RawId_Shift.txt");
00132
00133
00134
00135 std::ifstream ifin(ShiftFileName.c_str());
00136
00137 int rawId;
00138 float offset;
00139
00140 std::cout<<"In the constructor, The name of the file is "<<ShiftFileName.c_str()<<std::endl;
00141
00142 if(!ifin) std::cout<<"Problem reading the map rawId shift "<<ShiftFileName.c_str()<<std::endl;
00143 assert(ifin);
00144
00145 while (ifin.good()){
00146 ifin >>rawId >>offset;
00147 shiftinfo[rawId]=offset;
00148 std::cout<<"rawId ="<<rawId<<" offset="<<offset<<std::endl;
00149 }
00150
00151 produces<edm::PSimHitContainer>("MuonCSCHits");
00152 produces<edm::PSimHitContainer>("MuonDTHits");
00153 produces<edm::PSimHitContainer>("MuonRPCHits");
00154 }
00155
00156
00157 SimHitShifter::~SimHitShifter()
00158 {
00159 }
00160
00161 void SimHitShifter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup){
00162 using namespace edm;
00163
00164
00165 std::vector<edm::Handle<edm::PSimHitContainer> > theSimHitContainers;
00166 iEvent.getManyByType(theSimHitContainers);
00167
00168
00169 std::auto_ptr<edm::PSimHitContainer> pcsc(new edm::PSimHitContainer);
00170 std::auto_ptr<edm::PSimHitContainer> pdt(new edm::PSimHitContainer);
00171 std::auto_ptr<edm::PSimHitContainer> prpc(new edm::PSimHitContainer);
00172
00173 std::vector<PSimHit> theSimHits;
00174
00175 using std::oct;
00176 using std::dec;
00177
00178 for (int i = 0; i < int(theSimHitContainers.size()); i++){
00179 theSimHits.insert(theSimHits.end(),theSimHitContainers.at(i)->begin(),theSimHitContainers.at(i)->end());
00180 }
00181
00182 for (std::vector<PSimHit>::const_iterator iHit = theSimHits.begin(); iHit != theSimHits.end(); iHit++){
00183 DetId theDetUnitId((*iHit).detUnitId());
00184 DetId simdetid= DetId((*iHit).detUnitId());
00185
00186 if(simdetid.det()!=DetId::Muon) continue;
00187
00188 float newtof = 0;
00189
00190 if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::RPC){
00191
00192 if(shiftinfo.find(simdetid.rawId())==shiftinfo.end()){
00193 std::cout<<"RPC Warning the RawId = "<<simdetid.det()<<" | "<<simdetid.rawId()<<"is not in the map"<<std::endl;
00194 newtof = (*iHit).timeOfFlight();
00195 }else{
00196 newtof = (*iHit).timeOfFlight()+shiftinfo[simdetid.rawId()];
00197 }
00198
00199 PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
00200 newtof,
00201 (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
00202 prpc->push_back(hit);
00203 }
00204 else if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::DT){
00205 int RawId = simdetid.rawId();
00206 std::cout<<"We found a DT simhit the RawId in Dec is";
00207 std::cout<<dec<<RawId<<std::endl;
00208 std::cout<<"and in oct"<<std::endl;
00209 std::cout<<oct<<RawId<< std::endl;
00210 std::cout<<"once masked in oct "<<std::endl;
00211 int compressedRawId = RawId/8/8/8/8/8;
00212 std::cout<<compressedRawId<<std::endl;
00213 std::cout<<"extendedRawId"<<std::endl;
00214 int extendedRawId = compressedRawId*8*8*8*8*8;
00215 std::cout<<extendedRawId<<std::endl;
00216 std::cout<<"converted again in decimal"<<std::endl;
00217 std::cout<<dec<<extendedRawId<<std::endl;
00218
00219 if(shiftinfo.find(extendedRawId)==shiftinfo.end()){
00220
00221 newtof = (*iHit).timeOfFlight();
00222 }else{
00223 newtof = (*iHit).timeOfFlight()+shiftinfo[extendedRawId];
00224 std::cout<<"RawId = "<<extendedRawId<<"is in the map "<<(*iHit).timeOfFlight()<<" "<<newtof<<std::endl;
00225 }
00226
00227 std::cout<<"\t\t We have an DT Sim Hit! in t="<<(*iHit).timeOfFlight()<<" DetId="<<(*iHit).detUnitId()<<std::endl;
00228 PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
00229 newtof,
00230 (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
00231 pdt->push_back(hit);
00232 }
00233 else if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::CSC){
00234
00235
00236 CSCDetId TheCSCDetId = CSCDetId(simdetid);
00237 CSCDetId TheChamberDetId = TheCSCDetId.chamberId();
00238
00239 if(shiftinfo.find(TheChamberDetId.rawId())==shiftinfo.end()){
00240 std::cout<<"The RawId is not in the map,perhaps it is on the CSCs station 1 ring 4"<<std::endl;
00241 if(TheChamberDetId.station()==1 && TheChamberDetId.ring()==4){
00242 CSCDetId TheChamberDetIdNoring4= CSCDetId(TheChamberDetId.endcap(),TheChamberDetId.station(),1
00243 ,TheChamberDetId.chamber(),TheChamberDetId.layer());
00244
00245 if(shiftinfo.find(TheChamberDetIdNoring4.rawId())==shiftinfo.end()){
00246 std::cout<<"CSC Warning the RawId = "<<TheChamberDetIdNoring4<<" "<<TheChamberDetIdNoring4.rawId()<<"is not in the map"<<std::endl;
00247 newtof = (*iHit).timeOfFlight();
00248 }else{
00249 newtof = (*iHit).timeOfFlight()+shiftinfo[TheChamberDetIdNoring4.rawId()];
00250 }
00251 }
00252 }else{
00253 newtof = (*iHit).timeOfFlight()+shiftinfo[TheChamberDetId.rawId()];
00254 }
00255
00256 PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
00257 newtof,
00258 (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
00259
00260 std::cout<<"CSC check newtof"<<newtof<<" "<<(*iHit).timeOfFlight()<<std::endl;
00261 if(newtof==(*iHit).timeOfFlight())std::cout<<"Warning!!!"<<std::endl;
00262 pcsc->push_back(hit);
00263 }
00264 }
00265
00266 std::cout<<"Putting collections in the event"<<std::endl;
00267
00268 iEvent.put(pcsc,"MuonCSCHits");
00269 iEvent.put(pdt,"MuonDTHits");
00270 iEvent.put(prpc,"MuonRPCHits");
00271
00272 }
00273
00274 void
00275 SimHitShifter::beginRun(const edm::Run& run, const edm::EventSetup& iSetup)
00276 {
00277
00278 }
00279
00280
00281 void
00282 SimHitShifter::beginJob(const edm::Run& run, const edm::EventSetup& iSetup)
00283 {
00284
00285 }
00286
00287
00288 void
00289 SimHitShifter::endJob() {
00290 }
00291
00292
00293 DEFINE_FWK_MODULE(SimHitShifter);