CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/L1Trigger/DTTrigger/src/DTTrigProd.cc

Go to the documentation of this file.
00001 //-------------------------------------------------
00002 //
00013 //
00014 //--------------------------------------------------
00015 
00016 // This class's header
00017 #include "L1Trigger/DTTrigger/interface/DTTrigProd.h"
00018 
00019 // Framework related classes
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 // Data Formats classes
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 // Collaborating classes
00036 #include <iostream>
00037 
00038 using namespace edm;
00039 using namespace std;
00040 
00041 // DataFormats interface
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 // void DTTrigProd::beginJob(const EventSetup & iEventSetup){
00067 
00068 
00069 //   // get DTConfigManager
00070 //   // ESHandle< DTConfigManager > confManager ;
00071 //   // iEventSetup.get< DTConfigManagerRcd >().get( confManager ) ;
00072 //   // my_BXoffset = confManager->getBXOffset();
00073 
00074 //   if (my_debug)
00075 //     cout << "[DTTrigProd] DTTrig istance Created" << endl;
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         // 100511 SV LUTs will NOT be configurated from cfg if not found in DB
00104         //dtConfig->getDTConfigLUTs(chid)->print(); 
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     //SV 090903 check luts
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   // Convert Phi Segments
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; // Shift correct BX to 0 (needed for DTTF data processing)
00140     int sc_sector = (*it).SCId().sector();
00141     if (my_DTTFnum == true) sc_sector--; // Modified for DTTF numbering [0-11]
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   // Convert Theta Segments
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; // Shift correct BX to 0 (needed for DTTF data processing)
00167     int sc_sector =  (*it).SCId().sector();
00168     if (my_DTTFnum == true) sc_sector--; // Modified for DTTF numbering [0-11]
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    // Write everything into the event
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