CMS 3D CMS Logo

Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes

EcalPnGraphs Class Reference

#include <EcalPnGraphs.h>

Inheritance diagram for EcalPnGraphs:
edm::EDAnalyzer

List of all members.

Public Member Functions

 EcalPnGraphs (const edm::ParameterSet &ps)
 ~EcalPnGraphs ()

Protected Attributes

int abscissa [50]
std::string digiProducer_
std::vector< std::string > ebs_
int eventCounter
std::vector< int > feds_
std::string fileName
int first_Pn
std::vector< TGraph > graphs
bool inputIsOk
std::vector< int > listAllChannels
std::vector< int > listAllPns
std::vector< int > listChannels
std::vector< int > listPns
int numPn
int ordinate [50]
TFile * root_file
int verbosity

Private Member Functions

virtual void analyze (const edm::Event &e, const edm::EventSetup &c)
virtual void beginJob ()
virtual void endJob ()
std::string intToString (int num)

Private Attributes

EcalFedMapfedMap

Detailed Description

Definition at line 22 of file EcalPnGraphs.h.


Constructor & Destructor Documentation

EcalPnGraphs::EcalPnGraphs ( const edm::ParameterSet ps)

module dumping TGraph with 50 data frames from Pn Diodes

Date:
2011/10/10 09:05:21
Revision:
1.4
Author:
K. Kaadze
G. Franzoni

Definition at line 33 of file EcalPnGraphs.cc.

References abscissa, gather_cfg::cout, digiProducer_, ebs_, eventCounter, fedMap, feds_, fileName, first_Pn, EcalFedMap::getFedFromSlice(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), i, inputIsOk, listPns, and numPn.

                                                   {  
//=============================================================================

  digiProducer_     = ps.getParameter<std::string>("digiProducer");
  fileName = ps.getUntrackedParameter<std::string >("fileName", std::string("toto") );

  first_Pn = 0;

  listPns = ps.getUntrackedParameter<std::vector<int> >("listPns", std::vector<int>());
  numPn   = ps.getUntrackedParameter< int >("numPn");

  std::vector<int> listDefaults;
  listDefaults.push_back(-1);
  feds_ = ps.getUntrackedParameter<std::vector<int> > ("requestedFeds",listDefaults);
  bool fedIsGiven = false;

  std::vector<std::string> ebDefaults;
  ebDefaults.push_back("none");
  ebs_  = ps.getUntrackedParameter<std::vector<std::string> >("requestedEbs",ebDefaults);

  //FEDs and EBs
  if ( feds_[0] != -1 ) {
    edm::LogInfo("EcalPnGraphs") << "FED id is given! Goining to beginJob! ";
    fedIsGiven = true;
  }else {
    feds_.clear();
    if ( ebs_[0] !="none" ) {
      //EB id is given and convert to FED id
      fedMap = new EcalFedMap(); 
      for (std::vector<std::string>::const_iterator ebItr = ebs_.begin(); 
           ebItr!= ebs_.end();  ++ebItr) {
        feds_.push_back(fedMap->getFedFromSlice(*ebItr));
      }
      delete fedMap;
    } else {
      //Select all FEDs in the Event
      for ( int i=601; i<655; ++i){
        feds_.push_back(i);
      }
    }
  }
  
  // consistency checks checks
  inputIsOk       = true;
  //check with FEDs
  if ( fedIsGiven ) {
    std::vector<int>::iterator fedIter;
    for (fedIter = feds_.begin(); fedIter!=feds_.end(); ++fedIter) {
      if ( (*fedIter) < 601 || (*fedIter) > 654) {                      
        std::cout << "[EcalPnGraphs] pn number : " << (*fedIter) << " found in listFeds. "
                  << " Valid range is [601-654]. Returning." << std::endl;
        inputIsOk = false;
        return;
      }
    }
  }

  //Check with Pns
  if ( listPns[0] != -1 ) { 
    std::vector<int>::iterator intIter;
    for (intIter = listPns.begin(); intIter != listPns.end(); intIter++)  {  
      if ( ((*intIter) < 1) ||  (10 < (*intIter)) )       {  
        std::cout << "[EcalPnGraphs] pn number : " << (*intIter) << " found in listPns. "
                  << " Valid range is 1-10. Returning." << std::endl;
        inputIsOk = false;
        return;
      }
      if (!first_Pn )   first_Pn = (*intIter);  
    }
  } else {
    listPns.clear();
    listPns.push_back(5); 
    listPns.push_back(6); 
  }
  
  // setting the abcissa array once for all
  for (int i=0; i<50; i++)        abscissa[i] = i;
  
  // local event counter (in general different from LV1)
  eventCounter =0;
}
EcalPnGraphs::~EcalPnGraphs ( )

Definition at line 117 of file EcalPnGraphs.cc.

                           {  
//=============================================================================
  //delete *;
}

Member Function Documentation

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

Implements edm::EDAnalyzer.

Definition at line 129 of file EcalPnGraphs.cc.

References abscissa, digiProducer_, eventCounter, L1Comparator_cfi::FEDid, feds_, spr::find(), edm::Event::getByLabel(), graphs, i, inputIsOk, intToString(), listAllPns, listPns, numPn, ordinate, and indexGen::title.

                                                                      {
//=============================================================================

  eventCounter++;
  if (!inputIsOk) return;

  // retrieving crystal PN diodes from Event
  edm::Handle<EcalPnDiodeDigiCollection>  pn_digis;
  try {
    e.getByLabel(digiProducer_, pn_digis);
  } catch (cms::Exception& ex) {
    edm::LogError("EcalPnGraphs") << "PNs were not found!";
  }

  // getting the list of all the Pns which will be dumped on TGraph
  // - listPns is the list as given by the user
  // -numPn is the number of Pns (centered at Pn from listPns) for which graphs are required
  std::vector<int>::iterator pn_it;
  for ( pn_it = listPns.begin();  pn_it != listPns.end() ; pn_it++  )
    {
      int ipn    = (*pn_it);
      int hpn = numPn;
      
      for (int u = (-hpn) ; u<=hpn; u++){         
          int ipn_c = ipn + u;
          if (ipn_c < 1 || ipn_c > 10) continue;
          std::vector<int>::iterator notInList = find(listAllPns.begin(), listAllPns.end(), ipn_c);
          if ( notInList == listAllPns.end() ) {
            listAllPns.push_back ( ipn_c );
          }
      }
    }
  
  //Loop over PN digis
  for ( EcalPnDiodeDigiCollection::const_iterator pnItr = pn_digis->begin(); pnItr != pn_digis->end(); ++pnItr )  {
    //Get PNid of a digi
    int ipn = (*pnItr).id().iPnId();
    //Get DCC id where the digi is from
    int ieb    = EcalPnDiodeDetId((*pnItr).id()).iDCCId();
    
    //Make sure that these are PnDigis from the requested FEDid
    int FEDid = ieb + 600;

    std::vector<int>::iterator fedIter = find(feds_.begin(), feds_.end(), FEDid);

    if ( fedIter == feds_.end() ) {
      edm::LogWarning("EcalPnGraphs")<< "For Event " << eventCounter << " PnDigis are not found from requested SM!. returning...";
      return;
    }
    // selecting desired Pns only
    std::vector<int>::iterator iPnIter;
    iPnIter     = find( listAllPns.begin() , listAllPns.end() , ipn);
    if (iPnIter == listAllPns.end()) continue; 
    
    for ( int i=0; i< (*pnItr).size() && i<50; ++i ) {
      ordinate[i] = (*pnItr).sample(i).adc();
    }
    //make grapn of ph digis
    TGraph oneGraph(50, abscissa,ordinate);
    std::string title;
    title = "Graph_ev" + intToString( eventCounter )
          + "_FED" + intToString( FEDid )
          + "_ipn" + intToString( ipn );
    oneGraph.SetTitle(title.c_str());
    oneGraph.SetName(title.c_str());
    graphs.push_back(oneGraph);
    
  }// loop over Pn digis
}
void EcalPnGraphs::beginJob ( void  ) [private, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 123 of file EcalPnGraphs.cc.

                            {
//=============================================================================
  edm::LogInfo("EcalPhGraphs") << "entering beginJob! " ;
}
void EcalPnGraphs::endJob ( void  ) [private, virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 212 of file EcalPnGraphs.cc.

References fileName, first_Pn, graphs, intToString(), and root_file.

                          {
//=============================================================================
  fileName +=  ( std::string("_Pn")    + intToString(first_Pn) ); 
  fileName += ".graph.root";

  root_file = new TFile( fileName.c_str() , "RECREATE" );
  std::vector<TGraph>::iterator gr_it;
  for ( gr_it = graphs.begin(); gr_it !=  graphs.end(); gr_it++ )      (*gr_it).Write();
  root_file->Close();

  edm::LogInfo("EcalPnGraphs") << "DONE!.... " ;
}
std::string EcalPnGraphs::intToString ( int  num) [private]

Definition at line 199 of file EcalPnGraphs.cc.

Referenced by analyze(), and endJob().

{
  //
  // outputs the number into the string stream and then flushes
  // the buffer (makes sure the output is put into the stream)
  //
  std::ostringstream myStream; //creates an ostringstream object
  myStream << num << std::flush;
  
  return(myStream.str()); //returns the string form of the stringstream object
} 

Member Data Documentation

int EcalPnGraphs::abscissa[50] [protected]

Definition at line 67 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

std::string EcalPnGraphs::digiProducer_ [protected]

Definition at line 44 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

std::vector<std::string> EcalPnGraphs::ebs_ [protected]

Definition at line 47 of file EcalPnGraphs.h.

Referenced by EcalPnGraphs().

int EcalPnGraphs::eventCounter [protected]

Definition at line 50 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

Definition at line 38 of file EcalPnGraphs.h.

Referenced by EcalPnGraphs().

std::vector<int> EcalPnGraphs::feds_ [protected]

Definition at line 46 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

std::string EcalPnGraphs::fileName [protected]

Definition at line 58 of file EcalPnGraphs.h.

Referenced by EcalPnGraphs(), and endJob().

int EcalPnGraphs::first_Pn [protected]

Definition at line 53 of file EcalPnGraphs.h.

Referenced by EcalPnGraphs(), and endJob().

std::vector<TGraph> EcalPnGraphs::graphs [protected]

Definition at line 70 of file EcalPnGraphs.h.

Referenced by analyze(), and endJob().

bool EcalPnGraphs::inputIsOk [protected]

Definition at line 56 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

std::vector<int> EcalPnGraphs::listAllChannels [protected]

Definition at line 61 of file EcalPnGraphs.h.

std::vector<int> EcalPnGraphs::listAllPns [protected]

Definition at line 63 of file EcalPnGraphs.h.

Referenced by analyze().

std::vector<int> EcalPnGraphs::listChannels [protected]

Definition at line 60 of file EcalPnGraphs.h.

std::vector<int> EcalPnGraphs::listPns [protected]

Definition at line 62 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

int EcalPnGraphs::numPn [protected]

Definition at line 65 of file EcalPnGraphs.h.

Referenced by analyze(), and EcalPnGraphs().

int EcalPnGraphs::ordinate[50] [protected]

Definition at line 68 of file EcalPnGraphs.h.

Referenced by analyze().

TFile* EcalPnGraphs::root_file [protected]

Definition at line 72 of file EcalPnGraphs.h.

Referenced by endJob().

int EcalPnGraphs::verbosity [protected]

Definition at line 49 of file EcalPnGraphs.h.