CMS 3D CMS Logo

Public Member Functions | Private Attributes

CSCTFAnalyzer Class Reference

#include <CSCTFAnalyzer.h>

Inheritance diagram for CSCTFAnalyzer:
edm::EDAnalyzer

List of all members.

Public Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 CSCTFAnalyzer (const edm::ParameterSet &conf)
 ~CSCTFAnalyzer (void)

Private Attributes

int dtPhi [12][2]
TFile * file
edm::InputTag lctProducer
edm::InputTag mbProducer
edm::InputTag statusProducer
edm::InputTag trackProducer
TTree * tree

Detailed Description

Definition at line 12 of file CSCTFAnalyzer.h.


Constructor & Destructor Documentation

CSCTFAnalyzer::CSCTFAnalyzer ( const edm::ParameterSet conf) [explicit]

Definition at line 17 of file CSCTFAnalyzer.cc.

References dtPhi, file, edm::ParameterSet::getUntrackedParameter(), lctProducer, mbProducer, statusProducer, trackProducer, and tree.

                                                       :edm::EDAnalyzer(){
        mbProducer    = conf.getUntrackedParameter<edm::InputTag>("mbProducer",edm::InputTag("csctfunpacker"));
        lctProducer   = conf.getUntrackedParameter<edm::InputTag>("lctProducer",edm::InputTag("csctfunpacker"));
        trackProducer = conf.getUntrackedParameter<edm::InputTag>("trackProducer",edm::InputTag("csctfunpacker"));
        statusProducer= conf.getUntrackedParameter<edm::InputTag>("statusProducer",edm::InputTag("csctfunpacker"));
        file = new TFile("ewq.root","RECREATE");
        tree = new TTree("dy","QWE");
        tree->Branch("dtPhi_1_plus",&dtPhi[0][0],"dtPhi_1_plus/I");
        tree->Branch("dtPhi_2_plus",&dtPhi[1][0],"dtPhi_2_plus/I");
        tree->Branch("dtPhi_3_plus",&dtPhi[2][0],"dtPhi_3_plus/I");
        tree->Branch("dtPhi_4_plus",&dtPhi[3][0],"dtPhi_4_plus/I");
        tree->Branch("dtPhi_5_plus",&dtPhi[4][0],"dtPhi_5_plus/I");
        tree->Branch("dtPhi_6_plus",&dtPhi[5][0],"dtPhi_6_plus/I");
        tree->Branch("dtPhi_7_plus",&dtPhi[6][0],"dtPhi_7_plus/I");
        tree->Branch("dtPhi_8_plus",&dtPhi[7][0],"dtPhi_8_plus/I");
        tree->Branch("dtPhi_9_plus",&dtPhi[8][0],"dtPhi_9_plus/I");
        tree->Branch("dtPhi_10_plus",&dtPhi[9][0],"dtPhi_10_plus/I");
        tree->Branch("dtPhi_11_plus",&dtPhi[10][0],"dtPhi_11_plus/I");
        tree->Branch("dtPhi_12_plus",&dtPhi[11][0],"dtPhi_12_plus/I");
        tree->Branch("dtPhi_1_minus",&dtPhi[0][1],"dtPhi_1_minus/I");
        tree->Branch("dtPhi_2_minus",&dtPhi[1][1],"dtPhi_2_minus/I");
        tree->Branch("dtPhi_3_minus",&dtPhi[2][1],"dtPhi_3_minus/I");
        tree->Branch("dtPhi_4_minus",&dtPhi[3][1],"dtPhi_4_minus/I");
        tree->Branch("dtPhi_5_minus",&dtPhi[4][1],"dtPhi_5_minus/I");
        tree->Branch("dtPhi_6_minus",&dtPhi[5][1],"dtPhi_6_minus/I");
        tree->Branch("dtPhi_7_minus",&dtPhi[6][1],"dtPhi_7_minus/I");
        tree->Branch("dtPhi_8_minus",&dtPhi[7][1],"dtPhi_8_minus/I");
        tree->Branch("dtPhi_9_minus",&dtPhi[8][1],"dtPhi_9_minus/I");
        tree->Branch("dtPhi_10_minus",&dtPhi[9][1],"dtPhi_10_minus/I");
        tree->Branch("dtPhi_11_minus",&dtPhi[10][1],"dtPhi_11_minus/I");
        tree->Branch("dtPhi_12_minus",&dtPhi[11][1],"dtPhi_12_minus/I");
}
CSCTFAnalyzer::~CSCTFAnalyzer ( void  ) [inline]

Definition at line 23 of file CSCTFAnalyzer.h.

References file, and tree.

{ file->cd(); tree->Write(); file->Close(); }

Member Function Documentation

void CSCTFAnalyzer::analyze ( const edm::Event e,
const edm::EventSetup c 
) [virtual]

Implements edm::EDAnalyzer.

Definition at line 50 of file CSCTFAnalyzer.cc.

References gather_cfg::cout, dtPhi, edm::Event::getByLabel(), edm::InputTag::instance(), edm::HandleBase::isValid(), edm::InputTag::label(), lctProducer, mbProducer, edm::Handle< T >::product(), relativeConstraints::station, ntuplemaker::status, statusProducer, trackProducer, testEve_cfg::tracks, tree, and CSCTriggerNumbering::triggerSubSectorFromLabels().

                                                                    {
/*      edm::Handle<FEDRawDataCollection> rawdata;
        e.getByLabel("source","",rawdata);

        const FEDRawData& fedData = rawdata->FEDData(750);
        if( fedData.size()==0 ) return;
        unsigned short *data = (unsigned short *)fedData.data();
        unsigned int    size = fedData.size()/2;
        std::cout<<"New event:"<<std::endl;
        for(unsigned i=0; i<size/4; i++)
                std::cout<<std::hex<<" "<<std::setw(6)<<data[i*4+0]<<" "<<std::setw(6)<<data[i*4+1]<<" "<<std::setw(6)<<data[i*4+2]<<" "<<std::setw(6)<<data[i*4+3]<<std::dec<<std::endl;
        std::cout<<"End of event"<<std::endl;
        return;
*/
        if( statusProducer.label() != "null" ){
                edm::Handle<L1CSCStatusDigiCollection> status;
                e.getByLabel(statusProducer.label(),statusProducer.instance(),status);
                if( status.isValid() ){
                        edm::LogInfo("CSCTFAnalyzer") << "  Unpacking Errors: "<<status->first;
                        for(std::vector<L1CSCSPStatusDigi>::const_iterator stat=status->second.begin();
                                stat!=status->second.end(); stat++){
                                //edm::LogInfo("CSCTFAnalyzer") << "   Status: SP in slot "<<stat->slot()<<"  FMM: "<<stat->FMM()<<" SE: 0x"<<std::hex<<stat->SEs()<<" VP: 0x"<<stat->VPs()<<std::dec;
                        }
                } else edm::LogInfo("CSCTFAnalyzer")<<"  No valid L1CSCStatusDigiCollection products found";
        }

        if( mbProducer.label() != "null" ){
                bzero(dtPhi,sizeof(dtPhi));
                edm::Handle<CSCTriggerContainer<csctf::TrackStub> > dtStubs;
                e.getByLabel(mbProducer.label(),mbProducer.instance(),dtStubs);
                if( dtStubs.isValid() ){
                        std::vector<csctf::TrackStub> vstubs = dtStubs->get();
                        std::cout<<"DT size="<<vstubs.end()-vstubs.begin()<<std::endl;
                        for(std::vector<csctf::TrackStub>::const_iterator stub=vstubs.begin(); stub!=vstubs.end(); stub++){
                                int dtSector =(stub->sector()-1)*2 + stub->subsector()-1;
                                int dtEndcap = stub->endcap()-1;
                                if( dtSector>=0 && dtSector<12 && dtEndcap>=0 && dtEndcap<2 ){
                                        dtPhi[dtSector][dtEndcap] = stub->phiPacked();
                                } else {
                                        edm::LogInfo("CSCTFAnalyzer: DT digi are out of range: ")<<" dtSector="<<dtSector<<" dtEndcap="<<dtEndcap;
                                }
                                edm::LogInfo("CSCTFAnalyzer")<<"   DT data: tbin="<<stub->BX()<<" CSC sector="<<stub->sector()<<" CSC subsector="<<stub->subsector()<<" station="<<stub->station()<<" endcap="<<stub->endcap()
                                                <<" phi="<<stub->phiPacked()<<" phiBend="<<stub->getBend()<<" quality="<<stub->getQuality()<<" mb_bxn="<<stub->cscid();
                        }
                } else edm::LogInfo("CSCTFAnalyzer")<<"  No valid CSCTriggerContainer<csctf::TrackStub> products found";
                tree->Fill();
        }

        if( lctProducer.label() != "null" ){
                edm::Handle<CSCCorrelatedLCTDigiCollection> corrlcts;
                e.getByLabel(lctProducer.label(),lctProducer.instance(),corrlcts);
                if( corrlcts.isValid() ){
                        for(CSCCorrelatedLCTDigiCollection::DigiRangeIterator csc=corrlcts.product()->begin(); csc!=corrlcts.product()->end(); csc++){
                                int lctId=0;
                                CSCCorrelatedLCTDigiCollection::Range range1 = corrlcts.product()->get((*csc).first);
                                for(CSCCorrelatedLCTDigiCollection::const_iterator lct=range1.first; lct!=range1.second; lct++,lctId++){
                                        int station = (*csc).first.station()-1;
                                        int cscId   = (*csc).first.triggerCscId()-1;
                                        int sector  = (*csc).first.triggerSector()-1;// + ( (*csc).first.endcap()==1 ? 0 : 6 );
                                        int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
                                        int tbin    = lct->getBX();
                                        int fpga    = ( subSector ? subSector-1 : station+1 );
                                        // If Det Id is within range
                                        if( sector<0 || sector>11 || station<0 || station>3 || cscId<0 || cscId>8 || lctId<0 || lctId>1){
                                                edm::LogInfo("CSCTFAnalyzer: CSC digi are out of range: ");
                                                continue;
                                        }
                                        edm::LogInfo("CSCTFAnalyzer")<<"   Front data   endcap: "<<(*csc).first.endcap()<<"  station: "<<(station+1)<<"  sector: "<<(sector+1)<<"  subSector: "<<subSector<<"  tbin: "<<tbin<<"  cscId: "<<(cscId+1)<<"  fpga: "<<(fpga+1)<<" "<<
                                                "LCT(vp="<<lct->isValid()<<",qual="<<lct->getQuality()<<",wg="<<lct->getKeyWG()<<",strip="<<lct->getStrip()<<",link="<<lct->getMPCLink()<<")";
                                }
                        }
                } else edm::LogInfo("CSCTFAnalyzer")<<"  No valid CSCCorrelatedLCTDigiCollection products found";
        }

        if( trackProducer.label() != "null" ){
                edm::Handle<L1CSCTrackCollection> tracks;
                e.getByLabel(trackProducer.label(),trackProducer.instance(),tracks);
                if( tracks.isValid() ){
                        int nTrk=0;
                        for(L1CSCTrackCollection::const_iterator trk=tracks->begin(); trk<tracks->end(); trk++,nTrk++){
                                int sector = 6*(trk->first.endcap()-1)+trk->first.sector()-1;
                                int tbin   = trk->first.BX();
                                edm::LogInfo("CSCTFAnalyzer") << "   Track sector: "<<(sector+1)<<"  tbin: "<<tbin<<" "<<
                                        "TRK(mode="<<((trk->first.ptLUTAddress()>>16)&0xF)<<",eta="<<trk->first.eta_packed()<<",phi="<<trk->first.localPhi()<<") IDs:"
                                        <<" me1D="<<trk->first.me1ID()<<" t1="<<trk->first.me1Tbin()
                                        <<" me2D="<<trk->first.me2ID()<<" t2="<<trk->first.me2Tbin()
                                        <<" me3D="<<trk->first.me3ID()<<" t3="<<trk->first.me3Tbin()
                                        <<" me4D="<<trk->first.me4ID()<<" t4="<<trk->first.me4Tbin()
                                        <<" mb1D="<<trk->first.mb1ID()<<" tb="<<trk->first.mb1Tbin();

                        for(CSCCorrelatedLCTDigiCollection::DigiRangeIterator csc=trk->second.begin(); csc!=trk->second.end(); csc++){
                                int lctId=0;
                                CSCCorrelatedLCTDigiCollection::Range range1 = trk->second.get((*csc).first);
                                for(CSCCorrelatedLCTDigiCollection::const_iterator lct=range1.first; lct!=range1.second; lct++,lctId++){
                                        int station = (*csc).first.station()-1;
                                        int cscId   = (*csc).first.triggerCscId()-1;
                                        int sector  = (*csc).first.triggerSector()-1;// + ( (*csc).first.endcap()==1 ? 0 : 6 );
                                        int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
                                        int tbin    = lct->getBX();
                                        int fpga    = ( subSector ? subSector-1 : station+1 );
                                        // If Det Id is within range
                                        if( sector<0 || sector>11 || station<0 || station>3 || cscId<0 || cscId>8 || lctId<0 || lctId>1){
                                                edm::LogInfo("CSCTFAnalyzer: Digi are out of range: ");
                                                continue;
                                        }
                                        if( lct->getQuality() < 100 )
                                                edm::LogInfo("CSCTFAnalyzer")<<"       Linked LCT: "<<(*csc).first.endcap()<<"  station: "<<(station+1)<<"  sector: "<<(sector+1)<<"  subSector: "<<subSector<<"  tbin: "<<tbin
                                                        <<"  cscId: "<<(cscId+1)<<"  fpga: "<<(fpga+1)<<" LCT(vp="<<lct->isValid()<<",qual="<<lct->getQuality()<<",wg="<<lct->getKeyWG()<<",strip="<<lct->getStrip()<<")";
                                        else
                                                edm::LogInfo("CSCTFAnalyzer")<<"       Linked MB stub: "<<(*csc).first.endcap()<<"  sector: "<<(sector+1)<<"  subSector: "<<subSector<<"  tbin: "<<tbin
                                                        <<" MB(vp="<<lct->isValid()<<",qual="<<(lct->getQuality()-100)<<",cal="<<lct->getKeyWG()<<",flag="<<lct->getStrip()<<",bc0="<<lct->getPattern()<<",phiBend="<<lct->getBend()
                                                        <<",tbin="<<lct->getBX()<<",id="<<lct->getMPCLink()<<",bx0="<<lct->getBX0()<<",se="<<lct->getSyncErr()<<",bxn="<<lct->getCSCID()<<",phi="<<lct->getTrknmb()<<")";
                                }
                        }
                        }
                } else edm::LogInfo("CSCTFAnalyzer")<<"  No valid L1CSCTrackCollection products found";
        }
}

Member Data Documentation

int CSCTFAnalyzer::dtPhi[12][2] [private]

Definition at line 17 of file CSCTFAnalyzer.h.

Referenced by analyze(), and CSCTFAnalyzer().

TFile* CSCTFAnalyzer::file [private]

Definition at line 16 of file CSCTFAnalyzer.h.

Referenced by CSCTFAnalyzer(), and ~CSCTFAnalyzer().

Definition at line 14 of file CSCTFAnalyzer.h.

Referenced by analyze(), and CSCTFAnalyzer().

Definition at line 14 of file CSCTFAnalyzer.h.

Referenced by analyze(), and CSCTFAnalyzer().

Definition at line 14 of file CSCTFAnalyzer.h.

Referenced by analyze(), and CSCTFAnalyzer().

Definition at line 14 of file CSCTFAnalyzer.h.

Referenced by analyze(), and CSCTFAnalyzer().

TTree* CSCTFAnalyzer::tree [private]

Definition at line 15 of file CSCTFAnalyzer.h.

Referenced by analyze(), CSCTFAnalyzer(), and ~CSCTFAnalyzer().