Skip to content

Commit

Permalink
Merge pull request #25275 from Dr15Jones/fixRPCtoDTTranslator
Browse files Browse the repository at this point in the history
Fix RPCtoDTTranslator
  • Loading branch information
cmsbuild committed Nov 20, 2018
2 parents 445a255 + 29a8a53 commit 06afbf8
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 101 deletions.
7 changes: 3 additions & 4 deletions L1Trigger/L1TTwinMux/interface/DTLowQMatching.h
Expand Up @@ -31,8 +31,7 @@

class DTLowQMatching {
public:
DTLowQMatching(L1MuDTChambPhContainer* , L1MuDTChambPhContainer );
~DTLowQMatching() {};
DTLowQMatching(L1MuDTChambPhContainer const* , L1MuDTChambPhContainer const& );

void run(const edm::EventSetup& c);

Expand All @@ -45,8 +44,8 @@ class DTLowQMatching {

void Matching(int track_seg);

L1MuDTChambPhContainer* m_phiDTDigis;
L1MuDTChambPhContainer m_phiRPCDigis;
L1MuDTChambPhContainer const* m_phiDTDigis;
L1MuDTChambPhContainer const& m_phiRPCDigis;
// L1MuDTChambPhContainer m_phiRPCDigis2;


Expand Down
2 changes: 1 addition & 1 deletion L1Trigger/L1TTwinMux/interface/IOPrinter.h
Expand Up @@ -31,7 +31,7 @@ class IOPrinter{
~IOPrinter() {};
void run(edm::Handle<L1MuDTChambPhContainer>, const L1MuDTChambPhContainer &, edm::Handle<RPCDigiCollection>,
const edm::EventSetup& );
void run(L1MuDTChambPhContainer*, const L1MuDTChambPhContainer & , RPCDigiCollection*,
void run(L1MuDTChambPhContainer const*, const L1MuDTChambPhContainer & , RPCDigiCollection const*,
const edm::EventSetup& );

};
Expand Down
7 changes: 3 additions & 4 deletions L1Trigger/L1TTwinMux/interface/RPCHitCleaner.h
Expand Up @@ -29,13 +29,12 @@

class RPCHitCleaner {
public:
RPCHitCleaner(RPCDigiCollection inrpcDigis);
~RPCHitCleaner() {};
RPCHitCleaner(RPCDigiCollection const& inrpcDigis);

void run(const edm::EventSetup& c);

///Return Output RPCCollection
RPCDigiCollection getRPCCollection(){ return m_outrpcDigis;}
RPCDigiCollection const& getRPCCollection(){ return m_outrpcDigis;}

struct detId_Ext{
RPCDetId detid;
Expand All @@ -49,7 +48,7 @@ class RPCHitCleaner {
private:

///Input
RPCDigiCollection m_inrpcDigis;
RPCDigiCollection const& m_inrpcDigis;
///Output
RPCDigiCollection m_outrpcDigis;

Expand Down
23 changes: 4 additions & 19 deletions L1Trigger/L1TTwinMux/interface/RPCtoDTTranslator.h
Expand Up @@ -31,14 +31,13 @@

class RPCtoDTTranslator {
public:
RPCtoDTTranslator(RPCDigiCollection inrpcDigis);
~RPCtoDTTranslator() {};
RPCtoDTTranslator(const RPCDigiCollection& inrpcDigis);

void run(const edm::EventSetup& c);

///Return Output PhContainer
L1MuDTChambPhContainer getDTContainer(){ return m_rpcdt_translated;}
L1MuDTChambPhContainer getDTRPCHitsContainer(){ return m_rpchitsdt_translated;}
L1MuDTChambPhContainer const& getDTContainer() const { return m_rpcdt_translated;}
L1MuDTChambPhContainer const& getDTRPCHitsContainer() const { return m_rpchitsdt_translated;}

static int radialAngle(RPCDetId , const edm::EventSetup& , int);
static int bendingAngle(int, int, int);
Expand All @@ -52,21 +51,7 @@ class RPCtoDTTranslator {
L1MuDTChambPhContainer m_rpcdt_translated;
L1MuDTChambPhContainer m_rpchitsdt_translated;

RPCDigiCollection m_rpcDigis;

struct rpc_hit
{
int bx;
int station;
int sector;
int wheel;
RPCDetId detid;
int strip;
int roll;
int layer;
//rpc_hit(int pbx, int pstation,int psector, int pwheel, RPCDetId pdet, int pstrip, int proll, int player) : bx(pbx),station(pstation),sector(psector),wheel(pwheel, detid(pdet),strip(pstrip),roll(proll),layer(player) {}
};

const RPCDigiCollection& m_rpcDigis;

};
#endif
14 changes: 7 additions & 7 deletions L1Trigger/L1TTwinMux/src/DTLowQMatching.cc
Expand Up @@ -19,7 +19,7 @@

using namespace std;

DTLowQMatching::DTLowQMatching(L1MuDTChambPhContainer* inphiDTDigis, L1MuDTChambPhContainer inphiRPCDigis): m_phiDTDigis(inphiDTDigis),m_phiRPCDigis(inphiRPCDigis) {
DTLowQMatching::DTLowQMatching(L1MuDTChambPhContainer const* inphiDTDigis, L1MuDTChambPhContainer const& inphiRPCDigis): m_phiDTDigis(inphiDTDigis),m_phiRPCDigis(inphiRPCDigis) {
// m_phiDTDigis=inphiDTDigis;
// m_phiRPCDigis=inphiRPCDigis;
};
Expand All @@ -41,15 +41,15 @@ void DTLowQMatching::Matching(int track_seg){

L1MuDTChambPhDigi * dtts=nullptr;
L1MuDTChambPhDigi * rpcts1=nullptr;
auto m_phiRPCDigis_tm=std::make_shared<L1MuTMChambPhContainer>();
L1MuTMChambPhContainer m_phiRPCDigis_tm;
const std::vector<L1MuDTChambPhDigi> *phiChambVector;
phiChambVector=m_phiRPCDigis.getContainer();
m_phiRPCDigis_tm->setContainer(*phiChambVector );
m_phiRPCDigis_tm.setContainer(*phiChambVector );

auto m_phiDTDigis_tm=std::make_shared<L1MuTMChambPhContainer>();
L1MuTMChambPhContainer m_phiDTDigis_tm;
const std::vector<L1MuDTChambPhDigi> *phiChambVectorDT;
phiChambVectorDT=m_phiDTDigis->getContainer();
m_phiDTDigis_tm->setContainer(*phiChambVectorDT );
m_phiDTDigis_tm.setContainer(*phiChambVectorDT );

int bx=0, wheel=0, sector=0, station=1;
//cout<<"LowQ Matching "<<track_seg<<endl;
Expand All @@ -60,12 +60,12 @@ void DTLowQMatching::Matching(int track_seg){
int matched = 0;
for(int rpcbx=bx-1; rpcbx<=bx+1; rpcbx++){
dtts=nullptr; rpcts1=nullptr;
dtts = m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,bx ,track_seg);
dtts = m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,bx ,track_seg);
if(!dtts || dtts->code()>=2) continue;
int nhits = 0;
nhits = DTRPCBxCorrection::nRPCHits(m_phiRPCDigis, rpcbx, wheel, sector, station);
for(int hit=0; hit<nhits; hit++){
rpcts1 = m_phiRPCDigis_tm->chPhiSegm(wheel, station, sector, rpcbx,hit);
rpcts1 = m_phiRPCDigis_tm.chPhiSegm(wheel, station, sector, rpcbx,hit);
//If DT primitives with q<2 match with rpc hits do nothing else
//'remove' the primitive by setting is quality to 7
if(rpcts1 && DTRPCBxCorrection::deltaPhi(dtts->phi(),rpcts1->phi()) < m_DphiWindow) {
Expand Down
22 changes: 11 additions & 11 deletions L1Trigger/L1TTwinMux/src/DTRPCBxCorrection.cc
Expand Up @@ -41,16 +41,16 @@ void DTRPCBxCorrection::run( const edm::EventSetup& c) {

void DTRPCBxCorrection::BxCorrection(int track_seg){

auto m_phiDTDigis_tm=std::make_shared<L1MuTMChambPhContainer>();
L1MuTMChambPhContainer m_phiDTDigis_tm;
//std::shared_ptr<L1MuTMChambPhContainer> m_phiDTDigis_tm (new L1MuTMChambPhContainer);
const std::vector<L1MuDTChambPhDigi> *phiChambVectorDT;
phiChambVectorDT= m_phiDTDigis.getContainer();
m_phiDTDigis_tm->setContainer(*phiChambVectorDT);
auto m_phiRPCDigis_tm=std::make_shared<L1MuTMChambPhContainer>();
m_phiDTDigis_tm.setContainer(*phiChambVectorDT);
L1MuTMChambPhContainer m_phiRPCDigis_tm;
//std::shared_ptr<L1MuTMChambPhContainer> m_phiRPCDigis_tm (new L1MuTMChambPhContainer);
const std::vector<L1MuDTChambPhDigi> *phiChambVectorRPC;
phiChambVectorRPC= m_phiRPCDigis.getContainer();
m_phiRPCDigis_tm->setContainer(*phiChambVectorRPC);
m_phiRPCDigis_tm.setContainer(*phiChambVectorRPC);

int ibx_dtm = 0, fbx_dtm = 0;
int ibx_dtp = 0, fbx_dtp = 0;
Expand All @@ -68,12 +68,12 @@ void DTRPCBxCorrection::BxCorrection(int track_seg){
for(int rpcbx=bx-1; rpcbx<=bx+1; rpcbx++){
L1MuDTChambPhDigi * dtts=nullptr;
L1MuDTChambPhDigi * rpcts1=nullptr;
dtts = m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,bx ,track_seg);
dtts = m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,bx ,track_seg);

if(!dtts ) continue;
int nhits = nRPCHits(*m_phiRPCDigis_tm, rpcbx, wheel, sector, station);
int nhits = nRPCHits(m_phiRPCDigis_tm, rpcbx, wheel, sector, station);
for(int hit=0; hit<nhits; hit++){
rpcts1 = m_phiRPCDigis_tm->chPhiSegm(wheel, station, sector, rpcbx,hit);
rpcts1 = m_phiRPCDigis_tm.chPhiSegm(wheel, station, sector, rpcbx,hit);
//Store in vectors the dphi of matched dt/rpc
if(rpcts1 && dtts && dtts->code()<m_QualityLimit && deltaPhi(dtts->phi(),rpcts1->phi()) < m_DphiWindow){
if((dtts->bxNum()-rpcbx)==-1 ) {
Expand Down Expand Up @@ -118,8 +118,8 @@ void DTRPCBxCorrection::BxCorrection(int track_seg){
}
else continue;
//Primitve to be shifted in place of dttsnew
dtts = m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,init_bx,track_seg);
dttsnew = m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,final_bx,track_seg);
dtts = m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,init_bx,track_seg);
dttsnew = m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,final_bx,track_seg);
bool shift_1 = false;
if(dtts && dtts->code()<m_QualityLimit && (!dttsnew || shifted[final_bx+3] || dups[final_bx+3])) {
dtts_sh = new L1MuDTChambPhDigi( final_bx , dtts->whNum(), dtts->scNum(), dtts->stNum(),dtts->phi(), dtts->phiB(), dtts->code(), dtts->Ts2Tag(), dtts->BxCnt(),1);
Expand All @@ -129,7 +129,7 @@ void DTRPCBxCorrection::BxCorrection(int track_seg){
if(dtts && dtts->code()<m_QualityLimit && dttsnew) dups[init_bx+3] = true;

//dtts exists and qual lt m_QualityLimit and dttsnew exists and the previous (shift_1) prim was not shifted and there is empty space in second TS
if(dtts && dtts->code()<m_QualityLimit && dttsnew && !shift_1 && !m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,final_bx,flipBit(track_seg)) ) {
if(dtts && dtts->code()<m_QualityLimit && dttsnew && !shift_1 && !m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,final_bx,flipBit(track_seg)) ) {
///XXX: Source of discrepancies
///in order to send as second TS the two prims must come from different halves of the station
///this information does not exist in data
Expand All @@ -154,7 +154,7 @@ void DTRPCBxCorrection::BxCorrection(int track_seg){
continue;}
if(dups[bx+3]) continue;
///if there is no shift then put the original primitive
dtts = m_phiDTDigis_tm->chPhiSegm(wheel,station,sector,bx,track_seg);
dtts = m_phiDTDigis_tm.chPhiSegm(wheel,station,sector,bx,track_seg);
if(!shifted[bx+3] && dtts) {
m_l1ttma_out.push_back(*dtts);
}
Expand Down
34 changes: 10 additions & 24 deletions L1Trigger/L1TTwinMux/src/IOPrinter.cc
Expand Up @@ -18,8 +18,6 @@ void IOPrinter::run(edm::Handle<L1MuDTChambPhContainer> inphiDigis, const L1MuDT

cout<<"======================================================"<<endl;
int bx=0, wheel=0, sector=0, station=1;
L1MuDTChambPhDigi const* dtts1=nullptr;
L1MuDTChambPhDigi const* dtts2=nullptr;

///Align track segments that are coming in bx-1.
cout<<"DT Inputs/RPCDT Inputs"<<endl;
Expand All @@ -30,9 +28,8 @@ void IOPrinter::run(edm::Handle<L1MuDTChambPhContainer> inphiDigis, const L1MuDT
for (sector=0;sector<12; sector++ ){
for (station=1; station<=4; station++){

dtts1=nullptr; dtts2=nullptr;
dtts1 = inphiDigis->chPhiSegm1(wheel,station,sector,bx);
dtts2 = inphiDigis->chPhiSegm2(wheel,station,sector,bx - 1 );
auto dtts1 = inphiDigis->chPhiSegm1(wheel,station,sector,bx);
auto dtts2 = inphiDigis->chPhiSegm2(wheel,station,sector,bx - 1 );
if(dtts1 && dtts1->code()!=7) {
L1MuDTChambPhDigi dt_ts1 = *dtts1;
cout<<dtts1->bxNum()<<"\t"<<dtts1->whNum()<<"\t"<<dtts1->scNum()<<"\t"<<dtts1->stNum()<<"\t"<<dtts1->phi()<<"\t"<<dtts1->phiB()<<"\t"<<dtts1->code()<<"\t"<<dtts1->Ts2Tag()<<"\t"<<dtts1->BxCnt()<<"\t0"<<endl;
Expand Down Expand Up @@ -68,19 +65,15 @@ void IOPrinter::run(edm::Handle<L1MuDTChambPhContainer> inphiDigis, const L1MuDT

cout<<"TwinMux Output"<<endl;
cout<<"bx\twheel\tsector\tstation\tphi\tphib\tcode\tts2tag\tbxcnt\trpcbit"<<endl;
dtts1=nullptr;
dtts2=nullptr;


for(bx=-2; bx<=2; bx++){
for (wheel=-2;wheel<=2; wheel++ ){
for (sector=0;sector<12; sector++ ){
for (station=1; station<=4; station++){

dtts1=nullptr; dtts2=nullptr;

dtts1 = outphiDigis.chPhiSegm1(wheel,station,sector,bx);
dtts2 = outphiDigis.chPhiSegm2(wheel,station,sector,bx - 1 );
auto dtts1 = outphiDigis.chPhiSegm1(wheel,station,sector,bx);
auto dtts2 = outphiDigis.chPhiSegm2(wheel,station,sector,bx - 1 );
if(dtts1&& dtts1->code()!=7) {
L1MuDTChambPhDigi dt_ts1 = *dtts1;
cout<<dtts1->bxNum()<<"\t"<<dtts1->whNum()<<"\t"<<dtts1->scNum()<<"\t"<<dtts1->stNum()<<"\t"<<dtts1->phi()<<"\t"<<dtts1->phiB()<<"\t"<<dtts1->code()<<"\t"<<dtts1->Ts2Tag()<<"\t"<<dtts1->BxCnt()<<"\t"<<dtts1->RpcBit()<<endl;
Expand All @@ -99,15 +92,13 @@ cout<<"======================================================"<<endl;
}


void IOPrinter::run(L1MuDTChambPhContainer* inphiDigis,const L1MuDTChambPhContainer & outphiDigis,RPCDigiCollection* rpcDigis,const edm::EventSetup& c) {
void IOPrinter::run(L1MuDTChambPhContainer const* inphiDigis,const L1MuDTChambPhContainer & outphiDigis,RPCDigiCollection const* rpcDigis,const edm::EventSetup& c) {

cout<<"======================================================"<<endl;
int bx=0, wheel=0, sector=0, station=1;
L1MuDTChambPhDigi const* dtts1=nullptr;
L1MuDTChambPhDigi const* dtts2=nullptr;
L1MuTMChambPhContainer * inphiDigis_tm=nullptr;
L1MuTMChambPhContainer inphiDigis_tm;
const std::vector<L1MuDTChambPhDigi> * vInCon=inphiDigis->getContainer();
inphiDigis_tm->setContainer(*vInCon);
inphiDigis_tm.setContainer(*vInCon);


///Align track segments that are coming in bx-1.
Expand All @@ -120,8 +111,7 @@ void IOPrinter::run(L1MuDTChambPhContainer* inphiDigis,const L1MuDTChambPhContai
for (station=1; station<=4; station++){
int nhits = DTRPCBxCorrection::nRPCHits(*inphiDigis, bx, wheel, sector, station);
for(int hit=0; hit<nhits; hit++){
dtts1=nullptr;
dtts1 = inphiDigis_tm->chPhiSegm(wheel,station,sector,bx,hit);
auto dtts1 = inphiDigis_tm.chPhiSegm(wheel,station,sector,bx,hit);
if(dtts1) {
cout<<dtts1->bxNum()<<"\t"<<dtts1->whNum()<<"\t"<<dtts1->scNum()<<"\t"<<dtts1->stNum()<<"\t"<<dtts1->phi()<<"\t"<<dtts1->phiB()<<"\t"<<dtts1->code()<<"\t"<<dtts1->Ts2Tag()<<"\t"<<dtts1->BxCnt()<<"\t0"<<endl;
}
Expand Down Expand Up @@ -153,19 +143,15 @@ void IOPrinter::run(L1MuDTChambPhContainer* inphiDigis,const L1MuDTChambPhContai

cout<<"TwinMux Output"<<endl;
cout<<"bx\twheel\tsector\tstation\tphi\tphib\tcode\tts2tag\tbxcnt\trpcbit"<<endl;
dtts1=nullptr;
dtts2=nullptr;


for(bx=-2; bx<=2; bx++){
for (wheel=-2;wheel<=2; wheel++ ){
for (sector=0;sector<12; sector++ ){
for (station=1; station<=4; station++){

dtts1=nullptr; dtts2=nullptr;

dtts1 = outphiDigis.chPhiSegm1(wheel,station,sector,bx);
dtts2 = outphiDigis.chPhiSegm2(wheel,station,sector,bx - 1 );
auto dtts1 = outphiDigis.chPhiSegm1(wheel,station,sector,bx);
auto dtts2 = outphiDigis.chPhiSegm2(wheel,station,sector,bx - 1 );
if(dtts1&& dtts1->code()!=7) {
L1MuDTChambPhDigi dt_ts1 = *dtts1;
cout<<dtts1->bxNum()<<"\t"<<dtts1->whNum()<<"\t"<<dtts1->scNum()<<"\t"<<dtts1->stNum()<<"\t"<<dtts1->phi()<<"\t"<<dtts1->phiB()<<"\t"<<dtts1->code()<<"\t"<<dtts1->Ts2Tag()<<"\t"<<dtts1->BxCnt()<<"\t"<<dtts1->RpcBit()<<endl;
Expand Down
30 changes: 15 additions & 15 deletions L1Trigger/L1TTwinMux/src/L1TTwinMuxAlgorithm.cc
Expand Up @@ -47,29 +47,29 @@ edm::Handle<L1MuDTChambThContainer> thetaDigis, edm::Handle<RPCDigiCollection> r


///Align track segments that are coming in bx-1.
auto alignedDTs=std::make_shared<AlignTrackSegments>(*inphiDigis);
alignedDTs->run(c);
L1MuDTChambPhContainer phiDigis = alignedDTs->getDTContainer();
AlignTrackSegments alignedDTs{*inphiDigis};
alignedDTs.run(c);
L1MuDTChambPhContainer const& phiDigis = alignedDTs.getDTContainer();
//if only DTs are required without bx correction
//return the aligned track segments
if(onlyDT && !correctBX && !useLowQDT) {
m_tm_phi_output = phiDigis;
return;
}
///Clean RPC hits
auto rpcHitCl=std::make_shared<RPCHitCleaner>(*rpcDigis);
rpcHitCl->run(c);
RPCDigiCollection rpcDigisCleaned = rpcHitCl->getRPCCollection();
RPCHitCleaner rpcHitCl{*rpcDigis};
rpcHitCl.run(c);
RPCDigiCollection const& rpcDigisCleaned = rpcHitCl.getRPCCollection();

///Translate RPC digis to DT primitives.
auto dt_from_rpc= std::make_shared<RPCtoDTTranslator>(rpcDigisCleaned);
dt_from_rpc->run(c);
L1MuDTChambPhContainer rpcPhiDigis = dt_from_rpc->getDTContainer(); //Primitves used for RPC->DT (only station 1 and 2)
L1MuDTChambPhContainer rpcHitsPhiDigis = dt_from_rpc->getDTRPCHitsContainer(); //Primitves used for bx correction
RPCtoDTTranslator dt_from_rpc{rpcDigisCleaned};
dt_from_rpc.run(c);
L1MuDTChambPhContainer const& rpcPhiDigis = dt_from_rpc.getDTContainer(); //Primitves used for RPC->DT (only station 1 and 2)
L1MuDTChambPhContainer const& rpcHitsPhiDigis = dt_from_rpc.getDTRPCHitsContainer(); //Primitves used for bx correction

///Match low q DT primitives with RPC hits in dphiWindow
auto dtlowq= std::make_shared<DTLowQMatching>(&phiDigis, rpcHitsPhiDigis);
dtlowq->run(c);
DTLowQMatching dtlowq{&phiDigis, rpcHitsPhiDigis};
dtlowq.run(c);

if(onlyDT && !correctBX && useLowQDT) {
m_tm_phi_output = phiDigis;
Expand All @@ -88,10 +88,10 @@ edm::Handle<L1MuDTChambThContainer> thetaDigis, edm::Handle<RPCDigiCollection> r

///Correct(in bx) DT primitives by comparing them to RPC.
// DTRPCBxCorrection *rpc_dt_bx = new DTRPCBxCorrection(phiDigis,rpcHitsPhiDigis);
auto rpc_dt_bx=std::make_shared<DTRPCBxCorrection>(phiDigis,rpcHitsPhiDigis);
rpc_dt_bx->run(c);
DTRPCBxCorrection rpc_dt_bx{phiDigis,rpcHitsPhiDigis};
rpc_dt_bx.run(c);

L1MuDTChambPhContainer phiDigiscp = rpc_dt_bx->getDTContainer();
L1MuDTChambPhContainer const& phiDigiscp = rpc_dt_bx.getDTContainer();

///Add RPC primitives in case that there are no DT primitives.
std::vector<L1MuDTChambPhDigi> l1ttma_out;
Expand Down
5 changes: 3 additions & 2 deletions L1Trigger/L1TTwinMux/src/RPCHitCleaner.cc
Expand Up @@ -26,8 +26,9 @@
using namespace std;


RPCHitCleaner::RPCHitCleaner(RPCDigiCollection inrpcDigis){
m_inrpcDigis = inrpcDigis;
RPCHitCleaner::RPCHitCleaner(RPCDigiCollection const& inrpcDigis):
m_inrpcDigis {inrpcDigis}
{
}

namespace {
Expand Down

0 comments on commit 06afbf8

Please sign in to comment.