From fa2dfe5c70825001b6fc8ba4588534a0c0b201dc Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 5 Jan 2022 00:08:45 +0100 Subject: [PATCH 1/5] Cleaned print statements under debug, added test file --- GEMCSCBendingAnalyzer/plugins/BuildFile.xml | 26 + GEMCSCBendingAnalyzer/plugins/analyser.cc | 660 ++++++++++++++++++ GEMCSCBendingAnalyzer/test/.__afs001 | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afs0636 | Bin 0 -> 234 bytes GEMCSCBendingAnalyzer/test/.__afs10D2 | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afs1E7B | Bin 0 -> 234 bytes GEMCSCBendingAnalyzer/test/.__afs71FB | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afs98B8 | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afsA9DC | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afsB331 | Bin 0 -> 234 bytes GEMCSCBendingAnalyzer/test/.__afsD94B | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/.__afsE2FC | Bin 0 -> 63 bytes GEMCSCBendingAnalyzer/test/analyser.py | 74 ++ GEMCSCBendingAnalyzer/test/crab3_runana_MC.py | 54 ++ GEMCSCBendingAnalyzer/test/out_ana.root | Bin 0 -> 52712 bytes README.md | 8 +- 16 files changed, 820 insertions(+), 2 deletions(-) create mode 100644 GEMCSCBendingAnalyzer/plugins/BuildFile.xml create mode 100644 GEMCSCBendingAnalyzer/plugins/analyser.cc create mode 100644 GEMCSCBendingAnalyzer/test/.__afs001 create mode 100644 GEMCSCBendingAnalyzer/test/.__afs0636 create mode 100644 GEMCSCBendingAnalyzer/test/.__afs10D2 create mode 100644 GEMCSCBendingAnalyzer/test/.__afs1E7B create mode 100644 GEMCSCBendingAnalyzer/test/.__afs71FB create mode 100644 GEMCSCBendingAnalyzer/test/.__afs98B8 create mode 100644 GEMCSCBendingAnalyzer/test/.__afsA9DC create mode 100644 GEMCSCBendingAnalyzer/test/.__afsB331 create mode 100644 GEMCSCBendingAnalyzer/test/.__afsD94B create mode 100644 GEMCSCBendingAnalyzer/test/.__afsE2FC create mode 100644 GEMCSCBendingAnalyzer/test/analyser.py create mode 100644 GEMCSCBendingAnalyzer/test/crab3_runana_MC.py create mode 100644 GEMCSCBendingAnalyzer/test/out_ana.root diff --git a/GEMCSCBendingAnalyzer/plugins/BuildFile.xml b/GEMCSCBendingAnalyzer/plugins/BuildFile.xml new file mode 100644 index 0000000..00f4526 --- /dev/null +++ b/GEMCSCBendingAnalyzer/plugins/BuildFile.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GEMCSCBendingAnalyzer/plugins/analyser.cc b/GEMCSCBendingAnalyzer/plugins/analyser.cc new file mode 100644 index 0000000..52c0175 --- /dev/null +++ b/GEMCSCBendingAnalyzer/plugins/analyser.cc @@ -0,0 +1,660 @@ +#include +#include +#include +#include +#include +#include +#define foreach BOOST_FOREACH + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h" +#include "TrackingTools/GeomPropagators/interface/Propagator.h" +#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" +#include "TrackingTools/Records/interface/TransientTrackRecord.h" +#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" +#include "MagneticField/Engine/interface/MagneticField.h" + +#include "DataFormats/PatCandidates/interface/Muon.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/DetId/interface/DetId.h" +#include "DataFormats/TrackReco/interface/Track.h" + +#include "DataFormats/CSCRecHit/interface/CSCRecHit2D.h" +#include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" +#include +#include +#include "Geometry/CSCGeometry/interface/CSCGeometry.h" + +#include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" +#include "Geometry/GEMGeometry/interface/GEMGeometry.h" +#include "Geometry/GEMGeometry/interface/GEMEtaPartitionSpecs.h" + +#include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "Geometry/CommonTopologies/interface/StripTopology.h" + +#include "DataFormats/Math/interface/deltaPhi.h" +#include "FWCore/Framework/interface/ESHandle.h" + +#include "TTree.h" +#include "TH1D.h" +#include "TH2D.h" +#include "TString.h" +#include "TGraphAsymmErrors.h" +#include "TLorentzVector.h" + +#include "FWCore/Framework/interface/ConsumesCollector.h" + +#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" + + +using namespace std; +using namespace edm; + + +struct MuonData +{ + void init(); + TTree* book(TTree *t, int prop_type); + //Muon Info////////////////////////////////////////////////////// + int muon_charge; float muon_pt; float muon_eta; float muon_momentum; + unsigned long long evtNum; unsigned long long lumiBlock; int muonIdx; + int runNum; + //Propagation Info////////////////////////////////////////////////////// + float prop_GP[3]; float prop_LP[3]; float prop_startingPoint_GP[3]; + float prop_yroll; float prop_localphi_rad; float prop_localphi_deg; + bool has_prop; bool has_fidcut; + int prop_location[5]; + //Track Info////////////////////////////////////////////////////// + float track_chi2; float track_ndof; int n_ME11_segment; int which_track; + int hasME11; int hasME11RecHit; int hasME11A; int hasME11ARecHit; + int nCSCSeg; int nDTSeg; int nME11RecHits; float ME11_BunchX; int ME11_strip; + int ME11_location[5]; + //Rechit Info////////////////////////////////////////////////////// + float rechit_GP[3]; float rechit_LP[3]; + float rechit_yroll; float rechit_localphi_rad; float rechit_localphi_deg; + bool has_rechit; + int rechit_first_strip; int rechit_CLS; int rechit_BunchX; + float RdPhi; float RdPhi_Corrected; int rechit_detId; + int nRecHitsTot; int nRecHits5; int nRecHits2; + int rechit_location[5]; + int nRecHitsRpos1L1; int nRecHitsRpos1L2; + int nRecHitsRneg1L1; int nRecHitsRneg1L2; + //Sim info for MC + float sim_GP[3]; float sim_LP[3]; + float simDy; float sim_yroll; int nSim; +}; + +void MuonData::init() +{ + //Muon Info////////////////////////////////////////////////////// + muon_charge = 9999; muon_pt = 9999; muon_eta = 9999; muon_momentum = 9999; + evtNum = 99999999; lumiBlock = 99999999; muonIdx = 99999999; runNum = 99999999; + //Propagation Info////////////////////////////////////////////////////// + for(int i=0; i<3; ++i){ + prop_GP[i] = 99999; prop_LP[i] = 99999; prop_startingPoint_GP[i] = 99999; + } + prop_yroll = 99999; prop_localphi_rad = 99999; prop_localphi_deg = 99999; + has_prop = false; has_fidcut = false; + for(int i=0; i<5; ++i){ + prop_location[i] = 99999; + } + //Track Info////////////////////////////////////////////////////// + track_chi2 = 999999; track_ndof = 999999; n_ME11_segment = 999999; which_track = 999999; + hasME11 = 0; hasME11RecHit = 0; hasME11A = 0; hasME11ARecHit = 0; + nCSCSeg = 999999; nDTSeg = 999999; nME11RecHits = 999999; ME11_BunchX = 999999; ME11_strip = 999999; + for(int i=0; i<5; ++i){ + ME11_location[i] = 999999; + } + //Rechit Info////////////////////////////////////////////////////// + for(int i=0; i<3; ++i){ + rechit_GP[i] = 999999; rechit_LP[i] = 999999; + } + rechit_yroll = 999999; rechit_localphi_rad = 999999; rechit_localphi_deg = 999999; + has_rechit = false; + rechit_first_strip = 999999; rechit_CLS = 999999; rechit_BunchX = 999999; + RdPhi = 999999; RdPhi_Corrected = 999999; rechit_detId = 999999; + nRecHitsTot = 999999; nRecHits5 = 999999; nRecHits2 = 999999; + for(int i=0; i<5; ++i){ + rechit_location[i] = 999999; + } + nRecHitsRpos1L1 = 999999; nRecHitsRpos1L2 = 999999; + nRecHitsRneg1L1 = 999999; nRecHitsRneg1L2 = 999999; + //Sim info for MC + for(int i=0; i<3; ++i){ + sim_GP[i] = 9999999; sim_LP[i] = 9999999; + } + simDy = 9999999; sim_yroll = 9999999; nSim = 9999999; +} + +TTree* MuonData::book(TTree *t, int prop_type){ + edm::Service< TFileService > fs; + if(prop_type == 1){ + t = fs->make("CSC_Prop", "CSC_Prop"); + } + else if(prop_type == 2){ + t = fs->make("Inner_Prop", "Inner_Prop"); + } + else if(prop_type == 3){ + t = fs->make("ME11Seg_Prop", "ME11Seg_Prop"); + } + else{ + std::cout << "Bad prop type, failure" << std::endl; + } + //Muon Info////////////////////////////////////////////////////// + t->Branch("muon_charge", &muon_charge); t->Branch("muon_pt", &muon_pt); + t->Branch("muon_eta", &muon_eta); t->Branch("muon_momentum", &muon_momentum); + t->Branch("evtNum", &evtNum); t->Branch("lumiBlock", &lumiBlock); t->Branch("muonIdx", &muonIdx); + t->Branch("runNum", &runNum); + //Propagation Info////////////////////////////////////////////////////// + t->Branch("prop_GP", &prop_GP, "prop_GP[3] (x,y,z)/F"); + t->Branch("prop_LP", &prop_LP, "prop_LP[3] (x,y,z)/F"); + t->Branch("prop_startingPoint_GP", &prop_startingPoint_GP, "prop_startingPoint_GP[3] (x,y,z)/F"); + t->Branch("prop_yroll", &prop_yroll); + t->Branch("prop_localphi_rad", &prop_localphi_rad); + t->Branch("prop_localphi_deg", &prop_localphi_deg); + t->Branch("has_prop", &has_prop); + t->Branch("has_fidcut", &has_fidcut); + t->Branch("prop_location", &prop_location, "prop_location[5] (reg, sta, cha, lay, rol)/I"); + //Track Info////////////////////////////////////////////////////// + t->Branch("track_chi2", &track_chi2); t->Branch("track_ndof", &track_ndof); + t->Branch("n_ME11_segment", &n_ME11_segment); t->Branch("which_track", &which_track); + t->Branch("hasME11", &hasME11); t->Branch("hasME11RecHit", &hasME11RecHit); + t->Branch("hasME11A", &hasME11A); t->Branch("hasME11ARecHit", &hasME11ARecHit); + t->Branch("nCSCSeg", &nCSCSeg); t->Branch("nDTSeg", &nDTSeg); + t->Branch("nME11RecHits", &nME11RecHits); t->Branch("ME11_BunchX", &ME11_BunchX); + t->Branch("ME11_strip", &ME11_strip); + t->Branch("ME11_location", &ME11_location, "ME11_location[5] (end, sta, ring, cha, lay)/I"); + //Rechit Info////////////////////////////////////////////////////// + t->Branch("rechit_GP", &rechit_GP, "rechit_GP[3] (x,y,z)/F"); + t->Branch("rechit_LP", &rechit_LP, "rechit_LP[3] (x,y,z)/F"); + t->Branch("rechit_yroll", &rechit_yroll); + t->Branch("rechit_localphi_rad", &rechit_localphi_rad); + t->Branch("rechit_localphi_deg", &rechit_localphi_deg); + t->Branch("has_rechit", &has_rechit); + t->Branch("rechit_first_strip", &rechit_first_strip); + t->Branch("rechit_CLS", &rechit_CLS); + t->Branch("rechit_BunchX", &rechit_BunchX); + t->Branch("RdPhi", &RdPhi); + t->Branch("RdPhi_Corrected", &RdPhi_Corrected); + t->Branch("rechit_detId", &rechit_detId); + t->Branch("nRecHitsTot", &nRecHitsTot); + t->Branch("nRecHits2", &nRecHits2); + t->Branch("nRecHits5", &nRecHits5); + t->Branch("rechit_location", &rechit_location, "rechit_location[5] (reg, sta, cha, lay, rol)/I"); + t->Branch("nRecHitsRpos1L1", &nRecHitsRpos1L1); + t->Branch("nRecHitsRpos1L2", &nRecHitsRpos1L2); + t->Branch("nRecHitsRneg1L1", &nRecHitsRneg1L1); + t->Branch("nRecHitsRneg1L2", &nRecHitsRneg1L2); + //Sim info for MC + t->Branch("sim_GP", &sim_GP, "sim_GP[3] (x,y,z)/F"); + t->Branch("sim_LP", &sim_LP, "sim_LP[3] (x,y,z)/F"); + t->Branch("simDy", &simDy); + t->Branch("sim_yroll", &sim_yroll); + t->Branch("nSim", &nSim); + return t; +} + + +class analyser : public edm::EDAnalyzer { +public: + explicit analyser(const edm::ParameterSet&); + ~analyser(){}; + +private: + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void beginJob() ; + virtual void endJob() ; + + void propagate(const reco::Muon* mu, int prop_type, const edm::Event& iEvent, int i); + void CSCSegmentCounter(const reco::Muon* mu, MuonData& data_); + void propagate_to_GEM(const reco::Muon* mu, const GEMEtaPartition* ch, int prop_type, bool &tmp_has_prop, GlobalPoint &pos_GP, MuonData& data_); + void GEM_rechit_matcher(const GEMEtaPartition* ch, LocalPoint prop_LP, MuonData& data_); + void GEM_simhit_matcher(const GEMEtaPartition* ch, GlobalPoint prop_GP, MuonData& data_); + float RdPhi_func(float stripAngle, const edm::OwnVector >::const_iterator rechit, float prop_localx, float prop_localy, const GEMEtaPartition* ch); + bool fidcutCheck(float local_y, float localphi_deg, const GEMEtaPartition* ch); + + edm::EDGetTokenT gemRecHits_; + edm::Handle gemRecHits; + edm::EDGetTokenT > gemSimHits_; + edm::Handle > gemSimHits; + edm::EDGetTokenT > muons_; + + edm::Service fs; + + MuonServiceProxy* theService_; + edm::ESHandle propagator_; + edm::ESHandle ttrackBuilder_; + + ESHandle theTrackingGeometry; + + edm::ESHandle GEMGeometry_; + edm::ESHandle CSCGeometry_; + + bool CSC_prop; bool tracker_prop; bool Segment_prop; + vector prop_list; + bool debug; + bool isCosmic; + + MuonData data_; + TTree* CSC_tree; TTree* Tracker_tree; TTree* Segment_tree; + + bool isMC; + const CSCSegment *ME11_segment; +}; + +analyser::analyser(const edm::ParameterSet& iConfig) +{ + cout << "Begin analyser" << endl; + edm::ParameterSet serviceParameters = iConfig.getParameter("ServiceParameters"); + theService_ = new MuonServiceProxy(serviceParameters, consumesCollector()); + + muons_ = consumes >(iConfig.getParameter("muons")); + gemRecHits_ = consumes(iConfig.getParameter("gemRecHits")); + gemSimHits_ = consumes >(iConfig.getParameter("gemSimHits")); + + tracker_prop = iConfig.getParameter("tracker_prop"); + CSC_prop = iConfig.getParameter("CSC_prop"); + Segment_prop = iConfig.getParameter("Segment_prop"); + debug = iConfig.getParameter("debug"); + isCosmic = iConfig.getParameter("isCosmic"); + cout << "tracker_prop " << tracker_prop << " CSC_prop " << CSC_prop << " Segment_prop " << Segment_prop << " debug " << debug << std::endl; + + if(CSC_prop){CSC_tree = data_.book(CSC_tree, 1); prop_list.push_back(1);} + if(tracker_prop){Tracker_tree = data_.book(Tracker_tree, 2); prop_list.push_back(2);} + if(Segment_prop){Segment_tree = data_.book(Segment_tree, 3); prop_list.push_back(3);} +} + + +void +analyser::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){ + iSetup.get().get(GEMGeometry_); + iSetup.get().get(CSCGeometry_); + + iSetup.get().get("TransientTrackBuilder",ttrackBuilder_); + + iSetup.get().get(theTrackingGeometry); + + theService_->update(iSetup); + auto propagator = theService_->propagator("SteppingHelixPropagatorAny"); + + isMC = false; + if (! iEvent.eventAuxiliary().isRealData()) isMC = true; + iEvent.getByToken(gemRecHits_, gemRecHits); + if (isMC) { + iEvent.getByToken(gemSimHits_, gemSimHits); + } + edm::Handle > muons; + if (! iEvent.getByToken(muons_, muons)) return; + if (muons->size() == 0) return; + + if (debug) cout << "new evt numb is " << iEvent.eventAuxiliary().event() << " and new lumiblock is " << iEvent.eventAuxiliary().luminosityBlock() << endl; + + if (debug) cout << "Run Number is " << iEvent.run() << std::endl; + for (size_t i = 0; i < muons->size(); ++i){ + //cout << "new muon" << endl; + edm::RefToBase muRef = muons->refAt(i); + const reco::Muon* mu = muRef.get(); + + //if (mu->pt() < 2.0) continue; //can apply a pt cut later + if (not mu->standAloneMuon()) continue; + if (debug) cout << "new standalone" << endl; + for(auto it = std::begin(prop_list); it != std::end(prop_list); ++it){ + if (debug) std::cout << "prop " << *it << "about to start propagate" << std::endl; + int prop_type = *it; + propagate(mu, prop_type, iEvent, i); + } + } +} + + +float analyser::RdPhi_func(float stripAngle, const edm::OwnVector >::const_iterator rechit, float prop_localx, float prop_localy, const GEMEtaPartition* ch){ + GEMDetId gemid((rechit)->geographicalId()); + const auto& etaPart = GEMGeometry_->etaPartition(gemid); + const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); + float deltay_roll = etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).perp() - etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2)).perp(); + return cos(stripAngle) * (prop_localx - (rechit)->localPosition().x()) - sin(stripAngle) * (prop_localy + deltay_roll); +} +void analyser::CSCSegmentCounter(const reco::Muon* mu, MuonData& data_){ + const reco::Track* Track = mu->outerTrack().get(); + int tmp_CSC_counter = 0; int tmp_DT_counter = 0; int tmp_ME11_counter = 0; int tmp_ME11RecHit_counter = 0; float tmp_ME11_BunchX = 99999; int tmp_ME11_strip = 99999; bool tmp_hasME11A = 0; + if(isCosmic){ + tmp_CSC_counter = mu->numberOfSegments(1,2) + mu->numberOfSegments(2,2) + mu->numberOfSegments(3,2) + mu->numberOfSegments(4,2); + tmp_DT_counter = mu->numberOfSegments(1,1) + mu->numberOfSegments(2,1) + mu->numberOfSegments(3,1) + mu->numberOfSegments(4,1); + auto matches = mu->matches(); + for (auto MCM : matches){ + if(MCM.detector() != 2) continue; + for(auto MSM : MCM.segmentMatches){ + auto cscSegRef = MSM.cscSegmentRef; + auto cscDetID = cscSegRef->cscDetId(); + if(cscDetID.station() == 1 and (cscDetID.ring() == 1 or cscDetID.ring() == 4)){ + if(cscDetID.ring() == 4){tmp_hasME11A = 1;} + tmp_ME11_counter++; + ME11_segment = cscSegRef.get(); + tmp_ME11RecHit_counter = (cscSegRef.get())->nRecHits(); // Find the real function for this. Bad if multiple segments. + tmp_ME11_BunchX = ME11_segment->time(); + auto cscDetID_FAKE = CSCDetId(cscDetID.endcap(), cscDetID.station(), cscDetID.ring(), cscDetID.chamber(), 3); + const CSCLayer* tmp_ME11_layer = CSCGeometry_->layer(cscDetID_FAKE); + const CSCLayerGeometry* tmp_ME11_layer_geo = tmp_ME11_layer->geometry(); + tmp_ME11_strip = tmp_ME11_layer_geo->nearestStrip(ME11_segment->localPosition()); + data_.ME11_location[0] = cscDetID.endcap(); data_.ME11_location[1] = cscDetID.station(); data_.ME11_location[2] = cscDetID.ring(); data_.ME11_location[3] = cscDetID.chamber(); data_.ME11_location[4] = cscDetID.layer(); + } + } + } + } + else{ + for (size_t RecHit_iter = 0; RecHit_iter != Track->recHitsSize(); RecHit_iter++){ + const TrackingRecHit* RecHit = (Track->recHit(RecHit_iter)).get(); + DetId RecHitId = RecHit->geographicalId(); + uint16_t RecHitDetId = RecHitId.det(); + if (RecHitDetId == DetId::Muon){ + uint16_t RecHitSubDet = RecHitId.subdetId(); + if (RecHitSubDet == (uint16_t)MuonSubdetId::CSC){ + if (CSCDetId(RecHitId).station() == 1 and CSCDetId(RecHitId).ring() == 1 and RecHit->dimension() == 4){ + tmp_ME11_counter++; + RecSegment* Rec_segment = (RecSegment*)RecHit; + ME11_segment = (CSCSegment*)Rec_segment; + tmp_ME11_BunchX = ((CSCRecHit2D*)RecHit)->wgroupsBX(); + auto cscDetID_FAKE = CSCDetId(CSCDetId(RecHitId).endcap(), CSCDetId(RecHitId).station(), CSCDetId(RecHitId).ring(), CSCDetId(RecHitId).chamber(), 3); + const CSCLayer* tmp_ME11_layer = CSCGeometry_->layer(cscDetID_FAKE); + const CSCLayerGeometry* tmp_ME11_layer_geo = tmp_ME11_layer->geometry(); + tmp_ME11_strip = tmp_ME11_layer_geo->nearestStrip(ME11_segment->localPosition()); + data_.ME11_location[0] = CSCDetId(RecHitId).endcap(); data_.ME11_location[1] = CSCDetId(RecHitId).station(); data_.ME11_location[2] = CSCDetId(RecHitId).ring(); data_.ME11_location[3] = CSCDetId(RecHitId).chamber(); data_.ME11_location[4] = CSCDetId(RecHitId).layer(); + } + if (CSCDetId(RecHitId).station() == 1 and CSCDetId(RecHitId).ring() == 1){tmp_ME11RecHit_counter++;} + if (RecHit->dimension() == 4){tmp_CSC_counter++;} + } + if (RecHitSubDet == (uint16_t)MuonSubdetId::DT){ + if (RecHit->dimension() > 1){tmp_DT_counter++;} + } + } + } + } + data_.nCSCSeg = tmp_CSC_counter; data_.nDTSeg = tmp_DT_counter; + data_.n_ME11_segment = tmp_ME11_counter; + data_.nME11RecHits = tmp_ME11RecHit_counter; + data_.ME11_BunchX = tmp_ME11_BunchX; + data_.ME11_strip = tmp_ME11_strip; + data_.hasME11A = tmp_hasME11A; + if(data_.n_ME11_segment >= 1 and data_.n_ME11_segment < 1000){data_.hasME11 = 1;} +} +void analyser::propagate_to_GEM(const reco::Muon* mu, const GEMEtaPartition* ch, int prop_type, bool &tmp_has_prop, GlobalPoint &pos_GP, MuonData& data_){ + const reco::Track* Track; + reco::TransientTrack track; + tmp_has_prop = false; + const BoundPlane& bps(ch->surface()); + auto propagator = theService_->propagator("SteppingHelixPropagatorAny"); + const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); + TrajectoryStateOnSurface tsos_ch; TrajectoryStateOnSurface tsos_seg; + GlobalPoint pos_startingPoint_GP; + if(prop_type == 1 or prop_type == 2){ + if(prop_type == 1){ + Track = mu->outerTrack().get(); + track = ttrackBuilder_->build(Track); + } + if(prop_type == 2){ + Track = mu->track().get(); + //Track = mu->outerTrack().get(); + track = ttrackBuilder_->build(Track); + } + float inner_delta = abs(track.innermostMeasurementState().globalPosition().z() - GEMGeometry_->etaPartition(ch->id())->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).z()); + float outer_delta = abs(track.outermostMeasurementState().globalPosition().z() - GEMGeometry_->etaPartition(ch->id())->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).z()); + float used_delta = 0; + if (inner_delta < outer_delta){ + tsos_seg = track.innermostMeasurementState(); tsos_ch = propagator->propagate(tsos_seg, ch->surface()); used_delta = inner_delta; + if(prop_type == 1){data_.which_track = 1;} + else{data_.which_track = 0;} + } + else{ + tsos_seg = track.outermostMeasurementState(); tsos_ch = propagator->propagate(tsos_seg, ch->surface()); used_delta = outer_delta; + if(prop_type == 1){data_.which_track = 0;} + else{data_.which_track = 1;} + } + if (tsos_ch.isValid()){ + const LocalPoint pos_local_ch = ch->toLocal(tsos_ch.globalPosition()); + const LocalPoint pos2D_local_ch(pos_local_ch.x(), pos_local_ch.y(), 0); + if (!(tsos_ch.globalPosition().z() * tsos_seg.globalPosition().z() < 0) and bps.bounds().inside(pos2D_local_ch) and ch->id().station() == 1 and ch->id().ring() == 1){ + tmp_has_prop = true; + if (debug) std::cout << "Delta to GEM!!! = " << used_delta << " prop " << prop_type << std::endl; + pos_GP = tsos_ch.globalPosition(); + pos_startingPoint_GP = tsos_seg.globalPosition(); + } + } + } + if(prop_type == 3){ + Track = mu->track().get(); + DetId segDetId = ME11_segment->geographicalId(); + const GeomDet* segDet = theTrackingGeometry->idToDet(segDetId); + LocalVector momentum_at_surface = ME11_segment->localDirection(); //No momentum for segments + if (Track != 0){ + momentum_at_surface = momentum_at_surface*(Track->outerP()); //If innerTrack exists, use momentum + } + LocalTrajectoryParameters param(ME11_segment->localPosition(), momentum_at_surface, mu->charge()); + AlgebraicSymMatrix mat(5,0); + mat = ME11_segment->parametersError().similarityT( ME11_segment->projectionMatrix() ); + LocalTrajectoryError error(asSMatrix<5>(mat)); + TrajectoryStateOnSurface tsos_seg(param, error, segDet->surface(), &*theService_->magneticField()); + TrajectoryStateOnSurface tsos_ch = propagator->propagate(tsos_seg, ch->surface()); + //tsos_ch = propagator->propagate(tsos_seg, ch->surface()); + if (tsos_ch.isValid()){ + const LocalPoint pos_local_ch = ch->toLocal(tsos_ch.globalPosition()); + const LocalPoint pos2D_local_ch(pos_local_ch.x(), pos_local_ch.y(), 0); + if (!(tsos_ch.globalPosition().z() * tsos_seg.globalPosition().z() < 0) and bps.bounds().inside(pos2D_local_ch) and ch->id().station() == 1 and ch->id().ring() == 1){ + tmp_has_prop = true; + pos_GP = tsos_ch.globalPosition(); + pos_startingPoint_GP = tsos_seg.globalPosition(); + } + } + } + if(tmp_has_prop){ + const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); + const float prop_y_to_center = etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).perp(); //y distance to the current eta part + const float prop_y_to_chamber = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2))).y(); + LocalPoint tmp_prop_LP = ch->toLocal(pos_GP); + data_.prop_GP[0] = pos_GP.x(); data_.prop_GP[1] = pos_GP.y(); data_.prop_GP[2] = pos_GP.z(); + data_.prop_LP[0] = tmp_prop_LP.x(); data_.prop_LP[1] = tmp_prop_LP.y() + prop_y_to_chamber; data_.prop_LP[2] = tmp_prop_LP.z(); + data_.prop_startingPoint_GP[0] = pos_startingPoint_GP.x(); data_.prop_startingPoint_GP[1] = pos_startingPoint_GP.y(); data_.prop_startingPoint_GP[2] = pos_startingPoint_GP.z(); + data_.prop_yroll = tmp_prop_LP.y(); + LocalPoint local_to_center(tmp_prop_LP.x(), tmp_prop_LP.y() + prop_y_to_center, 0); + float local_phi = local_to_center.phi(); + data_.prop_localphi_rad = (3.14159265/2.) - local_phi; + data_.prop_localphi_deg = ((3.14159265/2.) - local_phi)*(180./3.14159265); + data_.has_prop = tmp_has_prop; + data_.has_fidcut = fidcutCheck(tmp_prop_LP.y(), ((3.14159265/2.) - local_phi)*(180./3.14159265), ch); + data_.prop_location[0] = ch->id().region(); data_.prop_location[1] = ch->id().station(); data_.prop_location[2] = ch->id().chamber(); data_.prop_location[3] = ch->id().layer(); data_.prop_location[4] = ch->id().roll(); + } +} +void analyser::GEM_rechit_matcher(const GEMEtaPartition* ch, LocalPoint prop_LP, MuonData& data_){ + float tmp_rechit_GP_x; float tmp_rechit_GP_y; float tmp_rechit_GP_z; + float tmp_rechit_LP_x; float tmp_rechit_LP_y; float tmp_rechit_LP_z; + float tmp_rechit_yroll; float tmp_rechit_localphi_rad; float tmp_rechit_localphi_deg; + bool tmp_has_rechit = false; + int tmp_rechit_first_strip; int tmp_rechit_CLS; int tmp_rechit_BunchX; + float tmp_RdPhi = 9999.; float tmp_RdPhi_Corrected; int tmp_rechit_detId; + int tmp_nRecHitsTot = 0; int tmp_nRecHits5 = 0; int tmp_nRecHits2 = 0; + int tmp_rechit_region; int tmp_rechit_station; int tmp_rechit_chamber; int tmp_rechit_layer; int tmp_rechit_roll; + int tmp_nRecHitsRpos1L1 = 0; int tmp_nRecHitsRpos1L2 = 0; int tmp_nRecHitsRneg1L1 = 0; int tmp_nRecHitsRneg1L2 = 0; + for(auto hit = gemRecHits->begin(); hit != gemRecHits->end(); hit++){ + if((hit)->geographicalId().det() == DetId::Detector::Muon && (hit)->geographicalId().subdetId() == MuonSubdetId::GEM){ + GEMDetId gemid((hit)->geographicalId()); + if(gemid.region() == 1){ + if(gemid.layer() == 1){tmp_nRecHitsRpos1L1++;} + if(gemid.layer() == 2){tmp_nRecHitsRpos1L2++;} + } + if(gemid.region() == -1){ + if(gemid.layer() == 1){tmp_nRecHitsRneg1L1++;} + if(gemid.layer() == 2){tmp_nRecHitsRneg1L2++;} + } + if(gemid.station() == ch->id().station() and gemid.chamber() == ch->id().chamber() and gemid.layer() == ch->id().layer() and abs(gemid.roll() - ch->id().roll()) <= 1 and gemid.region() == ch->id().region()){ + const auto& etaPart = GEMGeometry_->etaPartition(gemid); + float strip = etaPart->strip(hit->localPosition()); + float stripAngle = etaPart->specificTopology().stripAngle(strip); + float rechit_y_to_center = etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2)).perp(); + float rechit_y_to_chamber = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2))).y(); + LocalPoint local_to_center((hit)->localPosition().x(), rechit_y_to_center + (hit)->localPosition().y(), 0); + if (ch->id().station() == 1 and ch->id().ring() == 1 and fabs((hit)->localPosition().x() - prop_LP.x()) < 999.0){ + tmp_nRecHitsTot++; + if(abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch)) < 5){tmp_nRecHits5++;} + if(abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch)) < 2){tmp_nRecHits2++;} + if(abs(tmp_RdPhi) > abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch))){ + tmp_rechit_GP_x = etaPart->toGlobal((hit)->localPosition()).x(); tmp_rechit_GP_y = etaPart->toGlobal((hit)->localPosition()).y(); tmp_rechit_GP_z = etaPart->toGlobal((hit)->localPosition()).z(); + tmp_rechit_LP_x = (hit)->localPosition().x(); tmp_rechit_LP_y = rechit_y_to_chamber + (hit)->localPosition().y(); tmp_rechit_LP_z = (hit)->localPosition().z(); + tmp_rechit_yroll = (hit)->localPosition().y(); + float local_phi = local_to_center.phi(); + tmp_rechit_localphi_rad = (3.14159265/2.) - local_phi; + tmp_rechit_localphi_deg = ((3.14159265/2.) - local_phi)*(180./3.14159265); + tmp_has_rechit = true; + tmp_rechit_first_strip = (hit)->firstClusterStrip(); + tmp_rechit_CLS = (hit)->clusterSize(); + tmp_rechit_BunchX = (hit)->BunchX(); + tmp_RdPhi = RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch); + tmp_RdPhi_Corrected = tmp_RdPhi; + if((gemid.region() == 1 and gemid.chamber()%2 == 1) || (gemid.region() == -1 && gemid.chamber()%2 == 0)){ + tmp_RdPhi_Corrected = -1.0*tmp_RdPhi_Corrected; + } + tmp_rechit_detId = gemid.region()*(gemid.station()*100 + gemid.chamber()); + tmp_rechit_region = gemid.region(); tmp_rechit_station = gemid.station(); tmp_rechit_chamber = gemid.chamber(); tmp_rechit_layer = gemid.layer(); tmp_rechit_roll = gemid.roll(); + } + } + } + } + } + if(tmp_has_rechit){ + data_.rechit_GP[0] = tmp_rechit_GP_x; data_.rechit_GP[1] = tmp_rechit_GP_y; data_.rechit_GP[2] = tmp_rechit_GP_z; + data_.rechit_LP[0] = tmp_rechit_LP_x; data_.rechit_LP[1] = tmp_rechit_LP_y; data_.rechit_LP[2] = tmp_rechit_LP_z; + data_.rechit_yroll = tmp_rechit_yroll; + data_.rechit_localphi_rad = tmp_rechit_localphi_rad; + data_.rechit_localphi_deg = tmp_rechit_localphi_deg; + data_.has_rechit = tmp_has_rechit; + data_.rechit_first_strip = tmp_rechit_first_strip; + data_.rechit_CLS = tmp_rechit_CLS; + data_.rechit_BunchX = tmp_rechit_BunchX; + data_.RdPhi = tmp_RdPhi; + data_.RdPhi_Corrected = tmp_RdPhi_Corrected; + data_.rechit_detId = tmp_rechit_detId; + data_.nRecHitsTot = tmp_nRecHitsTot; data_.nRecHits5 = tmp_nRecHits5; data_.nRecHits2 = tmp_nRecHits2; + data_.rechit_location[0] = tmp_rechit_region; data_.rechit_location[1] = tmp_rechit_station; data_.rechit_location[2] = tmp_rechit_chamber; data_.rechit_location[3] = tmp_rechit_layer; data_.rechit_location[4] = tmp_rechit_roll; + data_.nRecHitsRpos1L1 = tmp_nRecHitsRpos1L1; data_.nRecHitsRpos1L2 = tmp_nRecHitsRpos1L2; data_.nRecHitsRneg1L1 = tmp_nRecHitsRneg1L1; data_.nRecHitsRneg1L2 = tmp_nRecHitsRneg1L2; + } +} +void analyser::GEM_simhit_matcher(const GEMEtaPartition* ch, GlobalPoint prop_GP, MuonData& data_){ + float tmpDy = 999.; float tmpDr = 999.; int tmpSimCounter = 0; + float tmp_sim_GP_x; float tmp_sim_GP_y; float tmp_sim_GP_z; + float tmp_sim_LP_x; float tmp_sim_LP_y; float tmp_sim_LP_z; + bool has_tmp = false; + for (const auto& simHit:*gemSimHits.product()){ + GEMDetId gemid((simHit).detUnitId()); + if (gemid.station() == ch->id().station() and gemid.chamber() == ch->id().chamber() and gemid.layer() == ch->id().layer() and abs(gemid.roll() - ch->id().roll()) <= 1 and gemid.region() == ch->id().region()){ + tmpSimCounter++; + const auto& etaPart = GEMGeometry_->etaPartition(gemid); + float dy = prop_GP.y() - etaPart->toGlobal(simHit.localPosition()).y(); + float dx = prop_GP.x() - etaPart->toGlobal(simHit.localPosition()).x(); + if (dy < tmpDy) tmpDy = dy; + if (pow(pow(dy, 2) + pow(dx, 2), 0.5) < tmpDr){ + tmp_sim_GP_x = etaPart->toGlobal(simHit.localPosition()).x(); + tmp_sim_GP_y = etaPart->toGlobal(simHit.localPosition()).y(); + tmp_sim_GP_z = etaPart->toGlobal(simHit.localPosition()).z(); + tmp_sim_LP_x = simHit.localPosition().x(); + tmp_sim_LP_y = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2))).y() + simHit.localPosition().y(); + tmp_sim_LP_z = simHit.localPosition().z(); + tmpDr = pow(pow(dy, 2) + pow(dx, 2), 0.5); + has_tmp = true; + } + } + } + if(has_tmp){ + data_.sim_GP[0] = tmp_sim_GP_x; data_.sim_GP[1] = tmp_sim_GP_y; data_.sim_GP[2] = tmp_sim_GP_z; + data_.sim_LP[0] = tmp_sim_LP_x; data_.sim_LP[1] = tmp_sim_LP_y; data_.sim_LP[2] = tmp_sim_LP_z; + data_.simDy = (tmpDy); + data_.nSim = (tmpSimCounter); + } +} +void analyser::propagate(const reco::Muon* mu, int prop_type, const edm::Event& iEvent, int i){ + const reco::Track* Track; + reco::TransientTrack ttTrack; + TTree* tree; + if(prop_type == 1){ //If want to swith to global, use mu->globalTrack().get() + tree = CSC_tree; + if(!(mu->outerTrack().isNonnull())){return;} + Track = mu->outerTrack().get(); + ttTrack = ttrackBuilder_->build(Track); + } + else if (prop_type == 2){ + tree = Tracker_tree; + if(!(mu->track().isNonnull())){return;} + Track = mu->track().get(); + ttTrack = ttrackBuilder_->build(Track); + } + else if (prop_type == 3){ + tree = Segment_tree; + if(isCosmic){ + if(!(mu->outerTrack().isNonnull())){return;} + Track = mu->outerTrack().get(); + ttTrack = ttrackBuilder_->build(Track); + } + else{ + if(!(mu->track().isNonnull())){return;} + Track = mu->track().get(); + ttTrack = ttrackBuilder_->build(Track); + } + } + else{ + std::cout << "Bad prop type, failure." << std::endl; return; + } + if(!ttTrack.isValid()){std::cout << "BAD EVENT! NO TRACK" << std::endl;} + data_.init(); + //Muon Info////////////////////////////////////////////////////// + data_.muon_charge = mu->charge(); data_.muon_pt = mu->pt(); data_.muon_eta = mu->eta(); data_.muon_momentum = mu->momentum().mag2(); + data_.evtNum = iEvent.eventAuxiliary().event(); data_.lumiBlock = iEvent.eventAuxiliary().luminosityBlock(); data_.muonIdx = data_.evtNum*100 + i; + data_.runNum = iEvent.run(); + //Track Info////////////////////////////////////////////////////// + data_.track_chi2 = Track->chi2(); data_.track_ndof = Track->ndof(); + CSCSegmentCounter(mu, data_); + if(prop_type == 3 and data_.hasME11 != 1){return;} + //which_track + //Propagation Info////////////////////////////////////////////////////// + for (const auto& ch : GEMGeometry_->etaPartitions()) { + if (ch->id().station() != 1) continue; //Only takes GE1/1 + GlobalPoint tmp_prop_GP; bool tmp_has_prop = 0; + propagate_to_GEM(mu, ch, prop_type, tmp_has_prop, tmp_prop_GP, data_); + if(tmp_has_prop){ + LocalPoint tmp_prop_LP = ch->toLocal(tmp_prop_GP); + //Rechit Info////////////////////////////////////////////////////// + GEM_rechit_matcher(ch, tmp_prop_LP, data_); + if(isMC){ + GEM_simhit_matcher(ch, tmp_prop_GP, data_); + } + tree->Fill(); + } + } + //tree->Fill(); +} + + + +bool analyser::fidcutCheck(float local_y, float localphi_deg, const GEMEtaPartition* ch){ + const float fidcut_angle = 1.0; + const float cut_chamber = 5.0; + const float cut_angle = 5.0 - fidcut_angle; + auto& parameters(ch->specs()->parameters()); + float height(parameters[2]); + if ((abs(localphi_deg) < cut_angle) && ((local_y < (height - cut_chamber) && ch->id().roll() == 1) || (local_y > -1.0*(height - cut_chamber) && ch->id().roll() == 8) || (ch->id().roll() != 1 && ch->id().roll() != 8))){return 1;} + else{return 0;} +} + + + +void analyser::beginJob(){} +void analyser::endJob(){} + +DEFINE_FWK_MODULE(analyser); diff --git a/GEMCSCBendingAnalyzer/test/.__afs001 b/GEMCSCBendingAnalyzer/test/.__afs001 new file mode 100644 index 0000000000000000000000000000000000000000..dc67588d25f430d761abcb632d88fa307528d2f0 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!obM8^m$tDJi#}6L?i6FI`_Q?067W_ A>Hq)$ literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afs0636 b/GEMCSCBendingAnalyzer/test/.__afs0636 new file mode 100644 index 0000000000000000000000000000000000000000..6b0414939a0b4cf1f8a8c01d81b0298b671b016c GIT binary patch literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oXNREBH+ALcurvFY=~zb?$o)mm$Dt zV*nZCmE)O^$Y8?&vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9spz`FP#7Y literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afs10D2 b/GEMCSCBendingAnalyzer/test/.__afs10D2 new file mode 100644 index 0000000000000000000000000000000000000000..bf4283189c68abe7a0ed3298217c408d7a9c55ab GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYayq`6G)Ji#}!FGbjOb?$o)06n)2 AZ2$lO literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afs1E7B b/GEMCSCBendingAnalyzer/test/.__afs1E7B new file mode 100644 index 0000000000000000000000000000000000000000..4792b38068e20839af7b3ddf3bb3ff46ed3765ef GIT binary patch literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYa^BBwy^Lcup3zIju+I`_SY%Mf6+ zF@Oy6%JEEi%wWR+vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9surRF3|u0 literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afs71FB b/GEMCSCBendingAnalyzer/test/.__afs71FB new file mode 100644 index 0000000000000000000000000000000000000000..d4441dbec9a20aea1995ba72a101d1883bd73d66 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oc`@uWm^00>L+ZToHC%o%`Mc06dip A?EnA( literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afs98B8 b/GEMCSCBendingAnalyzer/test/.__afs98B8 new file mode 100644 index 0000000000000000000000000000000000000000..9ac06e11ced1cd0b76bdcc0b58f595b8a02709b1 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oavqCUH*gbip^>Je{>&o%`Mc05?hu A=>Px# literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afsA9DC b/GEMCSCBendingAnalyzer/test/.__afsA9DC new file mode 100644 index 0000000000000000000000000000000000000000..694482b580ee74f8a34835671cf8482528cb06d7 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZ!k@ZjRY{54x1v_iII`_Q?069Dj AAOHXW literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afsB331 b/GEMCSCBendingAnalyzer/test/.__afsB331 new file mode 100644 index 0000000000000000000000000000000000000000..8f03dc7e28fde06db780527a61c0346cdd10f32d GIT binary patch literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oaAIGF>irq2QZc_IXpfI`_SY%Mf6+ zF@Oy6%JGcb#$dw$vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9sqhyEt~)V literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afsD94B b/GEMCSCBendingAnalyzer/test/.__afsD94B new file mode 100644 index 0000000000000000000000000000000000000000..d8d9722dac54e2aea8b2da2fcb66000ea1620057 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZ#!%8N1w&0sp3Z1oGo%`Mc05ALu AasU7T literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/.__afsE2FC b/GEMCSCBendingAnalyzer/test/.__afsE2FC new file mode 100644 index 0000000000000000000000000000000000000000..bcdf5a2257a58bc53564d7c3a49b65f53ceb1d19 GIT binary patch literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZRe^E^C0>L+14o28@b?$o)07J43 A;{X5v literal 0 HcmV?d00001 diff --git a/GEMCSCBendingAnalyzer/test/analyser.py b/GEMCSCBendingAnalyzer/test/analyser.py new file mode 100644 index 0000000..b1ba543 --- /dev/null +++ b/GEMCSCBendingAnalyzer/test/analyser.py @@ -0,0 +1,74 @@ +import FWCore.ParameterSet.Config as cms +#from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 +from Configuration.Eras.Era_Run3_cff import Run3 + +#process = cms.Process('analyser',Phase2C9) +process = cms.Process('analyser',Run3) + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') +#process.load('Configuration.StandardSequences.MagneticField_0T_cff') #0T for cruzet runs + +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +#process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') +process.load('RecoMuon.TrackingTools.MuonServiceProxy_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') + +from Configuration.AlCa.GlobalTag import GlobalTag +#process.CSCGeometryESModule.applyAlignment = cms.bool(False) + +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_design', '') + +process.MessageLogger.cerr.FwkReport.reportEvery = 5000 + +from FWCore.ParameterSet.VarParsing import VarParsing +options = VarParsing('analysis') +options.register ('nEvents', + -1, #Max number of events + VarParsing.multiplicity.singleton, + VarParsing.varType.int, + "Number of events") +options.parseArguments() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.nEvents) +) +process.maxEvents.input = cms.untracked.int32(-1) + + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(options.inputFiles), + inputCommands = cms.untracked.vstring( + "keep *", + "drop TotemTimingDigiedmDetSetVector_totemTimingRawToDigi_TotemTiming_reRECO", + "drop TotemTimingRecHitedmDetSetVector_totemTimingRecHits__reRECO" + ) + ) + +#process.source.fileNames.append('file:step2.root') +process.source.fileNames.append('/store/data/Commissioning2021/ZeroBias0/AOD/PromptReco-v1/000/346/490/00000/9d646c8b-8067-42e4-adfe-ea69403eaa64.root') + +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') + ) + +process.TFileService = cms.Service("TFileService", fileName = cms.string("out_ana.root")) + +process.analyser = cms.EDAnalyzer('analyser', + process.MuonServiceProxy, + gemRecHits = cms.InputTag("gemRecHits"), + gemSimHits = cms.InputTag("g4SimHits", "MuonGEMHits"), + muons = cms.InputTag("muons"), + vertexCollection = cms.InputTag("offlinePrimaryVerticies"), + #Which propagations to do + tracker_prop = cms.bool(True), #From inner track + CSC_prop = cms.bool(True), #From CSC track + Segment_prop = cms.bool(True), #From ME1/1 segment + debug = cms.bool(False), + isCosmic = cms.bool(True) #Cosmics go in opposite direction, ignores inner track +) + +#process.p = cms.EndPath(process.analyser) +process.p = cms.Path(process.analyser) diff --git a/GEMCSCBendingAnalyzer/test/crab3_runana_MC.py b/GEMCSCBendingAnalyzer/test/crab3_runana_MC.py new file mode 100644 index 0000000..1bac21e --- /dev/null +++ b/GEMCSCBendingAnalyzer/test/crab3_runana_MC.py @@ -0,0 +1,54 @@ +#from CRABClient.UserUtilities import config, getUsernameFromSiteDB +from CRABClient.UserUtilities import config +config = config() +###2018runA 314472-318876 +#section general +config.General.requestName = 'analyser' +config.General.workArea = 'pTcheck_1134GT2021design_1203_nov9'#working dir +config.General.transferOutputs = True +config.General.transferLogs = True + +#section JobType +config.JobType.pluginName = 'Analysis' +config.JobType.psetName = 'analyser.py' +config.JobType.maxMemoryMB = 2000 +config.JobType.maxJobRuntimeMin = 1440 # 1440min = 24hours +config.JobType.numCores = 1 +config.JobType.allowUndistributedCMSSW = True +#config.JobType.generator +#config.JobType.pyCfgParams +#config.JobType.inputFiles + +#config.JobType.inputFiles = ['/uscms/home/daebi/nobackup/analyser/CMSSW_11_0_0/src/GEMCSCBendingAnalyzer/MuonAnalyser/test/test.db'] + +#section Data +#config.Data.inputDataset = '/singleMuonGun_MuAl_pT-30to200_1102_phase1_2021_realistic/hyunyong-crab_singleMuonGun_pT-30to200_1102_phase1_2021_realistic_RAW2DIGI_FullRECOv4-1b4eba2dcd577d6bb642bb3e45609e5f/USER' +#config.Data.inputDataset = '/Cosmics/Commissioning2021-CosmicSP-PromptReco-v1/RAW-RECO' +#config.Data.inputDataset = '/Cosmics/Commissioning2021-CosmicTP-PromptReco-v1/RAW-RECO' +config.Data.inputDataset = '/singleMuonGun_pT_20_200_CMSSW_11_3_4_GT_2021_design/hyunyong-crab_singleMuonGun_11_3_4_2021_design_RAW2DIGI_RECO_v3-ce33467258ba6d6e1b97c4b94c6a3a02/USER' + +#config.Data.runRange = '342810,342966,343034,343082,343171,343266,343387,344134,344186,344266,344366' + + +config.Data.inputDBS = 'phys03' +#config.Data.inputDBS = 'global' +config.Data.splitting = 'FileBased' +#config.Data.splitting = 'LumiBased' +#config.Data.splitting = 'Automatic' +config.Data.unitsPerJob = 1 +config.Data.outLFNDirBase = '/store/user/daebi/' +#config.Data.outLFNDirBase = '/store/group/lpcgem/' +config.Data.publication = False +#import FWCore.PythonUtilities.LumiList as LumiList +##lumiList = LumiList(filename='my_original_lumi_mask.json') +#lumiList = LumiList(filename='320887_13TeV_PromptReco_Collisions18_JSON_MuonPhys.txt') +#lumiList.selectRuns(runs = [321475, 321461, 321457, 321434, 321433, 321432, 321431, 321415, 321414, 321396, 321393, 321313, 321312, 321311, 321310, 321305, 321218, 321178, 321177, 321167, 321166, 321165, 321164, 321162, 321149, 321140, 321138, 321134, 321126, 321123, 321122, 321121, 321119, 321069, 321068, 321067, 321055, 321051, 320996, 320995]) +#lumiList.writeJSON('my_lumi_mask.json') +#config.Data.lumiMask = 'my_lumi_mask.json' +#process.source.lumisToProcess = LumiList.LumiList(filename = 'goodList.json').getVLuminosityBlockRange() +#config.Data.runRange = '%d-%d'%(runstart, runend)#'315257-315270'#'278820-278820' # '193093-194075' +config.Data.outputDatasetTag = config.General.requestName +config.Site.storageSite = 'T3_US_FNALLPC' +config.Site.ignoreGlobalBlacklist = True +#config.Site.whitelist = ["T2_KR_KISTI"] +#config.Site.whitelist = ["T0_CH_CERN_MSS"] diff --git a/GEMCSCBendingAnalyzer/test/out_ana.root b/GEMCSCBendingAnalyzer/test/out_ana.root new file mode 100644 index 0000000000000000000000000000000000000000..f2845e01e34eaa45de834a481c04b1570cbe84ae GIT binary patch literal 52712 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%0AxnNz2uO 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 Ad;kCd literal 0 HcmV?d00001 diff --git a/README.md b/README.md index e917ffb..9c65eb4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # alignment GEM alignment studies -CMSSW_12_0_3 - +scram p -n DirectoryName CMSSW_12_0_3 +cd GEMCSCBendingAnalyzer +scram b -j8 +cd test cmsRun analyser.py + +Currently set to run all 3 propagation methods on a test file from 2021 Comissioning ZeroBias0 dataset From 6f90464ecc2f6308da1ab2a9e8a79c3948b0f340 Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 5 Jan 2022 00:10:22 +0100 Subject: [PATCH 2/5] Removed MuonAnalyser folder --- .../MuonAnalyser/plugins/BuildFile.xml | 26 - .../MuonAnalyser/plugins/analyser.cc | 660 ------------------ .../MuonAnalyser/test/analyser.py | 74 -- .../MuonAnalyser/test/crab3_runana_MC.py | 54 -- 4 files changed, 814 deletions(-) delete mode 100644 GEMCSCBendingAnalyzer/MuonAnalyser/plugins/BuildFile.xml delete mode 100644 GEMCSCBendingAnalyzer/MuonAnalyser/plugins/analyser.cc delete mode 100644 GEMCSCBendingAnalyzer/MuonAnalyser/test/analyser.py delete mode 100644 GEMCSCBendingAnalyzer/MuonAnalyser/test/crab3_runana_MC.py diff --git a/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/BuildFile.xml b/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/BuildFile.xml deleted file mode 100644 index 00f4526..0000000 --- a/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/BuildFile.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/analyser.cc b/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/analyser.cc deleted file mode 100644 index c41fd53..0000000 --- a/GEMCSCBendingAnalyzer/MuonAnalyser/plugins/analyser.cc +++ /dev/null @@ -1,660 +0,0 @@ -#include -#include -#include -#include -#include -#include -#define foreach BOOST_FOREACH - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h" -#include "TrackingTools/GeomPropagators/interface/Propagator.h" -#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" -#include "TrackingTools/Records/interface/TransientTrackRecord.h" -#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h" -#include "MagneticField/Engine/interface/MagneticField.h" - -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/TrackReco/interface/Track.h" - -#include "DataFormats/CSCRecHit/interface/CSCRecHit2D.h" -#include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" -#include -#include -#include "Geometry/CSCGeometry/interface/CSCGeometry.h" - -#include "DataFormats/GEMRecHit/interface/GEMRecHitCollection.h" -#include "Geometry/GEMGeometry/interface/GEMGeometry.h" -#include "Geometry/GEMGeometry/interface/GEMEtaPartitionSpecs.h" - -#include "Geometry/Records/interface/MuonGeometryRecord.h" -#include "Geometry/CommonTopologies/interface/StripTopology.h" - -#include "DataFormats/Math/interface/deltaPhi.h" -#include "FWCore/Framework/interface/ESHandle.h" - -#include "TTree.h" -#include "TH1D.h" -#include "TH2D.h" -#include "TString.h" -#include "TGraphAsymmErrors.h" -#include "TLorentzVector.h" - -#include "FWCore/Framework/interface/ConsumesCollector.h" - -#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" - - -using namespace std; -using namespace edm; - - -struct MuonData -{ - void init(); - TTree* book(TTree *t, int prop_type); - //Muon Info////////////////////////////////////////////////////// - int muon_charge; float muon_pt; float muon_eta; float muon_momentum; - unsigned long long evtNum; unsigned long long lumiBlock; int muonIdx; - int runNum; - //Propagation Info////////////////////////////////////////////////////// - float prop_GP[3]; float prop_LP[3]; float prop_startingPoint_GP[3]; - float prop_yroll; float prop_localphi_rad; float prop_localphi_deg; - bool has_prop; bool has_fidcut; - int prop_location[5]; - //Track Info////////////////////////////////////////////////////// - float track_chi2; float track_ndof; int n_ME11_segment; int which_track; - int hasME11; int hasME11RecHit; int hasME11A; int hasME11ARecHit; - int nCSCSeg; int nDTSeg; int nME11RecHits; float ME11_BunchX; int ME11_strip; - int ME11_location[5]; - //Rechit Info////////////////////////////////////////////////////// - float rechit_GP[3]; float rechit_LP[3]; - float rechit_yroll; float rechit_localphi_rad; float rechit_localphi_deg; - bool has_rechit; - int rechit_first_strip; int rechit_CLS; int rechit_BunchX; - float RdPhi; float RdPhi_Corrected; int rechit_detId; - int nRecHitsTot; int nRecHits5; int nRecHits2; - int rechit_location[5]; - int nRecHitsRpos1L1; int nRecHitsRpos1L2; - int nRecHitsRneg1L1; int nRecHitsRneg1L2; - //Sim info for MC - float sim_GP[3]; float sim_LP[3]; - float simDy; float sim_yroll; int nSim; -}; - -void MuonData::init() -{ - //Muon Info////////////////////////////////////////////////////// - muon_charge = 9999; muon_pt = 9999; muon_eta = 9999; muon_momentum = 9999; - evtNum = 99999999; lumiBlock = 99999999; muonIdx = 99999999; runNum = 99999999; - //Propagation Info////////////////////////////////////////////////////// - for(int i=0; i<3; ++i){ - prop_GP[i] = 99999; prop_LP[i] = 99999; prop_startingPoint_GP[i] = 99999; - } - prop_yroll = 99999; prop_localphi_rad = 99999; prop_localphi_deg = 99999; - has_prop = false; has_fidcut = false; - for(int i=0; i<5; ++i){ - prop_location[i] = 99999; - } - //Track Info////////////////////////////////////////////////////// - track_chi2 = 999999; track_ndof = 999999; n_ME11_segment = 999999; which_track = 999999; - hasME11 = 0; hasME11RecHit = 0; hasME11A = 0; hasME11ARecHit = 0; - nCSCSeg = 999999; nDTSeg = 999999; nME11RecHits = 999999; ME11_BunchX = 999999; ME11_strip = 999999; - for(int i=0; i<5; ++i){ - ME11_location[i] = 999999; - } - //Rechit Info////////////////////////////////////////////////////// - for(int i=0; i<3; ++i){ - rechit_GP[i] = 999999; rechit_LP[i] = 999999; - } - rechit_yroll = 999999; rechit_localphi_rad = 999999; rechit_localphi_deg = 999999; - has_rechit = false; - rechit_first_strip = 999999; rechit_CLS = 999999; rechit_BunchX = 999999; - RdPhi = 999999; RdPhi_Corrected = 999999; rechit_detId = 999999; - nRecHitsTot = 999999; nRecHits5 = 999999; nRecHits2 = 999999; - for(int i=0; i<5; ++i){ - rechit_location[i] = 999999; - } - nRecHitsRpos1L1 = 999999; nRecHitsRpos1L2 = 999999; - nRecHitsRneg1L1 = 999999; nRecHitsRneg1L2 = 999999; - //Sim info for MC - for(int i=0; i<3; ++i){ - sim_GP[i] = 9999999; sim_LP[i] = 9999999; - } - simDy = 9999999; sim_yroll = 9999999; nSim = 9999999; -} - -TTree* MuonData::book(TTree *t, int prop_type){ - edm::Service< TFileService > fs; - if(prop_type == 1){ - t = fs->make("CSC_Prop", "CSC_Prop"); - } - else if(prop_type == 2){ - t = fs->make("Inner_Prop", "Inner_Prop"); - } - else if(prop_type == 3){ - t = fs->make("ME11Seg_Prop", "ME11Seg_Prop"); - } - else{ - std::cout << "Bad prop type, failure" << std::endl; - } - //Muon Info////////////////////////////////////////////////////// - t->Branch("muon_charge", &muon_charge); t->Branch("muon_pt", &muon_pt); - t->Branch("muon_eta", &muon_eta); t->Branch("muon_momentum", &muon_momentum); - t->Branch("evtNum", &evtNum); t->Branch("lumiBlock", &lumiBlock); t->Branch("muonIdx", &muonIdx); - t->Branch("runNum", &runNum); - //Propagation Info////////////////////////////////////////////////////// - t->Branch("prop_GP", &prop_GP, "prop_GP[3] (x,y,z)/F"); - t->Branch("prop_LP", &prop_LP, "prop_LP[3] (x,y,z)/F"); - t->Branch("prop_startingPoint_GP", &prop_startingPoint_GP, "prop_startingPoint_GP[3] (x,y,z)/F"); - t->Branch("prop_yroll", &prop_yroll); - t->Branch("prop_localphi_rad", &prop_localphi_rad); - t->Branch("prop_localphi_deg", &prop_localphi_deg); - t->Branch("has_prop", &has_prop); - t->Branch("has_fidcut", &has_fidcut); - t->Branch("prop_location", &prop_location, "prop_location[5] (reg, sta, cha, lay, rol)/I"); - //Track Info////////////////////////////////////////////////////// - t->Branch("track_chi2", &track_chi2); t->Branch("track_ndof", &track_ndof); - t->Branch("n_ME11_segment", &n_ME11_segment); t->Branch("which_track", &which_track); - t->Branch("hasME11", &hasME11); t->Branch("hasME11RecHit", &hasME11RecHit); - t->Branch("hasME11A", &hasME11A); t->Branch("hasME11ARecHit", &hasME11ARecHit); - t->Branch("nCSCSeg", &nCSCSeg); t->Branch("nDTSeg", &nDTSeg); - t->Branch("nME11RecHits", &nME11RecHits); t->Branch("ME11_BunchX", &ME11_BunchX); - t->Branch("ME11_strip", &ME11_strip); - t->Branch("ME11_location", &ME11_location, "ME11_location[5] (end, sta, ring, cha, lay)/I"); - //Rechit Info////////////////////////////////////////////////////// - t->Branch("rechit_GP", &rechit_GP, "rechit_GP[3] (x,y,z)/F"); - t->Branch("rechit_LP", &rechit_LP, "rechit_LP[3] (x,y,z)/F"); - t->Branch("rechit_yroll", &rechit_yroll); - t->Branch("rechit_localphi_rad", &rechit_localphi_rad); - t->Branch("rechit_localphi_deg", &rechit_localphi_deg); - t->Branch("has_rechit", &has_rechit); - t->Branch("rechit_first_strip", &rechit_first_strip); - t->Branch("rechit_CLS", &rechit_CLS); - t->Branch("rechit_BunchX", &rechit_BunchX); - t->Branch("RdPhi", &RdPhi); - t->Branch("RdPhi_Corrected", &RdPhi_Corrected); - t->Branch("rechit_detId", &rechit_detId); - t->Branch("nRecHitsTot", &nRecHitsTot); - t->Branch("nRecHits2", &nRecHits2); - t->Branch("nRecHits5", &nRecHits5); - t->Branch("rechit_location", &rechit_location, "rechit_location[5] (reg, sta, cha, lay, rol)/I"); - t->Branch("nRecHitsRpos1L1", &nRecHitsRpos1L1); - t->Branch("nRecHitsRpos1L2", &nRecHitsRpos1L2); - t->Branch("nRecHitsRneg1L1", &nRecHitsRneg1L1); - t->Branch("nRecHitsRneg1L2", &nRecHitsRneg1L2); - //Sim info for MC - t->Branch("sim_GP", &sim_GP, "sim_GP[3] (x,y,z)/F"); - t->Branch("sim_LP", &sim_LP, "sim_LP[3] (x,y,z)/F"); - t->Branch("simDy", &simDy); - t->Branch("sim_yroll", &sim_yroll); - t->Branch("nSim", &nSim); - return t; -} - - -class analyser : public edm::EDAnalyzer { -public: - explicit analyser(const edm::ParameterSet&); - ~analyser(){}; - -private: - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void beginJob() ; - virtual void endJob() ; - - void propagate(const reco::Muon* mu, int prop_type, const edm::Event& iEvent, int i); - void CSCSegmentCounter(const reco::Muon* mu, MuonData& data_); - void propagate_to_GEM(const reco::Muon* mu, const GEMEtaPartition* ch, int prop_type, bool &tmp_has_prop, GlobalPoint &pos_GP, MuonData& data_); - void GEM_rechit_matcher(const GEMEtaPartition* ch, LocalPoint prop_LP, MuonData& data_); - void GEM_simhit_matcher(const GEMEtaPartition* ch, GlobalPoint prop_GP, MuonData& data_); - float RdPhi_func(float stripAngle, const edm::OwnVector >::const_iterator rechit, float prop_localx, float prop_localy, const GEMEtaPartition* ch); - bool fidcutCheck(float local_y, float localphi_deg, const GEMEtaPartition* ch); - - edm::EDGetTokenT gemRecHits_; - edm::Handle gemRecHits; - edm::EDGetTokenT > gemSimHits_; - edm::Handle > gemSimHits; - edm::EDGetTokenT > muons_; - - edm::Service fs; - - MuonServiceProxy* theService_; - edm::ESHandle propagator_; - edm::ESHandle ttrackBuilder_; - - ESHandle theTrackingGeometry; - - edm::ESHandle GEMGeometry_; - edm::ESHandle CSCGeometry_; - - bool CSC_prop; bool tracker_prop; bool Segment_prop; - vector prop_list; - bool debug; - bool isCosmic; - - MuonData data_; - TTree* CSC_tree; TTree* Tracker_tree; TTree* Segment_tree; - - bool isMC; - const CSCSegment *ME11_segment; -}; - -analyser::analyser(const edm::ParameterSet& iConfig) -{ - cout << "Begin analyser" << endl; - edm::ParameterSet serviceParameters = iConfig.getParameter("ServiceParameters"); - theService_ = new MuonServiceProxy(serviceParameters, consumesCollector()); - - muons_ = consumes >(iConfig.getParameter("muons")); - gemRecHits_ = consumes(iConfig.getParameter("gemRecHits")); - gemSimHits_ = consumes >(iConfig.getParameter("gemSimHits")); - - tracker_prop = iConfig.getParameter("tracker_prop"); - CSC_prop = iConfig.getParameter("CSC_prop"); - Segment_prop = iConfig.getParameter("Segment_prop"); - debug = iConfig.getParameter("debug"); - isCosmic = iConfig.getParameter("isCosmic"); - cout << "tracker_prop " << tracker_prop << " CSC_prop " << CSC_prop << " debug " << debug << std::endl; - - if(CSC_prop){CSC_tree = data_.book(CSC_tree, 1); prop_list.push_back(1);} - if(tracker_prop){Tracker_tree = data_.book(Tracker_tree, 2); prop_list.push_back(2);} - if(Segment_prop){Segment_tree = data_.book(Segment_tree, 3); prop_list.push_back(3);} -} - - -void -analyser::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){ - iSetup.get().get(GEMGeometry_); - iSetup.get().get(CSCGeometry_); - - iSetup.get().get("TransientTrackBuilder",ttrackBuilder_); - - iSetup.get().get(theTrackingGeometry); - - theService_->update(iSetup); - auto propagator = theService_->propagator("SteppingHelixPropagatorAny"); - - isMC = false; - if (! iEvent.eventAuxiliary().isRealData()) isMC = true; - iEvent.getByToken(gemRecHits_, gemRecHits); - if (isMC) { - iEvent.getByToken(gemSimHits_, gemSimHits); - } - edm::Handle > muons; - if (! iEvent.getByToken(muons_, muons)) return; - if (muons->size() == 0) return; - - cout << "new evt numb is " << iEvent.eventAuxiliary().event() << " and new lumiblock is " << iEvent.eventAuxiliary().luminosityBlock() << endl; - - cout << "Run Number is " << iEvent.run() << std::endl; - for (size_t i = 0; i < muons->size(); ++i){ - //cout << "new muon" << endl; - edm::RefToBase muRef = muons->refAt(i); - const reco::Muon* mu = muRef.get(); - - //if (mu->pt() < 2.0) continue; //can apply a pt cut later - if (not mu->standAloneMuon()) continue; - cout << "new standalone" << endl; - for(auto it = std::begin(prop_list); it != std::end(prop_list); ++it){ - std::cout << "prop " << *it << "about to start propagate" << std::endl; - int prop_type = *it; - propagate(mu, prop_type, iEvent, i); - } - } -} - - -float analyser::RdPhi_func(float stripAngle, const edm::OwnVector >::const_iterator rechit, float prop_localx, float prop_localy, const GEMEtaPartition* ch){ - GEMDetId gemid((rechit)->geographicalId()); - const auto& etaPart = GEMGeometry_->etaPartition(gemid); - const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); - float deltay_roll = etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).perp() - etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2)).perp(); - return cos(stripAngle) * (prop_localx - (rechit)->localPosition().x()) - sin(stripAngle) * (prop_localy + deltay_roll); -} -void analyser::CSCSegmentCounter(const reco::Muon* mu, MuonData& data_){ - const reco::Track* Track = mu->outerTrack().get(); - int tmp_CSC_counter = 0; int tmp_DT_counter = 0; int tmp_ME11_counter = 0; int tmp_ME11RecHit_counter = 0; float tmp_ME11_BunchX = 99999; int tmp_ME11_strip = 99999; bool tmp_hasME11A = 0; - if(isCosmic){ - tmp_CSC_counter = mu->numberOfSegments(1,2) + mu->numberOfSegments(2,2) + mu->numberOfSegments(3,2) + mu->numberOfSegments(4,2); - tmp_DT_counter = mu->numberOfSegments(1,1) + mu->numberOfSegments(2,1) + mu->numberOfSegments(3,1) + mu->numberOfSegments(4,1); - auto matches = mu->matches(); - for (auto MCM : matches){ - if(MCM.detector() != 2) continue; - for(auto MSM : MCM.segmentMatches){ - auto cscSegRef = MSM.cscSegmentRef; - auto cscDetID = cscSegRef->cscDetId(); - if(cscDetID.station() == 1 and (cscDetID.ring() == 1 or cscDetID.ring() == 4)){ - if(cscDetID.ring() == 4){tmp_hasME11A = 1;} - tmp_ME11_counter++; - ME11_segment = cscSegRef.get(); - tmp_ME11RecHit_counter = (cscSegRef.get())->nRecHits(); // Find the real function for this. Bad if multiple segments. - tmp_ME11_BunchX = ME11_segment->time(); - auto cscDetID_FAKE = CSCDetId(cscDetID.endcap(), cscDetID.station(), cscDetID.ring(), cscDetID.chamber(), 3); - const CSCLayer* tmp_ME11_layer = CSCGeometry_->layer(cscDetID_FAKE); - const CSCLayerGeometry* tmp_ME11_layer_geo = tmp_ME11_layer->geometry(); - tmp_ME11_strip = tmp_ME11_layer_geo->nearestStrip(ME11_segment->localPosition()); - data_.ME11_location[0] = cscDetID.endcap(); data_.ME11_location[1] = cscDetID.station(); data_.ME11_location[2] = cscDetID.ring(); data_.ME11_location[3] = cscDetID.chamber(); data_.ME11_location[4] = cscDetID.layer(); - } - } - } - } - else{ - for (size_t RecHit_iter = 0; RecHit_iter != Track->recHitsSize(); RecHit_iter++){ - const TrackingRecHit* RecHit = (Track->recHit(RecHit_iter)).get(); - DetId RecHitId = RecHit->geographicalId(); - uint16_t RecHitDetId = RecHitId.det(); - if (RecHitDetId == DetId::Muon){ - uint16_t RecHitSubDet = RecHitId.subdetId(); - if (RecHitSubDet == (uint16_t)MuonSubdetId::CSC){ - if (CSCDetId(RecHitId).station() == 1 and CSCDetId(RecHitId).ring() == 1 and RecHit->dimension() == 4){ - tmp_ME11_counter++; - RecSegment* Rec_segment = (RecSegment*)RecHit; - ME11_segment = (CSCSegment*)Rec_segment; - tmp_ME11_BunchX = ((CSCRecHit2D*)RecHit)->wgroupsBX(); - auto cscDetID_FAKE = CSCDetId(CSCDetId(RecHitId).endcap(), CSCDetId(RecHitId).station(), CSCDetId(RecHitId).ring(), CSCDetId(RecHitId).chamber(), 3); - const CSCLayer* tmp_ME11_layer = CSCGeometry_->layer(cscDetID_FAKE); - const CSCLayerGeometry* tmp_ME11_layer_geo = tmp_ME11_layer->geometry(); - tmp_ME11_strip = tmp_ME11_layer_geo->nearestStrip(ME11_segment->localPosition()); - data_.ME11_location[0] = CSCDetId(RecHitId).endcap(); data_.ME11_location[1] = CSCDetId(RecHitId).station(); data_.ME11_location[2] = CSCDetId(RecHitId).ring(); data_.ME11_location[3] = CSCDetId(RecHitId).chamber(); data_.ME11_location[4] = CSCDetId(RecHitId).layer(); - } - if (CSCDetId(RecHitId).station() == 1 and CSCDetId(RecHitId).ring() == 1){tmp_ME11RecHit_counter++;} - if (RecHit->dimension() == 4){tmp_CSC_counter++;} - } - if (RecHitSubDet == (uint16_t)MuonSubdetId::DT){ - if (RecHit->dimension() > 1){tmp_DT_counter++;} - } - } - } - } - data_.nCSCSeg = tmp_CSC_counter; data_.nDTSeg = tmp_DT_counter; - data_.n_ME11_segment = tmp_ME11_counter; - data_.nME11RecHits = tmp_ME11RecHit_counter; - data_.ME11_BunchX = tmp_ME11_BunchX; - data_.ME11_strip = tmp_ME11_strip; - data_.hasME11A = tmp_hasME11A; - if(data_.n_ME11_segment >= 1 and data_.n_ME11_segment < 1000){data_.hasME11 = 1;} -} -void analyser::propagate_to_GEM(const reco::Muon* mu, const GEMEtaPartition* ch, int prop_type, bool &tmp_has_prop, GlobalPoint &pos_GP, MuonData& data_){ - const reco::Track* Track; - reco::TransientTrack track; - tmp_has_prop = false; - const BoundPlane& bps(ch->surface()); - auto propagator = theService_->propagator("SteppingHelixPropagatorAny"); - const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); - TrajectoryStateOnSurface tsos_ch; TrajectoryStateOnSurface tsos_seg; - GlobalPoint pos_startingPoint_GP; - if(prop_type == 1 or prop_type == 2){ - if(prop_type == 1){ - Track = mu->outerTrack().get(); - track = ttrackBuilder_->build(Track); - } - if(prop_type == 2){ - Track = mu->track().get(); - //Track = mu->outerTrack().get(); - track = ttrackBuilder_->build(Track); - } - float inner_delta = abs(track.innermostMeasurementState().globalPosition().z() - GEMGeometry_->etaPartition(ch->id())->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).z()); - float outer_delta = abs(track.outermostMeasurementState().globalPosition().z() - GEMGeometry_->etaPartition(ch->id())->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).z()); - float used_delta = 0; - if (inner_delta < outer_delta){ - tsos_seg = track.innermostMeasurementState(); tsos_ch = propagator->propagate(tsos_seg, ch->surface()); used_delta = inner_delta; - if(prop_type == 1){data_.which_track = 1;} - else{data_.which_track = 0;} - } - else{ - tsos_seg = track.outermostMeasurementState(); tsos_ch = propagator->propagate(tsos_seg, ch->surface()); used_delta = outer_delta; - if(prop_type == 1){data_.which_track = 0;} - else{data_.which_track = 1;} - } - if (tsos_ch.isValid()){ - const LocalPoint pos_local_ch = ch->toLocal(tsos_ch.globalPosition()); - const LocalPoint pos2D_local_ch(pos_local_ch.x(), pos_local_ch.y(), 0); - if (!(tsos_ch.globalPosition().z() * tsos_seg.globalPosition().z() < 0) and bps.bounds().inside(pos2D_local_ch) and ch->id().station() == 1 and ch->id().ring() == 1){ - tmp_has_prop = true; - std::cout << "Delta to GEM!!! = " << used_delta << " prop " << prop_type << std::endl; - pos_GP = tsos_ch.globalPosition(); - pos_startingPoint_GP = tsos_seg.globalPosition(); - } - } - } - if(prop_type == 3){ - Track = mu->track().get(); - DetId segDetId = ME11_segment->geographicalId(); - const GeomDet* segDet = theTrackingGeometry->idToDet(segDetId); - LocalVector momentum_at_surface = ME11_segment->localDirection(); //No momentum for segments - if (Track != 0){ - momentum_at_surface = momentum_at_surface*(Track->outerP()); //If innerTrack exists, use momentum - } - LocalTrajectoryParameters param(ME11_segment->localPosition(), momentum_at_surface, mu->charge()); - AlgebraicSymMatrix mat(5,0); - mat = ME11_segment->parametersError().similarityT( ME11_segment->projectionMatrix() ); - LocalTrajectoryError error(asSMatrix<5>(mat)); - TrajectoryStateOnSurface tsos_seg(param, error, segDet->surface(), &*theService_->magneticField()); - TrajectoryStateOnSurface tsos_ch = propagator->propagate(tsos_seg, ch->surface()); - //tsos_ch = propagator->propagate(tsos_seg, ch->surface()); - if (tsos_ch.isValid()){ - const LocalPoint pos_local_ch = ch->toLocal(tsos_ch.globalPosition()); - const LocalPoint pos2D_local_ch(pos_local_ch.x(), pos_local_ch.y(), 0); - if (!(tsos_ch.globalPosition().z() * tsos_seg.globalPosition().z() < 0) and bps.bounds().inside(pos2D_local_ch) and ch->id().station() == 1 and ch->id().ring() == 1){ - tmp_has_prop = true; - pos_GP = tsos_ch.globalPosition(); - pos_startingPoint_GP = tsos_seg.globalPosition(); - } - } - } - if(tmp_has_prop){ - const auto& etaPart_ch = GEMGeometry_->etaPartition(ch->id()); - const float prop_y_to_center = etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2)).perp(); //y distance to the current eta part - const float prop_y_to_chamber = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart_ch->toGlobal(etaPart_ch->centreOfStrip(etaPart_ch->nstrips()/2))).y(); - LocalPoint tmp_prop_LP = ch->toLocal(pos_GP); - data_.prop_GP[0] = pos_GP.x(); data_.prop_GP[1] = pos_GP.y(); data_.prop_GP[2] = pos_GP.z(); - data_.prop_LP[0] = tmp_prop_LP.x(); data_.prop_LP[1] = tmp_prop_LP.y() + prop_y_to_chamber; data_.prop_LP[2] = tmp_prop_LP.z(); - data_.prop_startingPoint_GP[0] = pos_startingPoint_GP.x(); data_.prop_startingPoint_GP[1] = pos_startingPoint_GP.y(); data_.prop_startingPoint_GP[2] = pos_startingPoint_GP.z(); - data_.prop_yroll = tmp_prop_LP.y(); - LocalPoint local_to_center(tmp_prop_LP.x(), tmp_prop_LP.y() + prop_y_to_center, 0); - float local_phi = local_to_center.phi(); - data_.prop_localphi_rad = (3.14159265/2.) - local_phi; - data_.prop_localphi_deg = ((3.14159265/2.) - local_phi)*(180./3.14159265); - data_.has_prop = tmp_has_prop; - data_.has_fidcut = fidcutCheck(tmp_prop_LP.y(), ((3.14159265/2.) - local_phi)*(180./3.14159265), ch); - data_.prop_location[0] = ch->id().region(); data_.prop_location[1] = ch->id().station(); data_.prop_location[2] = ch->id().chamber(); data_.prop_location[3] = ch->id().layer(); data_.prop_location[4] = ch->id().roll(); - } -} -void analyser::GEM_rechit_matcher(const GEMEtaPartition* ch, LocalPoint prop_LP, MuonData& data_){ - float tmp_rechit_GP_x; float tmp_rechit_GP_y; float tmp_rechit_GP_z; - float tmp_rechit_LP_x; float tmp_rechit_LP_y; float tmp_rechit_LP_z; - float tmp_rechit_yroll; float tmp_rechit_localphi_rad; float tmp_rechit_localphi_deg; - bool tmp_has_rechit = false; - int tmp_rechit_first_strip; int tmp_rechit_CLS; int tmp_rechit_BunchX; - float tmp_RdPhi = 9999.; float tmp_RdPhi_Corrected; int tmp_rechit_detId; - int tmp_nRecHitsTot = 0; int tmp_nRecHits5 = 0; int tmp_nRecHits2 = 0; - int tmp_rechit_region; int tmp_rechit_station; int tmp_rechit_chamber; int tmp_rechit_layer; int tmp_rechit_roll; - int tmp_nRecHitsRpos1L1 = 0; int tmp_nRecHitsRpos1L2 = 0; int tmp_nRecHitsRneg1L1 = 0; int tmp_nRecHitsRneg1L2 = 0; - for(auto hit = gemRecHits->begin(); hit != gemRecHits->end(); hit++){ - if((hit)->geographicalId().det() == DetId::Detector::Muon && (hit)->geographicalId().subdetId() == MuonSubdetId::GEM){ - GEMDetId gemid((hit)->geographicalId()); - if(gemid.region() == 1){ - if(gemid.layer() == 1){tmp_nRecHitsRpos1L1++;} - if(gemid.layer() == 2){tmp_nRecHitsRpos1L2++;} - } - if(gemid.region() == -1){ - if(gemid.layer() == 1){tmp_nRecHitsRneg1L1++;} - if(gemid.layer() == 2){tmp_nRecHitsRneg1L2++;} - } - if(gemid.station() == ch->id().station() and gemid.chamber() == ch->id().chamber() and gemid.layer() == ch->id().layer() and abs(gemid.roll() - ch->id().roll()) <= 1 and gemid.region() == ch->id().region()){ - const auto& etaPart = GEMGeometry_->etaPartition(gemid); - float strip = etaPart->strip(hit->localPosition()); - float stripAngle = etaPart->specificTopology().stripAngle(strip); - float rechit_y_to_center = etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2)).perp(); - float rechit_y_to_chamber = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2))).y(); - LocalPoint local_to_center((hit)->localPosition().x(), rechit_y_to_center + (hit)->localPosition().y(), 0); - if (ch->id().station() == 1 and ch->id().ring() == 1 and fabs((hit)->localPosition().x() - prop_LP.x()) < 999.0){ - tmp_nRecHitsTot++; - if(abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch)) < 5){tmp_nRecHits5++;} - if(abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch)) < 2){tmp_nRecHits2++;} - if(abs(tmp_RdPhi) > abs(RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch))){ - tmp_rechit_GP_x = etaPart->toGlobal((hit)->localPosition()).x(); tmp_rechit_GP_y = etaPart->toGlobal((hit)->localPosition()).y(); tmp_rechit_GP_z = etaPart->toGlobal((hit)->localPosition()).z(); - tmp_rechit_LP_x = (hit)->localPosition().x(); tmp_rechit_LP_y = rechit_y_to_chamber + (hit)->localPosition().y(); tmp_rechit_LP_z = (hit)->localPosition().z(); - tmp_rechit_yroll = (hit)->localPosition().y(); - float local_phi = local_to_center.phi(); - tmp_rechit_localphi_rad = (3.14159265/2.) - local_phi; - tmp_rechit_localphi_deg = ((3.14159265/2.) - local_phi)*(180./3.14159265); - tmp_has_rechit = true; - tmp_rechit_first_strip = (hit)->firstClusterStrip(); - tmp_rechit_CLS = (hit)->clusterSize(); - tmp_rechit_BunchX = (hit)->BunchX(); - tmp_RdPhi = RdPhi_func(stripAngle, hit, prop_LP.x(), prop_LP.y(), ch); - tmp_RdPhi_Corrected = tmp_RdPhi; - if((gemid.region() == 1 and gemid.chamber()%2 == 1) || (gemid.region() == -1 && gemid.chamber()%2 == 0)){ - tmp_RdPhi_Corrected = -1.0*tmp_RdPhi_Corrected; - } - tmp_rechit_detId = gemid.region()*(gemid.station()*100 + gemid.chamber()); - tmp_rechit_region = gemid.region(); tmp_rechit_station = gemid.station(); tmp_rechit_chamber = gemid.chamber(); tmp_rechit_layer = gemid.layer(); tmp_rechit_roll = gemid.roll(); - } - } - } - } - } - if(tmp_has_rechit){ - data_.rechit_GP[0] = tmp_rechit_GP_x; data_.rechit_GP[1] = tmp_rechit_GP_y; data_.rechit_GP[2] = tmp_rechit_GP_z; - data_.rechit_LP[0] = tmp_rechit_LP_x; data_.rechit_LP[1] = tmp_rechit_LP_y; data_.rechit_LP[2] = tmp_rechit_LP_z; - data_.rechit_yroll = tmp_rechit_yroll; - data_.rechit_localphi_rad = tmp_rechit_localphi_rad; - data_.rechit_localphi_deg = tmp_rechit_localphi_deg; - data_.has_rechit = tmp_has_rechit; - data_.rechit_first_strip = tmp_rechit_first_strip; - data_.rechit_CLS = tmp_rechit_CLS; - data_.rechit_BunchX = tmp_rechit_BunchX; - data_.RdPhi = tmp_RdPhi; - data_.RdPhi_Corrected = tmp_RdPhi_Corrected; - data_.rechit_detId = tmp_rechit_detId; - data_.nRecHitsTot = tmp_nRecHitsTot; data_.nRecHits5 = tmp_nRecHits5; data_.nRecHits2 = tmp_nRecHits2; - data_.rechit_location[0] = tmp_rechit_region; data_.rechit_location[1] = tmp_rechit_station; data_.rechit_location[2] = tmp_rechit_chamber; data_.rechit_location[3] = tmp_rechit_layer; data_.rechit_location[4] = tmp_rechit_roll; - data_.nRecHitsRpos1L1 = tmp_nRecHitsRpos1L1; data_.nRecHitsRpos1L2 = tmp_nRecHitsRpos1L2; data_.nRecHitsRneg1L1 = tmp_nRecHitsRneg1L1; data_.nRecHitsRneg1L2 = tmp_nRecHitsRneg1L2; - } -} -void analyser::GEM_simhit_matcher(const GEMEtaPartition* ch, GlobalPoint prop_GP, MuonData& data_){ - float tmpDy = 999.; float tmpDr = 999.; int tmpSimCounter = 0; - float tmp_sim_GP_x; float tmp_sim_GP_y; float tmp_sim_GP_z; - float tmp_sim_LP_x; float tmp_sim_LP_y; float tmp_sim_LP_z; - bool has_tmp = false; - for (const auto& simHit:*gemSimHits.product()){ - GEMDetId gemid((simHit).detUnitId()); - if (gemid.station() == ch->id().station() and gemid.chamber() == ch->id().chamber() and gemid.layer() == ch->id().layer() and abs(gemid.roll() - ch->id().roll()) <= 1 and gemid.region() == ch->id().region()){ - tmpSimCounter++; - const auto& etaPart = GEMGeometry_->etaPartition(gemid); - float dy = prop_GP.y() - etaPart->toGlobal(simHit.localPosition()).y(); - float dx = prop_GP.x() - etaPart->toGlobal(simHit.localPosition()).x(); - if (dy < tmpDy) tmpDy = dy; - if (pow(pow(dy, 2) + pow(dx, 2), 0.5) < tmpDr){ - tmp_sim_GP_x = etaPart->toGlobal(simHit.localPosition()).x(); - tmp_sim_GP_y = etaPart->toGlobal(simHit.localPosition()).y(); - tmp_sim_GP_z = etaPart->toGlobal(simHit.localPosition()).z(); - tmp_sim_LP_x = simHit.localPosition().x(); - tmp_sim_LP_y = (GEMGeometry_->chamber(ch->id()))->toLocal(etaPart->toGlobal(etaPart->centreOfStrip(etaPart->nstrips()/2))).y() + simHit.localPosition().y(); - tmp_sim_LP_z = simHit.localPosition().z(); - tmpDr = pow(pow(dy, 2) + pow(dx, 2), 0.5); - has_tmp = true; - } - } - } - if(has_tmp){ - data_.sim_GP[0] = tmp_sim_GP_x; data_.sim_GP[1] = tmp_sim_GP_y; data_.sim_GP[2] = tmp_sim_GP_z; - data_.sim_LP[0] = tmp_sim_LP_x; data_.sim_LP[1] = tmp_sim_LP_y; data_.sim_LP[2] = tmp_sim_LP_z; - data_.simDy = (tmpDy); - data_.nSim = (tmpSimCounter); - } -} -void analyser::propagate(const reco::Muon* mu, int prop_type, const edm::Event& iEvent, int i){ - const reco::Track* Track; - reco::TransientTrack ttTrack; - TTree* tree; - if(prop_type == 1){ //If want to swith to global, use mu->globalTrack().get() - tree = CSC_tree; - if(!(mu->outerTrack().isNonnull())){return;} - Track = mu->outerTrack().get(); - ttTrack = ttrackBuilder_->build(Track); - } - else if (prop_type == 2){ - tree = Tracker_tree; - if(!(mu->track().isNonnull())){return;} - Track = mu->track().get(); - ttTrack = ttrackBuilder_->build(Track); - } - else if (prop_type == 3){ - tree = Segment_tree; - if(isCosmic){ - if(!(mu->outerTrack().isNonnull())){return;} - Track = mu->outerTrack().get(); - ttTrack = ttrackBuilder_->build(Track); - } - else{ - if(!(mu->track().isNonnull())){return;} - Track = mu->track().get(); - ttTrack = ttrackBuilder_->build(Track); - } - } - else{ - std::cout << "Bad prop type, failure." << std::endl; return; - } - if(!ttTrack.isValid()){std::cout << "BAD EVENT! NO TRACK" << std::endl;} - data_.init(); - //Muon Info////////////////////////////////////////////////////// - data_.muon_charge = mu->charge(); data_.muon_pt = mu->pt(); data_.muon_eta = mu->eta(); data_.muon_momentum = mu->momentum().mag2(); - data_.evtNum = iEvent.eventAuxiliary().event(); data_.lumiBlock = iEvent.eventAuxiliary().luminosityBlock(); data_.muonIdx = data_.evtNum*100 + i; - data_.runNum = iEvent.run(); - //Track Info////////////////////////////////////////////////////// - data_.track_chi2 = Track->chi2(); data_.track_ndof = Track->ndof(); - CSCSegmentCounter(mu, data_); - if(prop_type == 3 and data_.hasME11 != 1){return;} - //which_track - //Propagation Info////////////////////////////////////////////////////// - for (const auto& ch : GEMGeometry_->etaPartitions()) { - if (ch->id().station() != 1) continue; //Only takes GE1/1 - GlobalPoint tmp_prop_GP; bool tmp_has_prop = 0; - propagate_to_GEM(mu, ch, prop_type, tmp_has_prop, tmp_prop_GP, data_); - if(tmp_has_prop){ - LocalPoint tmp_prop_LP = ch->toLocal(tmp_prop_GP); - //Rechit Info////////////////////////////////////////////////////// - GEM_rechit_matcher(ch, tmp_prop_LP, data_); - if(isMC){ - GEM_simhit_matcher(ch, tmp_prop_GP, data_); - } - tree->Fill(); - } - } - //tree->Fill(); -} - - - -bool analyser::fidcutCheck(float local_y, float localphi_deg, const GEMEtaPartition* ch){ - const float fidcut_angle = 1.0; - const float cut_chamber = 5.0; - const float cut_angle = 5.0 - fidcut_angle; - auto& parameters(ch->specs()->parameters()); - float height(parameters[2]); - if ((abs(localphi_deg) < cut_angle) && ((local_y < (height - cut_chamber) && ch->id().roll() == 1) || (local_y > -1.0*(height - cut_chamber) && ch->id().roll() == 8) || (ch->id().roll() != 1 && ch->id().roll() != 8))){return 1;} - else{return 0;} -} - - - -void analyser::beginJob(){} -void analyser::endJob(){} - -DEFINE_FWK_MODULE(analyser); diff --git a/GEMCSCBendingAnalyzer/MuonAnalyser/test/analyser.py b/GEMCSCBendingAnalyzer/MuonAnalyser/test/analyser.py deleted file mode 100644 index b6489b1..0000000 --- a/GEMCSCBendingAnalyzer/MuonAnalyser/test/analyser.py +++ /dev/null @@ -1,74 +0,0 @@ -import FWCore.ParameterSet.Config as cms -#from Configuration.Eras.Era_Phase2C9_cff import Phase2C9 -from Configuration.Eras.Era_Run3_cff import Run3 - -#process = cms.Process('analyser',Phase2C9) -process = cms.Process('analyser',Run3) - -process.load("FWCore.MessageService.MessageLogger_cfi") -process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff') -#process.load('Configuration.StandardSequences.MagneticField_0T_cff') #0T for cruzet runs - -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -#process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') -process.load('RecoMuon.TrackingTools.MuonServiceProxy_cff') -process.load('Configuration.StandardSequences.SimIdeal_cff') -process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi') -process.load('Configuration.StandardSequences.GeometryRecoDB_cff') - -from Configuration.AlCa.GlobalTag import GlobalTag -#process.CSCGeometryESModule.applyAlignment = cms.bool(False) - -#process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T15', '') -#process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_realistic', '') -process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2021_design', '') - -process.MessageLogger.cerr.FwkReport.reportEvery = 5000 - -from FWCore.ParameterSet.VarParsing import VarParsing -options = VarParsing('analysis') -options.register ('nEvents', - -1, #Max number of events - VarParsing.multiplicity.singleton, - VarParsing.varType.int, - "Number of events") -options.parseArguments() - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(options.nEvents) -) -process.maxEvents.input = cms.untracked.int32(-1) - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring(options.inputFiles), - inputCommands = cms.untracked.vstring( - "keep *", - "drop TotemTimingDigiedmDetSetVector_totemTimingRawToDigi_TotemTiming_reRECO", - "drop TotemTimingRecHitedmDetSetVector_totemTimingRecHits__reRECO" - ) - ) - -process.source.fileNames.append('file:step2.root') - -process.options = cms.untracked.PSet( - SkipEvent = cms.untracked.vstring('ProductNotFound') - ) - -process.TFileService = cms.Service("TFileService", fileName = cms.string("out_ana.root")) - -process.analyser = cms.EDAnalyzer('analyser', - process.MuonServiceProxy, - gemRecHits = cms.InputTag("gemRecHits"), - gemSimHits = cms.InputTag("g4SimHits", "MuonGEMHits"), - muons = cms.InputTag("muons"), - vertexCollection = cms.InputTag("offlinePrimaryVerticies"), - tracker_prop = cms.bool(False), - CSC_prop = cms.bool(True), - Segment_prop = cms.bool(True), - debug = cms.bool(False), - isCosmic = cms.bool(True) -) - -#process.p = cms.EndPath(process.analyser) -process.p = cms.Path(process.analyser) diff --git a/GEMCSCBendingAnalyzer/MuonAnalyser/test/crab3_runana_MC.py b/GEMCSCBendingAnalyzer/MuonAnalyser/test/crab3_runana_MC.py deleted file mode 100644 index 1bac21e..0000000 --- a/GEMCSCBendingAnalyzer/MuonAnalyser/test/crab3_runana_MC.py +++ /dev/null @@ -1,54 +0,0 @@ -#from CRABClient.UserUtilities import config, getUsernameFromSiteDB -from CRABClient.UserUtilities import config -config = config() -###2018runA 314472-318876 -#section general -config.General.requestName = 'analyser' -config.General.workArea = 'pTcheck_1134GT2021design_1203_nov9'#working dir -config.General.transferOutputs = True -config.General.transferLogs = True - -#section JobType -config.JobType.pluginName = 'Analysis' -config.JobType.psetName = 'analyser.py' -config.JobType.maxMemoryMB = 2000 -config.JobType.maxJobRuntimeMin = 1440 # 1440min = 24hours -config.JobType.numCores = 1 -config.JobType.allowUndistributedCMSSW = True -#config.JobType.generator -#config.JobType.pyCfgParams -#config.JobType.inputFiles - -#config.JobType.inputFiles = ['/uscms/home/daebi/nobackup/analyser/CMSSW_11_0_0/src/GEMCSCBendingAnalyzer/MuonAnalyser/test/test.db'] - -#section Data -#config.Data.inputDataset = '/singleMuonGun_MuAl_pT-30to200_1102_phase1_2021_realistic/hyunyong-crab_singleMuonGun_pT-30to200_1102_phase1_2021_realistic_RAW2DIGI_FullRECOv4-1b4eba2dcd577d6bb642bb3e45609e5f/USER' -#config.Data.inputDataset = '/Cosmics/Commissioning2021-CosmicSP-PromptReco-v1/RAW-RECO' -#config.Data.inputDataset = '/Cosmics/Commissioning2021-CosmicTP-PromptReco-v1/RAW-RECO' -config.Data.inputDataset = '/singleMuonGun_pT_20_200_CMSSW_11_3_4_GT_2021_design/hyunyong-crab_singleMuonGun_11_3_4_2021_design_RAW2DIGI_RECO_v3-ce33467258ba6d6e1b97c4b94c6a3a02/USER' - -#config.Data.runRange = '342810,342966,343034,343082,343171,343266,343387,344134,344186,344266,344366' - - -config.Data.inputDBS = 'phys03' -#config.Data.inputDBS = 'global' -config.Data.splitting = 'FileBased' -#config.Data.splitting = 'LumiBased' -#config.Data.splitting = 'Automatic' -config.Data.unitsPerJob = 1 -config.Data.outLFNDirBase = '/store/user/daebi/' -#config.Data.outLFNDirBase = '/store/group/lpcgem/' -config.Data.publication = False -#import FWCore.PythonUtilities.LumiList as LumiList -##lumiList = LumiList(filename='my_original_lumi_mask.json') -#lumiList = LumiList(filename='320887_13TeV_PromptReco_Collisions18_JSON_MuonPhys.txt') -#lumiList.selectRuns(runs = [321475, 321461, 321457, 321434, 321433, 321432, 321431, 321415, 321414, 321396, 321393, 321313, 321312, 321311, 321310, 321305, 321218, 321178, 321177, 321167, 321166, 321165, 321164, 321162, 321149, 321140, 321138, 321134, 321126, 321123, 321122, 321121, 321119, 321069, 321068, 321067, 321055, 321051, 320996, 320995]) -#lumiList.writeJSON('my_lumi_mask.json') -#config.Data.lumiMask = 'my_lumi_mask.json' -#process.source.lumisToProcess = LumiList.LumiList(filename = 'goodList.json').getVLuminosityBlockRange() -#config.Data.runRange = '%d-%d'%(runstart, runend)#'315257-315270'#'278820-278820' # '193093-194075' -config.Data.outputDatasetTag = config.General.requestName -config.Site.storageSite = 'T3_US_FNALLPC' -config.Site.ignoreGlobalBlacklist = True -#config.Site.whitelist = ["T2_KR_KISTI"] -#config.Site.whitelist = ["T0_CH_CERN_MSS"] From 8cb63e2d519fa57b6c21bb8e3c2cc5314c2c427c Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 5 Jan 2022 00:15:36 +0100 Subject: [PATCH 3/5] Changed folder name, removed hidden files --- GEMCSCBendingAnalyzer/test/.__afs001 | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afs0636 | Bin 234 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afs10D2 | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afs1E7B | Bin 234 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afs71FB | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afs98B8 | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afsA9DC | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afsB331 | Bin 234 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afsD94B | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/.__afsE2FC | Bin 63 -> 0 bytes GEMCSCBendingAnalyzer/test/out_ana.root | Bin 52712 -> 0 bytes .../plugins/BuildFile.xml | 0 .../plugins/analyser.cc | 0 .../test/analyser.py | 0 .../test/crab3_runana_MC.py | 0 15 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs001 delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs0636 delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs10D2 delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs1E7B delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs71FB delete mode 100644 GEMCSCBendingAnalyzer/test/.__afs98B8 delete mode 100644 GEMCSCBendingAnalyzer/test/.__afsA9DC delete mode 100644 GEMCSCBendingAnalyzer/test/.__afsB331 delete mode 100644 GEMCSCBendingAnalyzer/test/.__afsD94B delete mode 100644 GEMCSCBendingAnalyzer/test/.__afsE2FC delete mode 100644 GEMCSCBendingAnalyzer/test/out_ana.root rename {GEMCSCBendingAnalyzer => GEM_Alignment}/plugins/BuildFile.xml (100%) rename {GEMCSCBendingAnalyzer => GEM_Alignment}/plugins/analyser.cc (100%) rename {GEMCSCBendingAnalyzer => GEM_Alignment}/test/analyser.py (100%) rename {GEMCSCBendingAnalyzer => GEM_Alignment}/test/crab3_runana_MC.py (100%) diff --git a/GEMCSCBendingAnalyzer/test/.__afs001 b/GEMCSCBendingAnalyzer/test/.__afs001 deleted file mode 100644 index dc67588d25f430d761abcb632d88fa307528d2f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!obM8^m$tDJi#}6L?i6FI`_Q?067W_ A>Hq)$ diff --git a/GEMCSCBendingAnalyzer/test/.__afs0636 b/GEMCSCBendingAnalyzer/test/.__afs0636 deleted file mode 100644 index 6b0414939a0b4cf1f8a8c01d81b0298b671b016c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oXNREBH+ALcurvFY=~zb?$o)mm$Dt zV*nZCmE)O^$Y8?&vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9spz`FP#7Y diff --git a/GEMCSCBendingAnalyzer/test/.__afs10D2 b/GEMCSCBendingAnalyzer/test/.__afs10D2 deleted file mode 100644 index bf4283189c68abe7a0ed3298217c408d7a9c55ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYayq`6G)Ji#}!FGbjOb?$o)06n)2 AZ2$lO diff --git a/GEMCSCBendingAnalyzer/test/.__afs1E7B b/GEMCSCBendingAnalyzer/test/.__afs1E7B deleted file mode 100644 index 4792b38068e20839af7b3ddf3bb3ff46ed3765ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYa^BBwy^Lcup3zIju+I`_SY%Mf6+ zF@Oy6%JEEi%wWR+vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9surRF3|u0 diff --git a/GEMCSCBendingAnalyzer/test/.__afs71FB b/GEMCSCBendingAnalyzer/test/.__afs71FB deleted file mode 100644 index d4441dbec9a20aea1995ba72a101d1883bd73d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oc`@uWm^00>L+ZToHC%o%`Mc06dip A?EnA( diff --git a/GEMCSCBendingAnalyzer/test/.__afs98B8 b/GEMCSCBendingAnalyzer/test/.__afs98B8 deleted file mode 100644 index 9ac06e11ced1cd0b76bdcc0b58f595b8a02709b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oavqCUH*gbip^>Je{>&o%`Mc05?hu A=>Px# diff --git a/GEMCSCBendingAnalyzer/test/.__afsA9DC b/GEMCSCBendingAnalyzer/test/.__afsA9DC deleted file mode 100644 index 694482b580ee74f8a34835671cf8482528cb06d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZ!k@ZjRY{54x1v_iII`_Q?069Dj AAOHXW diff --git a/GEMCSCBendingAnalyzer/test/.__afsB331 b/GEMCSCBendingAnalyzer/test/.__afsB331 deleted file mode 100644 index 8f03dc7e28fde06db780527a61c0346cdd10f32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oaAIGF>irq2QZc_IXpfI`_SY%Mf6+ zF@Oy6%JGcb#$dw$vyDMGB)BBMC^0?NEioC$sC3KBN#)5eEs0OeOVld@ISrM^zzQ+} RYzo9eFCYbSHw55y9sqhyEt~)V diff --git a/GEMCSCBendingAnalyzer/test/.__afsD94B b/GEMCSCBendingAnalyzer/test/.__afsD94B deleted file mode 100644 index d8d9722dac54e2aea8b2da2fcb66000ea1620057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZ#!%8N1w&0sp3Z1oGo%`Mc05ALu AasU7T diff --git a/GEMCSCBendingAnalyzer/test/.__afsE2FC b/GEMCSCBendingAnalyzer/test/.__afsE2FC deleted file mode 100644 index bcdf5a2257a58bc53564d7c3a49b65f53ceb1d19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmXTQ&o5zM_{_+_z>osOuYec^Kw@4jKq3_;!oYZRe^E^C0>L+14o28@b?$o)07J43 A;{X5v diff --git a/GEMCSCBendingAnalyzer/test/out_ana.root b/GEMCSCBendingAnalyzer/test/out_ana.root deleted file mode 100644 index f2845e01e34eaa45de834a481c04b1570cbe84ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52712 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%0AxnNz2uO zG1R$hkZ(J0odEW3Cc9Bv9{RuzT zza!u)_!57lgqsoEgbE9p$cdh4ZTV|R{caT znPnY!6%nWL1J4`zCO7AtCxb>mFhShM);r(+CiJr>O;*r@*ww%3CH0o#AkZs-?m>Ign`NFRBx<)J@9 zX5zPy)_x4YIC-@+D_K4NuEn1=+QE>M6EN|4=Y9^H=JN)--6|f%3eIR9#co!*3#Of@ z;Y>yT}dOI z!q(Va^WV-sTt6?duK>TDeK?JcR{(McinMDn!3XDfk229ELI{ty7-3^(83O>7#I(=h z^zSY2{jKGH+e`ibZ~4bY?$2{zlE2TH^e_1@_|u#Po&PzU|0tO}o!R*zsQx!)%v=z_ zX**)iQ^)3iVB#-@O8Ug4AJ_lX+cUWTv5WOXq5i8eqdypv_-O(_#`$MsFD&GZ&Hs5) zw9kJ0-HvWNeNn15YM5UuoirGL-;xFGsW-i6J3njAzgH3gWSM`q1NB^Uwt6}^_g7oL zSDc}qZNdGlIP2=+J{@)xI0V!^DL|e-%tiWV&j9l0iud#N3phw~drJ#VtA9yt7@kdR z{md?<+BHSxwJ{;Js>j|)kyI0N@|(kv<|TYW85_Fw;GBRXry5klKufQX)s=*h6Y~_N z&j&|;H-M{cAC)XlOJQd8^3})Bd^Q+^K^;Uy>Agp9u#a!~w!Qra^_MZ1r49uncw7;T z9T+~%eOwOwZZ1_~CZ6+=Ji(@D-$i}J`4EU-K&b>z2uQNZOCb)#tsGpW# z;IENn74I~Y?aI4G6uV(|_*Rong`ZZ=FropRJs3F1?!^E?}VKpdbo_i26YmW`!d3> z={CYKMrggiKMfPj5cAU_uAs@?jzF=6GGAbGaHi}$WjL+TnrImCjL31?u{ShKt}C?4 z;??bg;lh!=Xz`tU@}q>I4Q2S=g}z)r_dRy4d5)~da#;lZ{j1=^?IO3V$~{+6OGUYR z4o(tM7%G#D7XHRhe&;4)Z2_n|^`A|mPTvGZc8RYi*JoSE*M{*5xR-3Xy(-OeClJfYJwAdEQni9LT5Zoe2xDfAn8{>L7uAMDY$)BY<%Up#&G z`HUyyGktb`(&t0Fl<2rNE~M4P39D%VE`KRrR?uYpWF8d7k+WNCMy-4tD3}--bQ$J4 zd8@!^HhqvRhxs?@?>;c!@{V1<#I=4cGQY!9ZJ$LLs*27Z+~_xOBRCp?V$ug~nw#)9SK`kB8$LH@|&>^mhNl$!r1t zwHp7NdJL>iW!9}A5bdOm#)LL)BrbZ7~CI*a;$!q2aL0cyWL6A1nXfy^z< z^)2k||0SmW*cbS{JSz3XqA2Sp77>foene3AB}~w_DmDe8od}=8gCoG$YH~usEM!{=FUwDG#4|AGQa(~*XO`-)v&g)ROPHfS6T*XS6`j}RpK$e9a@T^Ypz{> zVELf|cDcj&4w_lVv7l z=y9{vHf6UcwOI&1iSZS!AKnPB9K=-c@1^(eH9mDiovbc4j<&s^$h!4~C*wGSkM=hl zBHX!foFbqsf!3Wik!8moCPr(r?YUqj;ICy%csn`Sgg9G;2ObS>38B1f6n1Xx8oN3b zMk?zzk!G-SI+@4vSn-&K@=4)6jd0T!(gn`Xef^3OJ!5hAd4e38UsCt6gl=LvXt<44 z`9^U~_|n^}ea`mY9T<3Q0a3oTs+W_o>nO_Q-)f1}ePGOGo#P=X5Uh*9w^LNDPFv*1 zbR+l%BgN7d8;(<{n_sV>p)%!UoS@bUZ|Y1fzEPQX2u<~6^D$9Cdw*RQ)zYCh;tugv zHrd7F#m>?WD#H+aXcntGf2TtK8t*tiuf`L5ew0VSdwy)n{*qL*9e-vIgua8F^xx42 z>bKwnf%Y7Hs6hce;7`X%?Z;(AQMGZqjvbe*4a*jUC^MN=(!;3`O}x#8-n}4xk0cQ( zwvFxt6@u{AZhItMf+OoagtxyeJ!-m5HI-^~Xpo;hY1o8%!&mAfM| zsc%DP?A%>DFx{6u01`KaZ$_Dt6#X=IOOi0G)lENx-dRw5t8zh9Y3EU2FS=}OqVvj8 zcMQ!iHatL0)F{Ri9zU#0+1{vN1R1Eb*{F9ZasPCWCpCz$@0&H1_-a!{mwwiN%Q#!~ zQ2vrKq;m$GSy6oLnsvaq<^e6S_-4c_C;iHjiQ1Us(?#RNR~4Mp&L;6X7e)BZ3Y$Fx zrlR-`4>4@hD_`~^=rqCc-85>Wy2Wk&@vr`@BNc{9_q=neP2jdJ_6IObQkPZf`Knn< z)wZ7a)5Zpv!X?)q~09aPL=IzR~+q=`9Meb)5FSfE7`& zBKvx4q~cW>q*SI3n2Kp9=hwyy?x|4VVn)c~VElN^THbk|meIU&iF**F?)LZA8BL+- z7f*#;Ktk}sx@#kktB#{NEt8EJ;6)3+F!YsGn zM3^L;7_7zf(--8na~D-L#qS#ML3x|6<$Cl@t29BiZN}GDMH?BMGPv-IS(oMev)0_e zSDz^&32#ZaeDV%GtUwUsmC0F_$j&o1vzkCE&n2Ytnm&kU@=V|gW`1$No!_-72w%F( zgAOU-5SI1q)V-e{xeXy~A3o3Uuu1&ly5vs4&G`}4=Jl4s=%AWKYkl$>oK4+@yXRLn z_4>ZXuS%^wjZV;hjuvde<9=x5Jh?*Ta497tT1tb4batP2J4$7cTZ}xbaSh?CP3cs0 zT|U#BGxExBm3P_knA+ty;2P3OqpsX3*Q30|@kDa#wRQOZ{Y@A|R2)QhLcaH>SDT`0 z@%l;Ox)*awEGK#1m+`zxm~W3K5%ceat?^+7+s___SexIcv$4Mt5$l#jM4#-g($$_d z!px2ZQdwNz#eR|e78-GWB5E*KLnVO|hoO38#4s>u$pp`!OtbKmTEfR zWmRpwcdicVjYQo&uQKAc%j93>Nc@^3Hnk$7v0>&D%T%QQg>DYMn%nra7wjZI#Q6IZ z6i;xO3Sx2(HLo3C$L}?pnx3e$jlBBXSMTqc$2+g^Xu5{+M^W4qE|@;O-Rqvd!cl;g zdp`JJ@&`Wsipk7M&t!VKe(?#y#@^y@WAg8GqJMrHex*lR=Y=|$otfHn!Q%ix8b){k z004>jZ0To0{VR20Zu`y9|13d1r$+ypQQth9s)6_|qkbLj`aXICyK@8O9ZUjhTq~}y z1jKtbIDwBVBbPj6gv460AvOu*onT}>$?w`#kxUFG-gyI#BOOj!1St|Egc5-6kYI9( zkZgHb5Nuun*3b-S7^&x65B1Xqyv>cvVaUkj_uoQ<309dlNj5iVnOJ$=iLfCq`zs9> zxaov7cN!aGQS~|dH`mzJce1m{8Kt3@4lgG4mMpGxJ5-zY5G>#jD_eS^c|WY!i0yKY z5v<}S_4JLOxt-PLZyRpx`0yS}zHYXjv(FbF74i_!&3JE126?ZuR5^H3r;3ce9`If> ziuap?QnEj=+y~NGOTGryUSUNMtZEHX47h)z+<^KnguQU@%9x&Ak7046Y*@f%$9df_ zHc?#E*qQ&XJOjVavm#ljIevpt^}+O%|Ljy|k)VAc6@9|_tv~)|@mJ#18h++W-U{!# z<4a#BJ_mx`6Vh7>!R;Q&iH(#L1Y$c`EfHrRE2-diquRa_>!TD2)n%2CU)=|d^YD1W zaBt<^a>8pnkg{Iwy;i!(K#o@(j;E|A1f!clwFHQvlCK`|7A-~=Y%&hjdtKk+ToE~7 z>|$ZpDo(#OGkHXs<)HVfn~uH*A@4KlE8$Uw>sra3P{+V%YdXC0u7anHQ{I8c7>Fo; zY(&C7uhGP1`6>tXKDEX4U*c z&>fwXql>hNp}tpPy-s+TqK$A!ngqWLb{}uB)6dxYP}f%$8ktE5BNca?ro_caV^9rbvn3H6p%kxp{LvL6{ z@mMO*uS@JUD!K#R;0Q!RW-yY5KVPF!|*;`uBZ1~ z>|EJfT^bvPexEm@L*}{Wv`b$s? z*4Z?shwk;4A?)jRt>~@DH}$EY>M$BOGQYZ`)%<4hDic@<5 z+WRvA%ETkEn`@ckF4(1GYDMcI;ODFjK+H57N(For^^ zvZjP39ZwEj$3uL=#s#~N_CV-d4ewYJ56q!-ggNT+>xc=Vbw~F{KdUh|q~`gu@;2ql zh{LZu+v|`?MxN=r2kZXLxFio+xfo7kh5X;4@m>3(_8LYXJze?1pO!zUp1)fTxkmqf zIsCUW?~mos8tS*@5WE$ZFGLX+aFmocC4gMr@UGz2T`^k;QRwVGOc4>4J8RaZI6m4W zCkryeUrF9YGOVDRd-a{E>R6xS5OR)GB__J5v0(6+VAlR+rb(KacgV{nw{bL@gY9CzcQ$mV7965A*UY3GgW)xZoF;raiPkL_JLPXwT~BUDNZ#M^42G z{+7@hlk6`7v%_N|@K6ZbT1KhXOCq8;#x@ouD92QNAZusT0x(J9T>w3Jdcwyde0>vHQ7ZpHdL*&|PiZ_dR`e zvp0p!7D}|WEb?Fe8p~|>ZiG9f)^+9Q)eUS!v z51tN+m#qihFP3dWyw0|1j`p7R!Ew}y$jVbKSXnwlE+0N=9Z*j+Q^RYX%)a8XEKiRW zqR{VAV_mi1znmZ|dV9TwVLegJ?~7ll8L+kYeq<6)-pHVmamqmgY06oUv7ltEMxImx z9O&F09A>*o!=0Bo>;EV;cOuKv$l`_XF7J278F<~;hGblV8qj&5?Gfq}l+0-;lG8lX z88Qs_F>jJx^xFxz2gO&y9u2yf%$rYw*VX9rD3 zG6!(d_t~_wYd+d^RAmel#8`zc@Uz{A<3}wSZb}uLX$h|kzBeJFwB}|&`dN~aBPvwG zM0UF$)tx9!N>y_x;dnp<`>REV6ic)!mSAqa5RLJ?^nS_x{+x0-VsVAIUe<3j zCMXedf;=$=qozG_soa_skEZByYERFchTW)%7}!4=Kn2_d9smhxf!L9YjefLBLhaC- zzJ(#2N0vF6T4Ogb?oE22NsoAt2rom)Y95#zur6MRwHX+w-lnSB%?e_USL(rT>@ajr z)DxCd>2hG(T1Sn*-5I7agh+$)SjtIkh)Mgry`XqFE1}?^Y}FibiRs0_8z9kLU?Dq| zTPYRMjEJMRY2mK6>KnYK%O!XluY+k=ljLVw(Eb|4dxHKPtlZ%-`P68hFYZu| z-Z?*dxT;Qa($vIzTk>6wSa~n({A~-|o9Nyx+t1pLUP_VYqC3qVxon3?Ywv6|Gm<&A zq?^h6ePXB7naeX3Bbv6@&HCD9mm1x`o!t&#z(;K-I4tMPor;q;qP3w-Ly#5$GK{YZlABhI^6C@4$y>L-4hO zch$OQa*!V%r>Q%RhD@|R`m<09ur#69z-FFB$9agzXAmO!?Vzl0E$|@&n>EX8{oJg| z#4>$=v*_gojvZl1D~?*T4vpUIIZ+w{{9zoAKwfGUZc$%t=<*Cl%jUFd4CGk$GuYME0^^IhcMUg@tRZIV!EM6WS5aLX6U$AwpYGEK z4bvK+AGpONZA>X17epX=V)RESTWf9B^vsnkRRw3GAZi~r$+ZsH(Xflao0i@{7;tmK z#`y(bo#2JNxOVKGVPR&bx@Q=&S2EK@?!@b}Mtg$@%N@Q*5@R!GMmiSbg8uZ?CWS{Q z<`AQ8oG&s18rC^75*>>AiV>#`f;5yI3(U7Vh(Y$dE4j;Q(2<6NMvIZX3*NS6Ut(G_ zLsVI;#$0cW=W=|Z>ZodJ&@o)J-ow|j*YuoB;Xpw|0U3?6l@@QuOZPk@UYgygKknu< zGlK8jVwkJbfOR11Sk&;2~U3+mmA<%bz+{++jJ2t)m7j~5Z`+}C|EKQ zS0yH6tzmrp9dTEF`vWy|@%A|E`lW;A9J%6(&kY>0i{H5B3iVKl$ofJE>L!~_g8bPb z;nzLagvCHLnvEkh69%D|LaErTfl(e4dc*pt2lkk0?uG)fyYqBn@v7(CYeBCDY}xT> z?xhpbbcDeS^FAB%3>&7EWQaAT3ubnu49lEl^dIIjwD)MaZ3Xk%i(Q3bc~syp^T>-Z z&Vn0J--uWg9KH>s3G||j>fb;R_6W}&T4^lwZN>mXbcZRn)U&F)X>Pp_FP!&6_ptQa zD`|dt*kB~gV(Qre-hp*yhKnV+daa*uu7!y^tmZ-U{T?<<&h)@&(@OQJD6aE4kyzD0 zk$|?|US7Q2mKQ>^J?ywrkFl=61*wfQ&{}bVYnSB`B5DfadqgYv1c@$Ik_R;&qRMM| z(jq1k#+f2F%i5SZ9`c-=5PUazF)Ag99T*a2VI{Qt7wE}#U>pXp)^9_BkE|S+B~O1Q zVB-%uM(wA10SG1hS;wILNb7Cwv~BE+EevHXjV-(UNGfz% zi3M5bC0mb=Txgs8@FBSjqTkV=$SQ3gZkBi#Zh+;$CeE$f`&390>nLGcDO9;aCps-$ zd~WH3fz?;3~zX`*H7JOA2>J|)j(@x3)&!JxV*k?aD4$OyX%rW>85hYMjq z?K|;yiL-^^a;A3&fP*k_(dQJ)mG@DB% zcnJu0FLgd!6^r5oL~u5D<^-@@2;X10eU7$t)06F^&z5LmW z?tFocn-)o&CioPBnt^F=7LU}iAOUK;0COccCfgDo{a{Xap>+Y%lRJAU_D!8PEqTQ) z1SNGEltWNAvr;%JHM!ywU<1Ucq(&LlC2Xcz?~gYul~UfzTq%Q<`)0;)WM-)C!%9-B z3R|7^@ig%;^*M6*x3_y@+=4Pv_FF|K>`F$D>b_a3KWF1O#N~Vc;S(Gtr$e1i(jE|L z#~7U{WsoKtyv{%akts1x=F6g9LNodH<~;P2lKN5n^!Nf{QTuL&$1DpKL{jtjPn8Ib zZbKsj)-1k4HLCsT1|cJM4aW%cH{OuL{#_;hp>hJk2y((3eB~uYIClE2?j43!Jspq@ z-*@t|y{Fr~c4(0)IMRpE+(B?y&2I3USs1$3M(W<(T9(qAmw$VdCg{0G%(TRVqn(^o+rP(pd?*BFvhDc# zW?t1uwgIwAF)mQUYqrjqb01~wwaFDhPD+1L!hO4q2Wk4TMYqXW1yfKno{_rDDtsXY zH1St#N+X9W5-_P=hws-TY)3E*OJdVO8eXHlg=wYwR%wMM5=>=x7LcLL3tQJv@j}!o znJFwA-zArmRiq@~S_Kn%2fut!|3K!No zX%w*c03n#vYv=p|gE;l|yX1^E<8spDrW{a=TM@7iD4fFBWmr$_za(U+NPyL)=zo}g zZIo;~jZ^SaO@A2PlP`11$#1itLh$Lk5wIhX!&&j#s}mp%O+%`8{w*^**)P<;p0UVv zLGm*W3#p#Hs`Vw)9gy6gW|6?Sr4C>MwtRWXB`!B8%Nr4^2N8@;Q6xLj=W3Kw87#}d7 z|0+>nfPg)gxX+!3e2c4MHiK$Q8~WPcs{H+$B5VM&fK+m^D14Z}Bi;bj^Js=o>%+j!WjbNf8~Ad2h!=-VRNw5xC|#JVR~Kd= zf?Q)};%M0YCL_5eC`V^sVLk3UJK1kiz!h-CpP#*v65D^XWeHZjn7LIHb+$gRf&C%gzUgu3{ahUDFC$j?{Q*_VtPz zti`Mmb9Zw$P<0=12)DC3$QOEgtKXE4uMRJ}G|QU0ljEo+n_(^bH^dV4aKej{=Y4_f zLO_7I?7FP9hBC4WN}m=Zwhf7m)uh@iyhg9OzUDAH{gQ@F4O`0~V&zShh*lk6W>I9L zGwqcjKe3LP{r@QY3b3lWrfUEnkDIb*Sg`pFe~SJs^(J zCT1bx5Y)`hza{yZ7OQx{LrTeK40|vo3xL03!h?*Zx}7zU&$R%)1fUfjSW>=WXLQ`R=j6B^5izemX%uNb4VXbRK$1v zJERk9?j5XJ=X%~|XGvK#!!g`I(s%wuITKx%XhQj*Dh^j0S|#>wzKF>%+q9f?5|=?^ z+O^j2(5k%ws}C`(WSd(`Vb7fnpLFNflYi-an=!8Wt(8}$`_^aAyF4`avJWxb2tSp9oJ4)E{LVOQ z%8w?RBZpQ$tgn{x_SgxdBufnP=P#4!MGWqf&p=FJ7(v-wMl0P60ndZZBh~nuPVe)f zgzu_+z4P&lvw8-xSNqErYo&B8CXi-BnClA3@f{wDTj;R#Qsd$zX{Yr>HFNBb~-I$r>b!<-~Cz+UQ#j|!|jX|BV371sb3*$yqv(%6V5M=F+E@SZi=0!QYv?^ zf^dJwxU_wxXNt$;aTR5K+?$zqHzmHkzS-4+pDRo+*`z$}20_+$hS`kpZ_CWJ%{-a= zFE;a!B@To^08z0rbXi)d#}h`soSRz@jb_(@>h#=zjw%L1`-7B#NF^#D zz@7mTtTzA&X~KapJ-mSM+a3d`49fsEoEb##!X08p-CUzMHY_sQ76*N1^%RQ6=?p%c zaRr~7tpdr(sX#*D01)h5UnBRxug1c37GkUX9`f8D9)gd)1HnDx14xA>093EM8mA7y zn!5ac@V;0QI6<2mx`i$S-57ia@kerjL|b-1;ylG6v4eyV;>Q{g(k4kDvhM@n&(H!+ z(Pjgui8BBZ_PszfX$pVO@z>;e>_faH<{|!Xf}uw| zcK}ePDnvt38lpyo53#nhhqzCfL6Wt3Ac1a;kVL{BurYWAoSa(^D1w6lsT;+RM3hEI z@<9b8>Rlg%|Lrk^RzU|GkpT~WN?it>y0-`I$fkiJf8D6r1!IctEc1eQ^}a(upAG@r zG)=$(u@0>C84TuO4FwxH9)QWD7)A3d`oQ=`3{Y7e5ERbD7Qox{1Q2EN0o=L}0DDIQ zz)Pb7@Nk2nzBT|f!>kerghK{W;!=U2;tL=cFBFJ%LH;3w2$`# z9tZW&!qMU;LuJgAqxHJ0$cq{p>8dHUxn!j(^{%cD>mnn=Yk|7-^3xL=Z@QHYCc>4b z1iqAg`|Jw${4}x$##j6$$A8wScn&)-zql^9m+WsY+_gBR5RgDVKpAp0A zp>Wt&H7YJr&D<;A%eD)X=;45N^G`_6;P#&Pym+=}LQqHTuHQtRbgVk0W3Bg6DqLK) z0D%J&wx?Z{ehoX(uKXc4NVu#JfAp}TE>$_7y{pT0Ngu%rU zn5+c#IEe3NM#t^ny&CT-cN!~sctmYq78tp8 zep;=zeO$wCYJ}hh9zI!F)LJZ%M_4c}emDNgAb+dOH8l>}g^TI*GBviq);IlIaU68m z+JM+MyF0j zJ9I0xL~+PK*O&b4R)6`cup#ROkZ(bUxleh;NxmV)!4Nl3kDU`*y?FxHbIPtKqcy~l z;}Rxwr?xnb1u>IVY~Kz}9M??`-Cl8SuYDQ$)aBt~vXK{Lf2^(Ec6!lQQyW^|7iQ1| z9vN5@%@{w!;vIIZDK$@FdpT5TyLD=ER=RLEB6I&Z*|pLtG5GNF&`y@9ux8uiJ!0SL zrd5FfhkY`pl7)N^5jHO0V|VhiG3fWwadk}fo6vU&b`HL>PAS^Uy$-%HmD6=X72 zzhza=uekXPq5I}@I`NMV9G$K4HEw*Y@n1;Xi9FOA=_eNKPD;T$cQZ;(_Byt}W<7@& z)HGQ6Blzli8>sB_r)8kqSZV8;Xu@jc{zLA})i!YdI{r%iKK>IDWUVY#@pb}}M267t zUV?1(V2<{Afd!!2NcrDn!Y?)T6dYZWrIO)v%Gd5%6KAc!;cR9>gf65~oD zJqwreAd*!r<((Cw+6C%;JJw8FCRmH#Wio_tkt&2hA;zajcM0O|n;awa^hBpYADqa1LN1Na#o!!?O(v%}u;# z*ARhzGW9Mqlqy8fbM~kf>wf3dt?0=tY}?j1F^`7wTAYZa&Z|Z|`iiWuN3$du(dBaR zj4smTSW5DqCA^FQ7fwhW6@P#qJw1TqNl4UhohTL7xdD%fOrCoo)CF z^RsWKD&L<%ksGyM5*>LsVcbW6CN2AGzmdZ1KkXVOK<}6NnA=JFG?dR&{M^uXx~aA@xC3K9>$XUw*4!Q>0q3gbgqA)|&aK|U zGaA-GsFeaij0WW9{6#j1yu zSrieMZbfdL&ZYT2g6FtuNS;MKtI`mncN-w7i8+hjmlqTb`DjBBD)qfFxuU`gn$qVZ zt2&x``PX}s|J%g|@(iKZLCqq}q5#f3Np?e0B z);)of`)>`BP^N{Jo7T5Pw{Kdr2^0zMIYXVQv)~2Sn?;umXNZrcPdC4n^Vx_DUr;%M zU9%h=VRBx@WB$xIQurx1=*94#2w?t{6C{0aJfa){fR*-K};Bd#Pf$F^W z@wfqfrh12lS!o#kv`}_V^M04ad0bMJ8Et^~E_N^zn2jgYdqdxVDvoc9uvp%G<%2OXWW;Y+>;Tks&vNf0`WfcbBv zuXR}?^H0*)zexW#Nw0MIKTF#A8@X#8(7f>{ITSNk+O_;YRl&Q`0lS}qhV(o|_l961 z^i-^zb${9Y#-eM{BhL6BN`~iXI7099N}`@>*?N@T8|JG%gAa@C8&Zrc7f zzLEO;$;c0aF6Eqh_3J$!2WQ=YCR`w zb~0GJ@Wv?z;l8Zs!n}Q`TVdj-Y2lM7yY9nr6DjMH0ZseWFAwNH%_N_Psivx~*BrAY zF1#3I11luMrGY>=gqM}}ZQ`!dC^#>bUK;}@z%tVF=TL#XSgM{b$yaAK}Ya$>^~V5!TNgjg7b8e^+u&Z6Z{~hZaOHo&K(YfmR3~cRsl|aA5EX+3A&~I2IVC) zT!#l5Z5Mjl&1~UMbET)OXVqHdtW&1s{m|0T^@Uiu2~Kx&m9hrEOx>hUby5u;XlyZQRKVr#S%MzLAi zJrE!NGYqZu!!0XD5!IIG+m%Fel?E*_BoORFiZgC4Tcoc@-3$X|`c)xcRv8}=nm^xL zKq_n@FUpAlF_jUcQoxZ>J&mmFn7Pe(#wz|6CmU2?{oO;8;-jhYM2Ya^y9`i4!P?+1 zZ`YD@P)Q;t}tu{;Nu$}{@|oE@+uSF?Vi_J zPaH43zbSEspIh=BuSx|JH&)d1??$v;7+UTY)AuW?PJN^i zrDMZe%;y$`3&zj0*OI1GULkhqV>tBFephmg__TWd+Cf<9Jq4vX&EcBrE*aGV;-V}> zz#qY$5qsh>8E%8eTqrx}wC>R4_9%O%oz@`D-M0cEh`|?(LKYq)UvJ47ZCD>DnS({A z49OjvsO{jaiBu%GDThYg1E@|n?9?F7KD#GNdTC^c<-{RBM7Mnc@I4zYJ77-!-T@Db z_#DeWJIW;!>u$f|OGX~=>mzD_Q`#2Z@RpFM#sse-g^1uV<2^aAJH~I>mJHLl5M)!) z0ZxQORM?)emf4&6G51~I5gB=NqvsU))iZ*-2{5|wFw``SyOI2g=?z)=qebw}Jb@I9 zY#U4xEKbC#$MxYRuv|?G1}9HC4~bFy+aYd&nf(<{G!0Z(yKtAw@YuVU2f*=7hf1Mw zZ?`^S_v+RtVr}?i@5tcJ3lYv!_bk8omZD2ucRQ43?>XbgW}idfvmdZZVOZjOAEJLO zGmp=WrtcGahB3I+^Eskmj{dWpU8*YH(Zt8CMA&6 z9b)3+sqed8#x%roZLFr$RfUt4akR8HII@adF~&vFaxp|&yFymf_qz%lt$e@rM#wG{L%2kRyenuQ2O2}$FWNTLH_dn=qr^FiB;O_3?I+skw+$~1MYPaed+As8>^JNiDV*79*>_>BRXw63-@=>)K zU)T>(S|I}H9%@5lC_%gZQge0zI?2V;sc)KkLKC>56X6Vcbp3s*+~YneB6uh?SWfE6 zgO)QE;aMYVh%^T+THp0KN&43wjllC$Gr}LT&w5iu%rOidl*oV55dhDaXS!M(b)V%( z48WA0X%U>DKTAbuR}oJxqLI8nl<7A;_0jbi3X~PGZ1*-jBF|()ExC~8NaSK*ky~Wu zMn&QD0a1>Ir$MJs~8BODvbDJE*VEkUB@?fA+g)kjN{}c~^i`*XxhC(nm}Y!&dk!~T6Bld{cIf^Y=&s^0F6we*? zwTSkL8v(dCj!*;~Lokk3MW+ynDCMz~?17hIj}1**Eh&B?-=q zj$V7yV1MqZ+(&lIdpHL;3)`~GBqAuQM*yiHws$;Et_NSP?)`!3_y+_1S5w$BZB-2N zKGwo^$k1)ajy1hcU$A#@Tg`?l7L@(M{o7gIeRi{)Tv)PSw(ERFrPcNH1f7_X;;Seb zmAk{8r8_Jo;L+uL$*>wn0^E;_J(M`A7i;n>P})X#UirI#dP{~BL8{vAgiUnmK}(LA zDY3^JdAzo>ph(oESIv(yea=`?taf|F2vOKeyM-2KLAxFD7Gwa|VP%RHKM@JnajwJy z*IjRckY!2#2ij4C4=r_4UIb4O<%+;(svBU~;OVHMAks5b>YCdH-M-n=_0(L=4hW8f zn@?gflzV4EcMr%*16tTa0Ypr(fp-S1fGGpxadWx>|ct}%_V5~63caHaM zy1^066@J1^X*BOA%y!Z2qdsO6^GvvAZq3SYGHx+n@(n-l-1t^Xr;kaxdb{Y|L$lH+ z(GQA)lAk376oqK2c%_s*laBj}vaAq0PA(ben$a#BD!h%xBpvAUxRpk(1#u*XETs9R zy1o*Bb;;N!e}oPH%p=J#=VEPZ>ZieR_^r{MXsN<8{1FUR+!Vz0Z&KzjwZi}_W1a3{ zklCIhb&f=xhS!((nOGr?8EBrj4?mle zCW@l8?92xV-et+cA!d#mkxaS_;XI$V_RNs|bYW6>4OtN^e;f={zWS+p>Z6oi#d9h;OJJGcL_JrHf$x|Z6LWbSWDw>=aKN#=I%=YUZG12H~ zR*uawN_QhTu{pqHZ!VVkL$6JOUH zMPIRfK1?ctuo^$a{=*+S#Jr-4cSJ=<%EhJ=w~NmO{LdT z?mp+pC}&t(>2A06clr1i+X>$x8oY6eClvb(^xCN{vW2iZGicEbVp_VdpN%_nNtSsR zb5SY|50uH#NI#Am0xLh{qa5u0E-fZC3-^+?O^=q7+l9>PZA^djt)z~ zU9_nM0X7DYKFt<(ZcYVke;@lkw*SWQd-Q``LcesEk_xj%F|MGmgwi3PS3G+bicRso z2f>;rBz{q_$!93tHEVCEklJ_Dw=)8p_4&wn)2jH)wz| zwG7%?OqiuMWx$;0=v+RlpX?M+r>G2Hkyp5UTSa@p#!!Khn7P2D*Um|RxU$?cdcKHI zQAAWR?^soNrid^Wa$BV+F!Q)V+42nZV^NM(&2+uD^ZWn_x;?2G)ws1AIsm`&wN)xu z*n9NQ=hiwSIeC-kd|Ew|w*zUXn0c1K;@*@%Zsc2+K-w9rMT@}9xr)~o^&FR@i%CJt zLUG863r!HdpY4w#`kW;J;}vePhIU6#_I97G%H(@u??g};uxaWuTo68>6gV0DzDn$r zEP|CRDo(Bbb&-ShZJe7Q%%KVau?`r^&jpigAOu(gt0j>7W=MZCFyV&4l8W$Z!F|63 z@WcRSKX}}MUzCAUigC}%aW9Ahis?O8Trnm#g|v=VfHp43!3$uS3wQ&CuigNyT%egc zlaAORSIn71rmKKhWUUpcG&kbHGf?3-682q0i*YvhNhtFE7wm~GI`&h8uU&i|Rnth= zNl4f(h`~un>&ZA1!#J?xE5CNg3Q?vLN7%-g3mr6Wb=gZyecYT(iTqrje0u29NF^kb zDNp=Clnp+;nW^|3t^By{mnFK%F}k;CU3OJMQ{-QSs*=_5Nxh@_5aH1V{N9H-KxSk7 zYIegQ;-ysKxdRWQxu5mF&B%Hlp0<<7WxzUhlT@HDf+xx^*_zJe#ChRl-d+e=rV#Je zq(R7!h=dNZ0g1E*Ya8l|8Vr#Zq@(XrMN~9Ry@OZ34}<<5d<>cJwb5cy2XbPK0PTjJ>w zMt7kSVSvVdOpv^OErVj3_z@rS^RI=F0(h6Q!OszFisl@bS8r8^*0P zZ)tzET9h_-zGxD9;rgwK?Uma?k(-3nxz~#)*dLyV(&3R2BsMA2&XVS9xRNKwh@azl zwz#Q;gWFqDski0ukL1wFEG$M|>-23{_JOJUE^Cy7sj}gp$X$fKn~}TlnVtoK*#9g|-f5L%QlxAD+p$(D)y0pvkAc%ytc3q@+2< zsaRTIIP}4vl2|XzKL`$ty9mU;xQVxcSjp7$LOp*;e$de}OD>qUmvVpP;QSs^Uh_HT z*7|Ff3Nd~Qo&5&~Owm^mp>Y% z&S|>#PhJIosWfJ%F;}OxR7ah447JWjR<$>oR3EytEkh3^oJYosGLhYODj?Obj(~=b zw|^W?RewmX^5|oZo6YlQG6smf=js&w>eOT1QI>A1TG~gX&FsZ^K?=EIHaiEMJmGV< zTITI)kc$N#AyC{cLhe$wqq2-#1u$kuwR>4axH=VUO_!tul!ikT&&AiDj8|>%ZS7Ez zZV7(E6CCwl(WA*mdW<+D^U9ZNd+ce=SJCejM$L?GiXC~^rar5DR6I#er#(nVc|g;g zr9J1}9l@Q1h(bZaDrvdPUY9Qw8Bd8X7ln?AKRM`F^yJm^-7hK(Yoiv@k=SO)OJ9+P zYY92=tlxS?!4r&mjG=NVHV!E~?Q0WNh%ViJtaR@I^T~7AKO>ZUwiyp@Tu{B3iPjkL z5X4~WD0GW!)a#kd(J~tY3!@6yw6b*Ak zie)8h*7(Ep&4(Exc{Vl{PzLfc49ujmC_5HOym?`cRteAkh9jgI5d|#>B8a8h?5#-2 z%C|@FXtEU_=e)@m7gWe2=zC|ZEt1T+GME|pUIvO`sEkXxx^3h0ZY9V+vSd%6}(G zl0pNC^4A!Bk4bxtlTdx;&ByFm6iNSx{p+nqeZa$T_cV|m zDpN8}zh6)>?xZ+hxMN8iv##6W5_hB2&aEE)T`+lRZsXZLW zoCqaxL-_=bYWC{17^fqJ8wcZ?2hKB-r?*PTho0+q++{VKqgbI1Sb4=Aqq4GI%*xS^ z;~;v0G`I8Ex*C0#v;#wRzFJ^0<-SfeQFJrQwlM3X%2R>1xnyqwQ3eXNBKW%P*L3cu z1Mi>asgYZR+)>zpeQ_N8#DZc&)j8FKtb|grH7mrpT&B7g2D`|KHji`QiWjNp753i~ ziebWZ3El%k#B$-Av2-2GvA%@FhCHRM^Jk zYvJlZ&s{z2Mp(bueV5Gmd-uf+5j8O?By!^MHc@>&O*n~7H-Bq_3^hvp@ADyF>0vm2TFeCHig5yf{FjX8$} zg>53@)))M#m0~ZHUxiCeDS7Y5TfLMqAYR=x5v-zmfHs~hC%_)r#lGF)x1Y4>Qq0sZ zk&-}r{;Ah`R^{B?fXIQ6fl@U^?16yLbuyo8`5$)54a>?imzVYxnzIHR>ErGU^Y83@KQi!l z$dSE83U>r2rGfS09c4_ZVz%CJm?3rRy5C^fqMC94F<$-@wwB=yW~x=0v9IK4L3=~) zCU*la3b~AC!G|(qWrw1}{Q4JM>pL5fd={=%2trE5e8w`Sqw%!!?P3&PIlIsFTM+Ai)UWxF(T!)Z#J~XwcsoUv^sTpOx3Yi$03QI zqF#9+0Xe=SybKpJmGfZ6a~oGYmXl;f+3Hx>QlYD^Ht8DqFmy0&#L6R%O!Mu?_T9$V zX{+W~ver#xTFZ}P`lkjg=OW~;LQxl{p@#=l0Y^AOn#Rjz343OaF_K5TU2%q^$-B24 zQa^eR#>PK=Yd0Xu5!qm;d@sWBsTXsg&Qi4wLCLx3!I~TO^g0>zJ;16f_R+S8_yOMe zvv4j0B#wQ0cDmMtR4Rj->9r1{rQI72zFU=U#7kim@NM*vX7#ikgtQZL$cEFUn+R-p zq}#jCOv5=%A@5hCIIoFrHpBr@UO+7#)gT7hLpZr)By2ZQ{%!KFBPvv9cP(c5Ew&lh z_qi>O6M+U?i){SY1^DsL-L0oV11eg^6!8v7@q-?fsqnJ8#-_t86lKjlrm~y~oNs$$VBd#AQ{8j2^_7*(p%Xq0h z5JeIEhvU%q?erf?bA;3FZS1$nIG>VuJ^hhkDs*0yogC(@VOc9c9!yKe_ivr zo7o18+rrB;v7d5WA6q)9{wc?AO^g3o3dTz*U`OFsQt)&Xp?hkP`1VTh590C?_z&u! zKm1B=b74=&=6Ye_Yv8~xB#irL3D@O_S|e-EeWVSkC=RW+hFR72Or5yg1kNyHU&zS#)}K7fc2i+WU9pbbL@#7diZ!%%ImmL3DapCb;*f0 zq47``F%gbxS(p5UjuqJ_VI!!592-td0>#8de2f0%5b0HTL7j`Pxv}M=yar)5hugef zU>$CGoiXME@jSm8os>092j+GW7lLH2gA9rnt7zx`y=MLn*qvHIlk>vjZPy!#SS2=(hKSJ< z_3V2>&90dIb)=#uZu>j0w0Kj^gRL7l_aq8XOdzvecvVB>R<6(mRM^-3Q6@fJzH;Bg z+$VMna{^1AO5A9fs#mm{PJW0LBR17y>RIOQk zv9P8X5m7`f?^krYX;2d>tF>eQ8kK*iOAqB_B{i%kow4-`)dBz6`4LiXc6#&FnjH>HEA%fvptMk+U=Gup}?NZqLr8X_|Smh7{Br;Jgi| z;iZfhtRo`#S0%t0;@F)6E7&){yZ!ugJ!&P)X`437S{KV?NekG#IW#5(*0A?MpPj-d z=S_~5= zPV3d__a7?bCi$OKM&`-?pfaXERmS@MoV67uxX8!D!=tu#=he;NHIy?xg> zqux+xod9I^q$JhctB4%S$KmTT&oD~e2ujSU9vLNrCTuub>~|T0*DN;m{4y5;T&OHj z0+>t4VgH3Zey3x-$jyz_zx6A_=QAPL@7&?|=05bO5E?#;qH$_25^tGI{`Q>eLWzfD zT;pK>RN}K=h1l#q2CG2rNXv|cg=%7GRIhH~I5wHpvfcJ^BFZy2U^fjeNo4EUosKXR zL1I&%l2;osLcXaZaEf6Kb|Z$Ss3q;%&G%49PN-fi)5lMFby%6Q^A7GzVgpRIiwDH)RDSBw!Z7{($|rRRdPr@yF#6{`152 z^z(217-2m;|Cy7kXcX84cg0D`Qfj8Qyouw~Wy>VgjhDGQqdP+E@D1gI(=IPR<~nt0 zB$x=4Q>V*AUfcJ1)K>|;jxu%e{x~8iM>M+9x2^xNi;FxFnth8m*73aDl`Urk`4vGC z;UdDfYGjk))sSL0T@iJs6s!ZnLJ=pWyCUTas|Poo$o6lotE5}&c7IX7;k4a=B{rfM zI1`v(H^KI+wI+gfoa|=C4)3$nu8qCT*3p%hJ-TOGQ^G6KDD!KBJ#(WUZec5aic=Rv z@rD!I(pZDx#rZe9Jc0j;7c9Bszu^UT4?hL#d~|w(cfMFCt-(E%QK8_^MeGtst-et;;91Ry{XyW)LoF$fB~ zVYs}$LX78XfxGrgyte;D?6(${K%puo!&?$*`k*KoReda&p^J*@`h@OxtK zsoXsx@IXiiAU4?VU3Jg-X<2ANEzoN*lW&ExE;XliEH!L-K#y5&kpBcQ3Vp`d8d`#d0F6sR16%RaUETmrLy(A2J}QJW85aUCE_L}_QKaV$;9=yu&?wAd z@J;DK(PdVA(U|t{m$%4#^Jh`AVR_Mg&LYtfZ`xmc0kN;!0Ea*>QQsU%(ZKj+s8gOT zROXyrG#PIT?U z533GV*C5`bFmuTW2iFew8wdQ11g9xqtun)W&uv^HISr(yI`w{RkHRhClUs=@(SN=;G&jjsG-&Ee{xIk+=L@9Vx)4u|D_5gxXcFw_P57q z^tk1k6(=aDluy)OlX>Hu^9i8U`88zbW3wCXda;8lR`knYA}0M!_<-(z6aH5VAy}KX z|3P?>YkP)G?y&G_?XUL5D7vVrcs^Kox;k1~AnkBR(|CM8{`)NAlr0pq9bO|I>#TYu z;gcThad@ENF+_G42XB7k?RsYwX!0j-*R91k|Cuv}%VGHk&hYEyxFB#X!g`oD^gSO? zCt%z_(AF!9H}$U4lF}MRc!t7*0qTB-csXsy{f)CAr2ohn&;P)g;Qxdf9C~5v?Ol)6 z+g-x`0*mW)bI9J6!Js~GL^_z=%UrVcb4Pw{_d&3ZYFF2_CjZ%%?C;DG!2SrfTqC+( z!nX8lPad^_UdN8vP-3e}D3`GjL75m$6_Iu;zc0s<}Ys-m4~m+p^Ptf zzU&7%6^_M?I*{7lzdMC>)|;^VNydD8*>4OcdfjhBe2r!B;tweQ^>*XW-dcah@|Wwu zdWogx&w*Bl)i3na0wI3wHuMlc4Zlm2nCR6eb)fBx;u*FUdSPJg%QoRNo=&*-d9@-) zFXfORhfh1tu_4QmDjUq#P|jS%hB;VdeUGeCY-h(rDmtYkLqh3derFp=rx63@>HbLR z_~}1gOAzw@zew<3jOa=NjcW;t(CV~E5PLp($Sc2xV} z{AD&!2wSd*KlRo+bpomAT+r+2JF}{=24UUUTgFY32YL3AYHi3xX4#rf4exjTUvaHt zlem&l;HARYtp3{&g#MfT|7!?-beH-ch5!b~mG`IKbtwRWPp^bOF8%=AU2b0Na5(sN zuy>YjOXmfZj%DDuvzl<@T$$OTBrk&KTu6Kyp(T?+!&$e#GH-sO6fDRDry+lL(ap6i zm5hhW&dL55-k=ZT65^`AF(3AC`44|E|G%IQbG&{sUyJ7T1Q)T#?~T9b_izdH7DfeB zUcEc}ccU)uZEa##v6lor{t|l>_Nk=<|3$Ae+AAKa?B$Vz3Z}EXjNNl~#Y()+&Lino zVO;5TFaC><3lQzg}l`UTQpSD!F={ z^{*C0AlULMowyVLd*)xMh5w@af2sYqHzEI>+EovtpGI-*K88d8lndmCr%ZC! zv@RQvUS8L7YoRKk58xt@L*?zXpl!l1$pqL9&i# zo?B#BYU_1P(MLfQ+F-+l)0Pfhv4@P*igUwzll$-+*N!9`eWpQmn&1FwpS+*678`j` zoO#om-1=edh_=R_8gBVQSTIPtS)*G6*G_qii`07!%Ae>_SU<)NX1B8=w6w4zEHW6V z!KlMt>N)``MrelNyi4Q*Ye!Bds8KeogOXG-hr9~wLrsa;T?KRMx89zq;v$1y5I=E* zE#OGMiGB@n)UVC&^+;a#1^Q>%=`Uq}_e*wM)`>MLwTcsvrm+C35X0+J#F?|O{bQ6RM_1w2)Pu`yKtwoW|e^^7FIXe&)LHTBm9dQB`kQ{@`4#U1; z8+8^t1X;^~Q8%Ex+V~_;rpR%eI;Brg1Z|YqJFQgC!1B2*%z1rtb_11Ci)$7}tNZ2) zu@SN5FeZ|cHUa*^Hi1>Q8eR-LPVxSx>;;fD-P$YUSBo)T&%3W6#2VK^jI}yQk1E#KFY0g%$3b zNxA`4tAaUDWberd9v8@n!rBr%uASLq6|6e!l&lA^|I_`3j%&AHIe=65I3t1-G9s{V zgHI9!Yfng&dV8b7BM8Ymd9)J8!*aAw#{d@=R)p3R6eW;MOmFSD8)xHDxHG$|g=?1( zUNP9I_f!ZK0i=BVoDGHn;iV$L&MjiPeLp)6&2X`9Kn!YFFSy)Qw^(q*RIni@atH=<) zqn^4h`Xo7-r#}olT^Z-^UuTity0`M8l%zDpki&|lG@hTQ^l-A$aI1ReqEQm-FokCz zFGFZ}IkjijctGMpo;>I@g{S?XXkG0Yn@x6vBlbF%?6&Wh5~;D|ovt^7&4^VaQy+UX zCJi$hM^Z8xTQ1TXA2C9L77pEsKCWf0i`%UDgHcKp-C)98)oJ(%%JrNY>+~lm|LPg? z&$ygkng{G4>k1cLt*gEv5LOn%K{-|ygh4qLRU~7IGDC%22X1_`24EondzioijdU+|Y6R8^H#XZ^{sZgsqTJxvW-bn6|{v4yYJ7X7Qksg*xRFrC}%G^-E&aZ$AYP9o0Z0An2cAw3V)jG zwW`MB{VDy=#ufi8{GH1o!TD*Yx>wCB^hrS2?-`9?2W{S$FvI_FORiy#hfSMT*Y)K1 zt8c~MDgE+Gx-Ka(!vF9~$RjlGM?EEJ(pGso{wX>Ex0WHWRyh%yjhat7#a>0X18v8g z6}~oIialDZJU=OZx0&o2vwHYbZhuL%#vrSsHRsefg*wVTA&-rUFx08}<=J_NGMDJn-ZHHhw*a8m^ z2s0AK<)hMTcs^@>GKn?U^9~Y{aGtG3*r83Ik$(r8kJ>2_FUXEOYAtTN^L^<>uemy9 z+L#XWH_ul!ZZ4mcHD91v4%(X z$+=YJlh^tCIJmJdbw$E1ABrV9shhXCXE%J0kMSm^;}ktajwT7s2HM=&_#duMgCm zXp{*iSJ$5`uZFpt`BZCh+BMcVNGJG}hOtEMPVyao$`+1rB;EL$8jmhAF#e+U(9JH6 z4F#rsU4PTTH|KxX!T;v1c7Y%o_;1B-#VzM>Lc$0KJ<%aJvyGj9ITkV11sWG)DpCQa05gFtz8%Jfep5e2^C-t<=iF7c_)? z`{p4g08f>}B^?SZt8>?)1w`by^vM7ljBUWGf<%s2K`UfIu0<@QU@#|C2M#jt9VnKx zA)NC;uxg*E0=Ot7&u|u57T`k9GNLWk++95Wktxq3eWFW@1c`i0(*he22 zO<9XWo-0;89F#*3;jD$r!WC=HT+QCKWCwUY_lre$5z*xYQvfPXL}F>>0dz%f7LXNH z=i1wXK#noj4&+dLx|T#0l;hCM0GXG;s8z+7&WYP4hb+x5)Iti!a^4rJ)e=={)%quL zX76bE)?&rS)OzL1X1B`-L)6C8>O`L~->Lf$4|%F|TF2-9nvUrLu{KnIQyfb;nBEJA ztTr53P8@G!hXI*84)8K35GOw?$e~*=1YSew#2Li&>797{0Y}+*v4xAfck)qK0h>~I zv2BW!EZh}kfSy)C?8X5tJu0ORK>7MWjNky99zJRZQe>T0$G`NRPS}BYmrf0Aid5DiwzJZ!5!!>16?epP zA)fS4Dfhr+3lOo~2MhF%pZWk>JQkvfrWQH8qu9VsSsFODO)7_b(iM^zAyX&6bdo*s z$rY%vG8gmh4y4mzc@5OKaEkf0o71V(!S-Zu(BHIK>!%Kbk~{v?=D(K={^$91;&Ogf z{COs=-dp|1^C%XC!X%F%GqAUjtvGQ?O{7Kh=pUJY!3GI>bA}kRgZKEAVcT zXG?8bYb$X#A(@Pgf6ctOH|FiBymu7_f~9A#D})bbG=vWydVP@JQDNfHi|t%@n5-;M zC^JGbvlLZ~#Htrdm1VYQH~Pk4ZOGQ+puZKX8a>pCHQ3E^)@ow2I`X_LKhEGo;puFf zDieoUe678WsH8#{3k8Bb$cxdI?NgG4WOW^sW7h~4l9>HJbZm5JTK zG?7!;vyPs_nda9mkDcP@CLUsYRhq?E>*`EnKAL&cR@u09593heBhx~xNcZQK963WA zu3PEy!Bs&_3q%pARKcXS%i2xTC9Gd;dtA*n-)!`9M=C8;K4mr&YmN>$PPk`MjGZaV zb8N4V`(aSVaxuy=zER`FO&Je*M}uxh)K8C!F3u4~$Hic8LEsoKhwtagtMF_1QiJ{+ zzTb+W{(a1TxgLxlz^0xKuyukZ14G;aN+l2^={+hWsYw>#7lA;1x!r;46h$ERt3AYz zaSqbJ>?(#?MkR(NuLZc}9Rr${Nk9Mx2f%gl90JWA1J24AAz}P!khEhei2W8mq@W-M zxb0#E-6e|$ye&Zh>3kbxNdc}FkvU8Z;eJIe`X)7Sqvku*%QqPa$YcO~G8F($hh^Zl zq#~pa!5uQ+cM5Sm(SxMPFo3_jcY@GSZ37%1KLD6)rNDFu7cgy*3K3OYhS)uJ1JdC^ z5Wl=eNKle045;7F$gfLdr zon!;TytV;JlAwb$mWNvEAB z(Q^ED-tJ8?^yX19+|mdzthy=~0N?;aCCR{Ix&`g5DYWg+jL5+(%y(ecdJPeR`XUi_ zL?`f*vP>{`z_1u{Ur_rzR&M*;RSncDVSnj}zcWaA&=L0W`2A%1SIN77j;zNF5|k^P zejrC~?kQl2php~s+NG!*dN19p4HYb0x>sGpborRiW95YbLkF7uP$;KIGyayS&rAEe z8IOtjf9cr$XDj}sXdV;w&|3UK(LfV9-7r-{?ChMd00b@o2Q*OR9}xe(1TY`t?}-1d zQ1_ofAG`$x`qvUb=v5z=0Qx2jU-m3g;=nM0A!YpT_$&o7GOA-9%OKLXwrM+4ko#(qZO35y!n*J8##-*a& zOF9hdo^KjLhU_AVL|iU z-<0pCR%Nma`MP=K=OKONPfIxpauAKI824WTSCKLjZVjxirJBZ*)iK>$5L#C4TgStV zSmqnfY@|8D1FP#Vu9>$h{ce!ar{TL9pledXCe!c3FKSFdDQ5RDy;&dTq0WT=OBDSc z&I_R9*W>X!ivA*M_MbiZ-@`fd77SfX`4~jb1Se^$%$s~2IrB^8@7)(29cLZ;dOTn5 z=sj^;mtlw5h*^2AK;ACD*H-ibSatfVqO5?FN;G4R&3!ljxB*^Y>%)9{`8g zphW>jF79Gi?9MN_htUBiuCz%|Ln8lTr1l@C0g9jm=Hv0Zq5h_o_0NW~JUlP`+2bD- zr@%2O&`vK#q?ZX@$_EqdIIw{u%@?NT+FfD+51%G9GbPYAc9W76&uMXpx1nSMdcr8zbD{DH-AU_Q|#)WksgWJ-$;)VTTmo| zxJL@u_Aeg(O#yy3`#aLVOI7_d-XjHw{zoL37!vtGFE;(KKk<+CP5)Xy{+o3DJo$I9 z-%3^gjPppklKsX3!bu?_B0hO)2|U1b5n;XPSi%IrNdu6fSO06{{SKqzH-E?dn@rU| zqd$hxf2?KnUtIdT@roP&j`pWY)jz{LHXi5iNnTG=N2eTy?dcxu`js=ab8X~f{@{twW0Z;D>7YG? zG#G%ZCJZH1FN*wOYphGwBdII!5PGFh_VG`>sDA_gw|}4m15`IE>rdS%-5z|%L7ju*2fkI)fFkl|qy13f-V zemJqD{X9*P^d$GFh!X#E3FKwTTji$+`6ngWu9Px7+oQhw2N{BCO@vHW)$ZnprrYVK zzTTrLDb6#9Z(@xqVA3%#NC49?@+>-h6>oWxN4t?CLpT)s0IAtOTV^fcEPQ(;PdZ6=s!)zueA6-R>aHi3lPnK7lNBT*d0IXJ@Ut5CHQNiy%;oa)j@Psb8)y>_%?Y%+5FwCT`woZh> z8?t{Qhv-0Cj3Y}IdXsXlgB<5Nj$v4hCLb$ex74_JRhGpfKX`=U8GtIkSCVnrc~+#^%Vt6EVqe&*1wSC9K-8uJcjh z>@kFOQFXYb!TY|4Ck=<+#zh&eJp<;26~t0quD~yRz0%M!>4Lovur5Kb`SH14VZGffIp`IJ1LsaT3~j(YZ3~Y}Py>BoI7^ zp#Azn?+MKvS;t4X@#k;}V92z{8`vAwo9T2>1$eClJL!&gSZU z(_3w9#N1|O$l87&V*lA>pl$RnV}=bw_+n~>6XBaZVMo?Q(7j6LjVZ8Z9x;#EC4~lS2og;cA&Cf}2Oll=qP* zbK*6b6M3QS=wHpwIl0a)fyFehq7YX=6}fp!&k1HQuApV3jO0h7@|bq8%KxaR#Tivj zh7afG*x<2DazHXp=)lIAMl^2g--4c>FdOiSm*c6$a_-!_vPPQCk=Kg@2*Z&=Jylsn zv+wMs^gDT}*=WL)_jNl}z#0*_;8To`+ToN;^`AXwPOFoot2rsw$h$<3ASTNV_+E&$ z_l`TFmGS)SK^WUA0}(1wQ|J^B3EiMvWWNc5=}zx`me21Zf~cX&QPVq#)og>af{c4v zUUL8HaQc~?Wz>6oa}!?yZ};JI5}7syg+WWDVFDlVrcy>@peB6;b(Nh9Yi<$;*3~TNCM}e*85OSQ*!_sgS|kJguZyhNZO18 zElw^9i?6=N$1b7xe8VSh5?Dm@POPWTuyHHS(1O)`lvZ{N;=Hh~K zsPQHa!IM~3x;Ll3nZDAKUD!*mX@Xr=vkR|YMj>c!+$Sm5v{ zE9`NK=9QMNbzLjuwdXJ~Q67}@NZA&dP{C*2&M}8Nd~FBa-gD)vAi=I-_z;9Qrd7u( z92O#1q($bJZNMz-RY`25SAyNOm`7|%PScidsgdX&j*P?(63G_uUKA_O+CETqnqOd6 zUoBZ6yxFUDe4#z|V}e*$AZxuSx<^-JBmISx$Kou#@qkf#xbix-NibEfIv&ThjryEp zo^+G5uyA!rOel}(pdfw^13KAAfvd7Ba&+udD*;eN|F`Koy%UkwJk-~vY(F? z=3jeKHD8JCee(79ibA)I zf(Pn^gd(rYD9V1c1f<}Qp^)b`DcDd*~msJaw!3?hvIDe8J zD?QP_Y~A7AFGWGiw?7)yh!aDV!fWS zqgS%fER`~c^`HWNjd{Wi3f60tual}?nXU_;c(R$GW2Hg=M!!!abxaEnaIP?Ey{l>6 zV_>nfYLaV4XYKG^*}8Z;+X>dqU2gwZACMP?_~GvugsY)_AMgoPz}<#q=*FpKrvWq2*KlCdRj=p@m%XX4Ne=VPYD zcxPT$u2r%Uq~W}alGLX>fGQ|n{^;~ceMj39!nIh6rs{F3j$s=u%UExzwsMyxAWFeV zKzUgKck<$4$bm25-gt85AUf!A7T1D6pm;mQMNT%XRngXs_YhAme#loQ9k`r#)jkci!&lM z;5t_}{d`{IUyl%aYlW z^Dlloi4$e%cRbi;ub40gnQt}8%us8S&hSCQ)||Ytk@y!{{=wo>$j8a4S`&J`k;q># zqVOyI=*o6jO%MbyN+ z?c!mWZq<9_(`W65V}8RQ?ik`-@%CEiXUE);ym2!0@#4%y$w)8RIP)pc)8D!QVSLo> z4m=LuN5GvD&<+3K zT#JAndsvHh3}#Oxt#g?1tEb~R2twH%pmB8t+{^|%TY+Q!0q5lg zL+T7J)CquC0HX|G>mk^Uo8*Q!E#OsApzI0)>pg6v6VB`%20J&3?h=eH7jnK6_=rX9 z{F&j{6u93Wc*_Nz#T7gDiwl5YWh@QKLZ`t?50hg+;p60(?_qM>{6PHtKvjEXgUW>Q9vHI%ZlF+;a^buoa}l-0@J-UV9dp)|nx@q8g083!c5qjLa19?t(CoP&M- zaGFs5BdpjXY}vzU2x@Xx&MxSxE>31fwq{N;cINgtuk2loZ9FM$tn94KOrc-SE>PN` z92<}?1kFH<=vdq6_PL5M#p6(TEvRgE$I;0dt9+pyax9yT-_=)%4P`MCSby_|d0}#I znfO4-{jlI*_{69fyI|VUmaf`FFyd!-z)vcc$a<-_dA9SgFF({Iw^?PJ`Be1oo*gdxK1f!7A5J+O##oJO$VP%vV?U3u0DH*Uzd%1{ zDh=2aQ`C-{U-y}$hye;3a@YWkMIrH!8b{E?TQMW-}~Mb(|cqm=Od64n2XsgGX(oo})rNDI-0dxhD7k z08TbrxxG0F^Q)@7Le2KJaru$F1?AO+%vA6dsedI@u>$zz$0<&8ylG;b(=}SZ~-n2sYCvtYHVvB@~98Rv+#g3S}jd90Q_1e^`a3)gLDi-p1WG2 zkxB%;>Ab_#xQ&R61YmX&n^LMfwv1!##&meWsSHO<(No+C?uQ~|2MZ>f4sa=H{pRvr zDT7rY0su`GAc_t!XXq|p5=pv$4zOWWjEItsr^ivxi@%gmT{o8KR_|bnGyHlhLP{>U zzQE7|soXh={bGHa)gv@g-|irBrAjiG@xsQ6nAx=5S+$p2$qv)f{WShKl9!>9L}Tr3 z)w}Mx^CpWK3&`z2!7r1w&XYGE z!V-s&($}w;drmWbo)D=gy1VtZvT9MK6kjQi%NQdAaQHk6QQqUu!bw&!oV_=6%+tqa z=!|$hEosB8T21H!02X?UMJyB;!@<~yTHe+8`Valuoktbka$#AdI+0hva*PPu)5a0g1?VK;7B+BZFCFG)1#lp(gTY#%Sjw;?iE8lrDFfB~9u z4X~Jdj+@nd#sj>TUbD)Dt`?!VVEFY>IyyzEdN$CXi0`?2QYbc4@3}Q;O!PMUvQLlt zPM|~y&g3?-)gfp824kdMpXmFdz)BeRyUL5UFC>fagG!$)TA)-siM->l!W9BhPTHQY zkXU+)+^)Bmg=#ogdt@3Pqll9-qANU&k}nBfKG)(R+b0Liq5?n=`v(0B1)Aeu9g3M< zk{f1WXK2B$(N)iV%S5ylhG%oJuXCJ?JvK*xsLMS^+sfUH46&s=Iogu_G(9O=S@I#@ z7$XF?e#LM6B6Dnhlm3*+$xD0$r%17`FG7}jk~Aluya4T$%##Ae%S6OYye!;jam{(V z_{;1Oy?jK(rK+;b{IlAD8P8@r;~Qn3#*#FD2OcuR9wwZFve3OpjrxN1bYeg+GqK+_ zn;_cfCcH8u$qng)rKqV~;a@)n=hqft4Udivt6G(;wzzV*k-hvY-Kbmn_z8 zim5DchgQl|Pcm*YH?{lO_mA}|P5_62Xzi(FTg*EKiY5aEbx$9%(xRNg>M5!8zB`-L zX^ZH{qBumqMz~8J!W@i~X`BA&S=)P#lzAM>IF%RALwX`;QuYBS7<}uRmfZ$aY@++I z9z{ZoH1@AT{d`s4unY%>V@3B3(m$<6!B$KoVGU1AB-p1*&dHVQsb$n`Y@PVW-Xat&BlGsiGHnk;_;Tu`nr3`oME|$20s*aNXi_CDycg#M4XX1 zn<>i1vepPERZap>)t12{1kmDA$LPoP=`j0=q4u<)_a43umB&v7DDG z)9d>W`aHH5X)GT`RK93G3*|FQq}LFs7hp)Jn&U1;WfT@%KMLG%i00RQj=9mcQcoE+ z#mIy4)JV_OzPEFnB(Hk6YgYb2G4lyvD2Ez3KertIRdhJ z(d1@_l~hV2lDF)?4C|a0b4qnH%gnWXZ|Rzgr|T5v-O9b{lu}iO6wuQk+^{44BM+7T`1XcP=#7;6cGX z(9=+zrmYymwAeDAX%0WYok@Z zckF%!M#daqvJ#^pV=-A(i)Dq>QFvm`Q2LFyM96 z+PIo_1QxY*U#H=(ARXmH@P~do062Up<*KUZrwHEuYgBYV1xv?15**N?Un~?I?-FsI zk`6u#_c}9=5nsK_-1e0<_lHOco}x~~F-Av%2@65<<5H$%aGC%_WQ|LtN&f{2Lq&*4 zI&t8_%qDmB2U|pL29jr8A&uWBZR*{{`Vg$;v(ECF_v->@Y&GA)SNe(+MLP*$_HXSo3b z{z^N0%#KK#V8VF+` z!eE*bxuHPDrBvVUrqU0h-)9l9I;4`37IZFku?^8RfuYMTL(AqqZ~;wdoY7C6jkXjl z5UwDdW+4FmBH~BlXx>cv;nt^IMGL~`O;rJ(% zwHGj0x*i1b2J|C5RSNSHBL(f){6hFLQ6ZGrTpvjHF<`2LT}pJ@_!n2X#-OoFul9gq z`^9(YU6-`r>vF%sLI$R^ROgv8bM4_4fYQa%Z=rPDacI0>iv zZJ%dRJhv*`by*BCFSEmQqUIZKowO8+bhYQ|MY$-VU)1e{jgPBs2nK5t_?vy}5hCtyN1`a?&;&M!-Hb^67-P%`{U8sVKVgDj!-S7R+-(56YLIOwPtl{~pK z@&~7XkRx+5F~lOEIEcl>wFa(L3#ytOA$+44ZtLrP?X?RySLd50w5l4LG#tAOT3R0x zK1`$J{%QF&TqDHNce1EXIa4MHDse}VKa#4NrMum0OD4eHlZtaCWsTah;dS(yT3#}J zADjG#L-2xBVtRfgRf%{?F~j~jvsSumZM*NXdamXG=BIv4gt)#Hxut#kLWdcP2BoiR zN-s9+l|-*9WCV(Yzj8PQ)Vf3e9ZJr?{(&Si@^8m-Qj&g|GTM22UX2qnTl`jYG z%&c!m+t?+9NdD4oH$fZeM~55HlEeLO{1oDC@2h7=Y2w|hZPMEH2xGO#x~Q!#Q`PkB zhpTsbt3hqToK}IJtD~fR$e^8Uwsa^mGE^k-f?(3aiW(Wrju>yVH&@kN{ka2aEAUPzcD`qP`n zM9MbpCTe&Of~&*Z^Fr<OZ7U|_vU$@p%aGy#1pm~Lv`@4j0o4E9nhM`DDzGTfDj}cBv@0k`PG(Qj z@>a+XDF?b_pRk5_Bl%*u)%#ZpFZW^t58*2i0H!2KOI0SKMtH)_1zgxH_ zcE{rc6^~$ldSlmpFJrZ_V#y1srq}~H>8diFWvs=aZ6y@N7}4Z;YDZi5+UBk5yRBXB zbWd}9Oiq2hokZY$&ZW`orD64)m3NvfwhECKr4)HD#F;l(R7IYons|O})=|Jyt+!v; zd`vlxB%R0FEdJXI9_u9Y)=0fh%LxUxbdCJHxw;WwQc#;O%RqZeJdHBIVUD=t1GX`z zxb<! zKuDyyUfcj8b2)ixk=1iW0d79jPAk8$D;-gy6>qOMs!4MV^%+TE7LKQhtWvIA=wiax z2eFS$eNeD+%wuF!LDadkE#&oBXxha{Rj-^VW8{|e-r68@|L&E(vF5GYw;$aq4G!(8 z6>d%3AJS%t5SKID8Bu#3w;r&uS4&f0Fq5uz=NXH2!$3$bE6H5ieIjBo2xQg+cveIDr%*?3kmMq$>|KX=plD0(Q&K5^w-}d1wL}GI}qx9LDkR8;FzWt z7et0gHsoKmB_9^=IpF;%oZd{ z_ntsba(raOYdG zNBZpy+P~0jbBk(rDj+%Q)tfVKw@e~w!f$uBsE>#}xRu==rKtQqigLN2_)8;QaK-Jw zXM@0X8=sGB+sa(ORfemEI;oBvHN(5s7jvObwpB+WD)9rlT9PJ53JAsf^33PO(Q$*Jc)q+0zR~L Ad;kCd diff --git a/GEMCSCBendingAnalyzer/plugins/BuildFile.xml b/GEM_Alignment/plugins/BuildFile.xml similarity index 100% rename from GEMCSCBendingAnalyzer/plugins/BuildFile.xml rename to GEM_Alignment/plugins/BuildFile.xml diff --git a/GEMCSCBendingAnalyzer/plugins/analyser.cc b/GEM_Alignment/plugins/analyser.cc similarity index 100% rename from GEMCSCBendingAnalyzer/plugins/analyser.cc rename to GEM_Alignment/plugins/analyser.cc diff --git a/GEMCSCBendingAnalyzer/test/analyser.py b/GEM_Alignment/test/analyser.py similarity index 100% rename from GEMCSCBendingAnalyzer/test/analyser.py rename to GEM_Alignment/test/analyser.py diff --git a/GEMCSCBendingAnalyzer/test/crab3_runana_MC.py b/GEM_Alignment/test/crab3_runana_MC.py similarity index 100% rename from GEMCSCBendingAnalyzer/test/crab3_runana_MC.py rename to GEM_Alignment/test/crab3_runana_MC.py From 1923b3407efcf78208622ea13b047d2c5c17a082 Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 5 Jan 2022 00:17:56 +0100 Subject: [PATCH 4/5] Cleaned readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9c65eb4..1679b33 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # alignment GEM alignment studies +``` scram p -n DirectoryName CMSSW_12_0_3 cd GEMCSCBendingAnalyzer scram b -j8 cd test cmsRun analyser.py +``` Currently set to run all 3 propagation methods on a test file from 2021 Comissioning ZeroBias0 dataset From d7700315784d41216ed1ab09a7bad4da9bba4d0b Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 5 Jan 2022 00:24:11 +0100 Subject: [PATCH 5/5] Updated readme, can now copy-paste all instructions --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1679b33..fc5f057 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,13 @@ GEM alignment studies ``` scram p -n DirectoryName CMSSW_12_0_3 -cd GEMCSCBendingAnalyzer +cd DirectoryName/src/ +git clone git@github.com:gem-sw/alignment.git +cd alignment/GEM_Alignment/ +cmsenv scram b -j8 cd test +voms-proxy-init --rfc --voms cms cmsRun analyser.py ```