CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/CalibFormats/SiPixelObjects/interface/PixelCalibConfiguration.h

Go to the documentation of this file.
00001 #ifndef PixelCalibConfiguration_h
00002 #define PixelCalibConfiguration_h
00003 
00009 #include <vector>
00010 #include <set>
00011 #include <map>
00012 #include <string>
00013 #include <sstream>
00014 #include <utility>
00015 #include "CalibFormats/SiPixelObjects/interface/PixelCalibBase.h"
00016 #include "CalibFormats/SiPixelObjects/interface/PixelNameTranslation.h"
00017 #include "CalibFormats/SiPixelObjects/interface/PixelDetectorConfig.h"
00018 #include "CalibFormats/SiPixelObjects/interface/PixelFEDConfig.h"
00019 #include "CalibFormats/SiPixelObjects/interface/PixelFECConfig.h"
00020 #include "CalibFormats/SiPixelObjects/interface/PixelTKFECConfig.h"
00021 #include "CalibFormats/SiPixelObjects/interface/PixelFECConfigInterface.h"
00022 #include "CalibFormats/SiPixelObjects/interface/PixelROCName.h"
00023 #include "CalibFormats/SiPixelObjects/interface/PixelModuleName.h"
00024 #include "CalibFormats/SiPixelObjects/interface/PixelModuleName.h"
00025 #include "CalibFormats/SiPixelObjects/interface/PixelMaskBase.h"
00026 #include "CalibFormats/SiPixelObjects/interface/PixelTrimBase.h"
00027 #include "CalibFormats/SiPixelObjects/interface/PixelROCMaskBits.h"
00028 #include "CalibFormats/SiPixelObjects/interface/PixelROCTrimBits.h"
00029 #include "CalibFormats/SiPixelObjects/interface/PixelDACSettings.h"
00030 #include "CalibFormats/SiPixelObjects/interface/PixelConfigBase.h"
00031 #include "CalibFormats/SiPixelObjects/interface/PixelDACScanRange.h"
00032 #include "CalibFormats/SiPixelObjects/interface/PixelPortcardMap.h"
00033 #include "CalibFormats/SiPixelObjects/interface/PixelPortCardConfig.h"
00034 
00035 
00036 namespace pos{
00037   class PixelHdwAddress;
00038 
00039   //This class contains info about a ROC
00040   class PixelROCInfo {    
00041   public:
00042     bool use_;
00043     const PixelHdwAddress* hdwadd_;
00044     //FIXME these should be const but it has ripple effects...
00045     PixelROCTrimBits* trims_;
00046     PixelROCMaskBits* masks_;
00047     std::vector<std::pair<unsigned int, unsigned int> > defaultDACs_;
00048     std::string tbmChannel_;
00049   };
00050 
00051 
00064   class PixelCalibConfiguration : public PixelCalibBase, public PixelConfigBase {
00065 
00066   public:
00067 
00068     PixelCalibConfiguration(std::string filename="");
00069     PixelCalibConfiguration(std::vector<std::vector<std::string> > &);
00070 
00071     virtual ~PixelCalibConfiguration();
00072 
00073     // This must be run before using commands that require the ROC list.
00074     void buildROCAndModuleLists(const PixelNameTranslation* translation, const PixelDetectorConfig* detconfig);
00075 
00076     void nextFECState(std::map<unsigned int, PixelFECConfigInterface*>& pixelFECs,
00077                       PixelDetectorConfig* detconfig,
00078                       PixelNameTranslation* trans,
00079                       std::map<pos::PixelModuleName,pos::PixelMaskBase*>* masks,
00080                       std::map<pos::PixelModuleName,pos::PixelTrimBase*>* trims,
00081                       std::map<pos::PixelModuleName,pos::PixelDACSettings*>* dacss,
00082                       unsigned int state) const; 
00083 
00084     //return vector of fed# and channels controlled by this fed supervisor
00085     std::vector<std::pair<unsigned int,std::vector<unsigned int> > >& fedCardsAndChannels(unsigned int crate, PixelNameTranslation* translation, PixelFEDConfig* fedconfig,PixelDetectorConfig* detconfig) const;
00086 
00087     std::map <unsigned int, std::set<unsigned int> > getFEDsAndChannels (PixelNameTranslation *translation);
00088     
00089     // Returns a std::set of FED crates that are used by this Calib object
00090     std::set <unsigned int> getFEDCrates(const PixelNameTranslation *translation, const PixelFEDConfig *fedconfig) const;
00091 
00092     // Returns a std::set of FEC crates that are used by this Calib object
00093     std::set <unsigned int> getFECCrates(const PixelNameTranslation *translation, const PixelFECConfig* fecconfig) const;
00094 
00095     // Returns a std::set of TKFEC crates that are used by this Calib object
00096     std::set <unsigned int> getTKFECCrates(const PixelPortcardMap *portcardmap, const std::map<std::string,PixelPortCardConfig*>& mapNamePortCard, const PixelTKFECConfig* tkfecconfig) const;
00097 
00098     unsigned int nROC() const { assert(rocAndModuleListsBuilt_); return nROC_; }
00099     unsigned int nPixelPatterns() const { return rows_.size()*cols_.size(); }
00100     unsigned int nTriggersPerPattern() const { return ntrigger_; }
00101     unsigned int nScanPoints(std::string dac) const { return nScanPoints(iScan(dac)); }    
00102 
00103     unsigned int nScanPoints() const {unsigned int points=1;
00104       for(unsigned int i=0;i<dacs_.size();i++) {
00105         points*=nScanPoints(i);
00106       }
00107       return points;
00108     }
00109     unsigned int nConfigurations() const { return nPixelPatterns()*nScanPoints()*nROC();}
00110     unsigned int nTriggersTotal() const {return nConfigurations()*nTriggersPerPattern();}
00111 
00112     bool noHits() const {return (maxNumHitsPerROC()==0);} // returns true if no hits will be produced
00113     unsigned int maxNumHitsPerROC() const; // returns the maximum number of hits that will be produced in any pixel pattern
00114 
00115     // Return all the pixels that are enabled for this state.
00116     std::set< std::pair<unsigned int, unsigned int> > pixelsWithHits(unsigned int state) const;
00117     //                  column #      row #
00118 
00119     // Whether this ROC is currently being scanned.  (Always true when not in SingleROC mode.)
00120     bool scanningROCForState(PixelROCName roc, unsigned int state) const;
00121 
00122     unsigned int scanCounter(std::string dac, unsigned int state) const{
00123       return scanCounter(iScan(dac),state);
00124     }
00125 
00126     unsigned int scanValue(std::string dac, unsigned int state, PixelROCName roc) const {
00127       return scanValue(iScan(dac), state, roc);
00128     }
00129 
00130     // This function should not be used -- provided for backwards compatibility only.  It asserts if the scan values for this dac are mixed across different ROCs.
00131     unsigned int scanValue(std::string dac, unsigned int state) const {
00132       assert( !(dacs_[iScan(dac)].mixValuesAcrossROCs()) );
00133       return scanValue(iScan(dac), state, 0, 1);
00134     }
00135 
00136     unsigned int numberOfScanVariables() const {return dacs_.size();}
00137 
00138     bool containsScan(std::string name) const;
00139 
00140     std::string scanName(unsigned int iscan) const {return dacs_[iscan].name();}
00141     std::vector<unsigned int> scanValues(std::string dac) const {return scanValues(iScan(dac));}
00142 
00143     double scanValueMin(std::string dac) const {return scanValueMin(iScan(dac));}
00144     double scanValueMax(std::string dac) const {return scanValueMax(iScan(dac));}
00145     double scanValueStep(std::string dac) const {return scanValueStep(iScan(dac));}
00146     bool scanValuesMixedAcrossROCs(std::string dac) const {return scanValuesMixedAcrossROCs(iScan(dac));}
00147 
00148     unsigned int iScan(std::string dac) const;
00149 
00150     const std::vector<std::vector<unsigned int> > &columnList() const {return cols_;}
00151     const std::vector<std::vector<unsigned int> > &rowList() const {return rows_;}
00152     const std::vector<PixelROCName>& rocList() const {assert(rocAndModuleListsBuilt_); return rocs_;}
00153     const std::set <PixelModuleName>& moduleList() const {assert(rocAndModuleListsBuilt_); return modules_;}
00154     const std::set <PixelChannel>& channelList() const {assert( objectsDependingOnTheNameTranslationBuilt_ ); return channels_;}
00155 
00156     std::string mode() const {return mode_;}
00157 
00158     bool singleROC() const {return singleROC_;}
00159 
00160     unsigned int nParameters() const {return parameters_.size();}
00161 
00162     // Added by Dario Apr 24th, 2008
00163     std::map<std::string, std::string> parametersList() const {return parameters_;}
00164     // get the value of parameter parameterName, or "" if parameterName is not in the list
00165     std::string parameterValue(std::string parameterName) const;
00166 
00167     // Added by Dario May 8th, 2008
00168     std::string getStreamedContent(void) const {return calibFileContent_;} ;
00169 
00170     friend std::ostream& pos::operator<<(std::ostream& s, const PixelCalibConfiguration& calib);
00171 
00172     virtual void writeASCII(std::string dir="") const;
00173     void         writeXML(        pos::PixelConfigKey key, int version, std::string path) const {;}
00174     virtual void writeXMLHeader(  pos::PixelConfigKey key, 
00175                                   int version, 
00176                                   std::string path, 
00177                                   std::ofstream *out,
00178                                   std::ofstream *out1 = NULL,
00179                                   std::ofstream *out2 = NULL
00180                                   ) const ;
00181     virtual void writeXML(        std::ofstream *out,                                                       
00182                                   std::ofstream *out1 = NULL ,
00183                                   std::ofstream *out2 = NULL ) const ;
00184     virtual void writeXMLTrailer( std::ofstream *out, 
00185                                   std::ofstream *out1 = NULL,
00186                                   std::ofstream *out2 = NULL
00187                                   ) const ;
00188 
00189 
00190   private:
00191 
00192     // Which set of rows we're on.
00193     unsigned int rowCounter(unsigned int state) const;
00194     
00195     // Which set of columns we're on.
00196     unsigned int colCounter(unsigned int state) const;
00197 
00198     // In SingleROC mode, which ROC we're on.  In normal mode, this equals 1.
00199     unsigned int scanROC(unsigned int state) const;
00200 
00201     unsigned int nScanPoints(unsigned int iscan) const { return dacs_[iscan].getNPoints(); }
00202 
00203     unsigned int scanCounter(unsigned int iscan, unsigned int state) const;
00204 
00205     unsigned int scanValue(unsigned int iscan, unsigned int state, unsigned int ROCNumber, unsigned int ROCsOnChannel) const;
00206     unsigned int scanValue(unsigned int iscan, unsigned int state, PixelROCName roc) const;
00207 
00208     std::vector<unsigned int> scanValues(unsigned int iscan) const {return dacs_[iscan].values();}
00209 
00210     double scanValueMin(unsigned int iscan) const {return dacs_[iscan].first();}
00211     double scanValueMax(unsigned int iscan) const {return dacs_[iscan].first()+
00212                                                    dacs_[iscan].step()*(nScanPoints(iscan)-1);}
00213     double scanValueStep(unsigned int iscan) const {return dacs_[iscan].step();}
00214     bool scanValuesMixedAcrossROCs(unsigned int iscan) const {return dacs_[iscan].mixValuesAcrossROCs();}
00215 
00216     // Used in constructor or in buildROCAndModuleLists()
00217     void buildROCAndModuleListsFromROCSet(const std::set<PixelROCName>& rocSet);
00218 
00219     void buildObjectsDependingOnTheNameTranslation(const PixelNameTranslation* aNameTranslation);
00220     
00221     unsigned int ROCNumberOnChannelAmongThoseCalibrated(PixelROCName roc) const;
00222     unsigned int numROCsCalibratedOnChannel(PixelROCName roc) const;
00223 
00224     bool singleROC_;
00225 
00226     std::vector<std::vector<unsigned int> > rows_;
00227     std::vector<std::vector<unsigned int> > cols_;
00228 
00229     mutable std::vector<PixelROCName> rocs_;
00230     mutable std::vector<PixelROCInfo> rocInfo_;
00231     std::set <PixelModuleName> modules_;
00232     bool rocAndModuleListsBuilt_;
00233     std::vector<std::string> rocListInstructions_;
00234     
00235     // Objects built using the name translation.
00236     std::set <PixelChannel> channels_;
00237     std::map <PixelROCName, unsigned int> ROCNumberOnChannelAmongThoseCalibrated_;
00238     std::map <PixelROCName, unsigned int> numROCsCalibratedOnChannel_;
00239     bool objectsDependingOnTheNameTranslationBuilt_;
00240     
00241     mutable std::vector<std::pair<unsigned int, std::vector<unsigned int> > > fedCardsAndChannels_;
00242 
00243 
00244     //unsigned int vcal_;
00245 
00246     std::vector<PixelDACScanRange> dacs_;
00247 
00248     //std::vector<std::string> dacname_;
00249     //std::vector<unsigned int> dacchannel_;
00250     //std::vector<unsigned int> dac_first_;
00251     //std::vector<unsigned int> dac_last_;
00252     //std::vector<unsigned int> dac_step_;
00253 
00254     unsigned int ntrigger_;
00255     unsigned int nROC_; //This is the maximal #ROCs on a given TBM
00256 
00257     bool highVCalRange_;
00258 
00259     void enablePixels(PixelFECConfigInterface* pixelFEC,
00260                       unsigned int irows, unsigned int icols,
00261                       pos::PixelROCMaskBits* masks,
00262                       pos::PixelROCTrimBits* trims,     
00263                       PixelHdwAddress theROC) const;
00264 
00265     void disablePixels(PixelFECConfigInterface* pixelFEC,
00266                        unsigned int irows, unsigned int icols,
00267                        pos::PixelROCTrimBits* trims,    
00268                        PixelHdwAddress theROC) const;
00269 
00270     void disablePixels(PixelFECConfigInterface* pixelFEC,
00271                        pos::PixelROCTrimBits* trims,    
00272                        PixelHdwAddress theROC) const;
00273 
00274     mutable std::vector<int> old_irows;
00275     mutable std::vector<int> old_icols;
00276 
00277     std::map<std::string, std::string> parameters_;
00278     //       name         value
00279 
00280     bool _bufferData;
00281 
00282     bool usesROCList_;
00283 
00284     // Added by Dario May 8th, 2008
00285     std::string calibFileContent_ ;
00286   };
00287 }
00288 /* @} */
00289 #endif