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
00040 class PixelROCInfo {
00041 public:
00042 bool use_;
00043 const PixelHdwAddress* hdwadd_;
00044
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
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
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
00090 std::set <unsigned int> getFEDCrates(const PixelNameTranslation *translation, const PixelFEDConfig *fedconfig) const;
00091
00092
00093 std::set <unsigned int> getFECCrates(const PixelNameTranslation *translation, const PixelFECConfig* fecconfig) const;
00094
00095
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);}
00113 unsigned int maxNumHitsPerROC() const;
00114
00115
00116 std::set< std::pair<unsigned int, unsigned int> > pixelsWithHits(unsigned int state) const;
00117
00118
00119
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
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
00163 std::map<std::string, std::string> parametersList() const {return parameters_;}
00164
00165 std::string parameterValue(std::string parameterName) const;
00166
00167
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
00193 unsigned int rowCounter(unsigned int state) const;
00194
00195
00196 unsigned int colCounter(unsigned int state) const;
00197
00198
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
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
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
00245
00246 std::vector<PixelDACScanRange> dacs_;
00247
00248
00249
00250
00251
00252
00253
00254 unsigned int ntrigger_;
00255 unsigned int nROC_;
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
00279
00280 bool _bufferData;
00281
00282 bool usesROCList_;
00283
00284
00285 std::string calibFileContent_ ;
00286 };
00287 }
00288
00289 #endif