CMS 3D CMS Logo

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

popcon::EcalTPGSlidingWindowHandler Class Reference

#include <EcalTPGSlidingWindowHandler.h>

Inheritance diagram for popcon::EcalTPGSlidingWindowHandler:
popcon::PopConSourceHandler< EcalTPGSlidingWindow >

List of all members.

Public Member Functions

 EcalTPGSlidingWindowHandler (edm::ParameterSet const &)
void getNewObjects ()
std::string id () const
std::map< std::string, int > makeStripIdEB ()
std::map< std::string, int > makeStripIdEE ()
void readFromFile (const char *inputFile)
void writeFile (const char *inputFile)
 ~EcalTPGSlidingWindowHandler ()

Public Attributes

EcalCondDBInterfaceeconn

Private Member Functions

std::string to_string (char value[])

Private Attributes

std::map< std::string, int > correspEBId
std::map< std::string, int > correspEEId
unsigned int m_firstRun
std::string m_gentag
unsigned int m_i_run_number
int m_i_sliding
std::string m_i_tag
int m_i_version
unsigned int m_lastRun
std::string m_location
std::string m_locationsource
std::string m_name
std::string m_pass
unsigned int m_runnr
std::string m_runtype
std::string m_sid
std::string m_user

Detailed Description

Definition at line 51 of file EcalTPGSlidingWindowHandler.h.


Constructor & Destructor Documentation

popcon::EcalTPGSlidingWindowHandler::EcalTPGSlidingWindowHandler ( edm::ParameterSet const &  ps)

Definition at line 33 of file EcalTPGSlidingWindowHandler.cc.

References edm::ParameterSet::getParameter(), m_firstRun, m_gentag, m_lastRun, m_location, m_locationsource, m_pass, m_runtype, m_sid, and m_user.

  :    m_name(ps.getUntrackedParameter<std::string>("name","EcalTPGSlidingWindowHandler")) {

        edm::LogInfo("EcalTPGSlidingWindowHandler") << "EcalTPGSlidingWindow Source handler constructor";
        m_firstRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("firstRun").c_str()));
        m_lastRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("lastRun").c_str()));
        m_sid= ps.getParameter<std::string>("OnlineDBSID");
        m_user= ps.getParameter<std::string>("OnlineDBUser");
        m_pass= ps.getParameter<std::string>("OnlineDBPassword");
        m_locationsource= ps.getParameter<std::string>("LocationSource");
        m_location=ps.getParameter<std::string>("Location");
        m_gentag=ps.getParameter<std::string>("GenTag");
        m_runtype=ps.getParameter<std::string>("RunType");

        edm::LogInfo("EcalTPGSlidingWindowHandler") << m_sid<<"/"<<m_user<<"/"<<m_location<<"/"<<m_gentag;


}
popcon::EcalTPGSlidingWindowHandler::~EcalTPGSlidingWindowHandler ( )

Definition at line 52 of file EcalTPGSlidingWindowHandler.cc.

{
}

Member Function Documentation

void popcon::EcalTPGSlidingWindowHandler::getNewObjects ( ) [virtual]

Implements popcon::PopConSourceHandler< EcalTPGSlidingWindow >.

Definition at line 56 of file EcalTPGSlidingWindowHandler.cc.

References gather_cfg::cout, BeamSplash_cfg::dataset, exception, Exception, RunTPGConfigDat::getConfigTag(), EcalLogicID::getID1(), EcalLogicID::getID2(), EcalLogicID::getID3(), EcalLogicID::getName(), RunList::getRuns(), FEConfigSlidingDat::getSliding(), FEConfigMainInfo::getSliId(), RunTPGConfigDat::getVersion(), AlCaHLTBitMon_ParallelJobs::p, IODConfig::setConfigTag(), RunTag::setGeneralTag(), FEConfigSlidingInfo::setId(), LocationDef::setLocation(), RunTag::setLocationDef(), RunTypeDef::setRunType(), RunTag::setRunTypeDef(), EcalTPGSlidingWindow::setValue(), FEConfigMainInfo::setVersion(), findQualityFiles::size, and strip().

{
        edm::LogInfo("EcalTPGSlidingWindowHandler") << "Started GetNewObjects!!!";

        //check whats already inside of database
        if (tagInfo().size){
        //check whats already inside of database
        std::cout << "got offlineInfo = " << std::endl;
        std::cout << "tag name = " << tagInfo().name << std::endl;
        std::cout << "size = " << tagInfo().size <<  std::endl;
        } else {
        std::cout << " First object for this tag " << std::endl;
        }

        unsigned int max_since=0;
        max_since=static_cast<unsigned int>(tagInfo().lastInterval.first);
        edm::LogInfo("EcalTPGSlidingWindowHandler") << "max_since : "  << max_since;
        edm::LogInfo("EcalTPGSlidingWindowHandler") << "retrieved last payload ";

        // here we retrieve all the runs after the last from online DB 

        edm::LogInfo("EcalTPGSlidingWindowHandler") << "Retrieving run list from ONLINE DB ... ";

        edm::LogInfo("EcalTPGSlidingWindowHandler") << "Making connection...";
        econn = new EcalCondDBInterface( m_sid, m_user, m_pass );
        edm::LogInfo("EcalTPGSlidingWindowHandler") << "Done.";
        
        if (!econn)
        {
          std::cout << " connection parameters " <<m_sid <<"/"<<m_user<<std::endl;
            throw cms::Exception("OMDS not available");
        } 

        
        LocationDef my_locdef;
        my_locdef.setLocation(m_location); 

        RunTypeDef my_rundef;
        my_rundef.setRunType(m_runtype); 

        RunTag  my_runtag;
        my_runtag.setLocationDef( my_locdef );
        my_runtag.setRunTypeDef(  my_rundef );
        my_runtag.setGeneralTag(m_gentag); 
        
        readFromFile("last_tpg_sliding_settings.txt");


        unsigned int min_run=m_i_run_number+1;
        if(m_firstRun<m_i_run_number) {
          min_run=m_i_run_number+1; // we have to add 1 to the last transferred one
        } else {
          min_run=m_firstRun;
        }
        
        if(min_run<max_since) {
          min_run=max_since+1; // we have to add 1 to the last transferred one
        } 

        std::cout<<"m_i_run_number"<< m_i_run_number <<"m_firstRun "<<m_firstRun<< "max_since " <<max_since<< std::endl;


        unsigned int max_run=m_lastRun;
        
        edm::LogInfo("EcalTPGSlidingWindowHandler") << "min_run= " << min_run << "max_run= " << max_run;

        RunList my_list;
        my_list=econn->fetchGlobalRunListByLocation(my_runtag, min_run, max_run, my_locdef);
        //        my_list=econn->fetchRunListByLocation(my_runtag,min_run,max_run, my_locdef);
      
        std::vector<RunIOV> run_vec=  my_list.getRuns();
        size_t num_runs=run_vec.size();
        
        std::cout <<"number of runs is : "<< num_runs<< std::endl;
                
        unsigned int irun=0;
        if(num_runs>0){

          // going to query the ecal logic id 
            std::vector<EcalLogicID> my_StripEcalLogicId_EE;
            my_StripEcalLogicId_EE = econn->getEcalLogicIDSetOrdered( "ECAL_readout_strip",
                                                    1, 1000,
                                                    1, 70,
                                                                      0,5,
                                                    "EE_offline_stripid",123 );
            std::cout <<" GOT the logic ID for the EE trigger strips "<< std::endl;


          for(size_t kr=0; kr<run_vec.size(); kr++){

            irun=static_cast<unsigned int>(run_vec[kr].getRunNumber());
            
            std::cout<<" **************** "<<std::endl;
            std::cout<<" **************** "<<std::endl;
            std::cout<<" run= "<<irun<<std::endl;

            // retrieve the data :
            std::map<EcalLogicID, RunTPGConfigDat> dataset;
            econn->fetchDataSet(&dataset, &run_vec[kr]);
            
            std::string the_config_tag="";
            int the_config_version=0;
            
            std::map< EcalLogicID,  RunTPGConfigDat>::const_iterator it;
            FEConfigMainInfo fe_main_info;
            
            
            int nr=0;
            for( it=dataset.begin(); it!=dataset.end(); it++ )
            {
              ++nr;
              //EcalLogicID ecalid  = it->first;
              RunTPGConfigDat  dat = it->second;
              the_config_tag=dat.getConfigTag();
              the_config_version=dat.getVersion();
            }
                
            
            // it is all the same for all SM... get the last one 


            std::cout<<" run= "<<irun<<" tag "<<the_config_tag<<" version="<<the_config_version <<std::endl;

            // here we should check if it is the same as previous run.
        
            if((the_config_tag != m_i_tag || the_config_version != m_i_version ) && nr>0 ) {
              std::cout<<"the tag is different from last transferred run ... retrieving last config set from DB"<<std::endl;

              FEConfigMainInfo fe_main_info;
              fe_main_info.setConfigTag(the_config_tag);
              fe_main_info.setVersion(the_config_version);

              try{ 
                std::cout << " before fetch config set" << std::endl;       
                econn-> fetchConfigSet(&fe_main_info);
                std::cout << " after fetch config set" << std::endl;        


                // now get TPGSlidingWindow
                int slidingId=fe_main_info.getSliId();
            
                if( slidingId != m_i_sliding ) {
             
                  FEConfigSlidingInfo fe_sli_info;
                  fe_sli_info.setId(slidingId);
                  econn-> fetchConfigSet(&fe_sli_info);
                  std::map<EcalLogicID, FEConfigSlidingDat> dataset_TpgSli;
                  econn->fetchDataSet(&dataset_TpgSli, &fe_sli_info);

                  EcalTPGSlidingWindow * sliW = new EcalTPGSlidingWindow;
                  typedef std::map<EcalLogicID, FEConfigSlidingDat>::const_iterator CIfesli;
                  EcalLogicID ecid_xt;
                  FEConfigSlidingDat rd_sli;
                  unsigned int  rd_slid;
                  int icells=0;
                    
                    
                  for (CIfesli p = dataset_TpgSli.begin(); p != dataset_TpgSli.end(); p++) {
                    ecid_xt = p->first;
                    rd_sli  = p->second;
              
                    std::string ecid_name=ecid_xt.getName();
              
                    // EB data
                    if (ecid_name=="EB_VFE") {
                      int sm=ecid_xt.getID1();
                      int tt=ecid_xt.getID2();
                      int strip=ecid_xt.getID3();
                      int tcc= sm+54;
                      if(sm>18) tcc=sm+18 ;
                      rd_slid = (unsigned int)rd_sli.getSliding();

                      // simple formula to calculate the Srip EB identifier 
                                
                      unsigned int stripEBId = 303176+(tt-1)*64+(strip-1)*8+(tcc-37)*8192;
                                
                      sliW->setValue(stripEBId, (unsigned int)rd_sli.getSliding());
                      ++icells;

                    }
                    else if (ecid_name=="ECAL_readout_strip"){
                
                      // EE data
                      int id1=ecid_xt.getID1(); // dcc
                      int id2=ecid_xt.getID2(); // ccu
                      int id3=ecid_xt.getID3(); // strip
                
                      rd_slid = (unsigned int)rd_sli.getSliding();
                

                      bool set_the_strip=false;
                      int stripid;
                      for (size_t istrip=0; istrip<my_StripEcalLogicId_EE.size(); istrip++) {

                        if(!set_the_strip){
                          
                          if(my_StripEcalLogicId_EE[istrip].getID1()==id1 
                             && my_StripEcalLogicId_EE[istrip].getID2()==id2
                             && my_StripEcalLogicId_EE[istrip].getID3()==id3 
                             ){
                            stripid =my_StripEcalLogicId_EE[istrip].getLogicID();
                            set_the_strip=true;
                            break;
                          }
                        }
                        
                      }
                      
                      if(set_the_strip){

                        sliW->setValue(stripid, (unsigned int)rd_sli.getSliding());

                      } else {
                        std::cout <<" these may be the additional towers TCC/TT "
                                  << id1<<"/"<<id2<<std::endl;
                      }
                      

                      ++icells;
                    } 
                  }
            
               
                  Time_t snc= (Time_t) irun;          
                  m_to_transfer.push_back(std::make_pair((EcalTPGSlidingWindow*)sliW,snc));

                  m_i_run_number=irun;
                  m_i_tag=the_config_tag;
                  m_i_version=the_config_version;
                  m_i_sliding=slidingId;
                  
                  writeFile("last_tpg_sliding_settings.txt");
                
                } else {
          
                  m_i_run_number=irun;
                  m_i_tag=the_config_tag;
                  m_i_version=the_config_version;

                  writeFile("last_tpg_sliding_settings.txt");

                  std::cout<< " even if the tag/version is not the same, the sliding windows id is the same -> no transfer needed "<< std::endl; 

                }
              }         catch (std::exception &e) { 
                std::cout << "ERROR: THIS CONFIG DOES NOT EXIST: tag=" <<the_config_tag
                          <<" version="<<the_config_version<< std::endl;
                std::cout << e.what() << std::endl;
          
                m_i_run_number=irun;

              }
        
              std::cout<<" **************** "<<std::endl;

              
            } else if(nr==0) {
              m_i_run_number=irun;
              std::cout<< " no tag saved to RUN_TPGCONFIG_DAT by EcalSupervisor -> no transfer needed "<< std::endl; 
              std::cout<<" **************** "<<std::endl;
            } else {
              m_i_run_number=irun;
              m_i_tag=the_config_tag;
              m_i_version=the_config_version;
              std::cout<< " the tag/version is the same -> no transfer needed "<< std::endl; 
              std::cout<<" **************** "<<std::endl;
              writeFile("last_tpg_sliding_settings.txt");
            }

          }
        }
          
        delete econn;

        edm::LogInfo("EcalTPGSlidingWindowHandler") << "Ecal - > end of getNewObjects -----------";
        
}
std::string popcon::EcalTPGSlidingWindowHandler::id ( void  ) const [inline, virtual]

Implements popcon::PopConSourceHandler< EcalTPGSlidingWindow >.

Definition at line 63 of file EcalTPGSlidingWindowHandler.h.

References m_name.

{ return m_name;}
std::map<std::string, int> popcon::EcalTPGSlidingWindowHandler::makeStripIdEB ( )
std::map<std::string, int> popcon::EcalTPGSlidingWindowHandler::makeStripIdEE ( )
void popcon::EcalTPGSlidingWindowHandler::readFromFile ( const char *  inputFile)

Definition at line 334 of file EcalTPGSlidingWindowHandler.cc.

References analyzePatCleaning_cfg::inputFile, geometryCSVtoXML::line, and cond::to_string().

                                                                           {
  //-------------------------------------------------------------
  
  m_i_tag="";
  m_i_version=0;
  m_i_run_number=0;
  m_i_sliding=0; 

  FILE *inpFile; // input file
  inpFile = fopen(inputFile,"r");
  if(!inpFile) {
    edm::LogError("EcalTPGSlidingWindowHandler")<<"*** Can not open file: "<<inputFile;
  }

  char line[256];
    
  std::ostringstream str;

  fgets(line,255,inpFile);
  m_i_tag=to_string(line);
  str << "gen tag " << m_i_tag << std::endl ;  // should I use this? 

  fgets(line,255,inpFile);
  m_i_version=atoi(line);
  str << "version= " << m_i_version << std::endl ;  

  fgets(line,255,inpFile);
  m_i_run_number=atoi(line);
  str << "run_number= " << m_i_run_number << std::endl ;  

  fgets(line,255,inpFile);
  m_i_sliding=atoi(line);
  str << "sliding_config= " << m_i_sliding << std::endl ;  

    
  fclose(inpFile);           // close inp. file

}
std::string popcon::EcalTPGSlidingWindowHandler::to_string ( char  value[]) [inline, private]

Definition at line 71 of file EcalTPGSlidingWindowHandler.h.

References relativeConstraints::value.

                                                           {
                        std::ostringstream streamOut;
                        streamOut << value;
                        return streamOut.str();
                        }
void popcon::EcalTPGSlidingWindowHandler::writeFile ( const char *  inputFile)

Definition at line 373 of file EcalTPGSlidingWindowHandler.cc.

                                                                        {
  //-------------------------------------------------------------
  
  
  std::ofstream myfile;
  myfile.open (inputFile);
  myfile << m_i_tag <<std::endl;
  myfile << m_i_version <<std::endl;
  myfile << m_i_run_number <<std::endl;
  myfile << m_i_sliding <<std::endl;

  myfile.close();

}

Member Data Documentation

std::map<std::string, int> popcon::EcalTPGSlidingWindowHandler::correspEBId [private]

Definition at line 79 of file EcalTPGSlidingWindowHandler.h.

std::map<std::string, int> popcon::EcalTPGSlidingWindowHandler::correspEEId [private]

Definition at line 80 of file EcalTPGSlidingWindowHandler.h.

Definition at line 68 of file EcalTPGSlidingWindowHandler.h.

Definition at line 77 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 83 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 93 of file EcalTPGSlidingWindowHandler.h.

Definition at line 94 of file EcalTPGSlidingWindowHandler.h.

Definition at line 91 of file EcalTPGSlidingWindowHandler.h.

Definition at line 92 of file EcalTPGSlidingWindowHandler.h.

Definition at line 78 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 82 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 87 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 88 of file EcalTPGSlidingWindowHandler.h.

Referenced by id().

Definition at line 86 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 89 of file EcalTPGSlidingWindowHandler.h.

Definition at line 90 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 84 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().

Definition at line 85 of file EcalTPGSlidingWindowHandler.h.

Referenced by EcalTPGSlidingWindowHandler().