Go to the documentation of this file.00001
00002
00013
00014
00015
00016
00017 #include "L1Trigger/DTTrigger/interface/DTTrigProd.h"
00018
00019
00020 #include "FWCore/Framework/interface/EventSetup.h"
00021 #include "FWCore/Framework/interface/ESHandle.h"
00022 #include "FWCore/Framework/interface/Run.h"
00023
00024 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigManager.h"
00025 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigManagerRcd.h"
00026
00027
00028 #include "L1Trigger/DTSectorCollector/interface/DTSectCollPhSegm.h"
00029 #include "L1Trigger/DTSectorCollector/interface/DTSectCollThSegm.h"
00030 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambPhContainer.h"
00031 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambPhDigi.h"
00032 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThContainer.h"
00033 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThDigi.h"
00034
00035
00036 #include <iostream>
00037
00038 using namespace edm;
00039 using namespace std;
00040
00041
00042 typedef vector<DTSectCollPhSegm> SectCollPhiColl;
00043 typedef SectCollPhiColl::const_iterator SectCollPhiColl_iterator;
00044 typedef vector<DTSectCollThSegm> SectCollThetaColl;
00045 typedef SectCollThetaColl::const_iterator SectCollThetaColl_iterator;
00046
00047 DTTrigProd::DTTrigProd(const ParameterSet& pset) : my_trig(0) {
00048
00049 produces<L1MuDTChambPhContainer>();
00050 produces<L1MuDTChambThContainer>();
00051
00052 my_debug = pset.getUntrackedParameter<bool>("debug");
00053 my_DTTFnum = pset.getParameter<bool>("DTTFSectorNumbering");
00054 my_params = pset;
00055
00056 my_lut_dump_flag = pset.getUntrackedParameter<bool>("lut_dump_flag");
00057 my_lut_btic = pset.getUntrackedParameter<int>("lut_btic");
00058 }
00059
00060 DTTrigProd::~DTTrigProd(){
00061
00062 if (my_trig) delete my_trig;
00063
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 void DTTrigProd::beginRun(edm::Run& iRun, const edm::EventSetup& iEventSetup) {
00080
00081 if(my_debug)
00082 cout << "DTTrigProd::beginRun " << iRun.id().run() << endl;
00083
00084 using namespace edm;
00085
00086 ESHandle< DTConfigManager > dtConfig ;
00087 iEventSetup.get< DTConfigManagerRcd >().get( dtConfig ) ;
00088
00089 if(my_debug)
00090 {
00091 cout << "DTConfigManagerRcd : Print some Config stuff" << endl;
00092 DTBtiId btiid(1,1,1,1,1);
00093 DTTracoId tracoid(1,1,1,1);
00094 DTChamberId chid(1,1,1);
00095 DTSectCollId scid(1,1);
00096 cout << "BtiMap & TracoMap Size for chamber (1,1,1):" << dtConfig->getDTConfigBtiMap(chid).size()
00097 << " " << dtConfig->getDTConfigTracoMap(chid).size() << endl;
00098
00099 dtConfig->getDTConfigBti(btiid)->print();
00100 dtConfig->getDTConfigTraco(tracoid)->print();
00101 dtConfig->getDTConfigTSTheta(chid)->print();
00102 dtConfig->getDTConfigTSPhi(chid)->print();
00103
00104
00105 }
00106
00107
00108 if (!my_trig) {
00109 my_trig = new DTTrig(my_params);
00110 my_trig->createTUs(iEventSetup);
00111 if (my_debug)
00112 cout << "[DTTrigProd] TU's Created" << endl;
00113
00114
00115 if(my_lut_dump_flag) {
00116 cout << "Dumping luts...." << endl;
00117 my_trig->dumpLuts(my_lut_btic, dtConfig.product());
00118 }
00119 }
00120
00121 }
00122
00123
00124 void DTTrigProd::produce(Event & iEvent, const EventSetup& iEventSetup){
00125
00126 my_trig->triggerReco(iEvent,iEventSetup);
00127 my_BXoffset = my_trig->getBXOffset();
00128
00129 if (my_debug)
00130 cout << "[DTTrigProd] Trigger algorithm run for " <<iEvent.id() << endl;
00131
00132
00133 SectCollPhiColl myPhiSegments;
00134 myPhiSegments = my_trig->SCPhTrigs();
00135 vector<L1MuDTChambPhDigi> outPhi;
00136
00137 SectCollPhiColl_iterator SCPCend = myPhiSegments.end();
00138 for (SectCollPhiColl_iterator it=myPhiSegments.begin();it!=SCPCend;++it){
00139 int step = (*it).step() - my_BXoffset;
00140 int sc_sector = (*it).SCId().sector();
00141 if (my_DTTFnum == true) sc_sector--;
00142 outPhi.push_back(L1MuDTChambPhDigi(step,
00143 (*it).ChamberId().wheel(),
00144 sc_sector,
00145 (*it).ChamberId().station(),
00146 (*it).phi(),
00147 (*it).phiB(),
00148 (*it).code(),
00149 !(*it).isFirst(),
00150 0
00151 ));
00152 }
00153
00154
00155 SectCollThetaColl myThetaSegments;
00156 myThetaSegments = my_trig->SCThTrigs();
00157 vector<L1MuDTChambThDigi> outTheta;
00158
00159 SectCollThetaColl_iterator SCTCend = myThetaSegments.end();
00160 for (SectCollThetaColl_iterator it=myThetaSegments.begin();it!=SCTCend;++it){
00161 int pos[7], qual[7];
00162 for (int i=0; i<7; i++){
00163 pos[i] =(*it).position(i);
00164 qual[i]=(*it).quality(i);
00165 }
00166 int step =(*it).step() - my_BXoffset;
00167 int sc_sector = (*it).SCId().sector();
00168 if (my_DTTFnum == true) sc_sector--;
00169 outTheta.push_back(L1MuDTChambThDigi( step,
00170 (*it).ChamberId().wheel(),
00171 sc_sector,
00172 (*it).ChamberId().station(),
00173 pos,
00174 qual
00175 ));
00176 }
00177
00178
00179 std::auto_ptr<L1MuDTChambPhContainer> resultPhi (new L1MuDTChambPhContainer);
00180 resultPhi->setContainer(outPhi);
00181 iEvent.put(resultPhi);
00182 std::auto_ptr<L1MuDTChambThContainer> resultTheta (new L1MuDTChambThContainer);
00183 resultTheta->setContainer(outTheta);
00184 iEvent.put(resultTheta);
00185
00186 }
00187