CMS 3D CMS Logo

Public Member Functions | Private Attributes

Digi2Raw2Digi Class Reference

#include <Digi2Raw2Digi.h>

Inheritance diagram for Digi2Raw2Digi:
edm::EDAnalyzer

List of all members.

Public Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
virtual void beginJob ()
template<class Digi >
void compare (const edm::Event &, const edm::EventSetup &)
 Digi2Raw2Digi (const edm::ParameterSet &)
virtual void endJob ()
 ~Digi2Raw2Digi ()

Private Attributes

DQMStoredbe_
edm::InputTag inputTag1_
edm::InputTag inputTag2_
MonitorElementmeStatus
std::string outputFile_
int unsuppressed

Detailed Description

Definition at line 14 of file Digi2Raw2Digi.h.


Constructor & Destructor Documentation

Digi2Raw2Digi::Digi2Raw2Digi ( const edm::ParameterSet iConfig) [explicit]

Definition at line 220 of file Digi2Raw2Digi.cc.

References DQMStore::book1D(), dbe_, timingPdfMaker::histo, meStatus, cmsCodeRules::cppFunctionSkipper::operator, outputFile_, and DQMStore::setCurrentFolder().

  : inputTag1_(iConfig.getParameter<edm::InputTag>("digiLabel1")),
    inputTag2_(iConfig.getParameter<edm::InputTag>("digiLabel2")),
    outputFile_(iConfig.getUntrackedParameter<std::string>("outputFile")),
    dbe_(0)
{ 

  // DQM ROOT output
  if ( outputFile_.size() != 0 ) {
    edm::LogInfo("OutputInfo")
      << " Hcal RecHit Task histograms will be saved to '" 
      << outputFile_.c_str() << "'";
  } else {
    edm::LogInfo("OutputInfo") 
      << " Hcal RecHit Task histograms will NOT be saved";
  }

  // DQM service initialization
  dbe_ = edm::Service<DQMStore>().operator->();
   
  if ( dbe_ ) {
    dbe_->setCurrentFolder("Digi2Raw2DigiV/Digi2Raw2DigiTask");
  }

  // const char * sub = hcalselector_.c_str();
  char histo[100];
  sprintf (histo, "Digi2Raw2Digi_status") ;
  // bins: 1)full match 2)ID match, not content 3) no match 
  // 4) number of events with diff number of Digis
  meStatus    = dbe_->book1D(histo, histo, 5, 0., 5.);

}
Digi2Raw2Digi::~Digi2Raw2Digi ( )

Definition at line 258 of file Digi2Raw2Digi.cc.

{}

Member Function Documentation

void Digi2Raw2Digi::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
) [virtual]

Implements edm::EDAnalyzer.

Definition at line 261 of file Digi2Raw2Digi.cc.

References iEvent, and unsuppressed.

{
  unsuppressed = 0;
  
  //  std::cout << "=== HBHE ==================" << std::endl; 
  compare<HBHEDataFrame>(iEvent,iSetup);

  //  std::cout << "=== HO ====================" << std::endl; 
  compare<HODataFrame>(iEvent,iSetup);

  //  std::cout << "=== HF ====================" << std::endl; 
  compare<HFDataFrame>(iEvent,iSetup);  


  //  std::cout << "=== ZDC ===================" << std::endl; 
  unsuppressed = 1;
  compare<ZDCDataFrame>(iEvent,iSetup);
  
  
  //  std::cout << "=== CASTOR ================" << std::endl; 
  //  compare<CastorDataFrame>(iEvent,iSetup); 
  
}
void Digi2Raw2Digi::beginJob ( void  ) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 253 of file Digi2Raw2Digi.cc.

{}
template<class Digi >
void Digi2Raw2Digi::compare ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)

Definition at line 40 of file Digi2Raw2Digi.cc.

References ecalMGPA::adc(), gather_cfg::cout, HcalDetId::depth(), MonitorElement::Fill(), edm::Event::getByLabel(), i, inputTag1_, inputTag2_, fjr2json::lumi, match(), meStatus, unsuppressed, and HcalZDCDetId::zside().

                                                                               {

  typename edm::Handle<edm::SortedCollection<Digi> > digiCollection1;
  typename edm::SortedCollection<Digi>::const_iterator digiItr1;
  typename edm::Handle<edm::SortedCollection<Digi> > digiCollection2;
  typename edm::SortedCollection<Digi>::const_iterator digiItr2;
  
  if(unsuppressed) {  // ZDC
     iEvent.getByLabel ("simHcalUnsuppressedDigis", digiCollection1); 
  }
  else iEvent.getByLabel (inputTag1_, digiCollection1);
  
  iEvent.getByLabel (inputTag2_, digiCollection2);
  
  int size1 = 0;
  int size2 = 0;
  
  for (digiItr1=digiCollection1->begin();digiItr1!=digiCollection1->end();digiItr1++) {
    size1++;
  }

  for (digiItr2=digiCollection2->begin();digiItr2!=digiCollection2->end();digiItr2++) {
    size2++;
  }

  //std::cout << "Digi collections   size1 = "<< size1 
  //    << "   size2 = " << size2 << std::endl;
  

  // CYCLE over first DIGI collection ======================================
  
  for (digiItr1=digiCollection1->begin();digiItr1!=digiCollection1->end();digiItr1++) {
    HcalGenericDetId HcalGenDetId(digiItr1->id());
    int tsize =  (*digiItr1).size();
    int match = 0;

    if(HcalGenDetId.isHcalZDCDetId()){
      //for zdc
      HcalZDCDetId element(digiItr1->id());
      int zside =  element.zside();
      int section = element.section();
      int channel = element.channel();
      int gsub = HcalGenDetId.genericSubdet();
 
        if(section==3){// lumi section not reconstructed
          size2++;
          match = 1;
          goto lumi;
        }
      

        //std::cout<< " Zdc genSubdet="<< gsub << " zside=" <<zside
        //       << " section= "<< section << " channel " <<channel
        //      <<std::endl; 

      for (digiItr2=digiCollection2->begin();digiItr2!=digiCollection2->end();digiItr2++) {
        HcalZDCDetId element2(digiItr2->id());
        
        //int zside2 =  element2.zside();
        //int section2 = element2.section();
        //int channel2 = element2.channel();
        //int gsub2 = HcalGenDetId.genericSubdet();

        //std::cout<< " Zdc genSubdet="<<gsub2 
        //       << " zside=" <<zside2
        //       << " section= "<<section2
        //       <<" channel "<<channel2 
        //       <<std::endl; 

        if(element == element2) {
          match = 1;
          int identical = 1; 
          for (int i=0; i<tsize; i++) {
            double adc  =  (*digiItr1)[i].adc();     
            int capid   =  (*digiItr1)[i].capid();
            //    std::cout << std::endl << "     capid1=" << capid 
            //                << " adc1=" << adc 
            //              << std::endl;
            double adc2 =  (*digiItr2)[i].adc();     
            int capid2  =  (*digiItr2)[i].capid();
            //    std::cout << "     capid2=" << capid2 << " adc2=" << adc2 
            //              << std::endl;
            if( capid != capid2 || adc !=  adc2) {
              std::cout << "===> PROBLEM !!!  gebsubdet=" << gsub 
                        << " zside=" <<zside
                        << " section= "<< section << " channel " <<channel
                        << std::endl;
              std::cout << "     capid1["<< i << "]=" << capid 
                        << " adc1["<< i << "]=" << adc 
                        << "     capid2["<< i << "]=" << capid2 
                        << " adc2["<< i << "]=" << adc2
                        << std::endl;   
              identical = 0;
              meStatus->Fill(1.); 
              break;
            }
          } // end of DataFrames array
          if(identical) meStatus->Fill(0.); 
          break; // matched HcalZDCID  is processed,
          //  go to next (primary collection) cell  
        } 
      } // end of cycle over 2d DIGI collection 
    lumi:
      if (!match) {
        meStatus->Fill(2.); 
        std::cout << "===> PROBLEM !!!  gsubdet=" << gsub
                  << " zside=" <<zside
                  << " section= "<< section << " channel " <<channel
                  << " HcalZDCId match is not found !!!" 
                  << std::endl;
      }
  
    }
    else{
      //for Hcal subdetectors
      HcalDetId cell(digiItr1->id()); 
      int depth = cell.depth();
      int iphi  = cell.iphi()-1;
      int ieta  = cell.ieta();
      int sub   = cell.subdet();
      //    if(ieta > 0) ieta--;
      //    std::cout << " Cell subdet=" << sub << "  ieta=" << ieta 
      //              << "  inphi=" << iphi << "  depth=" << depth << std::endl;
      
      // CYCLE over second DIGI collection ======================================
      for (digiItr2=digiCollection2->begin();digiItr2!=digiCollection2->end();digiItr2++) {
  
        HcalDetId cell2(digiItr2->id());
        
        if( cell == cell2) {
          match = 1;
          int identical = 1; 
          for (int i=0; i<tsize; i++) {
            double adc  =  (*digiItr1)[i].adc();     
            int capid   =  (*digiItr1)[i].capid();
            //    std::cout << std::endl << "     capid1=" << capid 
            //                << " adc1=" << adc 
            //              << std::endl;
            double adc2 =  (*digiItr2)[i].adc();     
            int capid2  =  (*digiItr2)[i].capid();
            //    std::cout << "     capid2=" << capid2 << " adc2=" << adc2 
            //              << std::endl;
            if( capid != capid2 || adc !=  adc2) {
              std::cout << "===> PROBLEM !!!  subdet=" << sub << "  ieta="
                        << ieta  << "  inphi=" << iphi << "  depth=" << depth
                        << std::endl;
              std::cout << "     capid1["<< i << "]=" << capid 
                        << " adc1["<< i << "]=" << adc 
                        << "     capid2["<< i << "]=" << capid2 
                        << " adc2["<< i << "]=" << adc2
                        << std::endl;   
            identical = 0;
            meStatus->Fill(1.); 
            break;
            }
          } // end of DataFrames array
          if(identical) meStatus->Fill(0.); 
          break; // matched HcalID  is processed,
          //  go to next (primary collection) cell  
        } 
      } // end of cycle over 2d DIGI collection 
      if (!match) {
        meStatus->Fill(2.); 
        std::cout << "===> PROBLEM !!!  subdet=" << sub << "  ieta="
                  << ieta  << "  inphi=" << iphi << "  depth=" << depth
                  << " HcalID match is not found !!!" 
                  << std::endl;
      }
    }
  } // end of cycle over 1st DIGI collection    
  
  if (size1 != size2) {
    meStatus->Fill(3.); 
    std::cout << "===> PROBLEM !!!  Different size of Digi collections : "
              << size1  << " and " << size2 
              << std::endl;
  }
}
void Digi2Raw2Digi::endJob ( void  ) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 254 of file Digi2Raw2Digi.cc.

References dbe_, outputFile_, and DQMStore::save().

                           {
  if ( outputFile_.size() != 0 && dbe_ ) dbe_->save(outputFile_);
}

Member Data Documentation

Definition at line 28 of file Digi2Raw2Digi.h.

Referenced by Digi2Raw2Digi(), and endJob().

Definition at line 24 of file Digi2Raw2Digi.h.

Referenced by compare().

Definition at line 25 of file Digi2Raw2Digi.h.

Referenced by compare().

Definition at line 30 of file Digi2Raw2Digi.h.

Referenced by compare(), and Digi2Raw2Digi().

std::string Digi2Raw2Digi::outputFile_ [private]

Definition at line 27 of file Digi2Raw2Digi.h.

Referenced by Digi2Raw2Digi(), and endJob().

Definition at line 32 of file Digi2Raw2Digi.h.

Referenced by analyze(), and compare().