diff --git a/.gitignore b/.gitignore index 1a38d6227329c..a4ff4c2f93d09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -__init__.py +__init__.* *.pyc +*.log diff --git a/Alignment/CommonAlignmentAlgorithm/src/TkModuleGroupSelector.cc b/Alignment/CommonAlignmentAlgorithm/src/TkModuleGroupSelector.cc index 44a82ebd62567..470a403526eb5 100644 --- a/Alignment/CommonAlignmentAlgorithm/src/TkModuleGroupSelector.cc +++ b/Alignment/CommonAlignmentAlgorithm/src/TkModuleGroupSelector.cc @@ -270,17 +270,20 @@ int TkModuleGroupSelector::getParameterIndexFromDetId(unsigned int detId, const std::vector &runs = runRange_.at(iAlignableGroup); const unsigned int id0 = firstId_.at(iAlignableGroup); const edm::RunNumber_t refrun = referenceRun_.at(iAlignableGroup); - // assuming runs is never empty (checked in createModuleGroups(..)) - if (runs[0] > run) { - throw cms::Exception("BadConfig") - << "@SUB=TkModuleGroupSelector::getParameterIndexFromDetId:\n" - << "Run " << run << " not foreseen for detid ('"<< detId <<"')" - << " in module group " << iAlignableGroup << "."; - } + + unsigned int iovNum = 0; for ( ; iovNum < runs.size(); ++iovNum) { - if (run >= runs[iovNum]) break; + if (runs[iovNum] > run) break; } + if (iovNum == 0) { + throw cms::Exception("BadConfig") << "@SUB=TkModuleGroupSelector::getParameterIndexFromDetId:\n" + << "Run " << run << " not foreseen for detid '"<< detId <<"'" + << " in module group " << iAlignableGroup << "."; + } else { + --iovNum; + } + //test whether the iov contains the reference run if(refrun > 0) { //if > 0 a reference run number has been provided if(iovNum+1 == runs.size()) { diff --git a/Alignment/CommonAlignmentProducer/interface/AlignmentTrackSelector.h b/Alignment/CommonAlignmentProducer/interface/AlignmentTrackSelector.h index ef2d347e1f9e1..d498209af70bc 100644 --- a/Alignment/CommonAlignmentProducer/interface/AlignmentTrackSelector.h +++ b/Alignment/CommonAlignmentProducer/interface/AlignmentTrackSelector.h @@ -81,6 +81,10 @@ class AlignmentTrackSelector const int minHitsinENDCAP_, minHitsinENDCAPplus_, minHitsinENDCAPminus_; const double maxHitDiffEndcaps_; const double nLostHitMax_; + std::vector RorZofFirstHitMin_; + std::vector RorZofFirstHitMax_; + std::vector RorZofLastHitMin_; + std::vector RorZofLastHitMax_; const edm::InputTag clusterValueMapTag_; // ValueMap containing association cluster - flag const int minPrescaledHits_; diff --git a/Alignment/CommonAlignmentProducer/python/AlignmentTrackSelector_cfi.py b/Alignment/CommonAlignmentProducer/python/AlignmentTrackSelector_cfi.py index b2015d5d47127..7422eac1e79d0 100644 --- a/Alignment/CommonAlignmentProducer/python/AlignmentTrackSelector_cfi.py +++ b/Alignment/CommonAlignmentProducer/python/AlignmentTrackSelector_cfi.py @@ -26,6 +26,10 @@ nHitMax = cms.double(999.0), nLostHitMax = cms.double(999.0), nHitMin2D = cms.uint32(0), + RorZofFirstHitMin = cms.vdouble(0.0,0.0), + RorZofFirstHitMax = cms.vdouble(999.0,999.0), + RorZofLastHitMin = cms.vdouble(0.0,0.0), + RorZofLastHitMax = cms.vdouble(999.0,999.0), countStereoHitAs2D = cms.bool(True), minHitsPerSubDet = cms.PSet( inTEC = cms.int32(0), diff --git a/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc b/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc index 00a93635c2d63..5a89322db3116 100644 --- a/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc +++ b/Alignment/CommonAlignmentProducer/src/AlignmentTrackSelector.cc @@ -24,6 +24,9 @@ #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/TrackerCommon/interface/TrackerTopology.h" #include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include + const int kBPIX = PixelSubdetector::PixelBarrel; const int kFPIX = PixelSubdetector::PixelEndcap; @@ -81,6 +84,10 @@ AlignmentTrackSelector::AlignmentTrackSelector(const edm::ParameterSet & cfg) : minHitsinENDCAPminus_ (cfg.getParameter( "minHitsPerSubDet" ).getParameter( "inENDCAPminus" ) ), maxHitDiffEndcaps_( cfg.getParameter( "maxHitDiffEndcaps" ) ), nLostHitMax_( cfg.getParameter( "nLostHitMax" ) ), + RorZofFirstHitMin_( cfg.getParameter >( "RorZofFirstHitMin" ) ), + RorZofFirstHitMax_( cfg.getParameter >( "RorZofFirstHitMax" ) ), + RorZofLastHitMin_( cfg.getParameter >( "RorZofLastHitMin" ) ), + RorZofLastHitMax_( cfg.getParameter >( "RorZofLastHitMax" ) ), clusterValueMapTag_(cfg.getParameter("hitPrescaleMapTag")), minPrescaledHits_( cfg.getParameter("minPrescaledHits")), applyPrescaledHitsFilter_(clusterValueMapTag_.encode().size() && minPrescaledHits_ > 0) @@ -173,6 +180,47 @@ AlignmentTrackSelector::AlignmentTrackSelector(const edm::ParameterSet & cfg) : } + // Checking whether cuts on positions of first and last track hits are defined properly + if(RorZofFirstHitMin_.size() != 2){ + throw cms::Exception("BadConfig") << "@SUB=AlignmentTrackSelector::AlignmentTrackSelector" + << "Wrong configuration of 'RorZofFirstHitMin'." + << " Must have exactly 2 values instead of configured " << RorZofFirstHitMin_.size() << ")"; + } else { + RorZofFirstHitMin_.at(0)=std::fabs(RorZofFirstHitMin_.at(0)); + RorZofFirstHitMin_.at(1)=std::fabs(RorZofFirstHitMin_.at(1)); + } + if(RorZofFirstHitMax_.size() != 2){ + throw cms::Exception("BadConfig") << "@SUB=AlignmentTrackSelector::AlignmentTrackSelector" + << "Wrong configuration of 'RorZofFirstHitMax'." + << " Must have exactly 2 values instead of configured " << RorZofFirstHitMax_.size() << ")"; + } else { + RorZofFirstHitMax_.at(0) = std::fabs(RorZofFirstHitMax_.at(0)); + RorZofFirstHitMax_.at(1) = std::fabs(RorZofFirstHitMax_.at(1)); + } + if(RorZofLastHitMin_.size() != 2){ + throw cms::Exception("BadConfig") << "@SUB=AlignmentTrackSelector::AlignmentTrackSelector" + << "Wrong configuration of 'RorZofLastHitMin'." + << " Must have exactly 2 values instead of configured " << RorZofLastHitMin_.size() << ")"; + } else { + RorZofLastHitMin_.at(0) = std::fabs(RorZofLastHitMin_.at(0)); + RorZofLastHitMin_.at(1) = std::fabs(RorZofLastHitMin_.at(1)); + } + if(RorZofLastHitMax_.size() != 2){ + throw cms::Exception("BadConfig") << "@SUB=AlignmentTrackSelector::AlignmentTrackSelector" + << "Wrong configuration of 'RorZofLastHitMax'." + << " Must have exactly 2 values instead of configured " << RorZofLastHitMax_.size() << ")"; + } else { + RorZofLastHitMax_.at(0) = std::fabs(RorZofLastHitMax_.at(0)); + RorZofLastHitMax_.at(1) = std::fabs(RorZofLastHitMax_.at(1)); + } + // If first hit set to be at larger distance then the last hit + if(RorZofFirstHitMin_.at(0) > RorZofLastHitMax_.at(0) && RorZofFirstHitMin_.at(1) > RorZofLastHitMax_.at(1)){ + throw cms::Exception("BadConfig") << "@SUB=AlignmentTrackSelector::AlignmentTrackSelector" + << "Position of the first hit is set to larger distance than the last hit:." + << " First hit(min): [" << RorZofFirstHitMin_.at(0) << ", " << RorZofFirstHitMin_.at(1) << "]; Last hit(max): [" + << RorZofLastHitMax_.at(0) << ", " << RorZofLastHitMax_.at(1) << "];"; + } + } // destructor ----------------------------------------------------------------- @@ -294,7 +342,8 @@ bool AlignmentTrackSelector::detailedHitsCheck(const reco::Track *trackp, const || minHitsinFPIXplus_ || minHitsinFPIXminus_ || minHitsinTECplus_ || minHitsinTECminus_ || minHitsinFPIX_ || minHitsinBPIX_ || minHitsinPIX_ ||nHitMin2D_ || chargeCheck_ - || applyIsolation_ || (seedOnlyFromAbove_ == 1 || seedOnlyFromAbove_ == 2)) { + || applyIsolation_ || (seedOnlyFromAbove_ == 1 || seedOnlyFromAbove_ == 2) + || RorZofFirstHitMin_.size() > 0 || RorZofFirstHitMax_.size() > 0 || RorZofLastHitMin_.size() > 0 || RorZofLastHitMax_.size() > 0 ) { // any detailed hit cut is active, so have to check int nhitinTIB = 0, nhitinTOB = 0, nhitinTID = 0; @@ -372,6 +421,40 @@ bool AlignmentTrackSelector::detailedHitsCheck(const reco::Track *trackp, const // Do not call isHit2D(..) if already enough 2D hits for performance reason: if (nHit2D < nHitMin2D_ && this->isHit2D(**iHit)) ++nHit2D; } // end loop on hits + + + // Checking whether the track satisfies requirement of the first and last hit positions + bool passedLastHitPositionR = true; + bool passedLastHitPositionZ = true; + bool passedFirstHitPositionR = true; + bool passedFirstHitPositionZ = true; + + if( RorZofFirstHitMin_.at(0) != 0.0 || RorZofFirstHitMin_.at(1) != 0.0 + || RorZofFirstHitMax_.at(0) != 999.0 || RorZofFirstHitMax_.at(1) != 999.0 ) { + + const reco::TrackBase::Point firstPoint(trackp->innerPosition()); + + if( (std::fabs(firstPoint.R()) < RorZofFirstHitMin_.at(0) )) passedFirstHitPositionR = false; + if( (std::fabs(firstPoint.R()) > RorZofFirstHitMax_.at(0) )) passedFirstHitPositionR = false; + if( (std::fabs(firstPoint.Z()) < RorZofFirstHitMin_.at(1) )) passedFirstHitPositionZ = false; + if( (std::fabs(firstPoint.Z()) > RorZofFirstHitMax_.at(1) )) passedFirstHitPositionZ = false; + } + + if( RorZofLastHitMin_.at(0) != 0.0 || RorZofLastHitMin_.at(1) != 0.0 + || RorZofLastHitMax_.at(0) != 999.0 || RorZofLastHitMax_.at(1) != 999.0 ) { + + const reco::TrackBase::Point lastPoint(trackp->outerPosition()); + + if( (std::fabs(lastPoint.R()) < RorZofLastHitMin_.at(0) )) passedLastHitPositionR = false; + if( (std::fabs(lastPoint.R()) > RorZofLastHitMax_.at(0) )) passedLastHitPositionR = false; + if( (std::fabs(lastPoint.Z()) < RorZofLastHitMin_.at(1) )) passedLastHitPositionZ = false; + if( (std::fabs(lastPoint.Z()) > RorZofLastHitMax_.at(1) )) passedLastHitPositionZ = false; + } + + bool passedFirstHitPosition = passedFirstHitPositionR || passedFirstHitPositionZ; + bool passedLastHitPosition = passedLastHitPositionR || passedLastHitPositionZ; + + return (nhitinTIB >= minHitsinTIB_ && nhitinTOB >= minHitsinTOB_ && nhitinTID >= minHitsinTID_ && nhitinTEC >= minHitsinTEC_ @@ -382,7 +465,7 @@ bool AlignmentTrackSelector::detailedHitsCheck(const reco::Track *trackp, const && nhitinTECplus >= minHitsinTECplus_ && nhitinTECminus >= minHitsinTECminus_ && nhitinBPIX >= minHitsinBPIX_ && nhitinFPIX >= minHitsinFPIX_ && nhitinPIXEL>=minHitsinPIX_ - && nHit2D >= nHitMin2D_); + && nHit2D >= nHitMin2D_ && passedFirstHitPosition && passedLastHitPosition); } else { // no cuts set, so we are just fine and can avoid loop on hits return true; } diff --git a/Alignment/OfflineValidation/macros/PlotAlignmentValidation.C b/Alignment/OfflineValidation/macros/PlotAlignmentValidation.C index 378222124c6e7..06c6e78f234c5 100644 --- a/Alignment/OfflineValidation/macros/PlotAlignmentValidation.C +++ b/Alignment/OfflineValidation/macros/PlotAlignmentValidation.C @@ -440,8 +440,8 @@ void PlotAlignmentValidation::plotSS( const std::string& options, const std::str TString subDetName; switch (iSubDet) { - case 1: subDetName = "TPB"; break; - case 2: subDetName = "TPE"; break; + case 1: subDetName = "BPIX"; break; + case 2: subDetName = "FPIX"; break; case 3: subDetName = "TIB"; break; case 4: subDetName = "TID"; break; case 5: subDetName = "TOB"; break; @@ -696,8 +696,8 @@ void PlotAlignmentValidation::plotDMR(const std::string& variable, Int_t minHits else if (variable=="rmsNormY") plotName << "rmsNYR_"; switch (i) { - case 1: plotName << "TPB"; break; - case 2: plotName << "TPE"; break; + case 1: plotName << "BPIX"; break; + case 2: plotName << "FPIX"; break; case 3: plotName << "TIB"; break; case 4: plotName << "TID"; break; case 5: plotName << "TOB"; break; @@ -902,7 +902,7 @@ void PlotAlignmentValidation::setCanvasStyle( TCanvas& canv ) canv.SetLeftMargin ( 0.15 ); canv.SetRightMargin ( 0.05 ); canv.SetBottomMargin( 0.15 ); - canv.SetTopMargin ( 0.10 ); + canv.SetTopMargin ( 0.12 ); } //------------------------------------------------------------------------------ @@ -972,8 +972,8 @@ void PlotAlignmentValidation::setTitleStyle( TNamed &hist,const char* titleX, c if (titelXAxis.Contains("rmsX")) histTitel="Distribution of the rms of the residuals in "; switch (subDetId) { - case 1: histTitel+="TPB";break; - case 2: histTitel+="TPE";break; + case 1: histTitel+="BPIX";break; + case 2: histTitel+="FPIX";break; case 3: histTitel+="TIB";break; case 4: histTitel+="TID";break; case 5: histTitel+="TOB";break; diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/alternateValidationTemplates.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/alternateValidationTemplates.py index 4d61965409470..05eb36ff23902 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/alternateValidationTemplates.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/alternateValidationTemplates.py @@ -967,7 +967,7 @@ #bit xy for muons trigger -process.triggerSelection=cms.Sequence(process.bptxAnd) +#process.triggerSelection=cms.Sequence(process.bptxAnd) @@ -1415,6 +1415,6 @@ #bit xy for muons trigger -process.triggerSelection=cms.Sequence(process.bptxAnd) +#process.triggerSelection=cms.Sequence(process.bptxAnd) """ diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/betterConfigParser.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/betterConfigParser.py index 1abcffcd6d456..86e2eaad2cd76 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/betterConfigParser.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/betterConfigParser.py @@ -33,8 +33,9 @@ def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - `dict_item`: method which is used for finally setting the item """ - if "__name__" in self and self["__name__"]=="validation" and key in self: - the_value = self[key]+self.getSep()+value + if "__name__" in self and self["__name__"]=="validation" \ + and key in self and value!=self[key][0]: + the_value = [self[key][0]+self.getSep()+value[0]] else: the_value = value dict_setitem(self, key, the_value) diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/geometryComparison.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/geometryComparison.py index 74e8e1889356c..a891b6862f88a 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/geometryComparison.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/geometryComparison.py @@ -151,7 +151,7 @@ def createScript(self, path): "fi\n") repMap["runComparisonScripts"] += \ ("rfcp .oO[CMSSW_BASE]Oo./src/Alignment" - "/OfflineValidation/scripts/makeArrowPlots " + "/OfflineValidation/scripts/makeArrowPlots.C " "$CWD/TkAllInOneTool\n" "root -b -q 'makeArrowPlots.C(\"" ".oO[name]Oo..Comparison_common"+name diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/offlineValidationTemplates.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/offlineValidationTemplates.py index 65de4ae30a589..29a85b390aff7 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/offlineValidationTemplates.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/offlineValidationTemplates.py @@ -43,7 +43,7 @@ #Good Bunch Crossings process.bptxAnd = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('0')) #BSCNOBEAMHALO -process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))')) +#process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))')) #Physics declared process.load('HLTrigger.special.hltPhysicsDeclared_cfi') @@ -189,7 +189,7 @@ ## PATH ## process.p = cms.Path( -process.triggerSelection* +#process.triggerSelection* process.offlineBeamSpot*process.HighPuritySelector*process.TrackRefitter1*process.TrackerTrackHitFilter*process.HitFilteredTracks *process.AlignmentTrackSelector*process.TrackRefitter2*process.seqTrackerOfflineValidation.oO[offlineValidationMode]Oo.) @@ -244,7 +244,7 @@ #Good Bunch Crossings process.bptxAnd = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('0')) #BSCNOBEAMHALO -process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))')) +#process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))')) #Physics declared process.load('HLTrigger.special.hltPhysicsDeclared_cfi') @@ -390,7 +390,7 @@ ## PATH ## process.p = cms.Path( -process.triggerSelection* +#process.triggerSelection* process.offlineBeamSpot*process.HighPuritySelector*process.TrackRefitter1*process.TrackerTrackHitFilter*process.HitFilteredTracks *process.AlignmentTrackSelector*process.TrackRefitter2*process.seqTrackerOfflineValidation.oO[offlineValidationMode]Oo.) @@ -533,7 +533,7 @@ #no triger on bunch crossing bit 0 -process.triggerSelection=cms.Sequence(process.bit40) +# process.triggerSelection=cms.Sequence(process.bit40) """ diff --git a/CalibCalorimetry/EcalTrivialCondModules/data/myEBAlignment_2011.txt b/CalibCalorimetry/EcalTrivialCondModules/data/myEBAlignment_2011.txt new file mode 100644 index 0000000000000..ae3a89b323756 --- /dev/null +++ b/CalibCalorimetry/EcalTrivialCondModules/data/myEBAlignment_2011.txt @@ -0,0 +1,36 @@ + 0 0 0 -0.034223 -0.28593 -0.017563 + 0 0 0 0.0039431 -0.31206 0.011618 + 0 0 0 0.044774 -0.40944 -0.041151 + 0 0 0 -0.038121 -0.42382 -0.054346 + 0 0 0 0.020883 -0.52338 -0.066333 + 0 0 0 -0.049104 -0.56342 -0.056034 + 0 0 0 0.028633 -0.45665 -0.081459 + 0 0 0 0.002744 -0.33699 -0.032223 + 0 0 0 0.03076 -0.31652 -0.070976 + 0 0 0 -0.11627 -0.2518 -0.12576 + 0 0 0 0.080911 -0.24423 -0.094434 + 0 0 0 0.12307 -0.13983 -0.0054441 + 0 0 0 0.042039 -0.058385 0.054147 + 0 0 0 -0.037558 -0.093878 0.04518 + 0 0 0 -0.12737 -0.058186 0.020768 + 0 0 0 -0.07848 -0.058563 0.033196 + 0 0 0 -0.19003 -0.1753 0.012549 + 0 0 0 -0.13311 -0.19829 -0.031179 + 0 0 0 -0.17706 -0.20923 -0.064801 + 0 0 0 -0.15267 -0.258 -0.17314 + 0 0 0 -0.15557 -0.34763 -0.19438 + 0 0 0 -0.099019 -0.37587 -0.19039 + 0 0 0 -0.060424 -0.4266 -0.12047 + 0 0 0 -0.0063939 -0.36387 -0.17126 + 0 0 0 0.069456 -0.30895 -0.12583 + 0 0 0 0.026041 -0.23906 -0.16838 + 0 0 0 0.0011744 -0.19449 -0.12895 + 0 0 0 0.04594 -0.20264 -0.096879 + 0 0 0 0.14654 -0.15102 -0.076089 + 0 0 0 0.10405 -0.11861 -0.062105 + 0 0 0 0.074751 -0.055344 -0.053866 + 0 0 0 0.010904 -0.069639 -0.043928 + 0 0 0 0.039073 -0.28638 -0.11031 + 0 0 0 -0.078325 -0.099408 -0.030385 + 0 0 0 -0.14247 -0.14605 -0.063662 + 0 0 0 -0.17623 -0.18718 -0.11225 diff --git a/CalibCalorimetry/EcalTrivialCondModules/data/myEEAlignment_2011.txt b/CalibCalorimetry/EcalTrivialCondModules/data/myEEAlignment_2011.txt new file mode 100644 index 0000000000000..2fb0f8d80bf8c --- /dev/null +++ b/CalibCalorimetry/EcalTrivialCondModules/data/myEEAlignment_2011.txt @@ -0,0 +1,4 @@ + 0.00027874 0 0.00027874 -0.12024 -0.72268 -0.35605 + 0.0002287 0 0.0002287 -0.13751 -0.83893 -0.21114 + 4.6334e-05 0 4.6334e-05 0.53451 -0.87586 0.1509 + -0.00015961 0 -0.00015961 0.55501 -0.95568 0.13822 diff --git a/Calibration/TkAlCaRecoProducers/python/AlcaSiStripQualityHarvester_cff.py b/Calibration/TkAlCaRecoProducers/python/AlcaSiStripQualityHarvester_cff.py index 47133e3bc2779..8cd0146f71ef1 100644 --- a/Calibration/TkAlCaRecoProducers/python/AlcaSiStripQualityHarvester_cff.py +++ b/Calibration/TkAlCaRecoProducers/python/AlcaSiStripQualityHarvester_cff.py @@ -4,7 +4,8 @@ from DQMServices.Components.EDMtoMEConverter_cfi import * EDMtoMEConvertSiStrip = EDMtoMEConverter.clone() -#EDMtoMEConvertSiStrip +EDMtoMEConvertSiStrip.lumiInputTag = cms.InputTag("MEtoEDMConvertSiStrip","MEtoEDMConverterLumi") +EDMtoMEConvertSiStrip.runInputTag = cms.InputTag("MEtoEDMConvertSiStrip","MEtoEDMConverterRun") DQMStore = cms.Service("DQMStore") diff --git a/CommonTools/ParticleFlow/python/EITopPAG_EventContent_cff.py b/CommonTools/ParticleFlow/python/EITopPAG_EventContent_cff.py index c0a0bde03efa4..ddbedd830c50a 100644 --- a/CommonTools/ParticleFlow/python/EITopPAG_EventContent_cff.py +++ b/CommonTools/ParticleFlow/python/EITopPAG_EventContent_cff.py @@ -9,6 +9,11 @@ 'keep *_pfIsolatedMuonsEI_*_*', # jets 'keep recoPFJets_pfJetsEI_*_*', + # btags + 'keep *_pfJetTrackAssociatorEI_*_*', + 'keep *_impactParameterTagInfosEI_*_*', + 'keep *_secondaryVertexTagInfosEI_*_*', + 'keep *_combinedSecondaryVertexBJetTagsEI_*_*', # taus 'keep recoPFTaus_pfTausEI_*_*', 'keep recoPFTauDiscriminator_pfTausDiscrimination*_*_*', diff --git a/CommonTools/ParticleFlow/python/EITopPAG_cff.py b/CommonTools/ParticleFlow/python/EITopPAG_cff.py index faac5c2148239..311495605a1a8 100644 --- a/CommonTools/ParticleFlow/python/EITopPAG_cff.py +++ b/CommonTools/ParticleFlow/python/EITopPAG_cff.py @@ -16,6 +16,13 @@ from CommonTools.ParticleFlow.TopProjectors.pfNoTau_cfi import * +# b-tagging +from RecoJets.JetAssociationProducers.ak5JTA_cff import ak5JetTracksAssociatorAtVertex +from RecoBTag.ImpactParameter.impactParameter_cfi import impactParameterTagInfos +from RecoBTag.SecondaryVertex.secondaryVertexTagInfos_cfi import secondaryVertexTagInfos +from RecoBTag.SecondaryVertex.combinedSecondaryVertexBJetTags_cfi import combinedSecondaryVertexBJetTags + + #### PU Again... need to do this twice because the "linking" stage of PF reco #### #### condenses information into the new "particleFlow" collection. #### @@ -122,6 +129,23 @@ pfTausPtrsEI ) +#### B-tagging #### +pfJetTrackAssociatorEI = ak5JetTracksAssociatorAtVertex.clone ( + src = cms.InputTag("pfJetsEI") + ) +impactParameterTagInfosEI = impactParameterTagInfos.clone( + jetTracks = cms.InputTag( 'pfJetTrackAssociatorEI' ) + ) +secondaryVertexTagInfosEI = secondaryVertexTagInfos.clone( + trackIPTagInfos = cms.InputTag( 'impactParameterTagInfosEI' ) + ) +combinedSecondaryVertexBJetTagsEI = combinedSecondaryVertexBJetTags.clone( + tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfosEI"), + cms.InputTag("secondaryVertexTagInfosEI")) + ) + + + #### MET #### pfMetEI = pfMET.clone(jets=cms.InputTag("pfJetsEI")) @@ -145,6 +169,10 @@ pfNoJetEI + pfTauEISequence + pfNoTauEI + - pfMetEI + pfMetEI+ + pfJetTrackAssociatorEI+ + impactParameterTagInfosEI+ + secondaryVertexTagInfosEI+ + combinedSecondaryVertexBJetTagsEI ) diff --git a/CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h b/CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h index 04296b04ac8cd..a7bffd14ab59f 100755 --- a/CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h +++ b/CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h @@ -27,6 +27,9 @@ #include "DataFormats/GeometryVector/interface/GlobalVector.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + class TrajectoryStateClosestToBeamLineBuilder; class CosmicTrackingParticleSelector { @@ -62,22 +65,26 @@ class CosmicTrackingParticleSelector { event.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot); for( TrackingParticleCollection::const_iterator itp = c->begin(); itp != c->end(); ++ itp ) - if ( operator()(*itp,beamSpot.product(),event,setup) ) { + if ( operator()(TrackingParticleRef(c,itp-c->begin()),beamSpot.product(),event,setup) ) { selected_.push_back( & * itp ); } } const_iterator begin() const { return selected_.begin(); } const_iterator end() const { return selected_.end(); } - + + void initEvent(edm::Handle simHitsTPAssocToSet) const { + simHitsTPAssoc = simHitsTPAssocToSet; + } + // Operator() performs the selection: e.g. if (tPSelector(tp, bs, event, evtsetup)) {... - bool operator()( const TrackingParticle & tp, const reco::BeamSpot* bs, const edm::Event &iEvent, const edm::EventSetup& iSetup ) const { - if (chargedOnly_ && tp.charge()==0) return false;//select only if charge!=0 + bool operator()( const TrackingParticleRef tpr, const reco::BeamSpot* bs, const edm::Event &iEvent, const edm::EventSetup& iSetup ) const { + if (chargedOnly_ && tpr->charge()==0) return false;//select only if charge!=0 //bool testId = false; //unsigned int idSize = pdgId_.size(); //if (idSize==0) testId = true; //else for (unsigned int it=0;it!=idSize;++it){ - //if (tp.pdgId()==pdgId_[it]) testId = true; + //if (tpr->pdgId()==pdgId_[it]) testId = true; //} edm::ESHandle tracker; @@ -90,16 +97,20 @@ class CosmicTrackingParticleSelector { GlobalPoint finalGP(0,0,0); GlobalVector momentum(0,0,0);//At the PCA GlobalPoint vertex(0,0,0);//At the PCA -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED double radius(9999); -#endif bool found(0); - -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - const std::vector & simHits = tp.trackPSimHit(DetId::Tracker); - for(std::vector::const_iterator it=simHits.begin(); it!=simHits.end(); ++it){ + + + if (simHitsTPAssoc.isValid()==0) { + edm::LogError("TrackAssociation") << "Invalid handle!"; + return false; + } + std::pair clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater + // sorting only the cluster is needed + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater); + for(auto ip = range.first; ip != range.second; ++ip) { + TrackPSimHitRef it = ip->second; const GeomDet* tmpDet = tracker->idToDet( DetId(it->detUnitId()) ) ; LocalVector lv = it->momentumAtEntry(); Local3DPoint lp = it->localPosition (); @@ -112,11 +123,10 @@ class CosmicTrackingParticleSelector { finalGP = gp; } } -#endif if(!found) return 0; else { - FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tp.charge()),theMF.product()); + FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tpr->charge()),theMF.product()); TSCBLBuilderNoMaterial tscblBuilder; TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm if(!tsAtClosestApproach.isValid()){ @@ -128,7 +138,7 @@ class CosmicTrackingParticleSelector { momentum = tsAtClosestApproach.trackStateAtPCA().momentum(); vertex = tsAtClosestApproach.trackStateAtPCA().position(); return ( - tp.numberOfTrackerLayers() >= minHit_ && + tpr->numberOfTrackerLayers() >= minHit_ && sqrt(momentum.perp2()) >= ptMin_ && momentum.eta() >= minRapidity_ && momentum.eta() <= maxRapidity_ && sqrt(vertex.perp2()) <= tip_ && @@ -151,7 +161,8 @@ class CosmicTrackingParticleSelector { bool chargedOnly_; std::vector pdgId_; container selected_; - + + mutable edm::Handle simHitsTPAssoc; }; diff --git a/CommonTools/RecoAlgos/interface/TrackingParticleSelector.h b/CommonTools/RecoAlgos/interface/TrackingParticleSelector.h index 7b3fefa9eb769..cf489fc557c72 100755 --- a/CommonTools/RecoAlgos/interface/TrackingParticleSelector.h +++ b/CommonTools/RecoAlgos/interface/TrackingParticleSelector.h @@ -1,104 +1 @@ -#ifndef RecoSelectors_TrackingParticleSelector_h -#define RecoSelectors_TrackingParticleSelector_h -/* \class TrackingParticleSelector - * - * \author Giuseppe Cerati, INFN - * - * $Date: 2013/06/24 12:25:14 $ - * $Revision: 1.7 $ - * - */ -#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -class TrackingParticleSelector { - -public: - TrackingParticleSelector(){} - TrackingParticleSelector ( double ptMin,double minRapidity,double maxRapidity, - double tip,double lip,int minHit, bool signalOnly, bool chargedOnly, bool stableOnly, - std::vector pdgId = std::vector()) : - ptMin_( ptMin ), minRapidity_( minRapidity ), maxRapidity_( maxRapidity ), - tip_( tip ), lip_( lip ), minHit_( minHit ), signalOnly_(signalOnly), chargedOnly_(chargedOnly), stableOnly_(stableOnly), pdgId_( pdgId ) { } - - /// Operator() performs the selection: e.g. if (tPSelector(tp)) {...} - bool operator()( const TrackingParticle & tp ) const { - if (chargedOnly_ && tp.charge()==0) return false;//select only if charge!=0 - bool testId = false; - unsigned int idSize = pdgId_.size(); - if (idSize==0) testId = true; - else for (unsigned int it=0;it!=idSize;++it){ - if (tp.pdgId()==pdgId_[it]) testId = true; - } - bool signal = true; - if (signalOnly_) signal = (tp.eventId().bunchCrossing()== 0 && tp.eventId().event() == 0); // signal only means no PU particles - // select only stable particles - bool stable = true; - if (stableOnly_) { - if (!signal) { - stable = false; // we are not interested into PU particles among the stable ones - } else { - for( TrackingParticle::genp_iterator j = tp.genParticle_begin(); j != tp.genParticle_end(); ++ j ) { - if (j->get()==0 || j->get()->status() != 1) { - stable = 0; break; - } - } - // test for remaining unstabled due to lack of genparticle pointer - if(stable == 1 && tp.status() == -99 && - (fabs(tp.pdgId()) != 11 && fabs(tp.pdgId()) != 13 && fabs(tp.pdgId()) != 211 && - fabs(tp.pdgId()) != 321 && fabs(tp.pdgId()) != 2212 && fabs(tp.pdgId()) != 3112 && - fabs(tp.pdgId()) != 3222 && fabs(tp.pdgId()) != 3312 && fabs(tp.pdgId()) != 3334)) stable = 0; - } - } - return ( - tp.numberOfTrackerLayers() >= minHit_ && - sqrt(tp.momentum().perp2()) >= ptMin_ && - tp.momentum().eta() >= minRapidity_ && tp.momentum().eta() <= maxRapidity_ && - sqrt(tp.vertex().perp2()) <= tip_ && - fabs(tp.vertex().z()) <= lip_ && - testId && - signal && - stable - ); - } - -private: - double ptMin_; - double minRapidity_; - double maxRapidity_; - double tip_; - double lip_; - int minHit_; - bool signalOnly_; - bool chargedOnly_; - bool stableOnly_; - std::vector pdgId_; - -}; - -#include "CommonTools/UtilAlgos/interface/ParameterAdapter.h" - -namespace reco { - namespace modules { - - template<> - struct ParameterAdapter { - static TrackingParticleSelector make( const edm::ParameterSet & cfg ) { - return TrackingParticleSelector( - cfg.getParameter( "ptMin" ), - cfg.getParameter( "minRapidity" ), - cfg.getParameter( "maxRapidity" ), - cfg.getParameter( "tip" ), - cfg.getParameter( "lip" ), - cfg.getParameter( "minHit" ), - cfg.getParameter( "signalOnly" ), - cfg.getParameter( "chargedOnly" ), - cfg.getParameter( "stableOnly" ), - cfg.getParameter >( "pdgId" )); - } - }; - - } -} - -#endif +#error TrackingParticleSelector has been moved to SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h. Please update your code. diff --git a/CommonTools/RecoAlgos/plugins/TrackingParticleRefSelector.cc b/CommonTools/RecoAlgos/plugins/TrackingParticleRefSelector.cc index ce9e73e6a1330..90bfe14c2e1cb 100755 --- a/CommonTools/RecoAlgos/plugins/TrackingParticleRefSelector.cc +++ b/CommonTools/RecoAlgos/plugins/TrackingParticleRefSelector.cc @@ -10,7 +10,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" namespace reco { diff --git a/CommonTools/RecoAlgos/plugins/TrackingParticleSelector.cc b/CommonTools/RecoAlgos/plugins/TrackingParticleSelector.cc index 8b5db065215c1..06c979369d9c8 100755 --- a/CommonTools/RecoAlgos/plugins/TrackingParticleSelector.cc +++ b/CommonTools/RecoAlgos/plugins/TrackingParticleSelector.cc @@ -10,7 +10,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "CommonTools/UtilAlgos/interface/SingleObjectSelector.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" namespace reco { namespace modules { diff --git a/CondTools/Ecal/python/EBAlign_2011_rereco.db b/CondTools/Ecal/python/EBAlign_2011_rereco.db new file mode 100644 index 0000000000000..a80a989f1b178 Binary files /dev/null and b/CondTools/Ecal/python/EBAlign_2011_rereco.db differ diff --git a/CondTools/Ecal/python/EEAlign_2011_rereco.db b/CondTools/Ecal/python/EEAlign_2011_rereco.db new file mode 100644 index 0000000000000..18f2141ecfb46 Binary files /dev/null and b/CondTools/Ecal/python/EEAlign_2011_rereco.db differ diff --git a/CondTools/Ecal/python/EcalTrivialAlignment_cfi.py b/CondTools/Ecal/python/EcalTrivialAlignment_cfi.py index a8b79bc6a22a3..5ee3063e98719 100644 --- a/CondTools/Ecal/python/EcalTrivialAlignment_cfi.py +++ b/CondTools/Ecal/python/EcalTrivialAlignment_cfi.py @@ -2,9 +2,14 @@ EcalTrivialConditionRetriever = cms.ESSource("EcalTrivialConditionRetriever", getEEAlignmentFromFile = cms.untracked.bool(True), - EEAlignmentFile = cms.untracked.string('CalibCalorimetry/EcalTrivialCondModules/data/EEAlignment_2010.txt'), + EEAlignmentFile = cms.untracked.string('CalibCalorimetry/EcalTrivialCondModules/data/myEEAlignment_2011.txt'), getESAlignmentFromFile = cms.untracked.bool(True), ESAlignmentFile = cms.untracked.string('CalibCalorimetry/EcalTrivialCondModules/data/ESAlignment_2010.txt'), getEBAlignmentFromFile = cms.untracked.bool(True), - EBAlignmentFile = cms.untracked.string('CalibCalorimetry/EcalTrivialCondModules/data/EBAlignment_2010.txt') + EBAlignmentFile = cms.untracked.string('CalibCalorimetry/EcalTrivialCondModules/data/myEBAlignment_2011.txt'), + producedEcalClusterLocalContCorrParameters = cms.untracked.bool(True), + producedEcalClusterCrackCorrParameters = cms.untracked.bool(True), + producedEcalClusterEnergyCorrectionParameters = cms.untracked.bool(True), + producedEcalClusterEnergyUncertaintyParameters = cms.untracked.bool(True), + producedEcalClusterEnergyCorrectionObjectSpecificParameters = cms.untracked.bool(True) ) diff --git a/CondTools/Ecal/python/copyFileAlignEB_cfg.py b/CondTools/Ecal/python/copyFileAlignEB_cfg.py index 66418bef8f98d..c2e554d5b8c2a 100644 --- a/CondTools/Ecal/python/copyFileAlignEB_cfg.py +++ b/CondTools/Ecal/python/copyFileAlignEB_cfg.py @@ -6,7 +6,7 @@ process.load("CondCore.DBCommon.CondDBCommon_cfi") #process.CondDBCommon.connect = 'oracle://cms_orcoff_prep/CMS_COND_ECAL' #process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb/' -process.CondDBCommon.connect = 'sqlite_file:EBAlign_2010.db' +process.CondDBCommon.connect = 'sqlite_file:EBAlign_2011_rereco.db' process.MessageLogger = cms.Service("MessageLogger", debugModules = cms.untracked.vstring('*'), @@ -26,7 +26,7 @@ toPut = cms.VPSet( cms.PSet( record = cms.string('EBAlignmentRcd'), - tag = cms.string('EBAlignment_measured_v01_offline') + tag = cms.string('EBAlignment_measured_v08_offline') ) ) ) diff --git a/CondTools/Ecal/python/copyFileAlignEE_cfg.py b/CondTools/Ecal/python/copyFileAlignEE_cfg.py index a68bc7ac079af..1a38ee7541a62 100644 --- a/CondTools/Ecal/python/copyFileAlignEE_cfg.py +++ b/CondTools/Ecal/python/copyFileAlignEE_cfg.py @@ -6,7 +6,7 @@ process.load("CondCore.DBCommon.CondDBCommon_cfi") #process.CondDBCommon.connect = 'oracle://cms_orcoff_prep/CMS_COND_ECAL' #process.CondDBCommon.DBParameters.authenticationPath = '/afs/cern.ch/cms/DB/conddb/' -process.CondDBCommon.connect = 'sqlite_file:EEAlign_2010.db' +process.CondDBCommon.connect = 'sqlite_file:EEAlign_2011_rereco.db' process.MessageLogger = cms.Service("MessageLogger", debugModules = cms.untracked.vstring('*'), @@ -26,7 +26,7 @@ toPut = cms.VPSet( cms.PSet( record = cms.string('EEAlignmentRcd'), - tag = cms.string('EEAlignment_measured_v01_offline') + tag = cms.string('EEAlignment_measured_v08_offline') ) ) ) diff --git a/Configuration/Applications/python/ConfigBuilder.py b/Configuration/Applications/python/ConfigBuilder.py index 4fad80bb3387f..65efebdb2417b 100644 --- a/Configuration/Applications/python/ConfigBuilder.py +++ b/Configuration/Applications/python/ConfigBuilder.py @@ -1361,6 +1361,9 @@ def prepare_DIGI(self, sequence = None): if self._options.himix==True: self.loadAndRemember("SimGeneral/MixingModule/himixDIGI_cff") + if sequence == 'pdigi_valid': + self.executeAndRemember("process.mix.digitizers = cms.PSet(process.theDigitizersValid)") + self.scheduleSequence(sequence.split('.')[-1],'digitisation_step') return @@ -1655,6 +1658,7 @@ def prepare_VALIDATION(self, sequence = 'validation'): self.executeAndRemember("process.mix.playback = True") self.executeAndRemember("process.mix.digitizers = cms.PSet()") self.executeAndRemember("for a in process.aliases: delattr(process, a)") + self._options.customisation_file+=",SimGeneral/MixingModule/fullMixCustomize_cff.setCrossingFrameOn" if hasattr(self.process,"genstepfilter") and len(self.process.genstepfilter.triggerConditions): #will get in the schedule, smoothly @@ -1729,7 +1733,7 @@ def renameInputTagsInSequence(self,sequence,oldT="rawDataCollector",newT="rawDat loadMe='from PhysicsTools.PatAlgos.tools.helpers import massSearchReplaceAnyInputTag' if not loadMe in self.additionalCommands: self.additionalCommands.append(loadMe) - self.additionalCommands.append('massSearchReplaceAnyInputTag(process.%s,"%s","%s",False)'%(sequence,oldT,newT)) + self.additionalCommands.append('massSearchReplaceAnyInputTag(process.%s,"%s","%s",False,True)'%(sequence,oldT,newT)) #change the process name used to address HLT results in any sequence def renameHLTprocessInSequence(self,sequence,proc=None,HLTprocess='HLT'): diff --git a/Configuration/DataProcessing/python/Impl/cosmics.py b/Configuration/DataProcessing/python/Impl/cosmics.py index 80c6b6d4cc83b..b4b910d149e9d 100644 --- a/Configuration/DataProcessing/python/Impl/cosmics.py +++ b/Configuration/DataProcessing/python/Impl/cosmics.py @@ -51,3 +51,16 @@ def expressProcessing(self, globalTag, **args): customiseCosmicData(process) return process + + + def alcaHarvesting(self, globalTag, datasetName, **args): + """ + _alcaHarvesting_ + + Proton collisions data taking AlCa Harvesting + + """ + if not 'skims' in args: + args['skims']=['SiStripQuality'] + + return Reco.alcaHarvesting(self, globalTag, datasetName, **args) diff --git a/Configuration/DataProcessing/python/Reco.py b/Configuration/DataProcessing/python/Reco.py index 048ba73126371..50a328e1d43d0 100644 --- a/Configuration/DataProcessing/python/Reco.py +++ b/Configuration/DataProcessing/python/Reco.py @@ -71,14 +71,12 @@ def expressProcessing(self, globalTag, **args): options.step = 'RAW2DIGI,L1Reco,RECO'+step+',DQM'+dqmStep+',ENDJOB' dictIO(options,args) options.conditions = globalTag - + options.filein = 'tobeoverwritten.xyz' + if 'inputSource' in args: + options.fileType = args['inputSource'] process = cms.Process('RECO') - cb = ConfigBuilder(options, process = process, with_output = True) + cb = ConfigBuilder(options, process = process, with_output = True, with_input = True) - # Input source - process.source = cms.Source("NewEventStreamFileReader", - fileNames = cms.untracked.vstring() - ) cb.prepare() addMonitoring(process) diff --git a/Configuration/DataProcessing/test/BuildFile.xml b/Configuration/DataProcessing/test/BuildFile.xml new file mode 100644 index 0000000000000..76a36318ef43d --- /dev/null +++ b/Configuration/DataProcessing/test/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Configuration/DataProcessing/test/RunAlcaHarvesting.py b/Configuration/DataProcessing/test/RunAlcaHarvesting.py index f4a0d5a696e23..bf5cb37b0b601 100644 --- a/Configuration/DataProcessing/test/RunAlcaHarvesting.py +++ b/Configuration/DataProcessing/test/RunAlcaHarvesting.py @@ -22,6 +22,8 @@ def __init__(self): # self.run = None self.globalTag = None self.inputLFN = None + self.workflows = None + def __call__(self): if self.scenario == None: @@ -59,7 +61,10 @@ def __call__(self): try: - process = scenario.alcaHarvesting(self.globalTag, self.dataset) + kwds = {} + if not self.workflows is None: + kwds['skims'] = self.workflows + process = scenario.alcaHarvesting(self.globalTag, self.dataset, **kwds) except Exception, ex: msg = "Error creating AlcaHarvesting config:\n" @@ -79,7 +84,7 @@ def __call__(self): if __name__ == '__main__': - valid = ["scenario=", "global-tag=", "lfn=", "dataset="] + valid = ["scenario=", "global-tag=", "lfn=", "dataset=","workflows="] usage = """RunAlcaHarvesting.py """ try: opts, args = getopt.getopt(sys.argv[1:], "", valid) @@ -100,5 +105,7 @@ def __call__(self): harvester.inputLFN = arg if opt == "--dataset" : harvester.dataset = arg + if opt == "--workflows": + harvester.workflows = [ x for x in arg.split(',') if len(x) > 0 ] harvester() diff --git a/Configuration/DataProcessing/test/RunExpressProcessing.py b/Configuration/DataProcessing/test/RunExpressProcessing.py index 8eeddf9e574f7..a8e679bf75ca1 100644 --- a/Configuration/DataProcessing/test/RunExpressProcessing.py +++ b/Configuration/DataProcessing/test/RunExpressProcessing.py @@ -26,13 +26,14 @@ def __init__(self): self.noOutput = False self.globalTag = None self.inputLFN = None + self.alcaRecos = None def __call__(self): if self.scenario == None: msg = "No --scenario specified" raise RuntimeError, msg if self.globalTag == None: - msg = "No --globaltag specified" + msg = "No --global-tag specified" raise RuntimeError, msg if self.inputLFN == None: msg = "No --lfn specified" @@ -67,15 +68,26 @@ def __call__(self): print "Configuring to Write out Dqm..." try: + kwds = {} + if self.noOutput: # get config without any output - process = scenario.expressProcessing(globalTag = self.globalTag, writeTiers = []) + kwds['writeTiers'] = [] + elif len(dataTiers) > 0: # get config with specified output - process = scenario.expressProcessing(globalTag = self.globalTag, writeTiers = dataTiers) - else: - # use default output data tiers - process = scenario.expressProcessing(self.globalTag) + kwds['writeTiers'] = dataTiers + + # if none of the above use default output data tiers + + + if not self.alcaRecos is None: + # if skims specified from command line than overwrite the defaults + kwds['skims'] = self.alcaRecos + + + process = scenario.expressProcessing(self.globalTag, **kwds) + except NotImplementedError, ex: print "This scenario does not support Express Processing:\n" return @@ -100,7 +112,7 @@ def __call__(self): if __name__ == '__main__': valid = ["scenario=", "raw", "reco", "fevt", "alca", "dqm", "no-output", - "global-tag=", "lfn="] + "global-tag=", "lfn=", 'alcaRecos='] usage = \ """ RunExpressProcessing.py @@ -115,7 +127,7 @@ def __call__(self): --no-output (create config with no output, overrides other settings) --global-tag=GlobalTag --lfn=/store/input/lfn - + --alcaRecos=commasepratedlist Example: python RunExpressProcessing.py --scenario cosmics --global-tag GLOBALTAG::ALL --lfn /store/whatever --fevt --alca --dqm @@ -150,5 +162,7 @@ def __call__(self): expressinator.globalTag = arg if opt == "--lfn" : expressinator.inputLFN = arg + if opt == "--alcaRecos": + expressinator.alcaRecos = [ x for x in arg.split('+') if len(x) > 0 ] expressinator() diff --git a/Configuration/DataProcessing/test/TestCfg.cpp b/Configuration/DataProcessing/test/TestCfg.cpp new file mode 100644 index 0000000000000..b2991bd18ae57 --- /dev/null +++ b/Configuration/DataProcessing/test/TestCfg.cpp @@ -0,0 +1,3 @@ +#include "FWCore/Utilities/interface/TestHelper.h" + +RUNTEST() diff --git a/Configuration/DataProcessing/test/run_CfgTest.sh b/Configuration/DataProcessing/test/run_CfgTest.sh new file mode 100755 index 0000000000000..eddd871cc5362 --- /dev/null +++ b/Configuration/DataProcessing/test/run_CfgTest.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Test suite for various ConfigDP scenarios +# run using: scram build runtest +# feel free to contribute with your favourite configuration + + +# Pass in name and status +function die { echo $1: status $2 ; exit $2; } + +function runTest { echo $1 ; python $1 || die "Failure for configuration: $1" $?; } + + +INPUT=${LOCAL_TEST_DIR}/RunExpressProcessing.py + +runTest "${INPUT} --scenario cosmics --global-tag GLOBALTAG::ALL --lfn /store/whatever --fevt --alca --dqm" +runTest "${INPUT} --scenario pp --global-tag GLOBALTAG::ALL --lfn /store/whatever --fevt --alca --dqm" +runTest "${INPUT} --scenario HeavyIons --global-tag GLOBALTAG::ALL --lfn /store/whatever --fevt --alca --dqm" + + +INPUT=${LOCAL_TEST_DIR}/RunRepack.py + +runTest "${INPUT} --select-events HLT:path1,HLT:path2 --lfn /store/whatever" + + +INPUT=${LOCAL_TEST_DIR}/RunPromptReco.py + +runTest "${INPUT} --scenario=cosmics --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=pp --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=HeavyIons --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=AlCaLumiPixels --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=AlCaP0 --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +#runTest "${INPUT} --scenario=AlCaPhiSymEcal --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=AlCaTestEnable --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" +runTest "${INPUT} --scenario=hcalnzs --reco --aod --alcareco --dqm --global-tag GLOBALTAG::ALL --lfn=/store/whatever" + +INPUT=${LOCAL_TEST_DIR}/RunAlcaSkimming.py + +runTest "${INPUT} --scenario pp --lfn=/store/whatever --global-tag GLOBALTAG::ALL --skims SiStripCalZeroBias+SiStripCalMinBias+TkAlMinBias+PromptCalibProd" +runTest "${INPUT} --scenario cosmics --lfn /store/whatever --global-tag GLOBALTAG::ALL --skims SiStripCalZeroBias+SiStripPCLHistos" +runTest "${INPUT} --scenario HeavyIons --lfn=/store/whatever --global-tag GLOBALTAG::ALL --skims SiStripCalZeroBias+SiStripCalMinBias+TkAlMinBiasHI+PromptCalibProd" +runTest "${INPUT} --scenario AlCaLumiPixels --lfn /store/whatever --global-tag GLOBALTAG::ALL --skims LumiPixels" +runTest "${INPUT} --scenario AlCaP0 --lfn /store/whatever --global-tag GLOBALTAG::ALL --skims EcalCalPi0Calib" +runTest "${INPUT} --scenario AlCaPhiSymEcal --lfn /store/whatever --global-tag GLOBALTAG::ALL --skims EcalCalPhiSym" + + +INPUT=${LOCAL_TEST_DIR}/RunAlcaHarvesting.py + +runTest "${INPUT} --scenario pp --lfn /store/whatever --dataset /A/B/C --global-tag GLOBALTAG::ALL --workflows=BeamSpotByRun,BeamSpotByLumi,SiStripQuality" +runTest "${INPUT} --scenario cosmics --lfn /store/whatever --dataset /A/B/C --global-tag GLOBALTAG::ALL --workflows=SiStripQuality" +runTest "${INPUT} --scenario HeavyIons --lfn /store/whatever --dataset /A/B/C --global-tag GLOBALTAG::ALL --workflows=BeamSpotByRun,BeamSpotByLumi,SiStripQuality" + +INPUT=${LOCAL_TEST_DIR}/RunDQMHarvesting.py + +runTest "${INPUT} --scenario pp --lfn /store/whatever --run 12345 --dataset /A/B/C --global-tag GLOBALTAG::ALL" +runTest "${INPUT} --scenario cosmics --lfn /store/whatever --run 12345 --dataset /A/B/C --global-tag GLOBALTAG::ALL" +runTest "${INPUT} --scenario AlCaLumiPixels --lfn /store/whatever --run 12345 --dataset /A/B/C --global-tag GLOBALTAG::ALL" +runTest "${INPUT} --scenario AlCaP0 --lfn /store/whatever --run 12345 --dataset /A/B/C --global-tag GLOBALTAG::ALL" +runTest "${INPUT} --scenario AlCaPhiSymEcal --lfn /store/whatever --run 12345 --dataset /A/B/C --global-tag GLOBALTAG::ALL" diff --git a/Configuration/EventContent/python/EventContentCosmics_cff.py b/Configuration/EventContent/python/EventContentCosmics_cff.py index 794548ae4b7f0..ad3cf788cc856 100644 --- a/Configuration/EventContent/python/EventContentCosmics_cff.py +++ b/Configuration/EventContent/python/EventContentCosmics_cff.py @@ -325,5 +325,6 @@ ALCARECOEventContent.outputCommands.extend(OutALCARECOTkAlBeamHalo_noDrop.outputCommands) ALCARECOEventContent.outputCommands.extend(OutALCARECOMuAlBeamHaloOverlaps_noDrop.outputCommands) ALCARECOEventContent.outputCommands.extend(OutALCARECOMuAlBeamHalo_noDrop.outputCommands) +ALCARECOEventContent.outputCommands.extend(OutALCARECOSiStripPCLHistos_noDrop.outputCommands) ALCARECOEventContent.outputCommands.append('drop *_MEtoEDMConverter_*_*') diff --git a/Configuration/EventContent/python/EventContent_cff.py b/Configuration/EventContent/python/EventContent_cff.py index dfccc4865c3a5..4aa7f32491047 100644 --- a/Configuration/EventContent/python/EventContent_cff.py +++ b/Configuration/EventContent/python/EventContent_cff.py @@ -8,10 +8,10 @@ # LHE: # include pure LHE production # -# RAW , RECO, AOD: +# RAW , RECO, AOD: # include reconstruction content # -# RAWSIM, RECOSIM, AODSIM: +# RAWSIM, RECOSIM, AODSIM: # include reconstruction and simulation # # GENRAW @@ -24,7 +24,7 @@ # # RAWSIMHLT (RAWSIM + HLTDEBUG) # -# RAWRECOSIMHLT, RAWRECODEBUGHLT +# RAWRECOSIMHLT, RAWRECODEBUGHLT # # FEVT (RAW+RECO), FEVTSIM (RAWSIM+RECOSIM), FEVTDEBUG (FEVTSIM+ALL_SIM_INFO), FEVTDEBUGHLT (FEVTDEBUG+HLTDEBUG) # @@ -57,7 +57,7 @@ from CommonTools.ParticleFlow.EITopPAG_EventContent_cff import EITopPAGEventContent # raw2digi that are already the final RECO/AOD products -from EventFilter.ScalersRawToDigi.Scalers_EventContent_cff import * +from EventFilter.ScalersRawToDigi.Scalers_EventContent_cff import * #DigiToRaw content from EventFilter.Configuration.DigiToRaw_EventContent_cff import * @@ -108,7 +108,7 @@ # # LHEEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('drop *'), + outputCommands = cms.untracked.vstring('drop *'), splitLevel = cms.untracked.int32(0), eventAutoFlushCompressedSize=cms.untracked.int32(5*1024*1024) ) @@ -118,7 +118,7 @@ # # RAWEventContent = cms.PSet( - outputCommands = cms.untracked.vstring('drop *', + outputCommands = cms.untracked.vstring('drop *', 'keep FEDRawDataCollection_rawDataCollector_*_*', 'keep FEDRawDataCollection_source_*_*'), splitLevel = cms.untracked.int32(0), @@ -132,7 +132,7 @@ RECOEventContent = cms.PSet( outputCommands = cms.untracked.vstring('drop *'), splitLevel = cms.untracked.int32(0), - eventAutoFlushCompressedSize=cms.untracked.int32(5*1024*1024) + eventAutoFlushCompressedSize=cms.untracked.int32(5*1024*1024) ) # # @@ -557,7 +557,7 @@ AODSIMEventContent.outputCommands.extend(SimGeneralAOD.outputCommands) AODSIMEventContent.outputCommands.extend(MEtoEDMConverterAOD.outputCommands) -RAWRECOSIMHLTEventContent.outputCommands.extend(RAWRECOEventContent.outputCommands) +RAWRECOSIMHLTEventContent.outputCommands.extend(RAWRECOEventContent.outputCommands) RAWRECOSIMHLTEventContent.outputCommands.extend(GeneratorInterfaceRECO.outputCommands) RAWRECOSIMHLTEventContent.outputCommands.extend(RecoGenMETRECO.outputCommands) RAWRECOSIMHLTEventContent.outputCommands.extend(RecoGenJetsRECO.outputCommands) @@ -567,9 +567,9 @@ RAWRECOSIMHLTEventContent.outputCommands.extend(SimCalorimetryRECO.outputCommands) RAWRECOSIMHLTEventContent.outputCommands.extend(SimGeneralRECO.outputCommands) RAWRECOSIMHLTEventContent.outputCommands.extend(MEtoEDMConverterRECO.outputCommands) -RAWRECOSIMHLTEventContent.outputCommands.extend(HLTDebugRAW.outputCommands) +RAWRECOSIMHLTEventContent.outputCommands.extend(HLTDebugRAW.outputCommands) -RAWRECODEBUGHLTEventContent.outputCommands.extend(RAWRECOSIMHLTEventContent.outputCommands) +RAWRECODEBUGHLTEventContent.outputCommands.extend(RAWRECOSIMHLTEventContent.outputCommands) RAWRECODEBUGHLTEventContent.outputCommands.extend(SimGeneralFEVTDEBUG.outputCommands) RAWRECODEBUGHLTEventContent.outputCommands.extend(SimTrackerDEBUG.outputCommands) @@ -644,6 +644,7 @@ FEVTSIMEventContent.outputCommands.extend(SimGeneralRECO.outputCommands) FEVTSIMEventContent.outputCommands.extend(MEtoEDMConverterRECO.outputCommands) FEVTSIMEventContent.outputCommands.extend(EvtScalersRECO.outputCommands) +FEVTSIMEventContent.outputCommands.extend(CommonEventContent.outputCommands) FEVTSIMEventContent.outputCommands.extend(EITopPAGEventContent.outputCommands) RAWDEBUGEventContent.outputCommands.extend(RAWSIMEventContent.outputCommands) RAWDEBUGEventContent.outputCommands.extend(SimTrackerDEBUG.outputCommands) diff --git a/Configuration/Generator/python/ADDMonoJet_13TeV_d3MD3_cfi.py b/Configuration/Generator/python/ADDMonoJet_13TeV_d3MD3_cfi.py new file mode 100644 index 0000000000000..b8f915416b0f7 --- /dev/null +++ b/Configuration/Generator/python/ADDMonoJet_13TeV_d3MD3_cfi.py @@ -0,0 +1,30 @@ +import FWCore.ParameterSet.Config as cms +generator = cms.EDFilter("Pythia8GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythia8_unparticle = cms.vstring( + 'Tune:pp = 5', + 'PDF:pSet = 5', + 'ExtraDimensionsLED:monojet = on', + 'ExtraDimensionsLED:CutOffmode = 1', + 'ExtraDimensionsLED:t = 0.5', + 'ExtraDimensionsLED:n = 3', + 'ExtraDimensionsLED:MD = 3000.', + '5000039:m0 = 1200.', + '5000039:mWidth = 1000.', + '5000039:mMin = 1.', + '5000039:mMax = 13990.', + 'PhaseSpace:pTHatMin = 80.', + 'PartonLevel:MI = on', + 'PartonLevel:ISR = on', + 'PartonLevel:FSR = on', + 'ParticleDecays:limitTau0 = on', + 'ParticleDecays:tauMax = 10' + ), + parameterSets = cms.vstring('pythia8_unparticle') + ) +) diff --git a/Configuration/Generator/python/BeamHalo_13TeV_cfi.py b/Configuration/Generator/python/BeamHalo_13TeV_cfi.py new file mode 100644 index 0000000000000..84cefae9c78e1 --- /dev/null +++ b/Configuration/Generator/python/BeamHalo_13TeV_cfi.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +generator = cms.EDProducer("BeamHaloProducer", + GENMOD = cms.untracked.int32(1), + LHC_B1 = cms.untracked.int32(1), + LHC_B2 = cms.untracked.int32(1), + IW_MUO = cms.untracked.int32(1), + IW_HAD = cms.untracked.int32(0), + EG_MIN = cms.untracked.double(10.), + EG_MAX = cms.untracked.double(13000.), + shift_bx = cms.untracked.int32(0), ## e.g. -2, -1 for previous bunch-crossing + BXNS = cms.untracked.double(25.) ## time between 2 bx s, in ns +) diff --git a/Configuration/Generator/python/H130GGgluonfusion_13TeV_cfi.py b/Configuration/Generator/python/H130GGgluonfusion_13TeV_cfi.py new file mode 100644 index 0000000000000..ec76fec102909 --- /dev/null +++ b/Configuration/Generator/python/H130GGgluonfusion_13TeV_cfi.py @@ -0,0 +1,49 @@ +# The following comments couldn't be translated into the new config version: + +# Higgs decays + +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(1), + # put here the efficiency of your filter (1. if no filter) + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + # put here the cross section of your process (in pb) + crossSection = cms.untracked.double(0.05), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(3), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('PMAS(25,1)=130.0 !mass of Higgs', + 'MSEL=0 ! user selection for process', + 'MSUB(102)=1 !ggH', + 'MSUB(123)=0 !ZZ fusion to H', + 'MSUB(124)=0 !WW fusion to H', + 'MSUB(24)=0 !ZH production', + 'MSUB(26)=0 !WH production', + 'MSUB(121)=0 !gg to ttH', + 'MSUB(122)=0 !qq to ttH', + 'MDME(210,1)=0 !Higgs decay into dd', + 'MDME(211,1)=0 !Higgs decay into uu', + 'MDME(212,1)=0 !Higgs decay into ss', + 'MDME(213,1)=0 !Higgs decay into cc', + 'MDME(214,1)=0 !Higgs decay into bb', + 'MDME(215,1)=0 !Higgs decay into tt', + 'MDME(216,1)=0 !Higgs decay into', + 'MDME(217,1)=0 !Higgs decay into Higgs decay', + 'MDME(218,1)=0 !Higgs decay into e nu e', + 'MDME(219,1)=0 !Higgs decay into mu nu mu', + 'MDME(220,1)=0 !Higgs decay into tau nu tau', + 'MDME(221,1)=0 !Higgs decay into Higgs decay', + 'MDME(222,1)=0 !Higgs decay into g g', + 'MDME(223,1)=1 !Higgs decay into gam gam', + 'MDME(224,1)=0 !Higgs decay into gam Z', + 'MDME(225,1)=0 !Higgs decay into Z Z', + 'MDME(226,1)=0 !Higgs decay into W W'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/H200ChargedTaus_Tauola_13TeV_cfi.py b/Configuration/Generator/python/H200ChargedTaus_Tauola_13TeV_cfi.py new file mode 100644 index 0000000000000..72c8aaf8ccf0a --- /dev/null +++ b/Configuration/Generator/python/H200ChargedTaus_Tauola_13TeV_cfi.py @@ -0,0 +1,81 @@ +# The following comments couldn't be translated into the new config version: + +# "TAUO = 0 0 ! Registered by Alexandre.Nikitenko@cern.ch", + +# higgs decays + +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 ! user control', + 'MSUB(401) = 1 ! gg->tbH+ Registered by Alexandre.Nikitenko@cern.ch', + 'MSUB(402) = 1 ! qq->tbH+ Registered by Alexandre.Nikitenko@cern.ch', + 'IMSS(1)= 1 ! MSSM ', + 'RMSS(5) = 30. ! TANBETA', + 'RMSS(19) = 200. ! (D=850.) m_A', + 'MDME(503,1)=0 !Higgs(H+) decay into dbar u', + 'MDME(504,1)=0 !Higgs(H+) decay into sbar c', + 'MDME(505,1)=0 !Higgs(H+) decay into bbar t', + 'MDME(506,1)=0 !Higgs(H+) decay into b bar t', + 'MDME(507,1)=0 !Higgs(H+) decay into e+ nu_e', + 'MDME(508,1)=0 !Higgs(H+) decay into mu+ nu_mu', + 'MDME(509,1)=1 !Higgs(H+) decay into tau+ nu_tau', + 'MDME(510,1)=0 !Higgs(H+) decay into tau prime+ nu_tau', + 'MDME(511,1)=0 !Higgs(H+) decay into W+ h0', + 'MDME(512,1)=0 !Higgs(H+) decay into ~chi_10 ~chi_1+', + 'MDME(513,1)=0 !Higgs(H+) decay into ~chi_10 ~chi_2+', + 'MDME(514,1)=0 !Higgs(H+) decay into ~chi_20 ~chi_1+', + 'MDME(515,1)=0 !Higgs(H+) decay into ~chi_20 ~chi_2+', + 'MDME(516,1)=0 !Higgs(H+) decay into ~chi_30 ~chi_1+', + 'MDME(517,1)=0 !Higgs(H+) decay into ~chi_30 ~chi_2+', + 'MDME(518,1)=0 !Higgs(H+) decay into ~chi_40 ~chi_1+', + 'MDME(519,1)=0 !Higgs(H+) decay into ~chi_40 ~chi_2+', + 'MDME(520,1)=0 !Higgs(H+) decay into ~t_1 ~b_1bar', + 'MDME(521,1)=0 !Higgs(H+) decay into ~t_2 ~b_1bar', + 'MDME(522,1)=0 !Higgs(H+) decay into ~t_1 ~b_2bar', + 'MDME(523,1)=0 !Higgs(H+) decay into ~t_2 ~b_2bar', + 'MDME(524,1)=0 !Higgs(H+) decay into ~d_Lbar ~u_L', + 'MDME(525,1)=0 !Higgs(H+) decay into ~s_Lbar ~c_L', + 'MDME(526,1)=0 !Higgs(H+) decay into ~e_L+ ~nu_eL', + 'MDME(527,1)=0 !Higgs(H+) decay into ~mu_L+ ~nu_muL', + 'MDME(528,1)=0 !Higgs(H+) decay into ~tau_1+ ~nu_tauL', + 'MDME(529,1)=0 !Higgs(H+) decay into ~tau_2+ ~nu_tauL', + 'MDME(89,1) = 0 ! no tau->electron', + 'MDME(90,1) = 0 ! no tau->muon'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters', + 'pythiaMSSMmhmax'), + pythiaMSSMmhmax = cms.vstring('RMSS(2)= 200. ! SU(2) gaugino mass ', + 'RMSS(3)= 800. ! SU(3) (gluino) mass ', + 'RMSS(4)= 200. ! higgsino mass parameter', + 'RMSS(6)= 1000. ! left slepton mass', + 'RMSS(7)= 1000. ! right slepton mass', + 'RMSS(8)= 1000. ! right slepton mass', + 'RMSS(9)= 1000. ! right squark mass', + 'RMSS(10)= 1000. ! left sq mass for 3th gen/heaviest stop mass', + 'RMSS(11)= 1000. ! right sbottom mass/lightest sbotoom mass', + 'RMSS(12)= 1000. ! right stop mass/lightest stop mass', + 'RMSS(13)= 1000. ! left stau mass', + 'RMSS(14)= 1000. ! right stau mass', + 'RMSS(15)= 2449. ! Ab', + 'RMSS(16)= 2449. ! At', + 'RMSS(17)= 2449. ! Atau') + ) +) diff --git a/Configuration/Generator/python/Hijing_PPb_MinimumBias_cfi.py b/Configuration/Generator/python/Hijing_PPb_MinimumBias_cfi.py new file mode 100644 index 0000000000000..948dc444f3ed0 --- /dev/null +++ b/Configuration/Generator/python/Hijing_PPb_MinimumBias_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +generator = cms.EDFilter("HijingGeneratorFilter", + rotateEventPlane = cms.bool(True), + frame = cms.string('CMS '), + targ = cms.string('P '), + izp = cms.int32(82), + bMin = cms.double(0), + izt = cms.int32(1), + proj = cms.string('A '), + comEnergy = cms.double(5023.0), + iat = cms.int32(1), + bMax = cms.double(15), + iap = cms.int32(208) + ) + +configurationMetadata = cms.untracked.PSet( + version = cms.untracked.string('$Revision: 1.3 $'), + annotation = cms.untracked.string('HIJING generator'), + name = cms.untracked.string('$Source: /local/reps/CMSSW/CMSSW/Configuration/GenProduction/python/HI/Hijing_PPb_MinimumBias_cfi.py,v $') + ) + diff --git a/Configuration/Generator/python/JpsiMM_13TeV_cfi.py b/Configuration/Generator/python/JpsiMM_13TeV_cfi.py new file mode 100644 index 0000000000000..98f9d2e4c48c3 --- /dev/null +++ b/Configuration/Generator/python/JpsiMM_13TeV_cfi.py @@ -0,0 +1,86 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(0.138), + pythiaHepMCVerbosity = cms.untracked.bool(False), + crossSection = cms.untracked.double(1256000.0), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring( + 'MSEL=61 ! Quarkonia', + 'CKIN(3)=10. ! Min pthard', + 'CKIN(4)=-1. ! Max pthard', + 'MDME(858,1) = 0 ! 0.060200 e- e+', + 'MDME(859,1) = 1 ! 0.060100 mu- mu+', + 'MDME(860,1) = 0 ! 0.879700 rndmflav rndmflavbar', + 'MSTP(142)=2 ! turns on the PYEVWT Pt re-weighting routine', + 'PARJ(13)=0.750 ! probability that a c or b meson has S=1', + 'PARJ(14)=0.162 ! probability that a meson with S=0 is produced with L=1, J=1', + 'PARJ(15)=0.018 ! probability that a meson with S=1 is produced with L=1, J=0', + 'PARJ(16)=0.054 ! probability that a meson with S=1 is produced with L=1, J=1', + 'MSTP(145)=0 ! choice of polarization', + 'MSTP(146)=0 ! choice of polarization frame ONLY when mstp(145)=1', + 'MSTP(147)=0 ! particular helicity or density matrix component when mstp(145)=1', + 'MSTP(148)=1 ! possibility to allow for final-state shower evolution, extreme case !', + 'MSTP(149)=1 ! if mstp(148)=1, it determines the kinematics of the QQ~3S1(8)->QQ~3S1(8)+g branching', + 'PARP(141)=1.16 ! New values for COM matrix elements', + 'PARP(142)=0.0119 ! New values for COM matrix elements', + 'PARP(143)=0.01 ! New values for COM matrix elements', + 'PARP(144)=0.01 ! New values for COM matrix elements', + 'PARP(145)=0.05 ! New values for COM matrix elements', + 'PARP(146)=9.28 ! New values for COM matrix elements', + 'PARP(147)=0.15 ! New values for COM matrix elements', + 'PARP(148)=0.02 ! New values for COM matrix elements', + 'PARP(149)=0.02 ! New values for COM matrix elements', + 'PARP(150)=0.085 ! New values for COM matrix elements', + 'BRAT(859)=1.000 ! J/psi->mu+mu-', + 'BRAT(861)=0.000 ! chi_2c->J/psi gamma', + 'BRAT(862)=0.798 ! chi_2c->rndmflav rndmflavbar', + 'BRAT(1501)=0.000 ! chi_0c->J/psi gamma', + 'BRAT(1502)=0.987 ! chi_0c->rndmflav rndmflavbar', + 'BRAT(1555)=0.000 ! chi_1c->J/psi gamma', + 'BRAT(1556)=0.644 ! chi_1c->rndmflav rndmflavbar', + 'BRAT(1569)=0.186600 ! psi(2S) -> rndmflav rndmflavbar', + 'BRAT(1570)=0.000 ! psi(2S) ->J/psi pi+ pi-', + 'BRAT(1571)=0.000 ! psi(2S) ->J/psi pi0 pi0', + 'BRAT(1572)=0.000 ! psi(2S) ->J/psi eta', + 'BRAT(1573)=0.000 ! psi(2S) ->J/psi pi0' + ), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters', + 'CSAParameters'), + CSAParameters = cms.vstring('CSAMODE = 6 ! cross-section reweighted quarkonia') + ) +) + +oniafilter = cms.EDFilter("PythiaFilter", + Status = cms.untracked.int32(2), + MaxEta = cms.untracked.double(1000.0), + MinEta = cms.untracked.double(-1000.0), + MinPt = cms.untracked.double(0.0), + ParticleID = cms.untracked.int32(443) +) + +mumugenfilter = cms.EDFilter("MCParticlePairFilter", + Status = cms.untracked.vint32(1, 1), + MinPt = cms.untracked.vdouble(0.5, 0.5), + MinP = cms.untracked.vdouble(2.7, 2.7), + MaxEta = cms.untracked.vdouble(2.5, 2.5), + MinEta = cms.untracked.vdouble(-2.5, -2.5), + ParticleCharge = cms.untracked.int32(-1), + ParticleID1 = cms.untracked.vint32(13), + ParticleID2 = cms.untracked.vint32(13) +) + +mugenfilter = cms.EDFilter("MCSingleParticleFilter", + Status = cms.untracked.vint32(1,1), + MinPt = cms.untracked.vdouble(10.0,10.0), + ParticleID = cms.untracked.vint32(13,-13), +) + +ProductionFilterSequence = cms.Sequence(generator*oniafilter*mumugenfilter*~mugenfilter) diff --git a/Configuration/Generator/python/LM1_sfts_13TeV_cfi.py b/Configuration/Generator/python/LM1_sfts_13TeV_cfi.py new file mode 100644 index 0000000000000..16881e6f7c96d --- /dev/null +++ b/Configuration/Generator/python/LM1_sfts_13TeV_cfi.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + # put here the efficiency of your filter (1. if no filter) + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + # put here the cross section of your process (in pb) + crossSection = cms.untracked.double(42.11), + maxEventsToPrint = cms.untracked.int32(0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=39 ! All SUSY processes ', + 'IMSS(1) = 11 ! Spectrum from external SLHA file', + 'IMSS(21) = 33 ! LUN number for SLHA File (must be 33) ', + 'IMSS(22) = 33 ! Read-in SLHA decay table '), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters', + 'SLHAParameters'), + SLHAParameters = cms.vstring("SLHAFILE = \'Configuration/Generator/data/CSA07SUSYBSM_LM1_sftsdkpyt_slha.out\' ! Name of the SLHA spectrum file") + ) +) diff --git a/Configuration/Generator/python/MinBias_13TeV_cfi.py b/Configuration/Generator/python/MinBias_13TeV_cfi.py new file mode 100644 index 0000000000000..e39f789e52a6c --- /dev/null +++ b/Configuration/Generator/python/MinBias_13TeV_cfi.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=0 ! User defined processes', + 'MSUB(11)=1 ! Min bias process', + 'MSUB(12)=1 ! Min bias process', + 'MSUB(13)=1 ! Min bias process', + 'MSUB(28)=1 ! Min bias process', + 'MSUB(53)=1 ! Min bias process', + 'MSUB(68)=1 ! Min bias process', + 'MSUB(92)=1 ! Min bias process, single diffractive', + 'MSUB(93)=1 ! Min bias process, single diffractive', + 'MSUB(94)=1 ! Min bias process, double diffractive', + 'MSUB(95)=1 ! Min bias process'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/PhotonJet_Pt_10_13TeV_cfi.py b/Configuration/Generator/python/PhotonJet_Pt_10_13TeV_cfi.py new file mode 100644 index 0000000000000..88d65cd35bc15 --- /dev/null +++ b/Configuration/Generator/python/PhotonJet_Pt_10_13TeV_cfi.py @@ -0,0 +1,18 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=10 ! Pythia Photon+Jet processes', + 'CKIN(3)=10. ! minimum pt hat for hard interactions'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/QCDForPF_13TeV_cfi.py b/Configuration/Generator/python/QCDForPF_13TeV_cfi.py new file mode 100644 index 0000000000000..0468830e0489c --- /dev/null +++ b/Configuration/Generator/python/QCDForPF_13TeV_cfi.py @@ -0,0 +1,28 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + pythiaPylistVerbosity = cms.untracked.int32(0), + comEnergy = cms.double(13000.0), + filterEfficiency = cms.untracked.double(1.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring( + 'MSEL=1 ! QCD hight pT processes', + 'CKIN(3)=15. ! minimum pt hat for hard interactions', + 'CKIN(4)=3000. ! maximum pt hat for hard interactions', + 'MSTP(142)=2 ! Turns on the PYWEVT Pt reweighting routine' + ), + CSAParameters = cms.vstring( + 'CSAMODE = 7 ! towards a "flat" QCD spectrum', + 'PTPOWER = 4.5 ! reweighting of the pt spectrum' + ), + parameterSets = cms.vstring( + 'pythiaUESettings', + 'processParameters', + 'CSAParameters' + ) + ) +) diff --git a/Configuration/Generator/python/QCD_Pt_3000_3500_13TeV_cfi.py b/Configuration/Generator/python/QCD_Pt_3000_3500_13TeV_cfi.py new file mode 100644 index 0000000000000..3551bd57cb5cf --- /dev/null +++ b/Configuration/Generator/python/QCD_Pt_3000_3500_13TeV_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=1 ! QCD hight pT processes', + 'CKIN(3)=3000. ! minimum pt hat for hard interactions', + 'CKIN(4)=3500. ! maximum pt hat for hard interactions'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/QCD_Pt_600_800_13TeV_cfi.py b/Configuration/Generator/python/QCD_Pt_600_800_13TeV_cfi.py new file mode 100644 index 0000000000000..4c2979c571974 --- /dev/null +++ b/Configuration/Generator/python/QCD_Pt_600_800_13TeV_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=1 ! QCD hight pT processes', + 'CKIN(3)=600. ! minimum pt hat for hard interactions', + 'CKIN(4)=800. ! maximum pt hat for hard interactions'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/QCD_Pt_80_120_13TeV_cfi.py b/Configuration/Generator/python/QCD_Pt_80_120_13TeV_cfi.py new file mode 100644 index 0000000000000..35a8137ff7e41 --- /dev/null +++ b/Configuration/Generator/python/QCD_Pt_80_120_13TeV_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL=1 ! QCD hight pT processes', + 'CKIN(3)=80. ! minimum pt hat for hard interactions', + 'CKIN(4)=120. ! maximum pt hat for hard interactions'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/QQH1352T_Tauola_13TeV_cfi.py b/Configuration/Generator/python/QQH1352T_Tauola_13TeV_cfi.py new file mode 100644 index 0000000000000..37538c567382a --- /dev/null +++ b/Configuration/Generator/python/QQH1352T_Tauola_13TeV_cfi.py @@ -0,0 +1,51 @@ +# The following comments couldn't be translated into the new config version: + +# Higgs decays + +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(1), + # put here the efficiency of your filter (1. if no filter) + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + # put here the cross section of your process (in pb) + crossSection = cms.untracked.double(0.388), + maxEventsToPrint = cms.untracked.int32(3), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('PMAS(25,1)=135.0 !mass of Higgs', + 'MSEL=0 !user selection for process', + 'MSUB(123)=1 !ZZ fusion to H', + 'MSUB(124)=1 !WW fusion to H', + 'MDME(210,1)=0 !Higgs decay into dd', + 'MDME(211,1)=0 !Higgs decay into uu', + 'MDME(212,1)=0 !Higgs decay into ss', + 'MDME(213,1)=0 !Higgs decay into cc', + 'MDME(214,1)=0 !Higgs decay into bb', + 'MDME(215,1)=0 !Higgs decay into tt', + 'MDME(216,1)=0 !Higgs decay into', + 'MDME(217,1)=0 !Higgs decay into Higgs decay', + 'MDME(218,1)=0 !Higgs decay into e nu e', + 'MDME(219,1)=0 !Higgs decay into mu nu mu', + 'MDME(220,1)=1 !Higgs decay into tau tau', + 'MDME(221,1)=0 !Higgs decay into Higgs decay', + 'MDME(222,1)=0 !Higgs decay into g g', + 'MDME(223,1)=0 !Higgs decay into gam gam', + 'MDME(224,1)=0 !Higgs decay into gam Z', + 'MDME(225,1)=0 !Higgs decay into Z Z', + 'MDME(226,1)=0 !Higgs decay into W W'), + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/TTbarLepton_Tauola_13TeV_cfi.py b/Configuration/Generator/python/TTbarLepton_Tauola_13TeV_cfi.py new file mode 100644 index 0000000000000..a6eca13d7c118 --- /dev/null +++ b/Configuration/Generator/python/TTbarLepton_Tauola_13TeV_cfi.py @@ -0,0 +1,47 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 ! User defined processes', + 'MSUB(81) = 1 ! qqbar to QQbar', + 'MSUB(82) = 1 ! gg to QQbar', + 'MSTP(7) = 6 ! flavour = top', + 'PMAS(6,1) = 175. ! top quark mass', + 'MDME(190,1) = 0 !W decay into dbar u', + 'MDME(191,1) = 0 !W decay into dbar c', + 'MDME(192,1) = 0 !W decay into dbar t', + 'MDME(194,1) = 0 !W decay into sbar u', + 'MDME(195,1) = 0 !W decay into sbar c', + 'MDME(196,1) = 0 !W decay into sbar t', + 'MDME(198,1) = 0 !W decay into bbar u', + 'MDME(199,1) = 0 !W decay into bbar c', + 'MDME(200,1) = 0 !W decay into bbar t', + 'MDME(205,1) = 0 !W decay into bbar tp', + 'MDME(206,1) = 1 !W decay into e+ nu_e', + 'MDME(207,1) = 1 !W decay into mu+ nu_mu', + 'MDME(208,1) = 1 !W decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + UseTauolaPolarization = cms.bool(True), + InputCards = cms.PSet + ( + pjak1 = cms.int32(0), + pjak2 = cms.int32(0), + mdtau = cms.int32(0) + ) + ), + parameterSets = cms.vstring('Tauola') + ) +) diff --git a/Configuration/Generator/python/TTbar_Tauola_13TeV_cfi.py b/Configuration/Generator/python/TTbar_Tauola_13TeV_cfi.py new file mode 100644 index 0000000000000..7575dac0a0c0c --- /dev/null +++ b/Configuration/Generator/python/TTbar_Tauola_13TeV_cfi.py @@ -0,0 +1,34 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 ! User defined processes', + 'MSUB(81) = 1 ! qqbar to QQbar', + 'MSUB(82) = 1 ! gg to QQbar', + 'MSTP(7) = 6 ! flavour = top', + 'PMAS(6,1) = 175. ! top quark mass'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + UseTauolaPolarization = cms.bool(True), + InputCards = cms.PSet + ( + pjak1 = cms.int32(0), + pjak2 = cms.int32(0), + mdtau = cms.int32(0) + ) + ), + parameterSets = cms.vstring('Tauola') + ) +) diff --git a/Configuration/Generator/python/WE_13TeV_cfi.py b/Configuration/Generator/python/WE_13TeV_cfi.py new file mode 100644 index 0000000000000..b64404fada364 --- /dev/null +++ b/Configuration/Generator/python/WE_13TeV_cfi.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + crossSection = cms.untracked.double(17120.0), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 !User defined processes', + 'MSUB(2) = 1 !W production', + 'MDME(190,1) = 0 !W decay into dbar u', + 'MDME(191,1) = 0 !W decay into dbar c', + 'MDME(192,1) = 0 !W decay into dbar t', + 'MDME(194,1) = 0 !W decay into sbar u', + 'MDME(195,1) = 0 !W decay into sbar c', + 'MDME(196,1) = 0 !W decay into sbar t', + 'MDME(198,1) = 0 !W decay into bbar u', + 'MDME(199,1) = 0 !W decay into bbar c', + 'MDME(200,1) = 0 !W decay into bbar t', + 'MDME(206,1) = 1 !W decay into e+ nu_e', + 'MDME(207,1) = 0 !W decay into mu+ nu_mu', + 'MDME(208,1) = 0 !W decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/WM_13TeV_cfi.py b/Configuration/Generator/python/WM_13TeV_cfi.py new file mode 100644 index 0000000000000..fefd1467c2544 --- /dev/null +++ b/Configuration/Generator/python/WM_13TeV_cfi.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + crossSection = cms.untracked.double(17120.0), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 !User defined processes', + 'MSUB(2) = 1 !W production', + 'MDME(190,1) = 0 !W decay into dbar u', + 'MDME(191,1) = 0 !W decay into dbar c', + 'MDME(192,1) = 0 !W decay into dbar t', + 'MDME(194,1) = 0 !W decay into sbar u', + 'MDME(195,1) = 0 !W decay into sbar c', + 'MDME(196,1) = 0 !W decay into sbar t', + 'MDME(198,1) = 0 !W decay into bbar u', + 'MDME(199,1) = 0 !W decay into bbar c', + 'MDME(200,1) = 0 !W decay into bbar t', + 'MDME(206,1) = 0 !W decay into e+ nu_e', + 'MDME(207,1) = 1 !W decay into mu+ nu_mu', + 'MDME(208,1) = 0 !W decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/Wjet_Pt_3000_3500_13TeV_cfi.py b/Configuration/Generator/python/Wjet_Pt_3000_3500_13TeV_cfi.py new file mode 100644 index 0000000000000..3ac64e4674873 --- /dev/null +++ b/Configuration/Generator/python/Wjet_Pt_3000_3500_13TeV_cfi.py @@ -0,0 +1,34 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + crossSection = cms.untracked.double(0.000000313), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 !User defined processes', + 'MSUB(16) = 1 !qW production', + 'MSUB(31) = 1 !gW production', + 'CKIN(3) = 3000. !minimum pthat for hard interaction', + 'CKIN(4) = 3500. !maximum pthat for hard interaction', + 'MDME(190,1) = 0 !W decay into dbar u', + 'MDME(191,1) = 0 !W decay into dbar c', + 'MDME(192,1) = 0 !W decay into dbar t', + 'MDME(194,1) = 0 !W decay into sbar u', + 'MDME(195,1) = 0 !W decay into sbar c', + 'MDME(196,1) = 0 !W decay into sbar t', + 'MDME(198,1) = 0 !W decay into bbar u', + 'MDME(199,1) = 0 !W decay into bbar c', + 'MDME(200,1) = 0 !W decay into bbar t', + 'MDME(206,1) = 1 !W decay into e+ nu_e', + 'MDME(207,1) = 1 !W decay into mu+ nu_mu', + 'MDME(208,1) = 1 !W decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/Wjet_Pt_80_120_13TeV_cfi.py b/Configuration/Generator/python/Wjet_Pt_80_120_13TeV_cfi.py new file mode 100644 index 0000000000000..8be31e4443613 --- /dev/null +++ b/Configuration/Generator/python/Wjet_Pt_80_120_13TeV_cfi.py @@ -0,0 +1,34 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + crossSection = cms.untracked.double(236.2), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 !User defined processes', + 'MSUB(16) = 1 !qW production', + 'MSUB(31) = 1 !gW production', + 'CKIN(3) = 80. !minimum pthat for hard interaction', + 'CKIN(4) = 120. !maximum pthat for hard interaction', + 'MDME(190,1) = 0 !W decay into dbar u', + 'MDME(191,1) = 0 !W decay into dbar c', + 'MDME(192,1) = 0 !W decay into dbar t', + 'MDME(194,1) = 0 !W decay into sbar u', + 'MDME(195,1) = 0 !W decay into sbar c', + 'MDME(196,1) = 0 !W decay into sbar t', + 'MDME(198,1) = 0 !W decay into bbar u', + 'MDME(199,1) = 0 !W decay into bbar c', + 'MDME(200,1) = 0 !W decay into bbar t', + 'MDME(206,1) = 1 !W decay into e+ nu_e', + 'MDME(207,1) = 1 !W decay into mu+ nu_mu', + 'MDME(208,1) = 1 !W decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/WpM_13TeV_cfi.py b/Configuration/Generator/python/WpM_13TeV_cfi.py new file mode 100755 index 0000000000000..4b13cf25a0b82 --- /dev/null +++ b/Configuration/Generator/python/WpM_13TeV_cfi.py @@ -0,0 +1,42 @@ +## Wprime to muon, Z2* tune, 50x production in winter 2012 + + +import FWCore.ParameterSet.Config as cms + +source = cms.Source("EmptySource") + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.), + crossSection = cms.untracked.double(0.02123), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 0 !User defined processes', + 'MSUB(142) = 1 !Wprime production', + 'PMAS(34,1) = 2000.!mass of Wprime', + 'MDME(311,1) = 0 !W\' decay into dbar u', + 'MDME(312,1) = 0 !W\' decay into dbar c', + 'MDME(313,1) = 0 !W\' decay into dbar t', + 'MDME(315,1) = 0 !W\' decay into sbar u', + 'MDME(316,1) = 0 !W\' decay into sbar c', + 'MDME(317,1) = 0 !W\' decay into sbar t', + 'MDME(319,1) = 0 !W\' decay into bbar u', + 'MDME(320,1) = 0 !W\' decay into bbar c', + 'MDME(321,1) = 0 !W\' decay into bbar t', + 'MDME(327,1) = 0 !W\' decay into e+ nu_e', + 'MDME(328,1) = 1 !W\' decay into mu+ nu_mu', + 'MDME(329,1) = 0 !W\' decay into tau+ nu_tau'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) + + + + +ProductionFilterSequence = cms.Sequence(generator) diff --git a/Configuration/Generator/python/ZEE_13TeV_cfi.py b/Configuration/Generator/python/ZEE_13TeV_cfi.py new file mode 100644 index 0000000000000..84b26a0a2302c --- /dev/null +++ b/Configuration/Generator/python/ZEE_13TeV_cfi.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 11 ', + 'MDME( 174,1) = 0 !Z decay into d dbar', + 'MDME( 175,1) = 0 !Z decay into u ubar', + 'MDME( 176,1) = 0 !Z decay into s sbar', + 'MDME( 177,1) = 0 !Z decay into c cbar', + 'MDME( 178,1) = 0 !Z decay into b bbar', + 'MDME( 179,1) = 0 !Z decay into t tbar', + 'MDME( 182,1) = 1 !Z decay into e- e+', + 'MDME( 183,1) = 0 !Z decay into nu_e nu_ebar', + 'MDME( 184,1) = 0 !Z decay into mu- mu+', + 'MDME( 185,1) = 0 !Z decay into nu_mu nu_mubar', + 'MDME( 186,1) = 0 !Z decay into tau- tau+', + 'MDME( 187,1) = 0 !Z decay into nu_tau nu_taubar', + 'CKIN( 1) = 40. !(D=2. GeV)', + 'CKIN( 2) = -1. !(D=-1. GeV)'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/ZMM_13TeV_cfi.py b/Configuration/Generator/python/ZMM_13TeV_cfi.py new file mode 100644 index 0000000000000..deb15380ea0d3 --- /dev/null +++ b/Configuration/Generator/python/ZMM_13TeV_cfi.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 11 ', + 'MDME( 174,1) = 0 !Z decay into d dbar', + 'MDME( 175,1) = 0 !Z decay into u ubar', + 'MDME( 176,1) = 0 !Z decay into s sbar', + 'MDME( 177,1) = 0 !Z decay into c cbar', + 'MDME( 178,1) = 0 !Z decay into b bbar', + 'MDME( 179,1) = 0 !Z decay into t tbar', + 'MDME( 182,1) = 0 !Z decay into e- e+', + 'MDME( 183,1) = 0 !Z decay into nu_e nu_ebar', + 'MDME( 184,1) = 1 !Z decay into mu- mu+', + 'MDME( 185,1) = 0 !Z decay into nu_mu nu_mubar', + 'MDME( 186,1) = 0 !Z decay into tau- tau+', + 'MDME( 187,1) = 0 !Z decay into nu_tau nu_taubar', + 'CKIN( 1) = 40. !(D=2. GeV)', + 'CKIN( 2) = -1. !(D=-1. GeV)'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) + +mumugenfilter = cms.EDFilter("MCParticlePairFilter", + Status = cms.untracked.vint32(1, 1), + MinPt = cms.untracked.vdouble(2.5, 2.5), + MaxEta = cms.untracked.vdouble(2.5, 2.5), + MinEta = cms.untracked.vdouble(-2.5, -2.5), + ParticleCharge = cms.untracked.int32(-1), + ParticleID1 = cms.untracked.vint32(13), + ParticleID2 = cms.untracked.vint32(13) +) + +ProductionFilterSequence = cms.Sequence(generator*mumugenfilter) diff --git a/Configuration/Generator/python/ZTT_Tauola_All_hadronic_13TeV_cfi.py b/Configuration/Generator/python/ZTT_Tauola_All_hadronic_13TeV_cfi.py new file mode 100644 index 0000000000000..13de45b1029e7 --- /dev/null +++ b/Configuration/Generator/python/ZTT_Tauola_All_hadronic_13TeV_cfi.py @@ -0,0 +1,44 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + InputCards = cms.PSet( + pjak1 = cms.int32(0), + pjak2 = cms.int32(0), + mdtau = cms.int32(230) + ) + ), + parameterSets = cms.vstring('Tauola') + ), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 11 ', + 'MDME( 174,1) = 0 !Z decay into d dbar', + 'MDME( 175,1) = 0 !Z decay into u ubar', + 'MDME( 176,1) = 0 !Z decay into s sbar', + 'MDME( 177,1) = 0 !Z decay into c cbar', + 'MDME( 178,1) = 0 !Z decay into b bbar', + 'MDME( 179,1) = 0 !Z decay into t tbar', + 'MDME( 182,1) = 0 !Z decay into e- e+', + 'MDME( 183,1) = 0 !Z decay into nu_e nu_ebar', + 'MDME( 184,1) = 0 !Z decay into mu- mu+', + 'MDME( 185,1) = 0 !Z decay into nu_mu nu_mubar', + 'MDME( 186,1) = 1 !Z decay into tau- tau+', + 'MDME( 187,1) = 0 !Z decay into nu_tau nu_taubar', + 'CKIN( 1) = 40. !(D=2. GeV)', + 'CKIN( 2) = -1. !(D=-1. GeV)'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/ZTT_Tauola_OneLepton_OtherHadrons_13TeV_cfi.py b/Configuration/Generator/python/ZTT_Tauola_OneLepton_OtherHadrons_13TeV_cfi.py new file mode 100644 index 0000000000000..440e8fe5ff072 --- /dev/null +++ b/Configuration/Generator/python/ZTT_Tauola_OneLepton_OtherHadrons_13TeV_cfi.py @@ -0,0 +1,44 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(0), + filterEfficiency = cms.untracked.double(1.0), + comEnergy = cms.double(13000.0), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + InputCards = cms.PSet( + pjak1 = cms.int32(0), + pjak2 = cms.int32(0), + mdtau = cms.int32(214) + ) + ), + parameterSets = cms.vstring('Tauola') + ), + PythiaParameters = cms.PSet( + pythiaUESettingsBlock, + processParameters = cms.vstring('MSEL = 11 ', + 'MDME( 174,1) = 0 !Z decay into d dbar', + 'MDME( 175,1) = 0 !Z decay into u ubar', + 'MDME( 176,1) = 0 !Z decay into s sbar', + 'MDME( 177,1) = 0 !Z decay into c cbar', + 'MDME( 178,1) = 0 !Z decay into b bbar', + 'MDME( 179,1) = 0 !Z decay into t tbar', + 'MDME( 182,1) = 0 !Z decay into e- e+', + 'MDME( 183,1) = 0 !Z decay into nu_e nu_ebar', + 'MDME( 184,1) = 0 !Z decay into mu- mu+', + 'MDME( 185,1) = 0 !Z decay into nu_mu nu_mubar', + 'MDME( 186,1) = 1 !Z decay into tau- tau+', + 'MDME( 187,1) = 0 !Z decay into nu_tau nu_taubar', + 'CKIN( 1) = 40. !(D=2. GeV)', + 'CKIN( 2) = -1. !(D=-1. GeV)'), + # This is a vector of ParameterSet names to be read, in this order + parameterSets = cms.vstring('pythiaUESettings', + 'processParameters') + ) +) diff --git a/Configuration/Generator/python/ZpEE_2250_13TeV_Tauola_cfi.py b/Configuration/Generator/python/ZpEE_2250_13TeV_Tauola_cfi.py new file mode 100644 index 0000000000000..97960abbe3a55 --- /dev/null +++ b/Configuration/Generator/python/ZpEE_2250_13TeV_Tauola_cfi.py @@ -0,0 +1,82 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + crossSection = cms.untracked.double(0.00002497), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + PythiaParameters = cms.PSet( + # Default (mostly empty - to keep PYTHIA default) card file + # Name of the set is "pythiaDefault" + pythiaUESettingsBlock, + # User cards - name is "myParameters" + processParameters = cms.vstring('MSEL=0 ! User defined processes', + "MSUB(141) = 1 ! ff -> gamma/Z0/Z\'", + 'MSTP(44) = 3 ! only select the Z process', + "PMAS(32,1) = 2250 ! Z\' mass (GeV)", + 'CKIN(1) = -1 ! lower invariant mass cutoff (GeV)', + 'CKIN(2) = -1 ! no upper invariant mass cutoff', + 'PARU(121)= 0. ! vd', + 'PARU(122)= 0.506809 ! ad', + 'PARU(123)= 0. ! vu', + 'PARU(124)= 0.506809 ! au', + 'PARU(125)= 0. ! ve', + 'PARU(126)= 0.506809 ! ae', + 'PARU(127)= -0.253405 ! vnu', + 'PARU(128)= 0.253405 ! anu', + 'PARJ(180)= 0. ! vd', + 'PARJ(181)= 0.506809 ! ad', + 'PARJ(182)= 0. ! vu', + 'PARJ(183)= 0.506809 ! au', + 'PARJ(184)= 0. ! ve', + 'PARJ(185)= 0.506809 ! ae', + 'PARJ(186)= -0.253405 ! vnu', + 'PARJ(187)= 0.253405 ! anu', + 'PARJ(188)= 0. ! vd', + 'PARJ(189)= 0.506809 ! ad', + 'PARJ(190)= 0. ! vu', + 'PARJ(191)= 0.506809 ! au', + 'PARJ(192)= 0. ! ve', + 'PARJ(193)= 0.506809 ! ae', + 'PARJ(194)= -0.253405 ! vnu', + 'PARJ(195)= 0.253405 ! anu', + 'MDME(289,1) = 0 ! d dbar', + 'MDME(290,1) = 0 ! u ubar', + 'MDME(291,1) = 0 ! s sbar', + 'MDME(292,1) = 0 ! c cbar', + 'MDME(293,1) = 0 ! b bar', + 'MDME(294,1) = 0 ! t tbar', + 'MDME(295,1) = -1 ! 4th gen q qbar', + 'MDME(296,1) = -1 ! 4th gen q qbar', + 'MDME(297,1) = 1 ! e- e+', + 'MDME(298,1) = 0 ! nu_e nu_ebar', + 'MDME(299,1) = 0 ! mu- mu+', + 'MDME(300,1) = 0 ! nu_mu nu_mubar', + 'MDME(301,1) = 0 ! tau tau', + 'MDME(302,1) = 0 ! nu_tau nu_taubar', + 'MDME(303,1) = -1 ! 4th gen l- l+', + 'MDME(304,1) = -1 ! 4th gen nu nubar', + 'MDME(305,1) = -1 ! W+ W-', + 'MDME(306,1) = -1 ! H+ H-', + 'MDME(307,1) = -1 ! Z0 gamma', + 'MDME(308,1) = -1 ! Z0 h0', + 'MDME(309,1) = -1 ! h0 A0', + 'MDME(310,1) = -1 ! H0 A0'), + parameterSets = cms.vstring('pythiaUESettings','processParameters') + ) +) + + +ProductionFilterSequence = cms.Sequence(generator) + diff --git a/Configuration/Generator/python/ZpMM_13TeV_cfi.py b/Configuration/Generator/python/ZpMM_13TeV_cfi.py new file mode 100644 index 0000000000000..a693c556425a3 --- /dev/null +++ b/Configuration/Generator/python/ZpMM_13TeV_cfi.py @@ -0,0 +1,74 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + crossSection = cms.untracked.double(0.00002497), + PythiaParameters = cms.PSet( + # Default (mostly empty - to keep PYTHIA default) card file + # Name of the set is "pythiaDefault" + pythiaUESettingsBlock, + # User cards - name is "myParameters" + processParameters = cms.vstring('MSEL=0 ! User defined processes', + "MSUB(141) = 1 ! ff -> gamma/Z0/Z\'", + 'MSTP(44) = 3 ! only select the Z process', + "PMAS(32,1) = 3000 ! Z\' mass (GeV)", + 'CKIN(1) = -1 ! lower invariant mass cutoff (GeV)', + 'CKIN(2) = -1 ! no upper invariant mass cutoff', + 'PARU(121)= 0. ! vd', + 'PARU(122)= 0.506809 ! ad', + 'PARU(123)= 0. ! vu', + 'PARU(124)= 0.506809 ! au', + 'PARU(125)= 0. ! ve', + 'PARU(126)= 0.506809 ! ae', + 'PARU(127)= -0.253405 ! vnu', + 'PARU(128)= 0.253405 ! anu', + 'PARJ(180)= 0. ! vd', + 'PARJ(181)= 0.506809 ! ad', + 'PARJ(182)= 0. ! vu', + 'PARJ(183)= 0.506809 ! au', + 'PARJ(184)= 0. ! ve', + 'PARJ(185)= 0.506809 ! ae', + 'PARJ(186)= -0.253405 ! vnu', + 'PARJ(187)= 0.253405 ! anu', + 'PARJ(188)= 0. ! vd', + 'PARJ(189)= 0.506809 ! ad', + 'PARJ(190)= 0. ! vu', + 'PARJ(191)= 0.506809 ! au', + 'PARJ(192)= 0. ! ve', + 'PARJ(193)= 0.506809 ! ae', + 'PARJ(194)= -0.253405 ! vnu', + 'PARJ(195)= 0.253405 ! anu', + 'MDME(289,1) = 0 ! d dbar', + 'MDME(290,1) = 0 ! u ubar', + 'MDME(291,1) = 0 ! s sbar', + 'MDME(292,1) = 0 ! c cbar', + 'MDME(293,1) = 0 ! b bar', + 'MDME(294,1) = 0 ! t tbar', + 'MDME(295,1) = -1 ! 4th gen q qbar', + 'MDME(296,1) = -1 ! 4th gen q qbar', + 'MDME(297,1) = 0 ! e- e+', + 'MDME(298,1) = 0 ! nu_e nu_ebar', + 'MDME(299,1) = 1 ! mu- mu+', + 'MDME(300,1) = 0 ! nu_mu nu_mubar', + 'MDME(301,1) = 0 ! tau tau', + 'MDME(302,1) = 0 ! nu_tau nu_taubar', + 'MDME(303,1) = -1 ! 4th gen l- l+', + 'MDME(304,1) = -1 ! 4th gen nu nubar', + 'MDME(305,1) = -1 ! W+ W-', + 'MDME(306,1) = -1 ! H+ H-', + 'MDME(307,1) = -1 ! Z0 gamma', + 'MDME(308,1) = -1 ! Z0 h0', + 'MDME(309,1) = -1 ! h0 A0', + 'MDME(310,1) = -1 ! H0 A0'), + parameterSets = cms.vstring('pythiaUESettings','processParameters') + ) +) + + +ProductionFilterSequence = cms.Sequence(generator) + diff --git a/Configuration/Generator/python/ZpMM_2250_13TeV_Tauola_cfi.py b/Configuration/Generator/python/ZpMM_2250_13TeV_Tauola_cfi.py new file mode 100644 index 0000000000000..861c64e6e67c2 --- /dev/null +++ b/Configuration/Generator/python/ZpMM_2250_13TeV_Tauola_cfi.py @@ -0,0 +1,96 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + crossSection = cms.untracked.double(0.00002497), + + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + +# ExternalDecays = cms.PSet( +# Tauola = cms.untracked.PSet( +# UseTauolaPolarization = cms.bool(True), +# InputCards = cms.PSet( +# mdtau = cms.int32(0), +# pjak2 = cms.int32(0), +# pjak1 = cms.int32(0) +# ) +# ), +# parameterSets = cms.vstring('Tauola') +# ), + + PythiaParameters = cms.PSet( + # Default (mostly empty - to keep PYTHIA default) card file + # Name of the set is "pythiaDefault" + pythiaUESettingsBlock, + # User cards - name is "myParameters" + processParameters = cms.vstring('MSEL=0 ! User defined processes', + "MSUB(141) = 1 ! ff -> gamma/Z0/Z\'", + 'MSTP(44) = 3 ! only select the Z process', + "PMAS(32,1) = 2250 ! Z\' mass (GeV)", + 'CKIN(1) = -1 ! lower invariant mass cutoff (GeV)', + 'CKIN(2) = -1 ! no upper invariant mass cutoff', + 'PARU(121)= 0. ! vd', + 'PARU(122)= 0.506809 ! ad', + 'PARU(123)= 0. ! vu', + 'PARU(124)= 0.506809 ! au', + 'PARU(125)= 0. ! ve', + 'PARU(126)= 0.506809 ! ae', + 'PARU(127)= -0.253405 ! vnu', + 'PARU(128)= 0.253405 ! anu', + 'PARJ(180)= 0. ! vd', + 'PARJ(181)= 0.506809 ! ad', + 'PARJ(182)= 0. ! vu', + 'PARJ(183)= 0.506809 ! au', + 'PARJ(184)= 0. ! ve', + 'PARJ(185)= 0.506809 ! ae', + 'PARJ(186)= -0.253405 ! vnu', + 'PARJ(187)= 0.253405 ! anu', + 'PARJ(188)= 0. ! vd', + 'PARJ(189)= 0.506809 ! ad', + 'PARJ(190)= 0. ! vu', + 'PARJ(191)= 0.506809 ! au', + 'PARJ(192)= 0. ! ve', + 'PARJ(193)= 0.506809 ! ae', + 'PARJ(194)= -0.253405 ! vnu', + 'PARJ(195)= 0.253405 ! anu', + 'MDME(289,1) = 0 ! d dbar', + 'MDME(290,1) = 0 ! u ubar', + 'MDME(291,1) = 0 ! s sbar', + 'MDME(292,1) = 0 ! c cbar', + 'MDME(293,1) = 0 ! b bar', + 'MDME(294,1) = 0 ! t tbar', + 'MDME(295,1) = -1 ! 4th gen q qbar', + 'MDME(296,1) = -1 ! 4th gen q qbar', + 'MDME(297,1) = 0 ! e- e+', + 'MDME(298,1) = 0 ! nu_e nu_ebar', + 'MDME(299,1) = 1 ! mu- mu+', + 'MDME(300,1) = 0 ! nu_mu nu_mubar', + 'MDME(301,1) = 0 ! tau tau', + 'MDME(302,1) = 0 ! nu_tau nu_taubar', + 'MDME(303,1) = -1 ! 4th gen l- l+', + 'MDME(304,1) = -1 ! 4th gen nu nubar', + 'MDME(305,1) = -1 ! W+ W-', + 'MDME(306,1) = -1 ! H+ H-', + 'MDME(307,1) = -1 ! Z0 gamma', + 'MDME(308,1) = -1 ! Z0 h0', + 'MDME(309,1) = -1 ! h0 A0', + 'MDME(310,1) = -1 ! H0 A0'), + parameterSets = cms.vstring('pythiaUESettings','processParameters') + ) +) +# +# +#ProductionFilterSequence = cms.Sequence(generator) + diff --git a/Configuration/Generator/python/ZpTT_1500_13TeV_Tauola_cfi.py b/Configuration/Generator/python/ZpTT_1500_13TeV_Tauola_cfi.py new file mode 100644 index 0000000000000..fab037da1428f --- /dev/null +++ b/Configuration/Generator/python/ZpTT_1500_13TeV_Tauola_cfi.py @@ -0,0 +1,82 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Generator.PythiaUEZ2starSettings_cfi import * +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +generator = cms.EDFilter("Pythia6GeneratorFilter", + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(13000.0), + maxEventsToPrint = cms.untracked.int32(0), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + crossSection = cms.untracked.double(0.00002497), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + PythiaParameters = cms.PSet( + # Default (mostly empty - to keep PYTHIA default) card file + # Name of the set is "pythiaDefault" + pythiaUESettingsBlock, + # User cards - name is "myParameters" + processParameters = cms.vstring('MSEL=0 ! User defined processes', + "MSUB(141) = 1 ! ff -> gamma/Z0/Z\'", + 'MSTP(44) = 3 ! only select the Z process', + "PMAS(32,1) = 1500 ! Z\' mass (GeV)", + 'CKIN(1) = -1 ! lower invariant mass cutoff (GeV)', + 'CKIN(2) = -1 ! no upper invariant mass cutoff', + 'PARU(121)= 0. ! vd', + 'PARU(122)= 0.506809 ! ad', + 'PARU(123)= 0. ! vu', + 'PARU(124)= 0.506809 ! au', + 'PARU(125)= 0. ! ve', + 'PARU(126)= 0.506809 ! ae', + 'PARU(127)= -0.253405 ! vnu', + 'PARU(128)= 0.253405 ! anu', + 'PARJ(180)= 0. ! vd', + 'PARJ(181)= 0.506809 ! ad', + 'PARJ(182)= 0. ! vu', + 'PARJ(183)= 0.506809 ! au', + 'PARJ(184)= 0. ! ve', + 'PARJ(185)= 0.506809 ! ae', + 'PARJ(186)= -0.253405 ! vnu', + 'PARJ(187)= 0.253405 ! anu', + 'PARJ(188)= 0. ! vd', + 'PARJ(189)= 0.506809 ! ad', + 'PARJ(190)= 0. ! vu', + 'PARJ(191)= 0.506809 ! au', + 'PARJ(192)= 0. ! ve', + 'PARJ(193)= 0.506809 ! ae', + 'PARJ(194)= -0.253405 ! vnu', + 'PARJ(195)= 0.253405 ! anu', + 'MDME(289,1) = 0 ! d dbar', + 'MDME(290,1) = 0 ! u ubar', + 'MDME(291,1) = 0 ! s sbar', + 'MDME(292,1) = 0 ! c cbar', + 'MDME(293,1) = 0 ! b bar', + 'MDME(294,1) = 0 ! t tbar', + 'MDME(295,1) = -1 ! 4th gen q qbar', + 'MDME(296,1) = -1 ! 4th gen q qbar', + 'MDME(297,1) = 0 ! e- e+', + 'MDME(298,1) = 0 ! nu_e nu_ebar', + 'MDME(299,1) = 0 ! mu- mu+', + 'MDME(300,1) = 0 ! nu_mu nu_mubar', + 'MDME(301,1) = 1 ! tau tau', + 'MDME(302,1) = 0 ! nu_tau nu_taubar', + 'MDME(303,1) = -1 ! 4th gen l- l+', + 'MDME(304,1) = -1 ! 4th gen nu nubar', + 'MDME(305,1) = -1 ! W+ W-', + 'MDME(306,1) = -1 ! H+ H-', + 'MDME(307,1) = -1 ! Z0 gamma', + 'MDME(308,1) = -1 ! Z0 h0', + 'MDME(309,1) = -1 ! h0 A0', + 'MDME(310,1) = -1 ! H0 A0'), + parameterSets = cms.vstring('pythiaUESettings','processParameters') + ) +) + + +ProductionFilterSequence = cms.Sequence(generator) + diff --git a/Configuration/Geometry/python/GeometryExtended2023Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2023Reco_cff.py new file mode 100644 index 0000000000000..a264fd7705665 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2023Reco_cff.py @@ -0,0 +1,47 @@ +import FWCore.ParameterSet.Config as cms + +# Ideal geometry, needed for transient ECAL alignement +from Geometry.CMSCommonData.cmsExtendedGeometry2023HGCalXML_cfi import * + +# Reconstruction geometry services +# Tracking Geometry +#bah - well, this is not a cfi! +from Geometry.CommonDetUnit.globalTrackingSLHCGeometry_cfi import * + +#Tracker +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopologyConstants_cfi import * + +#Muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * + +# Alignment +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerSLHCGeometry_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * +trackerSLHCGeometry.applyAlignment = cms.bool(False) + +# Calorimeters +from Geometry.CaloEventSetup.CaloTopology_cfi import * + +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * + +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring('HCAL' , + 'ZDC' , + 'CASTOR' , + 'EcalBarrel' , + 'TOWER' ) +) + +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.HcalTopology_cfi import * +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + diff --git a/Configuration/Geometry/python/GeometryExtended2023_cff.py b/Configuration/Geometry/python/GeometryExtended2023_cff.py new file mode 100644 index 0000000000000..2b746464736a1 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2023_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +from Geometry.CMSCommonData.cmsExtendedGeometry2023HGCalXML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingSLHCGeometry_cfi import * diff --git a/Configuration/PyReleaseValidation/python/MatrixInjector.py b/Configuration/PyReleaseValidation/python/MatrixInjector.py index 1288c42e6f8bd..2bcf40ed2c899 100644 --- a/Configuration/PyReleaseValidation/python/MatrixInjector.py +++ b/Configuration/PyReleaseValidation/python/MatrixInjector.py @@ -79,22 +79,22 @@ def __init__(self,opt,mode='init',options=''): print '\n\tFound wmclient\n' self.defaultChain={ - "RequestType" : "TaskChain", #this is how we handle relvals - "Requestor": self.user, #Person responsible - "Group": self.group, #group for the request - "CMSSWVersion": os.getenv('CMSSW_VERSION'), #CMSSW Version (used for all tasks in chain) - "Campaign": os.getenv('CMSSW_VERSION'), # only for wmstat purpose - "ScramArch": os.getenv('SCRAM_ARCH'), #Scram Arch (used for all tasks in chain) - "ProcessingVersion": self.version, #Processing Version (used for all tasks in chain) - "GlobalTag": None, #Global Tag (overridden per task) - "CouchURL": self.couch, #URL of CouchDB containing Config Cache - "ConfigCacheURL": self.couch, #URL of CouchDB containing Config Cache + "RequestType" : "TaskChain", #this is how we handle relvals + "Requestor": self.user, #Person responsible + "Group": self.group, #group for the request + "CMSSWVersion": os.getenv('CMSSW_VERSION'), #CMSSW Version (used for all tasks in chain) + "Campaign": os.getenv('CMSSW_VERSION'), # only for wmstat purpose + "ScramArch": os.getenv('SCRAM_ARCH'), #Scram Arch (used for all tasks in chain) + "ProcessingVersion": self.version, #Processing Version (used for all tasks in chain) + "GlobalTag": None, #Global Tag (overridden per task) + "CouchURL": self.couch, #URL of CouchDB containing Config Cache + "ConfigCacheURL": self.couch, #URL of CouchDB containing Config Cache "DbsUrl": "http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet", #"CouchDBName": self.couchDB, #Name of Couch Database containing config cache #- Will contain all configs for all Tasks - #"SiteWhitelist" : ["T2_CH_CERN", "T1_US_FNAL"], #Site whitelist - "TaskChain" : None, #Define number of tasks in chain. - "nowmTasklist" : [], #a list of tasks as we put them in + #"SiteWhitelist" : ["T2_CH_CERN", "T1_US_FNAL"], #Site whitelist + "TaskChain" : None, #Define number of tasks in chain. + "nowmTasklist" : [], #a list of tasks as we put them in "unmergedLFNBase" : "/store/unmerged", "mergedLFNBase" : "/store/relval", "dashboardActivity" : "relval", @@ -113,11 +113,11 @@ def __init__(self,opt,mode='init',options=''): "TaskName" : None, #Task Name "ConfigCacheID" : None, #Generator Config id "GlobalTag": None, - "SplittingAlgo" : "EventBased", #Splitting Algorithm - "EventsPerJob" : None, #Size of jobs in terms of splitting algorithm - "RequestNumEvents" : None, #Total number of events to generate - "Seeding" : "AutomaticSeeding", #Random seeding method - "PrimaryDataset" : None, #Primary Dataset to be created + "SplittingAlgo" : "EventBased", #Splitting Algorithm + "EventsPerJob" : None, #Size of jobs in terms of splitting algorithm + "RequestNumEvents" : None, #Total number of events to generate + "Seeding" : "AutomaticSeeding", #Random seeding method + "PrimaryDataset" : None, #Primary Dataset to be created "nowmIO": {}, "KeepOutput" : False } @@ -125,9 +125,9 @@ def __init__(self,opt,mode='init',options=''): "TaskName" : "DigiHLT", #Task Name "ConfigCacheID" : None, #Processing Config id "GlobalTag": None, - "InputDataset" : None, #Input Dataset to be processed - "SplittingAlgo" : "LumiBased", #Splitting Algorithm - "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm + "InputDataset" : None, #Input Dataset to be processed + "SplittingAlgo" : "LumiBased", #Splitting Algorithm + "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm "nowmIO": {}, "KeepOutput" : False } @@ -137,8 +137,8 @@ def __init__(self,opt,mode='init',options=''): "InputFromOutputModule" : None, #OutputModule name in the input task that will provide files to process "ConfigCacheID" : None, #Processing Config id "GlobalTag": None, - "SplittingAlgo" : "LumiBased", #Splitting Algorithm - "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm + "SplittingAlgo" : "LumiBased", #Splitting Algorithm + "LumisPerJob" : 10, #Size of jobs in terms of splitting algorithm "nowmIO": {}, "KeepOutput" : False } diff --git a/Configuration/PyReleaseValidation/python/relval_standard.py b/Configuration/PyReleaseValidation/python/relval_standard.py index e73d9915db4db..a5063e4f02347 100644 --- a/Configuration/PyReleaseValidation/python/relval_standard.py +++ b/Configuration/PyReleaseValidation/python/relval_standard.py @@ -1,4 +1,3 @@ - # import the definition of the steps and input files: from Configuration.PyReleaseValidation.relval_steps import * @@ -106,8 +105,10 @@ workflows[5.6] = ['QCD_FlatPt_15_3000', ['QCDFlatPt153000FS','HARVESTFS']] workflows[5.7] = ['H130GGgluonfusion', ['H130GGgluonfusionFS','HARVESTFS']] +#GF: include fast_sim_13 ### standard set ### +## particle guns workflows[15] = ['', ['SingleElectronPt10','DIGI','RECO','HARVEST']] workflows[16] = ['', ['SingleElectronPt1000','DIGI','RECO','HARVEST']] workflows[17] = ['', ['SingleElectronPt35','DIGI','RECO','HARVEST']] @@ -117,11 +118,24 @@ workflows[20] = ['', ['SingleMuPt10','DIGI','RECO','HARVEST']] workflows[21] = ['', ['SingleMuPt100','DIGI','RECO','HARVEST']] workflows[22] = ['', ['SingleMuPt1000','DIGI','RECO','HARVEST']] +## particle guns postLS1 +workflows[1315] = ['', ['SingleElectronPt10_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1316] = ['', ['SingleElectronPt1000_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1317] = ['', ['SingleElectronPt35_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1318] = ['', ['SingleGammaPt10_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1319] = ['', ['SingleGammaPt35_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1306] = ['', ['SingleMuPt1_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1320] = ['', ['SingleMuPt10_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1321] = ['', ['SingleMuPt100_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1322] = ['', ['SingleMuPt1000_UP15','DIGIUP15','RECOUP15','HARVESTUP15']] + +## 8 TeV workflows[24] = ['', ['TTbarLepton','DIGI','RECO','HARVEST']] workflows[35] = ['', ['Wjet_Pt_80_120','DIGI','RECO','HARVEST']] workflows[36] = ['', ['Wjet_Pt_3000_3500','DIGI','RECO','HARVEST']] workflows[37] = ['', ['LM1_sfts','DIGI','RECO','HARVEST']] -workflows[38] = ['', ['QCD_FlatPt_15_3000','DIGI','RECO','HARVEST']] +# the input for the following worrkflow is high statistics +workflows[38] = ['', ['QCD_FlatPt_15_3000HS','DIGI','RECO','HARVEST']] workflows[9] = ['', ['Higgs200ChargedTaus','DIGI','RECO','HARVEST']] workflows[13] = ['', ['QCD_Pt_3000_3500','DIGI','RECO','HARVEST']] @@ -150,11 +164,45 @@ workflows[44] = ['', ['ZpEE_2250_8TeV_Tauola','DIGI','RECO','HARVEST']] workflows[45] = ['', ['ZpTT_1500_8TeV_Tauola','DIGI','RECO','HARVEST']] +## 13 TeV and postLS1 geometry +workflows[1324] = ['', ['TTbarLepton_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1335] = ['', ['Wjet_Pt_80_120_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1336] = ['', ['Wjet_Pt_3000_3500_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1337] = ['', ['LM1_sfts_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1338] = ['', ['QCD_FlatPt_15_3000HS_13','DIGIUP15','RECOUP15','HARVESTUP15']] + +workflows[1309] = ['', ['Higgs200ChargedTaus_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1313] = ['', ['QCD_Pt_3000_3500_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1339] = ['', ['QCD_Pt_600_800_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1323] = ['', ['JpsiMM_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1325] = ['', ['TTbar_13','DIGIUP15','RECOUP15','HARVESTUP15','ALCATT']] +workflows[1326] = ['', ['WE_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1329] = ['', ['ZEE_13','DIGIUP15','RECOUP15','HARVESTUP15','ALCAELE']] +workflows[1331] = ['', ['ZTT_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1332] = ['', ['H130GGgluonfusion_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1333] = ['', ['PhotonJets_Pt_10_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1334] = ['', ['QQH1352T_Tauola_13','DIGIUP15','RECOUP15','HARVESTUP15']] + +workflows[1308] = ['', ['BeamHalo_13','DIGIHAL','RECOHAL','ALCAHAL','HARVESTHAL']] +workflows[1311] = ['', ['MinBias_13','DIGIUP15','RECOMINUP15','HARVESTUP15','ALCAMIN']] +workflows[1328] = ['', ['QCD_Pt_80_120_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1327] = ['', ['WM_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1330] = ['', ['ZMM_13','DIGIUP15','RECOUP15','HARVESTUP15']] + +workflows[1310] = ['', ['ADDMonoJet_d3MD3_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1312] = ['', ['ZpMM_13','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1314] = ['', ['WpM_13','DIGIUP15','RECOUP15','HARVESTUP15']] + +workflows[1343] = ['', ['ZpMM_2250_13TeV_Tauola','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1344] = ['', ['ZpEE_2250_13TeV_Tauola','DIGIUP15','RECOUP15','HARVESTUP15']] +workflows[1345] = ['', ['ZpTT_1500_13TeV_Tauola','DIGIUP15','RECOUP15','HARVESTUP15']] + ### HI test ### workflows[140] = ['',['HydjetQ_MinBias_2760GeV','DIGIHI','RECOHI','HARVESTHI']] workflows[141] = ['',['HydjetQ_B0_2760GeV','DIGIHI','RECOHI','HARVESTHI']] workflows[142] = ['',['HydjetQ_B8_2760GeV','DIGIHI','RECOHI','HARVESTHI']] +workflows[143] = ['',['HydjetQ_B3_2760GeV','DIGIHI','RECOHI','HARVESTHI']] +#workflows[144] = ['',['HydjetQ_B5_2760GeV','DIGIHI','RECOHI','HARVESTHI']] ### pPb test ### workflows[280]= ['',['AMPT_PPb_5020GeV_MinimumBias','DIGI','RECO','HARVEST']] - diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index a4a972be657d5..76a5e9b5f0020 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -1296,7 +1296,7 @@ def genvalid(fragment,d,suffix='all',fi=''): # step2 step2Defaults = { - '-s' : 'DIGI,L1,DIGI2RAW,HLT:@relval,RAW2DIGI,L1Reco', + '-s' : 'DIGI:pdigi_valid,L1,DIGI2RAW,HLT:@relval,RAW2DIGI,L1Reco', '--datatier' : 'GEN-SIM-DIGI-RAW-HLTDEBUG', '--eventcontent': 'FEVTDEBUGHLT', '--conditions' : 'auto:startup', @@ -1323,7 +1323,7 @@ def genvalid(fragment,d,suffix='all',fi=''): #for 2017 -step2Upg2017Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'auto:upgrade2017', '--datatier':'GEN-SIM-DIGI-RAW', '--magField' : '38T_PostLS1', @@ -1334,7 +1334,7 @@ def genvalid(fragment,d,suffix='all',fi=''): } steps['DIGIUP17']=merge([step2Upg2017Defaults]) -step2Upg2017puDefaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017puDefaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'auto:upgrade2017', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1351,7 +1351,7 @@ def genvalid(fragment,d,suffix='all',fi=''): #addForAll(step2,{'--process':'DIGI'}) #for 2019 -step2Upg2019Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'auto:upgrade2019', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1363,7 +1363,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['DIGIUP19']=merge([step2Upg2019Defaults]) -step2Upg2019puDefaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019puDefaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'auto:upgrade2019', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1383,7 +1383,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - STARTUP set of reference -step2Upg2017_START_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_START_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_150_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1396,7 +1396,7 @@ def genvalid(fragment,d,suffix='all',fi=''): -step2Upg2017pu_START_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017pu_START_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_150_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1413,7 +1413,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 300fb-1 -step2Upg2017_300_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_300_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_300_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1424,7 +1424,7 @@ def genvalid(fragment,d,suffix='all',fi=''): } steps['DIGIUP17300']=merge([step2Upg2017_300_Defaults]) -step2Upg2017pu_300_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017pu_300_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_300_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1440,7 +1440,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 300fb-1 COMPLETE ECAK -step2Upg2017_300comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_300comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_300_62C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1453,7 +1453,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 500fb-1 -step2Upg2017_500_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_500_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_500_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1465,7 +1465,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['DIGIUP17500']=merge([step2Upg2017_500_Defaults]) -step2Upg2017pu_500_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017pu_500_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_500_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1482,7 +1482,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 -step2Upg2017_1000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_1000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_100062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1493,7 +1493,7 @@ def genvalid(fragment,d,suffix='all',fi=''): } steps['DIGIUP171000']=merge([step2Upg2017_1000_Defaults]) -step2Upg2017pu_1000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017pu_1000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_100062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1508,7 +1508,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 COMPLETE ECAL -step2Upg2017_1000comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_1000comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_100062C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1521,7 +1521,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 tkid -step2Upg2017_1000_TkId_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_1000_TkId_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_100062E2A::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1534,7 +1534,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 tkid COMPLETE ECAL -step2Upg2017_1000comp_TkId_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_1000comp_TkId_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_100062C2A::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1548,7 +1548,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 3000fb-1 _ -step2Upg2017_3000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_3000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_300062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1562,7 +1562,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 3000fb-1 _ COMPLETE ECAL -step2Upg2017_3000comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2017_3000comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W17_300062C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1575,7 +1575,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - STARTUP set of reference -step2Upg2019_START_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_START_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_150_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1588,7 +1588,7 @@ def genvalid(fragment,d,suffix='all',fi=''): -step2Upg2019pu_START_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019pu_START_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_150_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1605,7 +1605,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 300fb-1 -step2Upg2019_300_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_300_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_300_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1616,7 +1616,7 @@ def genvalid(fragment,d,suffix='all',fi=''): } steps['DIGIUP19300']=merge([step2Upg2019_300_Defaults]) -step2Upg2019pu_300_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019pu_300_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_300_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1632,7 +1632,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 300fb-1 COMPLETE ECAK -step2Upg2019_300comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_300comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_300_62C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1645,7 +1645,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 500fb-1 -step2Upg2019_500_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_500_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_500_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1657,7 +1657,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['DIGIUP19500']=merge([step2Upg2019_500_Defaults]) -step2Upg2019pu_500_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019pu_500_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_500_62E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1674,7 +1674,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 -step2Upg2019_1000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_1000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_100062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1685,7 +1685,7 @@ def genvalid(fragment,d,suffix='all',fi=''): } steps['DIGIUP191000']=merge([step2Upg2019_1000_Defaults]) -step2Upg2019pu_1000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019pu_1000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_100062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1700,7 +1700,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 COMPLETE ECAL -step2Upg2019_1000comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_1000comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_100062C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1713,7 +1713,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 tkid -step2Upg2019_1000_TkId_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_1000_TkId_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_100062E2A::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1726,7 +1726,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 1000fb-1 tkid COMPLETE ECAL -step2Upg2019_1000comp_TkId_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_1000comp_TkId_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_100062C2A::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1740,7 +1740,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 3000fb-1 _ -step2Upg2019_3000_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_3000_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_300062E2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -1754,7 +1754,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ####DIGI AGING VALIDATION - 3000fb-1 _ COMPLETE ECAL -step2Upg2019_3000comp_Defaults = {'-s':'DIGI,L1,DIGI2RAW', +step2Upg2019_3000comp_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW', '--conditions':'W19_300062C2::All', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -2348,7 +2348,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['RECOUP193000COMP']=merge([step3Up2019_3000comp_Defaults]) #for 2023 BE -step3Up2023_BE_Defaults = {'-s':'DIGI,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', +step3Up2023_BE_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', '--conditions':'auto:upgradePLS3', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -2362,7 +2362,7 @@ def genvalid(fragment,d,suffix='all',fi=''): #for 2023 BE5D -step3Up2023_BE5D_Defaults = {'-s':'DIGI,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', +step3Up2023_BE5D_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', '--conditions':'auto:upgradePLS3', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -2375,7 +2375,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['RECOUP23_BE5D']=merge([step3Up2023_BE5D_Defaults]) -step3Up2023_LB4_Defaults = {'-s':'DIGI,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', +step3Up2023_LB4_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', '--conditions':'auto:upgradePLS3', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -2387,7 +2387,7 @@ def genvalid(fragment,d,suffix='all',fi=''): steps['RECOUP23_LB4']=merge([step3Up2023_LB4_Defaults]) -step3Up2023_LB6_Defaults = {'-s':'DIGI,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', +step3Up2023_LB6_Defaults = {'-s':'DIGI:pdigi_valid,L1,DIGI2RAW,L1TrackTrigger,RECO:pixeltrackerlocalreco', '--conditions':'auto:upgradePLS3', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', @@ -2403,7 +2403,7 @@ def genvalid(fragment,d,suffix='all',fi=''): ########################### split be5d into three steps -step2Up2023_BE5D_Defaults = {'-s':'DIGI,L1,L1TrackTrigger,DIGI2RAW', +step2Up2023_BE5D_Defaults = {'-s':'DIGI:pdigi_valid,L1,L1TrackTrigger,DIGI2RAW', '--conditions':'auto:upgradePLS3', '--datatier':'GEN-SIM-DIGI-RAW', '-n':'10', diff --git a/Configuration/StandardSequences/python/DigiCosmics_cff.py b/Configuration/StandardSequences/python/DigiCosmics_cff.py index 32a9f64f65f82..5c6bbc906ee99 100644 --- a/Configuration/StandardSequences/python/DigiCosmics_cff.py +++ b/Configuration/StandardSequences/python/DigiCosmics_cff.py @@ -53,5 +53,5 @@ doAllDigi = cms.Sequence(calDigi+muonDigi) pdigi = cms.Sequence(cms.SequencePlaceholder("randomEngineStateProducer")*cms.SequencePlaceholder("mix")*doAllDigi) - +pdigi_valid = cms.Sequence(pdigi) diff --git a/Configuration/StandardSequences/python/Digi_cff.py b/Configuration/StandardSequences/python/Digi_cff.py index d0ed390fc852a..caaa816fc6a8a 100644 --- a/Configuration/StandardSequences/python/Digi_cff.py +++ b/Configuration/StandardSequences/python/Digi_cff.py @@ -27,4 +27,4 @@ doAllDigi = cms.Sequence(calDigi+muonDigi) pdigi = cms.Sequence(cms.SequencePlaceholder("randomEngineStateProducer")*cms.SequencePlaceholder("mix")*doAllDigi*addPileupInfo) - +pdigi_valid = cms.Sequence(pdigi) diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py index 1f2dea0e18320..44282009c8c27 100644 --- a/Configuration/StandardSequences/python/GeometryConf.py +++ b/Configuration/StandardSequences/python/GeometryConf.py @@ -15,6 +15,7 @@ 'Extended2015' : 'Extended2015,Extended2015Reco', 'Extended2017' : 'Extended2017,Extended2017Reco', 'Extended2019' : 'Extended2019,Extended2019Reco', + 'Extended2023' : 'Extended2023,Extended2023Reco', 'ExtendedPhase2TkBE' : 'ExtendedPhase2TkBE,ExtendedPhase2TkBEReco', 'ExtendedPhase2TkBE5D' : 'ExtendedPhase2TkBE5D,ExtendedPhase2TkBE5DReco', 'ExtendedPhase2TkLB_6PS' : 'ExtendedPhase2TkLB6PS,ExtendedPhase2TkLB6PSReco', diff --git a/Configuration/StandardSequences/python/Mixing.py b/Configuration/StandardSequences/python/Mixing.py index eca825410e78a..25443f5abb321 100644 --- a/Configuration/StandardSequences/python/Mixing.py +++ b/Configuration/StandardSequences/python/Mixing.py @@ -14,40 +14,40 @@ def addMixingScenario(label,dict): ##full sim section addMixingScenario("156BxLumiPileUp",{'file': 'SimGeneral.MixingModule.StageA156Bx_cfi'}) -addMixingScenario("E10TeV_FIX_1_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_FIX_1_BX432_cfi'}) -addMixingScenario("E10TeV_FIX_2_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_FIX_1_BX432_cfi', 'N': 2}) -addMixingScenario("E10TeV_FIX_3_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_FIX_1_BX432_cfi', 'N': 3}) -addMixingScenario("E10TeV_FIX_5_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_FIX_1_BX432_cfi', 'N': 5}) +addMixingScenario("E10TeV_FIX_1_BX432",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 50, 'B': (-5,3), 'N': 1}) +addMixingScenario("E10TeV_FIX_2_BX432",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 50, 'B': (-5,3), 'N': 2}) +addMixingScenario("E10TeV_FIX_3_BX432",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 50, 'B': (-5,3), 'N': 3}) +addMixingScenario("E10TeV_FIX_5_BX432",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 50, 'B': (-5,3), 'N': 5}) addMixingScenario("E10TeV_L13E31_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_L13E31_BX432_cfi'}) addMixingScenario("E10TeV_L21E31_BX432",{'file': 'SimGeneral.MixingModule.mix_E10TeV_L21E31_BX432_cfi'}) addMixingScenario("E14TeV_L10E33_BX2808",{'file': 'SimGeneral.MixingModule.mix_E14TeV_L10E33_BX2808_cfi'}) addMixingScenario("E14TeV_L28E32_BX2808",{'file': 'SimGeneral.MixingModule.mix_E14TeV_L28E32_BX2808_cfi'}) -addMixingScenario("E7TeV_AVE_01_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 0.1}) -addMixingScenario("E7TeV_AVE_02_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 0.2}) -addMixingScenario("E7TeV_AVE_05_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 0.5}) -addMixingScenario("E7TeV_AVE_10_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 10}) -addMixingScenario("E7TeV_AVE_1_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_1_BX156_cfi', 'N': 1}) -addMixingScenario("E7TeV_AVE_1_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 1}) -addMixingScenario("E7TeV_AVE_20_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 20}) -addMixingScenario("E7TeV_AVE_2_8_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_8_BX_50ns_cfi'}) -addMixingScenario("E7TeV_AVE_2_8_BXgt50ns_intime_only",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_8_BXgt50ns_intime_only_cfi'}) -addMixingScenario("E7TeV_AVE_2_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_1_BX156_cfi','N': 2}) -addMixingScenario("E7TeV_AVE_2_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi'}) -addMixingScenario("E7TeV_AVE_3_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_1_BX156_cfi','N': 3}) -addMixingScenario("E7TeV_AVE_50_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi','N': 50}) -addMixingScenario("E7TeV_AVE_5_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_1_BX156_cfi', 'N': 5}) -addMixingScenario("E7TeV_AVE_5_BX2808",{'file': 'SimGeneral.MixingModule.mix_E7TeV_AVE_2_BX2808_cfi', 'N': 5}) -addMixingScenario("E7TeV_FIX_1_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FIX_1_BX156_cfi'}) -addMixingScenario("E7TeV_FIX_2_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FIX_1_BX156_cfi', 'N': 2}) -addMixingScenario("E7TeV_FIX_3_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FIX_1_BX156_cfi', 'N': 3}) -addMixingScenario("E7TeV_FIX_5_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FIX_1_BX156_cfi', 'N': 5}) +addMixingScenario("E7TeV_AVE_01_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 0.1}) +addMixingScenario("E7TeV_AVE_02_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 0.2}) +addMixingScenario("E7TeV_AVE_05_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 0.5}) +addMixingScenario("E7TeV_AVE_1_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 1.}) +addMixingScenario("E7TeV_AVE_2_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 2.}) +addMixingScenario("E7TeV_AVE_5_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 5.}) +addMixingScenario("E7TeV_AVE_10_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 10.}) +addMixingScenario("E7TeV_AVE_20_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 20.}) +addMixingScenario("E7TeV_AVE_50_BX2808",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 25, 'B': (-5,3), 'N': 50.}) +addMixingScenario("E7TeV_AVE_1_BX156",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 450, 'B': (-5,3), 'N': 1.}) +addMixingScenario("E7TeV_AVE_2_BX156",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 450, 'B': (-5,3), 'N': 2.}) +addMixingScenario("E7TeV_AVE_3_BX156",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 450, 'B': (-5,3), 'N': 3.}) +addMixingScenario("E7TeV_AVE_5_BX156",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 450, 'B': (-5,3), 'N': 5.}) +addMixingScenario("E7TeV_AVE_2_8_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 50, 'B': (-3,2), 'N': 2.8}) +addMixingScenario("E7TeV_AVE_2_8_BXgt50ns_intime_only",{'file': 'SimGeneral.MixingModule.mix_POISSON_avergage_cfi', 'BX': 450, 'B': (0,0), 'N': 2.8}) +addMixingScenario("E7TeV_FIX_1_BX156",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 450, 'B': (-5,3), 'N': 1}) +addMixingScenario("E7TeV_FIX_2_BX156",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 450, 'B': (-5,3), 'N': 2}) +addMixingScenario("E7TeV_FIX_3_BX156",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 450, 'B': (-5,3), 'N': 3}) +addMixingScenario("E7TeV_FIX_5_BX156",{'file': 'SimGeneral.MixingModule.mix_FIX_average_cfi', 'BX': 450, 'B': (-5,3), 'N': 5}) addMixingScenario("E7TeV_L34E30_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_L34E30_BX156_cfi'}) addMixingScenario("E7TeV_L69E30_BX156",{'file': 'SimGeneral.MixingModule.mix_E7TeV_L69E30_BX156_cfi'}) -addMixingScenario("E8TeV_AVE_4_BX_50ns",{'file':'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50,'B': (-3,2),'N': 4}) -addMixingScenario("E8TeV_AVE_10_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-3,2), 'N': 10}) -addMixingScenario("E8TeV_AVE_10_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-3,2), 'N': 10}) -addMixingScenario("E8TeV_AVE_16_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi'}) -addMixingScenario("E8TeV_AVE_16_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX': 50, 'B': (-3,2)}) +addMixingScenario("E8TeV_AVE_4_BX_50ns",{'file':'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50,'B': (-3,2),'N': 4}) +addMixingScenario("E8TeV_AVE_10_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-3,2), 'N': 10}) +addMixingScenario("E8TeV_AVE_10_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-3,2), 'N': 10}) +addMixingScenario("E8TeV_AVE_16_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-3,2), 'N': 16}) +addMixingScenario("E8TeV_AVE_16_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-3,2), 'N': 16}) addMixingScenario("E8TeV_AVE_10_BX_50ns_300ns_spread",{'file':'SimGeneral.MixingModule.mix_E8TeV_AVE_10_BX_50ns_300ns_spread_cfi'}) addMixingScenario("E8TeV_AVE_10_BX_25ns_300ns_spread",{'file':'SimGeneral.MixingModule.mix_E8TeV_AVE_10_BX_25ns_300ns_spread_cfi'}) addMixingScenario("HiMix",{'file': 'SimGeneral.MixingModule.HiEventMixing_cff'}) @@ -70,9 +70,9 @@ def addMixingScenario(label,dict): addMixingScenario("E7TeV_Flat20_AllLate_50ns",{'file': 'SimGeneral.MixingModule.mix_E7TeV_Flat20_AllLate_50ns_cfi'}) addMixingScenario("E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT'}) addMixingScenario("E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT",{'file': 'SimGeneral.MixingModule.mix_E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT_cfi'}) -addMixingScenario("E7TeV_Ave18p4_50ns", {'file': 'SimGeneral.MixingModule.mix_E7TeV_Ave18p4_50ns_cfi'}) -addMixingScenario("E7TeV_Ave23_50ns", {'file': 'SimGeneral.MixingModule.mix_E7TeV_Ave18p4_50ns_cfi', 'N': 23 }) -addMixingScenario("E7TeV_Ave32_50ns", {'file': 'SimGeneral.MixingModule.mix_E7TeV_Ave18p4_50ns_cfi', 'N': 32 }) +addMixingScenario("E7TeV_Ave18p4_50ns", {'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-3,2), 'N': 18.4}) +addMixingScenario("E7TeV_Ave23_50ns", {'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-3,2), 'N': 23}) +addMixingScenario("E7TeV_Ave32_50ns", {'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-3,2), 'N': 32}) addMixingScenario("E7TeV_Ave25_50ns_PoissonOOTPU",{'file': 'SimGeneral.MixingModule.mix_E7TeV_Ave25_50ns_PoissonOOTPU_cfi'}) addMixingScenario("E7TeV_Ave25_25ns_PoissonOOTPU",{'file': 'SimGeneral.MixingModule.mix_E7TeV_Ave25_25ns_PoissonOOTPU_cfi'}) addMixingScenario("E7TeV_Fall2011ReDigi_prelim_50ns_PoissonOOT",{'file': 'SimGeneral.MixingModule.mix_E7TeV_Fall2011ReDigi_prelim_50ns_PoissonOOT_cfi'}) @@ -95,6 +95,10 @@ def addMixingScenario(label,dict): addMixingScenario("E8TeV_2012_25nsRunning_TrainFrontOOTPU",{'file': 'SimGeneral.MixingModule.mix_E8TeV_2012_25nsRunning_TrainFrontOOTPU_cfi'}) addMixingScenario("2012_Summer_50ns_PoissonOOTPU_FixedInTime0",{'file': 'SimGeneral.MixingModule.mix_2012_Summer_50ns_PoissonOOTPU_FixedInTime0_cfi'}) addMixingScenario("2012_Summer_50ns_PoissonOOTPU_FixedInTime30",{'file': 'SimGeneral.MixingModule.mix_2012_Summer_50ns_PoissonOOTPU_FixedInTime30_cfi'}) +addMixingScenario("E8TeV_2012_run198588_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_run198588_BX_50ns_cfi'}) +addMixingScenario("E8TeV_2012_run203002_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_run203002_BX_50ns_cfi'}) +addMixingScenario("E8TeV_2012_run209148_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_run209148_BX_25ns_cfi'}) +addMixingScenario("E8TeV_2012_ZmumugSkim",{'file': 'SimGeneral.MixingModule.mix_E8TeV_zmmg_skim_BX_50ns_cfi'}) addMixingScenario("ProdStep2",{'file': 'SimGeneral.MixingModule.mixProdStep2_cfi'}) addMixingScenario("fromDB",{'file': 'SimGeneral.MixingModule.mix_fromDB_cfi'}) ##fastsim section @@ -110,34 +114,34 @@ def addMixingScenario(label,dict): #scenarios for L1 tdr work -addMixingScenario("AVE_20_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 20}) -addMixingScenario("AVE_20_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 20}) -addMixingScenario("AVE_25_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 25}) -addMixingScenario("AVE_25_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 25}) -addMixingScenario("AVE_35_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 35}) -addMixingScenario("AVE_35_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 35}) -addMixingScenario("AVE_40_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 40}) -addMixingScenario("AVE_40_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 40}) -addMixingScenario("AVE_45_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 45}) -addMixingScenario("AVE_50_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 50}) -addMixingScenario("AVE_50_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 50}) -addMixingScenario("AVE_70_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 70}) -addMixingScenario("AVE_70_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 70}) -addMixingScenario("AVE_75_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 75}) -addMixingScenario("AVE_75_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 75}) -addMixingScenario("AVE_80_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 80}) -addMixingScenario("AVE_100_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 100}) -addMixingScenario("AVE_100_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 100}) -addMixingScenario("AVE_125_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 125}) -addMixingScenario("AVE_125_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 125}) -addMixingScenario("AVE_150_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 150}) -addMixingScenario("AVE_150_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 150}) -addMixingScenario("AVE_175_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 175}) -addMixingScenario("AVE_175_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 175}) -addMixingScenario("AVE_200_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 200}) -addMixingScenario("AVE_200_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 200}) -addMixingScenario("AVE_140_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':50, 'B': (-12,3), 'N': 140}) -addMixingScenario("AVE_140_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_E8TeV_AVE_16_BX_25ns_cfi','BX':25, 'B': (-12,3), 'N': 140}) +addMixingScenario("AVE_20_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 20}) +addMixingScenario("AVE_20_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 20}) +addMixingScenario("AVE_25_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 25}) +addMixingScenario("AVE_25_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 25}) +addMixingScenario("AVE_35_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 35}) +addMixingScenario("AVE_35_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 35}) +addMixingScenario("AVE_40_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 40}) +addMixingScenario("AVE_40_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 40}) +addMixingScenario("AVE_45_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 45}) +addMixingScenario("AVE_50_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 50}) +addMixingScenario("AVE_50_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 50}) +addMixingScenario("AVE_70_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 70}) +addMixingScenario("AVE_70_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 70}) +addMixingScenario("AVE_75_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 75}) +addMixingScenario("AVE_75_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 75}) +addMixingScenario("AVE_80_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 80}) +addMixingScenario("AVE_100_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 100}) +addMixingScenario("AVE_100_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 100}) +addMixingScenario("AVE_125_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 125}) +addMixingScenario("AVE_125_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 125}) +addMixingScenario("AVE_150_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 150}) +addMixingScenario("AVE_150_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 150}) +addMixingScenario("AVE_175_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 175}) +addMixingScenario("AVE_175_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 175}) +addMixingScenario("AVE_200_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 200}) +addMixingScenario("AVE_200_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 200}) +addMixingScenario("AVE_140_BX_50ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':50, 'B': (-12,3), 'N': 140}) +addMixingScenario("AVE_140_BX_25ns",{'file': 'SimGeneral.MixingModule.mix_POISSON_average_cfi','BX':25, 'B': (-12,3), 'N': 140}) MixingDefaultKey = '2012_Summer_50ns_PoissonOOTPU' diff --git a/DQM/SiPixelMonitorClient/interface/SiPixelWebInterface.h b/DQM/SiPixelMonitorClient/interface/SiPixelWebInterface.h index b5aa3fdf90be8..eb7129d5c4be6 100644 --- a/DQM/SiPixelMonitorClient/interface/SiPixelWebInterface.h +++ b/DQM/SiPixelMonitorClient/interface/SiPixelWebInterface.h @@ -37,11 +37,12 @@ class SiPixelWebInterface void handleEDARequest(xgi::Input* in, xgi::Output* out, - int niter); + int niter, + bool isUpgrade); SiPixelActionType getActionFlag() {return theActionFlag;} void setActionFlag(SiPixelActionType flag) {theActionFlag = flag;} - void performAction(); + void performAction(bool isUpgrade); bool readConfiguration(int& tkmap_freq, int& summary_freq); diff --git a/DQM/SiPixelMonitorClient/src/SiPixelActionExecutor.cc b/DQM/SiPixelMonitorClient/src/SiPixelActionExecutor.cc index 8d0d55239743c..59607bf0bb3f3 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelActionExecutor.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelActionExecutor.cc @@ -1288,7 +1288,7 @@ void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore* bei, int actual_size = gsum_mes.size(); int wanted_size = me_names.size(); if (actual_size != wanted_size) { */ - if (first_subdir){ + if (first_subdir && !isUpgrade){ // bool create_me = true; nbin = me->getTH1F()->GetNbinsX(); string me_name = prefix + "_" + (*iv) + "_" + dir_name; @@ -1302,9 +1302,21 @@ void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore* bei, else if(dir_name.find("Blade")!=string::npos) nbin=7; //else if(dir_name.find("Panel_1")!=string::npos) nbin=4; //else if(dir_name.find("Panel_2")!=string::npos) nbin=3; - //cout << dir_name.c_str() << "\t" << nbin << endl; - getGrandSummaryME(bei, nbin, me_name, gsum_mes); - } + //cout << dir_name.c_str() << "\t" << nbin << endl; + getGrandSummaryME(bei, nbin, me_name, gsum_mes); + } else if(first_subdir && isUpgrade){ + nbin = me->getTH1F()->GetNbinsX(); + string me_name = prefix + "_" + (*iv) + "_" + dir_name; + if((*iv)=="adcCOMB"||(*iv)=="chargeCOMB") me_name = "ALLMODS_" + (*iv) + "_" + dir_name; + else if(prefix=="SUMOFF" && dir_name=="Endcap") nbin=336; + else if(dir_name=="Endcap") nbin=672; + else if(prefix=="SUMOFF" && dir_name.find("HalfCylinder")!=string::npos) nbin=84; + else if(dir_name.find("HalfCylinder")!=string::npos) nbin=168; + else if(prefix=="SUMOFF" && dir_name.find("Disk")!=string::npos) nbin=28; + else if(dir_name.find("Disk")!=string::npos) nbin=56; + else if(dir_name.find("Blade")!=string::npos) nbin=2; + getGrandSummaryME(bei, nbin, me_name, gsum_mes); + } /* for (vector::const_iterator igm = gsum_mes.begin(); @@ -1379,23 +1391,25 @@ void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore* bei, }else if((*igm)->getName().find("ALLMODS_chargeCOMB_")!=string::npos){ nbin_subdir=100; }else if((*igm)->getName().find("Panel_") != string::npos){ - nbin_subdir=7; -// }else if((*igm)->getName().find("Panel_1") != string::npos){ -// nbin_subdir=4; -// }else if((*igm)->getName().find("Panel_2") != string::npos){ -// nbin_subdir=3; + nbin_subdir=2; + // }else if((*igm)->getName().find("Panel_1") != string::npos){ + // nbin_subdir=4; + // }else if((*igm)->getName().find("Panel_2") != string::npos){ + // nbin_subdir=3; }else if((*igm)->getName().find("Blade") != string::npos){ if((*im).find("_1") != string::npos) nbin_subdir=1; if((*im).find("_2") != string::npos) {nbin_i=1; nbin_subdir=1;} }else if((*igm)->getName().find("Disk") != string::npos){ - nbin_i=((cnt-1)%17); nbin_subdir=1; + nbin_i=((cnt-1)%28)*2; nbin_subdir=2; }else if((*igm)->getName().find("HalfCylinder") != string::npos){ if(prefix!="SUMOFF"){ nbin_subdir=56; if((*im).find("_2") != string::npos) nbin_i=56; + if((*im).find("_3") != string::npos) nbin_i=112; }else{ - nbin_subdir=17; - if((*im).find("_2") != string::npos) nbin_i=17; + nbin_subdir=28; + if((*im).find("_2") != string::npos) nbin_i=28; + if((*im).find("_3") != string::npos) nbin_i=56; } }else if((*igm)->getName().find("Endcap") != string::npos){ if(prefix!="SUMOFF"){ @@ -1404,10 +1418,10 @@ void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore* bei, if((*im).find("_pI") != string::npos) nbin_i=336; if((*im).find("_pO") != string::npos) nbin_i=504; }else{ - nbin_subdir=28; - if((*im).find("_mO") != string::npos) nbin_i=28; - if((*im).find("_pI") != string::npos) nbin_i=56; - if((*im).find("_pO") != string::npos) nbin_i=84; + nbin_subdir=84; + if((*im).find("_mO") != string::npos) nbin_i=84; + if((*im).find("_pI") != string::npos) nbin_i=168; + if((*im).find("_pO") != string::npos) nbin_i=252; } } } @@ -1537,15 +1551,15 @@ MonitorElement* SiPixelActionExecutor::getSummaryME(DQMStore* bei, }//endifNOTUpgrade else if (isUpgrade) { if(me_name.find("SUMOFF")==string::npos){ - if(me_name.find("Blade_")!=string::npos)me = bei->book1D(me_name.c_str(), me_name.c_str(),7,1.,8.); - else me = bei->book1D(me_name.c_str(), me_name.c_str(),4,1.,5.); -// if(me_name.find("Panel_2")!=string::npos) me = bei->book1D(me_name.c_str(), me_name.c_str(),3,1.,4.); -// else me = bei->book1D(me_name.c_str(), me_name.c_str(),4,1.,5.); + if(me_name.find("Blade_")!=string::npos)me = bei->book1D(me_name.c_str(), me_name.c_str(),2,1.,3.); + else me = bei->book1D(me_name.c_str(), me_name.c_str(),1,1.,2.); + // if(me_name.find("Panel_2")!=string::npos) me = bei->book1D(me_name.c_str(), me_name.c_str(),3,1.,4.); + // else me = bei->book1D(me_name.c_str(), me_name.c_str(),4,1.,5.); }else if(me_name.find("Layer_1")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),6,1.,7.); }else if(me_name.find("Layer_2")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),14,1.,15.); }else if(me_name.find("Layer_3")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),22,1.,23.); }else if(me_name.find("Layer_4")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),32,1.,33.); - }else if(me_name.find("Disk_")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),17,1.,18.); + }else if(me_name.find("Disk_")!=string::npos){ me = bei->book1D(me_name.c_str(), me_name.c_str(),28,1.,29.); } }//endifUpgrade diff --git a/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc b/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc index 6401170fac204..bc698f763a5b6 100644 --- a/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc +++ b/DQM/SiPixelMonitorClient/src/SiPixelEDAClient.cc @@ -235,7 +235,7 @@ void SiPixelEDAClient::analyze(const edm::Event& e, const edm::EventSetup& eSetu // This is needed for plotting with the Pixel Expert GUI (interactive client): sipixelWebInterface_->setActionFlag(SiPixelWebInterface::CreatePlots); - sipixelWebInterface_->performAction(); + sipixelWebInterface_->performAction(isUpgrade_); } } @@ -255,12 +255,12 @@ void SiPixelEDAClient::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, e //if(actionOnLumiSec_ && !Tier0Flag_ && nLumiSecs_ % 1 == 0 ){ if(actionOnLumiSec_ && nLumiSecs_ % 1 == 0 ){ sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary); - sipixelWebInterface_->performAction(); + sipixelWebInterface_->performAction(isUpgrade_); //cout << " Updating efficiency plots" << endl; if(doHitEfficiency_) sipixelActionExecutor_->createEfficiency(bei_, isUpgrade_); //cout << " Checking QTest results " << endl; sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult); - sipixelWebInterface_->performAction(); + sipixelWebInterface_->performAction(isUpgrade_); //cout << " Updating occupancy plots" << endl; sipixelActionExecutor_->createOccupancy(bei_); //cout << " Checking Pixel quality flags " << endl;; @@ -296,12 +296,12 @@ void SiPixelEDAClient::endRun(edm::Run const& run, edm::EventSetup const& eSetup if(actionOnRunEnd_){ //cout << " Updating Summary " << endl; sipixelWebInterface_->setActionFlag(SiPixelWebInterface::Summary); -//IASONAS// sipixelWebInterface_->performAction(); + sipixelWebInterface_->performAction(isUpgrade_); //cout << " Updating efficiency plots" << endl; if(doHitEfficiency_) sipixelActionExecutor_->createEfficiency(bei_, isUpgrade_); //cout << " Checking QTest results " << endl; sipixelWebInterface_->setActionFlag(SiPixelWebInterface::QTestResult); - sipixelWebInterface_->performAction(); + sipixelWebInterface_->performAction(isUpgrade_); //cout << " Updating occupancy plots" << endl; sipixelActionExecutor_->createOccupancy(bei_); //cout << " Checking Pixel quality flags " << endl;; @@ -359,7 +359,7 @@ void SiPixelEDAClient::defaultWebPage(xgi::Input *in, xgi::Output *out) } else { // Handles all HTTP requests of the form int iter = nEvents_/100; - sipixelWebInterface_->handleEDARequest(in, out, iter); + sipixelWebInterface_->handleEDARequest(in, out, iter, isUpgrade_); } // cout<<"...leaving SiPixelEDAClient::defaultWebPage. "<getBEInterface(); CgiReader reader(in); @@ -133,7 +133,7 @@ void SiPixelWebInterface::handleEDARequest(xgi::Input* in,xgi::Output* out, int } else if (requestID == "PlotAsModule") { //theActionFlag = PlotSingleModuleHistos; theActionFlag = NoAction; -//IASONAS// infoExtractor_->getSingleModuleHistos(bei_, requestMap_, out); + infoExtractor_->getSingleModuleHistos(bei_, requestMap_, out, isUpgrade); } else if (requestID == "PlotHistogramFromPath") { //theActionFlag = PlotHistogramFromPath; theActionFlag = NoAction; @@ -151,7 +151,7 @@ void SiPixelWebInterface::handleEDARequest(xgi::Input* in,xgi::Output* out, int //out->getHTTPResponseHeader().addHeader("Expires","Mon, 26 Jul 1997 05:00:00 GMT"); //*out << infoExtractor_->getNamedImage(theMEName).str(); theActionFlag = NoAction; -//IASONAS// infoExtractor_->getTrackerMapHistos(bei_, requestMap_, out); + infoExtractor_->getTrackerMapHistos(bei_, requestMap_, out, isUpgrade); //} else if (requestID == "UpdatePlot") { // string theMEName = get_from_multimap(requestMap_, "MEName"); // out->getHTTPResponseHeader().addHeader("Content-Type", "image/png"); @@ -202,14 +202,14 @@ void SiPixelWebInterface::handleEDARequest(xgi::Input* in,xgi::Output* out, int theActionFlag = dumpModIds; } - performAction(); + performAction(isUpgrade); } //____________________________________________________________________________________________________ // -- Perform action // -void SiPixelWebInterface::performAction() { -//cout<<"entering performAction..."<getBEInterface(); switch (theActionFlag) { case SiPixelWebInterface::CreateTkMap : @@ -228,7 +228,7 @@ void SiPixelWebInterface::performAction() { } case SiPixelWebInterface::Summary : { - //ias actionExecutor_->createSummary(bei_, isUpgrade); + actionExecutor_->createSummary(bei_, isUpgrade); break; } case SiPixelWebInterface::Occupancy : diff --git a/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc b/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc index f3ea443c1aec3..0b6898d16ee89 100644 --- a/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc +++ b/DQM/SiPixelMonitorCluster/src/SiPixelClusterModule.cc @@ -535,9 +535,9 @@ int SiPixelClusterModule::fill(const edmNew::DetSetVector& input LocalPoint clustlp = topol->localPosition( MeasurementPoint(x, y) ); GlobalPoint clustgp = theGeomDet->surface().toGlobal( clustlp ); //**end - if(modon){ - (meCharge_)->Fill((float)charge); - (meSize_)->Fill((int)size); + //if(modon){ + if(modon) (meCharge_)->Fill((float)charge); + if(modon) (meSize_)->Fill((int)size); DQMStore* theDMBE = edm::Service().operator->(); std::string currDir = theDMBE->pwd(); theDMBE->cd("Pixel/Clusters/OffTrack/"); @@ -625,7 +625,7 @@ int SiPixelClusterModule::fill(const edmNew::DetSetVector& input } // (meEdgeHitX_)->Fill((int)edgeHitX); // (meEdgeHitY_)->Fill((int)edgeHitY); - } + //}//endifmodOn //** if(barrel && smileyon){ (meSizeYvsEtaBarrel_)->Fill(clustgp.eta(),sizeY); diff --git a/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc b/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc index 9dcc4a31f9d32..1e4bee2109ced 100644 --- a/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc +++ b/DQM/SiPixelMonitorCluster/src/SiPixelClusterSource.cc @@ -144,7 +144,8 @@ void SiPixelClusterSource::analyze(const edm::Event& iEvent, const edm::EventSet { eventNo++; - if(modOn && !isUpgrade){ + //if(modOn && !isUpgrade){ + if(!isUpgrade){ MonitorElement* meReset = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_1"); MonitorElement* meReset1 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_2"); MonitorElement* meReset2 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_3"); @@ -161,7 +162,8 @@ void SiPixelClusterSource::analyze(const edm::Event& iEvent, const edm::EventSet meReset5->Reset(); meReset6->Reset(); } - }else if(modOn && isUpgrade){ + //}else if(modOn && isUpgrade){ + }else if(isUpgrade){ MonitorElement* meReset = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_1"); MonitorElement* meReset1 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_2"); MonitorElement* meReset2 = theDMBE->get("Pixel/Clusters/OffTrack/position_siPixelClusters_Layer_3"); diff --git a/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc b/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc index b4251c98b2bae..7afa232f30f6b 100644 --- a/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc +++ b/DQM/SiPixelMonitorDigi/src/SiPixelDigiModule.cc @@ -50,6 +50,9 @@ SiPixelDigiModule::~SiPixelDigiModule() {} // Book histograms // void SiPixelDigiModule::book(const edm::ParameterSet& iConfig, int type, bool twoD, bool hiRes, bool reducedSet, bool additInfo, bool isUpgrade) { + + isUpgrade = iConfig.getUntrackedParameter("isUpgrade"); + bool barrel = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelBarrel); bool endcap = DetId(id_).subdetId() == static_cast(PixelSubdetector::PixelEndcap); bool isHalfModule = false; diff --git a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc index 23adff7704a99..dd0f83cfb3e1e 100644 --- a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc +++ b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc @@ -991,7 +991,7 @@ void SiPixelDigiSource::buildStructure(const edm::EventSetup& iSetup){ SiPixelDigiModule* theModule = new SiPixelDigiModule(id, ncols, nrows); thePixelStructure.insert(pair (id,theModule)); - } else if(detId.subdetId() == static_cast(PixelSubdetector::PixelEndcap)) { + } else if((detId.subdetId() == static_cast(PixelSubdetector::PixelEndcap)) && (!isUpgrade)) { LogDebug ("PixelDQM") << " ---> Adding Endcap Module " << detId.rawId() << endl; uint32_t id = detId(); SiPixelDigiModule* theModule = new SiPixelDigiModule(id, ncols, nrows); diff --git a/DQM/SiStripMonitorClient/scripts/getGTfromDQMFile.py b/DQM/SiStripMonitorClient/scripts/getGTfromDQMFile.py old mode 100644 new mode 100755 diff --git a/DQM/SiStripMonitorClient/test/SiStripDQM_OfflineTkMap_Template_cfg_DB.py b/DQM/SiStripMonitorClient/test/SiStripDQM_OfflineTkMap_Template_cfg_DB.py index 5c17c03930109..2804eadc0a9f5 100644 --- a/DQM/SiStripMonitorClient/test/SiStripDQM_OfflineTkMap_Template_cfg_DB.py +++ b/DQM/SiStripMonitorClient/test/SiStripDQM_OfflineTkMap_Template_cfg_DB.py @@ -73,11 +73,8 @@ process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.GlobalTag.globaltag = options.globalTag -# CMSSW version specific customizations -import os -cmsswVersion = os.environ['CMSSW_VERSION'] -if cmsswVersion >= 'CMSSW_6_2_': - process.trackerTopologyConstants = cms.ESProducer('TrackerTopologyEP') +# loading TrackerTopologyEP via GeometryDB (since 62x) +process.load('Configuration.StandardSequences.GeometryDB_cff') # DQM Environment process.load("DQMServices.Core.DQMStore_cfg") diff --git a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc index ae7687aeea7c2..78e4330819b1c 100644 --- a/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc +++ b/DQMOffline/CalibTracker/plugins/SiStripQualityHotStripIdentifierRoot.cc @@ -29,6 +29,7 @@ SiStripQualityHotStripIdentifierRoot::SiStripQualityHotStripIdentifierRoot(const tTopo(nullptr), filename(iConfig.getUntrackedParameter("rootFilename","CondDB_TKCC_20X_v3_hlt_50822.root")), dirpath(iConfig.getUntrackedParameter("rootDirPath","")), + TotNumberOfEvents(0), calibrationthreshold(iConfig.getUntrackedParameter("CalibrationThreshold",10000)) { reader = new SiStripDetInfoFileReader(fp_.fullPath()); diff --git a/DQMOffline/Muon/interface/MuonPFAnalyzer.h b/DQMOffline/Muon/interface/MuonPFAnalyzer.h new file mode 100644 index 0000000000000..1ee7b38820f01 --- /dev/null +++ b/DQMOffline/Muon/interface/MuonPFAnalyzer.h @@ -0,0 +1,110 @@ +#ifndef MuonPFAnalyzer_H +#define MuonPFAnalyzer_H + +/** \class MuRecoAnalyzer + * + * DQM monitoring source for PF muons + * + * $Date: 2013/06/14 10:28:23 $ + * $Revision: 1.1 $ + * \author C. Battilana - CIEMAT + */ + + + +//Base class +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Utilities/interface/InputTag.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + + +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/MuonReco/interface/MuonFwd.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + +#include +#include + +class MuonPFAnalyzer : public edm::EDAnalyzer { + +public: + + typedef std::pair RecoGenPair; + typedef std::vector RecoGenCollection; + + /// Constructor + explicit MuonPFAnalyzer(const edm::ParameterSet&); + + /// Destructor + ~MuonPFAnalyzer(); + + /// Initialize an book plots + virtual void beginRun(edm::Run const &, edm::EventSetup const &); + + /// Perform the PF - TUNEP muon analysis + virtual void analyze(const edm::Event&, const edm::EventSetup&); + +private: + + // Book histos for a given group of plots (e.g. for Tight TUNEP muons) + void bookHistos(const std::string & group); + + // Get a specific plot for a given group + MonitorElement* getPlot(const std::string & group, const std::string & type); + + // Algorithm to identify muon pt track type + int muonTrackType(const reco::Muon * muon, bool usePF); + + // Compute comb. rel. iso. (RECO based) for a given muon + inline float combRelIso(const reco::Muon * muon); + + // Compute delta phi taking into account overflows + inline float fDeltaPhi(float phi1, float phi2); + + // Set labels for code plots + void setCodeLabels(MonitorElement *plot, int nAxis); + + // Fill plot within its range limits + void fillInRange(MonitorElement *plot, int nAxis, double x, double y = 0); + + // Perform reco-gen geometrical matching on a best effort basis + // (if runOnMC == false or no matched gen particles are available gen is set to 0 in theRecoGen) + void recoToGenMatch( edm::Handle & reco, + edm::Handle & gen ); + + const reco::Vertex getPrimaryVertex( edm::Handle &vertex, + edm::Handle &beamSpot ); + + + edm::InputTag theGenLabel; + edm::InputTag theRecoLabel; + edm::InputTag theVertexLabel; + edm::InputTag theBeamSpotLabel; + + std::vector theMuonKinds; + + DQMStore *theDbe; + + std::map > thePlots; + RecoGenCollection theRecoGen; + + double theHighPtTh; + double theRecoGenR; + double theIsoCut; + + bool theRunOnMC; + + std::string theFolder; + +}; +#endif + + diff --git a/DQMOffline/Muon/python/muonMonitors_cff.py b/DQMOffline/Muon/python/muonMonitors_cff.py index 95ea6f7f17cce..f65d87dbd4302 100644 --- a/DQMOffline/Muon/python/muonMonitors_cff.py +++ b/DQMOffline/Muon/python/muonMonitors_cff.py @@ -10,6 +10,7 @@ from DQMOffline.Muon.CSCMonitor_cfi import * from DQMOffline.Muon.muonIdDQM_cff import * from DQMOffline.Muon.muonIsolationDQM_cff import * +from DQMOffline.Muon.muonPFAnalyzer_cff import * #dedicated clients for offline dqm from DQMOffline.Muon.muonQualityTests_cff import * @@ -20,7 +21,7 @@ muonTrackAnalyzers = cms.Sequence(MonitorTrackSTAMuons*MonitorTrackGLBMuons) -muonMonitors = cms.Sequence(muonTrackAnalyzers*dtSegmentsMonitor*cscMonitor*muonAnalyzer*muonIdDQM*dqmInfoMuons*muIsoDQM_seq) +muonMonitors = cms.Sequence(muonTrackAnalyzers*dtSegmentsMonitor*cscMonitor*muonAnalyzer*muonIdDQM*dqmInfoMuons*muIsoDQM_seq*muonPFsequence) muonMonitorsAndQualityTests = cms.Sequence(muonMonitors*muonQualityTests) diff --git a/DQMOffline/Muon/python/muonPFAnalyzer_cff.py b/DQMOffline/Muon/python/muonPFAnalyzer_cff.py new file mode 100644 index 0000000000000..c6a60725b02d0 --- /dev/null +++ b/DQMOffline/Muon/python/muonPFAnalyzer_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +from DQMOffline.Muon.muonPFAnalyzer_cfi import * diff --git a/DQMOffline/Muon/python/muonPFAnalyzer_cfi.py b/DQMOffline/Muon/python/muonPFAnalyzer_cfi.py new file mode 100644 index 0000000000000..8007026040424 --- /dev/null +++ b/DQMOffline/Muon/python/muonPFAnalyzer_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + + +muonPFsequence = cms.EDAnalyzer("MuonPFAnalyzer", + inputTagMuonReco = cms.InputTag("muons"), + inputTagGenParticles = cms.InputTag("genParticles"), + inputTagVertex = cms.InputTag("offlinePrimaryVertices"), + inputTagBeamSpot = cms.InputTag("offlineBeamSpot"), + + runOnMC = cms.bool(False), + folder = cms.string("Muons/MuonPFAnalyzer/"), + + recoGenDeltaR = cms.double(0.1), + relCombIsoCut = cms.double(0.15), + highPtThreshold = cms.double(200.) + ) + + + diff --git a/DQMOffline/Muon/src/MuonPFAnalyzer.cc b/DQMOffline/Muon/src/MuonPFAnalyzer.cc new file mode 100644 index 0000000000000..24edd42d57179 --- /dev/null +++ b/DQMOffline/Muon/src/MuonPFAnalyzer.cc @@ -0,0 +1,602 @@ +/** \class MuRecoAnalyzer + * + * DQM monitoring source for PF muons + * + * $Date: 2013/06/17 09:17:17 $ + * $Revision: 1.2 $ + * \author C. Battilana - CIEMAT + */ +//Base class +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "DQMOffline/Muon/interface/MuonPFAnalyzer.h" + +#include "DataFormats/MuonReco/interface/MuonSelectors.h" + +#include "DataFormats/GeometryVector/interface/Pi.h" +#include "DataFormats/Math/interface/deltaR.h" + +//System included files +#include +#include +#include +#include + +//Root included files +#include "TH1.h" +#include "TH2.h" +#include "TProfile.h" + + +//Event framework included files +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "FWCore/Utilities/interface/InputTag.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + +using namespace edm; +using namespace std; +using namespace reco; + + +MuonPFAnalyzer::MuonPFAnalyzer(const ParameterSet& pSet) + +{ + + LogTrace("MuonPFAnalyzer") << + "[MuonPFAnalyzer] Initializing configuration from parameterset.\n"; + + theGenLabel = pSet.getParameter("inputTagGenParticles"); + theRecoLabel = pSet.getParameter("inputTagMuonReco"); + theBeamSpotLabel = pSet.getParameter("inputTagBeamSpot"); + theVertexLabel = pSet.getParameter("inputTagVertex"); + + theHighPtTh = pSet.getParameter("highPtThreshold"); + theRecoGenR = pSet.getParameter("recoGenDeltaR"); + theIsoCut = pSet.getParameter("relCombIsoCut"); + theRunOnMC = pSet.getParameter("runOnMC"); + + theFolder = pSet.getParameter("folder"); + + theMuonKinds.push_back(""); // all TUNEP/PF muons + theMuonKinds.push_back("Tight"); // tight TUNEP/PF muons + theMuonKinds.push_back("TightIso"); // tight/iso TUNEP/PF muons + + +} + + +MuonPFAnalyzer::~MuonPFAnalyzer() +{ + + LogTrace("MuonPFAnalyzer") << + "[MuonPFAnalyzer] Destructor called.\n"; + +} + + + +// ------------ method called when starting to processes a run ------------ + +void MuonPFAnalyzer::beginRun(edm::Run const &, edm::EventSetup const &) { + + LogTrace("MuonPFAnalyzer") << + "[MuonPFAnalyzer] Booking histograms.\n"; + + //Set up DAQ + theDbe = 0; + theDbe = edm::Service().operator->(); + theDbe->cd(); + + if(theRunOnMC) + { + bookHistos("PF"); + bookHistos("PFTight"); + bookHistos("PFTightIso"); + bookHistos("TUNEP"); + bookHistos("TUNEPTight"); + bookHistos("TUNEPTightIso"); + } + + bookHistos("PFvsTUNEP"); + bookHistos("PFvsTUNEPTight"); + bookHistos("PFvsTUNEPTightIso"); + + +} + +void MuonPFAnalyzer::analyze(const Event& event, + const EventSetup& context) +{ + + Handle muons; + event.getByLabel(theRecoLabel, muons); + + Handle genMuons; + event.getByLabel(theGenLabel, genMuons); + + Handle beamSpot; + event.getByLabel(theBeamSpotLabel, beamSpot); + + Handle vertex; + event.getByLabel(theVertexLabel, vertex); + + const Vertex primaryVertex = getPrimaryVertex(vertex, beamSpot); + + recoToGenMatch(muons, genMuons); + + RecoGenCollection::const_iterator recoGenIt = theRecoGen.begin(); + RecoGenCollection::const_iterator recoGenEnd = theRecoGen.end(); + + for (;recoGenIt!=recoGenEnd;++recoGenIt) + { + + const Muon *muon = recoGenIt->first; + TrackRef tunePTrack = muon->tunePMuonBestTrack(); + + const GenParticle *genMuon = recoGenIt->second; + + vector::const_iterator kindIt = theMuonKinds.begin(); + vector::const_iterator kindEnd = theMuonKinds.end(); + + for (;kindIt!=kindEnd;++kindIt) + { + + const string & kind = (*kindIt); + + if (kind.find("Tight") != string::npos && + !muon::isTightMuon((*muon), primaryVertex)) continue; + + if (kind.find("Iso") != string::npos && + combRelIso(muon) > theIsoCut) continue; + + if (theRunOnMC && genMuon && !muon->innerTrack().isNull() ) // has matched gen muon + { + + if (!tunePTrack.isNull()) + { + + string group = "TUNEP" + kind; + + float pt = tunePTrack->pt(); + float phi = tunePTrack->phi(); + float eta = tunePTrack->eta(); + + float genPt = genMuon->pt(); + float genPhi = genMuon->p4().phi(); + float genEta = genMuon->p4().eta(); + + float dPtOverPt = (pt / genPt) - 1; + + if (pt < theHighPtTh) + { + + fillInRange(getPlot(group,"code"),1,muonTrackType(muon, false)); + fillInRange(getPlot(group,"deltaPtOverPt"),1,dPtOverPt); + } + else + { + fillInRange(getPlot(group,"codeHighPt"),1,muonTrackType(muon, false)); + fillInRange(getPlot(group,"deltaPtOverPtHighPt"),1,dPtOverPt); + } + + fillInRange(getPlot(group,"deltaPt"),1,(pt - genPt)); + fillInRange(getPlot(group,"deltaPhi"),1,fDeltaPhi(genPhi,phi)); + fillInRange(getPlot(group,"deltaEta"),1,genEta - eta); + + } + + if (muon->isPFMuon()) + { + + string group = "PF" + kind; + + // Assumes that default in muon is PF + float pt = muon->pt(); + float phi = muon->p4().phi(); + float eta = muon->p4().eta(); + + float genPt = genMuon->pt(); + float genPhi = genMuon->p4().phi(); + float genEta = genMuon->p4().eta(); + + float dPtOverPt = (pt / genPt) - 1; + + if (pt < theHighPtTh) + { + fillInRange(getPlot(group,"code"),1,muonTrackType(muon, true)); + fillInRange(getPlot(group,"deltaPtOverPt"),1,dPtOverPt); + } + else + { + fillInRange(getPlot(group,"codeHighPt"),1,muonTrackType(muon, true)); + fillInRange(getPlot(group,"deltaPtOverPtHighPt"),1,dPtOverPt); + } + + + fillInRange(getPlot(group,"deltaPt"),1,pt - genPt); + fillInRange(getPlot(group,"deltaPhi"),1,fDeltaPhi(genPhi,phi)); + fillInRange(getPlot(group,"deltaEta"),1,genEta - eta); + + } + + } + + + + if (muon->isPFMuon() && !tunePTrack.isNull() && + !muon->innerTrack().isNull()) // Compare PF with TuneP + Tracker + { // No gen matching needed + + string group = "PFvsTUNEP" + kind; + + float pt = tunePTrack->pt(); + float phi = tunePTrack->phi(); + float eta = tunePTrack->eta(); + + // Assumes that default in muon is PF + float pfPt = muon->pt(); + float pfPhi = muon->p4().phi(); + float pfEta = muon->p4().eta(); + float dPtOverPt = (pfPt / pt) - 1; // TUNEP vs PF pt used as denum. + + + if (pt < theHighPtTh) + { + fillInRange(getPlot(group,"code"),2, + muonTrackType(muon, false),muonTrackType(muon, true)); + fillInRange(getPlot(group,"deltaPtOverPt"),1,dPtOverPt); + } + else + { + fillInRange(getPlot(group,"codeHighPt"), + 2,muonTrackType(muon, false),muonTrackType(muon, true)); + fillInRange(getPlot(group,"deltaPtOverPtHighPt"),1,dPtOverPt); + } + + fillInRange(getPlot(group,"deltaPt"),1,pfPt - pt); + fillInRange(getPlot(group,"deltaPhi"),1,fDeltaPhi(pfPhi,phi)); + fillInRange(getPlot(group,"deltaEta"),1,pfEta - eta); + + + if (theRunOnMC && genMuon) // has a matched gen muon + + { + + float genPt = genMuon->pt(); + float dPtOverPtGen = (pt / genPt) - 1; + float dPtOverPtGenPF = (pfPt / genPt) - 1; + + if (pt < theHighPtTh) + { + fillInRange(getPlot(group,"deltaPtOverPtPFvsTUNEP"), + 2,dPtOverPtGen,dPtOverPtGenPF); + } + else + { + fillInRange(getPlot(group,"deltaPtOverPtHighPtPFvsTUNEP"), + 2,dPtOverPtGen,dPtOverPtGenPF); + } + } + + } + + } + + } + +} + + + + +void MuonPFAnalyzer::bookHistos(const string & group) { + + + + LogTrace("MuonPFAnalyzer") << "[MuonPFAnalyzer] Booking histos for group :" + << group << "\n"; + + theDbe->setCurrentFolder(string(theFolder) + group); + + + bool isPFvsTUNEP = group.find("PFvsTUNEP") != string::npos; + + string hName; + + + hName = "deltaPtOverPt" + group; + thePlots[group]["deltaPtOverPt"] = theDbe->book1D(hName.c_str(),hName.c_str(),101,-1.01,1.01); + + hName = "deltaPtOverPtHighPt" + group; + thePlots[group]["deltaPtOverPtHighPt"] = theDbe->book1D(hName.c_str(),hName.c_str(),101,-1.01,1.01); + + hName = "deltaPt" + group; + thePlots[group]["deltaPt"] = theDbe->book1D(hName.c_str(),hName.c_str(),201.,-10.25,10.25); + + hName = "deltaPhi"+group; + thePlots[group]["deltaPhi"] = theDbe->book1D(hName.c_str(),hName.c_str(),51.,0,.0102); + + hName = "deltaEta"+group; + thePlots[group]["deltaEta"] = theDbe->book1D(hName.c_str(),hName.c_str(),101.,-.00505,.00505); + + + + if (isPFvsTUNEP) { + + + hName = "code"+group; + MonitorElement * plot = theDbe->book2D(hName.c_str(),hName.c_str(),7,-.5,6.5,7,-.5,6.5); + thePlots[group]["code"] = plot; + setCodeLabels(plot,1); + setCodeLabels(plot,2); + + hName = "codeHighPt"+group; + plot = theDbe->book2D(hName.c_str(),hName.c_str(),7,-.5,6.5,7,-.5,6.5); + thePlots[group]["codeHighPt"] = plot; + setCodeLabels(plot,1); + setCodeLabels(plot,2); + + + if (theRunOnMC) + { + hName = "deltaPtOverPtPFvsTUNEP" + group; + thePlots[group]["deltaPtOverPtPFvsTUNEP"] = + theDbe->book2D(hName.c_str(),hName.c_str(), + 101,-1.01,1.01,101,-1.01,1.01); + + hName = "deltaPtOverPtHighPtPFvsTUNEP" + group; + thePlots[group]["deltaPtOverPtHighPtPFvsTUNEP"] = + theDbe->book2D(hName.c_str(),hName.c_str(), + 101,-1.01,1.01,101,-1.01,1.01); + } + } else { + hName = "code"+group; + MonitorElement * plot = theDbe->book1D(hName.c_str(),hName.c_str(),7,-.5,6.5); + thePlots[group]["code"] = plot; + setCodeLabels(plot,1); + + hName = "codeHighPt"+group; + plot = theDbe->book1D(hName.c_str(),hName.c_str(),7,-.5,6.5); + thePlots[group]["codeHighPt"] = plot; + setCodeLabels(plot,1); + } + +} + + +MonitorElement * MuonPFAnalyzer::getPlot(const string & group, + const string & type) { + + map >::iterator groupIt = thePlots.find(group); + if (groupIt == thePlots.end()) { + LogTrace("MuonPFAnalyzer") << "[MuonPFAnalyzer] GROUP : " << group + << " is not a valid plot group. Returning 0.\n"; + return 0; + } + + map::iterator typeIt = groupIt->second.find(type); + if (typeIt == groupIt->second.end()) { + LogTrace("MuonPFAnalyzer") << "[MuonPFAnalyzer] TYPE : " << type + << " is not a valid type for GROUP : " << group + << ". Returning 0.\n"; + return 0; + } + + return typeIt->second; + +} + + +inline float MuonPFAnalyzer::combRelIso(const reco::Muon * muon) +{ + + MuonIsolation iso = muon->isolationR03(); + float combRelIso = (iso.emEt + iso.hadEt + iso.sumPt) / muon->pt(); + + return combRelIso; + +} + + +inline float MuonPFAnalyzer::fDeltaPhi(float phi1, float phi2) { + + float fPhiDiff = fabs(acos(cos(phi1-phi2))); + return fPhiDiff; + +} + + +void MuonPFAnalyzer::setCodeLabels(MonitorElement *plot, int nAxis) +{ + + TAxis *axis = 0; + + TH1 * histo = plot->getTH1(); + if(!histo) return; + + if (nAxis==1) + axis =histo->GetXaxis(); + else if (nAxis == 2) + axis =histo->GetYaxis(); + + if(!axis) return; + + axis->SetBinLabel(1,"Inner Track"); + axis->SetBinLabel(2,"Outer Track"); + axis->SetBinLabel(3,"Combined"); + axis->SetBinLabel(4,"TPFMS"); + axis->SetBinLabel(5,"Picky"); + axis->SetBinLabel(6,"DYT"); + axis->SetBinLabel(7,"None"); + +} + + +void MuonPFAnalyzer::fillInRange(MonitorElement *plot, int nAxis, double x, double y) +{ + + TH1 * histo = plot->getTH1(); + + TAxis *axis[2] = {0, 0}; + axis[0] = histo->GetXaxis(); + if (nAxis == 2) + axis[1] = histo->GetYaxis(); + + double value[2] = {0, 0}; + value[0] = x; + value[1] = y; + + for (int i = 0;iGetXmin(); + double max = axis[i]->GetXmax(); + + if (value[i] <= min) + value[i] = axis[i]->GetBinCenter(1); + + if (value[i] >= max) + value[i] = axis[i]->GetBinCenter(axis[i]->GetNbins()); + } + + if (nAxis == 2) + plot->Fill(value[0],value[1]); + else + plot->Fill(value[0]); + +} + + +int MuonPFAnalyzer::muonTrackType(const Muon * muon, bool usePF) { + + switch ( usePF ? muon->muonBestTrackType() : muon->tunePMuonBestTrackType() ) { + case Muon::InnerTrack : + return 0; + case Muon::OuterTrack : + return 1; + case Muon::CombinedTrack : + return 2; + case Muon::TPFMS : + return 3; + case Muon::Picky : + return 4; + case Muon::DYT : + return 5; + case Muon::None : + return 6; + } + + return 6; + +} + + +void MuonPFAnalyzer::recoToGenMatch( Handle & muons, + Handle & gens ) +{ + + theRecoGen.clear(); + + if (muons.isValid()) + { + + MuonCollection::const_iterator muonIt = muons->begin(); + MuonCollection::const_iterator muonEnd = muons->end(); + + for(; muonIt!=muonEnd; ++muonIt) + { + + float bestDR = 999.; + const GenParticle *bestGen = 0; + + if (theRunOnMC && gens.isValid()) + { + + GenParticleCollection::const_iterator genIt = gens->begin(); + GenParticleCollection::const_iterator genEnd = gens->end(); + + for(; genIt!=genEnd; ++genIt) + { + + if (abs(genIt->pdgId()) == 13 ) + { + + float muonPhi = muonIt->phi(); + float muonEta = muonIt->eta(); + + float genPhi = genIt->phi(); + float genEta = genIt->eta(); + + float dR = deltaR(muonEta,muonPhi, + genEta,genPhi); + + if (dR < theRecoGenR && dR < bestDR) + { + bestDR = dR; + bestGen = &(*genIt); + } + + } + + } + } + + theRecoGen.push_back(RecoGenPair(&(*muonIt), bestGen)); + + } + } + +} + +const reco::Vertex MuonPFAnalyzer::getPrimaryVertex( Handle &vertex, + Handle &beamSpot ) +{ + + Vertex::Point posVtx; + Vertex::Error errVtx; + + bool hasPrimaryVertex = false; + + if (vertex.isValid()) + { + + vector::const_iterator vertexIt = vertex->begin(); + vector::const_iterator vertexEnd = vertex->end(); + + for (;vertexIt!=vertexEnd;++vertexIt) + { + if (vertexIt->isValid() && + !vertexIt->isFake()) + { + posVtx = vertexIt->position(); + errVtx = vertexIt->error(); + hasPrimaryVertex = true; + break; + } + } + } + + if ( !hasPrimaryVertex ) { + + LogInfo("MuonPFAnalyzer") << + "[MuonPFAnalyzer] PrimaryVertex not found, use BeamSpot position instead.\n"; + + posVtx = beamSpot->position(); + errVtx(0,0) = beamSpot->BeamWidthX(); + errVtx(1,1) = beamSpot->BeamWidthY(); + errVtx(2,2) = beamSpot->sigmaZ(); + + } + + const Vertex primaryVertex(posVtx,errVtx); + + return primaryVertex; + +} + + +//define this as a plug-in +DEFINE_FWK_MODULE(MuonPFAnalyzer); diff --git a/DQMServices/Components/python/ROOTData.py b/DQMServices/Components/python/ROOTData.py index 2b7ddfe517a6c..9945a9da79cd3 100644 --- a/DQMServices/Components/python/ROOTData.py +++ b/DQMServices/Components/python/ROOTData.py @@ -2,36 +2,69 @@ from array import array #------------------------------------------------------------------------------- -def tfile_cd(dirname,tfile,debug=False): - """ - Safely re-build and navigate the directory structure. - """ +def tfile_cd(dirname, tfile, debug=False): - if not tfile.GetDirectory(dirname): - gDirectory.cd("/") + """ Safely re-build and navigate the directory structure. dirname is + considered to be an absolute path.""" + + gDirectory.cd("/") + if tfile.GetDirectory(dirname): + gDirectory.cd(dirname) + else: path="" for component in dirname.split('/'): - path+="/%s" %component + path += "/%s" % component if not tfile.GetDirectory(path): gDirectory.mkdir(component) gDirectory.cd(component) - if debug: - print "Current dir" - gDirectory.pwd() + if debug: + print "Current dir %s" % gDirectory.pwd() + +def loadStreamerInfo(literal, debug): + + """Decode a literal made of TStreamerInfo informations and load + streamers that are not part of the currently used version of + ROOT. The implementation is a back-to-bone and simplified version of + the one contained in the DQM GUI source code.""" + + bitsarray = array('B') + bitsarray.fromstring(literal.decode('hex')) + + tbuffer = TBufferFile(TBufferFile.kRead) + tbuffer.Reset(); + tbuffer.SetBuffer(bitsarray, len(bitsarray), False) + while tbuffer.Length() != tbuffer.BufferSize(): + obj = tbuffer.ReadObject(eval("TStreamerInfo.Class()")) + v = obj.GetClassVersion() + c = TClass.GetClass(obj.GetName(), kTRUE) + if c: + c.GetStreamerInfo(); + if c.GetStreamerInfos().At(v): + if debug: + print "skipping already present streamer info version %d for %s" % (v, obj.GetName()) + continue + if debug: + print "Importing streamer info version %d for %s" % (v, obj.GetName()) + obj.BuildCheck(); #------------------------------------------------------------------------------- -def literal2root (literal,rootType,tstreamerinfo=None): - """ - Convert an hexadecimal string into a root-object. The correct TStreamerInfo - is passed in order to avoid inconsistencies. - """ +def literal2root (literal, rootType, debug=False): + + """Convert an hexadecimal string into a root-object. In case a + TStreamerInfo object is passed, this will be decoded by the + loadStreamerInfo function to handle it properly and a None object + will be returned. It is the responsibility of the user not the use + the returned object in this very case.""" + + if rootType == "TStreamerInfo": + loadStreamerInfo(literal, debug) + return None + bitsarray = array('B') bitsarray.fromstring(literal.decode('hex')) tbuffer = TBufferFile(TBufferFile.kRead) - if tstreamerinfo: - tbuffer.IncrementLevel(tstreamerinfo) tbuffer.SetBuffer(bitsarray,len(bitsarray),False) # replace a couple of shortcuts with the real root class name @@ -40,7 +73,7 @@ def literal2root (literal,rootType,tstreamerinfo=None): if rootType == 'TPROF2D': rootType = 'TProfile2D' - root_class=eval(rootType+'.Class()') + root_class = eval(rootType+'.Class()') return tbuffer.ReadObject(root_class) diff --git a/DQMServices/Components/scripts/dqm-access b/DQMServices/Components/scripts/dqm-access index b8247fac62de3..179622b638f79 100755 --- a/DQMServices/Components/scripts/dqm-access +++ b/DQMServices/Components/scripts/dqm-access @@ -250,6 +250,9 @@ op.add_option("-c", dest = "dqmCompliant", op.add_option("-d", "--debug", dest = "debug", action = "store_true", default = False, help = "Show debug information") +op.add_option("-k", "--debug-streamers", dest = "debug_streamers", + action = "store_true", default = False, + help = "Show debug information on StreamerInfo objects") op.add_option("-l", dest = "long_listing", action = "store_true", default = False, help = "Enable long listing") @@ -320,7 +323,7 @@ for sample in find_matching_samples(options): tstreamerinfo = None if options.write: tstreamerinfo = fetch_tstreamerinfo(options, "%(run)d%(dataset)s" % sample) - tstreamerinfo = literal2root(tstreamerinfo, "TStreamerInfo") + literal2root(tstreamerinfo, "TStreamerInfo", options.debug_streamers) nreq = 0 found = [] @@ -378,7 +381,7 @@ for sample in find_matching_samples(options): if cwd != indir: tfile_cd(indir, ofile) cwd = indir - obj = literal2root(item['rootobj'], item['properties']['type'], tstreamerinfo) + obj = literal2root(item['rootobj'], item['properties']['type']) obj.Write() if options.write and ofile: diff --git a/FWCore/Framework/bin/cmsRun.cpp b/FWCore/Framework/bin/cmsRun.cpp index ad94f570486c6..f45190b68a0c9 100644 --- a/FWCore/Framework/bin/cmsRun.cpp +++ b/FWCore/Framework/bin/cmsRun.cpp @@ -335,7 +335,10 @@ int main(int argc, char* argv[]) { context = "Calling EventProcessor::runToCompletion (which does almost everything after beginJob and before endJob)"; proc.on(); bool onlineStateTransitions = false; - proc->runToCompletion(onlineStateTransitions); + edm::EventProcessor::StatusCode status = proc->runToCompletion(onlineStateTransitions); + if (status == edm::EventProcessor::epSignal) { + returnCode = edm::errors::CaughtSignal; + } proc.off(); context = "Calling endJob"; diff --git a/FWCore/Framework/src/EventProcessor.cc b/FWCore/Framework/src/EventProcessor.cc index 0ff363e855033..5411c1c117de1 100644 --- a/FWCore/Framework/src/EventProcessor.cc +++ b/FWCore/Framework/src/EventProcessor.cc @@ -109,18 +109,26 @@ namespace edm { class ScheduleSignalSentry { public: ScheduleSignalSentry(ActivityRegistry* a, typename T::MyPrincipal* principal, EventSetup const* es) : - a_(a), principal_(principal), es_(es) { + a_(a), principal_(principal), es_(es), allowThrow_(false) { if (a_) T::preScheduleSignal(a_, principal_); } - ~ScheduleSignalSentry() { - if (a_) if (principal_) T::postScheduleSignal(a_, principal_, es_); + ~ScheduleSignalSentry() noexcept(false) { + try { + if (a_) if (principal_) T::postScheduleSignal(a_, principal_, es_); + } catch(...) { + if( allowThrow_) {throw;} + } } + void allowThrow() { + allowThrow_ = true; + } private: // We own none of these resources. ActivityRegistry* a_; typename T::MyPrincipal* principal_; EventSetup const* es_; + bool allowThrow_ =true; }; } @@ -1990,6 +1998,7 @@ namespace edm { if(hasSubProcess()) { subProcess_->doBeginRun(runPrincipal, ts); } + sentry.allowThrow(); } FDEBUG(1) << "\tbeginRun " << run.runNumber() << "\n"; if(looper_) { @@ -2011,6 +2020,7 @@ namespace edm { if(hasSubProcess()) { subProcess_->doEndRun(runPrincipal, ts, cleaningUpAfterException); } + sentry.allowThrow(); } FDEBUG(1) << "\tendRun " << run.runNumber() << "\n"; if(looper_) { @@ -2040,6 +2050,7 @@ namespace edm { if(hasSubProcess()) { subProcess_->doBeginLuminosityBlock(lumiPrincipal, ts); } + sentry.allowThrow(); } FDEBUG(1) << "\tbeginLumi " << run << "/" << lumi << "\n"; if(looper_) { @@ -2063,6 +2074,7 @@ namespace edm { if(hasSubProcess()) { subProcess_->doEndLuminosityBlock(lumiPrincipal, ts, cleaningUpAfterException); } + sentry.allowThrow(); } FDEBUG(1) << "\tendLumi " << run << "/" << lumi << "\n"; if(looper_) { @@ -2155,6 +2167,7 @@ namespace edm { if(hasSubProcess()) { subProcess_->doEvent(*pep, ts); } + sentry.allowThrow(); } if(looper_) { diff --git a/FWCore/Services/src/ProcInfoFetcher.cc b/FWCore/Services/src/ProcInfoFetcher.cc index ab7beca91aceb..51e8f11640019 100644 --- a/FWCore/Services/src/ProcInfoFetcher.cc +++ b/FWCore/Services/src/ProcInfoFetcher.cc @@ -52,7 +52,7 @@ namespace { int session; // %d int tty; // %d int tpgid; // %d - unsigned long flags; // %lu + unsigned int flags; // %u [before linux 2.6 %lu] unsigned long minflt; // %lu unsigned long cminflt; // %lu unsigned long majflt; // %lu @@ -65,7 +65,7 @@ namespace { long nice; // %ld long num_threads; // %ld long itrealvalue; // %ld - int starttime; // %d + unsigned long long starttime; // %llu [before linux 2.6 %d] unsigned long vsize; // %lu long rss; // %ld unsigned long rlim; // %lu @@ -87,6 +87,7 @@ namespace { friend Fetcher& operator>>(Fetcher&, long&); friend Fetcher& operator>>(Fetcher&, unsigned int&); friend Fetcher& operator>>(Fetcher&, unsigned long&); + friend Fetcher& operator>>(Fetcher&, unsigned long long&); friend Fetcher& operator>>(Fetcher&, char&); friend Fetcher& operator>>(Fetcher&, std::string&); @@ -116,6 +117,11 @@ namespace { //std::cout <<"ulong '"<(t); } + unsigned long long getULongLong() { + const char* t = getItem(); + //std::cout <<"ulong '"<(t); + } char getChar() { return *getItem(); } @@ -149,6 +155,10 @@ namespace { oValue = iFetch.getULong(); return iFetch; } + Fetcher& operator>>(Fetcher& iFetch, unsigned long long& oValue) { + oValue = iFetch.getULongLong(); + return iFetch; + } Fetcher& operator>>(Fetcher& iFetch, char& oValue) { oValue = iFetch.getChar(); return iFetch; diff --git a/FWCore/Utilities/interface/EDMException.h b/FWCore/Utilities/interface/EDMException.h index 1bdf6deb77429..9f8a7909a7c10 100644 --- a/FWCore/Utilities/interface/EDMException.h +++ b/FWCore/Utilities/interface/EDMException.h @@ -64,7 +64,9 @@ namespace edm { ExceededResourceVSize = 8030, ExceededResourceRSS = 8031, - ExceededResourceTime = 8032 + ExceededResourceTime = 8032, + + CaughtSignal = 9000 }; } diff --git a/FastSimulation/Configuration/python/FamosSequences_cff.py b/FastSimulation/Configuration/python/FamosSequences_cff.py index 59ebd68b138da..4779edd7d29f5 100644 --- a/FastSimulation/Configuration/python/FamosSequences_cff.py +++ b/FastSimulation/Configuration/python/FamosSequences_cff.py @@ -75,14 +75,24 @@ from RecoMET.Configuration.RecoMET_cff import * metreco.remove(BeamHaloId) -caloJetMet = cms.Sequence( +caloJets = cms.Sequence( recoJets+ recoJetIds+ - recoTrackJets+ - recoJetAssociations+recoJPTJets+ - metreco + recoTrackJets ) +jetTrackAssoc = cms.Sequence ( + recoJetAssociations + ) + +jetPlusTracks = cms.Sequence( + recoJPTJets + ) + +metReco = cms.Sequence( + metreco + ) + # Gen Jets @@ -265,7 +275,6 @@ # B tagging from RecoJets.JetAssociationProducers.ak5JTA_cff import * -ak5JetTracksAssociatorAtVertex.tracks = 'generalTracks' from RecoVertex.Configuration.RecoVertex_cff import * from RecoVertex.BeamSpotProducer.BeamSpot_cff import * from RecoBTag.Configuration.RecoBTag_cff import * @@ -287,6 +296,7 @@ cms.SequencePlaceholder("mix") ) lowLevelRecoSequence = cms.Sequence( + siTrackerGaussianSmearingRecHits+ caloRecHits ) famosSimulationSequence = cms.Sequence( @@ -310,6 +320,7 @@ cms.SequencePlaceholder("mix") ) lowLevelRecoSequence = cms.Sequence( + siTrackerGaussianSmearingRecHits+ caloDigis+ caloRecHits ) @@ -425,10 +436,11 @@ muonshighlevelreco+ particleFlowLinks+ caloJetMetGen+ - caloJetMet+ + caloJets+ PFJetMet+ - ic5JetTracksAssociatorAtVertex+ - ak5JetTracksAssociatorAtVertex+ + jetTrackAssoc+ + recoJPTJets+ + metreco+ reducedRecHits+ famosBTaggingSequence+ famosPFTauTaggingSequence @@ -451,10 +463,11 @@ muonshighlevelreco+ particleFlowLinks+ caloJetMetGen+ - caloJetMet+ + caloJets+ PFJetMet+ - ic5JetTracksAssociatorAtVertex+ - ak5JetTracksAssociatorAtVertex+ + jetTrackAssoc+ + recoJPTJets+ + metreco+ reducedRecHits+ famosBTaggingSequence+ famosPFTauTaggingSequence @@ -488,10 +501,11 @@ muonshighlevelreco+ particleFlowLinks+ caloJetMetGen+ - caloJetMet+ + caloJets+ PFJetMet+ - ic5JetTracksAssociatorAtVertex+ - ak5JetTracksAssociatorAtVertex+ + jetTrackAssoc+ + recoJPTJets+ + metreco+ reducedRecHits+ famosBTaggingSequence+ famosPFTauTaggingSequence @@ -583,7 +597,8 @@ famosWithTracksAndCaloTowers+ vertexreco+ caloJetMetGen+ - caloJetMet + caloJets+ + metreco ) ### Standard Jets _cannot_ be done without many other things... @@ -599,7 +614,8 @@ famosParticleFlowSequence+ gsfElectronSequence+ caloJetMetGen+ - caloJetMet + caloJets+ + metreco ) famosWithCaloTowersAndParticleFlow = cms.Sequence( @@ -643,8 +659,10 @@ famosWithBTagging = cms.Sequence( famosWithTracksAndCaloTowers+ vertexreco+ - ak5CaloJets+ - ak5JetTracksAssociatorAtVertex+ + ak5PFJetsCHS+ + PFJetMet+ + jetTrackAssoc+ + metreco+ ecalClustersNoPFBox+ famosMuonSequence+ reducedRecHits+ @@ -688,10 +706,12 @@ egammaHighLevelRecoPostPF+ muonshighlevelreco+ caloJetMetGen+ - caloJetMet+ + caloJets+ + metreco+ PFJetMet+ - ic5JetTracksAssociatorAtVertex+ - ak5JetTracksAssociatorAtVertex+ + jetTrackAssoc+ + recoJPTJets+ + metreco+ reducedRecHits+ famosBTaggingSequence+ famosPFTauTaggingSequence diff --git a/FastSimulation/Validation/python/globalValidation_cff.py b/FastSimulation/Validation/python/globalValidation_cff.py index c359bc3c958f2..31cdc269b785a 100644 --- a/FastSimulation/Validation/python/globalValidation_cff.py +++ b/FastSimulation/Validation/python/globalValidation_cff.py @@ -3,6 +3,12 @@ # Tracking particle module #from FastSimulation.Validation.trackingParticlesFastSim_cfi import * # now deprecated +# TrackingParticle-SimHit associator +from SimGeneral.TrackingAnalysis.simHitTPAssociation_cfi import * +simHitTPAssocProducer.simHitSrc = cms.VInputTag(cms.InputTag('famosSimHits','TrackerHits'), + cms.InputTag("MuonSimHits","MuonCSCHits"), + cms.InputTag("MuonSimHits","MuonDTHits"), + cms.InputTag("MuonSimHits","MuonRPCHits")) from Validation.RecoMET.METRelValForDQM_cff import * @@ -21,7 +27,10 @@ #globalAssociation = cms.Sequence(trackingParticles + recoMuonAssociationFastSim + tracksValidationSelectors + prebTagSequence) -globalAssociation = cms.Sequence(recoMuonAssociationFastSim + tracksValidationSelectors + prebTagSequence) +globalAssociation = cms.Sequence(recoMuonAssociationFastSim + + simHitTPAssocProducer + + tracksValidationSelectors + + prebTagSequence) globalValidation = cms.Sequence(trackingTruthValid +tracksValidationFS diff --git a/Fireworks/Calo/interface/FWECALDetailViewBuilder.h b/Fireworks/Calo/interface/FWECALDetailViewBuilder.h index 5f3d31a4ae4b8..b9ddf0dc36c10 100644 --- a/Fireworks/Calo/interface/FWECALDetailViewBuilder.h +++ b/Fireworks/Calo/interface/FWECALDetailViewBuilder.h @@ -45,6 +45,8 @@ class FWECALDetailViewBuilder { // draw the ecal information with the preset colors // (if any colors have been preset) TEveCaloLego* build(); + + TEveCaloData* buildCaloData(bool xyEE); // set colors of some predefined detids void setColor(Color_t color, const std::vector &detIds); @@ -65,7 +67,7 @@ class FWECALDetailViewBuilder { // fill data void fillData(const EcalRecHitCollection *hits, - TEveCaloDataVec *data); + TEveCaloDataVec *data, bool xyEE); const edm::EventBase *m_event; // the event const FWGeometry *m_geom; // the geometry float m_eta; // eta position view centred on diff --git a/Fireworks/Calo/src/FWECALDetailViewBuilder.cc b/Fireworks/Calo/src/FWECALDetailViewBuilder.cc index 8c5654aefa76d..32b0883279da0 100644 --- a/Fireworks/Calo/src/FWECALDetailViewBuilder.cc +++ b/Fireworks/Calo/src/FWECALDetailViewBuilder.cc @@ -25,7 +25,7 @@ #include -TEveCaloLego* FWECALDetailViewBuilder::build() +TEveCaloData* FWECALDetailViewBuilder::buildCaloData(bool xyEE) { // get the hits from the event @@ -104,7 +104,7 @@ TEveCaloLego* FWECALDetailViewBuilder::build() if( handle_hits.isValid() ) { - fillData( hits, data ); + fillData( hits, data, xyEE ); } // axis @@ -115,7 +115,7 @@ TEveCaloLego* FWECALDetailViewBuilder::build() // add dummy background float x = m_size*TMath::DegToRad(); - if (fabs(m_eta) < 1.5) { + if (fabs(m_eta) < 1.5 || xyEE == false) { etaMin = m_eta -x; etaMax = m_eta +x; phiMin = m_phi -x; @@ -144,7 +144,7 @@ TEveCaloLego* FWECALDetailViewBuilder::build() data->GetPhiLimits(phiMin, phiMax); // printf("data rng %f %f %f %f\n",etaMin, etaMax, phiMin, phiMax ); - if (fabs(m_eta) > 1.5) { + if (fabs(m_eta) > 1.5 && xyEE ) { eta_axis = new TAxis(10, etaMin, etaMax); phi_axis = new TAxis(10, phiMin, phiMax); eta_axis->SetTitle("X[cm]"); @@ -180,8 +180,18 @@ TEveCaloLego* FWECALDetailViewBuilder::build() phi_axis->SetNdivisions(510); data->SetEtaBins(eta_axis); data->SetPhiBins(phi_axis); + return data; +} - +//_______________________________________________________________ +TEveCaloLego* FWECALDetailViewBuilder::build() +{ + TEveCaloData* data = buildCaloData(true); + + double etaMin, etaMax, phiMin, phiMax; + data->GetEtaLimits(etaMin, etaMax); + data->GetPhiLimits(phiMin, phiMax); + // lego TEveCaloLego *lego = new TEveCaloLego(data); lego->SetDrawNumberCellPixels(100); @@ -271,13 +281,13 @@ FWECALDetailViewBuilder::showSuperClusters( Color_t color1, Color_t color2 ) void FWECALDetailViewBuilder::fillData( const EcalRecHitCollection *hits, - TEveCaloDataVec *data ) + TEveCaloDataVec *data, bool xyEE ) { const float barrelCR = m_size*0.0172; // barrel cell range - + // loop on all the detids for( EcalRecHitCollection::const_iterator k = hits->begin(), kEnd = hits->end(); - k != kEnd; ++k ) + k != kEnd; ++k ) { // get reco geometry double centerEta = 0; @@ -285,120 +295,121 @@ FWECALDetailViewBuilder::fillData( const EcalRecHitCollection *hits, const float* points = m_geom->getCorners( k->id().rawId()); if( points != 0 ) { - TEveVector v; - int j = 0; - for( int i = 0; i < 8; ++i ) - { - v += TEveVector( points[j], points[j + 1], points[j + 2] ); - j +=3; - } - centerEta = v.Eta(); - centerPhi = v.Phi(); + TEveVector v; + int j = 0; + for( int i = 0; i < 8; ++i ) + { + v += TEveVector( points[j], points[j + 1], points[j + 2] ); + j +=3; + } + centerEta = v.Eta(); + centerPhi = v.Phi(); } else - fwLog( fwlog::kInfo ) << "cannot get geometry for DetId: "<< k->id().rawId() << ". Ignored.\n"; + fwLog( fwlog::kInfo ) << "cannot get geometry for DetId: "<< k->id().rawId() << ". Ignored.\n"; double size = k->energy() / cosh( centerEta ); - + // check what slice to put in int slice = 0; std::map::const_iterator itr = m_detIdsToColor.find(k->id()); if (itr != m_detIdsToColor.end()) slice = itr->second; - + // if in the EB - if( k->id().subdetId() == EcalBarrel ) + if( k->id().subdetId() == EcalBarrel || xyEE == false ) { - // do phi wrapping - if( centerPhi > m_phi + M_PI) centerPhi -= 2 * M_PI; - if( centerPhi < m_phi - M_PI) centerPhi += 2 * M_PI; - - // check if the hit is in the window to be drawn - if( !( fabs( centerEta - m_eta ) < barrelCR - && fabs( centerPhi - m_phi ) < barrelCR )) continue; - - double minEta(10), maxEta(-10), minPhi(4), maxPhi(-4); - if( points != 0 ) - { - // calorimeter crystalls have slightly non-symetrical form in eta-phi projection - // so if we simply get the largest eta and phi, cells will overlap - // therefore we get a smaller eta-phi range representing the inner square - // we also should use only points from the inner face of the crystal, since - // non-projecting direction of crystals leads to large shift in eta on outter - // face. - int j = 0; - for( unsigned int i = 0; i < 8; ++i ) - { - TEveVector crystal( points[j], points[j + 1], points[j + 2] ); - j += 3; - double eta = crystal.Eta(); - double phi = crystal.Phi(); - if ( crystal.Perp() > 135 ) continue; - if ( minEta - eta > 0.01) minEta = eta; - if ( eta - minEta > 0 && eta - minEta < 0.01 ) minEta = eta; - if ( eta - maxEta > 0.01) maxEta = eta; - if ( maxEta - eta > 0 && maxEta - eta < 0.01 ) maxEta = eta; - if ( minPhi - phi > 0.01) minPhi = phi; - if ( phi - minPhi > 0 && phi - minPhi < 0.01 ) minPhi = phi; - if ( phi - maxPhi > 0.01) maxPhi = phi; - if ( maxPhi - phi > 0 && maxPhi - phi < 0.01 ) maxPhi = phi; - } - } - else - { - double delta = 0.0172 * 0.5; - minEta = centerEta - delta; - maxEta = centerEta + delta; - minPhi = centerPhi - delta; - maxPhi = centerPhi + delta; - } - if( minPhi >= ( m_phi - barrelCR ) && maxPhi <= ( m_phi + barrelCR ) && - minEta >= ( m_eta - barrelCR ) && maxEta <= ( m_eta + barrelCR )) - { - data->AddTower( minEta, maxEta, minPhi, maxPhi ); - // printf("EB add %f %f %f %f \n",minEta, maxEta, minPhi, maxPhi ); - data->FillSlice( slice, size ); - } - // otherwise in the EE + // do phi wrapping + if( centerPhi > m_phi + M_PI) centerPhi -= 2 * M_PI; + if( centerPhi < m_phi - M_PI) centerPhi += 2 * M_PI; + + // check if the hit is in the window to be drawn + if( !( fabs( centerEta - m_eta ) < barrelCR + && fabs( centerPhi - m_phi ) < barrelCR )) continue; + + double minEta(10), maxEta(-10), minPhi(4), maxPhi(-4); + if( points != 0 ) + { + // calorimeter crystalls have slightly non-symetrical form in eta-phi projection + // so if we simply get the largest eta and phi, cells will overlap + // therefore we get a smaller eta-phi range representing the inner square + // we also should use only points from the inner face of the crystal, since + // non-projecting direction of crystals leads to large shift in eta on outter + // face. + int j = 0; + float eps = 0.005; + for( unsigned int i = 0; i < 8; ++i ) + { + TEveVector crystal( points[j], points[j + 1], points[j + 2] ); + j += 3; + double eta = crystal.Eta(); + double phi = crystal.Phi(); + if ( ((k->id().subdetId() == EcalBarrel) && (crystal.Perp() > 135) )|| ((k->id().subdetId() == EcalEndcap) && (crystal.Perp() > 155))) continue; + if ( minEta - eta > eps) minEta = eta; + if ( eta - minEta > 0 && eta - minEta < eps ) minEta = eta; + if ( eta - maxEta > eps) maxEta = eta; + if ( maxEta - eta > 0 && maxEta - eta < eps ) maxEta = eta; + if ( minPhi - phi > eps) minPhi = phi; + if ( phi - minPhi > 0 && phi - minPhi < eps ) minPhi = phi; + if ( phi - maxPhi > eps) maxPhi = phi; + if ( maxPhi - phi > 0 && maxPhi - phi < eps ) maxPhi = phi; + } + } + else + { + double delta = 0.0172 * 0.5; + minEta = centerEta - delta; + maxEta = centerEta + delta; + minPhi = centerPhi - delta; + maxPhi = centerPhi + delta; + } + if( minPhi >= ( m_phi - barrelCR ) && maxPhi <= ( m_phi + barrelCR ) && + minEta >= ( m_eta - barrelCR ) && maxEta <= ( m_eta + barrelCR )) + { + // printf("add %f %f %f %f \n",minEta, maxEta, minPhi, maxPhi ); + data->AddTower( minEta, maxEta, minPhi, maxPhi ); + data->FillSlice( slice, size ); + } + // otherwise in the EE } else if( k->id().subdetId() == EcalEndcap ) { - // check if the hit is in the window to be drawn - double crystalSize = m_size * 0.0172; - if( !( fabs( centerEta - m_eta ) < ( crystalSize ) - && fabs( centerPhi - m_phi ) < ( crystalSize ))) - continue; - - if( points != 0 ) - { - double minX(9999), maxX(-9999), minY(9999), maxY(-9999); - int j = 0; - for( unsigned int i = 0; i < 8; ++i ) - { - TEveVector crystal( points[j], points[j + 1], points[j + 2] ); - j += 3; - double x = crystal.fX; - double y = crystal.fY; - if( fabs( crystal.fZ ) > 330 ) continue; - if( minX - x > 0.01 ) minX = x; - if( x - maxX > 0.01 ) maxX = x; - if( minY - y > 0.01 ) minY = y; - if( y - maxY > 0.01 ) maxY = y; - } - data->AddTower( minX, maxX, minY, maxY ); + // check if the hit is in the window to be drawn + double crystalSize = m_size * 0.0172; + if( !( fabs( centerEta - m_eta ) < ( crystalSize ) + && fabs( centerPhi - m_phi ) < ( crystalSize ))) + continue; + + if( points != 0 ) + { + double minX(9999), maxX(-9999), minY(9999), maxY(-9999); + int j = 0; + for( unsigned int i = 0; i < 8; ++i ) + { + TEveVector crystal( points[j], points[j + 1], points[j + 2] ); + j += 3; + double x = crystal.fX; + double y = crystal.fY; + if( fabs( crystal.fZ ) > 330 ) continue; + if( minX - x > 0.01 ) minX = x; + if( x - maxX > 0.01 ) maxX = x; + if( minY - y > 0.01 ) minY = y; + if( y - maxY > 0.01 ) maxY = y; + } + data->AddTower( minX, maxX, minY, maxY ); // printf("EE add %f %f %f %f \n",minX, maxX, minY, maxY ); - } - data->FillSlice( slice, size ); + } + data->FillSlice( slice, size ); } } // end loop on hits - + data->DataChanged(); - } +} double FWECALDetailViewBuilder::makeLegend( double x0, double y0, - Color_t clustered1, Color_t clustered2, - Color_t supercluster - ) + Color_t clustered1, Color_t clustered2, + Color_t supercluster + ) { Double_t fontsize = 0.07; TLatex* latex = new TLatex(); @@ -406,37 +417,37 @@ FWECALDetailViewBuilder::makeLegend( double x0, double y0, Double_t y = y0; Double_t boxH = 0.25*fontsize; Double_t yStep = 0.04; - + y -= yStep; latex->DrawLatex(x, y, "Energy types:"); y -= yStep; - + Double_t pos[4]; pos[0] = x+0.05; pos[2] = x+0.20; - + pos[1] = y; pos[3] = pos[1] + boxH; FWDetailViewBase::drawCanvasBox(pos, m_defaultColor); latex->DrawLatex(x+0.25, y, "unclustered"); y -= yStep; if (clustered1<0) return y; - + pos[1] = y; pos[3] = pos[1] + boxH; FWDetailViewBase::drawCanvasBox(pos, clustered1); latex->DrawLatex(x+0.25, y, "clustered"); y -= yStep; if (clustered2<0) return y; - + pos[1] = y; pos[3] = pos[1] + boxH; FWDetailViewBase::drawCanvasBox(pos, clustered2); latex->DrawLatex(x+0.25, y, "clustered"); y -= yStep; if (supercluster<0) return y; - + pos[1] = y; pos[3] = pos[1] + boxH; FWDetailViewBase::drawCanvasBox(pos, supercluster); latex->DrawLatex(x+0.25, y, "super-cluster"); y -= yStep; - + return y; } diff --git a/Fireworks/Core/interface/FWDigitSetProxyBuilder.h b/Fireworks/Core/interface/FWDigitSetProxyBuilder.h index ee6a6878d9dd0..eb5bac22d11e7 100644 --- a/Fireworks/Core/interface/FWDigitSetProxyBuilder.h +++ b/Fireworks/Core/interface/FWDigitSetProxyBuilder.h @@ -59,7 +59,6 @@ class FWDigitSetProxyBuilder : public FWProxyBuilderBase TEveBoxSet* addBoxSetToProduct(TEveElementList* product); void addBox(TEveBoxSet* set, const float* pnts, const FWDisplayProperties& dp); - TEveBoxSet* getBoxSet() const { return m_boxSet; } private: FWDigitSetProxyBuilder(const FWDigitSetProxyBuilder&); // stop default @@ -74,7 +73,6 @@ class FWDigitSetProxyBuilder : public FWProxyBuilderBase TEveDigitSet* digitSet(TEveElement* product); - TEveBoxSet* m_boxSet; }; diff --git a/Fireworks/Core/src/FWDigitSetProxyBuilder.cc b/Fireworks/Core/src/FWDigitSetProxyBuilder.cc index 9a5913aa9d1c7..1eac94d095d72 100644 --- a/Fireworks/Core/src/FWDigitSetProxyBuilder.cc +++ b/Fireworks/Core/src/FWDigitSetProxyBuilder.cc @@ -70,8 +70,7 @@ class FWSecondarySelectableSelector : public FWFromEveSelectorBase //============================================================================== //============================================================================== -FWDigitSetProxyBuilder::FWDigitSetProxyBuilder(): - m_boxSet(0) +FWDigitSetProxyBuilder::FWDigitSetProxyBuilder() { } @@ -90,17 +89,17 @@ TEveBoxSet* FWDigitSetProxyBuilder::addBoxSetToProduct(TEveElementList* product) { assert(!product->HasChildren()); - m_boxSet = new TEveBoxSet(); - m_boxSet->SetTooltipCBFoo(getTooltip); - m_boxSet->Reset(TEveBoxSet::kBT_FreeBox, true, 256); - FWSecondarySelectableSelector* sel = new FWSecondarySelectableSelector(m_boxSet->RefSelectedSet(), item()); - m_boxSet->SetUserData(sel); - m_boxSet->SetPickable(1); - m_boxSet->SetAlwaysSecSelect(1); + TEveBoxSet* boxSet = new TEveBoxSet(); + boxSet->SetTooltipCBFoo(getTooltip); + boxSet->Reset(TEveBoxSet::kBT_FreeBox, true, 256); + FWSecondarySelectableSelector* sel = new FWSecondarySelectableSelector(boxSet->RefSelectedSet(), item()); + boxSet->SetUserData(sel); + boxSet->SetPickable(1); + boxSet->SetAlwaysSecSelect(1); - product->AddElement(m_boxSet); + product->AddElement(boxSet); - return m_boxSet; + return boxSet; } TEveDigitSet* FWDigitSetProxyBuilder::digitSet(TEveElement* product) diff --git a/GeneratorInterface/ExternalDecays/data/Bs_Jpsiphiv2.dec b/GeneratorInterface/ExternalDecays/data/Bs_Jpsiphiv2.dec new file mode 100644 index 0000000000000..9d9f2474d67b2 --- /dev/null +++ b/GeneratorInterface/ExternalDecays/data/Bs_Jpsiphiv2.dec @@ -0,0 +1,51 @@ +# +# This is the decay file for the decay BS0 -> PSI(-> MU+ MU-) PHI(-> K+ K-) +# +# EventType: 13144001 +# +# Descriptor: [B_s0 -> (J/psi(1S) -> mu+ mu- {,gamma} {,gamma}) (phi(1020) -> K+ K-)]cc +# +# NickName: Bs_Jpsiphi,mm=CPV +# +# Physics: Includes radiative mode, CP violation, different lifetimes +# +# Tested: Yes +# By: Gerhard Raven / Tristan du Pree +# Date: 10 Oct 2006 +# +Define Hp 0.481 # +Define Hz 0.723 # +Define Hm 0.496 # +Define pHp 3.14 # +Define pHz 0.0 +Define pHm 3.14 # +# Upddate dgammas +Define dms 17.69e12 +Define dgammas 10.0e10 +yesIncoherentBsMixing dms dgammas +# +Alias MyB_s0 B_s0 +Alias Myanti-B_s0 anti-B_s0 +ChargeConj Myanti-B_s0 MyB_s0 +Alias MyJ/psi J/psi +Alias MyPhi phi +ChargeConj MyJ/psi MyJ/psi +ChargeConj MyPhi MyPhi +# +Decay MyB_s0 + 1.000 MyJ/psi MyPhi PVV_CPLH 0.02 1 Hp pHp Hz pHz Hm pHm; +# +Enddecay +Decay Myanti-B_s0 + 1.000 MyJ/psi MyPhi PVV_CPLH 0.02 1 Hp pHp Hz pHz Hm pHm; +Enddecay +# +Decay MyJ/psi + 1.000 mu+ mu- PHOTOS VLL; +Enddecay +# +Decay MyPhi + 1.000 K+ K- VSS; +Enddecay +End + diff --git a/GeneratorInterface/ExternalDecays/data/Bs_MuMuKstar_mumuKpi.dec b/GeneratorInterface/ExternalDecays/data/Bs_MuMuKstar_mumuKpi.dec new file mode 100644 index 0000000000000..3c6a818968a4c --- /dev/null +++ b/GeneratorInterface/ExternalDecays/data/Bs_MuMuKstar_mumuKpi.dec @@ -0,0 +1,26 @@ +################################################# +# Descriptor: [Bs -> mu+ mu- K*0 (K+ pi-)] + cc # +# Created by Mauro Dinardo +# Changed the Bs -> B_s0 by Xin Shi [2013-07-25] +################################################# +Alias MyB_s0 B_s0 +Alias Myanti-B_s0 anti-B_s0 +ChargeConj MyB_s0 Myanti-B_s0 +Alias MyK*0 K*0 +Alias MyK*0bar anti-K*0 +ChargeConj MyK*0 MyK*0bar +# +Decay MyB_s0 + 1.000 MyK*0 mu+ mu- BTOSLLBALL; +Enddecay +Decay Myanti-B_s0 + 1.000 MyK*0bar mu+ mu- BTOSLLBALL; +Enddecay +# +Decay MyK*0 + 1.000 K+ pi- VSS; +Enddecay +Decay MyK*0bar + 1.000 K- pi+ VSS; +Enddecay +End diff --git a/GeneratorInterface/ExternalDecays/data/evtBsJPsiPhi.pdl b/GeneratorInterface/ExternalDecays/data/evtBsJPsiPhi.pdl new file mode 100644 index 0000000000000..db4b1ceebd974 --- /dev/null +++ b/GeneratorInterface/ExternalDecays/data/evtBsJPsiPhi.pdl @@ -0,0 +1,501 @@ +* +* name id mass/GeV width/GeV max_Dm/GeV 3*charge 2*spin lifetime*c/mm PythiaId +add p Particle gamma 22 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 22 +add p Particle e- 11 5.1099890e-04 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 11 +add p Particle nu_e 12 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 12 +add p Particle e+ -11 5.1099890e-04 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 -11 +add p Particle mu+ -13 1.0565800e-01 0.0000000e+00 0.0000000e+00 3 1 6.5865482e+05 -13 +add p Particle mu- 13 1.0565800e-01 0.0000000e+00 0.0000000e+00 -3 1 6.5865482e+05 13 +add p Particle pi+ 211 1.3957000e-01 0.0000000e+00 0.0000000e+00 3 0 7.8044251e+03 211 +add p Particle pi0 111 1.3497700e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 111 +add p Particle pi- -211 1.3957000e-01 0.0000000e+00 0.0000000e+00 -3 0 7.8044251e+03 -211 +add p Particle K_L0 130 4.9767200e-01 0.0000000e+00 0.0000000e+00 0 0 1.5513132e+04 130 +add p Particle K+ 321 4.9367700e-01 0.0000000e+00 0.0000000e+00 3 0 3.7126448e+03 321 +add p Particle n0 2112 9.3956500e-01 0.0000000e+00 0.0000000e+00 0 1 2.6551003e+14 2112 +add p Particle p+ 2212 9.3827200e-01 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 2212 +add p Particle K- -321 4.9367700e-01 0.0000000e+00 0.0000000e+00 -3 0 3.7126448e+03 -321 +add p Particle anti-p- -2212 9.3827200e-01 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 -2212 +add p Particle eta 221 5.4730000e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 221 +add p Particle Lambda0 3122 1.1156830e+00 0.0000000e+00 0.0000000e+00 0 1 7.8899259e+01 3122 +add p Particle K_S0 310 4.9767200e-01 0.0000000e+00 0.0000000e+00 0 0 2.6785266e+01 310 +add p Particle Sigma+ 3222 1.1893700e+00 0.0000000e+00 0.0000000e+00 3 1 2.4037893e+01 3222 +add p Particle Sigma- 3112 1.1974490e+00 0.0000000e+00 0.0000000e+00 -3 1 4.4343172e+01 3112 +add p Particle Xi0 3322 1.3148300e+00 0.0000000e+00 0.0000000e+00 0 1 8.6928211e+01 3322 +add p Particle Sigma0 3212 1.1926420e+00 8.8999997e-06 1.3000000e-04 0 1 0.0000000e+00 3212 +add p Particle Xi- 3312 1.3213100e+00 0.0000000e+00 0.0000000e+00 -3 1 4.9086338e+01 3312 +add p Particle anti-n0 -2112 9.3956500e-01 0.0000000e+00 0.0000000e+00 0 1 2.6551003e+14 -2112 +add p Particle Omega- 3334 1.6724500e+00 0.0000000e+00 0.0000000e+00 -3 3 2.4604372e+01 3334 +add p Particle anti-Lambda0 -3122 1.1156830e+00 0.0000000e+00 0.0000000e+00 0 1 7.8899259e+01 -3122 +add p Particle anti-Sigma+ -3112 1.1974490e+00 0.0000000e+00 0.0000000e+00 3 1 4.4343172e+01 -3112 +add p Particle anti-Xi0 -3322 1.3148300e+00 0.0000000e+00 0.0000000e+00 0 1 8.6928211e+01 -3322 +add p Particle anti-Sigma- -3222 1.1893700e+00 0.0000000e+00 0.0000000e+00 -3 1 2.4037893e+01 -3222 +add p Particle anti-Sigma0 -3212 1.1926420e+00 8.8999997e-06 1.3000000e-04 0 1 0.0000000e+00 -3212 +add p Particle rho0 113 7.7110000e-01 1.4920000e-01 4.8000000e-01 0 2 0.0000000e+00 113 +add p Particle rho+ 213 7.7110000e-01 1.4920000e-01 4.8000000e-01 3 2 0.0000000e+00 213 +add p Particle anti-Xi+ -3312 1.3213100e+00 0.0000000e+00 0.0000000e+00 3 1 4.9086338e+01 -3312 +add p Particle anti-Omega+ -3334 1.6724500e+00 0.0000000e+00 0.0000000e+00 3 3 2.4604372e+01 -3334 +add p Particle J/psi 443 3.0969160e+00 8.7000006e-05 2.0000000e-04 0 2 0.0000000e+00 443 +add p Particle phi 333 1.0194550e+00 4.2600002e-03 3.2000000e-02 0 2 0.0000000e+00 333 +add p Particle K*+ 323 8.9166000e-01 5.0800012e-02 2.3000000e-01 3 2 0.0000000e+00 323 +add p Particle rho- -213 7.7110000e-01 1.4920000e-01 4.8000000e-01 -3 2 0.0000000e+00 -213 +add p Particle omega 223 7.8257000e-01 8.4399998e-03 1.8000000e-01 0 2 0.0000000e+00 223 +add p Particle Xi'_c0 4312 2.5788000e+00 0.0000000e+00 0.0000000e+00 0 1 2.9379667e-02 4312 +add p Particle anti-K*0 -313 8.9610000e-01 5.0699997e-02 2.3000000e-01 0 2 0.0000000e+00 -313 +add p Particle a_1+ 20213 1.2300000e+00 4.3880813e-01 6.0000000e-01 3 2 0.0000000e+00 20213 +add p Particle K*- -323 8.9166000e-01 5.0800012e-02 2.3000000e-01 -3 2 0.0000000e+00 -323 +add p Particle K*0 313 8.9610000e-01 5.0699997e-02 2.3000000e-01 0 2 0.0000000e+00 313 +add p Particle tritium 460000000 2.8140000e+00 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 0 +add p Particle alpha 470000000 3.7270000e+00 0.0000000e+00 0.0000000e+00 6 0 0.0000000e+00 0 +add p Particle a_1- -20213 1.2300000e+00 4.3880813e-01 6.0000000e-01 -3 2 0.0000000e+00 -20213 +add p Particle deuteron 450000000 1.8760000e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 0 +add p Particle geantino 480000000 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 +add p Particle Cerenkov 20022 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle tau+ -15 1.7769900e+00 0.0000000e+00 0.0000000e+00 3 1 8.7120108e-02 -15 +add p Particle He3 490000000 2.8090000e+00 0.0000000e+00 0.0000000e+00 6 1 0.0000000e+00 0 +add p Particle tau- 15 1.7769900e+00 0.0000000e+00 0.0000000e+00 -3 1 8.7120108e-02 15 +add p Particle D'_s1+ 10433 2.5353000e+00 1.0000033e-03 1.0000000e-02 3 2 0.0000000e+00 10433 +add p Particle W- -24 8.0420000e+01 2.1199997e+00 1.0000000e+01 -3 2 0.0000000e+00 -24 +add p Particle Z0 23 9.1187600e+01 2.4951996e+00 1.0000000e+01 0 2 0.0000000e+00 23 +add p Particle W+ 24 8.0420000e+01 2.1199997e+00 1.0000000e+01 3 2 0.0000000e+00 24 +add p Particle D+ 411 1.8693000e+00 0.0000000e+00 0.0000000e+00 3 0 3.1521888e-01 411 +add p Particle D0 421 1.8645000e+00 0.0000000e+00 0.0000000e+00 0 0 1.2340654e-01 421 +add p Particle anti-D0 -421 1.8645000e+00 0.0000000e+00 0.0000000e+00 0 0 1.2340654e-01 -421 +add p Particle D- -411 1.8693000e+00 0.0000000e+00 0.0000000e+00 -3 0 3.1521888e-01 -411 +add p Particle D_s+ 431 1.9685000e+00 0.0000000e+00 0.0000000e+00 3 0 1.4703954e-01 431 +add p Particle Lambda_c+ 4122 2.2849000e+00 0.0000000e+00 0.0000000e+00 3 1 5.9796064e-02 4122 +add p Particle anti-Lambda_c- -4122 2.2849000e+00 0.0000000e+00 0.0000000e+00 -3 1 5.9796064e-02 -4122 +add p Particle D_s- -431 1.9685000e+00 0.0000000e+00 0.0000000e+00 -3 0 1.4703954e-01 -431 +add p Particle D*0 423 2.0067000e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 423 +add p Particle D*- -413 2.0100000e+00 9.6000002e-05 4.0000000e-04 -3 2 0.0000000e+00 -413 +add p Particle Higgs'0 35 3.1000000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 35 +add p Particle D*+ 413 2.0100000e+00 9.6000002e-05 4.0000000e-04 3 2 0.0000000e+00 413 +add p Particle anti-D*0 -423 2.0067000e+00 6.5821023e-06 3.0000000e-04 0 2 0.0000000e+00 -423 +add p Particle D_s*- -433 2.1124000e+00 6.5821023e-06 1.0000000e-04 -3 2 0.0000000e+00 -433 +add p Particle B+ 521 5.2790000e+00 0.0000000e+00 0.0000000e+00 3 0 5.0095320e-01 521 +add p Particle D_s*+ 433 2.1124000e+00 6.5821023e-06 1.0000000e-04 3 2 0.0000000e+00 433 +add p Particle B- -521 5.2790000e+00 0.0000000e+00 0.0000000e+00 -3 0 5.0095320e-01 -521 +add p Particle anti-B0 -511 5.2794000e+00 0.0000000e+00 0.0000000e+00 0 0 4.6048122e-01 -511 +add p Particle B_s0 531 5.3667700e+00 0.0000000e+00 0.0000000e+00 0 0 4.3980000e-01 531 +add p Particle B0 511 5.2794000e+00 0.0000000e+00 0.0000000e+00 0 0 4.6048122e-01 511 +add p Particle anti-B_s0 -531 5.3667700e+00 0.0000000e+00 0.0000000e+00 0 0 4.3980000e-01 -531 +add p Particle B_c- -541 6.4000000e+00 0.0000000e+00 0.0000000e+00 -3 0 1.3790453e-01 -541 +add p Particle Lambda_b0 5122 5.6240000e+00 0.0000000e+00 0.0000000e+00 0 1 3.6844493e-01 5122 +add p Particle B_c+ 541 6.4000000e+00 0.0000000e+00 0.0000000e+00 3 0 1.3790453e-01 541 +add p Particle anti-Lambda_b0 -5122 5.6240000e+00 0.0000000e+00 0.0000000e+00 0 1 3.6844493e-01 -5122 +add p Particle anti-Sigma_c0 -4112 2.4522000e+00 1.5000001e-03 2.4000000e-02 0 1 0.0000000e+00 -4112 +add p Particle Sigma_c+ 4212 2.4513000e+00 1.6455309e-03 2.4680000e-02 3 1 0.0000000e+00 4212 +add p Particle Sigma_c0 4112 2.4522000e+00 1.5000001e-03 2.4000000e-02 0 1 0.0000000e+00 4112 +add p Particle anti-Sigma_c- -4212 2.4513000e+00 1.6455309e-03 2.4680000e-02 -3 1 0.0000000e+00 -4212 +add p Particle anti-Sigma_c-- -4222 2.4526000e+00 2.0000006e-03 2.7000000e-02 -6 1 0.0000000e+00 -4222 +add p Particle Higgs0 25 1.1500000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 25 +add p Particle D'_s1- -10433 2.5353000e+00 1.0000033e-03 1.0000000e-02 -3 2 0.0000000e+00 -10433 +add p Particle Sigma_c++ 4222 2.4526000e+00 2.0000006e-03 2.7000000e-02 6 1 0.0000000e+00 4222 +add p Particle Xi'_b- 5312 5.9600000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 5312 +add p Particle Higgs+ 37 3.1000000e+02 7.0022575e+00 0.0000000e+00 3 0 0.0000000e+00 37 +add p Particle Higgs- -37 3.1000000e+02 7.0022575e+00 0.0000000e+00 -3 0 0.0000000e+00 -37 +add p Particle A0 36 3.1000000e+02 7.0022575e+00 0.0000000e+00 0 0 0.0000000e+00 36 +add p Particle Xi'_c+ 4322 2.5741000e+00 0.0000000e+00 0.0000000e+00 3 1 1.0492739e-01 4322 +add p Particle anti-Xi'_c- -4322 2.5741000e+00 0.0000000e+00 0.0000000e+00 -3 1 1.0492739e-01 -4322 +add p Particle anti-Delta0 -2114 1.2320000e+00 1.1999999e-01 1.4000000e-01 0 3 0.0000000e+00 -2114 +add p Particle anti-Xi'_c0 -4312 2.5788000e+00 0.0000000e+00 0.0000000e+00 0 1 2.9379667e-02 -4312 +add p Particle Omega_c0 4332 2.6975000e+00 0.0000000e+00 0.0000000e+00 0 1 1.9345790e-02 4332 +add p Particle Xi_c0 4132 2.4718000e+00 0.0000000e+00 0.0000000e+00 0 1 2.9451800e-02 4132 +add p Particle anti-Xi_c0 -4132 2.4718000e+00 0.0000000e+00 0.0000000e+00 0 1 2.9451800e-02 -4132 +add p Particle Xi_c+ 4232 2.4663000e+00 0.0000000e+00 0.0000000e+00 3 1 1.3243428e-01 4232 +add p Particle anti-Omega_c0 -4332 2.6975000e+00 0.0000000e+00 0.0000000e+00 0 1 1.9345790e-02 -4332 +add p Particle Sigma_b+ 5222 5.8000000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 5222 +add p Particle anti-Sigma_b- -5222 5.8000000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 -5222 +add p Particle t 6 1.7500000e+02 1.3981600e+00 1.3981560e+01 2 1 0.0000000e+00 6 +add p Particle anti-Xi_c- -4232 2.4663000e+00 0.0000000e+00 0.0000000e+00 -3 1 1.3243428e-01 -4232 +add p Particle Sigma_b0 5212 5.8000000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 5212 +add p Particle Sigma_b- 5112 5.8000000e+00 6.5821220e-06 1.0000000e-04 -3 1 0.0000000e+00 5112 +add p Particle anti-Sigma_b+ -5112 5.8000000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 -5112 +add p Particle anti-Sigma_b0 -5212 5.8000000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 -5212 +add p Particle Xi'_b0 5322 5.9600000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 5322 +add p Particle anti-Xi'_b0 -5322 5.9600000e+00 6.5821220e-06 1.0000000e-04 0 1 0.0000000e+00 -5322 +add p Particle Omega_b- 5332 6.1200000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.6467831e-01 5332 +add p Particle anti-Xi'_b+ -5312 5.9600000e+00 6.5821220e-06 1.0000000e-04 3 1 0.0000000e+00 -5312 +add p Particle Xi_b- 5132 5.8400000e+00 0.0000000e+00 0.0000000e+00 -3 1 4.1671152e-01 5132 +add p Particle anti-Xi_b+ -5132 5.8400000e+00 0.0000000e+00 0.0000000e+00 3 1 4.1671152e-01 -5132 +add p Particle Xi_b0 5232 5.8400000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1671152e-01 5232 +add p Particle anti-Omega_b+ -5332 6.1200000e+00 0.0000000e+00 0.0000000e+00 3 1 4.6467831e-01 -5332 +add p Particle anti-B'_s10 -20533 5.8590000e+00 2.5027080e-01 2.0000000e-02 0 2 0.0000000e+00 -20533 +add p Particle psi(2S) 100443 3.6859600e+00 2.9999996e-04 8.0000000e-04 0 2 0.0000000e+00 100443 +add p Particle eta' 331 9.5778000e-01 2.0200002e-04 2.0000000e-03 0 0 0.0000000e+00 331 +add p Particle eta_c 441 2.9797000e+00 1.6000001e-02 1.5000000e-01 0 0 0.0000000e+00 441 +add p Particle anti-Xi_b0 -5232 5.8400000e+00 0.0000000e+00 0.0000000e+00 0 1 4.1671152e-01 -5232 +add p Particle chi_c1 20443 3.5105100e+00 9.2000006e-04 1.0000000e-02 0 2 0.0000000e+00 20443 +add p Particle chi_c2 445 3.5561800e+00 2.0799998e-03 6.0000000e-03 0 4 0.0000000e+00 445 +add p Particle a_00 9000111 9.8470000e-01 5.7235993e-02 5.0000000e-02 0 0 0.0000000e+00 10111 +add p Particle chi_c0 10441 3.4151000e+00 1.6200001e-02 5.0000000e-02 0 0 0.0000000e+00 10441 +add p Particle a_0- -9000211 9.8470000e-01 5.7235993e-02 5.0000000e-02 -3 0 0.0000000e+00 -10211 +add p Particle a_10 20113 1.2300000e+00 4.3880813e-01 6.0000000e-01 0 2 0.0000000e+00 20113 +add p Particle a_20 115 1.3180000e+00 1.0700000e-01 5.0000000e-01 0 4 0.0000000e+00 115 +add p Particle a_0+ 9000211 9.8470000e-01 5.7235993e-02 5.0000000e-02 3 0 0.0000000e+00 10211 +add p Particle a_2- -215 1.3180000e+00 1.0700000e-01 5.0000000e-01 -3 4 0.0000000e+00 -215 +add p Particle K_1+ 10323 1.2720000e+00 8.9999999e-02 2.0000000e-01 3 2 0.0000000e+00 10323 +add p Particle K_1- -10323 1.2720000e+00 8.9999999e-02 2.0000000e-01 -3 2 0.0000000e+00 -10323 +add p Particle a_2+ 215 1.3180000e+00 1.0700000e-01 5.0000000e-01 3 4 0.0000000e+00 215 +add p Particle anti-K_10 -10313 1.2720000e+00 8.9999999e-02 2.0000000e-01 0 2 0.0000000e+00 -10313 +add p Particle K'_1+ 20323 1.4020000e+00 1.7399999e-01 4.0000000e-01 3 2 0.0000000e+00 20323 +add p Particle K'_1- -20323 1.4020000e+00 1.7399999e-01 4.0000000e-01 -3 2 0.0000000e+00 -20323 +add p Particle K_10 10313 1.2720000e+00 8.9999999e-02 2.0000000e-01 0 2 0.0000000e+00 10313 +add p Particle B_10 10513 5.7320000e+00 3.9891649e-02 2.0000000e-01 0 2 0.0000000e+00 10513 +add p Particle anti-K'_10 -20313 1.4020000e+00 1.7399999e-01 4.0000000e-01 0 2 0.0000000e+00 -20313 +add p Particle K_0*+ 10321 1.4120000e+00 2.9400000e-01 6.0000000e-01 3 0 0.0000000e+00 10321 +add p Particle K_0*- -10321 1.4120000e+00 2.9400000e-01 6.0000000e-01 -3 0 0.0000000e+00 -10321 +add p Particle K'_10 20313 1.4020000e+00 1.7399999e-01 4.0000000e-01 0 2 0.0000000e+00 20313 +add p Particle anti-K_0*0 -10311 1.4120000e+00 2.9400000e-01 6.0000000e-01 0 0 0.0000000e+00 -10311 +add p Particle K_2*+ 325 1.4256000e+00 9.8500006e-02 7.0000000e-01 3 4 0.0000000e+00 325 +add p Particle K_2*- -325 1.4256000e+00 9.8500006e-02 7.0000000e-01 -3 4 0.0000000e+00 -325 +add p Particle K_0*0 10311 1.4120000e+00 2.9400000e-01 6.0000000e-01 0 0 0.0000000e+00 10311 +add p Particle anti-K_2*0 -315 1.4324000e+00 1.0900000e-01 7.0000000e-01 0 4 0.0000000e+00 -315 +add p Particle D_0*+ 10411 2.4000000e+00 1.5027676e-01 3.0300000e-01 3 0 0.0000000e+00 10411 +add p Particle D'_1+ 20413 2.4450000e+00 2.5027080e-01 3.0000000e-01 3 2 0.0000000e+00 20413 +add p Particle K_2*0 315 1.4324000e+00 1.0900000e-01 7.0000000e-01 0 4 0.0000000e+00 315 +add p Particle D_2*- -415 2.4590000e+00 2.4999998e-02 3.1200000e-01 -3 4 0.0000000e+00 -415 +add p Particle D_0*- -10411 2.4000000e+00 1.5027676e-01 3.0300000e-01 -3 0 0.0000000e+00 -10411 +add p Particle D'_1- -20413 2.4450000e+00 2.5027080e-01 3.0000000e-01 -3 2 0.0000000e+00 -20413 +add p Particle anti-nu_tau -16 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -16 +add p Particle D_1+ 10413 2.4230000e+00 2.0006450e-02 2.7000000e-01 3 2 0.0000000e+00 10413 +add p Particle D_2*+ 415 2.4590000e+00 2.4999998e-02 3.1200000e-01 3 4 0.0000000e+00 415 +add p Particle D_0*0 10421 2.4000000e+00 1.5027676e-01 2.9900000e-01 0 0 0.0000000e+00 10421 +add p Particle D'_10 20423 2.4450000e+00 2.5027080e-01 3.0000000e-01 0 2 0.0000000e+00 20423 +add p Particle D_1- -10413 2.4230000e+00 2.0006450e-02 2.7000000e-01 -3 2 0.0000000e+00 -10413 +add p Particle anti-D_2*0 -425 2.4589000e+00 2.3000001e-02 3.0900000e-01 0 4 0.0000000e+00 -425 +add p Particle anti-D_0*0 -10421 2.4000000e+00 1.5027676e-01 2.9900000e-01 0 0 0.0000000e+00 -10421 +add p Particle anti-D'_10 -20423 2.4450000e+00 2.5027080e-01 3.0000000e-01 0 2 0.0000000e+00 -20423 +add p Particle D_10 10423 2.4222000e+00 1.8900001e-02 2.7200000e-01 0 2 0.0000000e+00 10423 +add p Particle D_2*0 425 2.4589000e+00 2.3000001e-02 3.0900000e-01 0 4 0.0000000e+00 425 +add p Particle D_s0*+ 10431 2.3170000e+00 1.0000033e-03 1.0000000e-02 3 0 0.0000000e+00 10431 +add p Particle D_s1+ 20433 2.4570000e+00 1.0000033e-03 1.0000000e-02 3 2 0.0000000e+00 20433 +add p Particle Z''0 33 9.0000000e+02 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 33 +add p Particle anti-D_10 -10423 2.4222000e+00 1.8900001e-02 2.7200000e-01 0 2 0.0000000e+00 -10423 +add p Particle D_s2*+ 435 2.5735500e+00 1.4999936e-02 6.0000000e-02 3 4 0.0000000e+00 435 +add p Particle D_s0*- -10431 2.3170000e+00 1.0000033e-03 1.0000000e-02 -3 0 0.0000000e+00 -10431 +add p Particle D_s1- -20433 2.4570000e+00 1.0000033e-03 1.0000000e-02 -3 2 0.0000000e+00 -20433 +add p Particle D_s2*- -435 2.5735500e+00 1.4999936e-02 6.0000000e-02 -3 4 0.0000000e+00 -435 +add p Particle Delta++ 2224 1.2320000e+00 1.1999999e-01 1.4000000e-01 6 3 0.0000000e+00 2224 +add p Particle Delta+ 2214 1.2320000e+00 1.1999999e-01 1.4000000e-01 3 3 0.0000000e+00 2214 +add p Particle Delta0 2114 1.2320000e+00 1.1999999e-01 1.4000000e-01 0 3 0.0000000e+00 2114 +add p Particle Delta- 1114 1.2320000e+00 1.1999999e-01 1.4000000e-01 -3 3 0.0000000e+00 1114 +add p Particle anti-Delta-- -2224 1.2320000e+00 1.1999999e-01 1.4000000e-01 -6 3 0.0000000e+00 -2224 +add p Particle anti-Delta- -2214 1.2320000e+00 1.1999999e-01 1.4000000e-01 -3 3 0.0000000e+00 -2214 +add p Particle anti-Delta+ -1114 1.2320000e+00 1.1999999e-01 1.4000000e-01 3 3 0.0000000e+00 -1114 +add p Particle B*- -523 5.3250000e+00 6.5819970e-06 1.0000000e-04 -3 2 0.0000000e+00 -523 +add p Particle B*+ 523 5.3250000e+00 6.5819970e-06 1.0000000e-04 3 2 0.0000000e+00 523 +add p Particle B*0 513 5.3250000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 513 +add p Particle anti-B*0 -513 5.3250000e+00 6.5819970e-06 1.0000000e-04 0 2 0.0000000e+00 -513 +add p Particle B_s*0 533 5.4200000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 533 +add p Particle anti-B_s*0 -533 5.4200000e+00 6.5821220e-06 1.0000000e-04 0 2 0.0000000e+00 -533 +add p Particle B_0*+ 10521 5.7380000e+00 1.4993444e-01 2.0000000e-01 3 0 0.0000000e+00 10521 +add p Particle B'_1+ 20523 5.7570000e+00 2.5027080e-01 2.0000000e-01 3 2 0.0000000e+00 20523 +add p Particle B_1+ 10523 5.7320000e+00 3.9891649e-02 2.0000000e-01 3 2 0.0000000e+00 10523 +add p Particle B_2*+ 525 5.7400000e+00 5.0245206e-02 2.0000000e-01 3 4 0.0000000e+00 525 +add p Particle B_0*- -10521 5.7380000e+00 1.4993444e-01 2.0000000e-01 -3 0 0.0000000e+00 -10521 +add p Particle B'_1- -20523 5.7570000e+00 2.5027080e-01 2.0000000e-01 -3 2 0.0000000e+00 -20523 +add p Particle B_1- -10523 5.7320000e+00 3.9891649e-02 2.0000000e-01 -3 2 0.0000000e+00 -10523 +add p Particle B_2*- -525 5.7400000e+00 5.0245206e-02 2.0000000e-01 -3 4 0.0000000e+00 -525 +add p Particle B_0*0 10511 5.7380000e+00 1.4993444e-01 2.0000000e-01 0 0 0.0000000e+00 10511 +add p Particle B'_10 20513 5.7570000e+00 2.5027080e-01 2.0000000e-01 0 2 0.0000000e+00 20513 +add p Particle anti-B_2*0 -515 5.7400000e+00 5.0245206e-02 2.0000000e-01 0 4 0.0000000e+00 -515 +add p Particle anti-B_0*0 -10511 5.7380000e+00 1.4993444e-01 2.0000000e-01 0 0 0.0000000e+00 -10511 +add p Particle anti-B'_10 -20513 5.7570000e+00 2.5027080e-01 2.0000000e-01 0 2 0.0000000e+00 -20513 +add p Particle anti-B_10 -10513 5.7320000e+00 3.9891649e-02 2.0000000e-01 0 2 0.0000000e+00 -10513 +add p Particle anti-c-hadron -84 2.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 1.0000000e-01 -84 +add p Particle B_2*0 515 5.7400000e+00 5.0245206e-02 2.0000000e-01 0 4 0.0000000e+00 515 +add p Particle B_s0*0 10531 5.8410000e+00 1.4993444e-01 6.5000000e-02 0 0 0.0000000e+00 10531 +add p Particle B'_s10 20533 5.8590000e+00 2.5027080e-01 2.0000000e-02 0 2 0.0000000e+00 20533 +add p Particle B_s10 10533 5.8310000e+00 3.9891649e-02 1.0000000e-02 0 2 0.0000000e+00 10533 +add p Particle B_s2*0 535 5.8520000e+00 5.0245206e-02 2.9000000e-02 0 4 0.0000000e+00 535 +add p Particle anti-B_s0*0 -10531 5.8410000e+00 1.4993444e-01 6.5000000e-02 0 0 0.0000000e+00 -10531 +add p Particle anti-u -2 5.6000000e-03 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -2 +add p Particle anti-B_s2*0 -535 5.8520000e+00 5.0245206e-02 2.9000000e-02 0 4 0.0000000e+00 -535 +add p Particle anti-nu_mu -14 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -14 +add p Particle anti-nu_e -12 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -12 +add p Particle d 1 9.9000000e-03 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 1 +add p Particle anti-d -1 9.9000000e-03 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -1 +add p Particle anti-B_s10 -10533 5.8310000e+00 3.9891649e-02 1.0000000e-02 0 2 0.0000000e+00 -10533 +add p Particle Omega_cc*+ 4434 3.8246600e+00 0.0000000e+00 0.0000000e+00 3 3 1.0000000e-01 4434 +add p Particle nu_mu 14 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 14 +add p Particle u 2 5.6000000e-03 0.0000000e+00 0.0000000e+00 2 1 0.0000000e+00 2 +add p Particle b 5 5.0000000e+00 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 5 +add p Particle anti-s -3 1.9900000e-01 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -3 +add p Particle c 4 1.3500000e+00 0.0000000e+00 0.0000000e+00 2 1 0.0000000e+00 4 +add p Particle anti-c -4 1.3500000e+00 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -4 +add p Particle anti-b'-hadron -87 4.0000000e+02 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 0 +add p Particle s 3 1.9900000e-01 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 3 +add p Particle anti-b -5 5.0000000e+00 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -5 +add p Particle anti-t' -8 5.0000000e+02 0.0000000e+00 0.0000000e+00 -2 1 0.0000000e+00 -8 +add p Particle b' 7 4.0000000e+02 0.0000000e+00 0.0000000e+00 -1 1 0.0000000e+00 7 +add p Particle anti-b' -7 4.0000000e+02 0.0000000e+00 0.0000000e+00 1 1 0.0000000e+00 -7 +add p Particle t' 8 5.0000000e+02 0.0000000e+00 0.0000000e+00 2 1 0.0000000e+00 8 +add p Particle anti-He3 -490000000 2.8092300e+00 0.0000000e+00 0.0000000e+00 -6 1 0.0000000e+00 0 +add p Particle anti-t -6 1.7500000e+02 1.3981600e+00 1.3981560e+01 -2 1 0.0000000e+00 -6 +add p Particle nu_tau 16 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 16 +add p Particle g 21 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 21 +add p Particle L+ -17 4.0000000e+02 0.0000000e+00 0.0000000e+00 3 1 0.0000000e+00 -17 +add p Particle nu_L 18 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 18 +add p Particle anti-nu_L -18 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 1 0.0000000e+00 -18 +add p Particle L- 17 4.0000000e+02 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 17 +add p Particle Z'0 32 5.0000000e+02 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 32 +add p Particle W'- -34 5.0000000e+02 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 -34 +add p Particle R0 41 5.0000000e+03 0.0000000e+00 4.1729150e+03 0 2 0.0000000e+00 41 +add p Particle anti-R0 -41 5.0000000e+03 0.0000000e+00 4.1729150e+03 0 2 0.0000000e+00 -41 +add p Particle W'+ 34 5.0000000e+02 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 34 +add p Particle K_4*+ 329 2.0450000e+00 1.9800000e-01 2.0000000e-01 3 8 0.0000000e+00 0 +add p Particle specflav 81 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 81 +add p Particle rndmflav 82 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 82 +add p Particle anti-rndmflav -82 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 -82 +add p Particle phasespa 83 1.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 83 +add p Particle Xu0 43 1.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 43 +add p Particle Xu- -44 1.0000000e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 -44 +add p Particle Xu+ 44 1.0000000e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 44 +add p Particle c-hadron 84 2.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 1.0000000e-01 84 +add p Particle SPHEaxis 95 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 95 +add p Particle anti-b-hadron -85 5.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 3.8699999e-01 -85 +add p Particle t-hadron 86 1.7500000e+02 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 0 +add p Particle anti-t-hadron -86 1.7500000e+02 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 0 +add p Particle b'-hadron 87 4.0000000e+02 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 0 +add p Particle anti-ud_1 -2103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -2103 +add p Particle b-hadron 85 5.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 3.8699999e-01 85 +add p Particle junction 88 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 88 +add p Particle cluster 91 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 91 +add p Particle string 92 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 92 +add p Particle indep 93 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 93 +add p Particle CMshower 94 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 94 +add p Particle THRUaxis 96 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 96 +add p Particle system 90 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 90 +add p Particle cu_1 4203 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 4203 +add p Particle CELLjet 98 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 98 +add p Particle table 99 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 99 +add p Particle CLUSjet 97 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 97 +add p Particle f_2 225 1.2754000e+00 1.8509998e-01 2.7000000e-01 0 4 0.0000000e+00 225 +add p Particle K0 311 4.9767200e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 311 +add p Particle anti-K0 -311 4.9767200e-01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 -311 +add p Particle anti-K_3*0 -317 1.7760000e+00 1.5900001e-01 7.0000000e-01 0 6 0.0000000e+00 0 +add p Particle K_4*0 319 2.0450000e+00 1.9800000e-01 2.0000000e-01 0 8 0.0000000e+00 0 +add p Particle anti-K_4*0 -319 2.0450000e+00 1.9800000e-01 2.0000000e-01 0 8 0.0000000e+00 0 +add p Particle K_3*+ 327 1.7760000e+00 1.5900001e-01 7.0000000e-01 3 6 0.0000000e+00 0 +add p Particle K_3*- -327 1.7760000e+00 1.5900001e-01 7.0000000e-01 -3 6 0.0000000e+00 0 +add p Particle K_3*0 317 1.7760000e+00 1.5900001e-01 7.0000000e-01 0 6 0.0000000e+00 0 +add p Particle Xi_b*- 5314 5.9700000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5314 +add p Particle f'_2 335 1.5250000e+00 7.5999999e-02 2.0000000e-01 0 4 0.0000000e+00 335 +add p Particle B_c*+ 543 6.6020000e+00 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 543 +add p Particle B_c*- -543 6.6020000e+00 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 -543 +add p Particle B_c2*+ 545 7.3500000e+00 0.0000000e+00 6.0000000e-02 3 4 0.0000000e+00 545 +add p Particle K_4*- -329 2.0450000e+00 1.9800000e-01 2.0000000e-01 -3 8 0.0000000e+00 0 +add p Particle B_c2*- -545 7.3500000e+00 0.0000000e+00 6.0000000e-02 -3 4 0.0000000e+00 -545 +add p Particle Upsilon 553 9.4603000e+00 5.2499980e-05 5.0000000e-04 0 2 0.0000000e+00 553 +add p Particle chi_b2 555 9.9126000e+00 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 555 +add p Particle Upsilon_3(1D) 557 1.0159900e+01 0.0000000e+00 0.0000000e+00 0 6 0.0000000e+00 557 +add p Particle anti-deuteron -450000000 1.8756130e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 0 +add p Particle su_1 3203 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 3203 +add p Particle eta_b 551 9.4030000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 551 +add p Particle anti-tritium -460000000 2.8092500e+00 0.0000000e+00 0.0000000e+00 -3 1 0.0000000e+00 0 +add p Particle dd_1 1103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 1103 +add p Particle anti-dd_1 -1103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -1103 +add p Particle anti-alpha -470000000 3.7274170e+00 0.0000000e+00 0.0000000e+00 -6 0 0.0000000e+00 0 +add p Particle ud_0 2101 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 2101 +add p Particle anti-ud_0 -2101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -2101 +add p Particle ud_1 2103 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 2103 +add p Particle ss_1 3303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 3303 +add p Particle uu_1 2203 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 2203 +add p Particle anti-uu_1 -2203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -2203 +add p Particle sd_0 3101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 3101 +add p Particle anti-sd_0 -3101 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -3101 +add p Particle sd_1 3103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 3103 +add p Particle anti-sd_1 -3103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -3103 +add p Particle anti-Sigma*+ -3114 1.3872000e+00 3.9400008e-02 4.0000000e-02 3 3 0.0000000e+00 -3114 +add p Particle Lambda(1520)0 3124 1.5195000e+00 1.5600000e-02 1.8000000e-01 0 3 0.0000000e+00 0 +add p Particle Sigma*- 3114 1.3872000e+00 3.9400008e-02 4.0000000e-02 -3 3 0.0000000e+00 3114 +add p Particle Lambda(1820)0 3126 1.8200000e+00 7.9999995e-02 4.0000000e-01 0 5 0.0000000e+00 0 +add p Particle anti-Lambda(1820)0 -3126 1.8200000e+00 7.9999995e-02 4.0000000e-01 0 5 0.0000000e+00 0 +add p Particle su_0 3201 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 3201 +add p Particle anti-su_0 -3201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -3201 +add p Particle anti-Lambda(1520)0 -3124 1.5195000e+00 1.5600000e-02 1.8000000e-01 0 3 0.0000000e+00 0 +add p Particle anti-su_1 -3203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -3203 +add p Particle Sigma*0 3214 1.3837000e+00 3.6000005e-02 3.5000000e-02 0 3 0.0000000e+00 3214 +add p Particle anti-Sigma*0 -3214 1.3837000e+00 3.6000005e-02 3.5000000e-02 0 3 0.0000000e+00 -3214 +add p Particle Sigma(1775)0 3216 1.7750000e+00 1.1999999e-01 5.0000000e-01 0 5 0.0000000e+00 0 +add p Particle anti-Sigma(1775)0 -3216 1.7750000e+00 1.1999999e-01 5.0000000e-01 0 5 0.0000000e+00 0 +add p Particle Sigma*+ 3224 1.3828000e+00 3.5799992e-02 3.5000000e-02 3 3 0.0000000e+00 3224 +add p Particle anti-Sigma*- -3224 1.3828000e+00 3.5799992e-02 3.5000000e-02 -3 3 0.0000000e+00 -3224 +add p Particle anti-ss_1 -3303 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -3303 +add p Particle Xi*- 3314 1.5350000e+00 9.9000002e-03 5.0000000e-02 -3 3 0.0000000e+00 3314 +add p Particle anti-Xi*+ -3314 1.5350000e+00 9.9000002e-03 5.0000000e-02 3 3 0.0000000e+00 -3314 +add p Particle Xi*0 3324 1.5318000e+00 9.1000002e-03 5.0000000e-02 0 3 0.0000000e+00 3324 +add p Particle anti-Xi*0 -3324 1.5318000e+00 9.1000002e-03 5.0000000e-02 0 3 0.0000000e+00 -3324 +add p Particle cd_0 4101 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 4101 +add p Particle Sigma_b*0 5214 5.8100000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 5214 +add p Particle cd_1 4103 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 4103 +add p Particle anti-cd_1 -4103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -4103 +add p Particle Sigma_c*0 4114 2.5175000e+00 0.0000000e+00 1.9500000e-01 0 3 0.0000000e+00 4114 +add p Particle anti-Sigma_c*0 -4114 2.5175000e+00 0.0000000e+00 1.9500000e-01 0 3 0.0000000e+00 -4114 +add p Particle cu_0 4201 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 0 0.0000000e+00 4201 +add p Particle anti-cu_0 -4201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 0 0.0000000e+00 -4201 +add p Particle anti-cd_0 -4101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -4101 +add p Particle anti-cu_1 -4203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -4203 +add p Particle Sigma_c*+ 4214 2.4526000e+00 2.0000000e-03 3.0000000e-02 3 3 0.0000000e+00 4214 +add p Particle anti-Sigma_c*- -4214 2.4526000e+00 2.0000000e-03 3.0000000e-02 -3 3 0.0000000e+00 -4214 +add p Particle Sigma_c*++ 4224 2.5194000e+00 0.0000000e+00 2.7000000e-01 6 3 0.0000000e+00 4224 +add p Particle anti-Sigma_c*-- -4224 2.5194000e+00 0.0000000e+00 2.7000000e-01 -6 3 0.0000000e+00 -4224 +add p Particle cs_0 4301 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 4301 +add p Particle cs_1 4303 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 4303 +add p Particle anti-cs_1 -4303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -4303 +add p Particle Xi_c*0 4314 2.6438000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 4314 +add p Particle anti-Xi_c*0 -4314 2.6438000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -4314 +add p Particle Xi_c*+ 4324 2.6474000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 4324 +add p Particle anti-Xi_c*- -4324 2.6474000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -4324 +add p Particle Omega_c*0 4334 2.8000000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 4334 +add p Particle anti-cs_0 -4301 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -4301 +add p Particle anti-Omega_c*0 -4334 2.8000000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -4334 +add p Particle cc_1 4403 0.0000000e+00 0.0000000e+00 0.0000000e+00 4 2 0.0000000e+00 4403 +add p Particle anti-cc_1 -4403 0.0000000e+00 0.0000000e+00 0.0000000e+00 -4 2 0.0000000e+00 -4403 +add p Particle Xi_cc+ 4412 3.5979800e+00 0.0000000e+00 0.0000000e+00 3 1 1.0000000e-01 4412 +add p Particle anti-Xi_cc- -4412 3.5979800e+00 0.0000000e+00 0.0000000e+00 -3 1 1.0000000e-01 -4412 +add p Particle Xi_cc*+ 4414 3.6564800e+00 0.0000000e+00 0.0000000e+00 3 3 1.0000000e-01 4414 +add p Particle anti-Xi_cc*- -4414 3.6564800e+00 0.0000000e+00 0.0000000e+00 -3 3 1.0000000e-01 -4414 +add p Particle Xi_cc++ 4422 3.5979800e+00 0.0000000e+00 0.0000000e+00 6 1 1.0000000e-01 4422 +add p Particle anti-Xi_cc-- -4422 3.5979800e+00 0.0000000e+00 0.0000000e+00 -6 1 1.0000000e-01 -4422 +add p Particle Xi_cc*++ 4424 3.6564800e+00 0.0000000e+00 0.0000000e+00 6 3 1.0000000e-01 4424 +add p Particle anti-Xi_cc*-- -4424 3.6564800e+00 0.0000000e+00 0.0000000e+00 -6 3 1.0000000e-01 -4424 +add p Particle Omega_cc+ 4432 3.7866300e+00 0.0000000e+00 0.0000000e+00 3 1 1.0000000e-01 4432 +add p Particle anti-Omega_cc- -4432 3.7866300e+00 0.0000000e+00 0.0000000e+00 -3 1 1.0000000e-01 -4432 +add p Particle anti-Omega_cc*- -4434 3.8246600e+00 0.0000000e+00 0.0000000e+00 -3 3 1.0000000e-01 -4434 +add p Particle bd_0 5101 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 5101 +add p Particle anti-bd_0 -5101 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -5101 +add p Particle bd_1 5103 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5103 +add p Particle anti-bd_1 -5103 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5103 +add p Particle Sigma_b*- 5114 5.8100000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5114 +add p Particle anti-Sigma_b*+ -5114 5.8100000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5114 +add p Particle bu_0 5201 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 5201 +add p Particle anti-bu_0 -5201 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -5201 +add p Particle bu_1 5203 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 5203 +add p Particle anti-bu_1 -5203 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -5203 +add p Particle bs_1 5303 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5303 +add p Particle Sigma_b*+ 5224 5.8100000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 5224 +add p Particle anti-Sigma_b*- -5224 5.8100000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 -5224 +add p Particle bs_0 5301 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 0 0.0000000e+00 5301 +add p Particle anti-bs_0 -5301 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 0 0.0000000e+00 -5301 +add p Particle anti-Xi_b*0 -5324 5.9700000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -5324 +add p Particle anti-Sigma_b*0 -5214 5.8100000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 -5214 +add p Particle anti-bs_1 -5303 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5303 +add p Particle bc_0 5401 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 0 0.0000000e+00 5401 +add p Particle anti-bc_0 -5401 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 0 0.0000000e+00 -5401 +add p Particle bc_1 5403 0.0000000e+00 0.0000000e+00 0.0000000e+00 1 2 0.0000000e+00 5403 +add p Particle anti-bc_1 -5403 0.0000000e+00 0.0000000e+00 0.0000000e+00 -1 2 0.0000000e+00 -5403 +add p Particle anti-Xi_b*+ -5314 5.9700000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5314 +add p Particle anti-Omega_b*+ -5334 6.1300000e+00 0.0000000e+00 0.0000000e+00 3 3 0.0000000e+00 -5334 +add p Particle Xi_b*0 5324 5.9700000e+00 0.0000000e+00 0.0000000e+00 0 3 0.0000000e+00 5324 +add p Particle Omega_b*- 5334 6.1300000e+00 0.0000000e+00 0.0000000e+00 -3 3 0.0000000e+00 5334 +add p Particle anti-bb_1 -5503 0.0000000e+00 0.0000000e+00 0.0000000e+00 2 2 0.0000000e+00 -5503 +add p Particle bb_1 5503 0.0000000e+00 0.0000000e+00 0.0000000e+00 -2 2 0.0000000e+00 5503 +add p Particle h'_1 10333 1.4000000e+00 0.0000000e+00 1.0000000e-02 0 2 0.0000000e+00 10333 +add p Particle vpho 10022 0.0000000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle b_10 10113 1.2295000e+00 1.4200001e-01 2.5000000e-01 0 2 0.0000000e+00 10113 +add p Particle b_1+ 10213 1.2295000e+00 1.4200001e-01 2.5000000e-01 3 2 0.0000000e+00 10213 +add p Particle b_1- -10213 1.2295000e+00 1.4200001e-01 2.5000000e-01 -3 2 0.0000000e+00 -10213 +add p Particle f_0 9010221 9.8000000e-01 5.0000015e-02 5.0000000e-03 0 0 0.0000000e+00 10221 +add p Particle h_1 10223 1.1700000e+00 3.6000005e-01 2.0000000e-01 0 2 0.0000000e+00 10223 +add p Particle h_c 10443 3.5261400e+00 0.0000000e+00 2.0000000e-02 0 2 0.0000000e+00 10443 +add p Particle B_c0*+ 10541 7.2500000e+00 0.0000000e+00 6.0000000e-02 3 0 0.0000000e+00 10541 +add p Particle B_c0*- -10541 7.2500000e+00 0.0000000e+00 6.0000000e-02 -3 0 0.0000000e+00 -10541 +add p Particle B_c1+ 10543 7.3000000e+00 0.0000000e+00 6.0000000e-02 3 2 0.0000000e+00 10543 +add p Particle B_c1- -10543 7.3000000e+00 0.0000000e+00 6.0000000e-02 -3 2 0.0000000e+00 -10543 +add p Particle chi_b0 10551 9.8599000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 10551 +add p Particle h_b 10553 9.8750000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 10553 +add p Particle eta_b2(1D) 10555 1.0157000e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 10555 +add p Particle Lambda(1405)0 13122 1.4070000e+00 5.0000015e-02 7.0000000e-02 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1405)0 -13122 1.4070000e+00 5.0000015e-02 7.0000000e-02 0 1 0.0000000e+00 0 +add p Particle Lambda(1690)0 13124 1.6900000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle anti-Lambda(1690)0 -13124 1.6900000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle Lambda(1830)0 13126 1.8300000e+00 9.5000007e-02 4.8000000e-01 0 5 0.0000000e+00 0 +add p Particle anti-Lambda(1830)0 -13126 1.8300000e+00 9.5000007e-02 4.8000000e-01 0 5 0.0000000e+00 0 +add p Particle Sigma(1660)0 13212 1.6600000e+00 1.0000000e-01 4.0000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Sigma(1660)0 -13212 1.6600000e+00 1.0000000e-01 4.0000000e-01 0 1 0.0000000e+00 0 +add p Particle Sigma(1670)0 13214 1.6700000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle anti-Sigma(1670)0 -13214 1.6700000e+00 6.0000018e-02 3.0000000e-01 0 3 0.0000000e+00 0 +add p Particle anti-Lambda_c(2625)- -14124 2.6266000e+00 0.0000000e+00 2.8500000e-02 -3 3 0.0000000e+00 0 +add p Particle f_1 20223 1.2819000e+00 2.3999999e-02 5.0000000e-02 0 2 0.0000000e+00 20223 +add p Particle f'_1 20333 1.4263000e+00 5.5499997e-02 1.0000000e-01 0 2 0.0000000e+00 20333 +add p Particle B'_c1+ 20543 7.4000000e+00 0.0000000e+00 2.0000000e-01 3 2 0.0000000e+00 20543 +add p Particle B'_c1- -20543 7.4000000e+00 0.0000000e+00 2.0000000e-01 -3 2 0.0000000e+00 -20543 +add p Particle chi_b1 20553 9.8927000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 20553 +add p Particle Upsilon_2(1D) 20555 1.0156200e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 20555 +add p Particle Lambda_c(2593)+ 14122 2.5939000e+00 3.6000005e-03 5.4000000e-02 3 1 0.0000000e+00 0 +add p Particle Lambda_c(2625)+ 14124 2.6266000e+00 0.0000000e+00 2.8500000e-02 3 3 0.0000000e+00 0 +add p Particle anti-Lambda_c(2593)- -14122 2.5939000e+00 3.6000005e-03 5.4000000e-02 -3 1 0.0000000e+00 0 +add p Particle f'_0 10221 1.4000000e+00 3.0000009e-01 3.5000000e-01 0 0 0.0000000e+00 10331 +add p Particle pi(2S)+ 100211 1.3000000e+00 3.9999988e-01 5.0000000e-01 3 0 0.0000000e+00 0 +add p Particle Lambda(1600)0 23122 1.6000000e+00 1.5000001e-01 2.5000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1600)0 -23122 1.6000000e+00 1.5000001e-01 2.5000000e-01 0 1 0.0000000e+00 0 +add p Particle Sigma(1750)0 23212 1.7500000e+00 8.9999999e-02 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Sigma(1750)0 -23212 1.7500000e+00 8.9999999e-02 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle rho(3S)+ 30213 1.7000000e+00 2.3999999e-01 5.0000000e-01 3 2 0.0000000e+00 0 +add p Particle rho(3S)- -30213 1.7000000e+00 2.3999999e-01 5.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle K''*0 30313 1.7170000e+00 3.2000002e-01 7.0000000e-01 0 2 0.0000000e+00 0 +add p Particle anti-K''*0 -30313 1.7170000e+00 3.2000002e-01 7.0000000e-01 0 2 0.0000000e+00 0 +add p Particle K''*+ 30323 1.7170000e+00 3.2000002e-01 7.0000000e-01 3 2 0.0000000e+00 0 +add p Particle K''*- -30323 1.7170000e+00 3.2000002e-01 7.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle Xsd 30343 1.6000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 30343 +add p Particle anti-Xsd -30343 1.6000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 -30343 +add p Particle Xsu 30353 1.6000000e+00 0.0000000e+00 1.0000000e+00 3 2 0.0000000e+00 30353 +add p Particle anti-Xsu -30353 1.6000000e+00 0.0000000e+00 1.0000000e+00 -3 2 0.0000000e+00 -30353 +add p Particle Xss 30363 1.8000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 30363 +add p Particle rho(3S)0 30113 1.7000000e+00 2.3999999e-01 5.0000000e-01 0 2 0.0000000e+00 0 +add p Particle D(2S)+ 30411 2.5800000e+00 0.0000000e+00 0.0000000e+00 3 0 0.0000000e+00 0 +add p Particle D(2S)- -30411 2.5800000e+00 0.0000000e+00 0.0000000e+00 -3 0 0.0000000e+00 0 +add p Particle D*(2S)+ 30413 2.6400000e+00 0.0000000e+00 0.0000000e+00 3 2 0.0000000e+00 0 +add p Particle D*(2S)- -30413 2.6400000e+00 0.0000000e+00 0.0000000e+00 -3 2 0.0000000e+00 0 +add p Particle D(2S)0 30421 2.5800000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 +add p Particle anti-D(2S)0 -30421 2.5800000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 +add p Particle D*(2S)0 30423 2.6400000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle anti-D*(2S)0 -30423 2.6400000e+00 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 0 +add p Particle psi(3770) 30443 3.7699000e+00 2.3599998e-02 3.0000000e-02 0 2 0.0000000e+00 0 +add p Particle Upsilon_1(1D) 30553 1.0150100e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 30553 +add p Particle anti-Xss -30363 1.8000000e+00 0.0000000e+00 1.0000000e+00 0 2 0.0000000e+00 -30363 +add p Particle Lambda(1670)0 33122 1.6700000e+00 3.5000005e-02 1.8000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1670)0 -33122 1.6700000e+00 3.5000005e-02 1.8000000e-01 0 1 0.0000000e+00 0 +add p Particle Lambda(1800)0 43122 1.8000000e+00 2.9999996e-01 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1800)0 -43122 1.8000000e+00 2.9999996e-01 4.5000000e-01 0 1 0.0000000e+00 0 +add p Particle Lambda(1810)0 53122 1.8100000e+00 1.5000001e-01 4.6000000e-01 0 1 0.0000000e+00 0 +add p Particle anti-Lambda(1810)0 -53122 1.8100000e+00 1.5000001e-01 4.6000000e-01 0 1 0.0000000e+00 0 +add p Particle pi(2S)0 100111 1.3000000e+00 3.9999988e-01 5.0000000e-01 0 0 0.0000000e+00 0 +add p Particle rho(2S)0 100113 1.4650000e+00 3.1000002e-01 5.0000000e-01 0 2 0.0000000e+00 0 +add p Particle chi_b0(3P) 210551 1.0500700e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 210551 +add p Particle rho(2S)+ 100213 1.4650000e+00 3.1000002e-01 5.0000000e-01 3 2 0.0000000e+00 0 +add p Particle rho(2S)- -100213 1.4650000e+00 3.1000002e-01 5.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle eta(2S) 100221 1.2930000e+00 5.5000021e-02 2.0000000e-01 0 0 0.0000000e+00 0 +add p Particle omega(2S) 100223 1.4190000e+00 1.7000002e-01 4.0000000e-01 0 2 0.0000000e+00 0 +add p Particle K'*0 100313 1.4140000e+00 2.3199996e-01 6.0000000e-01 0 2 0.0000000e+00 0 +add p Particle anti-K'*0 -100313 1.4140000e+00 2.3199996e-01 6.0000000e-01 0 2 0.0000000e+00 0 +add p Particle pi(2S)- -100211 1.3000000e+00 3.9999988e-01 5.0000000e-01 -3 0 0.0000000e+00 0 +add p Particle K'*+ 100323 1.4140000e+00 2.3199996e-01 6.0000000e-01 3 2 0.0000000e+00 0 +add p Particle K'*- -100323 1.4140000e+00 2.3199996e-01 6.0000000e-01 -3 2 0.0000000e+00 0 +add p Particle eta_c(2S) 100441 3.6280000e+00 0.0000000e+00 2.0000000e-02 0 0 0.0000000e+00 100441 +add p Particle eta_b(2S) 100551 9.9970000e+00 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 +add p Particle Upsilon(2S) 100553 1.0023260e+01 4.3999995e-05 4.0000000e-04 0 2 0.0000000e+00 100553 +add p Particle chi_b2(2P) 100555 1.0268500e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 100555 +add p Particle Upsilon_3(2D) 100557 1.0444300e+01 0.0000000e+00 0.0000000e+00 0 6 0.0000000e+00 100557 +add p Particle h_b(2P) 110553 1.0255000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 110553 +add p Particle eta_b2(2D) 110555 1.0441000e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 110555 +add p Particle chi_b1(2P) 120553 1.0255200e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 120553 +add p Particle Upsilon_2(2D) 120555 1.0440600e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 120555 +add p Particle Upsilon_1(2D) 130553 1.0434900e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 130553 +add p Particle eta_b(3S) 200551 1.0335000e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 0 +add p Particle Upsilon(3S) 200553 1.0355200e+01 2.6300000e-05 2.6000000e-04 0 2 0.0000000e+00 200553 +add p Particle chi_b2(3P) 200555 1.0526400e+01 0.0000000e+00 0.0000000e+00 0 4 0.0000000e+00 200555 +add p Particle chi_b0(2P) 110551 1.0232100e+01 0.0000000e+00 0.0000000e+00 0 0 0.0000000e+00 110551 +add p Particle chi_b1(3P) 220553 1.0516000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 220553 +add p Particle Upsilon(4S) 300553 1.0580000e+01 1.3999999e-02 3.9000000e-02 0 2 0.0000000e+00 300553 +add p Particle sigma_0 9000221 4.7800000e-01 0.0000000e+00 4.7800000e-01 0 0 0.0000000e+00 0 +add p Particle psi(4040) 9000443 4.0400000e+00 5.1999988e-02 1.0000000e-01 0 2 0.0000000e+00 0 +add p Particle Upsilon(5S) 9000553 1.0865000e+01 1.1000001e-01 1.6500000e+00 0 2 0.0000000e+00 0 +add p Particle psi(4160) 9010443 4.1590000e+00 7.8000000e-02 1.5000000e-01 0 2 0.0000000e+00 0 +add p Particle f_0(1500) 9020221 1.5070000e+00 1.0900000e-01 3.0000000e-01 0 0 0.0000000e+00 0 +add p Particle psi(4415) 9020443 4.4150000e+00 4.3000001e-02 8.0000000e-02 0 2 0.0000000e+00 0 +add p Particle h_b(3P) 210553 1.0516000e+01 0.0000000e+00 0.0000000e+00 0 2 0.0000000e+00 210553 +add p Particle X(3872) 9120443 3.8715600e+00 2.3000000e-03 1.0000000e-03 0 2 0.0000000e+00 0 + +end diff --git a/GeneratorInterface/GenFilters/interface/MCPdgIndexFilter.h b/GeneratorInterface/GenFilters/interface/MCPdgIndexFilter.h new file mode 100644 index 0000000000000..71626b6524119 --- /dev/null +++ b/GeneratorInterface/GenFilters/interface/MCPdgIndexFilter.h @@ -0,0 +1,36 @@ +#ifndef MCPdgIndexFilter_h +#define MCPdgIndexFilter_h +/* + Description: filter events based on the particle PDG ID at a given + index in the HepMC::GenEvent record. + + Original Author: Burt Betchart, 2013/08/09 +*/ + +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + + +class MCPdgIndexFilter : public edm::EDFilter { + public: + explicit MCPdgIndexFilter(const edm::ParameterSet&); + ~MCPdgIndexFilter() {}; + + virtual bool filter(edm::Event&, const edm::EventSetup&); + private: + bool pass(const edm::Event&); + const std::string label_; + const std::vector pdgID; + const std::vector index; + const unsigned maxIndex; + const bool taggingMode; + const std::string tag; +}; +#endif diff --git a/GeneratorInterface/GenFilters/interface/ZgammaMassFilter.h b/GeneratorInterface/GenFilters/interface/ZgammaMassFilter.h new file mode 100644 index 0000000000000..06c11cfc41998 --- /dev/null +++ b/GeneratorInterface/GenFilters/interface/ZgammaMassFilter.h @@ -0,0 +1,68 @@ +#ifndef ZgammaMassFilter_h +#define ZgammaMassFilter_h +// -*- C++ -*- +// +// Package: ZgammaMassFilter +// Class: ZgammaMassFilter +// +/* + + Description: filter events based on the Pythia particle information + + Implementation: inherits from generic EDFilter + +*/ +// +// Original Author: Alexey Ferapontov +// Created: Thu July 26 11:57:54 CDT 2012 +// $Id: ZgammaMassFilter.h,v 1.1 2012/08/10 12:46:29 lenzip Exp $ +// +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + + +// +// class decleration +// + +class ZgammaMassFilter : public edm::EDFilter { + public: + explicit ZgammaMassFilter(const edm::ParameterSet&); + ~ZgammaMassFilter(); + + + virtual bool filter(edm::Event&, const edm::EventSetup&); + private: + // ----------memeber function---------------------- + int charge(const int& Id); + + // ----------member data --------------------------- + + std::string label_; + + double minPhotonPt; + double minLeptonPt; + + double minPhotonEta; + double minLeptonEta; + + double maxPhotonEta; + double maxLeptonEta; + + double minDileptonMass; + double minZgMass; + +}; +#endif diff --git a/GeneratorInterface/GenFilters/python/ZgammaFilter_cfi.py b/GeneratorInterface/GenFilters/python/ZgammaFilter_cfi.py new file mode 100644 index 0000000000000..e513fe1216180 --- /dev/null +++ b/GeneratorInterface/GenFilters/python/ZgammaFilter_cfi.py @@ -0,0 +1,24 @@ +import FWCore.ParameterSet.Config as cms + +# values tuned also according to slide 3 of : +# https://indico.cern.ch/getFile.py/access?contribId=23&sessionId=2&resId=0&materialId=slides&confId=271548 +# selection efficiency of approx 6% for ZMM_8TeV + +myZgammaFilter = cms.EDFilter('ZgammaMassFilter', + + HepMCProduct = cms.string("generator"), + + minPhotonPt = cms.double(7.), + minLeptonPt = cms.double(7.), + + minPhotonEta = cms.double(-3), + minLeptonEta = cms.double(-3), + + maxPhotonEta = cms.double(3), + maxLeptonEta = cms.double(3), + + minDileptonMass = cms.double(30.), + minZgMass = cms.double(40.) + ) + +ZgammaFilter = cms.Sequence( myZgammaFilter ) diff --git a/GeneratorInterface/GenFilters/src/MCPdgIndexFilter.cc b/GeneratorInterface/GenFilters/src/MCPdgIndexFilter.cc new file mode 100644 index 0000000000000..8368d4dd85d94 --- /dev/null +++ b/GeneratorInterface/GenFilters/src/MCPdgIndexFilter.cc @@ -0,0 +1,52 @@ +#include "GeneratorInterface/GenFilters/interface/MCPdgIndexFilter.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +MCPdgIndexFilter::MCPdgIndexFilter(const edm::ParameterSet& cfg) : + label_(cfg.getUntrackedParameter("moduleLabel",std::string("generator"))), + pdgID(cfg.getParameter >("PdgId")), + index(cfg.getParameter >("Index")), + maxIndex(*std::max_element(index.begin(),index.end())), + taggingMode(cfg.getUntrackedParameter("TagMode",false)), + tag(cfg.getUntrackedParameter("Tag","")) +{ + if (pdgID.size() != index.size()) + edm::LogWarning("MCPdgIndexFilter") + << "Configuration Error :" + << "Sizes of array parameters 'PdgId' and 'Index' differ."; + + if (taggingMode) { + produces(tag); + edm::LogInfo("TagMode") << "Filter result in '" << tag << "', filtering disabled."; + } +} + + +bool MCPdgIndexFilter::filter(edm::Event& evt, const edm::EventSetup&) { + bool result = pass(evt); + LogDebug("FilterResult") << (result?"Pass":"Fail"); + if (!taggingMode) return result; + evt.put( std::auto_ptr(new bool(result)), tag); + return true; +} + + +bool MCPdgIndexFilter::pass(const edm::Event& evt) { + edm::Handle hepmc; + evt.getByLabel(label_, hepmc); + + const HepMC::GenEvent * genEvent = hepmc->GetEvent(); + + HepMC::GenEvent::particle_const_iterator + p(genEvent->particles_begin()), + p_end(genEvent->particles_end()); + + for ( unsigned i=0; p!=p_end && i<=maxIndex; ++p, i++ ) { + LogDebug("Particle") << "index: " << i << " pdgID: " << (*p)->pdg_id(); + for (unsigned j = 0; j < pdgID.size(); j++) { + if (i==index[j] && pdgID[j] != (*p)->pdg_id()) + return false; + } + } + return true; +} diff --git a/GeneratorInterface/GenFilters/src/SealModule.cc b/GeneratorInterface/GenFilters/src/SealModule.cc index 08c82fd8ea00a..a413afe452b14 100644 --- a/GeneratorInterface/GenFilters/src/SealModule.cc +++ b/GeneratorInterface/GenFilters/src/SealModule.cc @@ -41,6 +41,7 @@ #include "GeneratorInterface/GenFilters/interface/LHEDYdecayFilter.h" #include "GeneratorInterface/GenFilters/interface/Zto2lFilter.h" #include "GeneratorInterface/GenFilters/interface/ZgMassFilter.h" +#include "GeneratorInterface/GenFilters/interface/ZgammaMassFilter.h" using cms::BHFilter; @@ -85,3 +86,4 @@ DEFINE_FWK_MODULE(LHEDYdecayFilter); DEFINE_FWK_MODULE(Zto2lFilter); DEFINE_FWK_MODULE(ZgMassFilter); + DEFINE_FWK_MODULE(ZgammaMassFilter); diff --git a/GeneratorInterface/GenFilters/src/ZgammaMassFilter.cc b/GeneratorInterface/GenFilters/src/ZgammaMassFilter.cc new file mode 100644 index 0000000000000..6b4fc4916d04a --- /dev/null +++ b/GeneratorInterface/GenFilters/src/ZgammaMassFilter.cc @@ -0,0 +1,118 @@ +#include "GeneratorInterface/GenFilters/interface/ZgammaMassFilter.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include +#include "TLorentzVector.h" + +// order std::vector of TLorentzVector elements +class orderByPt { +public: + bool operator()(TLorentzVector const & a, TLorentzVector const & b) { + if (a.Pt() == b.Pt() ) { + return a.Pt() < b.Pt(); + } else { + return a.Pt() > b.Pt() ; + } + } +}; + + +using namespace edm; +using namespace std; + +ZgammaMassFilter::ZgammaMassFilter(const edm::ParameterSet& iConfig) +{ + label_ =iConfig.getParameter("HepMCProduct"); + minPhotonPt =iConfig.getParameter("minPhotonPt"); + minLeptonPt =iConfig.getParameter("minLeptonPt"); + minPhotonEta =iConfig.getParameter("minPhotonEta"); + minLeptonEta =iConfig.getParameter("minLeptonEta"); + maxPhotonEta =iConfig.getParameter("maxPhotonEta"); + maxLeptonEta =iConfig.getParameter("maxLeptonEta"); + minDileptonMass =iConfig.getParameter("minDileptonMass"); + minZgMass =iConfig.getParameter("minZgMass"); +} + +ZgammaMassFilter::~ZgammaMassFilter() +{ +} + +// ------------ method called to skim the data ------------ +bool ZgammaMassFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + bool accepted = false; + Handle evt; + iEvent.getByLabel(label_, evt); + const HepMC::GenEvent * myGenEvent = evt->GetEvent(); + + vector Lepton; Lepton.clear(); + vector Photon; Photon.clear(); + vector Charge; Charge.clear(); + + for ( HepMC::GenEvent::particle_const_iterator p = myGenEvent->particles_begin(); + p != myGenEvent->particles_end(); ++p ) + { + if ((*p)->status() == 1 && (abs((*p)->pdg_id()) == 11 || abs((*p)->pdg_id()) == 13 || abs((*p)->pdg_id()) == 15)) { + TLorentzVector LeptP((*p)->momentum().px(), (*p)->momentum().py(), (*p)->momentum().pz(), (*p)->momentum().e()); + if (LeptP.Pt() > minLeptonPt) { + Lepton.push_back(LeptP); + } // if pt + }// if lepton + + if ( abs((*p)->pdg_id()) == 22 && (*p)->status() == 1) { + TLorentzVector PhotP((*p)->momentum().px(), (*p)->momentum().py(), (*p)->momentum().pz(), (*p)->momentum().e()); + if (PhotP.Pt() > minPhotonPt) { + Photon.push_back(PhotP); + }// if pt + }// if photon + + }// loop over particles + + + // std::cout << "\n" << "Photon size: " << Photon.size() << std::endl; + // for (unsigned int u=0; u 0 && Lepton.size() > 1 && + Photon[0].Pt() > minPhotonPt && + Lepton[0].Pt() > minLeptonPt && + Lepton[1].Pt() > minLeptonPt && + Photon[0].Eta() > minPhotonEta && + Lepton[0].Eta() > minLeptonEta && + Lepton[1].Eta() > minLeptonEta && + Photon[0].Eta() < maxPhotonEta && + Lepton[0].Eta() < maxLeptonEta && + Lepton[1].Eta() < maxLeptonEta && + (Lepton[0]+Lepton[1]).M() > minDileptonMass && + (Lepton[0]+Lepton[1]+Photon[0]).M() > minZgMass + ) + { // satisfy molteplicity, kinematics, and ll llg minimum mass + accepted = true; + } + + // std::cout << "++ returning: " << accepted << "\n" << std::endl; + + return accepted; +} diff --git a/GeneratorInterface/LHEInterface/data/run_madgraph_gridpack.sh b/GeneratorInterface/LHEInterface/data/run_madgraph_gridpack.sh index 671151194811b..4683c9619de7d 100755 --- a/GeneratorInterface/LHEInterface/data/run_madgraph_gridpack.sh +++ b/GeneratorInterface/LHEInterface/data/run_madgraph_gridpack.sh @@ -51,7 +51,9 @@ ln -sf `which gfortran` g77 PATH=`pwd`:${PATH} tar xzf ${name}_gridpack.tar.gz ; rm -f ${name}_gridpack.tar.gz ; cd madevent -## compile according to MG version 1.3.30 or 1.4.3 +## rename addmasses.py to addmasses.py.no + +find . -name addmasses.py -exec mv {} {}.no \; ########### BEGIN - REPLACE process ################ # REPLACE script is runned automatically by run.sh if REPLACE dir is found ### diff --git a/GeneratorInterface/LHEInterface/python/wlhe2HepMCConverter_cff.py b/GeneratorInterface/LHEInterface/python/wlhe2HepMCConverter_cff.py new file mode 100644 index 0000000000000..07e9978050dd1 --- /dev/null +++ b/GeneratorInterface/LHEInterface/python/wlhe2HepMCConverter_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +generator = cms.EDProducer("LHE2HepMCConverter", + LHEEventProduct = cms.InputTag("externalLHEProducer"), + LHERunInfoProduct = cms.InputTag("externalLHEProducer") + ) diff --git a/GeneratorInterface/LHEInterface/test/testPythia8_cfg.py b/GeneratorInterface/LHEInterface/test/testPythia8_cfg.py index c64ffcef165a8..fce5ba713ce9b 100755 --- a/GeneratorInterface/LHEInterface/test/testPythia8_cfg.py +++ b/GeneratorInterface/LHEInterface/test/testPythia8_cfg.py @@ -25,7 +25,7 @@ process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.threshold = 'INFO' -process.generator = cms.EDProducer("LHEProducer", +process.generator = cms.EDFilter("LHEProducer", eventsToPrint = cms.untracked.uint32(1), hadronisation = cms.PSet( @@ -49,7 +49,7 @@ process.pgen ) -process.load("Configuration.StandardSequences.VtxSmearedGauss_cff") +process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") process.genParticles.abortOnUnknownPDGCode = False diff --git a/GeneratorInterface/PartonShowerVeto/src/ME2pythia.f b/GeneratorInterface/PartonShowerVeto/src/ME2pythia.f index e3f9fff5b276c..2fca61a923c33 100644 --- a/GeneratorInterface/PartonShowerVeto/src/ME2pythia.f +++ b/GeneratorInterface/PartonShowerVeto/src/ME2pythia.f @@ -177,7 +177,7 @@ SUBROUTINE MGINIT(npara,param,value) IF(ickkw.gt.0) CALL set_matching(npara,param,value) C...For photon initial states from protons: Set proton not to break up - CALL PYGIVE('MSTP(98)=1') +CMRENNA CALL PYGIVE('MSTP(98)=1') C IF(ickkw.gt.0.and.(NPRUP.gt.1.or.iexclusive(LPRUP(1)).ne.-1)) @@ -1372,7 +1372,7 @@ SUBROUTINE set_matching(npara,param,value) C...Need lower scale for final state radiation in e+e- IF(IABS(IDBMUP(1)).EQ.11.AND.IABS(IDBMUP(2)).EQ.11) then - CALL PYGIVE('PARP(71)=1') +CMRENNA CALL PYGIVE('PARP(71)=1') ENDIF C...CRUCIAL FOR JET-PARTON MATCHING: CALL UPVETO, ALLOW JET-PARTON MATCHING @@ -1532,8 +1532,8 @@ SUBROUTINE set_matching(npara,param,value) endif else if(ickkw.eq.2)then c Turn off color coherence suppressions (leave this to ME) - CALL PYGIVE('MSTP(62)=2') - CALL PYGIVE('MSTP(67)=0') +CMRENNA CALL PYGIVE('MSTP(62)=2') +CMRENNA CALL PYGIVE('MSTP(67)=0') if(MSTP(81).LT.20)THEN WRITE(*,*)'WARNING: Must run CKKW with pt-ordered showers' WRITE(*,*)' Setting MSTP(81)=',20+MOD(MSTP(81),10) diff --git a/GeneratorInterface/Pythia8Interface/interface/Py8GunBase.h b/GeneratorInterface/Pythia8Interface/interface/Py8GunBase.h index 5ced2de8f9d00..d8691ee638f3c 100644 --- a/GeneratorInterface/Pythia8Interface/interface/Py8GunBase.h +++ b/GeneratorInterface/Pythia8Interface/interface/Py8GunBase.h @@ -1,11 +1,3 @@ -// -*- C++ -*- -// -// - -// -// This class is a "Hadronizer" template (see GeneratorInterface/Core) -// - #ifndef gen_Py8GunBase_h #define gen_Py8GunBase_h @@ -13,8 +5,6 @@ #include -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" - #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h" #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" @@ -77,4 +67,4 @@ namespace gen { } // namespace gen -#endif // gen_BaseHadronizer_h +#endif // gen_Py8GunBase_h diff --git a/GeneratorInterface/Pythia8Interface/interface/Py8InterfaceBase.h b/GeneratorInterface/Pythia8Interface/interface/Py8InterfaceBase.h index cded39192f5b0..842c9dc6b68d6 100644 --- a/GeneratorInterface/Pythia8Interface/interface/Py8InterfaceBase.h +++ b/GeneratorInterface/Pythia8Interface/interface/Py8InterfaceBase.h @@ -20,7 +20,6 @@ namespace gen { virtual bool generatePartonsAndHadronize() = 0; bool decay() { return true; } // NOT used - let's call it "design imperfection" - virtual bool residualDecay(); bool readSettings( int ); // common func virtual bool initializeForInternalPartons() = 0; bool declareStableParticles( const std::vector& ); // common func @@ -44,4 +43,4 @@ namespace gen { } -#endif +#endif // gen_Py8InterfaceBase_h diff --git a/GeneratorInterface/Pythia8Interface/plugins/Pythia8Hadronizer.cc b/GeneratorInterface/Pythia8Interface/plugins/Pythia8Hadronizer.cc index 3c7e0b3c70884..a739d7c8a5f99 100644 --- a/GeneratorInterface/Pythia8Interface/plugins/Pythia8Hadronizer.cc +++ b/GeneratorInterface/Pythia8Interface/plugins/Pythia8Hadronizer.cc @@ -57,6 +57,9 @@ class Pythia8Hadronizer : public BaseHadronizer, public Py8InterfaceBase { bool generatePartonsAndHadronize(); bool hadronize(); + + virtual bool residualDecay(); + void finalizeEvent(); void statistics(); @@ -173,6 +176,10 @@ Pythia8Hadronizer::Pythia8Hadronizer(const edm::ParameterSet ¶ms) : if( params.exists( "reweightGen" ) ) fReweightUserHook = new PtHatReweightUserHook(); + if( params.exists( "useUserHook" ) ) + throw edm::Exception(edm::errors::Configuration,"Pythia8Interface") + <<" Obsolete parameter: useUserHook \n Please use the actual one instead \n"; + // PS matching prototype // if ( params.exists("jetMatching") ) @@ -283,6 +290,20 @@ bool Pythia8Hadronizer::initializeForInternalPartons() fMasterGen->settings.listChanged(); + if ( pythiaPylistVerbosity > 10 ) + { + if ( pythiaPylistVerbosity == 11 || pythiaPylistVerbosity == 13 ) + fMasterGen->settings.listAll(); + if ( pythiaPylistVerbosity == 12 || pythiaPylistVerbosity == 13 ) + fMasterGen->particleData.listAll(); + } + + // init decayer + fDecayer->readString("ProcessLevel:all = off"); // trick + fDecayer->readString("Standalone:allowResDec=on"); + // pythia->readString("ProcessLevel::resonanceDecays=on"); + fDecayer->init(); + return true; } @@ -315,8 +336,21 @@ bool Pythia8Hadronizer::initializeForExternalPartons() } - return true; + if ( pythiaPylistVerbosity > 10 ) + { + if ( pythiaPylistVerbosity == 11 || pythiaPylistVerbosity == 13 ) + fMasterGen->settings.listAll(); + if ( pythiaPylistVerbosity == 12 || pythiaPylistVerbosity == 13 ) + fMasterGen->particleData.listAll(); + } + + // init decayer + fDecayer->readString("ProcessLevel:all = off"); // trick + fDecayer->readString("Standalone:allowResDec=on"); + // pythia->readString("ProcessLevel::resonanceDecays=on"); + fDecayer->init(); + return true; } #if 0 @@ -384,6 +418,82 @@ bool Pythia8Hadronizer::hadronize() } +bool Pythia8Hadronizer::residualDecay() +{ + + Event* pythiaEvent = &(fMasterGen->event); + + int NPartsBeforeDecays = pythiaEvent->size(); + int NPartsAfterDecays = event().get()->particles_size(); + int NewBarcode = NPartsAfterDecays; + + for ( int ipart=NPartsAfterDecays; ipart>NPartsBeforeDecays; ipart-- ) + { + + HepMC::GenParticle* part = event().get()->barcode_to_particle( ipart ); + + if ( part->status() == 1 ) + { + fDecayer->event.reset(); + Particle py8part( part->pdg_id(), 93, 0, 0, 0, 0, 0, 0, + part->momentum().x(), + part->momentum().y(), + part->momentum().z(), + part->momentum().t(), + part->generated_mass() ); + HepMC::GenVertex* ProdVtx = part->production_vertex(); + py8part.vProd( ProdVtx->position().x(), ProdVtx->position().y(), + ProdVtx->position().z(), ProdVtx->position().t() ); + py8part.tau( (fDecayer->particleData).tau0( part->pdg_id() ) ); + fDecayer->event.append( py8part ); + int nentries = fDecayer->event.size(); + if ( !fDecayer->event[nentries-1].mayDecay() ) continue; + fDecayer->next(); + int nentries1 = fDecayer->event.size(); + // fDecayer->event.list(std::cout); + if ( nentries1 <= nentries ) continue; //same number of particles, no decays... + + part->set_status(2); + + Particle& py8daughter = fDecayer->event[nentries]; // the 1st daughter + HepMC::GenVertex* DecVtx = new HepMC::GenVertex( HepMC::FourVector(py8daughter.xProd(), + py8daughter.yProd(), + py8daughter.zProd(), + py8daughter.tProd()) ); + + DecVtx->add_particle_in( part ); // this will cleanup end_vertex if exists, replace with the new one + // I presume (vtx) barcode will be given automatically + + HepMC::FourVector pmom( py8daughter.px(), py8daughter.py(), py8daughter.pz(), py8daughter.e() ); + + HepMC::GenParticle* daughter = + new HepMC::GenParticle( pmom, py8daughter.id(), 1 ); + + NewBarcode++; + daughter->suggest_barcode( NewBarcode ); + DecVtx->add_particle_out( daughter ); + + for ( int ipart1=nentries+1; ipart1event[ipart1]; + HepMC::FourVector pmomN( py8daughter.px(), py8daughter.py(), py8daughter.pz(), py8daughter.e() ); + HepMC::GenParticle* daughterN = + new HepMC::GenParticle( pmomN, py8daughter.id(), 1 ); + NewBarcode++; + daughterN->suggest_barcode( NewBarcode ); + DecVtx->add_particle_out( daughterN ); + } + + event().get()->add_vertex( DecVtx ); + // fCurrentEventState->add_vertex( DecVtx ); + + } + } + return true; + +} + + void Pythia8Hadronizer::finalizeEvent() { bool lhe = lheEvent() != 0; diff --git a/GeneratorInterface/Pythia8Interface/src/Py8GunBase.cc b/GeneratorInterface/Pythia8Interface/src/Py8GunBase.cc index 716aa9a20d516..da911a8b7e41e 100644 --- a/GeneratorInterface/Pythia8Interface/src/Py8GunBase.cc +++ b/GeneratorInterface/Pythia8Interface/src/Py8GunBase.cc @@ -1,4 +1,3 @@ - #include "GeneratorInterface/Pythia8Interface/interface/Py8GunBase.h" // #include "GeneratorInterface/Pythia8Interface/interface/RandomP8.h" // #include "GeneratorInterface/Core/interface/RNDMEngineAccess.h" diff --git a/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc b/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc index 6814ce7985e26..8d8fd8574790e 100644 --- a/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc +++ b/GeneratorInterface/Pythia8Interface/src/Py8InterfaceBase.cc @@ -1,9 +1,3 @@ -//#include -//#include -//#include -//#include -//#include - #include "GeneratorInterface/Pythia8Interface/interface/Py8InterfaceBase.h" #include "GeneratorInterface/Pythia8Interface/interface/RandomP8.h" #include "GeneratorInterface/Core/interface/RNDMEngineAccess.h" @@ -53,14 +47,6 @@ bool Py8InterfaceBase::readSettings( int ) << *line << "\"." << std::endl; } - if ( pythiaPylistVerbosity > 10 ) - { - if ( pythiaPylistVerbosity == 11 || pythiaPylistVerbosity == 13 ) - fMasterGen->settings.listAll(); - if ( pythiaPylistVerbosity == 12 || pythiaPylistVerbosity == 13 ) - fMasterGen->particleData.listAll(); - } - return true; } @@ -102,88 +88,6 @@ bool Py8InterfaceBase:: declareSpecialSettings( const std::vector& return true; } -bool Py8InterfaceBase::residualDecay() -{ - -/* - Event* pythiaEvent = &(fMasterPtr->event); - - assert(fCurrentEventState); - - int NPartsBeforeDecays = pythiaEvent->size(); - // int NPartsAfterDecays = event().get()->particles_size(); - int NPartsAfterDecays = fCurrentEventState->particles_size(); - int NewBarcode = NPartsAfterDecays; - - for ( int ipart=NPartsAfterDecays; ipart>NPartsBeforeDecays; ipart-- ) - { - - // HepMC::GenParticle* part = event().get()->barcode_to_particle( ipart ); - HepMC::GenParticle* part = fCurrentEventState->barcode_to_particle( ipart ); - - if ( part->status() == 1 ) - { - fDecayerPtr->event.reset(); - Particle py8part( part->pdg_id(), 93, 0, 0, 0, 0, 0, 0, - part->momentum().x(), - part->momentum().y(), - part->momentum().z(), - part->momentum().t(), - part->generated_mass() ); - HepMC::GenVertex* ProdVtx = part->production_vertex(); - py8part.vProd( ProdVtx->position().x(), ProdVtx->position().y(), - ProdVtx->position().z(), ProdVtx->position().t() ); - py8part.tau( (fDecayerPtr->particleData).tau0( part->pdg_id() ) ); - fDecayerPtr->event.append( py8part ); - int nentries = fDecayerPtr->event.size(); - if ( !fDecayerPtr->event[nentries-1].mayDecay() ) continue; - fDecayerPtr->next(); - int nentries1 = fDecayerPtr->event.size(); - // --> fDecayerPtr->event.list(std::cout); - if ( nentries1 <= nentries ) continue; //same number of particles, no decays... - - part->set_status(2); - - Particle& py8daughter = fDecayerPtr->event[nentries]; // the 1st daughter - HepMC::GenVertex* DecVtx = new HepMC::GenVertex( HepMC::FourVector(py8daughter.xProd(), - py8daughter.yProd(), - py8daughter.zProd(), - py8daughter.tProd()) ); - - DecVtx->add_particle_in( part ); // this will cleanup end_vertex if exists, replace with the new one - // I presume (vtx) barcode will be given automatically - - HepMC::FourVector pmom( py8daughter.px(), py8daughter.py(), py8daughter.pz(), py8daughter.e() ); - - HepMC::GenParticle* daughter = - new HepMC::GenParticle( pmom, py8daughter.id(), 1 ); - - NewBarcode++; - daughter->suggest_barcode( NewBarcode ); - DecVtx->add_particle_out( daughter ); - - for ( ipart=nentries+1; ipartevent[ipart]; - HepMC::FourVector pmomN( py8daughter.px(), py8daughter.py(), py8daughter.pz(), py8daughter.e() ); - HepMC::GenParticle* daughterN = - new HepMC::GenParticle( pmomN, py8daughter.id(), 1 ); - NewBarcode++; - daughterN->suggest_barcode( NewBarcode ); - DecVtx->add_particle_out( daughterN ); - } - - // event().get()->add_vertex( DecVtx ); - fCurrentEventState->add_vertex( DecVtx ); - - } - } -*/ - return true; - -} - - void Py8InterfaceBase::statistics() { diff --git a/GeneratorInterface/Pythia8Interface/test/BuildFile.xml b/GeneratorInterface/Pythia8Interface/test/BuildFile.xml new file mode 100755 index 0000000000000..0a302c56e7e22 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/BuildFile.xml @@ -0,0 +1,14 @@ + + + + + + + +# +# +# + + + + diff --git a/GeneratorInterface/Pythia8Interface/test/Py8Had_MGFastJet_cfg.py b/GeneratorInterface/Pythia8Interface/test/Py8Had_MGFastJet_cfg.py index b42cb926721ed..4aa3332073bc8 100644 --- a/GeneratorInterface/Pythia8Interface/test/Py8Had_MGFastJet_cfg.py +++ b/GeneratorInterface/Pythia8Interface/test/Py8Had_MGFastJet_cfg.py @@ -67,11 +67,9 @@ #) process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", - moduleSeeds = cms.PSet( - generator = cms.untracked.uint32(123456), - g4SimHits = cms.untracked.uint32(123456788), - VtxSmeared = cms.untracked.uint32(123456789) - ), + generator = cms.PSet( + initialSeed = cms.untracked.uint32(123456789), + ) ) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) diff --git a/GeneratorInterface/Pythia8Interface/test/Py8Had_mgmatching_cfg.py b/GeneratorInterface/Pythia8Interface/test/Py8Had_mgmatching_cfg.py index 3b18c1d54ac4a..77eaf881454d1 100644 --- a/GeneratorInterface/Pythia8Interface/test/Py8Had_mgmatching_cfg.py +++ b/GeneratorInterface/Pythia8Interface/test/Py8Had_mgmatching_cfg.py @@ -68,11 +68,9 @@ #) process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", - moduleSeeds = cms.PSet( - generator = cms.untracked.uint32(123456), - g4SimHits = cms.untracked.uint32(123456788), - VtxSmeared = cms.untracked.uint32(123456789) - ), + generator = cms.PSet( + initialSeed = cms.untracked.uint32(123456789), + ) ) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) diff --git a/GeneratorInterface/Pythia8Interface/test/Py8_Z2tautau_tauola_cfg.py b/GeneratorInterface/Pythia8Interface/test/Py8_Z2tautau_tauola_cfg.py new file mode 100644 index 0000000000000..911be14a764a7 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/Py8_Z2tautau_tauola_cfg.py @@ -0,0 +1,81 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("TEST") + +process.load("FWCore.Framework.test.cmsExceptionsFatal_cff") +process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +process.load("PhysicsTools.HepMCCandAlgos.genParticles_cfi") + +process.source = cms.Source("EmptySource", + firstLuminosityBlock = cms.untracked.uint32(1), +# numberEventsInLuminosityBlock = cms.untracked.uint32(200), + firstEvent = cms.untracked.uint32(1), + firstRun = cms.untracked.uint32(1), + numberEventsInRun = cms.untracked.uint32(100) + +) + +from GeneratorInterface.ExternalDecays.TauolaSettings_cff import * + +process.generator = cms.EDFilter("Pythia8GeneratorFilter", + maxEventsToPrint = cms.untracked.int32(1), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(8000.), + ExternalDecays = cms.PSet( + Tauola = cms.untracked.PSet( + TauolaPolar, + TauolaDefaultInputCards + ), + parameterSets = cms.vstring('Tauola') + ), + + PythiaParameters = cms.PSet( + py8ProcessSettings = cms.vstring( 'StringZ:usePetersonB = on', # these 2 together == + 'StringZ:usePetersonC = on', # mstj(11)=3 + 'WeakSingleBoson:ffbar2gmZ = on' # msel=11 + # what about choice of structure function ??? (mstp(51)=7) + ), + py8ZDecaySettings = cms.vstring( '23:onMode = off', # turn OFF all Z decays + '23:onIfAny = 15' # turn ON Z->tautau + ), + py8TauDecaySettings = cms.vstring('15:onMode = off', # turn OFF all tau decays + ), + parameterSets = cms.vstring( + 'py8ProcessSettings', + 'py8ZDecaySettings') + ) +) + +# The following three lines reduce the clutter of repeated printouts +# of the same exception message. +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.destinations = ['cerr'] +process.MessageLogger.statistics = [] +process.MessageLogger.fwkJobReports = [] + +process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", + generator = cms.PSet( + initialSeed = cms.untracked.uint32(123456789), + engineName = cms.untracked.string('HepJamesRandom') + ) +) + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(100) +) + +process.GEN = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('Py8_Z2tautau_tauola.root') +) + +process.printGenParticles = cms.EDAnalyzer("ParticleListDrawer", + src = cms.InputTag("genParticles"), + maxEventsToPrint = cms.untracked.int32(3) ) + +process.p = cms.Path(process.generator*process.genParticles*process.printGenParticles) +process.outpath = cms.EndPath(process.GEN) + +process.schedule = cms.Schedule(process.p, process.outpath) + diff --git a/GeneratorInterface/Pythia8Interface/test/ZJetsAnalyzer.cc b/GeneratorInterface/Pythia8Interface/test/ZJetsAnalyzer.cc new file mode 100755 index 0000000000000..fff2c20c07966 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/ZJetsAnalyzer.cc @@ -0,0 +1,214 @@ +#include +#include + +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h" + +// essentials !!! +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "TH1.h" + +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include +#include +#include + +#include "GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.h" +#include "GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h" + +struct ParticlePtGreater { + double operator () (const HepMC::GenParticle *v1, + const HepMC::GenParticle *v2) + { return v1->momentum().perp() > v2->momentum().perp(); } +}; + + +class ZJetsAnalyzer : public edm::EDAnalyzer +{ + + public: + + // + explicit ZJetsAnalyzer( const edm::ParameterSet& ) ; + virtual ~ZJetsAnalyzer(); // no need to delete ROOT stuff + // as it'll be deleted upon closing TFile + + virtual void analyze( const edm::Event&, const edm::EventSetup& ) override; + virtual void beginJob() override; + virtual void endRun( const edm::Run&, const edm::EventSetup& ) override; + + private: + + LeptonAnalyserHepMC LA; + JetInputHepMC JetInput; + fastjet::Strategy strategy; + fastjet::RecombinationScheme recombScheme; + fastjet::JetDefinition* jetDef; + + int icategories[6]; + + TH1D* fHist2muMass ; + +}; + + +using namespace edm; +using namespace std; + + +ZJetsAnalyzer::ZJetsAnalyzer( const ParameterSet& pset ) + : fHist2muMass(0) +{ +// actually, pset is NOT in use - we keep it here just for illustratory putposes +} + + +ZJetsAnalyzer::~ZJetsAnalyzer() +{;} + + +void ZJetsAnalyzer::beginJob() +{ + + Service fs; + fHist2muMass = fs->make( "Hist2muMass", "2-mu inv. mass", 100, 60., 120. ) ; + + double Rparam = 0.5; + strategy = fastjet::Best; + recombScheme = fastjet::E_scheme; + jetDef = new fastjet::JetDefinition(fastjet::antikt_algorithm, Rparam, + recombScheme, strategy); + + for (int ind=0; ind < 6; ind++) {icategories[ind]=0;} + + return ; + +} + + +void ZJetsAnalyzer::endRun( const Run& r, const EventSetup& ) +{ + ofstream testi("testi.dat"); + double val, errval; + + Handle< GenRunInfoProduct > genRunInfoProduct; + r.getByLabel("generator", genRunInfoProduct ); + val = (double)genRunInfoProduct->crossSection(); + cout << endl; + cout << "cross section = " << val << endl; + cout << endl; + + errval = 0.; + if(icategories[0] > 0) errval = val/sqrt( (double)(icategories[0]) ); + testi << "pythia8_test1 1 " << val << " " << errval << " " << endl; + + cout << endl; + cout << " Events with at least 1 isolated lepton : " + << ((double)icategories[1])/((double)icategories[0]) << endl; + cout << " Events with at least 2 isolated leptons : " + << ((double)icategories[2])/((double)icategories[0]) << endl; + cout << " Events with at least 2 isolated leptons and at least 1 jet : " + << ((double)icategories[3])/((double)icategories[0]) << endl; + cout << " Events with at least 2 isolated leptons and at least 2 jets : " + << ((double)icategories[4])/((double)icategories[0]) << endl; + cout << endl; + + val = ((double)icategories[4])/((double)icategories[0]); + errval = 0.; + if(icategories[4] > 0) errval = val/sqrt((double)icategories[4]); + testi << "pythia8_test1 2 " << val << " " << errval << " " << endl; + +} + + +void ZJetsAnalyzer::analyze( const Event& e, const EventSetup& ) +{ + + icategories[0]++; + + // here's an example of accessing GenEventInfoProduct + Handle< GenEventInfoProduct > GenInfoHandle; + e.getByLabel( "generator", GenInfoHandle ); + double qScale = GenInfoHandle->qScale(); + double pthat = ( GenInfoHandle->hasBinningValues() ? + (GenInfoHandle->binningValues())[0] : 0.0); + cout << " qScale = " << qScale << " pthat = " << pthat << endl; + // + // this (commented out) code below just exemplifies how to access certain info + // + //double evt_weight1 = GenInfoHandle->weights()[0]; // this is "stanrd Py6 evt weight; + // corresponds to PYINT1/VINT(97) + //double evt_weight2 = GenInfoHandle->weights()[1]; // in case you run in CSA mode or otherwise + // use PYEVWT routine, this will be weight + // as returned by PYEVWT, i.e. PYINT1/VINT(99) + //std::cout << " evt_weight1 = " << evt_weight1 << std::endl; + //std::cout << " evt_weight2 = " << evt_weight2 << std::endl; + //double weight = GenInfoHandle->weight(); + //std::cout << " as returned by the weight() method, integrated event weight = " << weight << std::endl; + + // here's an example of accessing particles in the event record (HepMCProduct) + // + Handle< HepMCProduct > EvtHandle ; + + // find initial (unsmeared, unfiltered,...) HepMCProduct + // + e.getByLabel( "generator", EvtHandle ) ; + + const HepMC::GenEvent* Evt = EvtHandle->GetEvent() ; + + int nisolep = LA.nIsolatedLeptons(Evt); + + //cout << "Number of leptons = " << nisolep << endl; + if(nisolep > 0) icategories[1]++; + if(nisolep > 1) icategories[2]++; + + JetInputHepMC::ParticleVector jetInput = JetInput(Evt); + std::sort(jetInput.begin(), jetInput.end(), ParticlePtGreater()); + + //cout << "Size of jet input = " << jetInput.size() << endl; + + // Fastjet input + std::vector jfInput; + jfInput.reserve(jetInput.size()); + for (JetInputHepMC::ParticleVector::const_iterator iter = jetInput.begin(); + iter != jetInput.end(); ++iter) { + jfInput.push_back(fastjet::PseudoJet( (*iter)->momentum().px(), + (*iter)->momentum().py(), + (*iter)->momentum().pz(), + (*iter)->momentum().e() ) ); + jfInput.back().set_user_index(iter - jetInput.begin()); + } + + // Run Fastjet algorithm + vector inclusiveJets, sortedJets, cleanedJets; + fastjet::ClusterSequence clustSeq(jfInput, *jetDef); + + // Extract inclusive jets sorted by pT (note minimum pT in GeV) + inclusiveJets = clustSeq.inclusive_jets(20.0); + sortedJets = sorted_by_pt(inclusiveJets); + + //cout << "Size of jets = " << sortedJets.size() << endl; + + cleanedJets = LA.removeLeptonsFromJets(sortedJets, Evt); + + //cout << "Size of cleaned jets = " << cleanedJets.size() << endl; + if(nisolep > 1) { + if(cleanedJets.size() > 0) icategories[3]++; + if(cleanedJets.size() > 1) icategories[4]++; + } + + return ; + +} + + +typedef ZJetsAnalyzer ZJetsTest; +DEFINE_FWK_MODULE(ZJetsTest); diff --git a/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.cc b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.cc new file mode 100644 index 0000000000000..859d513966a78 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.cc @@ -0,0 +1,67 @@ +#include "GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h" + + +JetInputHepMC::JetInputHepMC() : + ptMin(0.0) +{} + + +JetInputHepMC::~JetInputHepMC() +{} + + +void JetInputHepMC::setIgnoredParticles(const std::vector &particleIDs) +{ + ignoreParticleIDs = particleIDs; + std::sort(ignoreParticleIDs.begin(), ignoreParticleIDs.end()); +} + + +static inline bool isContained(const std::vector &list, int id) +{ + unsigned int absId = (unsigned int)(id > 0 ? id : -id); + std::vector::const_iterator pos = + std::lower_bound(list.begin(), list.end(), absId); + return pos != list.end() && *pos == absId; +} + + +bool JetInputHepMC::isIgnored(int pdgId) const +{ + return isContained(ignoreParticleIDs, pdgId); +} + + +JetInputHepMC::ParticleVector JetInputHepMC::operator () ( + const HepMC::GenEvent* event) const +{ + ParticleVector particles; + for (HepMC::GenEvent::particle_const_iterator iter = event->particles_begin(); + iter != event->particles_end(); ++iter) + particles.push_back(*iter); + + std::sort(particles.begin(), particles.end()); + unsigned int size = particles.size(); + + ParticleBitmap selected(size, false); + ParticleBitmap invalid(size, false); + + for(unsigned int i = 0; i < size; i++) { + const HepMC::GenParticle *particle = particles[i]; + if (invalid[i]) continue; + if (particle->status() == 1) selected[i] = true; + } + + ParticleVector result; + for(unsigned int i = 0; i < size; i++) { + const HepMC::GenParticle *particle = particles[i]; + if (!selected[i] || invalid[i]) continue; + + //if (isIgnored(particle->pdg_id())) continue; + + if (particle->momentum().perp() >= ptMin) result.push_back(particle); + + } + + return result; +} diff --git a/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h new file mode 100644 index 0000000000000..7d131f50c2ee4 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/JetInputHepMC.h @@ -0,0 +1,36 @@ +// JetInputHepMC declaration + +#ifndef JetInputHepMC_h +#define JetInputHepMC_h + +#include + +#include +#include +#include + +#include + + +class JetInputHepMC { + public: + typedef std::vector ParticleBitmap; + typedef std::vector ParticleVector; + JetInputHepMC(); + ~JetInputHepMC(); + + ParticleVector operator () (const HepMC::GenEvent *event) const; + + double getPtMin() const { return ptMin; } + void setPtMin(double ptMin) { this->ptMin = ptMin; } + + void setIgnoredParticles(const std::vector &particleIDs); + + bool isIgnored(int pdgId) const; + + private: + std::vector ignoreParticleIDs; + double ptMin; +}; + +#endif // JetInputHepMC_h diff --git a/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.cc b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.cc new file mode 100644 index 0000000000000..73f46cfbed4ed --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.cc @@ -0,0 +1,151 @@ +#include "GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.h" +#include "HepMC/GenVertex.h" +#include "HepMC/GenParticle.h" +#include +#include + + +LeptonAnalyserHepMC::LeptonAnalyserHepMC(double aMaxEta, double aThresholdEt) +: MaxEta(aMaxEta), ThresholdEt(aThresholdEt), + RConeIsol(0.3), MaxPtIsol(2.), + RIdJet(0.3), EpsIdJet(0.6) +{;} + + +std::vector + LeptonAnalyserHepMC::isolatedLeptons(const HepMC::GenEvent* pEv) +{ + HepMC::GenEvent::particle_const_iterator part; + HepMC::GenEvent::particle_const_iterator part1; + + std::vector isoleptons; + bool lepton = false; + for(part = pEv->particles_begin(); part != pEv->particles_end(); ++part ) { + lepton = false; + if( abs((*part)->pdg_id()) == 11 ) lepton = true; + if( abs((*part)->pdg_id()) == 13 ) lepton = true; + if( !(*part)->end_vertex() && (*part)->status() == 1 && lepton && + fabs((*part)->momentum().eta()) < MaxEta && + (*part)->momentum().perp() > ThresholdEt ) { + + double eta0 = (*part)->momentum().eta(); + double phi0 = (*part)->momentum().phi(); + double pti, dist, etai, phii, dphi; + bool isol = true; + for(part1 = pEv->particles_begin(); + part1 != part && part1 != pEv->particles_end(); + part1++ ) { + if( !(*part1)->end_vertex() && (*part1)->status() == 1 ) { + pti = (*part1)->momentum().perp(); + etai = (*part1)->momentum().eta(); + phii = (*part1)->momentum().phi(); + dphi = phi0-phii; + if(fabs(phi0-phii-6.2832) < fabs(dphi)) dphi = phi0-phii-6.2832; + if(fabs(phi0-phii+6.2832) < fabs(dphi)) dphi = phi0-phii+6.2832; + dist = sqrt( (eta0-etai)*(eta0-etai) + dphi*dphi ); + if(dist < RConeIsol && pti > MaxPtIsol ) { isol = false; break;} + } + } + if(isol) isoleptons.push_back(HepMC::GenParticle(**part)); + } + } + return isoleptons; +} + + +int LeptonAnalyserHepMC::nIsolatedLeptons(const HepMC::GenEvent* pEv) +{ + std::vector isoleptons = isolatedLeptons(pEv); + return isoleptons.size(); +} + + +double LeptonAnalyserHepMC::MinMass(const HepMC::GenEvent* pEv) +{ + std::vector isoleptons = isolatedLeptons(pEv); + if(isoleptons.size() < 2) return 0.; + double MinM=100000.; + std::vector::iterator ipart, ipart1; + for ( ipart=isoleptons.begin(); ipart != isoleptons.end(); ipart++) { + for ( ipart1=isoleptons.begin(); ipart1 != isoleptons.end(); ipart1++) { + if(ipart1 == ipart) continue; + double px = ipart->momentum().px() + ipart1->momentum().px(); + double py = ipart->momentum().py() + ipart1->momentum().py(); + double pz = ipart->momentum().pz() + ipart1->momentum().pz(); + double e = ipart->momentum().e() + ipart1->momentum().e(); + double mass = sqrt(e*e - px*px - py*py -pz*pz); + if(mass < MinM) MinM = mass; + } + } + return MinM; +} + + +std::vector + LeptonAnalyserHepMC::removeLeptonsFromJets(std::vector& jets, + const HepMC::GenEvent* pEv) +{ + std::vector isoleptons = isolatedLeptons(pEv); + if(isoleptons.empty()) return jets; + std::vector::iterator ijet; + std::vector::iterator ipart; + std::vector newjets; + for ( ijet = jets.begin(); ijet != jets.end(); ijet++) { + if (fabs(ijet->rap()) > 5.0) continue; + bool isLepton = false; + for ( ipart=isoleptons.begin(); ipart != isoleptons.end(); ipart++) { + fastjet::PseudoJet fjLept(ipart->momentum().px(), + ipart->momentum().py(), + ipart->momentum().pz(), + ipart->momentum().e() ); + //cout << "lepton eta = " << fjLept.rap() << endl; + + if ( fjLept.squared_distance(*ijet) < RIdJet*RIdJet && + fabs(ijet->e() - ipart->momentum().e()) / ijet->e() < EpsIdJet ) + isLepton = true; + + } + + if(!isLepton) newjets.push_back(*ijet); + + } + return newjets; +} + + +#if 0 +vector LeptonAnalyserHepMC::removeLeptonsFromJets(vector& jets, + HepMC::GenEvent* pEv) +{ + vector isoleptons = isolatedLeptons(pEv); + if(isoleptons.empty()) return jets; + vector::iterator ijet; + vector::iterator ipart; +#if 00 + // this code can be used if first argument is vector, not vector& + for ( ijet = jets.begin(); ijet < jets.end(); ijet++) { + bool bad = false; + for ( ipart=isoleptons.begin(); ipart != isoleptons.end(); ipart++) { + JetableObject jpart(*ipart); + if(ijet->dist(jpart) < RIdJet && + fabs(ijet->e()-ipart->momentum().e())/ijet->e() < EpsIdJet ) + bad = true; + } + if(bad) {ijet = jets.erase(ijet); ijet--;} + } + return jets; +#endif + vector newjets; + for ( ijet = jets.begin(); ijet != jets.end(); ijet++) { + bool islepton = false; + for ( ipart=isoleptons.begin(); ipart != isoleptons.end(); ipart++) { + JetableObject jpart(*ipart); + if(ijet->dist(jpart) < RIdJet && + fabs(ijet->e()-ipart->momentum().e())/ijet->e() < EpsIdJet ) + islepton = true; + } + if(!islepton) newjets.push_back(*ijet); + } + return newjets; +} +#endif diff --git a/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.h b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.h new file mode 100644 index 0000000000000..c9198ad29e6f5 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/analyserhepmc/LeptonAnalyserHepMC.h @@ -0,0 +1,26 @@ +#include "HepMC/GenEvent.h" +#include + + +#include + +class LeptonAnalyserHepMC { + +public: + LeptonAnalyserHepMC (double aMaxEta = 2.4, double aThresholdEt = 20.); + + std::vector isolatedLeptons(const HepMC::GenEvent* pEv); + int nIsolatedLeptons(const HepMC::GenEvent* pEv); + double MinMass(const HepMC::GenEvent* pEv); + std::vector + removeLeptonsFromJets(std::vector& jets, + const HepMC::GenEvent* pEv); + +private: + double MaxEta; + double ThresholdEt; + double RConeIsol; + double MaxPtIsol; + double RIdJet; + double EpsIdJet; +}; diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8ex8_cfg.py b/GeneratorInterface/Pythia8Interface/test/pythia8ex8_cfg.py new file mode 100644 index 0000000000000..07f772487acbb --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8ex8_cfg.py @@ -0,0 +1,52 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PROD") + +process.load("Configuration.StandardSequences.SimulationRandomNumberGeneratorSeeds_cff") + +process.source = cms.Source("EmptySource") + +process.generator = cms.EDFilter("Pythia8GeneratorFilter", + maxEventsToPrint = cms.untracked.int32(1), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(8000.), + PythiaParameters = cms.PSet( + pythia8_example08 = cms.vstring('WeakBosonAndParton:qqbar2gmZg = on', + 'WeakBosonAndParton:qg2gmZq = on', + 'PhaseSpace:pTHatMin = 20.', + '23:onMode = off', + '23:onIfAny = 11 13 15'), + parameterSets = cms.vstring('pythia8_example08') + ) +) + +process.MessageLogger = cms.Service("MessageLogger", + cout = cms.untracked.PSet( + default = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + destinations = cms.untracked.vstring('cout') +) + +process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", + generator = cms.PSet( + initialSeed = cms.untracked.uint32(123456789), + ) +) + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +process.GEN = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('pythia8ex8.root') +) + +process.p = cms.Path(process.generator) +process.outpath = cms.EndPath(process.GEN) + +process.schedule = cms.Schedule(process.p, process.outpath) + diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/ZJetsTest_cfg.py b/GeneratorInterface/Pythia8Interface/test/pythia8test/ZJetsTest_cfg.py new file mode 100755 index 0000000000000..e5190af5ee1ce --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/ZJetsTest_cfg.py @@ -0,0 +1,29 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("Analysis") + +# run the input file through the end; +# for a limited number of events, replace -1 with the desired number +# +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +#process.load( "SimGeneral.HepPDTESSource.pythiapdt_cfi" ) + +process.source = cms.Source( "PoolSource", + fileNames = cms.untracked.vstring( + 'file:p8test1step1.root' + ) + ) + +# FileService is mandatory, as the following analyzer module +# will want it, to create output histogram file +# +process.TFileService = cms.Service("TFileService", + fileName = cms.string("hist.root") +) + +# the analyzer itself - empty parameter set +# +process.TestHepMCEvt = cms.EDAnalyzer( "ZJetsTest" ) + +process.p1 = cms.Path( process.TestHepMCEvt ) diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/chi.c b/GeneratorInterface/Pythia8Interface/test/pythia8test/chi.c new file mode 100644 index 0000000000000..f30d054e37f0b --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/chi.c @@ -0,0 +1,29 @@ +#include +#include + +int main(void) +{ + double y, dy, y0, dy0; + double chi; + + scanf("%lE%lE%lE%lE", &y, &dy, &y0, &dy0); + + if (dy == 0. && dy0 == 0.) + chi = -1.; + else + chi = (y - y0) / sqrt(dy*dy + dy0*dy0); + + printf("%lE %lE %lE %lE %lf ", y, dy, y0, dy0, chi); + + if ( (fabs(y0) < 5*dy0 || fabs(y) <= 4*dy) && fabs(chi) <= 3.) + printf("[BADSTAT]\n"); + else + if (fabs(chi) > 3. || fabs(chi) <= 3.) { // this if is to deal with NaN + if (fabs(chi) > 3.) printf("[DEVIATION]\n"); + if (fabs(chi) <= 3.) printf("[OK]\n"); + } + else + printf("[DEVIATION]\n"); + + return 0; +} diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/cmpr.sh b/GeneratorInterface/Pythia8Interface/test/pythia8test/cmpr.sh new file mode 100755 index 0000000000000..f33c43d6d0cfd --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/cmpr.sh @@ -0,0 +1,249 @@ +#!/bin/bash + +# check parameters +if [[ "$#" != "2" ]] ; then + echo "Usage: ./cmpr.sh test.dat [html|text]" >&2 + exit 1 +fi + +TEST_DAT="$1" +FORMAT="$2" +REFERENCE_DAT="reference.dat" + +if ! [ -f ${TEST_DAT} ] || ! [ -s ${TEST_DAT} ] ; then + echo "ERROR: $0: ${TEST_DAT} doesn't exist or empty." >&2 + exit 1 +fi + +#---------------------------- + +top_text () { + printf "%-15s %5s | %-12s %-12s %-12s %-12s | %10s %-10s\n" "Routine" "Test" "Y" "dY" "Yref" "dYref" "Pull" "Status" + echo "-------------------------------------------------------------------------------------------------" +} + +top_html () { +cat << EOT + + + Test results + + + + + +

Test results

+

+Platform: ${PLATFORM}
+Test date: $(date)
+


+

Notation:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Y ,       dY -- value of an observable and its stat. error
Yref , dYref -- reference value of an observable and its stat. error
Pull -- ( Y - Yref ) / ( dY 2 + dY 2ref ) 1/2
ok -- test is succesfully compiled and executed with pull < 3
badstat -- as above, but statistics is insufficient: Yref < 5dYref or Y < 4dY
deviation -- pull > 3
failed -- test crashed
errors -- test failed to compile
+
+ +

+ Show/Hide rows with Status = [OK] +

+ + + + + + + + + + + + + +EOT +} + +bottom_html () { + echo "
GeneratorTestYdYYrefdYrefPullStatus
"; + return; +} + +print_text () { + printf "%-15s %5s | %-12s %-12s %-12s %-12s | %10s %-10s\n" $* +} + +print_html () { + local g=$(echo $* | cut -d ' ' -f 1) + local n=$(echo $* | cut -d ' ' -f 2) + local end=$(echo $* | cut -d ' ' -f 3-) + + local rowid="bad" + if [ "x$end" != "x${end/OK/}" ] ; then + rowid="good" + fi + + local color + if [[ "$end" != "${end/OK/}" ]] ; then + color="#00ff00" + elif [[ "$end" != "${end/NO_REFERENCE/}" ]] ; then + color="#FFD91C" + elif [[ "$end" != "${end/BADSTAT/}" ]] ; then + color="#4aa1ff" + elif [[ "$end" != "${end/DEVIATION/}" ]] ; then + color="#ffaa00" + else + color="#ff0000" + fi + + echo "" + echo " ${g} " + echo " $n " + + printf "%s %s %s %s %s %s \n" $end +} + +process_tests () { + cc -o chi.exe chi.c -lm >&2 + + # TODO: check the case of empty $TEST_DAT file = [GENERATOR FAILED!] + + { + # print the list of tested generators + # [output]: + # "generator name" + + cat $TEST_DAT | cut -d _ -f 1 | sort | uniq + } | \ + { + # print the list of all available tests for + # generators from the input stream + # [output]: + # "test name" "test #" + + while read gen ; do + cat $TEST_DAT $REFERENCE_DAT | sed 's,!.*$,,' | grep "^${gen}_" | sed 's, *, ,g' | cut -d ' ' -f 1-2 | sort -u + done + } | \ + { + # print the list of test results for + # the tests from the input stream + # [output]: + # "test name" "test #" "y" "dy" "y0" "dy0" "chi2" "result" + + while read gentest no ; do + + output="$gentest $no " + + # get test and reference values +# echo "DBG:^$gentest $no:" >&2 + ydy=$(cat $TEST_DAT | sed 's, *, ,g; s,!.*$,,;' | grep -E "^${gentest} ${no} " | cut -d ' ' -f 3-4) +# echo "DBG ydy:$ydy:">&2 + y0dy0=$(cat $REFERENCE_DAT | sed 's, *, ,g; s,!.*$,,;' | grep -E "^${gentest} ${no} " | cut -d ' ' -f 3-4) +# echo "DBG y0dy0:$y0dy0:">&2 + + if [[ "$ydy" != "" && "$y0dy0" != "" ]] ; then +# echo "DBG: --- echo $ydy $y0dy0 | chi --- " >&2 + output1=`echo "$ydy $y0dy0" | ./chi.exe` + echo "$output $output1" + else + if [[ "$y0dy0" == "" ]] ; then + # reference is missing + y0dy0="- -" + result="[NO_REFERENCE]" + fi + + if [[ "$ydy" == "" ]] ; then + # test is missing + ydy="- -" + result="[TEST_FAILED]" + fi + + # NOTE: if both - reference and test is missing + # then the test will be marked as FAILED + + echo "$output $ydy $y0dy0 - $result" + fi + done + } + + rm -f chi.exe >&2 +} + +# print test dependencies +print_tests_info() { + # find library dependencies tool + if which ldd >& /dev/null ; then + # linux machine: + LDD="ldd " + elif which otool >& /dev/null ; then + # mac machine: + LDD="otool -L " + else + echo "WARNING: can't find ldd routine. Can't get dynamically linked libraries the tests are compiled against." >&2 + LDD="true " + fi + +} + +#--------------------- + +if [[ "${FORMAT}" == "text" ]] ; then + top_text + process_tests | while read line ; do print_text $line ; done +else + top_html + process_tests | while read line ; do print_html $line ; done + bottom_html + print_tests_info +fi diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/p8test1step1_cfg.py b/GeneratorInterface/Pythia8Interface/test/pythia8test/p8test1step1_cfg.py new file mode 100644 index 0000000000000..7095a0f2a2b23 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/p8test1step1_cfg.py @@ -0,0 +1,52 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PROD") + +process.load("Configuration.StandardSequences.SimulationRandomNumberGeneratorSeeds_cff") + +process.source = cms.Source("EmptySource") + +process.generator = cms.EDFilter("Pythia8GeneratorFilter", + maxEventsToPrint = cms.untracked.int32(1), + pythiaPylistVerbosity = cms.untracked.int32(1), + filterEfficiency = cms.untracked.double(1.0), + pythiaHepMCVerbosity = cms.untracked.bool(False), + comEnergy = cms.double(14000.), + PythiaParameters = cms.PSet( + pythia8_test1 = cms.vstring('WeakBosonAndParton:qqbar2gmZg = on', + 'WeakBosonAndParton:qg2gmZq = on', + 'PhaseSpace:pTHatMin = 20.', + '23:onMode = off', + '23:onIfAny = 11 13 15'), + parameterSets = cms.vstring('pythia8_test1') + ) +) + +process.MessageLogger = cms.Service("MessageLogger", + cout = cms.untracked.PSet( + default = cms.untracked.PSet( + limit = cms.untracked.int32(0) + ) + ), + destinations = cms.untracked.vstring('cout') +) + +process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", + generator = cms.PSet( + initialSeed = cms.untracked.uint32(123456789), + ) +) + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +process.GEN = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('p8test1step1.root') +) + +process.p = cms.Path(process.generator) +process.outpath = cms.EndPath(process.GEN) + +process.schedule = cms.Schedule(process.p, process.outpath) + diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/reference.dat b/GeneratorInterface/Pythia8Interface/test/pythia8test/reference.dat new file mode 100644 index 0000000000000..0ddde330b3237 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/reference.dat @@ -0,0 +1,2 @@ +pythia8_test1 1 2.1033e+03 2.1033e+01 +pythia8_test1 2 0.0519 0.00227816 diff --git a/GeneratorInterface/Pythia8Interface/test/pythia8test/runtest b/GeneratorInterface/Pythia8Interface/test/pythia8test/runtest new file mode 100755 index 0000000000000..347c65c92f337 --- /dev/null +++ b/GeneratorInterface/Pythia8Interface/test/pythia8test/runtest @@ -0,0 +1,10 @@ +cd .. +scram b +cd - +rm -f testi.dat +rm -f test.dat +rm -f p8test.html +cmsRun p8test1step1_cfg.py +cmsRun ZJetsTest_cfg.py +cp testi.dat test.dat +cmpr.sh test.dat html > p8test.html diff --git a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.aida b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.aida index 36da554b98947..1b4082b493330 100644 --- a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.aida +++ b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.aida @@ -6,304 +6,257 @@ path="/REF/CMS_EWK_11_021" title="Unfold Response aux \rightarrow aux"> - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - @@ -430,1135 +383,1178 @@ - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + - - + - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.info b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.info index 02b8388d34d11..6e83d1bcdd1b3 100644 --- a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.info +++ b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.info @@ -1,24 +1,27 @@ Name: CMS_EWK_11_021 Year: 2011 -Summary: Azimuthal correlations and event shapes in Z + jets in pp collisions at sqrt(s) = 7 TeV - +Summary: 'Azimuthal correlations and event shapes in Z + jets in pp collisions at sqrt(s) = 7 TeV' Experiment: CMS Collider: LHC -SpiresID: +SpiresID: 1209721 Status: UNVALIDATED Authors: - Io Odderskov References: - http://cms.cern.ch/iCMS/analysisadmin/cadi?ancode=EWK-11-021 + - https://cds.cern.ch/record/1503578 + - http://inspirehep.net/record/1209721 + - arXiv:1301.1646 [hep-ex] (http://arxiv.org/abs/arXiv:1301.1646) + - Submitted to Phys. Lett. B RunInfo: Run MC generators with Z decaying to leptonic modes at 7TeV comEnergy NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: - leptons Pt>20GeV and |leptons_eta|<2.4,| Jets>50GeV + leptons Pt>20GeV and |leptons_eta|<2.4, Jets>50GeV Description: - Measurements are presented of event shapes and azimuthal correlations in the inclu- + 'Measurements are presented of event shapes and azimuthal correlations in the inclu- sive production of a Z boson in association with jets in proton-proton collisions. The data correspond to an integrated luminosity of 5.0 fb1, collected with the CMS detec- tor at the CERN LHC at sqrt(s) = 7 TeV. This to test perturbative QCD predictions @@ -28,11 +31,21 @@ Description: Carlo event generators that include leading-order multiparton matrix-element (with up to four hard partons in the final state) and next-to-leading-order simulations of Z + 1-jet events. The results are corrected for detector effects, and can therefore be - used as input to improve models for describing these processes. -BibKey: - '' -BibTeX: - '' -ToDo: - - update reference when paper published - + used as input to improve models for describing these processes.' +BibKey: 'Chatrchyan:2013tna' +BibTeX: '@article{Chatrchyan:2013tna, + author = "Chatrchyan, Serguei and others", + title = "{Event shapes and azimuthal correlations in $Z$ + jets + events in $pp$ collisions at $\sqrt{s}=7$ TeV}", + collaboration = "CMS Collaboration", + journal = "Phys.Lett.", + volume = "B722", + pages = "238-261", + doi = "10.1016/j.physletb.2013.04.025", + year = "2013", + eprint = "1301.1646", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "CMS-EWK-11-021, CERN-PH-EP-2013-001", + SLACcitation = "%%CITATION = ARXIV:1301.1646;%%", +}' diff --git a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.plot b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.plot index 7463b8b38769a..487e29bcef8f2 100644 --- a/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.plot +++ b/GeneratorInterface/RivetInterface/data/CMS_EWK_11_021.plot @@ -1,256 +1,88 @@ -# BEGIN PLOT /CMS_EWK_11_021/Mll -Title=CMS $\text{M}_{ll}$, $\sqrt{s}=7$~TeV -XLabel=$\text{M}_{ll}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dM}$ +# BEGIN PLOT /CMS_EWK_11_021/d FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/Njets -Title=CMS Number of jets, $\sqrt{s}=7$~TeV -XLabel=#Jets$(50\text{GeV})$ -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dN}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/Ptll -Title=CMS $\text{P}_T^{ll}$, $\sqrt{s}=7$~TeV -XLabel=$\text{P}_T^{ll}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dP_t}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/Mjj -Title=CMS $\text{M}_{jj}$, $\sqrt{s}=7$~TeV -XLabel=$\text{M}_{jj}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dM}$ -FullRange=1 -LogY=1 LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/PtJet1 -Title=CMS $\text{P}_T^{1\text{st jet}}$, $\sqrt{s}=7$~TeV -XLabel=$\text{P}_T^{1\text{st jet}}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dP_t}$ -FullRange=1 + +# BEGIN PLOT /CMS_EWK_11_021/d(0[1-8]|1[0-7]) +YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/PtJet2 -Title=CMS $\text{P}_T^{2\text{nd jet}}$, $\sqrt{s}=7$~TeV -XLabel=$\text{P}_T^{2\text{nd jet}}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dP_t}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 + +# BEGIN PLOT /CMS_EWK_11_021/d(09|18) +XLabel=$\ln{\tau_{\perp}}$ +YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\ln{\tau_{\perp}}}$ +LogY=0 +# END PLOT + +# BEGIN PLOT /CMS_EWK_11_021/d(0[14]|1[0134]) +XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] +# END PLOT +# BEGIN PLOT /CMS_EWK_11_021/d(03|12) +XLabel=$\Delta\phi(\text{Z},\text{J3})$ [rad] +# END PLOT +# BEGIN PLOT /CMS_EWK_11_021/d(06|15) +XLabel=$\Delta\phi(\text{J1},\text{J2})$ [rad] # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/PtJet3 -Title=CMS $\text{P}_T^{3\text{rd jet}}$, $\sqrt{s}=7$~TeV -XLabel=$\text{P}_T^{3\text{rd jet}}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dP_t}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d(07|16) +XLabel=$\Delta\phi(\text{J1},\text{J3})$ [rad] # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/PtJet4 -Title=CMS $\text{P}_T^{4\text{th jet}}$, $\sqrt{s}=7$~TeV -XLabel=$\text{P}_T^{4\text{th jet}}$ [GeV] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{dP_t}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d(08|17) +XLabel=$\Delta\phi(\text{J2},\text{J3})$ [rad] # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d10-x01-y01 + +# BEGIN PLOT /CMS_EWK_11_021/d01-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/DeltaPhiZJ2 -Title=CMS, $\Delta\phi(\text{Z},\text{J2})$, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d02-x01-y01 +Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 2 Jets, $\sqrt{s}=7$~TeV +XLabel=$\Delta\phi(\text{Z}\text{J1})$ [rad] # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d04-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d03-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J3})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d01-x01-y01 -Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 2 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z}\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d08-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d04-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d14-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d05-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J2})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV XLabel=$\Delta\phi(\text{Z},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/DeltaPhiJ1J2_2 -Title=CMS, $\Delta\phi(\text{J1},\text{J2})$, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d03-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d06-x01-y01 Title=CMS, $\Delta\phi(\text{J1},\text{J2})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/SumDeltaPhi -Title=CMS, $\Sigma\Delta\phi$, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J2})+\Delta\phi(\text{J1},\text{J3})+\Delta\phi(\text{J2},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d07-x01-y01 +Title=CMS, $\Delta\phi(\text{J1},\text{J3})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d17-x01-y01 -Title=CMS, Thrust, $\sqrt{s}=7$~TeV -XLabel=$\ln{\tau_{\perp}}$ -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\ln{\tau_{\perp}}}$ -FullRange=1 -LogY=0 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d08-x01-y01 +Title=CMS, $\Delta\phi(\text{J2},\text{J3})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV # END PLOT # BEGIN PLOT /CMS_EWK_11_021/d09-x01-y01 +Title=CMS, Thrust, $\sqrt{s}=7$~TeV +# END PLOT +# BEGIN PLOT /CMS_EWK_11_021/d10-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/BoostedDeltaPhiZJ2 -Title=CMS, $\Delta\phi(\text{Z},\text{J2})$, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d11-x01-y01 +Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 2 Jets, Boosted regime, $\sqrt{s}=7$~TeV # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d18-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d12-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J3})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d02-x01-y01 -Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 2 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d06-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d13-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J1})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d07-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d14-x01-y01 Title=CMS, $\Delta\phi(\text{Z},\text{J2})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{Z},\text{J1})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/BoostedDeltaPhiJ1J2_2 -Title=CMS, $\Delta\phi(\text{J1},\text{J2})$, $\geq$ 2 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT # BEGIN PLOT /CMS_EWK_11_021/d15-x01-y01 Title=CMS, $\Delta\phi(\text{J1},\text{J2})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J2})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/BoostedSumDeltaPhi -Title=CMS, $\Sigma\Delta\phi$, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi\text{J1}\text{J2}+\Delta\phi\text{J1}\text{J3}+\Delta\phi\text{J2}\text{J3}$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT # BEGIN PLOT /CMS_EWK_11_021/d16-x01-y01 -Title=CMS, Thrust, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\ln{\tau_{\perp}}$ -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\ln{\tau_{\perp}}}$ -FullRange=1 -LogY=0 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d13-x01-y01 Title=CMS, $\Delta\phi(\text{J1}\text{J3})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d05-x01-y01 -Title=CMS, $\Delta\phi(\text{J1},\text{J3})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J1},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 -# END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d11-x01-y01 +# BEGIN PLOT /CMS_EWK_11_021/d17-x01-y01 Title=CMS, $\Delta\phi(\text{J2},{J3})$, $\geq$ 3 Jets, Boosted regime, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J2},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 # END PLOT -# BEGIN PLOT /CMS_EWK_11_021/d12-x01-y01 -Title=CMS, $\Delta\phi(\text{J2},\text{J3})$, $\geq$ 3 Jets, $\sqrt{s}=7$~TeV -XLabel=$\Delta\phi(\text{J2},\text{J3})$ [rad] -YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\phi}$ -FullRange=1 -LogY=1 -LegendXPos=0.1 +# BEGIN PLOT /CMS_EWK_11_021/d18-x01-y01 +Title=CMS, Thrust, Boosted regime, $\sqrt{s}=7$~TeV # END PLOT diff --git a/GeneratorInterface/RivetInterface/plugins/RivetHarvesting.cc b/GeneratorInterface/RivetInterface/plugins/RivetHarvesting.cc index 8991f911ee5bc..d32a9f85856c6 100644 --- a/GeneratorInterface/RivetInterface/plugins/RivetHarvesting.cc +++ b/GeneratorInterface/RivetInterface/plugins/RivetHarvesting.cc @@ -12,7 +12,7 @@ #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "LWH/AIManagedObject.h" -#include "tinyxml.h" +#include "FWCore/Utilities/interface/tinyxml.h" #include #include diff --git a/GeneratorInterface/RivetInterface/plugins/tinyxml.h b/GeneratorInterface/RivetInterface/plugins/tinyxml.h deleted file mode 100644 index 58927935e9503..0000000000000 --- a/GeneratorInterface/RivetInterface/plugins/tinyxml.h +++ /dev/null @@ -1,1717 +0,0 @@ -/* -www.sourceforge.net/projects/tinyxml -Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - - -#ifndef TINYXML_INCLUDED -#define TINYXML_INCLUDED - -#ifdef _MSC_VER -#pragma warning( push ) -#pragma warning( disable : 4530 ) -#pragma warning( disable : 4786 ) -#endif - -#include -#include -#include -#include -#include - -// Help out windows: -#if defined( _DEBUG ) && !defined( DEBUG ) -#define DEBUG -#endif - -#include -#include -#include -#define TIXML_STRING std::string - - -// Deprecated library function hell. Compilers want to use the -// new safe versions. This probably doesn't fully address the problem, -// but it gets closer. There are too many compilers for me to fully -// test. If you get compilation troubles, undefine TIXML_SAFE -#define TIXML_SAFE - -#ifdef TIXML_SAFE - #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) - // Microsoft visual studio, version 2005 and higher. - #define TIXML_SNPRINTF _snprintf_s - #define TIXML_SNSCANF _snscanf_s - #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) - // Microsoft visual studio, version 6 and higher. - //#pragma message( "Using _sn* functions." ) - #define TIXML_SNPRINTF _snprintf - #define TIXML_SNSCANF _snscanf - #elif defined(__GNUC__) && (__GNUC__ >= 3 ) - // GCC version 3 and higher.s - //#warning( "Using sn* functions." ) - #define TIXML_SNPRINTF snprintf - #define TIXML_SNSCANF snscanf - #endif -#endif - -class TiXmlDocument; -class TiXmlElement; -class TiXmlComment; -class TiXmlUnknown; -class TiXmlAttribute; -class TiXmlText; -class TiXmlDeclaration; -class TiXmlParsingData; - -const int TIXML_MAJOR_VERSION = 2; -const int TIXML_MINOR_VERSION = 5; -const int TIXML_PATCH_VERSION = 2; - -/* Internal structure for tracking location of items - in the XML file. -*/ -struct TiXmlCursor -{ - TiXmlCursor() { Clear(); } - void Clear() { row = col = -1; } - - int row; // 0 based. - int col; // 0 based. -}; - - -/** - If you call the Accept() method, it requires being passed a TiXmlVisitor - class to handle callbacks. For nodes that contain other nodes (Document, Element) - you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves - are simple called with Visit(). - - If you return 'true' from a Visit method, recursive parsing will continue. If you return - false, no children of this node or its sibilings will be Visited. - - All flavors of Visit methods have a default implementation that returns 'true' (continue - visiting). You need to only override methods that are interesting to you. - - Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. - - You should never change the document from a callback. - - @sa TiXmlNode::Accept() -*/ -class TiXmlVisitor -{ -public: - virtual ~TiXmlVisitor() {} - - /// Visit a document. - virtual bool VisitEnter( const TiXmlDocument& doc ) { return true; } - /// Visit a document. - virtual bool VisitExit( const TiXmlDocument& doc ) { return true; } - - /// Visit an element. - virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) { return true; } - /// Visit an element. - virtual bool VisitExit( const TiXmlElement& element ) { return true; } - - /// Visit a declaration - virtual bool Visit( const TiXmlDeclaration& declaration ) { return true; } - /// Visit a text node - virtual bool Visit( const TiXmlText& text ) { return true; } - /// Visit a comment node - virtual bool Visit( const TiXmlComment& comment ) { return true; } - /// Visit an unknow node - virtual bool Visit( const TiXmlUnknown& unknown ) { return true; } -}; - -// Only used by Attribute::Query functions -enum -{ - TIXML_SUCCESS, - TIXML_NO_ATTRIBUTE, - TIXML_WRONG_TYPE -}; - - -// Used by the parsing routines. -enum TiXmlEncoding -{ - TIXML_ENCODING_UNKNOWN, - TIXML_ENCODING_UTF8, - TIXML_ENCODING_LEGACY -}; - -const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; - -/** TiXmlBase is a base class for every class in TinyXml. - It does little except to establish that TinyXml classes - can be printed and provide some utility functions. - - In XML, the document and elements can contain - other elements and other types of nodes. - - @verbatim - A Document can contain: Element (container or leaf) - Comment (leaf) - Unknown (leaf) - Declaration( leaf ) - - An Element can contain: Element (container or leaf) - Text (leaf) - Attributes (not on tree) - Comment (leaf) - Unknown (leaf) - - A Decleration contains: Attributes (not on tree) - @endverbatim -*/ -class TiXmlBase -{ - friend class TiXmlNode; - friend class TiXmlElement; - friend class TiXmlDocument; - -public: - TiXmlBase() : userData(0) {} - virtual ~TiXmlBase() {} - - /** All TinyXml classes can print themselves to a filestream - or the string class (TiXmlString in non-STL mode, std::string - in STL mode.) Either or both cfile and str can be null. - - This is a formatted print, and will insert - tabs and newlines. - - (For an unformatted stream, use the << operator.) - */ - virtual void Print( FILE* cfile, int depth ) const = 0; - - /** The world does not agree on whether white space should be kept or - not. In order to make everyone happy, these global, static functions - are provided to set whether or not TinyXml will condense all white space - into a single space or not. The default is to condense. Note changing this - value is not thread safe. - */ - static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } - - /// Return the current white space setting. - static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } - - /** Return the position, in the original source file, of this node or attribute. - The row and column are 1-based. (That is the first row and first column is - 1,1). If the returns values are 0 or less, then the parser does not have - a row and column value. - - Generally, the row and column value will be set when the TiXmlDocument::Load(), - TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set - when the DOM was created from operator>>. - - The values reflect the initial load. Once the DOM is modified programmatically - (by adding or changing nodes and attributes) the new values will NOT update to - reflect changes in the document. - - There is a minor performance cost to computing the row and column. Computation - can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. - - @sa TiXmlDocument::SetTabSize() - */ - int Row() const { return location.row + 1; } - int Column() const { return location.col + 1; } ///< See Row() - - void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. - void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. - const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. - - // Table that returs, for a given lead byte, the total number of bytes - // in the UTF-8 sequence. - static const int utf8ByteTable[256]; - - virtual const char* Parse( const char* p, - TiXmlParsingData* data, - TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; - - enum - { - TIXML_NO_ERROR = 0, - TIXML_ERROR, - TIXML_ERROR_OPENING_FILE, - TIXML_ERROR_OUT_OF_MEMORY, - TIXML_ERROR_PARSING_ELEMENT, - TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, - TIXML_ERROR_READING_ELEMENT_VALUE, - TIXML_ERROR_READING_ATTRIBUTES, - TIXML_ERROR_PARSING_EMPTY, - TIXML_ERROR_READING_END_TAG, - TIXML_ERROR_PARSING_UNKNOWN, - TIXML_ERROR_PARSING_COMMENT, - TIXML_ERROR_PARSING_DECLARATION, - TIXML_ERROR_DOCUMENT_EMPTY, - TIXML_ERROR_EMBEDDED_NULL, - TIXML_ERROR_PARSING_CDATA, - TIXML_ERROR_DOCUMENT_TOP_ONLY, - - TIXML_ERROR_STRING_COUNT - }; - -protected: - - static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); - inline static bool IsWhiteSpace( char c ) - { - return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); - } - inline static bool IsWhiteSpace( int c ) - { - if ( c < 256 ) - return IsWhiteSpace( (char) c ); - return false; // Again, only truly correct for English/Latin...but usually works. - } - - static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); - static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); - - /* Reads an XML name into the string provided. Returns - a pointer just past the last character of the name, - or 0 if the function has an error. - */ - static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); - - /* Reads text. Returns a pointer past the given end tag. - Wickedly complex options, but it keeps the (sensitive) code in one place. - */ - static const char* ReadText( const char* in, // where to start - TIXML_STRING* text, // the string read - bool ignoreWhiteSpace, // whether to keep the white space - const char* endTag, // what ends this text - bool ignoreCase, // whether to ignore case in the end tag - TiXmlEncoding encoding ); // the current encoding - - // If an entity has been found, transform it into a character. - static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); - - // Get a character, while interpreting entities. - // The length can be from 0 to 4 bytes. - inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) - { - assert( p ); - if ( encoding == TIXML_ENCODING_UTF8 ) - { - *length = utf8ByteTable[ *((const unsigned char*)p) ]; - assert( *length >= 0 && *length < 5 ); - } - else - { - *length = 1; - } - - if ( *length == 1 ) - { - if ( *p == '&' ) - return GetEntity( p, _value, length, encoding ); - *_value = *p; - return p+1; - } - else if ( *length ) - { - //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), - // and the null terminator isn't needed - for( int i=0; p[i] && i<*length; ++i ) { - _value[i] = p[i]; - } - return p + (*length); - } - else - { - // Not valid text. - return 0; - } - } - - // Puts a string to a stream, expanding entities as it goes. - // Note this should not contian the '<', '>', etc, or they will be transformed into entities! - static void PutString( const TIXML_STRING& str, TIXML_STRING* out ); - - // Return true if the next characters in the stream are any of the endTag sequences. - // Ignore case only works for english, and should only be relied on when comparing - // to English words: StringEqual( p, "version", true ) is fine. - static bool StringEqual( const char* p, - const char* endTag, - bool ignoreCase, - TiXmlEncoding encoding ); - - static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; - - TiXmlCursor location; - - /// Field containing a generic user pointer - void* userData; - - // None of these methods are reliable for any language except English. - // Good for approximation, not great for accuracy. - static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); - static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); - inline static int ToLower( int v, TiXmlEncoding encoding ) - { - if ( encoding == TIXML_ENCODING_UTF8 ) - { - if ( v < 128 ) return tolower( v ); - return v; - } - else - { - return tolower( v ); - } - } - static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); - -private: - TiXmlBase( const TiXmlBase& ); // not implemented. - void operator=( const TiXmlBase& base ); // not allowed. - - struct Entity - { - const char* str; - unsigned int strLength; - char chr; - }; - enum - { - NUM_ENTITY = 5, - MAX_ENTITY_LENGTH = 6 - - }; - static Entity entity[ NUM_ENTITY ]; - static bool condenseWhiteSpace; -}; - - -/** The parent class for everything in the Document Object Model. - (Except for attributes). - Nodes have siblings, a parent, and children. A node can be - in a document, or stand on its own. The type of a TiXmlNode - can be queried, and it can be cast to its more defined type. -*/ -class TiXmlNode : public TiXmlBase -{ - friend class TiXmlDocument; - friend class TiXmlElement; - -public: - - /** An input stream operator, for every class. Tolerant of newlines and - formatting, but doesn't expect them. - */ - friend std::istream& operator >> (std::istream& in, TiXmlNode& base); - - /** An output stream operator, for every class. Note that this outputs - without any newlines or formatting, as opposed to Print(), which - includes tabs and new lines. - - The operator<< and operator>> are not completely symmetric. Writing - a node to a stream is very well defined. You'll get a nice stream - of output, without any extra whitespace or newlines. - - But reading is not as well defined. (As it always is.) If you create - a TiXmlElement (for example) and read that from an input stream, - the text needs to define an element or junk will result. This is - true of all input streams, but it's worth keeping in mind. - - A TiXmlDocument will read nodes until it reads a root element, and - all the children of that root element. - */ - friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); - - /// Appends the XML node or attribute to a std::string. - friend std::string& operator<< (std::string& out, const TiXmlNode& base ); - - - /** The types of XML nodes supported by TinyXml. (All the - unsupported types are picked up by UNKNOWN.) - */ - enum NodeType - { - DOCUMENT, - ELEMENT, - COMMENT, - UNKNOWN, - TEXT, - DECLARATION, - TYPECOUNT - }; - - virtual ~TiXmlNode(); - - /** The meaning of 'value' changes for the specific type of - TiXmlNode. - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - - The subclasses will wrap this function. - */ - const char *Value() const { return value.c_str (); } - - /** Return Value() as a std::string. If you only use STL, - this is more efficient than calling Value(). - Only available in STL mode. - */ - const std::string& ValueStr() const { return value; } - - /** Changes the value of the node. Defined as: - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - */ - void SetValue(const char * _value) { value = _value;} - - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - - /// Delete all the children of this node. Does not affect 'this'. - void Clear(); - - /// One step up the DOM. - TiXmlNode* Parent() { return parent; } - const TiXmlNode* Parent() const { return parent; } - - const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. - TiXmlNode* FirstChild() { return firstChild; } - const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. - /// The first child of this node with the matching 'value'. Will be null if none found. - TiXmlNode* FirstChild( const char * _value ) { - // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) - // call the method, cast the return back to non-const. - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); - } - const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. - TiXmlNode* LastChild() { return lastChild; } - - const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. - TiXmlNode* LastChild( const char * _value ) { - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); - } - - const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. - - /** An alternate way to walk the children of a node. - One way to iterate over nodes is: - @verbatim - for( child = parent->FirstChild(); child; child = child->NextSibling() ) - @endverbatim - - IterateChildren does the same thing with the syntax: - @verbatim - child = 0; - while( child = parent->IterateChildren( child ) ) - @endverbatim - - IterateChildren takes the previous child as input and finds - the next one. If the previous child is null, it returns the - first. IterateChildren will return null when done. - */ - const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); - } - - /// This flavor of IterateChildren searches for children with a particular 'value' - const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); - } - - const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - - /** Add a new node related to this. Adds a child past the LastChild. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); - - - /** Add a new node related to this. Adds a child past the LastChild. - - NOTE: the node to be added is passed by pointer, and will be - henceforth owned (and deleted) by tinyXml. This method is efficient - and avoids an extra copy, but should be used with care as it - uses a different memory model than the other insert functions. - - @sa InsertEndChild - */ - TiXmlNode* LinkEndChild( TiXmlNode* addThis ); - - /** Add a new node related to this. Adds a child before the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); - - /** Add a new node related to this. Adds a child after the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); - - /** Replace a child of this node. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); - - /// Delete a child of this node. - bool RemoveChild( TiXmlNode* removeThis ); - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling() const { return prev; } - TiXmlNode* PreviousSibling() { return prev; } - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling( const char * ) const; - TiXmlNode* PreviousSibling( const char *_prev ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); - } - - const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. - - /// Navigate to a sibling node. - const TiXmlNode* NextSibling() const { return next; } - TiXmlNode* NextSibling() { return next; } - - /// Navigate to a sibling node with the given 'value'. - const TiXmlNode* NextSibling( const char * ) const; - TiXmlNode* NextSibling( const char* _next ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement() const; - TiXmlElement* NextSiblingElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement( const char * ) const; - TiXmlElement* NextSiblingElement( const char *_next ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); - } - - const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement() const; - TiXmlElement* FirstChildElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); - } - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement( const char * _value ) const; - TiXmlElement* FirstChildElement( const char * _value ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); - } - - const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - - /** Query the type (as an enumerated value, above) of this node. - The possible types are: DOCUMENT, ELEMENT, COMMENT, - UNKNOWN, TEXT, and DECLARATION. - */ - int Type() const { return type; } - - /** Return a pointer to the Document this node lives in. - Returns null if not in a document. - */ - const TiXmlDocument* GetDocument() const; - TiXmlDocument* GetDocument() { - return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); - } - - /// Returns true if this node has no children. - bool NoChildren() const { return !firstChild; } - - virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - /** Create an exact duplicate of this node and return it. The memory must be deleted - by the caller. - */ - virtual TiXmlNode* Clone() const = 0; - - /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the - XML tree will be conditionally visited and the host will be called back - via the TiXmlVisitor interface. - - This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse - the XML for the callbacks, so the performance of TinyXML is unchanged by using this - interface versus any other.) - - The interface has been based on ideas from: - - - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern - - Which are both good references for "visiting". - - An example of using Accept(): - @verbatim - TiXmlPrinter printer; - tinyxmlDoc.Accept( &printer ); - const char* xmlcstr = printer.CStr(); - @endverbatim - */ - virtual bool Accept( TiXmlVisitor* visitor ) const = 0; - -protected: - TiXmlNode( NodeType _type ); - - // Copy to the allocated object. Shared functionality between Clone, Copy constructor, - // and the assignment operator. - void CopyTo( TiXmlNode* target ) const; - - // The real work of the input operator. - virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; - - // Figure out what is at *p, and parse it. Returns null if it is not an xml node. - TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); - - TiXmlNode* parent; - NodeType type; - - TiXmlNode* firstChild; - TiXmlNode* lastChild; - - TIXML_STRING value; - - TiXmlNode* prev; - TiXmlNode* next; - -private: - TiXmlNode( const TiXmlNode& ); // not implemented. - void operator=( const TiXmlNode& base ); // not allowed. -}; - - -/** An attribute is a name-value pair. Elements have an arbitrary - number of attributes, each with a unique name. - - @note The attributes are not TiXmlNodes, since they are not - part of the tinyXML document object model. There are other - suggested ways to look at this problem. -*/ -class TiXmlAttribute : public TiXmlBase -{ - friend class TiXmlAttributeSet; - -public: - /// Construct an empty attribute. - TiXmlAttribute() : TiXmlBase() - { - document = 0; - prev = next = 0; - } - - /// std::string constructor. - TiXmlAttribute( const std::string& _name, const std::string& _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - - /// Construct an attribute with a name and value. - TiXmlAttribute( const char * _name, const char * _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - - const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. - const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. - - const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. - - int IntValue() const; ///< Return the value of this attribute, converted to an integer. - double DoubleValue() const; ///< Return the value of this attribute, converted to a double. - - // Get the tinyxml string representation - const TIXML_STRING& NameTStr() const { return name; } - - /** QueryIntValue examines the value string. It is an alternative to the - IntValue() method with richer error checking. - If the value is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. - - A specialized but useful call. Note that for success it returns 0, - which is the opposite of almost all other TinyXml calls. - */ - int QueryIntValue( int* _value ) const; - /// QueryDoubleValue examines the value string. See QueryIntValue(). - int QueryDoubleValue( double* _value ) const; - - void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. - void SetValue( const char* _value ) { value = _value; } ///< Set the value. - - void SetIntValue( int _value ); ///< Set the value from an integer. - void SetDoubleValue( double _value ); ///< Set the value from a double. - - /// STL std::string form. - void SetName( const std::string& _name ) { name = _name; } - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - - /// Get the next sibling attribute in the DOM. Returns null at end. - const TiXmlAttribute* Next() const; - TiXmlAttribute* Next() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); - } - - /// Get the previous sibling attribute in the DOM. Returns null at beginning. - const TiXmlAttribute* Previous() const; - TiXmlAttribute* Previous() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); - } - - bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } - bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } - bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } - - /* Attribute parsing starts: first letter of the name - returns: the next char after the value end quote - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - // Prints this Attribute to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const { - Print( cfile, depth, 0 ); - } - void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; - - // [internal use] - // Set the document pointer so the attribute can report errors. - void SetDocument( TiXmlDocument* doc ) { document = doc; } - -private: - TiXmlAttribute( const TiXmlAttribute& ); // not implemented. - void operator=( const TiXmlAttribute& base ); // not allowed. - - TiXmlDocument* document; // A pointer back to a document, for error reporting. - TIXML_STRING name; - TIXML_STRING value; - TiXmlAttribute* prev; - TiXmlAttribute* next; -}; - - -/* A class used to manage a group of attributes. - It is only used internally, both by the ELEMENT and the DECLARATION. - - The set can be changed transparent to the Element and Declaration - classes that use it, but NOT transparent to the Attribute - which has to implement a next() and previous() method. Which makes - it a bit problematic and prevents the use of STL. - - This version is implemented with circular lists because: - - I like circular lists - - it demonstrates some independence from the (typical) doubly linked list. -*/ -class TiXmlAttributeSet -{ -public: - TiXmlAttributeSet(); - ~TiXmlAttributeSet(); - - void Add( TiXmlAttribute* attribute ); - void Remove( TiXmlAttribute* attribute ); - - const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - - const TiXmlAttribute* Find( const char* _name ) const; - TiXmlAttribute* Find( const char* _name ) { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); - } - const TiXmlAttribute* Find( const std::string& _name ) const; - TiXmlAttribute* Find( const std::string& _name ) { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); - } - - -private: - //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), - //*ME: this class must be also use a hidden/disabled copy-constructor !!! - TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed - void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) - - TiXmlAttribute sentinel; -}; - - -/** The element is a container class. It has a value, the element name, - and can contain other elements, text, comments, and unknowns. - Elements also contain an arbitrary number of attributes. -*/ -class TiXmlElement : public TiXmlNode -{ -public: - /// Construct an element. - TiXmlElement (const char * in_value); - - /// std::string constructor. - TiXmlElement( const std::string& _value ); - - TiXmlElement( const TiXmlElement& ); - - void operator=( const TiXmlElement& base ); - - virtual ~TiXmlElement(); - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - */ - const char* Attribute( const char* name ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an integer, - the integer value will be put in the return 'i', if 'i' - is non-null. - */ - const char* Attribute( const char* name, int* i ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an double, - the double value will be put in the return 'd', if 'd' - is non-null. - */ - const char* Attribute( const char* name, double* d ) const; - - /** QueryIntAttribute examines the attribute - it is an alternative to the - Attribute() method with richer error checking. - If the attribute is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. If the attribute - does not exist, then TIXML_NO_ATTRIBUTE is returned. - */ - int QueryIntAttribute( const char* name, int* _value ) const; - /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). - int QueryDoubleAttribute( const char* name, double* _value ) const; - /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). - int QueryFloatAttribute( const char* name, float* _value ) const { - double d; - int result = QueryDoubleAttribute( name, &d ); - if ( result == TIXML_SUCCESS ) { - *_value = (float)d; - } - return result; - } - - /** Template form of the attribute query which will try to read the - attribute into the specified type. Very easy, very powerful, but - be careful to make sure to call this with the correct type. - - @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE - */ - template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const - { - const TiXmlAttribute* node = attributeSet.Find( name ); - if ( !node ) - return TIXML_NO_ATTRIBUTE; - - std::stringstream sstream( node->ValueStr() ); - sstream >> *outValue; - if ( !sstream.fail() ) - return TIXML_SUCCESS; - return TIXML_WRONG_TYPE; - } - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char* name, const char * _value ); - - const std::string* Attribute( const std::string& name ) const; - const std::string* Attribute( const std::string& name, int* i ) const; - const std::string* Attribute( const std::string& name, double* d ) const; - int QueryIntAttribute( const std::string& name, int* _value ) const; - int QueryDoubleAttribute( const std::string& name, double* _value ) const; - - /// STL std::string form. - void SetAttribute( const std::string& name, const std::string& _value ); - ///< STL std::string form. - void SetAttribute( const std::string& name, int _value ); - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char * name, int value ); - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetDoubleAttribute( const char * name, double value ); - - /** Deletes an attribute with the given name. - */ - void RemoveAttribute( const char * name ); - void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. - - const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. - TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } - const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. - TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } - - /** Convenience function for easy access to the text inside an element. Although easy - and concise, GetText() is limited compared to getting the TiXmlText child - and accessing it directly. - - If the first child of 'this' is a TiXmlText, the GetText() - returns the character string of the Text node, else null is returned. - - This is a convenient method for getting the text of simple contained text: - @verbatim - This is text - const char* str = fooElement->GetText(); - @endverbatim - - 'str' will be a pointer to "This is text". - - Note that this function can be misleading. If the element foo was created from - this XML: - @verbatim - This is text - @endverbatim - - then the value of str would be null. The first child node isn't a text node, it is - another element. From this XML: - @verbatim - This is text - @endverbatim - GetText() will return "This is ". - - WARNING: GetText() accesses a child node - don't become confused with the - similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are - safe type casts on the referenced node. - */ - const char* GetText() const; - - /// Creates a new Element and returns it - the returned element is a copy. - virtual TiXmlNode* Clone() const; - // Print the Element to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /* Attribtue parsing starts: next char past '<' - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - - void CopyTo( TiXmlElement* target ) const; - void ClearThis(); // like clear, but initializes 'this' object as well - - // Used to be public [internal use] - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - - /* [internal use] - Reads the "value" of the element -- another element, or text. - This should terminate with the current end tag. - */ - const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - -private: - - TiXmlAttributeSet attributeSet; -}; - - -/** An XML comment. -*/ -class TiXmlComment : public TiXmlNode -{ -public: - /// Constructs an empty comment. - TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {} - /// Construct a comment from text. - TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::COMMENT ) { - SetValue( _value ); - } - TiXmlComment( const TiXmlComment& ); - void operator=( const TiXmlComment& base ); - - virtual ~TiXmlComment() {} - - /// Returns a copy of this Comment. - virtual TiXmlNode* Clone() const; - // Write this Comment to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /* Attribtue parsing starts: at the ! of the !-- - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlComment* target ) const; - - // used to be public - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - -// virtual void StreamOut( TIXML_OSTREAM * out ) const; - -private: - -}; - - -/** XML text. A text node can have 2 ways to output the next. "normal" output - and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with - SetCDATA() and query it with CDATA(). -*/ -class TiXmlText : public TiXmlNode -{ - friend class TiXmlElement; -public: - /** Constructor for text element. By default, it is treated as - normal, encoded text. If you want it be output as a CDATA text - element, set the parameter _cdata to 'true' - */ - TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) - { - SetValue( initValue ); - cdata = false; - } - virtual ~TiXmlText() {} - - /// Constructor. - TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) - { - SetValue( initValue ); - cdata = false; - } - - TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) { copy.CopyTo( this ); } - void operator=( const TiXmlText& base ) { base.CopyTo( this ); } - - // Write this text object to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /// Queries whether this represents text using a CDATA section. - bool CDATA() const { return cdata; } - /// Turns on or off a CDATA representation of text. - void SetCDATA( bool _cdata ) { cdata = _cdata; } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - /// [internal use] Creates a new Element and returns it. - virtual TiXmlNode* Clone() const; - void CopyTo( TiXmlText* target ) const; - - bool Blank() const; // returns true if all white space and new lines - // [internal use] - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - -private: - bool cdata; // true if this should be input and output as a CDATA style text element -}; - - -/** In correct XML the declaration is the first entry in the file. - @verbatim - - @endverbatim - - TinyXml will happily read or write files without a declaration, - however. There are 3 possible attributes to the declaration: - version, encoding, and standalone. - - Note: In this version of the code, the attributes are - handled as special cases, not generic attributes, simply - because there can only be at most 3 and they are always the same. -*/ -class TiXmlDeclaration : public TiXmlNode -{ -public: - /// Construct an empty declaration. - TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {} - - /// Constructor. - TiXmlDeclaration( const std::string& _version, - const std::string& _encoding, - const std::string& _standalone ); - - /// Construct. - TiXmlDeclaration( const char* _version, - const char* _encoding, - const char* _standalone ); - - TiXmlDeclaration( const TiXmlDeclaration& copy ); - void operator=( const TiXmlDeclaration& copy ); - - virtual ~TiXmlDeclaration() {} - - /// Version. Will return an empty string if none was found. - const char *Version() const { return version.c_str (); } - /// Encoding. Will return an empty string if none was found. - const char *Encoding() const { return encoding.c_str (); } - /// Is this a standalone document? - const char *Standalone() const { return standalone.c_str (); } - - /// Creates a copy of this Declaration and returns it. - virtual TiXmlNode* Clone() const; - // Print this declaration to a FILE stream. - virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; - virtual void Print( FILE* cfile, int depth ) const { - Print( cfile, depth, 0 ); - } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlDeclaration* target ) const; - // used to be public - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - -private: - - TIXML_STRING version; - TIXML_STRING encoding; - TIXML_STRING standalone; -}; - - -/** Any tag that tinyXml doesn't recognize is saved as an - unknown. It is a tag of text, but should not be modified. - It will be written back to the XML, unchanged, when the file - is saved. - - DTD tags get thrown into TiXmlUnknowns. -*/ -class TiXmlUnknown : public TiXmlNode -{ -public: - TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {} - virtual ~TiXmlUnknown() {} - - TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::UNKNOWN ) { copy.CopyTo( this ); } - void operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); } - - /// Creates a copy of this Unknown and returns it. - virtual TiXmlNode* Clone() const; - // Print this Unknown to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected: - void CopyTo( TiXmlUnknown* target ) const; - - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - -private: - -}; - - -/** Always the top level node. A document binds together all the - XML pieces. It can be saved, loaded, and printed to the screen. - The 'value' of a document node is the xml file name. -*/ -class TiXmlDocument : public TiXmlNode -{ -public: - /// Create an empty document, that has no name. - TiXmlDocument(); - /// Create a document with a name. The name of the document is also the filename of the xml. - TiXmlDocument( const char * documentName ); - - /// Constructor. - TiXmlDocument( const std::string& documentName ); - - TiXmlDocument( const TiXmlDocument& copy ); - void operator=( const TiXmlDocument& copy ); - - virtual ~TiXmlDocument() {} - - /** Load a file using the current document value. - Returns true if successful. Will delete any existing - document data before loading. - */ - bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the current document value. Returns true if successful. - bool SaveFile() const; - /// Load a file using the given filename. Returns true if successful. - bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given filename. Returns true if successful. - bool SaveFile( const char * filename ) const; - /** Load a file using the given FILE*. Returns true if successful. Note that this method - doesn't stream - the entire object pointed at by the FILE* - will be interpreted as an XML file. TinyXML doesn't stream in XML from the current - file location. Streaming may be added in the future. - */ - bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given FILE*. Returns true if successful. - bool SaveFile( FILE* ) const; - - bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. - { -// StringToBuffer f( filename ); -// return ( f.buffer && LoadFile( f.buffer, encoding )); - return LoadFile( filename.c_str(), encoding ); - } - bool SaveFile( const std::string& filename ) const ///< STL std::string version. - { -// StringToBuffer f( filename ); -// return ( f.buffer && SaveFile( f.buffer )); - return SaveFile( filename.c_str() ); - } - - /** Parse the given null terminated block of xml data. Passing in an encoding to this - method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml - to use that encoding, regardless of what TinyXml might otherwise try to detect. - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - - /** Get the root element -- the only top level element -- of the document. - In well formed XML, there should only be one. TinyXml is tolerant of - multiple elements at the document level. - */ - const TiXmlElement* RootElement() const { return FirstChildElement(); } - TiXmlElement* RootElement() { return FirstChildElement(); } - - /** If an error occurs, Error will be set to true. Also, - - The ErrorId() will contain the integer identifier of the error (not generally useful) - - The ErrorDesc() method will return the name of the error. (very useful) - - The ErrorRow() and ErrorCol() will return the location of the error (if known) - */ - bool Error() const { return error; } - - /// Contains a textual (english) description of the error if one occurs. - const char * ErrorDesc() const { return errorDesc.c_str (); } - - /** Generally, you probably want the error string ( ErrorDesc() ). But if you - prefer the ErrorId, this function will fetch it. - */ - int ErrorId() const { return errorId; } - - /** Returns the location (if known) of the error. The first column is column 1, - and the first row is row 1. A value of 0 means the row and column wasn't applicable - (memory errors, for example, have no row/column) or the parser lost the error. (An - error in the error reporting, in that case.) - - @sa SetTabSize, Row, Column - */ - int ErrorRow() const { return errorLocation.row+1; } - int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() - - /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) - to report the correct values for row and column. It does not change the output - or input in any way. - - By calling this method, with a tab size - greater than 0, the row and column of each node and attribute is stored - when the file is loaded. Very useful for tracking the DOM back in to - the source file. - - The tab size is required for calculating the location of nodes. If not - set, the default of 4 is used. The tabsize is set per document. Setting - the tabsize to 0 disables row/column tracking. - - Note that row and column tracking is not supported when using operator>>. - - The tab size needs to be enabled before the parse or load. Correct usage: - @verbatim - TiXmlDocument doc; - doc.SetTabSize( 8 ); - doc.Load( "myfile.xml" ); - @endverbatim - - @sa Row, Column - */ - void SetTabSize( int _tabsize ) { tabsize = _tabsize; } - - int TabSize() const { return tabsize; } - - /** If you have handled the error, it can be reset with this call. The error - state is automatically cleared if you Parse a new XML block. - */ - void ClearError() { error = false; - errorId = 0; - errorDesc = ""; - errorLocation.row = errorLocation.col = 0; - //errorLocation.last = 0; - } - - /** Write the document to standard out using formatted printing ("pretty print"). */ - void Print() const { Print( stdout, 0 ); } - - /* Write the document to a string using formatted printing ("pretty print"). This - will allocate a character array (new char[]) and return it as a pointer. The - calling code pust call delete[] on the return char* to avoid a memory leak. - */ - //char* PrintToMemory() const; - - /// Print this Document to a FILE stream. - virtual void Print( FILE* cfile, int depth = 0 ) const; - // [internal use] - void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - - virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - // [internal use] - virtual TiXmlNode* Clone() const; - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - -private: - void CopyTo( TiXmlDocument* target ) const; - - bool error; - int errorId; - TIXML_STRING errorDesc; - int tabsize; - TiXmlCursor errorLocation; - bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. -}; - - -/** - A TiXmlHandle is a class that wraps a node pointer with null checks; this is - an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml - DOM structure. It is a separate utility class. - - Take an example: - @verbatim - - - - - - - @endverbatim - - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very - easy to write a *lot* of code that looks like: - - @verbatim - TiXmlElement* root = document.FirstChildElement( "Document" ); - if ( root ) - { - TiXmlElement* element = root->FirstChildElement( "Element" ); - if ( element ) - { - TiXmlElement* child = element->FirstChildElement( "Child" ); - if ( child ) - { - TiXmlElement* child2 = child->NextSiblingElement( "Child" ); - if ( child2 ) - { - // Finally do something useful. - @endverbatim - - And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity - of such code. A TiXmlHandle checks for null pointers so it is perfectly safe - and correct to use: - - @verbatim - TiXmlHandle docHandle( &document ); - TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); - if ( child2 ) - { - // do something useful - @endverbatim - - Which is MUCH more concise and useful. - - It is also safe to copy handles - internally they are nothing more than node pointers. - @verbatim - TiXmlHandle handleCopy = handle; - @endverbatim - - What they should not be used for is iteration: - - @verbatim - int i=0; - while ( true ) - { - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); - if ( !child ) - break; - // do something - ++i; - } - @endverbatim - - It seems reasonable, but it is in fact two embedded while loops. The Child method is - a linear walk to find the element, so this code would iterate much more than it needs - to. Instead, prefer: - - @verbatim - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); - - for( child; child; child=child->NextSiblingElement() ) - { - // do something - } - @endverbatim -*/ -class TiXmlHandle -{ -public: - /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } - /// Copy constructor - TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } - TiXmlHandle operator=( const TiXmlHandle& ref ) { this->node = ref.node; return *this; } - - /// Return a handle to the first child node. - TiXmlHandle FirstChild() const; - /// Return a handle to the first child node with the given name. - TiXmlHandle FirstChild( const char * value ) const; - /// Return a handle to the first child element. - TiXmlHandle FirstChildElement() const; - /// Return a handle to the first child element with the given name. - TiXmlHandle FirstChildElement( const char * value ) const; - - /** Return a handle to the "index" child with the given name. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( const char* value, int index ) const; - /** Return a handle to the "index" child. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( int index ) const; - /** Return a handle to the "index" child element with the given name. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( const char* value, int index ) const; - /** Return a handle to the "index" child element. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( int index ) const; - - TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } - TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } - - TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } - TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } - - /** Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* ToNode() const { return node; } - /** Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } - /** Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } - /** Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } - - /** @deprecated use ToNode. - Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* Node() const { return ToNode(); } - /** @deprecated use ToElement. - Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* Element() const { return ToElement(); } - /** @deprecated use ToText() - Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* Text() const { return ToText(); } - /** @deprecated use ToUnknown() - Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* Unknown() const { return ToUnknown(); } - -private: - TiXmlNode* node; -}; - - -/** Print to memory functionality. The TiXmlPrinter is useful when you need to: - - -# Print to memory (especially in non-STL mode) - -# Control formatting (line endings, etc.) - - When constructed, the TiXmlPrinter is in its default "pretty printing" mode. - Before calling Accept() you can call methods to control the printing - of the XML document. After TiXmlNode::Accept() is called, the printed document can - be accessed via the CStr(), Str(), and Size() methods. - - TiXmlPrinter uses the Visitor API. - @verbatim - TiXmlPrinter printer; - printer.SetIndent( "\t" ); - - doc.Accept( &printer ); - fprintf( stdout, "%s", printer.CStr() ); - @endverbatim -*/ -class TiXmlPrinter : public TiXmlVisitor -{ -public: - TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), - buffer(), indent( " " ), lineBreak( "\n" ) {} - - virtual bool VisitEnter( const TiXmlDocument& doc ); - virtual bool VisitExit( const TiXmlDocument& doc ); - - virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); - virtual bool VisitExit( const TiXmlElement& element ); - - virtual bool Visit( const TiXmlDeclaration& declaration ); - virtual bool Visit( const TiXmlText& text ); - virtual bool Visit( const TiXmlComment& comment ); - virtual bool Visit( const TiXmlUnknown& unknown ); - - /** Set the indent characters for printing. By default 4 spaces - but tab (\t) is also useful, or null/empty string for no indentation. - */ - void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } - /// Query the indention string. - const char* Indent() { return indent.c_str(); } - /** Set the line breaking string. By default set to newline (\n). - Some operating systems prefer other characters, or can be - set to the null/empty string for no indenation. - */ - void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } - /// Query the current line breaking string. - const char* LineBreak() { return lineBreak.c_str(); } - - /** Switch over to "stream printing" which is the most dense formatting without - linebreaks. Common when the XML is needed for network transmission. - */ - void SetStreamPrinting() { indent = ""; - lineBreak = ""; - } - /// Return the result. - const char* CStr() { return buffer.c_str(); } - /// Return the length of the result string. - size_t Size() { return buffer.size(); } - - /// Return the result. - const std::string& Str() { return buffer; } - -private: - void DoIndent() { - for( int i=0; i& PhoIndex, vector& ParIndex, vector& ParbarIndex) - { - for(unsigned int i(0); i!=FPtcls.size(); ++i) - { - FourMomentum p(FPtcls[i].momentum()); - double eta = p.eta(); - int Id = FPtcls[i].pdgId(); - - if( Id==22 ) PhoIndex.push_back(i); - if( Id==Par && fabs(eta) < 2.4 ) ParIndex.push_back(i); // && (fabs(eta) < 1.4442 || fabs(eta) > 1.5660) - if( Id==-Par && fabs(eta) < 2.4 ) ParbarIndex.push_back(i); // && (fabs(eta) < 1.4442 || fabs(eta) > 1.5660) - } - return; - } - - - - //Function that convolutes a particle (or antiparticle) with the surrounding photons: - void ConvPar(vector PhoIndex, vector ParIndex, FourMomentum& par_conv, vector& par_del, ParticleVector FPtcls, bool& is_par) - { - - vector tmp_par_del; - FourMomentum tmp_par_conv; - FourMomentum tmp_test_conv; - - for(unsigned int i(0); i != ParIndex.size(); ++i) - { - double R; - double mass; - FourMomentum par_4p (FPtcls.at( ParIndex[i]).momentum()); - double par_eta (par_4p.eta()); - double par_phi (par_4p.phi()); - - tmp_par_del.clear(); - tmp_par_del.push_back(ParIndex[i]); - tmp_par_conv = par_4p; - tmp_test_conv = par_4p; - - for(unsigned int j(0); j != PhoIndex.size(); ++j) - { - FourMomentum pho_4p (FPtcls.at(PhoIndex[j]).momentum()); - double pho_eta (pho_4p.eta()); - double pho_phi (pho_4p.phi()); - - if (fabs(par_eta) < 1.4442) R = 0.05; - else R=0.07; - - if (sqrt( (par_eta-pho_eta)*(par_eta-pho_eta) + (par_phi-pho_phi)*(par_phi-pho_phi)) < R ) - { - tmp_par_conv += pho_4p; - tmp_par_del.push_back( PhoIndex[j]); - - if (tmp_test_conv.mass2() < 0. ) mass = 0; - else mass = tmp_test_conv.mass(); - - double E_sum = tmp_test_conv.E() + pho_4p.E(); - double px_tmp = tmp_test_conv.px() * sqrt( E_sum*E_sum - mass*mass) / tmp_test_conv.p().mod(); - double py_tmp = tmp_test_conv.py() * sqrt( E_sum*E_sum - mass*mass) / tmp_test_conv.p().mod(); - double pz_tmp = tmp_test_conv.pz() * sqrt( E_sum*E_sum - mass*mass) / tmp_test_conv.p().mod(); - - tmp_test_conv.setPx(px_tmp); - tmp_test_conv.setPy(py_tmp); - tmp_test_conv.setPz(pz_tmp); - tmp_test_conv.setE(E_sum); - } - } + _histBoostedDeltaPhiZJ1 = bookHistogram1D(10, 1, 1); //9, 1, 1); + _histBoostedDeltaPhiZJ1_2 = bookHistogram1D(11, 1, 1); //2, 1, 1); + _histBoostedDeltaPhiZJ3 = bookHistogram1D(12, 1, 1); //18, 1, 1); + _histBoostedDeltaPhiZJ1_3 = bookHistogram1D(13, 1, 1); //6, 1, 1); + _histBoostedDeltaPhiZJ2_3 = bookHistogram1D(14, 1, 1); //7, 1, 1); + _histBoostedDeltaPhiJ1J2_3 = bookHistogram1D(15, 1, 1); //15, 1, 1); + _histBoostedDeltaPhiJ1J3_3 = bookHistogram1D(16, 1, 1); //13, 1, 1); + _histBoostedDeltaPhiJ2J3_3 = bookHistogram1D(17, 1, 1); //11, 1, 1); + _histBoostedTransvThrust = bookHistogram1D(18, 1, 1); //16, 1, 1); - if ((tmp_par_conv.pT() > 20.0) && (tmp_par_conv.pT() > par_conv.pT())) - { - par_conv = tmp_par_conv; - par_del = tmp_par_del; - is_par = true; - } - } - return; } - - void GetPtEtaPhi(FourMomentum p1, double& pt, double& eta, double& phi) - { - pt = p1.pT(); - eta = p1.eta(); - phi = p1.phi(); - return; - } - - - void analyze(const Event& event) - { + void analyze(const Event& event){ const double weight = event.weight(); - bool is_ele = false; - bool is_pos = false; - bool is_mu = false; - bool is_mubar = false; - bool Zee = false; - bool Zmm = false; - bool is_boosted = false; - - vector pho_index; - - vector ele_index; - vector pos_index; - vector ele_del; - vector pos_del; - - vector mu_index; - vector mubar_index; - vector mu_del; - vector mubar_del; - - vector total_del; - - - FourMomentum ele_conv (0,0,0,0); - FourMomentum pos_conv (0,0,0,0); - - FourMomentum mu_conv (0,0,0,0); - FourMomentum mubar_conv (0,0,0,0); - - ParticleVector final_ptcls; - std::vector vecs; - - const FinalState& fs = applyProjection(event, "FS"); - final_ptcls = fs.particlesByPt(); - - // Find all electrons (muons), positrons (antimuons) and photons - FindPhoParParbar(final_ptcls, 11, pho_index, ele_index, pos_index); - pho_index.clear(); - FindPhoParParbar(final_ptcls, 13, pho_index, mu_index, mubar_index); - - // Convolute electrons with surrounding photons - ConvPar(pho_index, ele_index, ele_conv, ele_del, final_ptcls, is_ele); - // Convolute muons with surrounding photons - ConvPar(pho_index, mu_index, mu_conv, mu_del, final_ptcls, is_mu); + //apply the Z finders + const ZFinder& zfe = applyProjection(event, "ZFE"); + const ZFinder& zfm = applyProjection(event, "ZFM"); - if ((!is_ele) && (!is_mu)) vetoEvent; + //if no Z found, veto + if (zfe.empty() && zfm.empty()) + vetoEvent; - // Convolute positrons with surrounding photons - ConvPar(pho_index, pos_index, pos_conv, pos_del, final_ptcls, is_pos); - // Convolute anti muons with surrounding photons - ConvPar(pho_index, mubar_index, mubar_conv, mubar_del, final_ptcls, is_mubar); - - - if ((!is_pos) && (!is_mubar)) vetoEvent; - - FourMomentum Z_momentum; - FourMomentum Zee_momentum(add(pos_conv, ele_conv)); - FourMomentum Zmm_momentum(add(mubar_conv, mu_conv)); - - if (Zee_momentum.mass2() >= 0. ) - { - if (Zee_momentum.mass() > 71.11 && Zee_momentum.mass() < 111.) { Z_momentum = Zee_momentum; Zee = true; } - } - - if ( (!Zee) && Zmm_momentum.mass2() >= 0. ) - { - if ( Zmm_momentum.mass() > 71.11 && Zmm_momentum.mass() < 111.) { Z_momentum = Zmm_momentum; Zmm = true; } - else vetoEvent; - } + //Choose the Z candidate + const ParticleVector& z = !zfm.empty() ? zfm.bosons() : zfe.bosons(); + const ParticleVector& clusteredConstituents = !zfm.empty() ? zfm.constituents() : zfe.constituents(); - if ( (!Zee) && (!Zmm) ) vetoEvent; - - if (Z_momentum.pT() > 150) is_boosted = true; - - double par_pt, par_eta, par_phi; - double parbar_pt, parbar_eta, parbar_phi; - - if (Zee) - { - GetPtEtaPhi(ele_conv, par_pt, par_eta, par_phi); - GetPtEtaPhi(pos_conv, parbar_pt, parbar_eta, parbar_phi); - - total_del.reserve(ele_del.size()+pos_del.size() ); - total_del.insert(total_del.end(), ele_del.begin(), ele_del.end()); - total_del.insert(total_del.end(), pos_del.begin(), pos_del.end()); - sort(total_del.begin(), total_del.end()); - } - - if (Zmm) - { - GetPtEtaPhi(mu_conv, par_pt, par_eta, par_phi); - GetPtEtaPhi(mubar_conv, parbar_pt, parbar_eta, parbar_phi); - - total_del.reserve(mu_del.size()+mubar_del.size() ); - total_del.insert(total_del.end(), mu_del.begin(), mu_del.end()); - total_del.insert(total_del.end(), mubar_del.begin(), mubar_del.end()); - sort(total_del.begin(), total_del.end()); - } - - for(unsigned int i(total_del.size()); i !=0; --i) - final_ptcls.erase(final_ptcls.begin()+total_del.at(i-1)); - - _histMll->fill( Z_momentum.mass(), weight); - - - for(unsigned int i(0); i != final_ptcls.size(); ++i) - { - if (fabs(final_ptcls[i].pdgId()) == 12 || fabs(final_ptcls[i].pdgId()) == 14 || fabs(final_ptcls[i].pdgId()) == 16 ) continue; - if (PID::threeCharge (final_ptcls[i].pdgId()) != 0) - { - if (final_ptcls[i].momentum().E() < 0.25) continue; - } - - fastjet::PseudoJet pseudoJet(final_ptcls[i].momentum().px(), final_ptcls[i].momentum().py(), final_ptcls[i].momentum().pz(), final_ptcls[i].momentum().E()); - pseudoJet.set_user_index(i); - vecs.push_back(pseudoJet); - } - - vector jet_list; - fastjet::ClusterSequence cseq(vecs, fastjet::JetDefinition(fastjet::antikt_algorithm, 0.5)); - vector jets = sorted_by_pt(cseq.inclusive_jets(50.0)); // In draft, the jet-treshold is 50 GeV - - for(unsigned int i(0); i 50.0) - { - if (deltaR(par_pt, par_phi, j_eta, j_phi) > 0.4 && deltaR(parbar_pt, parbar_phi, j_eta, j_phi) > 0.4) - jet_list.push_back(jets[i]); - continue; - } + //determine whether we are in boosted regime + bool is_boosted = false; + if (z[0].momentum().pT()>150*GeV) + is_boosted = true; + + //build the jets + const FastJets& jetfs = applyProjection(event, "JETS"); + Jets jets = jetfs.jetsByPt(50.*GeV, MAXDOUBLE, -2.5, 2.5); + + //clean the jets against the lepton candidates, as in the paper, with a DeltaR cut of 0.4 against the clustered leptons + std::vector cleanedJets; + for (unsigned int i = 0; i < jets.size(); ++i){ + bool isolated = true; + for (unsigned j = 0; j < clusteredConstituents.size(); ++j){ + if (deltaR(clusteredConstituents[j].momentum().vector3(), jets[i].momentum().vector3()) < 0.4){ + isolated=false; + break; } } + if (isolated) + cleanedJets.push_back(&jets[i]); + } - double Njets = jet_list.size(); - - if (Njets) - { - - // Collect Z and jets transverse momenta to calculate transverse thrust - std::vector momenta; - momenta.clear(); - Vector3 mom = Z_momentum.p(); - mom.setZ(0.0); - momenta.push_back(mom); - - for (unsigned int i(0); i != jet_list.size(); ++i) - { - double momX = 0; - double momY = 0; - for (unsigned int j(0); j != cseq.constituents(jet_list[i]).size(); ++j) - { - std::valarray mom_4 = cseq.constituents(jet_list[i])[j].four_mom(); - momX += mom_4[0]; - momY += mom_4[1]; - } - mom.setX(momX); - mom.setY(momY); - mom.setZ(0.0); - momenta.push_back(mom); - } - - if (momenta.size() <= 2) - { - // We need to use a ghost so that Thrust.calc() doesn't return 1. - momenta.push_back(Vector3(0.0000001,0.0000001,0.0000001)); - } + unsigned int Njets = cleanedJets.size(); + //require at least 1 jet + if (Njets < 1) + vetoEvent; + + //now compute Thrust + // Collect Z and jets transverse momenta to calculate transverse thrust + std::vector momenta; + momenta.clear(); + Vector3 mom = z[0].momentum().p(); + mom.setZ(0.0); + momenta.push_back(mom); + + for (unsigned int i = 0; i < cleanedJets.size(); ++i){ + Vector3 mj = cleanedJets[i]->momentum().vector3(); + mj.setZ(0.0); + momenta.push_back(mj); + } + if (momenta.size() <= 2){ + // We need to use a ghost so that Thrust.calc() doesn't return 1. + momenta.push_back(Vector3(0.0000001,0.0000001,0.)); + } - Thrust thrust; - thrust.calc(momenta); - _histTransvThrust->fill(max(log( 1-thrust.thrust() ), -14.), weight); // d17 + Thrust thrust; + thrust.calc(momenta); + _histTransvThrust->fill(max(log( 1-thrust.thrust() ), -14.), weight); // d17 - if (is_boosted) _histBoostedTransvThrust->fill(max(log( 1-thrust.thrust() ), -14.), weight); // d16 + if (is_boosted) _histBoostedTransvThrust->fill(max(log( 1-thrust.thrust() ), -14.), weight); // d16 - double Ptll = Z_momentum.pT(); - double PhiZ = Z_momentum.phi(); - double PtJet1 = jet_list[0].pt(); - double PhiJet1 = jet_list[0].phi(); + double PhiZ = z[0].momentum().phi(); + double PhiJet1 = cleanedJets[0]->phi(); - _histNjets->fill(Njets, weight); - _histPtll->fill(Ptll, weight); - _histPtJet1->fill(PtJet1, weight); - _histDeltaPhiZJ1->fill(deltaPhi(PhiJet1,PhiZ), weight); // d10 300*0.10472* + _histDeltaPhiZJ1->fill(deltaPhi(PhiJet1,PhiZ), weight); // d10 300*0.10472* - if (is_boosted) _histBoostedDeltaPhiZJ1->fill(deltaPhi(PhiJet1,PhiZ), weight); // d09 300*0.10472* + if (is_boosted) _histBoostedDeltaPhiZJ1->fill(deltaPhi(PhiJet1,PhiZ), weight); // d09 300*0.10472* - if (Njets > 1) - { - FourMomentum J1_4p (jet_list[0].E(), jet_list[0].px(), jet_list[0].py(), jet_list[0].pz()); - FourMomentum J2_4p (jet_list[1].E(), jet_list[1].px(), jet_list[1].py(), jet_list[1].pz()); - FourMomentum pJ1J2(add(J1_4p,J2_4p)); + if (Njets > 1){ + double PhiJet2 = cleanedJets[1]->phi(); - double Mjj; - //if (pJ1J2.mass2() < 0. ) Mjj = 0; - //else - Mjj = pJ1J2.mass(); // pJ1J2.mass() gives error message. - double PtJet2 = jet_list[1].pt(); - double PhiJet2 = jet_list[1].phi(); + _histDeltaPhiZJ1_2->fill(deltaPhi(PhiJet1,PhiZ), weight); // d01 10*0.10472 - _histMjj->fill(Mjj, weight); - _histPtJet2->fill(PtJet2, weight); - _histDeltaPhiZJ2->fill(deltaPhi(PhiJet2, PhiZ), weight); - _histDeltaPhiZJ1_2->fill(deltaPhi(PhiJet1,PhiZ), weight); // d01 10*0.10472 - _histDeltaPhiJ1J2_2->fill(deltaPhi(PhiJet1,PhiJet2), weight); + if (is_boosted){ + _histBoostedDeltaPhiZJ1_2->fill(deltaPhi(PhiJet1,PhiZ), weight); // d02 30*0.10472* + } - if (is_boosted) - { - _histBoostedDeltaPhiZJ2->fill(deltaPhi(PhiJet2, PhiZ), weight); - _histBoostedDeltaPhiZJ1_2->fill(deltaPhi(PhiJet1,PhiZ), weight); // d02 30*0.10472* - _histBoostedDeltaPhiJ1J2_2->fill(deltaPhi(PhiJet1,PhiJet2), weight); - } + if (Njets > 2){ + double PhiJet3 = cleanedJets[2]->phi(); + _histDeltaPhiZJ1_3->fill(deltaPhi(PhiJet1,PhiZ), weight); // d08 0.10472* + _histDeltaPhiZJ2_3->fill(deltaPhi(PhiJet2,PhiZ), weight); // d14 10*0.10472* + _histDeltaPhiJ1J2_3->fill(deltaPhi(PhiJet1,PhiJet2), weight); // d03 100*0.10472* + _histDeltaPhiJ1J3_3->fill(deltaPhi(PhiJet1,PhiJet3), weight); // d05 10*0.10472* + _histDeltaPhiJ2J3_3->fill(deltaPhi(PhiJet2,PhiJet3), weight); // d12 0.10472* + _histDeltaPhiZJ3->fill(deltaPhi(PhiZ,PhiJet3), weight); // d04 0.10472* - if (Njets > 2) - { - double PtJet3 = jet_list[2].pt(); - double PhiJet3 = jet_list[2].phi(); - double SumDeltaPhi = deltaPhi(PhiJet1,PhiJet2) + deltaPhi(PhiJet1,PhiJet3) + deltaPhi(PhiJet2,PhiJet3); - _histPtJet3->fill(PtJet3, weight); - _histDeltaPhiZJ1_3->fill(deltaPhi(PhiJet1,PhiZ), weight); // d08 0.10472* - _histDeltaPhiZJ2_3->fill(deltaPhi(PhiJet2,PhiZ), weight); // d14 10*0.10472* - _histDeltaPhiJ1J2_3->fill(deltaPhi(PhiJet1,PhiJet2), weight); // d03 100*0.10472* - _histDeltaPhiJ1J3_3->fill(deltaPhi(PhiJet1,PhiJet3), weight); // d05 10*0.10472* - _histDeltaPhiJ2J3_3->fill(deltaPhi(PhiJet2,PhiJet3), weight); // d12 0.10472* - _histDeltaPhiZJ3->fill(deltaPhi(PhiZ,PhiJet3), weight); // d04 0.10472* - _histSumDeltaPhi->fill(SumDeltaPhi, weight); - - if (is_boosted) - { + if (is_boosted) { _histBoostedDeltaPhiZJ1_3->fill(deltaPhi(PhiJet1,PhiZ), weight); // d06 0.21416* _histBoostedDeltaPhiZJ2_3->fill(deltaPhi(PhiJet2,PhiZ), weight); // d07 10*0.21416* _histBoostedDeltaPhiJ1J2_3->fill(deltaPhi(PhiJet1,PhiJet2), weight); // d15 100*0.21416* _histBoostedDeltaPhiJ1J3_3->fill(deltaPhi(PhiJet1,PhiJet3), weight); // d13 10*0.21416* _histBoostedDeltaPhiJ2J3_3->fill(deltaPhi(PhiJet2,PhiJet3), weight); // d11 0.21416* _histBoostedDeltaPhiZJ3->fill(deltaPhi(PhiZ,PhiJet3), weight); // d18 0.21416* - _histBoostedSumDeltaPhi->fill(SumDeltaPhi, weight); - - } - - if(Njets>3) - { - double PtJet4 = jet_list[3].pt(); - _histPtJet4->fill(PtJet4, weight); - - } - } - } } + } } + } + + void normalizeNoOverflows(AIDA::IHistogram1D* plot, double integral){ + double factor=1.; + if (plot->sumBinHeights()>0 && plot->sumAllBinHeights()>0) + factor = plot->sumAllBinHeights()/plot->sumBinHeights(); + normalize(plot, factor*integral); + } void finalize() { - normalize(_histMll,1.); - normalize(_histNjets,1.); - normalize(_histPtll,1.); - normalize(_histMjj,1.); - normalize(_histPtJet1,1.); - normalize(_histPtJet2,1.); - normalize(_histPtJet3,1.); - normalize(_histPtJet4,1.); - normalize(_histDeltaPhiZJ1,1.); // d10 300. - normalize(_histDeltaPhiZJ2,1.); - normalize(_histDeltaPhiZJ3,1.); // d04 - normalize(_histDeltaPhiZJ1_2,1.); // d01 10. - normalize(_histDeltaPhiZJ1_3,1.); // d08 100. - normalize(_histDeltaPhiZJ2_3,1.); // d14 - normalize(_histDeltaPhiJ1J2_2,1.); - normalize(_histDeltaPhiJ1J2_3,1.); // d03 100. - normalize(_histSumDeltaPhi,1.); - normalize(_histTransvThrust,1); // d17. They have apparently remembered to multiply by the binsize. - normalize(_histDeltaPhiJ1J3_3, 1.); // d05 10. - normalize(_histDeltaPhiJ2J3_3, 1.); // d12 + normalizeNoOverflows(_histDeltaPhiZJ1,1.); + normalizeNoOverflows(_histDeltaPhiZJ3,1.); + normalizeNoOverflows(_histDeltaPhiZJ1_2,1.); + normalizeNoOverflows(_histDeltaPhiZJ1_3,1.); + normalizeNoOverflows(_histDeltaPhiZJ2_3,1.); + normalizeNoOverflows(_histDeltaPhiJ1J2_3,1.); + normalize(_histTransvThrust,1.); + normalizeNoOverflows(_histDeltaPhiJ1J3_3, 1.); + normalizeNoOverflows(_histDeltaPhiJ2J3_3, 1.); // Boosted - normalize(_histBoostedDeltaPhiZJ1,1.); // d09 300. - normalize(_histBoostedDeltaPhiZJ2,1.); - normalize(_histBoostedDeltaPhiZJ3,1.); // d18 - normalize(_histBoostedDeltaPhiZJ1_2,1.); // d02 30. - normalize(_histBoostedDeltaPhiZJ1_3,1.); // d06 300. - normalize(_histBoostedDeltaPhiZJ2_3,1.); // d07 10. - normalize(_histBoostedDeltaPhiJ1J2_2,1.); - normalize(_histBoostedDeltaPhiJ1J2_3,1.); // d15 100. - normalize(_histBoostedSumDeltaPhi,1.); - normalize(_histBoostedTransvThrust,1); // d16. They have apparently remembered to multiply by the binsize. - normalize(_histBoostedDeltaPhiJ1J3_3, 1.); // d13 10. - normalize(_histBoostedDeltaPhiJ2J3_3, 1.); // d11 + normalizeNoOverflows(_histBoostedDeltaPhiZJ1,1.); + normalizeNoOverflows(_histBoostedDeltaPhiZJ3,1.); + normalizeNoOverflows(_histBoostedDeltaPhiZJ1_2,1.); + normalizeNoOverflows(_histBoostedDeltaPhiZJ1_3,1.); + normalizeNoOverflows(_histBoostedDeltaPhiZJ2_3,1.); + normalizeNoOverflows(_histBoostedDeltaPhiJ1J2_3,1.); + normalize(_histBoostedTransvThrust,1.); + normalizeNoOverflows(_histBoostedDeltaPhiJ1J3_3, 1.); + normalizeNoOverflows(_histBoostedDeltaPhiJ2J3_3, 1.); } private: - AIDA::IHistogram1D* _histMll; - AIDA::IHistogram1D* _histNjets; - AIDA::IHistogram1D* _histPtll; - AIDA::IHistogram1D* _histMjj; - AIDA::IHistogram1D* _histPtJet1; - AIDA::IHistogram1D* _histPtJet2; - AIDA::IHistogram1D* _histPtJet3; - AIDA::IHistogram1D* _histPtJet4; AIDA::IHistogram1D* _histDeltaPhiZJ1; - AIDA::IHistogram1D* _histDeltaPhiZJ2; AIDA::IHistogram1D* _histDeltaPhiZJ3; AIDA::IHistogram1D* _histDeltaPhiZJ1_2; AIDA::IHistogram1D* _histDeltaPhiZJ1_3; AIDA::IHistogram1D* _histDeltaPhiZJ2_3; - AIDA::IHistogram1D* _histDeltaPhiJ1J2_2; AIDA::IHistogram1D* _histDeltaPhiJ1J2_3; - AIDA::IHistogram1D* _histSumDeltaPhi; AIDA::IHistogram1D* _histTransvThrust; AIDA::IHistogram1D* _histDeltaPhiJ1J3_3; AIDA::IHistogram1D* _histDeltaPhiJ2J3_3; // Boosted AIDA::IHistogram1D* _histBoostedDeltaPhiZJ1; - AIDA::IHistogram1D* _histBoostedDeltaPhiZJ2; AIDA::IHistogram1D* _histBoostedDeltaPhiZJ3; AIDA::IHistogram1D* _histBoostedDeltaPhiZJ1_2; AIDA::IHistogram1D* _histBoostedDeltaPhiZJ1_3; AIDA::IHistogram1D* _histBoostedDeltaPhiZJ2_3; - AIDA::IHistogram1D* _histBoostedDeltaPhiJ1J2_2; AIDA::IHistogram1D* _histBoostedDeltaPhiJ1J2_3; - AIDA::IHistogram1D* _histBoostedSumDeltaPhi; AIDA::IHistogram1D* _histBoostedTransvThrust; AIDA::IHistogram1D* _histBoostedDeltaPhiJ1J3_3; AIDA::IHistogram1D* _histBoostedDeltaPhiJ2J3_3; @@ -496,7 +223,3 @@ namespace Rivet { AnalysisBuilder plugin_CMS_EWK_11_021; } - - - - diff --git a/GeneratorInterface/RivetInterface/test/rivetSetup.sh b/GeneratorInterface/RivetInterface/test/rivetSetup.sh index b7273c6ba3fc1..d70c0d70c1d01 100755 --- a/GeneratorInterface/RivetInterface/test/rivetSetup.sh +++ b/GeneratorInterface/RivetInterface/test/rivetSetup.sh @@ -1,4 +1,4 @@ #!/bin/bash -export RIVET_REF_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data:$CMSSW_RELEASE_BASE/src/GeneratorInterface/RivetInterface/data -export RIVET_INFO_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data:$CMSSW_RELEASE_BASE/src/GeneratorInterface/RivetInterface/data -export RIVET_PLOT_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data:$CMSSW_RELEASE_BASE/src/GeneratorInterface/RivetInterface/data +export RIVET_REF_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data +export RIVET_INFO_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data +export RIVET_PLOT_PATH=$CMSSW_BASE/src/GeneratorInterface/RivetInterface/data diff --git a/GeneratorInterface/RivetInterface/test/runRivetAnalyzer_cfg.py b/GeneratorInterface/RivetInterface/test/runRivetAnalyzer_cfg.py index ddcabd3cf98b4..35cdcbafc244b 100644 --- a/GeneratorInterface/RivetInterface/test/runRivetAnalyzer_cfg.py +++ b/GeneratorInterface/RivetInterface/test/runRivetAnalyzer_cfg.py @@ -14,7 +14,7 @@ process.load("GeneratorInterface.RivetInterface.rivetAnalyzer_cfi") -process.rivetAnalyzer.AnalysisNames = cms.vstring('MC_LES_HOUCHES_SYSTEMATICS_CMS','CMS_EWK_10_012') +process.rivetAnalyzer.AnalysisNames = cms.vstring('CMS_EWK_10_012') process.p = cms.Path(process.rivetAnalyzer) diff --git a/Geometry/CMSCommonData/data/materials.xml b/Geometry/CMSCommonData/data/materials.xml index f7d0d45ee4252..73a7cea6cf5c3 100644 --- a/Geometry/CMSCommonData/data/materials.xml +++ b/Geometry/CMSCommonData/data/materials.xml @@ -4421,5 +4421,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2019PFCalXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2019PFCalXML_cfi.py new file mode 100644 index 0000000000000..e27067e30af6d --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2019PFCalXML_cfi.py @@ -0,0 +1,283 @@ +import FWCore.ParameterSet.Config as cms + +## 2015 + new phase 1 pixel detector + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/PhaseI/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/PhaseI/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbar.xml', + 'Geometry/TrackerCommonData/data/tibtidcommonmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmaterial.xml', + 'Geometry/TrackerCommonData/data/tibmodpar.xml', + 'Geometry/TrackerCommonData/data/tibmodule0.xml', + 'Geometry/TrackerCommonData/data/tibmodule0a.xml', + 'Geometry/TrackerCommonData/data/tibmodule0b.xml', + 'Geometry/TrackerCommonData/data/tibmodule2.xml', + 'Geometry/TrackerCommonData/data/tibstringpar.xml', + 'Geometry/TrackerCommonData/data/tibstring0ll.xml', + 'Geometry/TrackerCommonData/data/tibstring0lr.xml', + 'Geometry/TrackerCommonData/data/tibstring0ul.xml', + 'Geometry/TrackerCommonData/data/tibstring0ur.xml', + 'Geometry/TrackerCommonData/data/tibstring0.xml', + 'Geometry/TrackerCommonData/data/tibstring1ll.xml', + 'Geometry/TrackerCommonData/data/tibstring1lr.xml', + 'Geometry/TrackerCommonData/data/tibstring1ul.xml', + 'Geometry/TrackerCommonData/data/tibstring1ur.xml', + 'Geometry/TrackerCommonData/data/tibstring1.xml', + 'Geometry/TrackerCommonData/data/tibstring2ll.xml', + 'Geometry/TrackerCommonData/data/tibstring2lr.xml', + 'Geometry/TrackerCommonData/data/tibstring2ul.xml', + 'Geometry/TrackerCommonData/data/tibstring2ur.xml', + 'Geometry/TrackerCommonData/data/tibstring2.xml', + 'Geometry/TrackerCommonData/data/tibstring3ll.xml', + 'Geometry/TrackerCommonData/data/tibstring3lr.xml', + 'Geometry/TrackerCommonData/data/tibstring3ul.xml', + 'Geometry/TrackerCommonData/data/tibstring3ur.xml', + 'Geometry/TrackerCommonData/data/tibstring3.xml', + 'Geometry/TrackerCommonData/data/tiblayerpar.xml', + 'Geometry/TrackerCommonData/data/tiblayer0.xml', + 'Geometry/TrackerCommonData/data/tiblayer1.xml', + 'Geometry/TrackerCommonData/data/tiblayer2.xml', + 'Geometry/TrackerCommonData/data/tiblayer3.xml', + 'Geometry/TrackerCommonData/data/tib.xml', + 'Geometry/TrackerCommonData/data/tidmaterial.xml', + 'Geometry/TrackerCommonData/data/tidmodpar.xml', + 'Geometry/TrackerCommonData/data/tidmodule0.xml', + 'Geometry/TrackerCommonData/data/tidmodule0r.xml', + 'Geometry/TrackerCommonData/data/tidmodule0l.xml', + 'Geometry/TrackerCommonData/data/tidmodule1.xml', + 'Geometry/TrackerCommonData/data/tidmodule1r.xml', + 'Geometry/TrackerCommonData/data/tidmodule1l.xml', + 'Geometry/TrackerCommonData/data/tidmodule2.xml', + 'Geometry/TrackerCommonData/data/tidringpar.xml', + 'Geometry/TrackerCommonData/data/tidring0.xml', + 'Geometry/TrackerCommonData/data/tidring0f.xml', + 'Geometry/TrackerCommonData/data/tidring0b.xml', + 'Geometry/TrackerCommonData/data/tidring1.xml', + 'Geometry/TrackerCommonData/data/tidring1f.xml', + 'Geometry/TrackerCommonData/data/tidring1b.xml', + 'Geometry/TrackerCommonData/data/tidring2.xml', + 'Geometry/TrackerCommonData/data/tid.xml', + 'Geometry/TrackerCommonData/data/tidf.xml', + 'Geometry/TrackerCommonData/data/tidb.xml', + 'Geometry/TrackerCommonData/data/tibtidservices.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesf.xml', + 'Geometry/TrackerCommonData/data/tibtidservicesb.xml', + 'Geometry/TrackerCommonData/data/tobmaterial.xml', + 'Geometry/TrackerCommonData/data/tobmodpar.xml', + 'Geometry/TrackerCommonData/data/tobmodule0.xml', + 'Geometry/TrackerCommonData/data/tobmodule2.xml', + 'Geometry/TrackerCommonData/data/tobmodule4.xml', + 'Geometry/TrackerCommonData/data/tobrodpar.xml', + 'Geometry/TrackerCommonData/data/tobrod0c.xml', + 'Geometry/TrackerCommonData/data/tobrod0l.xml', + 'Geometry/TrackerCommonData/data/tobrod0h.xml', + 'Geometry/TrackerCommonData/data/tobrod0.xml', + 'Geometry/TrackerCommonData/data/tobrod1l.xml', + 'Geometry/TrackerCommonData/data/tobrod1h.xml', + 'Geometry/TrackerCommonData/data/tobrod1.xml', + 'Geometry/TrackerCommonData/data/tobrod2c.xml', + 'Geometry/TrackerCommonData/data/tobrod2l.xml', + 'Geometry/TrackerCommonData/data/tobrod2h.xml', + 'Geometry/TrackerCommonData/data/tobrod2.xml', + 'Geometry/TrackerCommonData/data/tobrod3l.xml', + 'Geometry/TrackerCommonData/data/tobrod3h.xml', + 'Geometry/TrackerCommonData/data/tobrod3.xml', + 'Geometry/TrackerCommonData/data/tobrod4c.xml', + 'Geometry/TrackerCommonData/data/tobrod4l.xml', + 'Geometry/TrackerCommonData/data/tobrod4h.xml', + 'Geometry/TrackerCommonData/data/tobrod4.xml', + 'Geometry/TrackerCommonData/data/tobrod5l.xml', + 'Geometry/TrackerCommonData/data/tobrod5h.xml', + 'Geometry/TrackerCommonData/data/tobrod5.xml', + 'Geometry/TrackerCommonData/data/tob.xml', + 'Geometry/TrackerCommonData/data/tecmaterial.xml', + 'Geometry/TrackerCommonData/data/tecmodpar.xml', + 'Geometry/TrackerCommonData/data/tecmodule0.xml', + 'Geometry/TrackerCommonData/data/tecmodule0r.xml', + 'Geometry/TrackerCommonData/data/tecmodule0s.xml', + 'Geometry/TrackerCommonData/data/tecmodule1.xml', + 'Geometry/TrackerCommonData/data/tecmodule1r.xml', + 'Geometry/TrackerCommonData/data/tecmodule1s.xml', + 'Geometry/TrackerCommonData/data/tecmodule2.xml', + 'Geometry/TrackerCommonData/data/tecmodule3.xml', + 'Geometry/TrackerCommonData/data/tecmodule4.xml', + 'Geometry/TrackerCommonData/data/tecmodule4r.xml', + 'Geometry/TrackerCommonData/data/tecmodule4s.xml', + 'Geometry/TrackerCommonData/data/tecmodule5.xml', + 'Geometry/TrackerCommonData/data/tecmodule6.xml', + 'Geometry/TrackerCommonData/data/tecpetpar.xml', + 'Geometry/TrackerCommonData/data/tecring0.xml', + 'Geometry/TrackerCommonData/data/tecring1.xml', + 'Geometry/TrackerCommonData/data/tecring2.xml', + 'Geometry/TrackerCommonData/data/tecring3.xml', + 'Geometry/TrackerCommonData/data/tecring4.xml', + 'Geometry/TrackerCommonData/data/tecring5.xml', + 'Geometry/TrackerCommonData/data/tecring6.xml', + 'Geometry/TrackerCommonData/data/tecring0f.xml', + 'Geometry/TrackerCommonData/data/tecring1f.xml', + 'Geometry/TrackerCommonData/data/tecring2f.xml', + 'Geometry/TrackerCommonData/data/tecring3f.xml', + 'Geometry/TrackerCommonData/data/tecring4f.xml', + 'Geometry/TrackerCommonData/data/tecring5f.xml', + 'Geometry/TrackerCommonData/data/tecring6f.xml', + 'Geometry/TrackerCommonData/data/tecring0b.xml', + 'Geometry/TrackerCommonData/data/tecring1b.xml', + 'Geometry/TrackerCommonData/data/tecring2b.xml', + 'Geometry/TrackerCommonData/data/tecring3b.xml', + 'Geometry/TrackerCommonData/data/tecring4b.xml', + 'Geometry/TrackerCommonData/data/tecring5b.xml', + 'Geometry/TrackerCommonData/data/tecring6b.xml', + 'Geometry/TrackerCommonData/data/tecpetalf.xml', + 'Geometry/TrackerCommonData/data/tecpetalb.xml', + 'Geometry/TrackerCommonData/data/tecpetal0.xml', + 'Geometry/TrackerCommonData/data/tecpetal0f.xml', + 'Geometry/TrackerCommonData/data/tecpetal0b.xml', + 'Geometry/TrackerCommonData/data/tecpetal3.xml', + 'Geometry/TrackerCommonData/data/tecpetal3f.xml', + 'Geometry/TrackerCommonData/data/tecpetal3b.xml', + 'Geometry/TrackerCommonData/data/tecpetal6f.xml', + 'Geometry/TrackerCommonData/data/tecpetal6b.xml', + 'Geometry/TrackerCommonData/data/tecpetal8f.xml', + 'Geometry/TrackerCommonData/data/tecpetal8b.xml', + 'Geometry/TrackerCommonData/data/tecwheel.xml', + 'Geometry/TrackerCommonData/data/tecwheela.xml', + 'Geometry/TrackerCommonData/data/tecwheelb.xml', + 'Geometry/TrackerCommonData/data/tecwheelc.xml', + 'Geometry/TrackerCommonData/data/tecwheeld.xml', + 'Geometry/TrackerCommonData/data/tecwheel6.xml', + 'Geometry/TrackerCommonData/data/tecservices.xml', + 'Geometry/TrackerCommonData/data/tecbackplate.xml', + 'Geometry/TrackerCommonData/data/tec.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/TrackerCommonData/data/trackertibtidservices.xml', + 'Geometry/TrackerCommonData/data/trackertib.xml', + 'Geometry/TrackerCommonData/data/trackertid.xml', + 'Geometry/TrackerCommonData/data/trackertob.xml', + 'Geometry/TrackerCommonData/data/trackertec.xml', + 'Geometry/TrackerCommonData/data/trackerbulkhead.xml', + 'Geometry/TrackerCommonData/data/trackerother.xml', + 'Geometry/EcalCommonData/data/PhaseII/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + ## 'Geometry/EcalCommonData/data/eefixed.xml', + ## 'Geometry/EcalCommonData/data/eehier.xml', + ## 'Geometry/EcalCommonData/data/eealgo.xml', + ## 'Geometry/EcalCommonData/data/escon.xml', + ## 'Geometry/EcalCommonData/data/esalgo.xml', + ## 'Geometry/EcalCommonData/data/eeF.xml', + ## 'Geometry/EcalCommonData/data/eeB.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/PhaseII/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + ## 'Geometry/HcalCommonData/data/PhaseII/hcalendcapalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/PFCalGeometry/data/pfcal.xml', + 'Geometry/MuonCommonData/data/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/v1/mb1.xml', + 'Geometry/MuonCommonData/data/v1/mb2.xml', + 'Geometry/MuonCommonData/data/v1/mb3.xml', + 'Geometry/MuonCommonData/data/v1/mb4.xml', + 'Geometry/MuonCommonData/data/design/muonYoke.xml', + 'Geometry/MuonCommonData/data/v2/mf.xml', + 'Geometry/MuonCommonData/data/v2/rpcf.xml', + 'Geometry/MuonCommonData/data/v4/gemf.xml', + 'Geometry/MuonCommonData/data/v2/csc.xml', + 'Geometry/MuonCommonData/data/v2/mfshield.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/v2/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/v2/muonNumbering.xml', + 'Geometry/MuonCommonData/data/v2/muonGemNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseI/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/PhaseII/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + ## 'Geometry/EcalSimData/data/ESProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseI/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2023HGCalXML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2023HGCalXML_cfi.py new file mode 100644 index 0000000000000..d5f72d29b0708 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2023HGCalXML_cfi.py @@ -0,0 +1,125 @@ +import FWCore.ParameterSet.Config as cms + +## 2015 + new phase 1 pixel detector + Tracker BarrelEndcap5Dv(described as a pixel detector before the detid migration) + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/PhaseI/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/PhaseI/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdMaterials.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdCylinder.xml', + 'Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdDisks.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdInnerDisk3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdOuterDisk3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixfwdblade3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarmaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladder.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarladderfull3.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer0.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer1.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer2.xml', + 'Geometry/TrackerCommonData/data/PhaseI/pixbarlayer3.xml', + 'Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/tracker.xml', + 'Geometry/TrackerCommonData/data/trackerpixbar.xml', + 'Geometry/TrackerCommonData/data/PhaseI/trackerpixfwd.xml', + 'Geometry/EcalCommonData/data/PhaseII/eregalgo.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/EcalCommonData/data/eecon.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/PhaseII/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal.xml', + 'Geometry/PFCalGeometry/data/pfcal.xml', + 'Geometry/MuonCommonData/data/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/v1/mb1.xml', + 'Geometry/MuonCommonData/data/v1/mb2.xml', + 'Geometry/MuonCommonData/data/v1/mb3.xml', + 'Geometry/MuonCommonData/data/v1/mb4.xml', + 'Geometry/MuonCommonData/data/design/muonYoke.xml', + 'Geometry/MuonCommonData/data/v2/mf.xml', + 'Geometry/MuonCommonData/data/v2/rpcf.xml', + 'Geometry/MuonCommonData/data/v4/gemf.xml', + 'Geometry/MuonCommonData/data/v2/csc.xml', + 'Geometry/MuonCommonData/data/v2/mfshield.xml', + 'Geometry/ForwardCommonData/data/forward.xml', + 'Geometry/ForwardCommonData/data/v2/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/brm.xml', + 'Geometry/ForwardCommonData/data/totemMaterials.xml', + 'Geometry/ForwardCommonData/data/totemRotations.xml', + 'Geometry/ForwardCommonData/data/totemt1.xml', + 'Geometry/ForwardCommonData/data/totemt2.xml', + 'Geometry/ForwardCommonData/data/ionpump.xml', + 'Geometry/ForwardCommonData/data/castor.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml')+cms.vstring( + 'Geometry/MuonCommonData/data/v2/muonNumbering.xml', + 'Geometry/MuonCommonData/data/v2/muonGemNumbering.xml', + 'Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/trackerStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/BarrelEndcap5D/trackersens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/BarrelEndcap5D/trackerRecoMaterial.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/PhaseII/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/MuonSimData/data/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v4/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/castorsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/BarrelEndcap5D/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/MuonSimData/data/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/CastorProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml'), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/Geometry/EcalCommonData/data/PhaseII/eregalgo.xml b/Geometry/EcalCommonData/data/PhaseII/eregalgo.xml new file mode 100644 index 0000000000000..220180a8c003c --- /dev/null +++ b/Geometry/EcalCommonData/data/PhaseII/eregalgo.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eb.xml b/Geometry/EcalCommonData/data/eb.xml new file mode 100644 index 0000000000000..68666d5f951b8 --- /dev/null +++ b/Geometry/EcalCommonData/data/eb.xml @@ -0,0 +1,14177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ebNoAPD/ebalgo.xml b/Geometry/EcalCommonData/data/ebNoAPD/ebalgo.xml new file mode 100644 index 0000000000000..655b977f7fd94 --- /dev/null +++ b/Geometry/EcalCommonData/data/ebNoAPD/ebalgo.xml @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + [ebcon:BarZPts01], [ebcon:BarZPts02], [ebcon:BarZPts03], [ebcon:BarZPts04] + + + [ebcon:BarRMin01], [ebcon:BarRMin02], [ebcon:BarRMin03], [ebcon:BarRMin04] + + + [ebcon:BarRMax01], [ebcon:BarRMax02], [ebcon:BarRMax03], [ebcon:BarRMax04] + + + [ebcon:BarTranX], [ebcon:BarTranY], [ebcon:BarTranZ] + + + [ebrot:BarRotX], [ebrot:BarRotY], [ebrot:BarRotZ], [ebrot:BarRotA] + + + [ebrot:BarRot2X], [ebrot:BarRot2Y], [ebrot:BarRot2Z], [ebrot:BarRot2A] + + + [ebrot:BarRot3X], [ebrot:BarRot3Y], [ebrot:BarRot3Z], [ebrot:BarRot3A] + + + + + + + + + + + + + + 0*mm, 2686.7*mm, 3044*mm + + + 1224*mm, 1224*mm, 1439*mm + + + 1759*mm, 1759*mm, 1759*mm + + + + 15.58*mm, 0*mm, 0*mm + + + 0,0,1, 0*deg + + + + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm + + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg + + + + [ebcon:SpmHere01], [ebcon:SpmHere02], [ebcon:SpmHere03], + [ebcon:SpmHere04], [ebcon:SpmHere05], [ebcon:SpmHere06], + [ebcon:SpmHere07], [ebcon:SpmHere08], [ebcon:SpmHere09], + [ebcon:SpmHere10], [ebcon:SpmHere11], [ebcon:SpmHere12], + [ebcon:SpmHere13], [ebcon:SpmHere14], [ebcon:SpmHere15], + [ebcon:SpmHere16], [ebcon:SpmHere17], [ebcon:SpmHere18], + + [ebcon:SpmHere19], [ebcon:SpmHere20], [ebcon:SpmHere21], + [ebcon:SpmHere22], [ebcon:SpmHere23], [ebcon:SpmHere24], + [ebcon:SpmHere25], [ebcon:SpmHere26], [ebcon:SpmHere27], + [ebcon:SpmHere28], [ebcon:SpmHere29], [ebcon:SpmHere30], + [ebcon:SpmHere31], [ebcon:SpmHere32], [ebcon:SpmHere33], + [ebcon:SpmHere34], [ebcon:SpmHere35], [ebcon:SpmHere36] + + + + + + + 0*mm, 1*mm, 0*mm + + + 0*mm, 7*mm, 0*mm + + + + + + + + + + + + + + + + + + + 0.2*mm, 3*mm, 0.2*mm, 0.2*mm, 25*mm, 4*mm, 12*mm + + + materials:E_Epoxy, + materials:E_Rohacell, + materials:E_Epoxy, + materials:E_Aluminium, + materials:E_PolyGrains, + materials:E_Aluminium , + materials:E_Air + + + + + + + + 2573*mm, + 520*mm, + 351*mm, + 400*mm, + 1985*mm, + 735*mm, + 675*mm, + 595*mm, + 1438*mm, + 42.7*mm + + + 0, + 1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3, + 4, + 5,5, + 6,6,6, + 7, + 8, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9 + + + -9*deg, + -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, + -1*deg, +1*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, +9*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, + +9*deg, + +7*deg, + -5*deg, + -3*deg, +3*deg, +5*deg, + +7*deg, + -7*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, + -8*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -8*deg, -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg + + + 31*mm, + 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1861*mm, 1861*mm, + 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, + 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, + 616*mm, + 1861*mm, 1778*mm, + 1861*mm, 1861*mm, 1861*mm, + 1161*mm, + 1161*mm, + 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, + 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, + 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, + 2609*mm, 2554*mm, 1855*mm, 2400*mm, 1855*mm, 2554*mm, 1855*mm, 2606*mm, + 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, + 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, + 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, + 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm + + + + + + + + + 282*mm, 851*mm, 1428*mm, 2204*mm + + + +0.963*deg - 0.6*deg, -1.037*deg - 0.6*deg, +9.5*deg - 1.2*deg, -7.037*deg - 0.6*deg + + + + + + + + + + + + + + + + + 2520*mm, 2520*mm, 2350*mm, 2350*mm, 1610*mm, + 1610*mm, 960*mm, 960*mm, 430*mm, 430*mm, 430*mm + + + 0.0*deg, +2.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, + +6.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, +6.0*deg, 2.0*deg + + + + + + + + 1930*mm, 1220*mm, 700*mm, 200*mm, 200*mm + + + -4.0*deg, -4.0*deg, -4.0*deg, -4.0*deg, +2.0*deg + + + + + + + + + + + + + + + + 23.5919*mm, 22.2198*mm, 22.3422*mm, 22.4638*mm, 22.6054*mm, + 22.6010*mm, 22.5454*mm, 22.6720*mm, 22.8219*mm, + 23.0780*mm, 23.1419*mm, 23.2896*mm, 23.4664*mm, + 23.7063*mm, 23.8736*mm, 24.0620*mm, 24.2853*mm + + + 21.8443*mm, 21.8736*mm, 21.9070*mm, 21.9394*mm, 21.9707*mm, + 21.9991*mm, 22.0248*mm, 22.0500*mm, 22.0734*mm, + 22.0961*mm, 22.1147*mm, 22.1324*mm, 22.1489*mm, + 22.1645*mm, 22.1778*mm, 22.1901*mm, 22.2018*mm + + + 25.8422*mm, 25.8131*mm, 25.7546*mm, 25.6696*mm, 25.5615*mm, + 25.4347*mm, 25.2937*mm, 25.1417*mm, 24.9823*mm, + 24.8179*mm, 24.6528*mm, 24.4891*mm, 24.3287*mm, + 24.1727*mm, 24.0228*mm, 23.8798*mm, 23.7443*mm + + + 25.4840*mm, 26.2229*mm, 26.2829*mm, 26.3143*mm, 26.3410*mm, + 26.1820*mm, 25.9533*mm, 25.9203*mm, 25.9025*mm, + 26.0011*mm, 25.8831*mm, 25.8575*mm, 25.8644*mm, + 25.9463*mm, 25.9551*mm, 25.9914*mm, 26.0706*mm + + + 25.8568*mm, 25.8637*mm, 25.8442*mm, 25.7969*mm, 25.7245*mm, + 25.6297*mm, 25.5172*mm, 25.3924*mm, 25.2576*mm, + 25.1169*mm, 24.9704*mm, 24.8240*mm, 24.6792*mm, + 24.5380*mm, 24.4001*mm, 24.2680*mm, 24.1427*mm + + + + + + + + + + + + + 430*mum, 30*mum, 10*mum, 10*mum, 10*mum, 255*mum, + 10*mum, 10*mum, 10*mum, 915*mum, + 25*mum, 10*mum, 10*mum, 1330*mum, + 10*mum, 90*mum, 10*mum, 100*mum + + + + + + + + + + + + + + + + + + + + + + + + + + 2*mm, 4*mm, 4*mm, 4*mm, 2*mm + + + 0.7*mm, 2*mm, 2*mm, 2*mm, 2*mm + + + 259*mm, 250*mm, 264*mm, 287*mm, 365*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 146*mm, 156*mm, 167*mm, 167*mm, 196*mm, 196*mm, 222*mm, 231*mm + + + 1*mm, 680*mm, 720*mm, 1310*mm, 1350*mm, 2040*mm, 2080*mm, 2854*mm + + + + + + + + + + + + + 24*mm, 42*mm, 59*mm, 76*mm + + + + + 22*mm, 33.7*mm, 42.4*mm, 48.3*mm + + + 1*mm, 1*mm, 3.2*mm, 3.2*mm + + + + + + EBCOOL1, EBCOOL2, EBCOOL3, EBCOOL4 + + + + + + + + + + + + + + + + + + + + + 1*mm, 3.25*mm, 2*mm, 1*mm, 0.1*mm + + + EVFE_1, EVFE_2, EVFE_3, EVFE_4, EVFE_5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + 1,2,4,3 + + + 50*mm, 100*mm, 54*mm, 54*mm, 77*mm, 158*mm + + + 15,6,6,6,3,1,3,3,3,6 + + + + + + + + + + + + + + + 3*mm, 4*mm, 6*mm, 2*mm, 1*mm, + 4*mm, 8*mm, 6*mm, 2*mm, 1*mm, + 5*mm, 10*mm, 6*mm, 2*mm, 1*mm, + 6*mm, 13*mm, 6*mm, 2*mm, 1*mm + + + EMAL1, EMCA1, EMG101, EMSI1, EMCU1, + EMAL2, EMCA2, EMG102, EMSI2, EMCU2, + EMAL3, EMCA3, EMG103, EMSI3, EMCU3, + EMAL4, EMCA4, EMG104, EMSI4, EMCU4 + + + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper + + + + + + 10*mm, 80*mm, 50*mm, 10*mm, 5*mm, 50*mm, 10*mm + + + EPPAL, EPPCA, EPPG10, EPPSI, EPPCU, EPPWA, EPPSS + + + materials:Aluminium, materials:E_Cables, + materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:E_Water, materials:StainlessSteel + + + + + + + + + + + + + + + + + + + + 1*mm, 2.6*mm, 2*mm, 1*mm, 0.1*mm + + + EMBL1, EMBL2, EMBL3, EMBL4, EMBL5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + + + + -8*deg, -6*deg, -4*deg, -2*deg, 0*deg, 2*deg, 4*deg, 6*deg, 8*deg + + + + + + + + 50.984535*mm, 98.778778*mm, 167.981033*mm, 213.184143*mm, 281.757080*mm, 327.713348*mm, 397.682068*mm, + 444.741180*mm, 516.680664*mm, 565.242798*mm, 646.232422*mm, 696.343262*mm, 772.983398*mm, 824.869385*mm, + 904.857849*mm, 959.290649*mm,1043.466309*mm,1100.898071*mm,1198.996460*mm,1260.129883*mm,1354.826782*mm, + 1419.607178*mm,1520.354248*mm,1589.457520*mm,1697.164795*mm,1771.165894*mm,1898.585449*mm,1978.222656*mm, + 2102.583740*mm,2188.188721*mm,2322.048828*mm,2414.281982*mm,2558.725098*mm,2658.347412*mm + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ebalgo.xml b/Geometry/EcalCommonData/data/ebalgo.xml new file mode 100644 index 0000000000000..9345c63489564 --- /dev/null +++ b/Geometry/EcalCommonData/data/ebalgo.xml @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + [ebcon:BarZPts01], [ebcon:BarZPts02], [ebcon:BarZPts03], [ebcon:BarZPts04] + + + [ebcon:BarRMin01], [ebcon:BarRMin02], [ebcon:BarRMin03], [ebcon:BarRMin04] + + + [ebcon:BarRMax01], [ebcon:BarRMax02], [ebcon:BarRMax03], [ebcon:BarRMax04] + + + [ebcon:BarTranX], [ebcon:BarTranY], [ebcon:BarTranZ] + + + [ebrot:BarRotX], [ebrot:BarRotY], [ebrot:BarRotZ], [ebrot:BarRotA] + + + [ebrot:BarRot2X], [ebrot:BarRot2Y], [ebrot:BarRot2Z], [ebrot:BarRot2A] + + + [ebrot:BarRot3X], [ebrot:BarRot3Y], [ebrot:BarRot3Z], [ebrot:BarRot3A] + + + + + + + + + + + + + + 0*mm, 2686.7*mm, 3044*mm + + + 1224*mm, 1224*mm, 1439*mm + + + 1759*mm, 1759*mm, 1759*mm + + + + 15.58*mm, 0*mm, 0*mm + + + 0,0,1, 0*deg + + + + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm + + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg + + + + [ebcon:SpmHere01], [ebcon:SpmHere02], [ebcon:SpmHere03], + [ebcon:SpmHere04], [ebcon:SpmHere05], [ebcon:SpmHere06], + [ebcon:SpmHere07], [ebcon:SpmHere08], [ebcon:SpmHere09], + [ebcon:SpmHere10], [ebcon:SpmHere11], [ebcon:SpmHere12], + [ebcon:SpmHere13], [ebcon:SpmHere14], [ebcon:SpmHere15], + [ebcon:SpmHere16], [ebcon:SpmHere17], [ebcon:SpmHere18], + + [ebcon:SpmHere19], [ebcon:SpmHere20], [ebcon:SpmHere21], + [ebcon:SpmHere22], [ebcon:SpmHere23], [ebcon:SpmHere24], + [ebcon:SpmHere25], [ebcon:SpmHere26], [ebcon:SpmHere27], + [ebcon:SpmHere28], [ebcon:SpmHere29], [ebcon:SpmHere30], + [ebcon:SpmHere31], [ebcon:SpmHere32], [ebcon:SpmHere33], + [ebcon:SpmHere34], [ebcon:SpmHere35], [ebcon:SpmHere36] + + + + + + + 0*mm, 1*mm, 0*mm + + + 0*mm, 7*mm, 0*mm + + + + + + + + + + + + + + + + + + + 0.2*mm, 3*mm, 0.2*mm, 0.2*mm, 25*mm, 4*mm, 12*mm + + + materials:E_Epoxy, + materials:E_Rohacell, + materials:E_Epoxy, + materials:E_Aluminium, + materials:E_PolyGrains, + materials:E_Aluminium , + materials:E_Air + + + + + + + + 2573*mm, + 520*mm, + 351*mm, + 400*mm, + 1985*mm, + 735*mm, + 675*mm, + 595*mm, + 1438*mm, + 42.7*mm + + + 0, + 1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3, + 4, + 5,5, + 6,6,6, + 7, + 8, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9 + + + -9*deg, + -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, + -1*deg, +1*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, +9*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, + +9*deg, + +7*deg, + -5*deg, + -3*deg, +3*deg, +5*deg, + +7*deg, + -7*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, + -8*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -8*deg, -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg + + + 31*mm, + 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1861*mm, 1861*mm, + 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, + 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, + 616*mm, + 1861*mm, 1778*mm, + 1861*mm, 1861*mm, 1861*mm, + 1161*mm, + 1161*mm, + 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, + 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, + 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, + 2609*mm, 2554*mm, 1855*mm, 2400*mm, 1855*mm, 2554*mm, 1855*mm, 2606*mm, + 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, + 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, + 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, + 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm + + + + + + + + + 282*mm, 851*mm, 1428*mm, 2204*mm + + + +0.963*deg - 0.6*deg, -1.037*deg - 0.6*deg, +9.5*deg - 1.2*deg, -7.037*deg - 0.6*deg + + + + + + + + + + + + + + + + + 2520*mm, 2520*mm, 2350*mm, 2350*mm, 1610*mm, + 1610*mm, 960*mm, 960*mm, 430*mm, 430*mm, 430*mm + + + 0.0*deg, +2.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, + +6.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, +6.0*deg, 2.0*deg + + + + + + + + 1930*mm, 1220*mm, 700*mm, 200*mm, 200*mm + + + -4.0*deg, -4.0*deg, -4.0*deg, -4.0*deg, +2.0*deg + + + + + + + + + + + + + + + + 23.5919*mm, 22.2198*mm, 22.3422*mm, 22.4638*mm, 22.6054*mm, + 22.6010*mm, 22.5454*mm, 22.6720*mm, 22.8219*mm, + 23.0780*mm, 23.1419*mm, 23.2896*mm, 23.4664*mm, + 23.7063*mm, 23.8736*mm, 24.0620*mm, 24.2853*mm + + + 21.8443*mm, 21.8736*mm, 21.9070*mm, 21.9394*mm, 21.9707*mm, + 21.9991*mm, 22.0248*mm, 22.0500*mm, 22.0734*mm, + 22.0961*mm, 22.1147*mm, 22.1324*mm, 22.1489*mm, + 22.1645*mm, 22.1778*mm, 22.1901*mm, 22.2018*mm + + + 25.8422*mm, 25.8131*mm, 25.7546*mm, 25.6696*mm, 25.5615*mm, + 25.4347*mm, 25.2937*mm, 25.1417*mm, 24.9823*mm, + 24.8179*mm, 24.6528*mm, 24.4891*mm, 24.3287*mm, + 24.1727*mm, 24.0228*mm, 23.8798*mm, 23.7443*mm + + + 25.4840*mm, 26.2229*mm, 26.2829*mm, 26.3143*mm, 26.3410*mm, + 26.1820*mm, 25.9533*mm, 25.9203*mm, 25.9025*mm, + 26.0011*mm, 25.8831*mm, 25.8575*mm, 25.8644*mm, + 25.9463*mm, 25.9551*mm, 25.9914*mm, 26.0706*mm + + + 25.8568*mm, 25.8637*mm, 25.8442*mm, 25.7969*mm, 25.7245*mm, + 25.6297*mm, 25.5172*mm, 25.3924*mm, 25.2576*mm, + 25.1169*mm, 24.9704*mm, 24.8240*mm, 24.6792*mm, + 24.5380*mm, 24.4001*mm, 24.2680*mm, 24.1427*mm + + + + + + + + + + + + + 430*mum, 30*mum, 10*mum, 10*mum, 10*mum, 255*mum, + 10*mum, 10*mum, 10*mum, 915*mum, + 25*mum, 10*mum, 10*mum, 1330*mum, + 10*mum, 90*mum, 10*mum, 100*mum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2*mm, 4*mm, 4*mm, 4*mm, 2*mm + + + 0.7*mm, 2*mm, 2*mm, 2*mm, 2*mm + + + 259*mm, 250*mm, 264*mm, 287*mm, 365*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 146*mm, 156*mm, 167*mm, 167*mm, 196*mm, 196*mm, 222*mm, 231*mm + + + 1*mm, 680*mm, 720*mm, 1310*mm, 1350*mm, 2040*mm, 2080*mm, 2854*mm + + + + + + + + + + + + + 24*mm, 42*mm, 59*mm, 76*mm + + + + + 22*mm, 33.7*mm, 42.4*mm, 48.3*mm + + + 1*mm, 1*mm, 3.2*mm, 3.2*mm + + + + + + EBCOOL1, EBCOOL2, EBCOOL3, EBCOOL4 + + + + + + + + + + + + + + + + + + + + + 1*mm, 3.25*mm, 2*mm, 1*mm, 0.1*mm + + + EVFE_1, EVFE_2, EVFE_3, EVFE_4, EVFE_5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + 1,2,4,3 + + + 50*mm, 100*mm, 54*mm, 54*mm, 77*mm, 158*mm + + + 15,6,6,6,3,1,3,3,3,6 + + + + + + + + + + + + + + + 3*mm, 4*mm, 6*mm, 2*mm, 1*mm, + 4*mm, 8*mm, 6*mm, 2*mm, 1*mm, + 5*mm, 10*mm, 6*mm, 2*mm, 1*mm, + 6*mm, 13*mm, 6*mm, 2*mm, 1*mm + + + EMAL1, EMCA1, EMG101, EMSI1, EMCU1, + EMAL2, EMCA2, EMG102, EMSI2, EMCU2, + EMAL3, EMCA3, EMG103, EMSI3, EMCU3, + EMAL4, EMCA4, EMG104, EMSI4, EMCU4 + + + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper + + + + + + 10*mm, 80*mm, 50*mm, 10*mm, 5*mm, 50*mm, 10*mm + + + EPPAL, EPPCA, EPPG10, EPPSI, EPPCU, EPPWA, EPPSS + + + materials:Aluminium, materials:E_Cables, + materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:E_Water, materials:StainlessSteel + + + + + + + + + + + + + + + + + + + + 1*mm, 2.6*mm, 2*mm, 1*mm, 0.1*mm + + + EMBL1, EMBL2, EMBL3, EMBL4, EMBL5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + + + + -8*deg, -6*deg, -4*deg, -2*deg, 0*deg, 2*deg, 4*deg, 6*deg, 8*deg + + + + + + + + 50.984535*mm, 98.778778*mm, 167.981033*mm, 213.184143*mm, 281.757080*mm, 327.713348*mm, 397.682068*mm, + 444.741180*mm, 516.680664*mm, 565.242798*mm, 646.232422*mm, 696.343262*mm, 772.983398*mm, 824.869385*mm, + 904.857849*mm, 959.290649*mm,1043.466309*mm,1100.898071*mm,1198.996460*mm,1260.129883*mm,1354.826782*mm, + 1419.607178*mm,1520.354248*mm,1589.457520*mm,1697.164795*mm,1771.165894*mm,1898.585449*mm,1978.222656*mm, + 2102.583740*mm,2188.188721*mm,2322.048828*mm,2414.281982*mm,2558.725098*mm,2658.347412*mm + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ebapd/ebalgo.xml b/Geometry/EcalCommonData/data/ebapd/ebalgo.xml new file mode 100644 index 0000000000000..3bd67f82f3662 --- /dev/null +++ b/Geometry/EcalCommonData/data/ebapd/ebalgo.xml @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + [ebcon:BarZPts01], [ebcon:BarZPts02], [ebcon:BarZPts03], [ebcon:BarZPts04] + + + [ebcon:BarRMin01], [ebcon:BarRMin02], [ebcon:BarRMin03], [ebcon:BarRMin04] + + + [ebcon:BarRMax01], [ebcon:BarRMax02], [ebcon:BarRMax03], [ebcon:BarRMax04] + + + [ebcon:BarTranX], [ebcon:BarTranY], [ebcon:BarTranZ] + + + [ebrot:BarRotX], [ebrot:BarRotY], [ebrot:BarRotZ], [ebrot:BarRotA] + + + [ebrot:BarRot2X], [ebrot:BarRot2Y], [ebrot:BarRot2Z], [ebrot:BarRot2A] + + + [ebrot:BarRot3X], [ebrot:BarRot3Y], [ebrot:BarRot3Z], [ebrot:BarRot3A] + + + + + + + + + + + + + + 0*mm, 2686.7*mm, 3044*mm + + + 1224*mm, 1224*mm, 1439*mm + + + 1759*mm, 1759*mm, 1759*mm + + + + 15.58*mm, 0*mm, 0*mm + + + 0,0,1, 0*deg + + + + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm + + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, + 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg, 0,0,1,0*deg + + + + [ebcon:SpmHere01], [ebcon:SpmHere02], [ebcon:SpmHere03], + [ebcon:SpmHere04], [ebcon:SpmHere05], [ebcon:SpmHere06], + [ebcon:SpmHere07], [ebcon:SpmHere08], [ebcon:SpmHere09], + [ebcon:SpmHere10], [ebcon:SpmHere11], [ebcon:SpmHere12], + [ebcon:SpmHere13], [ebcon:SpmHere14], [ebcon:SpmHere15], + [ebcon:SpmHere16], [ebcon:SpmHere17], [ebcon:SpmHere18], + + [ebcon:SpmHere19], [ebcon:SpmHere20], [ebcon:SpmHere21], + [ebcon:SpmHere22], [ebcon:SpmHere23], [ebcon:SpmHere24], + [ebcon:SpmHere25], [ebcon:SpmHere26], [ebcon:SpmHere27], + [ebcon:SpmHere28], [ebcon:SpmHere29], [ebcon:SpmHere30], + [ebcon:SpmHere31], [ebcon:SpmHere32], [ebcon:SpmHere33], + [ebcon:SpmHere34], [ebcon:SpmHere35], [ebcon:SpmHere36] + + + + + + + 0*mm, 1*mm, 0*mm + + + 0*mm, 7*mm, 0*mm + + + + + + + + + + + + + + + + + + + 0.2*mm, 3*mm, 0.2*mm, 0.2*mm, 25*mm, 4*mm, 12*mm + + + materials:E_Epoxy, + materials:E_Rohacell, + materials:E_Epoxy, + materials:E_Aluminium, + materials:E_PolyGrains, + materials:E_Aluminium , + materials:E_Air + + + + + + + + 2573*mm, + 520*mm, + 351*mm, + 400*mm, + 1985*mm, + 735*mm, + 675*mm, + 595*mm, + 1438*mm, + 42.7*mm + + + 0, + 1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3, + 4, + 5,5, + 6,6,6, + 7, + 8, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9, + 9,9,9,9,9,9 + + + -9*deg, + -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, + -1*deg, +1*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, +9*deg, + -7*deg, -5*deg, -3*deg, -1*deg, +1*deg, +3*deg, +5*deg, +7*deg, + +9*deg, + +7*deg, + -5*deg, + -3*deg, +3*deg, +5*deg, + +7*deg, + -7*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, + -8*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -8*deg, -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -6*deg, -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg, +8*deg, + -4*deg, -2*deg, +0*deg, +2*deg, +4*deg, +6*deg + + + 31*mm, + 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1161*mm, 1861*mm, 1861*mm, + 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, 148*mm, + 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, 616*mm, + 616*mm, + 1861*mm, 1778*mm, + 1861*mm, 1861*mm, 1861*mm, + 1161*mm, + 1161*mm, + 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, 505*mm, 142*mm, + 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, 1027*mm, 610*mm, + 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, 1687*mm, 1155*mm, + 2609*mm, 2554*mm, 1855*mm, 2400*mm, 1855*mm, 2554*mm, 1855*mm, 2606*mm, + 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, 25*mm, + 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, 51*mm, + 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, 571*mm, + 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm, 1773*mm + + + + + + + + + 282*mm, 851*mm, 1428*mm, 2204*mm + + + +0.963*deg - 0.6*deg, -1.037*deg - 0.6*deg, +9.5*deg - 1.2*deg, -7.037*deg - 0.6*deg + + + + + + + + + + + + + + + + + 2520*mm, 2520*mm, 2350*mm, 2350*mm, 1610*mm, + 1610*mm, 960*mm, 960*mm, 430*mm, 430*mm, 430*mm + + + 0.0*deg, +2.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, + +6.0*deg, -4.0*deg, +6.0*deg, -4.0*deg, +6.0*deg, 2.0*deg + + + + + + + + 1930*mm, 1220*mm, 700*mm, 200*mm, 200*mm + + + -4.0*deg, -4.0*deg, -4.0*deg, -4.0*deg, +2.0*deg + + + + + + + + + + + + + + + + 23.5919*mm, 22.2198*mm, 22.3422*mm, 22.4638*mm, 22.6054*mm, + 22.6010*mm, 22.5454*mm, 22.6720*mm, 22.8219*mm, + 23.0780*mm, 23.1419*mm, 23.2896*mm, 23.4664*mm, + 23.7063*mm, 23.8736*mm, 24.0620*mm, 24.2853*mm + + + 21.8443*mm, 21.8736*mm, 21.9070*mm, 21.9394*mm, 21.9707*mm, + 21.9991*mm, 22.0248*mm, 22.0500*mm, 22.0734*mm, + 22.0961*mm, 22.1147*mm, 22.1324*mm, 22.1489*mm, + 22.1645*mm, 22.1778*mm, 22.1901*mm, 22.2018*mm + + + 25.8422*mm, 25.8131*mm, 25.7546*mm, 25.6696*mm, 25.5615*mm, + 25.4347*mm, 25.2937*mm, 25.1417*mm, 24.9823*mm, + 24.8179*mm, 24.6528*mm, 24.4891*mm, 24.3287*mm, + 24.1727*mm, 24.0228*mm, 23.8798*mm, 23.7443*mm + + + 25.4840*mm, 26.2229*mm, 26.2829*mm, 26.3143*mm, 26.3410*mm, + 26.1820*mm, 25.9533*mm, 25.9203*mm, 25.9025*mm, + 26.0011*mm, 25.8831*mm, 25.8575*mm, 25.8644*mm, + 25.9463*mm, 25.9551*mm, 25.9914*mm, 26.0706*mm + + + 25.8568*mm, 25.8637*mm, 25.8442*mm, 25.7969*mm, 25.7245*mm, + 25.6297*mm, 25.5172*mm, 25.3924*mm, 25.2576*mm, + 25.1169*mm, 24.9704*mm, 24.8240*mm, 24.6792*mm, + 24.5380*mm, 24.4001*mm, 24.2680*mm, 24.1427*mm + + + + + + + + + + + + + 430*mum, 30*mum, 10*mum, 10*mum, 10*mum, 255*mum, + 10*mum, 10*mum, 10*mum, 915*mum, + 25*mum, 10*mum, 10*mum, 1330*mum, + 10*mum, 90*mum, 10*mum, 100*mum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2*mm, 4*mm, 4*mm, 4*mm, 2*mm + + + 0.7*mm, 2*mm, 2*mm, 2*mm, 2*mm + + + 259*mm, 250*mm, 264*mm, 287*mm, 365*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 146*mm, 156*mm, 167*mm, 167*mm, 196*mm, 196*mm, 222*mm, 231*mm + + + 1*mm, 680*mm, 720*mm, 1310*mm, 1350*mm, 2040*mm, 2080*mm, 2854*mm + + + + + + + + + + + + + 24*mm, 42*mm, 59*mm, 76*mm + + + + + 22*mm, 33.7*mm, 42.4*mm, 48.3*mm + + + 1*mm, 1*mm, 3.2*mm, 3.2*mm + + + + + + EBCOOL1, EBCOOL2, EBCOOL3, EBCOOL4 + + + + + + + + + + + + + + + + + + + + + 1*mm, 3.25*mm, 2*mm, 1*mm, 0.1*mm + + + EVFE_1, EVFE_2, EVFE_3, EVFE_4, EVFE_5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + 1,2,4,3 + + + 50*mm, 100*mm, 54*mm, 54*mm, 77*mm, 158*mm + + + 15,6,6,6,3,1,3,3,3,6 + + + + + + + + + + + + + + + 3*mm, 4*mm, 6*mm, 2*mm, 1*mm, + 4*mm, 8*mm, 6*mm, 2*mm, 1*mm, + 5*mm, 10*mm, 6*mm, 2*mm, 1*mm, + 6*mm, 13*mm, 6*mm, 2*mm, 1*mm + + + EMAL1, EMCA1, EMG101, EMSI1, EMCU1, + EMAL2, EMCA2, EMG102, EMSI2, EMCU2, + EMAL3, EMCA3, EMG103, EMSI3, EMCU3, + EMAL4, EMCA4, EMG104, EMSI4, EMCU4 + + + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:Aluminium, materials:E_Cables, materials:E_G10, materials:E_Silicon, materials:E_Copper + + + + + + 10*mm, 80*mm, 50*mm, 10*mm, 5*mm, 50*mm, 10*mm + + + EPPAL, EPPCA, EPPG10, EPPSI, EPPCU, EPPWA, EPPSS + + + materials:Aluminium, materials:E_Cables, + materials:E_G10, materials:E_Silicon, materials:E_Copper, + materials:E_Water, materials:StainlessSteel + + + + + + + + + + + + + + + + + + + + 1*mm, 2.6*mm, 2*mm, 1*mm, 0.1*mm + + + EMBL1, EMBL2, EMBL3, EMBL4, EMBL5 + + + materials:E_Air, + materials:Aluminium, + materials:E_G10, + materials:E_Silicon, + materials:E_Copper + + + + + + -8*deg, -6*deg, -4*deg, -2*deg, 0*deg, 2*deg, 4*deg, 6*deg, 8*deg + + + + + + + + 50.984535*mm, 98.778778*mm, 167.981033*mm, 213.184143*mm, 281.757080*mm, 327.713348*mm, 397.682068*mm, + 444.741180*mm, 516.680664*mm, 565.242798*mm, 646.232422*mm, 696.343262*mm, 772.983398*mm, 824.869385*mm, + 904.857849*mm, 959.290649*mm,1043.466309*mm,1100.898071*mm,1198.996460*mm,1260.129883*mm,1354.826782*mm, + 1419.607178*mm,1520.354248*mm,1589.457520*mm,1697.164795*mm,1771.165894*mm,1898.585449*mm,1978.222656*mm, + 2102.583740*mm,2188.188721*mm,2322.048828*mm,2414.281982*mm,2558.725098*mm,2658.347412*mm + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ebcon.xml b/Geometry/EcalCommonData/data/ebcon.xml new file mode 100644 index 0000000000000..bea9c02e7fb65 --- /dev/null +++ b/Geometry/EcalCommonData/data/ebcon.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ebrot.xml b/Geometry/EcalCommonData/data/ebrot.xml new file mode 100644 index 0000000000000..3bcfde11ace64 --- /dev/null +++ b/Geometry/EcalCommonData/data/ebrot.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ecal.xml b/Geometry/EcalCommonData/data/ecal.xml new file mode 100644 index 0000000000000..6e3e4c54b0218 --- /dev/null +++ b/Geometry/EcalCommonData/data/ecal.xml @@ -0,0 +1,48670 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ecal_MTCC.xml b/Geometry/EcalCommonData/data/ecal_MTCC.xml new file mode 100644 index 0000000000000..96c35c2e494fe --- /dev/null +++ b/Geometry/EcalCommonData/data/ecal_MTCC.xml @@ -0,0 +1,48118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ee.xml b/Geometry/EcalCommonData/data/ee.xml new file mode 100644 index 0000000000000..88307b6b1b1b3 --- /dev/null +++ b/Geometry/EcalCommonData/data/ee.xml @@ -0,0 +1,7716 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eeB.xml b/Geometry/EcalCommonData/data/eeB.xml new file mode 100644 index 0000000000000..f8c91716e0d07 --- /dev/null +++ b/Geometry/EcalCommonData/data/eeB.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eeF.xml b/Geometry/EcalCommonData/data/eeF.xml new file mode 100644 index 0000000000000..ec245f0dddce3 --- /dev/null +++ b/Geometry/EcalCommonData/data/eeF.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eealgo.xml b/Geometry/EcalCommonData/data/eealgo.xml new file mode 100644 index 0000000000000..23f0f69616031 --- /dev/null +++ b/Geometry/EcalCommonData/data/eealgo.xml @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5,5,5,5,5, 2,2,2,2,2, 5,5,0,0,0, + -4,-4,-4,-4,-4, 0,0,-1,-2,-3, 0,5,5,5,5 + + + + + + 3,10, 2,10, 1,10, 1,9, 1,9, 1,9, 1,8, 1,7, 1,6, 1,3 + + + + + 1,3,4, 2,2,5, 3,1,6, 3,10,2, 6,9,2, 7,8,2, 8,7,3, 9,6,3, 10,3,3 + + + + + + + + + + [eehier:EESCLimsXlo], [eehier:EESCLimsXhi], [eehier:EESCLimsYlo], [eehier:EESCLimsYhi] + + + + + + + + + + 1, 3, 73.99*mm, 79.436*mm, 367.857*mm, 395.056*mm, 3183.583*mm, 3529.157*mm, + 1, 4, 73.99*mm, 79.436*mm, 515.672*mm, 553.7125*mm,3185.869*mm, 3530.4185*mm, + 1, 5, 73.99*mm, 79.436*mm, 664.0725*mm, 712.916*mm, 3188.148*mm, 3531.3325*mm, + 1, 6, 73.99*mm, 79.436*mm, 813.2075*mm, 872.807*mm, 3190.418*mm, 3531.899*mm, + 1, 7, 73.99*mm, 79.436*mm, 963.232*mm, 1033.5285*mm,3192.677*mm, 3532.1175*mm, + 1, 8, 73.99*mm, 79.436*mm, 1114.304*mm, 1195.228*mm, 3194.9225*mm,3531.9865*mm, + 1, 9, 73.99*mm, 79.436*mm, 1266.587*mm, 1358.058*mm, 3197.152*mm, 3531.5085*mm, + 1, 10, 73.99*mm, 79.436*mm, 1420.249*mm, 1522.178*mm, 3199.3635*mm,3530.682*mm, + 2, 2, 221.1655*mm, 238.0385*mm, 220.479*mm, 236.8095*mm,3183.701*mm, 3529.59025*mm, + 2, 3, 221.24125*mm, 238.092*mm, 367.857*mm, 395.056*mm, 3185.99*mm, 3531.196*mm, + 2, 4, 221.31675*mm, 238.133*mm, 515.672*mm, 553.7125*mm,3188.2745*mm, 3532.4565*mm, + 2, 5, 221.392*mm, 238.163*mm, 664.0725*mm, 712.916*mm, 3190.5525*mm, 3533.37*mm, + 2, 6, 221.467*mm, 238.1825*mm, 813.2075*mm, 872.807*mm, 3192.8215*mm, 3533.93625*mm, + 2, 7, 221.5415*mm, 238.1895*mm, 963.232*mm, 1033.5285*mm,3195.079*mm, 3534.1545*mm, + 2, 8, 221.6155*mm, 238.185*mm, 1114.304*mm, 1195.228*mm, 3197.323*mm, 3534.024*mm, + 2, 9, 221.689*mm, 238.1695*mm,1266.587*mm, 1358.058*mm, 3199.5515*mm, 3533.54575*mm, + 2, 10, 221.76225*mm, 238.142*mm, 1420.249*mm, 1522.178*mm, 3201.762*mm, 3532.72*mm, + 3, 1, 368.51*mm, 396.814*mm, 73.39*mm, 78.836*mm, 3183.816*mm, 3529.3015*mm, + 3, 2, 368.6615*mm, 396.943*mm, 220.479*mm, 236.8095*mm,3186.10375*mm, 3531.248*mm, + 3, 3, 368.8125*mm, 397.049*mm, 367.857*mm, 395.056*mm, 3188.389*mm, 3532.851*mm, + 3, 4, 368.9635*mm, 397.132*mm, 515.672*mm, 553.7125*mm,3190.67*mm, 3534.109*mm, + 3, 5, 369.11375*mm, 397.1925*mm, 664.0725*mm, 712.916*mm, 3192.94425*mm, 3535.02125*mm, + 3, 6, 369.2635*mm, 397.22975*mm,813.2075*mm, 872.807*mm, 3195.2095*mm, 3535.587*mm, + 3, 7, 369.4125*mm, 397.24425*mm,963.232*mm, 1033.5285*mm,3197.46325*mm, 3535.80425*mm, + 3, 8, 369.5605*mm, 397.2355*mm,1114.304*mm, 1195.228*mm, 3199.7035*mm, 3535.6745*mm, + 3, 9, 369.708*mm, 397.204*mm, 1266.587*mm, 1358.058*mm, 3201.9285*mm, 3535.19675*mm, + 3, 10, 369.85375*mm, 397.1495*mm,1420.249*mm, 1522.178*mm, 3204.1355*mm, 3534.372*mm, + 4, 1, 516.413*mm, 556.1055*mm, 73.39*mm, 78.836*mm, 3186.2175*mm, 3530.58*mm, + 4, 2, 516.6395*mm, 556.2985*mm, 220.479*mm, 236.8095*mm,3188.499*mm, 3532.52125*mm, + 4, 3, 516.866*mm, 556.4575*mm, 367.857*mm, 395.056*mm, 3190.778*mm, 3534.12*mm, + 4, 4, 517.09225*mm, 556.582*mm, 515.672*mm, 553.7125*mm,3193.053*mm, 3535.375*mm, + 4, 5, 517.3175*mm, 556.6725*mm, 664.0725*mm, 712.916*mm, 3195.321*mm, 3536.2845*mm, + 4, 6, 517.542*mm, 556.7285*mm, 813.2075*mm, 872.807*mm, 3197.58*mm, 3536.8485*mm, + 4, 7, 517.76525*mm, 556.75025*mm,963.232*mm, 1033.5285*mm,3199.8275*mm, 3537.0655*mm, + 4, 8, 517.98725*mm, 556.737*mm, 1114.304*mm, 1195.228*mm, 3202.062*mm, 3536.93625*mm, + 4, 9, 518.20775*mm, 556.69*mm, 1266.587*mm, 1358.058*mm, 3204.2805*mm, 3536.46*mm, + 5, 1, 664.9525*mm, 715.8825*mm, 73.39*mm, 78.836*mm, 3188.5885*mm, 3531.4695*mm, + 5, 2, 665.2535*mm, 716.138*mm, 220.479*mm, 236.8095*mm,3190.86125*mm, 3533.403*mm, + 5, 3, 665.5545*mm, 716.3495*mm, 367.857*mm, 395.056*mm, 3193.13175*mm, 3534.99575*mm, + 5, 4, 665.855*mm, 716.515*mm, 515.672*mm, 553.7125*mm,3195.39775*mm, 3536.246*mm, + 5, 5, 666.154*mm, 716.635*mm, 664.0725*mm, 712.916*mm, 3197.65725*mm, 3537.152*mm, + 5, 6, 666.4525*mm, 716.7095*mm, 813.2075*mm, 872.807*mm, 3199.9075*mm, 3537.71375*mm, + 5, 7, 666.749*mm, 716.738*mm, 963.232*mm, 1033.5285*mm,3202.14675*mm, 3537.93025*mm, + 5, 8, 667.044*mm, 716.721*mm, 1114.304*mm, 1195.228*mm, 3204.37275*mm, 3537.80075*mm, + 5, 9, 667.337*mm, 716.658*mm, 1266.587*mm, 1358.058*mm, 3206.583*mm, 3537.3265*mm, + 6, 1, 814.2945*mm, 876.4065*mm, 73.39*mm, 78.836*mm, 3190.9485*mm, 3531.9815*mm, + 6, 2, 814.66975*mm, 876.72575*mm,220.479*mm, 236.8095*mm,3193.21025*mm, 3533.9055*mm, + 6, 3, 815.04475*mm, 876.98875*mm,367.857*mm, 395.056*mm, 3195.46975*mm, 3535.4905*mm, + 6, 4, 815.419*mm, 877.1955*mm, 515.672*mm, 553.7125*mm,3197.725*mm, 3536.7345*mm, + 6, 5, 815.792*mm, 877.34475*mm,664.0725*mm, 712.916*mm, 3199.97325*mm, 3537.6365*mm, + 6, 6, 816.1635*mm, 877.4375*mm, 813.2075*mm, 872.807*mm, 3202.21275*mm, 3538.19525*mm, + 6, 7, 816.5335*mm, 877.473*mm, 963.232*mm, 1033.5285*mm,3204.441*mm, 3538.4105*mm, + 6, 8, 816.901*mm, 877.452*mm, 1114.304*mm, 1195.228*mm, 3206.656*mm, 3538.28225*mm, + 6, 9, 817.266*mm, 877.3735*mm,1266.587*mm, 1358.058*mm, 3208.8555*mm, 3537.81025*mm, + 7, 1, 964.607*mm, 1037.835*mm, 73.39*mm, 78.836*mm, 3193.2965*mm, 3532.116*mm, + 7, 2, 965.056*mm, 1038.2165*mm, 220.479*mm, 236.8095*mm,3195.54475*mm, 3534.029*mm, + 7, 3, 965.5045*mm, 1038.5315*mm, 367.857*mm, 395.056*mm, 3197.79075*mm, 3535.6045*mm, + 7, 4, 965.95225*mm,1038.7785*mm, 515.672*mm, 553.7125*mm,3200.03225*mm, 3536.84125*mm, + 7, 5, 966.39875*mm,1038.9575*mm, 664.0725*mm, 712.916*mm, 3202.26725*mm, 3537.7375*mm, + 7, 6, 966.84325*mm,1039.0685*mm, 813.2075*mm, 872.807*mm, 3204.4935*mm, 3538.293*mm, + 7, 7, 967.28575*mm,1039.111*mm, 963.232*mm, 1033.5285*mm,3206.7085*mm, 3538.507*mm, + 7, 8, 967.7255*mm, 1039.0855*mm,1114.304*mm, 1195.228*mm, 3208.9105*mm, 3538.379*mm, + 8, 1,1116.0475*mm, 1200.2185*mm, 73.39*mm, 78.836*mm, 3195.609*mm, 3531.877*mm, + 8, 2,1116.56925*mm,1200.663*mm, 220.479*mm, 236.8095*mm,3197.8415*mm, 3533.7765*mm, + 8, 3,1117.09025*mm,1201.02825*mm,367.857*mm, 395.056*mm, 3200.07175*mm, 3535.341*mm, + 8, 4,1117.6105*mm, 1201.315*mm, 515.672*mm, 553.7125*mm,3202.29775*mm, 3536.569*mm, + 8, 5,1118.129*mm, 1201.5235*mm, 664.0725*mm, 712.916*mm, 3204.517*mm, 3537.459*mm, + 8, 6,1118.6455*mm, 1201.6525*mm, 813.2075*mm, 872.807*mm, 3206.7275*mm, 3538.0105*mm, + 8, 7,1119.15975*mm,1201.702*mm, 963.232*mm, 1033.5285*mm,3208.927*mm, 3538.223*mm, + 9, 1,1268.7805*mm, 1363.726*mm, 73.39*mm, 78.836*mm, 3197.8865*mm, 3531.273*mm, + 9, 2,1269.37375*mm,1364.23075*mm,220.479*mm, 236.8095*mm,3200.101*mm, 3533.157*mm, + 9, 3,1269.9665*mm, 1364.6465*mm, 367.857*mm, 395.056*mm, 3202.3135*mm, 3534.70925*mm, + 9, 4,1270.558*mm, 1364.973*mm, 515.672*mm, 553.7125*mm,3204.5215*mm, 3535.927*mm, + 9, 5,1271.14775*mm,1365.2095*mm, 664.0725*mm, 712.916*mm, 3206.723*mm, 3536.81025*mm, + 9, 6,1271.73525*mm,1365.356*mm, 813.2075*mm, 872.807*mm, 3208.916*mm, 3537.3575*mm, + 10, 1,1422.9755*mm, 1528.5285*mm, 73.39*mm, 78.836*mm, 3200.1305*mm, 3530.312*mm, + 10, 2,1423.6395*mm, 1529.093*mm, 220.479*mm, 236.8095*mm,3202.325*mm, 3532.179*mm, + 10, 3,1424.3025*mm, 1529.558*mm, 367.857*mm, 395.056*mm, 3204.51725*mm, 3533.717*mm + + + + + + + + + + + 1, 1, -59.27878125*mm, -59.96993625*mm, -59.96718*mm, -59.276025*mm, 110.333615*mm,-109.666385*mm, + 1, 2, -59.27878125*mm, -59.96993625*mm, -30.84865*mm, -28.77521*mm, 110.24371*mm,-109.74761*mm, + 1, 3, -59.27878125*mm, -59.96993625*mm, -1.727815*mm, 1.727815*mm, 110.15381*mm,-109.820135*mm, + 1, 4, -59.27878125*mm, -59.96993625*mm, 27.39645*mm, 32.234145*mm, 110.063915*mm,-109.883985*mm, + 1, 5, -59.27878125*mm, -59.96993625*mm, 56.525305*mm, 62.744865*mm, 109.974035*mm,-109.93912*mm, + 2, 1, -28.77730625*mm, -30.85140125*mm, -59.96718*mm, -59.276025*mm, 110.24367*mm,-109.747645*mm, + 2, 2, -28.77679375*mm, -30.85083625*mm, -30.84865*mm, -28.77521*mm, 110.153765*mm,-109.82887*mm, + 2, 3, -28.77633625*mm, -30.85027125*mm, -1.727815*mm, 1.727815*mm, 110.0638675*mm,-109.9013925*mm, + 2, 4, -28.77593875*mm, -30.84970375*mm, 27.39645*mm, 32.234145*mm, 109.973975*mm,-109.965235*mm, + 2, 5, -28.77558875*mm, -30.84913625*mm, 56.525305*mm, 62.744865*mm, 109.884095*mm,-110.0203725*mm, + 3, 1, 1.72637375*mm, -1.73056625*mm, -59.96718*mm, -59.276025*mm, 110.153725*mm,-109.8202*mm, + 3, 2, 1.72739875*mm, -1.72943625*mm, -30.84865*mm, -28.77521*mm, 110.0638275*mm,-109.901415*mm, + 3, 3, 1.72830875*mm, -1.72830875*mm, -1.727815*mm, 1.727815*mm, 109.973935*mm,-109.973935*mm, + 3, 4, 1.72911125*mm, -1.72717375*mm, 27.39645*mm, 32.234145*mm, 109.884045*mm,-110.0377825*mm, + 3, 5, 1.72980375*mm, -1.72604625*mm, 56.525305*mm, 62.744865*mm, 109.79417*mm,-110.0929125*mm, + 4, 1, 32.23335875*mm, 27.39369875*mm, -59.96718*mm, -59.276025*mm, 110.06379*mm,-109.884055*mm, + 4 ,2, 32.23489125*mm, 27.39539625*mm, -30.84865*mm, -28.77521*mm, 109.9739*mm,-109.965265*mm, + 4, 3, 32.23625875*mm, 27.39709125*mm, -1.727815*mm, 1.727815*mm, 109.884015*mm,-110.037785*mm, + 4, 4, 32.23746375*mm, 27.39878625*mm, 27.39645*mm, 32.234145*mm, 109.7941375*mm,-110.1016175*mm, + 4, 5, 32.23850375*mm, 27.40048125*mm, 56.525305*mm, 62.744865*mm, 109.70427*mm,-110.15675*mm, + 5, 1, 62.74475375*mm, 56.52256875*mm, -59.96718*mm, -59.276025*mm, 109.97386*mm,-109.93922*mm, + 5, 2, 62.74679875*mm, 56.52483125*mm, -30.84865*mm, -28.77521*mm, 109.883985*mm,-110.02042*mm, + 5, 3, 62.74861875*mm, 56.52709125*mm, -1.727815*mm, 1.727815*mm, 109.7941125*mm,-110.0929225*mm, + 5, 4, 62.75022625*mm, 56.52935125*mm, 27.39645*mm, 32.234145*mm, 109.7042475*mm,-110.1567525*mm, + 5, 5, 62.75161125*mm, 56.53161125*mm, 56.525305*mm, 62.744865*mm, 109.6143925*mm,-110.2118725*mm + + + + + diff --git a/Geometry/EcalCommonData/data/eecon.xml b/Geometry/EcalCommonData/data/eecon.xml new file mode 100644 index 0000000000000..c06058c9982ac --- /dev/null +++ b/Geometry/EcalCommonData/data/eecon.xml @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eefixed.xml b/Geometry/EcalCommonData/data/eefixed.xml new file mode 100644 index 0000000000000..4660ab84115e3 --- /dev/null +++ b/Geometry/EcalCommonData/data/eefixed.xml @@ -0,0 +1,1263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eehier.xml b/Geometry/EcalCommonData/data/eehier.xml new file mode 100644 index 0000000000000..49b3da8d9c2d0 --- /dev/null +++ b/Geometry/EcalCommonData/data/eehier.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/ereg.xml b/Geometry/EcalCommonData/data/ereg.xml new file mode 100644 index 0000000000000..a422ae4e00909 --- /dev/null +++ b/Geometry/EcalCommonData/data/ereg.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/eregalgo.xml b/Geometry/EcalCommonData/data/eregalgo.xml new file mode 100644 index 0000000000000..2e627c3d039b7 --- /dev/null +++ b/Geometry/EcalCommonData/data/eregalgo.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/es.xml b/Geometry/EcalCommonData/data/es.xml new file mode 100644 index 0000000000000..295fa533d871b --- /dev/null +++ b/Geometry/EcalCommonData/data/es.xml @@ -0,0 +1,26624 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalCommonData/data/esalgo.xml b/Geometry/EcalCommonData/data/esalgo.xml new file mode 100644 index 0000000000000..a82f4f2276831 --- /dev/null +++ b/Geometry/EcalCommonData/data/esalgo.xml @@ -0,0 +1,492 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5,7,10,11,13,13,14,15,16,17,17,17,18,19,19,19,19,19,19,19 + + + 1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,6,6,8,8,8 + + + + 0a,0b,0c + + + + 1a,1b,1c,1d,1e,3a,2a,3b,2b + + + + 0,1,2,0,1,2,1,2,1,2,1,2 + + + + 1,1,1,1,1,1,1,1,1,1, + 0,1,1,1,1,1,1,1,1,1, + 1,0,1,1,1,1,1,1,1,1 + + + + 1,1,1,1,1,1,1,1, + 0,1,1,1,1,1,1,1, + 1,0,1,1,1,1,1,1, + 0,1,0,1,1,1,1,1, + 1,0,1,0,1,1,1,1, + 1,1,1,1,1,1,1,0, + 1,1,1,1,1,1,0,1, + 1,1,1,1,1,0,1,0, + 1,1,1,1,0,1,0,1 + + + + 3,3,3,4,4,4,4,3,3,2 + + + + 1,1,1,2,3,3,5,7,9,13 + + + + 0a,0a,0a,0a,0a,3a,1a,3a,3a,3b + + + + 1a,0a,0a,1a,0a,0a,1a,0a,1a,1a + + + + 1a,1b,0b,1a,1a,0a,1a,0a,1a,100 + + + + 100,100,100,1d,1a,1a,1a,100,100,100 + + + + 309.74*mm,420.47*mm,450.48*mm,619.76*mm,675.23*mm, + 819.22*mm,876.14*mm,933.08*mm,1017.51*mm, + 1048.12*mm,1076.96*mm,1135.27*mm,1192.5*mm + + + + 1217.84*mm,1161.44*mm,1100.59*mm,1072.5*mm,1016.6*mm, + 960.4*mm,841.38*mm,787.44*mm,727.02*mm, + 672.45*mm,645.6*mm,479.57*mm,363.18*mm + + + + 342.35*mm,486.00*mm,657.13*mm,716.21*mm,772.89*mm, + 829.73*mm,918.68*mm,976.16*mm,1004.33*mm,1033.93*mm, + 1092.47*mm,1153.14*mm,1209.72*mm + + + + 1206.56*mm,1118.91*mm,1060.04*mm,1005.29*mm,942.46*mm, + 886.66*mm,826.54*mm,800.52*mm,686.6*mm,680.97*mm, + 626.47*mm,428.09*mm,312.02*mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [escon:P1], [escon:P2], [escon:P3], [escon:P4], [escon:P5], + [escon:P6], [escon:P7], [escon:P8], [escon:P9], [escon:P10], + [escon:P11], [escon:P12], [escon:P13], [escon:P14], [escon:P15], + [escon:P16], [escon:P17], [escon:P18], [escon:P19], [escon:P20], + [escon:P21], [escon:P22], [escon:P23], [escon:P24], [escon:P25], + [escon:P26], [escon:P27], [escon:P28], [escon:P29] + + + materials:E_Aluminium, materials:E_Polythene, materials:E_Aluminium, materials:E_Air, materials:E_Air, + materials:E_Aluminium, materials:E_Water, materials:E_Aluminium, materials:E_Aluminium, materials:E_Lead, + materials:E_Aluminium, materials:E_Aluminium, materials:E_Air, materials:E_Aluminium, materials:E_Air, + materials:E_Aluminium, materials:E_Water, materials:E_Aluminium, materials:E_Aluminium, materials:E_Lead, + materials:E_Aluminium, materials:E_Aluminium, materials:E_Air, materials:E_Aluminium, materials:E_Air, + materials:E_Air, materials:E_Aluminium, materials:E_Polythene, materials:E_Aluminium + + + SFModer1Al1, SFModer1, SFModer1Al2, SFFoam1, SFModerAir1, + SFCool1Al1, SFCool1Wtr, SFCool1Al2, SFAbs1Al1, SFAbs1Pb, + SFAbs1Al2, SFMMAlSupp1, SFMMAir1, SFMMAlEle1, SFAirGap1, + SFCool2Al1, SFCool2Wtr, SFCool2Al2, SFAbs2Al1, SFAbs2Pb, + SFAbs2Al2, SFMMAlSupp2, SFMMAir2, SFMMAlEle2, SFAirGap2, + SFFoam2, SFModer2Al1, SFModer2, SFModer2Al2 + + + SFLX, SFLY, tmp_name_5a, tmp_name_5b, tmp_name_5c, tmp_name_5d, tmp_name_5e, + tmp_name_a, tmp_name_b, tmp_name_c, tmp_name_d, tmp_name_e + + + + [escon:Front_window_Al], + [escon:R_MAX_Layers], + [escon:Window_backend_Al], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:R_MAX_Layers], + [escon:Window_backend_Al], + [escon:R_MAX_Layers], + [escon:Rear_window_Al] + + + + [escon:R_MIN], + [escon:R_MIN_Layers], + [escon:R_MIN], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN_Layers], + [escon:R_MIN], + [escon:R_MIN_Layers], + [escon:R_MIN] + + + diff --git a/Geometry/EcalCommonData/data/escon.xml b/Geometry/EcalCommonData/data/escon.xml new file mode 100644 index 0000000000000..04caa81db6d6c --- /dev/null +++ b/Geometry/EcalCommonData/data/escon.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/EcalSimData/data/PhaseII/ecalsens.xml b/Geometry/EcalSimData/data/PhaseII/ecalsens.xml new file mode 100644 index 0000000000000..e8edd52d46bf9 --- /dev/null +++ b/Geometry/EcalSimData/data/PhaseII/ecalsens.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcal.xml b/Geometry/HGCalCommonData/data/hgcal.xml new file mode 100644 index 0000000000000..a1c7dc4397c48 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcal.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/PhaseII/hcalalgo.xml b/Geometry/HcalCommonData/data/PhaseII/hcalalgo.xml new file mode 100644 index 0000000000000..aebc56c7217f1 --- /dev/null +++ b/Geometry/HcalCommonData/data/PhaseII/hcalalgo.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HcalCommonData/data/PhaseII/hcalendcapalgo.xml b/Geometry/HcalCommonData/data/PhaseII/hcalendcapalgo.xml new file mode 100644 index 0000000000000..6bb7c527267b0 --- /dev/null +++ b/Geometry/HcalCommonData/data/PhaseII/hcalendcapalgo.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Part0, Part1, Part2, Part3, Part4, Part5 + + materials:Air, materials:Air, materials:H_Brass, + materials:H_Brass, materials:H_Brass, materials:H_Brass + + 0, 0, 1, 1, 1, 1 + + + 2, 2, 2, 3, 2, 4 + + + 43.5*mm, 43.5*mm, 17.0*mm, 9.0*mm, 9.0*mm, 9.0*mm + + + 0.5*mm, 0.5*mm, 0.5*mm, 0.5*mm, 0.5*mm, 0.5*mm + + + 1.5*mm, 1.5*mm, 0.5*mm, 0.5*mm, 0.5*mm, 0.5*mm + + + 1, 1, 1, 1, 1, 1 + + + 1, 1, 1, 5, 6, 6 + + + 0, 0 + + + 0, 1 + + + 1 + + + 2, 3, 4, 5, 6 + + + 7, 8, 9, 10, 11, 12 + + + 13, 14, 15, 16, 17, 18 + + + + + Phi0, Phi1 + + + Layer00, Layer01, Layer02, Layer03, Layer04, Layer05, + Layer06, Layer07, Layer08, Layer09, Layer10, Layer11, + Layer12, Layer13, Layer14, Layer15, Layer16, Layer17, + Layer18 + + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + + + 12.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, + 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, + 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm, 7.0*mm + + + 9.0*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, + 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, + 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm, 3.7*mm + + + + + + diff --git a/Geometry/HcalCommonData/data/PhaseII/hcalsenspmf.xml b/Geometry/HcalCommonData/data/PhaseII/hcalsenspmf.xml new file mode 100644 index 0000000000000..97f16716e8f85 --- /dev/null +++ b/Geometry/HcalCommonData/data/PhaseII/hcalsenspmf.xml @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/PFCalGeometry/data/pfcal.xml b/Geometry/PFCalGeometry/data/pfcal.xml new file mode 100644 index 0000000000000..9bcabb41f1c6a --- /dev/null +++ b/Geometry/PFCalGeometry/data/pfcal.xml @@ -0,0 +1,8746 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/PFCalGeometry/python/GeometryExtended2019PFCal_cff.py b/Geometry/PFCalGeometry/python/GeometryExtended2019PFCal_cff.py new file mode 100644 index 0000000000000..424a8e0d5eea4 --- /dev/null +++ b/Geometry/PFCalGeometry/python/GeometryExtended2019PFCal_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +from Geometry.CMSCommonData.cmsExtendedGeometry2019PFCalXML_cfi import * diff --git a/Geometry/PFCalGeometry/python/GeometryExtended2023HGCal_cff.py b/Geometry/PFCalGeometry/python/GeometryExtended2023HGCal_cff.py new file mode 100644 index 0000000000000..fdc921dd701dd --- /dev/null +++ b/Geometry/PFCalGeometry/python/GeometryExtended2023HGCal_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +from Geometry.CMSCommonData.cmsExtendedGeometry2023HGCalXML_cfi import * diff --git a/Geometry/PFCalGeometry/python/GeometrySLHCPFCalOnly_cff.py b/Geometry/PFCalGeometry/python/GeometrySLHCPFCalOnly_cff.py new file mode 100644 index 0000000000000..04adf8ce377ef --- /dev/null +++ b/Geometry/PFCalGeometry/python/GeometrySLHCPFCalOnly_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +from Geometry.PFCalGeometry.cmsSLHCGeometryPFCalOnlyXML_cfi import * diff --git a/Geometry/PFCalGeometry/python/cmsSLHCGeometryPFCalOnlyXML_cfi.py b/Geometry/PFCalGeometry/python/cmsSLHCGeometryPFCalOnlyXML_cfi.py new file mode 100644 index 0000000000000..e5787034c70a4 --- /dev/null +++ b/Geometry/PFCalGeometry/python/cmsSLHCGeometryPFCalOnlyXML_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/cmsextent.xml', + 'Geometry/CMSCommonData/data/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/PFCalGeometry/data/pfcal.xml' + ), + rootNodeName = cms.string('cms:OCMS') + ) diff --git a/Geometry/PFCalGeometry/test/dumpExtended2019PFCalGeometry_cfg.py b/Geometry/PFCalGeometry/test/dumpExtended2019PFCalGeometry_cfg.py new file mode 100644 index 0000000000000..e6369385fb051 --- /dev/null +++ b/Geometry/PFCalGeometry/test/dumpExtended2019PFCalGeometry_cfg.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("GEODUMP") +process.load("Geometry.PFCalGeometry.GeometryExtended2019PFCal_cff") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger = cms.Service("MessageLogger", + debugModules = cms.untracked.vstring('*'), + destinations = cms.untracked.vstring('cout'), + cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), + noLineBreaks = cms.untracked.bool(True) + ) + ) + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) + )) + +process.dump = cms.EDAnalyzer("DumpSimGeometry") + +process.p = cms.Path(process.dump) diff --git a/Geometry/PFCalGeometry/test/dumpExtended2023HGCalGeometry_cfg.py b/Geometry/PFCalGeometry/test/dumpExtended2023HGCalGeometry_cfg.py new file mode 100644 index 0000000000000..d1ce42d8ae186 --- /dev/null +++ b/Geometry/PFCalGeometry/test/dumpExtended2023HGCalGeometry_cfg.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("GEODUMP") +process.load("Configuration.Geometry.GeometryExtended2023_cff") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger = cms.Service("MessageLogger", + debugModules = cms.untracked.vstring('*'), + destinations = cms.untracked.vstring('cout'), + cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), + noLineBreaks = cms.untracked.bool(True) + ) + ) + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) + )) + +process.dump = cms.EDAnalyzer("DumpSimGeometry") + +process.p = cms.Path(process.dump) diff --git a/Geometry/PFCalGeometry/test/dumpPFCalGeometry_cfg.py b/Geometry/PFCalGeometry/test/dumpPFCalGeometry_cfg.py new file mode 100644 index 0000000000000..48e7c5b210a08 --- /dev/null +++ b/Geometry/PFCalGeometry/test/dumpPFCalGeometry_cfg.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("GEODUMP") +process.load("Geometry.PFCalGeometry.GeometrySLHCPFCalOnly_cff") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger = cms.Service("MessageLogger", + debugModules = cms.untracked.vstring('*'), + destinations = cms.untracked.vstring('cout'), + cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'), + noLineBreaks = cms.untracked.bool(True) + ) + ) + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +process.add_(cms.ESProducer("TGeoMgrFromDdd", + verbose = cms.untracked.bool(False), + level = cms.untracked.int32(14) + )) + +process.dump = cms.EDAnalyzer("DumpSimGeometry") + +process.p = cms.Path(process.dump) diff --git a/Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixfwd.xml b/Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixfwd.xml index fbd81c8d83f4e..9bd9becaea9e3 100644 --- a/Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixfwd.xml +++ b/Geometry/TrackerCommonData/data/PhaseII/BarrelEndcap5D/pixfwd.xml @@ -30,8 +30,8 @@ - - + + input for the pat jet collection (edm::InputTag). - - - corrLevel --> string for the pat jet correction level. -*/ - -class PatJetAnalyzer : public edm::EDAnalyzer { - -public: - /// default contructor - explicit PatJetAnalyzer(const edm::ParameterSet& cfg); - /// default destructor - ~PatJetAnalyzer(){}; - -private: - /// everything that needs to be done during the even loop - virtual void analyze(const edm::Event& event, const edm::EventSetup& setup); - - /// check if histogram was booked - bool booked(const std::string histName) const { return hists_.find(histName.c_str())!=hists_.end(); }; - /// fill histogram if it had been booked before - void fill(const std::string histName, double value) const { if(booked(histName.c_str())) hists_.find(histName.c_str())->second->Fill(value); }; - // print jet pt for each level of energy corrections - void print(edm::View::const_iterator& jet, unsigned int idx); - -private: - /// correction level for pat jet - std::string corrLevel_; - /// pat jets - edm::InputTag jets_; - /// management of 1d histograms - std::map hists_; -}; - - -PatJetAnalyzer::PatJetAnalyzer(const edm::ParameterSet& cfg): - corrLevel_(cfg.getParameter("corrLevel")), - jets_(cfg.getParameter("src")) -{ - // register TFileService - edm::Service fs; - - // jet multiplicity - hists_["mult" ]=fs->make("mult" , "N_{Jet}" , 15, 0., 15.); - // jet pt (for all jets) - hists_["pt" ]=fs->make("pt" , "p_{T}(Jet) [GeV]" , 60, 0., 300.); - // jet eta (for all jets) - hists_["eta" ]=fs->make("eta" , "#eta (Jet)" , 60, -3., 3.); - // jet phi (for all jets) - hists_["phi" ]=fs->make("phi" , "#phi (Jet)" , 60, 3.2, 3.2); - // dijet mass (if available) - hists_["mass" ]=fs->make("mass" , "M_{jj} [GeV]" , 50, 0., 500.); - // basic histograms for jet energy response - for(unsigned int idx=0; idxmake(buffer, title, 100, 0., 2.); - } -} - -void -PatJetAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) -{ - // recieve jet collection label - edm::Handle > jets; - event.getByLabel(jets_,jets); - - // loop jets - for(edm::View::const_iterator jet=jets->begin(); jet!=jets->end(); ++jet){ - // print jec factors - // print(jet, jet-jets->begin()); - - // fill basic kinematics - fill( "pt" , jet->correctedJet(corrLevel_).pt()); - fill( "eta", jet->eta()); - fill( "phi", jet->phi()); - // basic plots for jet responds plot as a function of pt - if( jet->genJet() ){ - double resp=jet->correctedJet(corrLevel_).pt()/jet->genJet()->pt(); - for(unsigned int idx=0; idxgenJet()->pt() && jet->genJet()->pt()size()); - // invariant dijet mass for first two leading jets - if(jets->size()>1){ fill( "mass", ((*jets)[0].p4()+(*jets)[1].p4()).mass());} -} - -void -PatJetAnalyzer::print(edm::View::const_iterator& jet, unsigned int idx) -{ - //edm::LogInfo log("JEC"); - std::cout << "[" << idx << "] :: eta=" << std::setw(10) << jet->eta() << " phi=" << std::setw(10) << jet->phi() << " size: " << jet->availableJECLevels().size() << std::endl; - for(unsigned int idx=0; idxavailableJECLevels().size(); ++idx){ - pat::Jet correctedJet; - if(jet->availableJECLevels()[idx].find("L5Flavor")!=std::string::npos|| - jet->availableJECLevels()[idx].find("L7Parton")!=std::string::npos ){ - correctedJet=jet->correctedJet(idx, pat::JetCorrFactors::UDS); - } - else{ - correctedJet=jet->correctedJet(idx, pat::JetCorrFactors::NONE ); - } - std::cout << std::setw(10) << correctedJet.currentJECLevel() << " pt=" << std::setw(10) << correctedJet.pt() << std::endl; - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(PatJetAnalyzer); diff --git a/PhysicsTools/PatExamples/plugins/PatMCMatching.cc b/PhysicsTools/PatExamples/plugins/PatMCMatching.cc deleted file mode 100644 index 39f48b40058d7..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatMCMatching.cc +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "Math/VectorUtil.h" - - -class PatMCMatching : public edm::EDAnalyzer { - -public: - /// default constructor - explicit PatMCMatching(const edm::ParameterSet&); - /// default destructor - ~PatMCMatching(); - -private: - - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - // simple map to contain all histograms; - // histograms are booked in the beginJob() - // method - std::map histContainer_; - - // input tags - edm::InputTag muonSrc_; -}; - - -#include "DataFormats/PatCandidates/interface/Muon.h" - - -PatMCMatching::PatMCMatching(const edm::ParameterSet& iConfig): - histContainer_(), - muonSrc_(iConfig.getUntrackedParameter("muonSrc")) -{ -} - -PatMCMatching::~PatMCMatching() -{ -} - -void -PatMCMatching::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - - // get muon collection - edm::Handle > muons; - iEvent.getByLabel(muonSrc_,muons); - - for(edm::View::const_iterator muon=muons->begin(); muon!=muons->end(); ++muon){ - - for(unsigned int i = 0 ; i < muon->genParticleRefs().size() ; ++i ){ - - switch( muon->genParticle(i)->status() ){ - case 1: - histContainer_["DR_status1Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , muon->genParticle(i)->p4() ) ); - break; - case 3: - histContainer_["DR_status3Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , muon->genParticle(i)->p4() ) ); - break; - default: - histContainer_["DR_defaultMatch"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , muon->genParticle(i)->p4() ) ); - break; - } - } - } - -} - -void -PatMCMatching::beginJob() -{ - // register to the TFileService - edm::Service fs; - - // book histograms: - histContainer_["DR_defaultMatch" ]=fs->make("DR_defaultMatch", "DR_defaultMatch", 100, 0., 0.02); - histContainer_["DR_status1Match" ]=fs->make("DR_status1Match", "DR_status1Match", 100, 0., 0.02); - histContainer_["DR_status3Match" ]=fs->make("DR_status3Match", "DR_status3Match", 100, 0., 0.02); - -} - -void -PatMCMatching::endJob() -{ -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(PatMCMatching); diff --git a/PhysicsTools/PatExamples/plugins/PatMCMatchingExtended.cc b/PhysicsTools/PatExamples/plugins/PatMCMatchingExtended.cc deleted file mode 100644 index 8380c9647b026..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatMCMatchingExtended.cc +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "Math/VectorUtil.h" - - -class PatMCMatchingExtended : public edm::EDAnalyzer { - -public: - /// default constructor - explicit PatMCMatchingExtended(const edm::ParameterSet&); - /// default destructor - ~PatMCMatchingExtended(); - -private: - - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - // simple map to contain all histograms; - // histograms are booked in the beginJob() - // method - std::map histContainer_; - - // input tags - edm::InputTag muonSrc_; - - //counts how often a genParticle with different charge gives a match - unsigned int diffCharge; - - //how many muons have no match - unsigned int noMatch; - - //how many muons have no status 1 or 3 match, but decay in flight - unsigned int decayInFlight; - - //count the number of muons in all events - unsigned int numberMuons; - -}; - - -#include "DataFormats/PatCandidates/interface/Muon.h" - - -PatMCMatchingExtended::PatMCMatchingExtended(const edm::ParameterSet& iConfig): - histContainer_(), - muonSrc_(iConfig.getUntrackedParameter("muonSrc")) -{ -} - -PatMCMatchingExtended::~PatMCMatchingExtended() -{ -} - -void -PatMCMatchingExtended::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - - // get muon collection - edm::Handle > muons; - iEvent.getByLabel(muonSrc_,muons); - - for(edm::View::const_iterator muon=muons->begin(); muon!=muons->end(); ++muon){ - if(muon->genParticleById(0,1).isNonnull() ){ - histContainer_["DR_status1Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,1) )->p4() ) ); - histContainer_["DPt_status1Match"]->Fill(muon->pt() - (muon->genParticleById(0,1) )->pt() ); - } - if(muon->genParticleById(0,3).isNonnull() ){ - histContainer_["DR_status3Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,3) )->p4() ) ); - histContainer_["DPt_status3Match"]->Fill(muon->pt() - (muon->genParticleById(0,3) )->pt() ); - } - if(muon->genParticleById(0,-1).isNonnull() ){ - histContainer_["DR_defaultMatch"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,-1) )->p4() ) ); - histContainer_["DPt_defaultMatch"]->Fill(muon->pt() - (muon->genParticleById(0,-1) )->pt() ); - } - if(muon->genParticleById(0,1).isNull() && muon->genParticleById(0,3).isNull() && muon->genParticleById(0,-1).isNull()) noMatch++; - if(muon->genParticleById(0,1).isNull() && muon->genParticleById(0,3).isNull() && muon->genParticleById(0,-1).isNonnull())decayInFlight++; - - - - if( muon->genParticleById(-13,0, 1).isNonnull() ){ - diffCharge++; - std::cout<<" DIFF CHARGE!!! charge gen: "<< muon->genParticleById(-13,0, true)->charge()<< " charge reco: "<< muon->charge()< fs; - - // book histograms: - //DR - histContainer_["DR_defaultMatch" ]=fs->make("DR_defaultMatch", "DR_defaultMatch", 100, 0, 0.02); - histContainer_["DR_status1Match" ]=fs->make("DR_status1Match", "DR_status1Match", 100, 0, 0.02); - histContainer_["DR_status3Match" ]=fs->make("DR_status3Match", "DR_status3Match", 100, 0, 0.02); - //DPT - histContainer_["DPt_defaultMatch" ]=fs->make("DPt_defaultMatch", "DPt_defaultMatch", 10, 0, 1.2); - histContainer_["DPt_status1Match" ]=fs->make("DPt_status1Match", "DPt_status1Match", 10, 0, 1.2); - histContainer_["DPt_status3Match" ]=fs->make("DPt_status3Match", "DPt_status3Match", 10, 0, 1.2); - //some counters - diffCharge=0; - noMatch=0; - decayInFlight=0; - numberMuons=0; - -} - -void -PatMCMatchingExtended::endJob() -{ - std::cout<<"diffcharge: "<< diffCharge < - -const reco::GenParticle* getGenTau(const pat::Tau& patTau) -{ - std::vector associatedGenParticles = patTau.genParticleRefs(); - for ( std::vector::const_iterator it = associatedGenParticles.begin(); - it != associatedGenParticles.end(); ++it ) { - if ( it->isAvailable() ) { - const reco::GenParticleRef& genParticle = (*it); - if ( genParticle->pdgId() == -15 || genParticle->pdgId() == +15 ) return genParticle.get(); - } - } - - return 0; -} - -PatTauAnalyzer::PatTauAnalyzer(const edm::ParameterSet& cfg) -{ - //std::cout << ":" << std::endl; - -//--- read name of pat::Tau collection - src_ = cfg.getParameter("src"); - //std::cout << " src = " << src_ << std::endl; - -//--- fill histograms for all tau-jet candidates or for "real" taus only ? - requireGenTauMatch_ = cfg.getParameter("requireGenTauMatch"); - //std::cout << " requireGenTauMatch = " << requireGenTauMatch_ << std::endl; - -//--- read names of tau id. discriminators - discrByLeadTrack_ = cfg.getParameter("discrByLeadTrack"); - //std::cout << " discrByLeadTrack = " << discrByLeadTrack_ << std::endl; - - discrByIso_ = cfg.getParameter("discrByIso"); - //std::cout << " discrByIso = " << discrByIso_ << std::endl; - - discrByTaNC_ = cfg.getParameter("discrByTaNC"); - //std::cout << " discrByTaNC = " << discrByTaNC_ << std::endl; -} - -PatTauAnalyzer::~PatTauAnalyzer() -{ - //std::cout << ":" << std::endl; - -//--- clean-up memory; -// delete all histograms -/* - deletion of histograms taken care of by TFileService; - do not delete them here (if the histograms are deleted here, - they will not appear in the ROOT file written by TFileService) - - delete hGenTauEnergy_; - delete hGenTauPt_; - delete hGenTauEta_; - delete hGenTauPhi_; - delete hTauJetEnergy_; - delete hTauJetPt_; - delete hTauJetEta_; - delete hTauJetPhi_; - delete hNumTauJets_; - delete hTauLeadTrackPt_; - delete hTauNumSigConeTracks_; - delete hTauNumIsoConeTracks_; - delete hTauDiscrByIso_; - delete hTauDiscrByTaNC_; - delete hTauDiscrAgainstElectrons_; - delete hTauDiscrAgainstMuons_; - delete hTauJetEnergyIsoPassed_; - delete hTauJetPtIsoPassed_; - delete hTauJetEtaIsoPassed_; - delete hTauJetPhiIsoPassed_; - delete hTauJetEnergyTaNCpassed_; - delete hTauJetPtTaNCpassed_; - delete hTauJetEtaTaNCpassed_; - delete hTauJetPhiTaNCpassed_; - */ -} - -void PatTauAnalyzer::beginJob() -{ -//--- retrieve handle to auxiliary service -// used for storing histograms into ROOT file - edm::Service fs; - -//--- book generator level histograms - hGenTauEnergy_ = fs->make("GenTauEnergy", "GenTauEnergy", 30, 0., 150.); - hGenTauPt_ = fs->make("GenTauPt", "GenTauPt", 30, 0., 150.); - hGenTauEta_ = fs->make("GenTauEta", "GenTauEta", 24, -3., +3.); - hGenTauPhi_ = fs->make("GenTauPhi", "GenTauPhi", 18, -TMath::Pi(), +TMath::Pi()); - -//--- book reconstruction level histograms -// for tau-jet Energy, Pt, Eta, Phi - hTauJetEnergy_ = fs->make("TauJetEnergy", "TauJetEnergy", 30, 0., 150.); - hTauJetPt_ = fs->make("TauJetPt", "TauJetPt", 30, 0., 150.); -// -// TO-DO: add histograms for eta and phi of the tau-jet candidate -// -// NOTE: -// 1.) please use -// "TauJetEta" and "TauJetPhi" -// for the names of the histograms and choose the exact same binning -// as is used for the histograms -// "TauJetEtaIsoPassed" and "TauJetPhiIsoPassed" -// below -// -// 2.) please check the histograms -// hTauJetEta_ and hTauJetPt_ -// have already been defined in PatTauAnalyzer.h -// -//hTauJetEta_ =... -//hTauJetPt_ =... - -//... for number of tau-jet candidates - hNumTauJets_ = fs->make("NumTauJets", "NumTauJets", 10, -0.5, 9.5); - -//... for Pt of highest Pt track within signal cone tau-jet... - hTauLeadTrackPt_ = fs->make("TauLeadTrackPt", "TauLeadTrackPt", 40, 0., 100.); - -//... for total number of tracks within signal/isolation cones - hTauNumSigConeTracks_ = fs->make("TauNumSigConeTracks", "TauNumSigConeTracks", 10, -0.5, 9.5); - hTauNumIsoConeTracks_ = fs->make("TauNumIsoConeTracks", "TauNumIsoConeTracks", 20, -0.5, 19.5); - -//... for values of tau id. discriminators based on track isolation cut/ -// neural network-based tau id. - hTauDiscrByIso_ = fs->make("TauDiscrByIso", "TauDiscrByIso", 103, -0.015, 1.015); - hTauDiscrByTaNC_ = fs->make("TauDiscrByTaNC", "TauDiscrByTaNC", 103, -0.015, 1.015); - -//... for values of tau id. discriminators against (unidentified) electrons and muons - hTauDiscrAgainstElectrons_ = fs->make("TauDiscrAgainstElectrons", "TauDiscrAgainstElectrons", 103, -0.015, 1.015); - hTauDiscrAgainstMuons_ = fs->make("TauDiscrAgainstMuons", "TauDiscrAgainstMuons", 103, -0.015, 1.015); - -//... for Energy, Pt, Eta, Phi of tau-jets passing the discriminatorByIsolation selection - hTauJetEnergyIsoPassed_ = fs->make("TauJetEnergyIsoPassed", "TauJetEnergyIsoPassed", 30, 0., 150.); - hTauJetPtIsoPassed_ = fs->make("TauJetPtIsoPassed", "TauJetPtIsoPassed", 30, 0., 150.); - hTauJetEtaIsoPassed_ = fs->make("TauJetEtaIsoPassed", "TauJetEtaIsoPassed", 24, -3., +3.); - hTauJetPhiIsoPassed_ = fs->make("TauJetPhiIsoPassed", "TauJetPhiIsoPassed", 18, -TMath::Pi(), +TMath::Pi()); - -//... for Energy, Pt, Eta, Phi of tau-jets passing the discriminatorByTaNC ("Tau Neural Classifier") selection - hTauJetEnergyTaNCpassed_ = fs->make("TauJetEnergyTaNCpassed", "TauJetEnergyTaNCpassed", 30, 0., 150.); - hTauJetPtTaNCpassed_ = fs->make("TauJetPtTaNCpassed", "TauJetPtTaNCpassed", 30, 0., 150.); - hTauJetEtaTaNCpassed_ = fs->make("TauJetEtaTaNCpassed", "TauJetEtaTaNCpassed", 24, -3., +3.); - hTauJetPhiTaNCpassed_ = fs->make("TauJetPhiTaNCpassed", "TauJetPhiTaNCpassed", 18, -TMath::Pi(), +TMath::Pi()); -} - -void PatTauAnalyzer::analyze(const edm::Event& evt, const edm::EventSetup& es) -{ - //std::cout << ":" << std::endl; - - edm::Handle patTaus; - evt.getByLabel(src_, patTaus); - - hNumTauJets_->Fill(patTaus->size()); - - for ( pat::TauCollection::const_iterator patTau = patTaus->begin(); - patTau != patTaus->end(); ++patTau ) { - -//--- skip fake taus in case configuration parameters set to do so... - const reco::GenParticle* genTau = getGenTau(*patTau); - if ( requireGenTauMatch_ && !genTau ) continue; - -//--- fill generator level histograms - if ( genTau ) { - hGenTauEnergy_->Fill(genTau->energy()); - hGenTauPt_->Fill(genTau->pt()); - hGenTauEta_->Fill(genTau->eta()); - hGenTauPhi_->Fill(genTau->phi()); - } - -//--- fill reconstruction level histograms -// for Pt of highest Pt track within signal cone tau-jet... - hTauJetEnergy_->Fill(patTau->energy()); - hTauJetPt_->Fill(patTau->pt()); -// -// TO-DO: -// 1.) fill histograms -// hTauJetEta_ and hTauJetPhi_ -// with the pseudo-rapidity and azimuthal angle -// of the tau-jet candidate respectively -// hTauJetEta_->... -// hTauJetPhi_->... -// -// 2.) fill histogram -// hTauLeadTrackPt_ -// with the transverse momentum of the highest Pt ("leading") track within the tau-jet -// -// NOTE: -// 1.) please have a look at -// http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/Candidate/interface/Particle.h?revision=1.28&view=markup -// to find the methods for accessing eta and phi of the tau-jet -// -// 2.) please have a look at -// http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/PatCandidates/interface/Tau.h?revision=1.25&view=markup -// to find the method for accessing the leading track -// -// 3.) the method pat::Tau::leadTrack returns a reference (reco::TrackRef) to a reco::Track object -// this reference can be null (in case no high Pt track has been reconstructed within the tau-jet), -// so a check if the leadTrack exists is needed before dereferencing the reco::TrackRef via operator-> -// -// if ( patTau->leadTrack().isAvailable() ) hTauLeadTrackPt_->Fill(patTau->leadTrack()->pt()); - -//... for total number of tracks within signal/isolation cones - hTauNumSigConeTracks_->Fill(patTau->signalTracks().size()); - hTauNumIsoConeTracks_->Fill(patTau->isolationTracks().size()); - -//... for values of tau id. discriminators based on track isolation cut/ -// neural network-based tau id. -// (combine with requirement of at least one "leading" track of Pt > 5. GeV -// within the signal cone of the tau-jet) - float discrByIso = ( patTau->tauID(discrByLeadTrack_.data()) > 0.5 ) ? patTau->tauID(discrByIso_.data()) : 0.; - hTauDiscrByIso_->Fill(discrByIso); - float discrByTaNC = ( patTau->tauID(discrByLeadTrack_.data()) > 0.5 ) ? patTau->tauID(discrByTaNC_.data()) : 0.; - hTauDiscrByTaNC_->Fill(discrByTaNC); - -//... for values of tau id. discriminators against (unidentified) electrons and muons -// -// TO-DO: fill histogram -// hTauDiscrAgainstElectrons_ -// with the value of the discriminatorAgainstElectronsLoose -// -// NOTE: -// 1.) please have a look at -// http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/PatCandidates/interface/Tau.h?revision=1.25&view=markup -// to find the method for accessing the tau id. information -// -// 2.) please have a look at -// http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/PhysicsTools/PatAlgos/python/tools/tauTools.py?revision=1.43&view=markup -// and convince yourself that the string "againstElectronLoose" needs to be passed as argument -// of the pat::Tau::tauID method -// -// hTauDiscrAgainstElectrons_->Fill... - hTauDiscrAgainstMuons_->Fill(patTau->tauID("againstMuonLoose")); - -//... for Energy, Pt, Eta, Phi of tau-jets passing the discriminatorByIsolation selection - if ( discrByIso > 0.5 ) { - hTauJetEnergyIsoPassed_->Fill(patTau->energy()); - hTauJetPtIsoPassed_->Fill(patTau->pt()); - hTauJetEtaIsoPassed_->Fill(patTau->eta()); - hTauJetPhiIsoPassed_->Fill(patTau->phi()); - } - -//... for Energy, Pt, Eta, Phi of tau-jets passing the discriminatorByTaNC ("Tau Neural Classifier") selection - if ( discrByTaNC > 0.5 ) { - hTauJetEnergyTaNCpassed_->Fill(patTau->energy()); - hTauJetPtTaNCpassed_->Fill(patTau->pt()); - hTauJetEtaTaNCpassed_->Fill(patTau->eta()); - hTauJetPhiTaNCpassed_->Fill(patTau->phi()); - } - } -} - -void PatTauAnalyzer::endJob() -{ -//--- nothing to be done yet... -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(PatTauAnalyzer); - diff --git a/PhysicsTools/PatExamples/plugins/PatTauAnalyzer.h b/PhysicsTools/PatExamples/plugins/PatTauAnalyzer.h deleted file mode 100644 index 094566d016e90..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatTauAnalyzer.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef PhysicsTools_PatExamples_PatTauAnalyzer_h -#define PhysicsTools_PatExamples_PatTauAnalyzer_h - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include - -#include - -class PatTauAnalyzer : public edm::EDAnalyzer -{ - public: - explicit PatTauAnalyzer(const edm::ParameterSet&); - ~PatTauAnalyzer(); - -//--- methods inherited from EDAnalyzer base-class - void beginJob(); - void analyze(const edm::Event&, const edm::EventSetup&); - void endJob(); - - private: -//--- configuration parameters - edm::InputTag src_; - - bool requireGenTauMatch_; - - std::string discrByLeadTrack_; - std::string discrByIso_; - std::string discrByTaNC_; - -//--- generator level histograms - TH1* hGenTauEnergy_; - TH1* hGenTauPt_; - TH1* hGenTauEta_; - TH1* hGenTauPhi_; - -//--- reconstruction level histograms - TH1* hTauJetEnergy_; - TH1* hTauJetPt_; - TH1* hTauJetEta_; - TH1* hTauJetPhi_; - - TH1* hNumTauJets_; - - TH1* hTauLeadTrackPt_; - - TH1* hTauNumSigConeTracks_; - TH1* hTauNumIsoConeTracks_; - - TH1* hTauDiscrByIso_; - TH1* hTauDiscrByTaNC_; - TH1* hTauDiscrAgainstElectrons_; - TH1* hTauDiscrAgainstMuons_; - - TH1* hTauJetEnergyIsoPassed_; - TH1* hTauJetPtIsoPassed_; - TH1* hTauJetEtaIsoPassed_; - TH1* hTauJetPhiIsoPassed_; - - TH1* hTauJetEnergyTaNCpassed_; - TH1* hTauJetPtTaNCpassed_; - TH1* hTauJetEtaTaNCpassed_; - TH1* hTauJetPhiTaNCpassed_; -}; - -#endif - - diff --git a/PhysicsTools/PatExamples/plugins/PatTopSelectionAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatTopSelectionAnalyzer.cc deleted file mode 100644 index 7be7b8c74cf36..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatTopSelectionAnalyzer.cc +++ /dev/null @@ -1,140 +0,0 @@ -#include -#include - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -class PatTopSelectionAnalyzer : public edm::EDAnalyzer { - -public: - /// default constructor - explicit PatTopSelectionAnalyzer(const edm::ParameterSet&); - /// default destructor - ~PatTopSelectionAnalyzer(); - -private: - /// everything that needs to be done before the event loop - virtual void beginJob() ; - /// everything that needs to be done during the event loop - virtual void analyze(const edm::Event&, const edm::EventSetup&); - /// everything that needs to be done after the event loop - virtual void endJob() ; - - /// check if histogram was booked - bool booked(const std::string histName) const { return hists_.find(histName.c_str())!=hists_.end(); }; - /// fill histogram if it had been booked before - void fill(const std::string histName, double value) const { if(booked(histName.c_str())) hists_.find(histName.c_str())->second->Fill(value); }; - - // simple map to contain all histograms; - // histograms are booked in the beginJob() - // method - std::map hists_; - - // input tags - edm::InputTag elecs_; - edm::InputTag muons_; - edm::InputTag jets_; - edm::InputTag met_; -}; - -#include "DataFormats/PatCandidates/interface/Electron.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "DataFormats/PatCandidates/interface/MET.h" - -PatTopSelectionAnalyzer::PatTopSelectionAnalyzer(const edm::ParameterSet& iConfig): - hists_(), - elecs_(iConfig.getUntrackedParameter("elecs")), - muons_(iConfig.getUntrackedParameter("muons")), - jets_ (iConfig.getUntrackedParameter("jets" )), - met_ (iConfig.getUntrackedParameter("met" )) -{ -} - -PatTopSelectionAnalyzer::~PatTopSelectionAnalyzer() -{ -} - -void -PatTopSelectionAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - // get electron collection - edm::Handle > elecs; - iEvent.getByLabel(elecs_,elecs); - - // get muon collection - edm::Handle > muons; - iEvent.getByLabel(muons_,muons); - - // get jet collection - edm::Handle > jets; - iEvent.getByLabel(jets_,jets); - - // get met collection - edm::Handle > met; - iEvent.getByLabel(met_,met); - - // fill yield - fill("yield", 0.5); - - // fill quantities for leading elec and elec multiplicity - fill("elecMult", elecs->size()); - if(elecs->begin()!=elecs->end()){ - fill("elecIso", (elecs->begin()->trackIso()+elecs->begin()->caloIso())/elecs->begin()->pt()); - fill("elecPt", elecs->begin()->pt()); - } - - // fill quantities for leading muon and muon multiplicity - fill("muonMult", muons->size()); - if(muons->begin()!=muons->end()){ - fill("muonIso", (muons->begin()->trackIso()+muons->begin()->caloIso())/muons->begin()->pt()); - fill("muonPt", muons->begin()->pt()); - } - - // fill quantities for leading jets and jet multiplicity - // jet pt is corrected up to L3Absolute - fill("jetMult", jets->size()); - if( jets->size()>0 ) fill("jet0Pt", (*jets)[0].pt()); - if( jets->size()>1 ) fill("jet1Pt", (*jets)[1].pt()); - if( jets->size()>2 ) fill("jet2Pt", (*jets)[2].pt()); - if( jets->size()>3 ) fill("jet3Pt", (*jets)[3].pt()); - - // fill MET - fill("met", met->empty()?0:(*met)[0].et()); -} - -void -PatTopSelectionAnalyzer::beginJob() -{ - // register to the TFileService - edm::Service fs; - - // book histograms: - hists_["yield" ]=fs->make("yield" , "electron multiplicity", 1, 0., 1.); - hists_["elecMult"]=fs->make("elecMult", "electron multiplicity", 10, 0., 10.); - hists_["elecIso" ]=fs->make("elecIso" , "electron isolation" , 20, 0., 1.); - hists_["elecPt" ]=fs->make("elecPt" , "electron pt" , 30, 0., 150.); - hists_["muonMult"]=fs->make("muonMult", "muon multiplicity" , 10, 0., 10.); - hists_["muonIso" ]=fs->make("muonIso" , "muon isolation" , 20, 0., 1.); - hists_["muonPt" ]=fs->make("muonPt" , "muon pt" , 30, 0., 150.); - hists_["jetMult" ]=fs->make("jetMult" , "jet multiplicity" , 15, 0., 15.); - hists_["jet0Pt" ]=fs->make("jet0Pt" , "1. leading jet pt" , 50, 0., 250.); - hists_["jet1Pt" ]=fs->make("jet1Pt" , "1. leading jet pt" , 50, 0., 250.); - hists_["jet2Pt" ]=fs->make("jet2Pt" , "1. leading jet pt" , 50, 0., 200.); - hists_["jet3Pt" ]=fs->make("jet3Pt" , "1. leading jet pt" , 50, 0., 200.); - hists_["met" ]=fs->make("met" , "missing E_{T}" , 25, 0., 200.); -} - -void -PatTopSelectionAnalyzer::endJob() -{ -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(PatTopSelectionAnalyzer); diff --git a/PhysicsTools/PatExamples/plugins/PatTrackAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatTrackAnalyzer.cc deleted file mode 100644 index 64dbbcc9336d3..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatTrackAnalyzer.cc +++ /dev/null @@ -1,239 +0,0 @@ -#include -#include -#include -#include - -#include -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/Common/interface/View.h" -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/HitPattern.h" -#include "DataFormats/PatCandidates/interface/Muon.h" - -class PatTrackAnalyzer : public edm::EDAnalyzer { - public: - /// constructor and destructor - PatTrackAnalyzer(const edm::ParameterSet ¶ms); - ~PatTrackAnalyzer(); - - // virtual methods called from base class EDAnalyzer - virtual void beginJob(); - virtual void analyze(const edm::Event &event, const edm::EventSetup &es); - - private: - // configuration parameters - edm::InputTag src_; - edm::InputTag beamSpot_; - - // the list of track quality cuts to demand from the tracking - std::vector qualities_; - - // holder for the histograms, one set per quality flag - struct Plots { - TH1 *eta, *phi; - TH1 *pt, *ptErr; - TH1 *invPt, *invPtErr; - TH1 *d0, *d0Err; - TH1 *nHits; - - TProfile *pxbHitsEta, *pxeHitsEta; - TProfile *tibHitsEta, *tobHitsEta; - TProfile *tidHitsEta, *tecHitsEta; - }; - - std::vector plots_; -}; - - -PatTrackAnalyzer::PatTrackAnalyzer(const edm::ParameterSet ¶ms) : - src_(params.getParameter("src")), - beamSpot_(params.getParameter("beamSpot")), - qualities_(params.getParameter< std::vector >("qualities")) -{ -} - -PatTrackAnalyzer::~PatTrackAnalyzer() -{ -} - -void PatTrackAnalyzer::beginJob() -{ - // retrieve handle to auxiliary service - // used for storing histograms into ROOT file - edm::Service fs; - - // now book the histograms, for each category - unsigned int nQualities = qualities_.size(); - - plots_.resize(nQualities); - - for(unsigned int i = 0; i < nQualities; ++i) { - // the name of the quality flag - const char *quality = qualities_[i].c_str(); - - // the set of plots - Plots &plots = plots_[i]; - - plots.eta = fs->make(Form("eta_%s", quality), - Form("track \\eta (%s)", quality), - 100, -3, 3); - plots.phi = fs->make(Form("phi_%s", quality), - Form("track \\phi (%s)", quality), - 100, -M_PI, +M_PI); - plots.pt = fs->make(Form("pt_%s", quality), - Form("track p_{T} (%s)", quality), - 100, 0, 10); - plots.ptErr = fs->make(Form("ptErr_%s", quality), - Form("track p_{T} error (%s)", quality), - 100, 0, 1); - plots.invPt = fs->make(Form("invPt_%s", quality), - Form("track 1/p_{T} (%s)", quality), - 100, -5, 5); - plots.invPtErr = fs->make(Form("invPtErr_%s", quality), - Form("track 1/p_{T} error (%s)", quality), - 100, 0, 0.1); - plots.d0 = fs->make(Form("d0_%s", quality), - Form("track d0 (%s)", quality), - 100, 0, 0.1); - plots.d0Err = fs->make(Form("d0Err_%s", quality), - Form("track d0 error (%s)", quality), - 100, 0, 0.1); - plots.nHits = fs->make(Form("nHits_%s", quality), - Form("track number of total hits (%s)", quality), - 60, 0, 60); - - plots.pxbHitsEta = fs->make(Form("pxbHitsEta_%s", quality), - Form("#hits in Pixel Barrel (%s)", quality), - 100, 0, 3); - plots.pxeHitsEta = fs->make(Form("pxeHitsEta_%s", quality), - Form("#hits in Pixel Endcap (%s)", quality), - 100, 0, 3); - plots.tibHitsEta = fs->make(Form("tibHitsEta_%s", quality), - Form("#hits in Tracker Inner Barrel (%s)", quality), - 100, 0, 3); - plots.tobHitsEta = fs->make(Form("tobHitsEta_%s", quality), - Form("#hits in Tracker Outer Barrel (%s)", quality), - 100, 0, 3); - plots.tidHitsEta = fs->make(Form("tidHitsEta_%s", quality), - Form("#hits in Tracker Inner Disk (%s)", quality), - 100, 0, 3); - plots.tecHitsEta = fs->make(Form("tecHitsEta_%s", quality), - Form("#hits in Tracker Endcap (%s)", quality), - 100, 0, 3); - } -} - -void PatTrackAnalyzer::analyze(const edm::Event &event, const edm::EventSetup &es) -{ - // handles to kinds of data we might want to read - edm::Handle beamSpot; - edm::Handle< edm::View > tracksHandle; - edm::Handle< pat::MuonCollection > muonsHandle; - - // read the beam spot - event.getByLabel(beamSpot_, beamSpot); - - // our internal copy of track points - // (we need this in order to able to simultaneously access tracks - // directly or embedded in PAT objects, like muons, normally you - // would iterate over the handle directly) - std::vector tracks; - - event.getByLabel(src_, tracksHandle); - if (tracksHandle.isValid()) { - // framework was able to read the collection as a view of - // tracks, no copy them to our "tracks" variable - for(edm::View::const_iterator iter = tracksHandle->begin(); - iter != tracksHandle->end(); ++iter) - tracks.push_back(&*iter); - } else { - // does not exist or is not a track collection - // let's assume it is a collection of PAT muons - event.getByLabel(src_, muonsHandle); - - // and copy them over - // NOTE: We are using ->globalTrack() here - // This means we are using the global fit over both - // the inner tracker and the muon stations! - // other alternatives are: innerTrack(), outerTrack() - for(pat::MuonCollection::const_iterator iter = muonsHandle->begin(); - iter != muonsHandle->end(); ++iter) { - reco::TrackRef track = iter->globalTrack(); - // the muon might not be a "global" muon - if (track.isNonnull()) - tracks.push_back(&*track); - } - } - - // we are done filling the tracks into our "tracks" vector. - // now analyze them, once for each track quality category - - unsigned int nQualities = qualities_.size(); - for(unsigned int i = 0; i < nQualities; ++i) { - // we convert the quality flag from its name as a string - // to the enumeration value used by the tracking code - // (which is essentially an integer number) - reco::Track::TrackQuality quality = reco::Track::qualityByName(qualities_[i]); - - // our set of plots - Plots &plots = plots_[i]; - - // now loop over the tracks - for(std::vector::const_iterator iter = tracks.begin(); - iter != tracks.end(); ++iter) { - // this is our track - const reco::Track &track = **iter; - - // ignore tracks that fail the quality cut - if (!track.quality(quality)) - continue; - - // and fill all the plots - plots.eta->Fill(track.eta()); - plots.phi->Fill(track.phi()); - - plots.pt->Fill(track.pt()); - plots.ptErr->Fill(track.ptError()); - - plots.invPt->Fill(track.qoverp()); - plots.invPtErr->Fill(track.qoverpError()); - - // the transverse IP is taken with respect to - // the beam spot instead of (0, 0) - // because the beam spot in CMS is not at (0, 0) - plots.d0->Fill(track.dxy(beamSpot->position())); - plots.d0Err->Fill(track.dxyError()); - - plots.nHits->Fill(track.numberOfValidHits()); - - // the hit pattern contains information about - // which modules of the detector have been hit - const reco::HitPattern &hits = track.hitPattern(); - - double absEta = std::abs(track.eta()); - // now fill the number of hits in a layer depending on eta - plots.pxbHitsEta->Fill(absEta, hits.numberOfValidPixelBarrelHits()); - plots.pxeHitsEta->Fill(absEta, hits.numberOfValidPixelEndcapHits()); - plots.tibHitsEta->Fill(absEta, hits.numberOfValidStripTIBHits()); - plots.tobHitsEta->Fill(absEta, hits.numberOfValidStripTOBHits()); - plots.tidHitsEta->Fill(absEta, hits.numberOfValidStripTIDHits()); - plots.tecHitsEta->Fill(absEta, hits.numberOfValidStripTECHits()); - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(PatTrackAnalyzer); diff --git a/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.cc index b7647c7569594..2d7d88e5c22da 100644 --- a/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.cc +++ b/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.cc @@ -1,8 +1,64 @@ +#include +#include + +#include "TH1D.h" +#include "TH2D.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DataFormats/PatCandidates/interface/Muon.h" +#include "DataFormats/PatCandidates/interface/TriggerEvent.h" + + +class PatTriggerAnalyzer : public edm::EDAnalyzer { + + public: + /// default constructor + explicit PatTriggerAnalyzer( const edm::ParameterSet & iConfig ); + /// default destructor + ~PatTriggerAnalyzer(); + + private: + /// everythin that needs to be done before the event loop + virtual void beginJob(); + /// everythin that needs to be done during the event loop + virtual void analyze( const edm::Event & iEvent, const edm::EventSetup & iSetup ); + /// everythin that needs to be done after the event loop + virtual void endJob(); + + /// input for patTrigger + edm::InputTag trigger_; + /// input for patTriggerEvent + edm::InputTag triggerEvent_; + /// input for muons + edm::InputTag muons_; + /// input for trigger match objects + std::string muonMatch_; + /// binning for turn-on curve + unsigned nBins_; + double binWidth_; + /// minimal id for meanPt plot + unsigned minID_; + /// maximal id for meanPt plot + unsigned maxID_; + + /// histogram management + std::map< std::string, TH1D* > histos1D_; + std::map< std::string, TH2D* > histos2D_; + + /// internals for meanPt histogram calculation + std::map< unsigned, unsigned > sumN_; + std::map< unsigned, double > sumPt_; +}; + + #include "TMath.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" #include "PhysicsTools/PatUtils/interface/TriggerHelper.h" -#include "PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.h" using namespace pat; @@ -17,6 +73,9 @@ PatTriggerAnalyzer::PatTriggerAnalyzer( const edm::ParameterSet & iConfig ) : muons_( iConfig.getParameter< edm::InputTag >( "muons" ) ), // muon match objects muonMatch_( iConfig.getParameter< std::string >( "muonMatch" ) ), + // binning for turn-on curve + nBins_( iConfig.getParameter< unsigned >( "nBins" ) ), + binWidth_( iConfig.getParameter< double >( "binWidth" ) ), // minimal id for of all trigger objects minID_( iConfig.getParameter< unsigned >( "minID" ) ), // maximal id for of all trigger objects @@ -45,17 +104,21 @@ void PatTriggerAnalyzer::beginJob() histos2D_[ "phiTrigCand" ] = fileService->make< TH2D >( "phiTrigCand", "Object vs. candidate #phi", 60, -TMath::Pi(), TMath::Pi(), 60, -TMath::Pi(), TMath::Pi() ); histos2D_[ "phiTrigCand" ]->SetXTitle( "candidate #phi" ); histos2D_[ "phiTrigCand" ]->SetYTitle( "object #phi" ); - // turn-on curves - histos1D_[ "turnOn" ] = fileService->make< TH1D >( "turnOn", "p_{T} (GeV) of matched candidate", 10, 0., 50.); + // candidate counter for turn-on curve + histos1D_[ "countCand" ] = fileService->make< TH1D >( "countCand", "p_{T} (GeV) of candidate", nBins_, 20., 20. + nBins_ * binWidth_ ); + histos1D_[ "countCand" ]->SetXTitle( "candidate p_{T} (GeV)" ); + histos1D_[ "countCand" ]->SetYTitle( "# of candidates" ); + // turn-on curve + histos1D_[ "turnOn" ] = fileService->make< TH1D >( "turnOn", "p_{T} (GeV) of candidate", nBins_, 20., 20. + nBins_ * binWidth_ ); histos1D_[ "turnOn" ]->SetXTitle( "candidate p_{T} (GeV)" ); - histos1D_[ "turnOn" ]->SetYTitle( "# of objects" ); + histos1D_[ "turnOn" ]->SetYTitle( "efficiency" ); // mean pt for all trigger objects histos1D_[ "ptMean" ] = fileService->make< TH1D >( "ptMean", "Mean p_{T} (GeV) per trigger object type", maxID_ - minID_ + 1, minID_ - 0.5, maxID_ + 0.5); histos1D_[ "ptMean" ]->SetXTitle( "trigger object type" ); histos1D_[ "ptMean" ]->SetYTitle( "mean p_{T} (GeV)" ); // initialize counters for mean pt calculation - for( unsigned id = minID_; id <= maxID_; ++id ){ + for( unsigned id = minID_; id <= maxID_; ++id ) { sumN_ [ id ] = 0; sumPt_[ id ] = 0.; } @@ -94,6 +157,12 @@ void PatTriggerAnalyzer::analyze( const edm::Event & iEvent, const edm::EventSet turn-on curve */ + // loop over muon references again + for( size_t iMuon = 0; iMuon < muons->size(); ++iMuon ) { + // fill the counting histogram... + histos1D_[ "countCand" ]->Fill( muons->at( iMuon ).pt() ); + } + // get the trigger objects corresponding to the used matching (HLT muons) const TriggerObjectRefVector trigRefs( triggerEvent->objects( trigger::TriggerMuon ) ); // loop over selected trigger objects @@ -114,10 +183,10 @@ void PatTriggerAnalyzer::analyze( const edm::Event & iEvent, const edm::EventSet mean pt */ - // loop over all trigger match objects from minID to maxID; have + // loop over all trigger objects from minID to maxID; have // a look to DataFormats/HLTReco/interface/TriggerTypeDefs.h to - // know more about the available trrigger object id's - for ( unsigned id=minID_; id<=maxID_; ++id ) { + // know more about the available trrigger object IDs + for ( unsigned id = minID_; id <= maxID_; ++id ) { // vector of all objects for a given object id const TriggerObjectRefVector objRefs( triggerEvent->objects( id ) ); // buffer the number of objects @@ -131,9 +200,20 @@ void PatTriggerAnalyzer::analyze( const edm::Event & iEvent, const edm::EventSet void PatTriggerAnalyzer::endJob() { + /* + turn-on curve + */ + + // normalise bins for turn-on based with counter + histos1D_[ "turnOn" ]->Divide( histos1D_[ "countCand" ] ); + + /* + mean pt + */ + // normalize the entries for the mean pt plot for(unsigned id=minID_; id<=maxID_; ++id){ - if( sumN_[ id ]!=0 ) histos1D_[ "ptMean" ]->Fill( id, sumPt_[ id ]/sumN_[ id ] ); + if( sumN_[ id ] != 0 ) histos1D_[ "ptMean" ]->Fill( id, sumPt_[ id ] / sumN_[ id ] ); } } diff --git a/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.h b/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.h deleted file mode 100644 index 33a009f512ed3..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzer.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef PhysicsTools_PatExamples_PatTriggerAnalyzer_h -#define PhysicsTools_PatExamples_PatTriggerAnalyzer_h - -#include -#include - -#include "TH1D.h" -#include "TH2D.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" -#include "DataFormats/PatCandidates/interface/TriggerEvent.h" - - -class PatTriggerAnalyzer : public edm::EDAnalyzer { - - public: - /// default constructor - explicit PatTriggerAnalyzer( const edm::ParameterSet & iConfig ); - /// default destructor - ~PatTriggerAnalyzer(); - - private: - /// everythin that needs to be done before the event loop - virtual void beginJob(); - /// everythin that needs to be done during the event loop - virtual void analyze( const edm::Event & iEvent, const edm::EventSetup & iSetup ); - /// everythin that needs to be done after the event loop - virtual void endJob(); - - /// input for patTrigger - edm::InputTag trigger_; - /// input for patTriggerEvent - edm::InputTag triggerEvent_; - /// input for muons - edm::InputTag muons_; - /// input for trigger match objects - std::string muonMatch_; - /// minimal id for meanPt plot - unsigned minID_; - /// maximal id for meanPt plot - unsigned maxID_; - - /// histogram management - std::map< std::string, TH1D* > histos1D_; - std::map< std::string, TH2D* > histos2D_; - - /// internals for meanPt histogram calculation - std::map< unsigned, unsigned > sumN_; - std::map< unsigned, double > sumPt_; -}; - -#endif diff --git a/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzerPrescale.cc b/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzerPrescale.cc new file mode 100644 index 0000000000000..57a8580d77f77 --- /dev/null +++ b/PhysicsTools/PatExamples/plugins/PatTriggerAnalyzerPrescale.cc @@ -0,0 +1,79 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "TH1D.h" + + +class PatTriggerAnalyzerPrescale : public edm::EDAnalyzer { + + public: + /// default constructor + explicit PatTriggerAnalyzerPrescale( const edm::ParameterSet & iConfig ); + /// default destructor + ~PatTriggerAnalyzerPrescale(){}; + + private: + /// everything that needs to be done before the event loop + virtual void beginJob(); + /// everything that needs to be done during the event loop + virtual void analyze( const edm::Event & iEvent, const edm::EventSetup & iSetup ); + /// everything that needs to be done after the event loop + virtual void endJob(){}; + + /// histogram + TH1D * histo_; + + /// event counter + Int_t bin_; + + /// HLT path name configuration parameter + std::string pathName_; + +}; + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "DataFormats/PatCandidates/interface/TriggerEvent.h" + + +using namespace pat; + + +PatTriggerAnalyzerPrescale::PatTriggerAnalyzerPrescale( const edm::ParameterSet & iConfig ) +: bin_( 0 ) +, pathName_( iConfig.getParameter< std::string >( "pathName" ) ) +{ +} + +void PatTriggerAnalyzerPrescale::beginJob() +{ + edm::Service< TFileService > fileService; + + // Histogram definition for 100 events on the x-axis + histo_ = fileService->make< TH1D >( "histo_", std::string( "Prescale values of " + pathName_ ).c_str(), 100, 0., 100.); + histo_->SetXTitle( "event" ); + histo_->SetYTitle( "prescale" ); + histo_->SetMinimum( 0. ); +} + +void PatTriggerAnalyzerPrescale::analyze( const edm::Event & iEvent, const edm::EventSetup & iSetup ) +{ + // PAT trigger event + edm::Handle< TriggerEvent > triggerEvent; + iEvent.getByLabel( "patTriggerEvent", triggerEvent ); + + // Get the HLT path + const TriggerPath * path( triggerEvent->path( pathName_ ) ); + + // Fill prescale factor into histogram + ++bin_; + if ( path ) histo_->SetBinContent( bin_, path->prescale() ); +} + + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE( PatTriggerAnalyzerPrescale ); diff --git a/PhysicsTools/PatExamples/plugins/PatVertexAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatVertexAnalyzer.cc deleted file mode 100644 index 633705d04fe4c..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatVertexAnalyzer.cc +++ /dev/null @@ -1,125 +0,0 @@ -#include -#include -#include -#include - -#include -#include - -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" - -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "DataFormats/BeamSpot/interface/BeamSpot.h" -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" -#include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" - -class PatVertexAnalyzer : public edm::EDAnalyzer { - public: - /// constructor and destructor - PatVertexAnalyzer(const edm::ParameterSet ¶ms); - ~PatVertexAnalyzer(); - - // virtual methods called from base class EDAnalyzer - virtual void beginJob(); - virtual void analyze(const edm::Event &event, const edm::EventSetup &es); - - private: - // configuration parameters - edm::InputTag src_; - edm::InputTag genParticles_; - - TH1 *nVertices_, *nTracks_; - TH1 *x_, *y_, *z_; - TH1 *xErr_, *yErr_, *zErr_; - TH1 *xDelta_, *yDelta_, *zDelta_; - TH1 *xPull_, *yPull_, *zPull_; -}; - -PatVertexAnalyzer::PatVertexAnalyzer(const edm::ParameterSet ¶ms) : - src_(params.getParameter("src")), - genParticles_(params.getParameter("mc")) -{ -} - -PatVertexAnalyzer::~PatVertexAnalyzer() -{ -} - -void PatVertexAnalyzer::beginJob() -{ - // retrieve handle to auxiliary service - // used for storing histograms into ROOT file - edm::Service fs; - - nVertices_ = fs->make("nVertices", "number of reconstructed primary vertices", 50, 0, 50); - nTracks_ = fs->make("nTracks", "number of tracks at primary vertex", 100, 0, 300); - x_ = fs->make("pvX", "primary vertex x", 100, -0.1, 0.1); - y_ = fs->make("pvY", "primary vertex y", 100, -0.1, 0.1); - z_ = fs->make("pvZ", "primary vertex z", 100, -30, 30); - xErr_ = fs->make("pvErrorX", "primary vertex x error", 100, 0, 0.005); - yErr_ = fs->make("pvErrorY", "primary vertex y error", 100, 0, 0.005); - zErr_ = fs->make("pvErrorZ", "primary vertex z error", 100, 0, 0.01); - xDelta_ = fs->make("pvDeltaX", "x shift wrt simulated vertex", 100, -0.01, 0.01); - yDelta_ = fs->make("pvDeltaY", "y shift wrt simulated vertex", 100, -0.01, 0.01); - zDelta_ = fs->make("pvDeltaZ", "z shift wrt simulated vertex", 100, -0.02, 0.02); - xPull_ = fs->make("pvPullX", "primary vertex x pull", 100, -5, 5); - yPull_ = fs->make("pvPullY", "primary vertex y pull", 100, -5, 5); - zPull_ = fs->make("pvPullZ", "primary vertex z pull", 100, -5, 5); -} - -void PatVertexAnalyzer::analyze(const edm::Event &event, const edm::EventSetup &es) -{ - // handle to the primary vertex collection - edm::Handle pvHandle; - event.getByLabel(src_, pvHandle); - - // handle to the generator particles (i.e. the MC truth) - edm::Handle genParticlesHandle; - event.getByLabel(genParticles_, genParticlesHandle); - - // extract the position of the simulated vertex - math::XYZPoint simPV = (*genParticlesHandle)[2].vertex(); - - // the number of reconstructed primary vertices - nVertices_->Fill(pvHandle->size()); - - // if we have at least one, use the first (highest pt^2 sum) - if (!pvHandle->empty()) { - const reco::Vertex &pv = (*pvHandle)[0]; - - nTracks_->Fill(pv.tracksSize()); - - x_->Fill(pv.x()); - y_->Fill(pv.y()); - z_->Fill(pv.z()); - - xErr_->Fill(pv.xError()); - yErr_->Fill(pv.yError()); - zErr_->Fill(pv.zError()); - - xDelta_->Fill(pv.x() - simPV.X()); - yDelta_->Fill(pv.y() - simPV.Y()); - zDelta_->Fill(pv.z() - simPV.Z()); - - xPull_->Fill((pv.x() - simPV.X()) / pv.xError()); - yPull_->Fill((pv.y() - simPV.Y()) / pv.yError()); - zPull_->Fill((pv.z() - simPV.Z()) / pv.zError()); - - // we could access the tracks using the - // pv.tracks_begin() ... pv.tracks_end() iterators - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" - -DEFINE_FWK_MODULE(PatVertexAnalyzer); diff --git a/PhysicsTools/PatExamples/plugins/PatZToMuMuAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatZToMuMuAnalyzer.cc deleted file mode 100644 index 8aa419df20109..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatZToMuMuAnalyzer.cc +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include - -#include "TH1D.h" -#include "TH2D.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "DataFormats/PatCandidates/interface/Muon.h" - -/** - \class PatZToMuMuAnalyzer PatZToMuMuAnalyzer.cc "PhysicsTools/PatExamples/plugins/PatZToMuMuAnalyzer.h" - - \brief Module to analyze the performance of muon reconstruction on the example of Z->mumu events - - Module to analyze the performance of muon reconstruction on the example of Z->mumu events: transverse - momentum and eta of the muon candidates and the mass of the Z boson candidate are plotted from inner, - outer and global tracks. The mass is recalculated by an extra finction. The difference of the outer - track and the global track are plotted for the transverse momentum, eta and phi of the two muon candi- - dates, for global muons as far as available. The only input parameters are: - - _muons_ --> indicating the muon collection of choice. - _shift_ --> indicating the relative shift of the transverse momentum for the estimate of the effect - on the invariant mass. - - The shift is applied to all mass calculations. -*/ - - -class PatZToMuMuAnalyzer : public edm::EDAnalyzer { - - public: - /// typedef's to simplify get functions - typedef math::XYZVector Vector; - typedef math::XYZTLorentzVector LorentzVector; - - /// default constructor - explicit PatZToMuMuAnalyzer(const edm::ParameterSet& cfg); - /// default destructor - ~PatZToMuMuAnalyzer(){}; - - private: - /// everything that needs to be done during the event loop - virtual void analyze(const edm::Event& event, const edm::EventSetup& setup); - - /// calculate the mass of the Z boson from the tracker momenta by hand - double mass(const math::XYZVector& t1, const math::XYZVector& t2) const; - /// check if histogram was booked - bool booked(const std::string histName) const { return hists_.find(histName.c_str())!=hists_.end(); }; - /// fill histogram if it had been booked before - void fill(const std::string histName, double value) const { if(booked(histName.c_str())) hists_.find(histName.c_str())->second->Fill(value); }; - /// fill a predefined set of histograms from inner outer or global tracks for first and second mu candidate - void fill(std::string hists, const reco::TrackRef& t1, const reco::TrackRef& t2) const; - - /// input for muons - edm::InputTag muons_; - /// shift in transverse momentum to determine a - /// rough uncertainty on the Z mass estimation - double shift_; - /// management of 1d histograms - std::map< std::string, TH1D* > hists_; -}; - -inline double -PatZToMuMuAnalyzer::mass(const Vector& t1, const Vector& t2) const -{ - return (LorentzVector(shift_*t1.x(), shift_*t1.y(), t1.z(), sqrt((0.1057*0.1057)+t1.mag2())) + LorentzVector(shift_*t2.x(), shift_*t2.y(), t2.z(), sqrt((0.1057*0.1057)+t2.mag2()))).mass(); -} - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -PatZToMuMuAnalyzer::PatZToMuMuAnalyzer(const edm::ParameterSet& cfg): - muons_(cfg.getParameter< edm::InputTag >("muons")), - shift_(cfg.getParameter< double >("shift")) -{ - edm::Service< TFileService > fileService; - - // mass plot around Z peak from global tracks - hists_[ "globalMass"] = fileService->make< TH1D >( "globalMass" , "Mass_{Z} (global) (GeV)", 90, 30., 120.); - // eta from global tracks - hists_[ "globalEta" ] = fileService->make< TH1D >( "globalEta" , "#eta (global)" , 48, -2.4, 2.4); - // pt from global tracks - hists_[ "globalPt" ] = fileService->make< TH1D >( "globalPt" , "p_{T} (global) (GeV)" , 100, 0., 100.); - // mass plot around Z peak from inner tracks - hists_[ "innerMass" ] = fileService->make< TH1D >( "innerMass" , "Mass_{Z} (inner) (GeV)" , 90, 30., 120.); - // eta from inner tracks - hists_[ "innerEta" ] = fileService->make< TH1D >( "innerEta" , "#eta (inner)" , 48, -2.4, 2.4); - // pt from inner tracks - hists_[ "innerPt" ] = fileService->make< TH1D >( "innerPt" , "p_{T} (inner) (GeV)" , 100, 0., 100.); - // mass plot around Z peak from outer tracks - hists_[ "outerMass" ] = fileService->make< TH1D >( "outerMass" , "Mass_{Z} (outer) (GeV)" , 90, 30., 120.); - // eta from outer tracks - hists_[ "outerEta" ] = fileService->make< TH1D >( "outerEta" , "#eta (outer)" , 48, -2.4, 2.4); - // pt from outer tracks - hists_[ "outerPt" ] = fileService->make< TH1D >( "outerPt" , "p_{T} (outer) (GeV)" , 100, 0., 100.); - // delta pt between global and outer track - hists_[ "deltaPt" ] = fileService->make< TH1D >( "deltaPt" , "#Delta p_{T} (GeV)" , 100, -20., 20.); - // delta eta between global and outer track - hists_[ "deltaEta" ] = fileService->make< TH1D >( "deltaEta" , "#Delta #eta" , 100, -0.2, 0.2); - // delta phi between global and outer track - hists_[ "deltaPhi" ] = fileService->make< TH1D >( "deltaPhi" , "#Delta #phi" , 100, -0.2, 0.2); -} - -void PatZToMuMuAnalyzer::fill(std::string hists, const reco::TrackRef& t1, const reco::TrackRef& t2) const -{ - if( t1.isAvailable() ){ - // fill pt from global track for first muon - fill( std::string(hists).append("Pt") , t1->pt() ); - // fill pt from global track for second muon - fill( std::string(hists).append("Eta"), t1->eta() ); - } - if( t2.isAvailable() ){ - // fill eta from global track for first muon - fill( std::string(hists).append("Pt") , t2->pt() ); - // fill eta from global track for second muon - fill( std::string(hists).append("Eta"), t2->eta() ); - } - if( t1.isAvailable() && t2.isAvailable() ){ - // fill invariant mass of the Z boson candidate - fill( std::string(hists).append("Mass"), mass(t1->momentum(), t2->momentum())); - } -} - -void PatZToMuMuAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) -{ - // pat candidate collection - edm::Handle< edm::View > muons; - event.getByLabel(muons_, muons); - - // Fill some basic muon quantities as - // reconstructed from inner and outer - // tack - for(edm::View::const_iterator mu1=muons->begin(); mu1!=muons->end(); ++mu1){ - for(edm::View::const_iterator mu2=muons->begin(); mu2!=muons->end(); ++mu2){ - if(mu2>mu1){ // prevent double conting - if( mu1->charge()*mu2->charge()<0 ){ // check only muon pairs of unequal charge - fill(std::string("inner" ), mu1->innerTrack (), mu2->innerTrack ()); - fill(std::string("outer" ), mu1->outerTrack (), mu2->outerTrack ()); - fill(std::string("global"), mu1->globalTrack(), mu2->globalTrack()); - - if(mu1->isGlobalMuon()){ - fill("deltaPt" , mu1->outerTrack()->pt ()-mu1->globalTrack()->pt ()); - fill("deltaEta", mu1->outerTrack()->eta()-mu1->globalTrack()->eta()); - fill("deltaPhi", mu1->outerTrack()->phi()-mu1->globalTrack()->phi()); - } - if(mu2->isGlobalMuon()){ - fill("deltaPt" , mu2->outerTrack()->pt ()-mu2->globalTrack()->pt ()); - fill("deltaEta", mu2->outerTrack()->eta()-mu2->globalTrack()->eta()); - fill("deltaPhi", mu2->outerTrack()->phi()-mu2->globalTrack()->phi()); - } - } - } - } - } -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE( PatZToMuMuAnalyzer ); diff --git a/PhysicsTools/PatExamples/plugins/PatZjetsElectronAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatZjetsElectronAnalyzer.cc deleted file mode 100644 index 034da660df95f..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatZjetsElectronAnalyzer.cc +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -class PatZjetsElectronAnalyzer : public edm::EDAnalyzer { - -public: - explicit PatZjetsElectronAnalyzer(const edm::ParameterSet&); - ~PatZjetsElectronAnalyzer(); - -private: - - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - // simple map to contain all histograms; - // histograms are booked in the beginJob() - // method - std::map histContainer_; - - // input tags - edm::InputTag src_; -}; - -#include "DataFormats/PatCandidates/interface/Electron.h" - -PatZjetsElectronAnalyzer::PatZjetsElectronAnalyzer(const edm::ParameterSet& iConfig): - histContainer_(), - src_(iConfig.getUntrackedParameter("src")) -{ -} - -PatZjetsElectronAnalyzer::~PatZjetsElectronAnalyzer() -{ -} - -void -PatZjetsElectronAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - // get electron collection - edm::Handle > elecs; - iEvent.getByLabel(src_,elecs); - - // loop electrons - for(edm::View::const_iterator elec=elecs->begin(); elec!=elecs->end(); ++elec){ - // fill simple histograms - histContainer_["pt" ]->Fill( elec->pt () ); - histContainer_["eta" ]->Fill( elec->eta() ); - histContainer_["phi" ]->Fill( elec->phi() ); - histContainer_["iso" ]->Fill((elec->trackIso()+elec->caloIso())/elec->pt() ); - histContainer_["eop" ]->Fill( elec->eSeedClusterOverP() ); - histContainer_["clus"]->Fill( elec->e1x5()/elec->e5x5() ); - // fill enegry flow histogram for isolation - for(int bin=1; bin<=histContainer_["dr"]->GetNbinsX(); ++bin){ - double lowerEdge = histContainer_["dr"]->GetBinLowEdge(bin); - double upperEdge = histContainer_["dr"]->GetBinLowEdge(bin)+histContainer_["dr"]->GetBinWidth(bin); - histContainer_["dr"]->Fill(histContainer_["dr"]->GetBinCenter(bin), elec->trackIsoDeposit()->depositWithin(upperEdge) - elec->trackIsoDeposit()->depositWithin(lowerEdge)); - } - // fill electron id histograms - if( elec->electronID("eidRobustLoose") > 0.5 ) - histContainer_["eIDs" ]->Fill(0); - if( elec->electronID("eidRobustTight") > 0.5 ) - histContainer_["eIDs" ]->Fill(1); - if( elec->electronID("eidLoose" ) > 0.5 ) - histContainer_["eIDs" ]->Fill(2); - if( elec->electronID("eidTight" ) > 0.5 ) - histContainer_["eIDs" ]->Fill(3); - if( elec->electronID("eidRobustHighEnergy") > 0.5 ) - histContainer_["eIDs" ]->Fill(4); - } -} - -void -PatZjetsElectronAnalyzer::beginJob() -{ - // register to the TFileService - edm::Service fs; - - // book histograms: - histContainer_["pt" ]=fs->make("pt" , "pt" , 150, 0., 150.); - histContainer_["eta" ]=fs->make("eta" , "eta" , 50, 0., 5.); - histContainer_["phi" ]=fs->make("phi" , "phi" , 60, 3.14, 3.14); - histContainer_["iso" ]=fs->make("iso" , "iso" , 30, 0., 10.); - histContainer_["dr" ]=fs->make("dr" , "dr" , 40, 0., 1.); - histContainer_["eop" ]=fs->make("eop" , "eop" , 40, 0., 1.); - histContainer_["clus"]=fs->make("clus" , "clus" , 40, 0., 1.); - histContainer_["eIDs"]=fs->make("eIDs" , "eIDS" , 5, 0., 5.); -} - -void -PatZjetsElectronAnalyzer::endJob() -{ -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(PatZjetsElectronAnalyzer); diff --git a/PhysicsTools/PatExamples/plugins/PatZjetsJetAnalyzer.cc b/PhysicsTools/PatExamples/plugins/PatZjetsJetAnalyzer.cc deleted file mode 100644 index 325014036b68b..0000000000000 --- a/PhysicsTools/PatExamples/plugins/PatZjetsJetAnalyzer.cc +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include - -#include "TH1.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -class PatZjetsJetAnalyzer : public edm::EDAnalyzer { - -public: - explicit PatZjetsJetAnalyzer(const edm::ParameterSet&); - ~PatZjetsJetAnalyzer(); - -private: - - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - // simple map to contain all histograms; - // histograms are booked in the beginJob() - // method - std::map histContainer_; - - // input tags - edm::InputTag src_; -}; - -#include "DataFormats/PatCandidates/interface/Jet.h" - -PatZjetsJetAnalyzer::PatZjetsJetAnalyzer(const edm::ParameterSet& iConfig): - histContainer_(), - src_(iConfig.getUntrackedParameter("src")) -{ -} - -PatZjetsJetAnalyzer::~PatZjetsJetAnalyzer() -{ -} - -void -PatZjetsJetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - // get electron collection - edm::Handle > jets; - iEvent.getByLabel(src_,jets); - - // loop jets - for(edm::View::const_iterator ijet=jets->begin(); ijet!=jets->end(); ++ijet){ - // fill simple histograms - pat::Jet jet = ijet->correctedJet("had", "uds"); - histContainer_["pt" ]->Fill( jet.pt () ); - histContainer_["eta" ]->Fill( jet.eta() ); - histContainer_["phi" ]->Fill( jet.phi() ); - histContainer_["emf" ]->Fill( jet.emEnergyFraction() ); - for(unsigned int i=0; iFill( jet.getCaloConstituent(i)->eta()-jet.eta() ); - } - } -} - -void -PatZjetsJetAnalyzer::beginJob() -{ - // register to the TFileService - edm::Service fs; - - // book histograms: - histContainer_["pt" ]=fs->make("pt" , "pt" , 150, 0., 150.); - histContainer_["eta" ]=fs->make("eta" , "eta" , 50, 0., 5.); - histContainer_["phi" ]=fs->make("phi" , "phi" , 60, 3.14, 3.14); - histContainer_["emf" ]=fs->make("emf" , "emf" , 40, 0., 1.); - histContainer_["dEta"]=fs->make("dEta" , "dEta" , 40, 0., 1.); -} - -void -PatZjetsJetAnalyzer::endJob() -{ -} - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(PatZjetsJetAnalyzer); diff --git a/PhysicsTools/PatExamples/python/JetEnergyShift_cfi.py b/PhysicsTools/PatExamples/python/JetEnergyShift_cfi.py deleted file mode 100644 index 8de08caf96fd8..0000000000000 --- a/PhysicsTools/PatExamples/python/JetEnergyShift_cfi.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -scaledJets = cms.EDProducer("JetEnergyShift", - inputJets = cms.InputTag("cleanPatJets"), - inputMETs = cms.InputTag("patMETs"), - scaleFactor = cms.double(1.0), - jetPTThresholdForMET = cms.double(20.), - jetEMLimitForMET = cms.double(0.9) -) diff --git a/PhysicsTools/PatExamples/python/PatBasicAnalyzer_cfi.py b/PhysicsTools/PatExamples/python/PatBasicAnalyzer_cfi.py deleted file mode 100644 index e70697b0cc891..0000000000000 --- a/PhysicsTools/PatExamples/python/PatBasicAnalyzer_cfi.py +++ /dev/null @@ -1,10 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -analyzeBasicPat = cms.EDAnalyzer("PatBasicAnalyzer", - photonSrc = cms.untracked.InputTag("cleanPatPhotons"), - electronSrc = cms.untracked.InputTag("cleanPatElectrons"), - muonSrc = cms.untracked.InputTag("cleanPatMuons"), - tauSrc = cms.untracked.InputTag("cleanPatTaus"), - jetSrc = cms.untracked.InputTag("cleanPatJets"), - metSrc = cms.untracked.InputTag("patMETs") -) diff --git a/PhysicsTools/PatExamples/python/PatElectronAnalyzer_cfi.py b/PhysicsTools/PatExamples/python/PatElectronAnalyzer_cfi.py deleted file mode 100644 index 5a74f6c5fbcfd..0000000000000 --- a/PhysicsTools/PatExamples/python/PatElectronAnalyzer_cfi.py +++ /dev/null @@ -1,42 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## define pat electron analyzer -analyzePatElectron = cms.EDAnalyzer("PatElectronAnalyzer", - ## choose mode to run in: - ## 0 : genMatch, 1 : tagAndProbe - mode = cms.uint32(0), - - ## maximal pt for the electron to be considered - minPt = cms.double(10.), - ## maximal eta for the electron to be considered - maxEta= cms.double(1.4), - ## electronId to be used for probe the following - ## types are available: - ## * none - ## * eidRobustLoose - ## * eidRobustTight - ## * eidLoose - ## * eidTight - ## * eidRobustHighEnergy - electronID = cms.string('none'), - - ## input collection for electrons - electronSrc = cms.InputTag("selectedLayer1Electrons"), - ## input collection for generator particles - particleSrc = cms.InputTag("genParticles"), - - ## parameters for genMatch mode - genMatchMode = cms.PSet( - ## maximal allowed value of deltaR - maxDeltaR = cms.double(0.1) - ), - - ## parameters for tagAndProbe mode - tagAndProbeMode = cms.PSet( - ## maximal allowed value of deltaM - maxDeltaM = cms.double(10.), - ## maximal allowed value of isolation - ## of the tag electron - maxTagIso = cms.double(1.0) - ) -) diff --git a/PhysicsTools/PatExamples/python/PatJetAnalyzer_cfi.py b/PhysicsTools/PatExamples/python/PatJetAnalyzer_cfi.py deleted file mode 100644 index 44a3b24ddbdac..0000000000000 --- a/PhysicsTools/PatExamples/python/PatJetAnalyzer_cfi.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -analyzePatJets = cms.EDAnalyzer("PatJetAnalyzer", - src = cms.InputTag("cleanPatJets"), - corrLevel = cms.string("L3Absolute") -) diff --git a/PhysicsTools/PatExamples/python/PatTopSelectionAnalyzer_cfi.py b/PhysicsTools/PatExamples/python/PatTopSelectionAnalyzer_cfi.py deleted file mode 100644 index 84195f7454ecb..0000000000000 --- a/PhysicsTools/PatExamples/python/PatTopSelectionAnalyzer_cfi.py +++ /dev/null @@ -1,8 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -analyzePatTopSelection = cms.EDAnalyzer("PatTopSelectionAnalyzer", - elecs = cms.untracked.InputTag("selectedPatElectrons"), - muons = cms.untracked.InputTag("selectedPatMuons"), - jets = cms.untracked.InputTag("selectedPatJets"), - met = cms.untracked.InputTag("patMETs") -) diff --git a/PhysicsTools/PatExamples/python/PatZToMuMuAnalyzer_cfi.py b/PhysicsTools/PatExamples/python/PatZToMuMuAnalyzer_cfi.py deleted file mode 100644 index 7137748109851..0000000000000 --- a/PhysicsTools/PatExamples/python/PatZToMuMuAnalyzer_cfi.py +++ /dev/null @@ -1,6 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -analyzeZToMuMu = cms.EDAnalyzer("PatZToMuMuAnalyzer", - muons = cms.InputTag("cleanPatMuons"), - shift = cms.double(1.0) -) diff --git a/PhysicsTools/PatExamples/python/customizedCOC_cff.py b/PhysicsTools/PatExamples/python/customizedCOC_cff.py index 0e4084ea6aa82..80e2c6c638dbf 100644 --- a/PhysicsTools/PatExamples/python/customizedCOC_cff.py +++ b/PhysicsTools/PatExamples/python/customizedCOC_cff.py @@ -1,37 +1,5 @@ import FWCore.ParameterSet.Config as cms -cocPatElectrons = cms.EDProducer("PATElectronCleaner", - ## pat electron input source - src = cms.InputTag("isolatedPatElectrons"), - - # preselection (any string-based cut for pat::Electron) - preselection = cms.string(''), - - # overlap checking configurables - checkOverlaps = cms.PSet( - muons = cms.PSet( - src = cms.InputTag("selectedPatMuons"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), # don't preselect the muons - deltaR = cms.double(0.3), - checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(False), # overlaps don't cause the electron to be discared - ), - isolatedMuons = cms.PSet( - src = cms.InputTag("isolatedPatMuons"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), # don't preselect the muons - deltaR = cms.double(0.3), - checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(False), # overlaps don't cause the electron to be discared - ) - ), - - # finalCut (any string-based cut for pat::Electron) - finalCut = cms.string(''), -) cocPatJets = cms.EDProducer("PATJetCleaner", src = cms.InputTag("selectedPatJets"), @@ -41,15 +9,7 @@ # overlap checking configurables checkOverlaps = cms.PSet( - muons = cms.PSet( - src = cms.InputTag("selectedPatMuons"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), - deltaR = cms.double(0.5), - checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(False), # overlaps don't cause the jet to be discared - ), + isolatedMuons = cms.PSet( src = cms.InputTag("isolatedPatMuons"), algorithm = cms.string("byDeltaR"), @@ -59,15 +19,6 @@ pairCut = cms.string(""), requireNoOverlaps = cms.bool(False), # overlaps don't cause the jet to be discared ), - electrons = cms.PSet( - src = cms.InputTag("selectedPatElectrons"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), - deltaR = cms.double(0.5), - checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(False), # overlaps don't cause the jet to be discared - ), isolatedElectrons = cms.PSet( src = cms.InputTag("isolatedPatElectrons"), algorithm = cms.string("byDeltaR"), @@ -76,21 +27,12 @@ checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref pairCut = cms.string(""), requireNoOverlaps = cms.bool(False), # overlaps don't cause the jet to be discared - ), - cocElectrons = cms.PSet( - src = cms.InputTag("cocPatElectrons"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), - deltaR = cms.double(0.5), - checkRecoComponents = cms.bool(False), # don't check if they share some AOD object ref - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(False), # overlaps don't cause the jet to be discared - ), + ) ), # finalCut (any string-based cut on pat::Jet) finalCut = cms.string(''), ) customCOC = cms.Sequence( - cocPatElectrons * cocPatJets + cocPatJets ) diff --git a/PhysicsTools/PatExamples/python/customizedSelection_cff.py b/PhysicsTools/PatExamples/python/customizedSelection_cff.py index d2a13602ad67a..65a452f02cfec 100644 --- a/PhysicsTools/PatExamples/python/customizedSelection_cff.py +++ b/PhysicsTools/PatExamples/python/customizedSelection_cff.py @@ -1,10 +1,10 @@ import FWCore.ParameterSet.Config as cms from PhysicsTools.PatAlgos.selectionLayer1.electronSelector_cfi import selectedPatElectrons -isolatedPatElectrons = selectedPatElectrons.clone(src="selectedPatElectrons", cut="pt>10 & abs(eta)<2.5 & (trackIso+caloIso)/pt<0.05") +isolatedPatElectrons = selectedPatElectrons.clone(src="selectedPatElectrons", cut="pt>10 & abs(eta)<2.5 & (trackIso+caloIso)/pt<5") from PhysicsTools.PatAlgos.selectionLayer1.muonSelector_cfi import selectedPatMuons -isolatedPatMuons = selectedPatMuons.clone(src="selectedPatMuons", cut="pt>10 & abs(eta)<2.5 & (trackIso+caloIso)/pt<0.05") +isolatedPatMuons = selectedPatMuons.clone(src="selectedPatMuons", cut="pt>10 & abs(eta)<2.5 & (trackIso+caloIso)/pt<5") customSelection = cms.Sequence( isolatedPatElectrons *isolatedPatMuons diff --git a/PhysicsTools/PatExamples/python/mcMatch_cfi.py b/PhysicsTools/PatExamples/python/mcMatch_cfi.py deleted file mode 100644 index bf8e874e3e6ed..0000000000000 --- a/PhysicsTools/PatExamples/python/mcMatch_cfi.py +++ /dev/null @@ -1,25 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -myMuonMatch = cms.EDProducer("MCMatcher", # cut on deltaR, deltaPt/Pt; pick best by deltaR - src = cms.InputTag("muons"), # RECO objects to match - matched = cms.InputTag("genParticles"), # mc-truth particle collection - mcPdgId = cms.vint32(13), # one or more PDG ID (13 = muon); absolute values (see below) - checkCharge = cms.bool(True), # True = require RECO and MC objects to have the same charge - mcStatus = cms.vint32(1), # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering) - maxDeltaR = cms.double(0.5), # Minimum deltaR for the match - maxDPtRel = cms.double(0.5), # Minimum deltaPt/Pt for the match - resolveAmbiguities = cms.bool(True), # Forbid two RECO objects to match to the same GEN object - resolveByMatchQuality = cms.bool(False) # False = just match input in order; True = pick lowest deltaR pair first -) -myJetGenJetMatch = cms.EDProducer("GenJetMatcher", # cut on deltaR, deltaPt/Pt; pick best by deltaR - src = cms.InputTag("ak5CaloJets"), # RECO jets (any View is ok) - matched = cms.InputTag("ak5GenJets"), # GEN jets (must be GenJetCollection) - mcPdgId = cms.vint32(), # n/a - mcStatus = cms.vint32(), # n/a - checkCharge = cms.bool(False), # n/a - maxDeltaR = cms.double(0.4), # Minimum deltaR for the match - maxDPtRel = cms.double(3.0), # Minimum deltaPt/Pt for the match - resolveAmbiguities = cms.bool(True), # Forbid two RECO objects to match to the same GEN object - resolveByMatchQuality = cms.bool(False) # False = just match input in order; True = pick lowest deltaR pair first -) - diff --git a/PhysicsTools/PatExamples/python/patJPsiProducer_cfi.py b/PhysicsTools/PatExamples/python/patJPsiProducer_cfi.py deleted file mode 100644 index c917349439f5c..0000000000000 --- a/PhysicsTools/PatExamples/python/patJPsiProducer_cfi.py +++ /dev/null @@ -1,5 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -patJPsiCandidates = cms.EDProducer("PatJPsiProducer", - muonSrc = cms.InputTag("selectedLayer1Muons") - ) diff --git a/PhysicsTools/PatExamples/python/samplesCERN_cff.py b/PhysicsTools/PatExamples/python/samplesCERN_cff.py deleted file mode 100644 index c011131947bb1..0000000000000 --- a/PhysicsTools/PatExamples/python/samplesCERN_cff.py +++ /dev/null @@ -1,122 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles - -## THESE SAMPLES ONLY WORK FOR 41x OR OLDER -## 299,991 QCD events as defined on WorkBookPATExampleTopQuarks -#simulationQCD41X = cms.untracked.vstring( -# 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_0.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_1.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_2.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_3.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_4.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_5.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_6.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_7.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_8.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_9.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_10.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_11.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_12.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_13.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_14.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_15.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_16.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_17.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_18.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_19.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_20.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_21.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_22.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_23.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_24.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_25.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_26.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_27.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_28.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_qcd_29.root' -#) - -## THESE SAMPLES ONLY WORK FOR 41x OR OLDER -## 99,991 W+Jets events as defined on WorkBookPATExampleTopQuarks -#simulationWjets = cms.untracked.vstring( -# 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_0.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_1.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_2.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_3.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_4.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_5.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_6.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_7.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_8.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_9.root' -#) - -## THESE SAMPLES ONLY WORK FOR 41x OR OLDER -## 9,991 Z+Jets events as defined on WorkBookPATExampleTopQuarks -#simulationZjets = cms.untracked.vstring( -# 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_0.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_1.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_2.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_3.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_4.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_5.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_6.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_7.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_8.root' -# ,'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_9.root' -#) - -## THESE SAMPLES ONLY WORK FOR 41x OR OLDER -## 1000 Ttbar events as defined on WorkBookPATExampleTopQuarks -#simulationTtbar = cms.untracked.vstring( -# 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_ttbar.root' -#) - - -## 100,000 W+Jets events as defined on WorkBookPATExampleTopQuarks -simulationWjets = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_wjets_42X.root' -) - -## 10,000 Z+Jets events as defined on WorkBookPATExampleTopQuarks -simulationZjets = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_42X.root' -) - -## 1000 Ttbar events as defined on WorkBookPATExampleTopQuarks -simulationTtbar = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_ttbar_42X.root' -) - - -ttbarRECO = cms.untracked.vstring( - pickRelValInputFiles( cmsswVersion = 'CMSSW_4_2_8' - , relVal = 'RelValZTT' - , globalTag = 'START42_V12' - ) -) - -ttbarJets = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_ttbar_jets.root' -) - -zjetsRECO = cms.untracked.vstring( - pickRelValInputFiles( cmsswVersion = 'CMSSW_4_2_8' - , relVal = 'RelValZMM' - , globalTag = 'START42_V12' - ) -) - -zjetsTracks = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_tracks.root' -) - -zjetsTrigger = cms.untracked.vstring( - 'rfio:///castor/cern.ch/user/c/cmssup/patTuple_zjets_trigger.root' -) - -# CMSSW_3_8_5_patch3 prompt reconstruction of muon PD, run 149291, 22073 events AOD -dataMu = cms.untracked.vstring( - '/store/data/Run2010B/Mu/AOD/PromptReco-v2/000/149/291/FE4109CA-D0E4-DF11-96F6-001D09F2AD7F.root' -) diff --git a/PhysicsTools/PatExamples/python/samplesDESY_cff.py b/PhysicsTools/PatExamples/python/samplesDESY_cff.py deleted file mode 100644 index 85d8980191be2..0000000000000 --- a/PhysicsTools/PatExamples/python/samplesDESY_cff.py +++ /dev/null @@ -1,175 +0,0 @@ -import FWCore.ParameterSet.Config as cms - - -ttbarRECO = cms.untracked.vstring( - '/store/mc/Spring10/TTbarJets-madgraph/AODSIM/START3X_V26_S09-v1/0005/0210B899-9C46-DF11-A10F-003048C69294.root' - ,'/store/mc/Spring10/TTbarJets-madgraph/AODSIM/START3X_V26_S09-v1/0005/0C39D8AD-A846-DF11-8016-003048C692CA.root' -) - -ttbarJets = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_ttbar_jets.root' -) - -zjetsRECO = cms.untracked.vstring( - '/store/mc/Spring10/ZJets-madgraph/AODSIM/START3X_V26_S09-v1/0013/00EFC4EA-3847-DF11-A194-003048D4DF80.root' - ,'/store/mc/Spring10/ZJets-madgraph/AODSIM/START3X_V26_S09-v1/0013/0C096217-3A47-DF11-9E65-003048C692A4.root' -) - -zjetsTracks = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_zjets_tracks.root' -) - -zjetsTrigger = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_zjets_trigger.root' -) - -## 299,991 QCD events as defined on WorkBookPATExampleTopQuarks -simulationQCD = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_qcd_0.root' - ,'/store/user/rwolf/school/patTuple_qcd_1.root' - ,'/store/user/rwolf/school/patTuple_qcd_2.root' - ,'/store/user/rwolf/school/patTuple_qcd_3.root' - ,'/store/user/rwolf/school/patTuple_qcd_4.root' - ,'/store/user/rwolf/school/patTuple_qcd_5.root' - ,'/store/user/rwolf/school/patTuple_qcd_6.root' - ,'/store/user/rwolf/school/patTuple_qcd_7.root' - ,'/store/user/rwolf/school/patTuple_qcd_8.root' - ,'/store/user/rwolf/school/patTuple_qcd_9.root' - ,'/store/user/rwolf/school/patTuple_qcd_10.root' - ,'/store/user/rwolf/school/patTuple_qcd_11.root' - ,'/store/user/rwolf/school/patTuple_qcd_12.root' - ,'/store/user/rwolf/school/patTuple_qcd_13.root' - ,'/store/user/rwolf/school/patTuple_qcd_14.root' - ,'/store/user/rwolf/school/patTuple_qcd_15.root' - ,'/store/user/rwolf/school/patTuple_qcd_16.root' - ,'/store/user/rwolf/school/patTuple_qcd_17.root' - ,'/store/user/rwolf/school/patTuple_qcd_18.root' - ,'/store/user/rwolf/school/patTuple_qcd_19.root' - ,'/store/user/rwolf/school/patTuple_qcd_20.root' - ,'/store/user/rwolf/school/patTuple_qcd_21.root' - ,'/store/user/rwolf/school/patTuple_qcd_22.root' - ,'/store/user/rwolf/school/patTuple_qcd_23.root' - ,'/store/user/rwolf/school/patTuple_qcd_24.root' - ,'/store/user/rwolf/school/patTuple_qcd_25.root' - ,'/store/user/rwolf/school/patTuple_qcd_26.root' - ,'/store/user/rwolf/school/patTuple_qcd_27.root' - ,'/store/user/rwolf/school/patTuple_qcd_28.root' - ,'/store/user/rwolf/school/patTuple_qcd_29.root' -) - -## 99,991 W+Jets events as defined on WorkBookPATExampleTopQuarks -simulationWjets = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_wjets_0.root' - ,'/store/user/rwolf/school/patTuple_wjets_1.root' - ,'/store/user/rwolf/school/patTuple_wjets_2.root' - ,'/store/user/rwolf/school/patTuple_wjets_3.root' - ,'/store/user/rwolf/school/patTuple_wjets_4.root' - ,'/store/user/rwolf/school/patTuple_wjets_5.root' - ,'/store/user/rwolf/school/patTuple_wjets_6.root' - ,'/store/user/rwolf/school/patTuple_wjets_7.root' - ,'/store/user/rwolf/school/patTuple_wjets_8.root' - ,'/store/user/rwolf/school/patTuple_wjets_9.root' -) - -## 9,991 Z+Jets events as defined on WorkBookPATExampleTopQuarks -simulationZjets = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_zjets_0.root' - ,'/store/user/rwolf/school/patTuple_zjets_1.root' - ,'/store/user/rwolf/school/patTuple_zjets_2.root' - ,'/store/user/rwolf/school/patTuple_zjets_3.root' - ,'/store/user/rwolf/school/patTuple_zjets_4.root' - ,'/store/user/rwolf/school/patTuple_zjets_5.root' - ,'/store/user/rwolf/school/patTuple_zjets_6.root' - ,'/store/user/rwolf/school/patTuple_zjets_7.root' - ,'/store/user/rwolf/school/patTuple_zjets_8.root' - ,'/store/user/rwolf/school/patTuple_zjets_9.root' -) - -## 1000 Ttbar events as defined on WorkBookPATExampleTopQuarks -simulationTtbar = cms.untracked.vstring( - '/store/user/rwolf/school/patTuple_ttbar.root' -) - -## ~14000000 events of the muon skim corresponding to 2/pb as -## defined on WorkBookPATExampleTopQuarks -muonSKIM = cms.untracked.vstring( - '/store/user/rwolf/test/patTuple_10_1.root' - ,'/store/user/rwolf/test/patTuple_11_1.root' - ,'/store/user/rwolf/test/patTuple_12_2.root' - ,'/store/user/rwolf/test/patTuple_13_1.root' - ,'/store/user/rwolf/test/patTuple_14_2.root' - ,'/store/user/rwolf/test/patTuple_15_1.root' - ,'/store/user/rwolf/test/patTuple_16_2.root' - ,'/store/user/rwolf/test/patTuple_17_1.root' - ,'/store/user/rwolf/test/patTuple_17_2.root' - ,'/store/user/rwolf/test/patTuple_18_2.root' - ,'/store/user/rwolf/test/patTuple_19_2.root' - ,'/store/user/rwolf/test/patTuple_1_1.root' - ,'/store/user/rwolf/test/patTuple_1_2.root' - ,'/store/user/rwolf/test/patTuple_20_1.root' - ,'/store/user/rwolf/test/patTuple_21_1.root' - ,'/store/user/rwolf/test/patTuple_24_2.root' - ,'/store/user/rwolf/test/patTuple_25_1.root' - ,'/store/user/rwolf/test/patTuple_26_1.root' - ,'/store/user/rwolf/test/patTuple_27_1.root' - ,'/store/user/rwolf/test/patTuple_28_2.root' - ,'/store/user/rwolf/test/patTuple_29_1.root' - ,'/store/user/rwolf/test/patTuple_30_2.root' - ,'/store/user/rwolf/test/patTuple_31_1.root' - ,'/store/user/rwolf/test/patTuple_32_1.root' - ,'/store/user/rwolf/test/patTuple_34_2.root' - ,'/store/user/rwolf/test/patTuple_35_2.root' - ,'/store/user/rwolf/test/patTuple_36_2.root' - ,'/store/user/rwolf/test/patTuple_37_2.root' - ,'/store/user/rwolf/test/patTuple_39_2.root' - ,'/store/user/rwolf/test/patTuple_40_2.root' - ,'/store/user/rwolf/test/patTuple_41_2.root' - ,'/store/user/rwolf/test/patTuple_42_2.root' - ,'/store/user/rwolf/test/patTuple_44_2.root' - ,'/store/user/rwolf/test/patTuple_45_1.root' - ,'/store/user/rwolf/test/patTuple_46_1.root' - ,'/store/user/rwolf/test/patTuple_47_1.root' - ,'/store/user/rwolf/test/patTuple_48_1.root' - ,'/store/user/rwolf/test/patTuple_49_2.root' - ,'/store/user/rwolf/test/patTuple_50_1.root' - ,'/store/user/rwolf/test/patTuple_51_1.root' - ,'/store/user/rwolf/test/patTuple_52_1.root' - ,'/store/user/rwolf/test/patTuple_53_1.root' - ,'/store/user/rwolf/test/patTuple_54_1.root' - ,'/store/user/rwolf/test/patTuple_55_1.root' - ,'/store/user/rwolf/test/patTuple_56_1.root' - ,'/store/user/rwolf/test/patTuple_57_1.root' - ,'/store/user/rwolf/test/patTuple_58_2.root' - ,'/store/user/rwolf/test/patTuple_59_2.root' - ,'/store/user/rwolf/test/patTuple_5_1.root' - ,'/store/user/rwolf/test/patTuple_5_2.root' - ,'/store/user/rwolf/test/patTuple_60_1.root' - ,'/store/user/rwolf/test/patTuple_61_1.root' - ,'/store/user/rwolf/test/patTuple_62_1.root' - ,'/store/user/rwolf/test/patTuple_63_2.root' - ,'/store/user/rwolf/test/patTuple_64_2.root' - ,'/store/user/rwolf/test/patTuple_65_1.root' - ,'/store/user/rwolf/test/patTuple_66_2.root' - ,'/store/user/rwolf/test/patTuple_67_1.root' - ,'/store/user/rwolf/test/patTuple_68_1.root' - ,'/store/user/rwolf/test/patTuple_69_1.root' - ,'/store/user/rwolf/test/patTuple_6_1.root' - ,'/store/user/rwolf/test/patTuple_70_1.root' - ,'/store/user/rwolf/test/patTuple_71_1.root' - ,'/store/user/rwolf/test/patTuple_72_2.root' - ,'/store/user/rwolf/test/patTuple_73_2.root' - ,'/store/user/rwolf/test/patTuple_74_1.root' - ,'/store/user/rwolf/test/patTuple_75_1.root' - ,'/store/user/rwolf/test/patTuple_77_2.root' - ,'/store/user/rwolf/test/patTuple_79_2.root' - ,'/store/user/rwolf/test/patTuple_7_1.root' - ,'/store/user/rwolf/test/patTuple_80_2.root' - ,'/store/user/rwolf/test/patTuple_81_1.root' - ,'/store/user/rwolf/test/patTuple_8_1.root' - ,'/store/user/rwolf/test/patTuple_9_1.root' -) - -# CMSSW_3_8_6 re-reconstruction of muon PD, run 144112, 17717 events AOD -dataMu = cms.untracked.vstring( - '/store/data/Run2010A/Mu/AOD/Nov4ReReco_v1/0011/D2E5D86F-AEEC-DF11-B261-0017A4771028.root' -) diff --git a/PhysicsTools/PatExamples/python/samplesFNAL_cff.py b/PhysicsTools/PatExamples/python/samplesFNAL_cff.py deleted file mode 100644 index 89ec219d5b877..0000000000000 --- a/PhysicsTools/PatExamples/python/samplesFNAL_cff.py +++ /dev/null @@ -1,87 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles - -## 299,991 QCD events as defined on WorkBookPATExampleTopQuarks -simulationQCD = cms.untracked.vstring( - 'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_0.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_1.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_2.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_3.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_4.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_5.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_6.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_7.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_8.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_9.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_10.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_11.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_12.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_13.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_14.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_15.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_16.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_17.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_18.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_19.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_2.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_21.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_22.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_23.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_24.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_25.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_26.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_27.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_28.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_qcd_29.root' -) - -## 99,991 W+Jets events as defined on WorkBookPATExampleTopQuarks -simulationWjets = cms.untracked.vstring( - 'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_0.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_1.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_2.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_3.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_4.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_5.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_6.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_7.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_8.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_wjets_9.root' - ) - -## 9,991 Z+Jets events as defined on WorkBookPATExampleTopQuarks -simulationZjets = cms.untracked.vstring( - 'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_0.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_1.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_2.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_3.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_4.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_5.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_6.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_7.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_8.root' - ,'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_zjets_9.root' -) - -## 1000 Ttbar events as defined on WorkBookPATExampleTopQuarks -simulationTtbar = cms.untracked.vstring( - 'file:/uscms_data/d3/rwolf/PATTutorial/Nov10/patTuple_ttbar.root' -) - -zjetsTrigger = cms.untracked.vstring( - 'file:/uscms_data/d3/vadler/PATTutorial/Nov10/patTuple_zjets_trigger.root' -) - -#zjetsRECO = cms.untracked.vstring( -# pickRelValInputFiles( relVal = 'RelValZMM' ) -#) - -#ttbarRECO = cms.untracked.vstring( -# pickRelValInputFiles( relVal = 'RelValZTT' ) -#) - -# CMSSW_3_8_6 re-reconstruction of muon PD, run 144112, 17717 events AOD -dataMu = cms.untracked.vstring( - '/store/data/Run2010A/Mu/AOD/Nov4ReReco_v1/0011/D2E5D86F-AEEC-DF11-B261-0017A4771028.root' -) diff --git a/PhysicsTools/PatExamples/python/strippedPatTuple_cff.py b/PhysicsTools/PatExamples/python/strippedPatTuple_cff.py deleted file mode 100644 index e3d30ae35d6f8..0000000000000 --- a/PhysicsTools/PatExamples/python/strippedPatTuple_cff.py +++ /dev/null @@ -1,28 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.PatAlgos.producersLayer1.muonProducer_cfi import * - -## strip muon content to a minimum -patMuons.embedTrack = False -patMuons.embedCombinedMuon = False -patMuons.embedStandAloneMuon = False -patMuons.embedPickyMuon = False -patMuons.embedTpfmsMuon = False -patMuons.embedDytMuon = False -patMuons.embedPFCandidate = False -patMuons.embedCaloMETMuonCorrs = False -patMuons.embedTcMETMuonCorrs = False -patMuons.embedGenMatch = False -patMuons.embedHighLevelSelection = False - -from PhysicsTools.PatAlgos.producersLayer1.jetProducer_cfi import * - -## strip jet content to a minimum -patJets.embedCaloTowers = False -patJets.embedPFCandidates = False -patJets.addTagInfos = False -patJets.addAssociatedTracks = False -patJets.addJetCharge = False -patJets.addJetID = False -patJets.embedGenPartonMatch = False -patJets.embedGenJetMatch = False diff --git a/PhysicsTools/PatExamples/python/tagAndProbeAnalysis_cff.py b/PhysicsTools/PatExamples/python/tagAndProbeAnalysis_cff.py deleted file mode 100644 index 371a9da67b87f..0000000000000 --- a/PhysicsTools/PatExamples/python/tagAndProbeAnalysis_cff.py +++ /dev/null @@ -1,13 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from PhysicsTools.PatExamples.PatElectronAnalyzer_cfi import * - -plainElectronID = analyzePatElectron.clone(mode=1, electronID = "none") -looseElectronID = analyzePatElectron.clone(mode=1, electronID = "eidRobustLoose") -tightElectronID = analyzePatElectron.clone(mode=1, electronID = "eidRobustTight") - -tagAndProbeAnalysis = cms.Sequence( - plainElectronID + - looseElectronID + - tightElectronID - ) diff --git a/PhysicsTools/PatExamples/python/topObjectSelection_cff.py b/PhysicsTools/PatExamples/python/topObjectSelection_cff.py deleted file mode 100644 index ea73dc3bed734..0000000000000 --- a/PhysicsTools/PatExamples/python/topObjectSelection_cff.py +++ /dev/null @@ -1,74 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## --- -## -## this cff file keep all object selections used for the TopPAG -## reference selection for ICHEP 2010 -## -## --- -from PhysicsTools.PatAlgos.cleaningLayer1.muonCleaner_cfi import * -looseMuons = cleanPatMuons.clone( - preselection = - 'isGlobalMuon & isTrackerMuon &' - 'pt > 20. &' - 'abs(eta) < 2.1 &' - '(trackIso+caloIso)/pt < 0.1 &' - 'innerTrack.numberOfValidHits > 10 &' - 'globalTrack.normalizedChi2 < 10.0 &' - 'globalTrack.hitPattern.numberOfValidMuonHits > 0 &' - 'abs(dB) < 0.02', - checkOverlaps = cms.PSet( - jets = cms.PSet( - src = cms.InputTag("goodJets"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), - deltaR = cms.double(0.3), - checkRecoComponents = cms.bool(False), - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(True), - ) - ) -) - -tightMuons = cleanPatMuons.clone( - src = 'looseMuons', - preselection = '(trackIso+caloIso)/pt < 0.05' -) - -from PhysicsTools.PatAlgos.selectionLayer1.muonSelector_cfi import * -vetoMuons = selectedPatMuons.clone( - src = 'selectedPatMuons', - cut = - 'isGlobalMuon &' - 'pt > 10. &' - 'abs(eta) < 2.5 &' - '(trackIso+caloIso)/pt < 0.2' -) - -from PhysicsTools.PatAlgos.selectionLayer1.electronSelector_cfi import * -vetoElecs = selectedPatElectrons.clone( - src = 'selectedPatElectrons', - cut = - 'et > 15. &' - 'abs(eta) < 2.5 &' - '(dr03TkSumPt+dr03EcalRecHitSumEt+dr03HcalTowerSumEt)/et < 0.2' - ) - -from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import * -goodJets = selectedPatJets.clone( - src = 'selectedPatJets', - cut = - 'pt > 30. &' - 'abs(eta) < 2.4 &' - 'emEnergyFraction > 0.01 &' - 'jetID.n90Hits > 1 &' - 'jetID.fHPD < 0.98' -) - -topObjectSelection = cms.Sequence( - goodJets * - vetoElecs * - vetoMuons * - looseMuons * - tightMuons - ) diff --git a/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerBTag.cc b/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerBTag.cc index 30b26e1168d7d..c8e46085c320d 100644 --- a/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerBTag.cc +++ b/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerBTag.cc @@ -13,6 +13,7 @@ AnalysisTasksAnalyzerBTag::AnalysisTasksAnalyzerBTag(const edm::ParameterSet& cf lowerbin_(cfg.getParameter("lowerbin")), upperbin_(cfg.getParameter("upperbin")) { + hists_["NumSoftMuons"] = fs.make("NumSoftMuons" , "NumSoftMuons" ,4, -0.5, 3.5); hists_["BTag_b"] = fs.make("BTag_b" , "BTag_b" , bins_, lowerbin_, upperbin_); hists_["BTag_g"] = fs.make("BTag_g" , "BTag_g" , bins_, lowerbin_, upperbin_); hists_["BTag_c"] = fs.make("BTag_c" , "BTag_c" , bins_, lowerbin_, upperbin_); @@ -29,9 +30,9 @@ AnalysisTasksAnalyzerBTag::~AnalysisTasksAnalyzerBTag() for(unsigned int i=0; i< bins_; ++i){ hists_["effBTag_b"]->SetBinContent(i,hists_["BTag_b"]->Integral(i,hists_["BTag_b"]->GetNbinsX()+1)/hists_["BTag_b"]->Integral(0,hists_["BTag_b"]->GetNbinsX()+1) ); hists_["effBTag_g"]->SetBinContent(i,hists_["BTag_g"]->Integral(i,hists_["BTag_g"]->GetNbinsX()+1)/hists_["BTag_g"]->Integral(0,hists_["BTag_g"]->GetNbinsX()+1) ); - hists_["effBTag_c"]->SetBinContent(i,hists_["BTag_c"]->Integral(i,hists_["BTag_c"]->GetNbinsX()+1)/hists_["BTag_c"]->Integral(0,hists_["BTag_c"]->GetNbinsX()+1) ); - hists_["effBTag_uds"]->SetBinContent(i,hists_["BTag_uds"]->Integral(i,hists_["BTag_uds"]->GetNbinsX()+1)/hists_["BTag_uds"]->Integral(0,hists_["BTag_uds"]->GetNbinsX()+1) ); - hists_["effBTag_other"]->SetBinContent(i,hists_["BTag_other"]->Integral(i,hists_["BTag_other"]->GetNbinsX()+1)/hists_["BTag_other"]->Integral(0,hists_["BTag_other"]->GetNbinsX()+1) ); + hists_["effBTag_c"]->SetBinContent(i,hists_["BTag_c"]->Integral(i,hists_["BTag_c"]->GetNbinsX()+1)/hists_["BTag_c"]->Integral(0,hists_["BTag_c"]->GetNbinsX()+1) ); + hists_["effBTag_uds"]->SetBinContent(i,hists_["BTag_uds"]->Integral(i,hists_["BTag_uds"]->GetNbinsX()+1)/hists_["BTag_uds"]->Integral(0,hists_["BTag_uds"]->GetNbinsX()+1) ); + hists_["effBTag_other"]->SetBinContent(i,hists_["BTag_other"]->Integral(i,hists_["BTag_other"]->GetNbinsX()+1)/hists_["BTag_other"]->Integral(0,hists_["BTag_other"]->GetNbinsX()+1) ); } } /// everything that needs to be done during the event loop @@ -48,30 +49,36 @@ AnalysisTasksAnalyzerBTag::analyze(const edm::EventBase& event) // loop Jet collection and fill histograms for(std::vector::const_iterator Jet_it=Jets->begin(); Jet_it!=Jets->end(); ++Jet_it){ - - pat::Jet Jet(*Jet_it); + edm::LogInfo ("hint3") << "\n \n investigate the next jet...\n \n "<Fill(Jet.bDiscriminator(bTagAlgo_)); - } - else{ - if( abs(Jet.partonFlavour())==21 || abs(Jet.partonFlavour())==9 ){ - hists_["BTag_g"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + + const std::vector< std::pair< std::string, float > > discrPairs = Jet.getPairDiscri(); + for(unsigned int pair_i = 0;pair_i Fill(Jet.bDiscriminator(bTagAlgo_)); - } - else{ - if( abs(Jet.partonFlavour())==1 || abs(Jet.partonFlavour())==2 || abs(Jet.partonFlavour())==3){ - hists_["BTag_uds"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + + //Categorize the Jets + if( abs(Jet.partonFlavour())==5){ + hists_["BTag_b"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + } + else{ + if( abs(Jet.partonFlavour())==21 || abs(Jet.partonFlavour())==9 ){ + hists_["BTag_g"]->Fill(Jet.bDiscriminator(bTagAlgo_)); } else{ - hists_["BTag_other"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + if( abs(Jet.partonFlavour())==4){ + hists_["BTag_c"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + } + else{ + if( abs(Jet.partonFlavour())==1 || abs(Jet.partonFlavour())==2 || abs(Jet.partonFlavour())==3){ + hists_["BTag_uds"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + } + else{ + hists_["BTag_other"]->Fill(Jet.bDiscriminator(bTagAlgo_)); + } + } } - } } - } } } diff --git a/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerJEC.cc b/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerJEC.cc index 81df9d1d33f00..b6953a83de9b5 100644 --- a/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerJEC.cc +++ b/PhysicsTools/PatExamples/src/AnalysisTasksAnalyzerJEC.cc @@ -4,28 +4,19 @@ #include "PhysicsTools/PatExamples/interface/AnalysisTasksAnalyzerJEC.h" #include "TH2.h" #include "TProfile.h" + /// default constructor AnalysisTasksAnalyzerJEC::AnalysisTasksAnalyzerJEC(const edm::ParameterSet& cfg, TFileDirectory& fs): edm::BasicAnalyzer::BasicAnalyzer(cfg, fs), Jets_(cfg.getParameter("Jets")), jecLevel_(cfg.getParameter("jecLevel")), - patJetCorrFactors_(cfg.getParameter("patJetCorrFactors")), - help_(cfg.getParameter("help")) + jecSetLabel_(cfg.getParameter("jecSetLabel")) { - - hists_["Response" ] = fs.make("Response" , "response; #eta;p_{T}(reco)/p_{T}(gen)" , 5, -3.3, 3.3, 100, 0.4, 1.6); - jetInEvents_=0; + hists_["Response" ] = fs.make("Response" , "response "+TString(jecLevel_)+"; #eta;p_{T}(reco)/p_{T}(gen)" , 5, -3.3, 3.3, 100, 0.4, 1.6); } /// deconstructor AnalysisTasksAnalyzerJEC::~AnalysisTasksAnalyzerJEC() { - -/// A Response function is nicer in a TProfile: - TFile* file=new TFile("myResponse"+TString(jecLevel_)+".root", "RECREATE"); - TProfile* prof = hists_["Response" ]->ProfileX(); - prof->Write(); - file->Write(); - file->Close(); } /// everything that needs to be done during the event loop void @@ -43,26 +34,18 @@ AnalysisTasksAnalyzerJEC::analyze(const edm::EventBase& event) for(std::vector::const_iterator jet_it=Jets->begin(); jet_it!=Jets->end(); ++jet_it){ -///// You can get some help if you switch help to True in your config file - if(help_==true){ - if(jetInEvents_==0){ - std::cout<<"\n \n number of available JEC sets: "<< jet_it->availableJECSets().size() << std::endl; - for(unsigned int k=0; k< jet_it->availableJECSets().size(); ++k){ - std::cout<<"\n \n available JEC Set: "<< jet_it->availableJECSets()[k] << std::endl; - } - std::cout<<"\n \n*** You found out which JEC Sets exist! Now correct it in your config file."<availableJECLevels().size() << std::endl; - for(unsigned int k=0; k< jet_it->availableJECLevels().size(); ++k){ - std::cout<<"\n \n available JEC: "<< jet_it->availableJECLevels(patJetCorrFactors_)[k] << std::endl; - } - std::cout<<"\n \n**** You did it correctly congratulations!!!! And you found out which JEC levels are saved within the jets. Correct this in your configuration file." <genParticlesSize()>0){ - hists_["Response" ]->Fill( jet_it->correctedJet(jecLevel_).eta(), jet_it->correctedJet(jecLevel_).pt()/ jet_it->genParticle(0)->pt()); - std::cout<<"\n \n**** You did it correctly congratulations!!!! "<< std::endl; - } - jetInEvents_+=1; +///// You can switch message logger messages on in the configuration file to get some help. + for(unsigned int k=0; k< jet_it->availableJECSets().size(); ++k){ + edm::LogInfo ("hint1") <<"\n \n *************** HINT 1 *************** \n \n Label of available JEC Set: "<< jet_it->availableJECSets()[k] + <<"\n \n You found out which JEC Sets were created within the PAT tuple creation! The wrong label caused the segmentation fault in the next for-loop where you ask for JEC levels of a JEC Set that does not exist. Correct the JEC label in your config file and eliminate the segmentation fault. \n *********************************************** \n"; + } + for(unsigned int k=0; k< jet_it->availableJECLevels().size(); ++k){ + edm::LogInfo("hint2")<<" \n \n Label of available JEC level: "<< jet_it->availableJECLevels(jecSetLabel_)[k] << "\n \n "; + } + edm::LogInfo("hint2")<<"\n \n *************** HINT 2 ************** \n You did it correctly congratulations!!!! And you found out above which JEC levels are saved within the jets. We want to investigate these in the following with the response function. At the moment you are trying to access the JEC Level: " + << jecLevel_ << ". Does it exist? This causes the error below (see 'Exception Message')! Correct the label of the correction level to an existing one that you are interested in. \n ******************************************* \n " <genParticlesSize()>0){ + hists_["Response" ]->Fill( jet_it->correctedJet(jecLevel_).eta(), jet_it->correctedJet(jecLevel_).pt()/ jet_it->genParticle(0)->pt()); + } } } diff --git a/PhysicsTools/PatExamples/src/PatBTagCommonHistos.cc b/PhysicsTools/PatExamples/src/PatBTagCommonHistos.cc deleted file mode 100644 index be33ab2ec8ce7..0000000000000 --- a/PhysicsTools/PatExamples/src/PatBTagCommonHistos.cc +++ /dev/null @@ -1,307 +0,0 @@ -// -*- C++ -*- -// -// Package: PatBTag -// Class: PatBTagCommonHistos -// -/**\class PatBTagCommonHistos PatBTagCommonHistos.cc - - Description: - - Implementation: - - Create a container of histograms. -*/ -// -// Original Author: J. E. Ramirez -// -// - - -// system include files -#include - -// user include files -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "PhysicsTools/PatExamples/interface/PatBTagCommonHistos.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -// -// constructors and destructor -// -PatBTagCommonHistos::PatBTagCommonHistos(const edm::ParameterSet& iConfig): - histocontainer_() -,BTagger(iConfig.getParameter< edm::ParameterSet >("BJetOperatingPoints")) - //now do what ever initialization is needed -{ - edm::ParameterSet PatBjet_(iConfig.getParameter< edm::ParameterSet >("BjetTag")); - BTagdisccut_ = PatBjet_.getUntrackedParameter("mindiscriminatorcut",5.0); - BTagdiscriminator_= PatBjet_.getParameter("discriminator"); - BTagpurity_ = PatBjet_.getParameter("purity"); -} - - -PatBTagCommonHistos::~PatBTagCommonHistos() -{ - - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - -} - - -// -// member functions -// - -// ------------ method called to for each event ------------ -void -PatBTagCommonHistos::Fill( edm::View::const_iterator& jet_iter, std::string flavor) -{ - -float isb =jet_iter->bDiscriminator(BTagdiscriminator_); -// -// no pt cut histograms -// -if( - fabs(jet_iter->eta()) < 2.4 - && fabs(jet_iter->eta()) > 0 -){ - // - //Fill histos for Loose(defined in configuration file) cut - //tagged using auxiliar function (Loose) - // - if(BTagger.IsbTag(*jet_iter,BTagpurity_,BTagdiscriminator_)){ - histocontainer_["jet_pt_uncorr_"+flavor+"_tagged"]->Fill(jet_iter->correctedJet("raw").pt()); - histocontainer_["jet_pt_"+flavor+"_tagged"]->Fill(jet_iter->pt()); - histocontainer_["jet_eta_"+flavor+"_tagged"]->Fill(jet_iter->eta()); - } - // - // Fill histos - // tagged minimum discriminant cut criteria - // - if( isb > float(BTagdisccut_) ){ - histocontainer_["jet_pt_uncorr_"+flavor+"_taggedmincut"]->Fill(jet_iter->correctedJet("raw").pt()); - histocontainer_["jet_pt_"+flavor+"_taggedmincut"]->Fill(jet_iter->pt()); - histocontainer_["jet_eta_"+flavor+"_taggedmincut"]->Fill(jet_iter->eta()); - } - // - //fill taggable jets histograms (tracks in jet > 0,1,2) - std::map tagbl; - tagbl[0]="0";tagbl[1]="1";tagbl[2]="2"; - for (size_t i=0; i < tagbl.size(); i++) - if( jet_iter->associatedTracks().size() > i ){ - histocontainer_["jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->correctedJet("raw").pt()); - histocontainer_["jet_pt_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->pt()); - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->eta()); - if (jet_iter->pt() < 30 ){ - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030"]->Fill(jet_iter->eta()); - } - if (jet_iter->pt() > 30 && jet_iter->pt() < 50){ - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050"]->Fill(jet_iter->eta()); - } - if (jet_iter->pt() > 50 ){ - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50"]->Fill(jet_iter->eta()); - } - } - // - // Fill histos needed for normalization - // uncorrected pt distributions - // corrected pt distributions - // eta distributions - // scatter plots for pts - histocontainer_["jet_pt_uncorr_"+flavor]->Fill(jet_iter->correctedJet("raw").pt()); - histocontainer_["jet_pt_"+flavor]->Fill(jet_iter->pt()); - histocontainer_["jet_eta_"+flavor]->Fill(jet_iter->eta()); - histocontainer_["tracks_in_jet_"+flavor]->Fill(jet_iter->associatedTracks().size()); - h2_["jet_scatter_pt_"+flavor]->Fill(jet_iter->pt(),jet_iter->correctedJet("raw").pt()); - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - if (jet_iter->pt() < 30 ){ - histocontainer_["jet_eta_"+flavor+"030"]->Fill(jet_iter->eta()); - histocontainer_["tracks_in_jet_"+flavor+"030"]->Fill(jet_iter->associatedTracks().size()); - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"030"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - if (fabs(jet_iter->eta()) < 1.5 ){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_center030"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_sides030"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - } - if (jet_iter->pt() > 30 && jet_iter->pt() < 50){ - histocontainer_["jet_eta_"+flavor+"3050"]->Fill(jet_iter->eta()); - histocontainer_["tracks_in_jet_"+flavor+"3050"]->Fill(jet_iter->associatedTracks().size()); - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - if (fabs(jet_iter->eta()) < 1.5 ){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_center3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_sides3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - } - if (jet_iter->pt() > 50 ){ - histocontainer_["jet_eta_"+flavor+"50"]->Fill(jet_iter->eta()); - histocontainer_["tracks_in_jet_"+flavor+"50"]->Fill(jet_iter->associatedTracks().size()); - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"50"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - if (fabs(jet_iter->eta()) < 1.5 ){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_center50"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_sides50"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - } - if (fabs(jet_iter->eta()) < 1.5 ){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_center"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){ - for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){ - histocontainer_["pt_tracks_in_jet_"+flavor+"_sides"]->Fill(jet_iter->associatedTracks()[itrack]->pt()); - } - } - - }//endif -}//end function -// ------------ method called once each job just before starting event loop ------------ -// ------------ This function is needed to set a group of histogram ------------------- -void -PatBTagCommonHistos::Set(std::string flavor) -{ - - const int ntptarray = 23; - const int njptarray = 14; - const int netaarray = 19; - Double_t jetetabins[netaarray] = {-2.5,-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0,0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.5}; - Double_t jetptxbins[njptarray] = {0.,10.,20.,30., 40., 50., 60., 70., 80, 90., 100., 120., 140., 230.}; - Double_t jetpttbins[ntptarray] = {0.,1.,2.,4.,6.,8.,10.,15.,20.,25.,30., 35.,40., 45., 50., 60., 70., 80, 90., 100., 120., 140., 230.}; - edm::Service fs; - std::string histoid; - std::string histotitle; - - //Define histograms - histoid = "jet_pt_"+flavor; histotitle = flavor+" jet p_{T} [GeV/c]"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins); - histoid = "jet_pt_uncorr_"+flavor; histotitle = flavor+" jet uncorrected p_{T} [GeV/c]"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins); - histoid = "jet_eta_"+flavor; - histocontainer_["jet_eta_"+flavor]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"030"; - histocontainer_["jet_eta_"+flavor+"030"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"3050"; - histocontainer_["jet_eta_"+flavor+"3050"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"50"; - histocontainer_["jet_eta_"+flavor+"50"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_pt_"+flavor+"_tagged"; - histocontainer_["jet_pt_"+flavor+"_tagged"]=fs->make(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins); - histoid = "jet_pt_uncorr_"+flavor+"_tagged"; - histocontainer_["jet_pt_uncorr_"+flavor+"_tagged"]=fs->make(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins); - histoid = "jet_eta_"+flavor+"_tagged"; - histocontainer_["jet_eta_"+flavor+"_tagged"]=fs->make(histoid.c_str(),"jet_tagged #eta",netaarray-1,jetetabins); - - //tagged min cut - histoid = "jet_pt_"+flavor+"_taggedmincut"; - histocontainer_["jet_pt_"+flavor+"_taggedmincut"]=fs->make(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins); - histoid = "jet_pt_uncorr_"+flavor+"_taggedmincut"; - histocontainer_["jet_pt_uncorr_"+flavor+"_taggedmincut"]=fs->make(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins); - histoid = "jet_eta_"+flavor+"_taggedmincut"; - histocontainer_["jet_eta_"+flavor+"_taggedmincut"]=fs->make(histoid.c_str(),"jet_tagged #eta",netaarray-1,jetetabins); - - //#tracks per jet - histoid = "tracks_in_jet_"+flavor; histotitle = "traks per jet "+flavor; - histocontainer_["tracks_in_jet_"+flavor]=fs->make(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5); - histoid = "tracks_in_jet_"+flavor+"030"; histotitle = "traks per jet "+flavor+ "pt_{T} < 30[GeV/c]"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5); - histoid = "tracks_in_jet_"+flavor+"3050"; histotitle = "traks per jet "+flavor+ "30 < pt_{T} < 50[GeV/c]"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5); - histoid = "tracks_in_jet_"+flavor+"50"; histotitle = "traks per jet "+flavor+ "pt_{T} > 50[GeV/c]"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5); - - // pt of tracks in bins of jet pt 0-30,30-50,50 - histoid= "pt_tracks_in_jet_"+flavor; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - - // pt of tracks in bins of jet eta abs(eta)<1.5, 1.5make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_center030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_center3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_center50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_sides"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_sides030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_sides3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - histoid= "pt_tracks_in_jet_"+flavor+"_sides50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets"; - histocontainer_[histoid]=fs->make(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins); - - //taggable 0,1,2 - std::map tagbl; - tagbl[0]="0";tagbl[1]="1";tagbl[2]="2"; - for (size_t i=0; i < tagbl.size(); i++){ - histoid = "jet_pt_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable p_{T} [GeV/c]"; - histocontainer_["jet_pt_"+flavor+"_taggable"+tagbl[i]]=fs->make(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins); - histoid = "jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable p_{T} uncorr [GeV/c]"; - histocontainer_["jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]]=fs->make(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins); - histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable #eta"; - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]]=fs->make(histoid.c_str(),histotitle.c_str(),netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030"; - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050"; - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50"; - histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50"]=fs->make(histoid.c_str(),"jet #eta",netaarray-1,jetetabins); - } - - histoid = "jet_scatter_pt_"+flavor; - h2_["jet_scatter_pt_"+flavor]=fs->make(histoid.c_str(),"jet p_{T} uncorr(y) vs corr(x) [GeV/c]", - njptarray-1,jetptxbins,njptarray-1,jetptxbins); - -}//end function Set - -// ------------ method called once each job just before starting event loop ------------ -// ------------ after setting histograms -------------------- -// ------------ This function is needed to save histogram errors ----------------------- -void -PatBTagCommonHistos::Sumw2() -{ - for (std::map::const_iterator ih=histocontainer_.begin(); - ih!= histocontainer_.end(); ++ih) { - TH1D *htemp = (TH1D*) ih->second; - htemp->Sumw2(); - } -}//end function Sumw2 - diff --git a/PhysicsTools/PatExamples/test/MuonAnalyzer_cfg.py b/PhysicsTools/PatExamples/test/MuonAnalyzer_cfg.py deleted file mode 100755 index 345589a84da0e..0000000000000 --- a/PhysicsTools/PatExamples/test/MuonAnalyzer_cfg.py +++ /dev/null @@ -1,37 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("RecoMuon") -# Messages -process.load("FWCore.MessageService.MessageLogger_cfi") - - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.MagneticField_38T_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -process.GlobalTag.globaltag = 'IDEAL_V9::All' - -process.source = cms.Source("PoolSource", -# fileNames = cms.untracked.vstring('/store/relval/CMSSW_2_2_1/RelValH200ZZ4L/GEN-SIM-RECO/IDEAL_V9_v1/0004/B492FC1B-06C5-DD11-93B9-000423D33970.root') - fileNames = cms.untracked.vstring('file:PATLayer1_Output.fromAOD_full.root') -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.TFileService=cms.Service('TFileService', - fileName=cms.string('MyMuonPlots.root') - ) - - -process.muonAnalysis = cms.EDAnalyzer("ExampleMuonAnalyzer", - MuonCollection = cms.untracked.string('cleanLayer1Muons'), - ) - - -process.p = cms.Path(process.muonAnalysis) - - - - diff --git a/PhysicsTools/PatExamples/test/TestCorrections_FWLiteMacro.C b/PhysicsTools/PatExamples/test/TestCorrections_FWLiteMacro.C deleted file mode 100644 index 438eb186993ff..0000000000000 --- a/PhysicsTools/PatExamples/test/TestCorrections_FWLiteMacro.C +++ /dev/null @@ -1,145 +0,0 @@ -// -*- C++ -*- -//****Author - Sudhir Malik - malik@fnal.gov *****// - - //*****NOTE: To successfully exeute this macro, include the following lines in your root logon file ************************// - /* - { - gSystem->Load("libFWCoreFWLite.so"); - AutoLibraryLoader::enable(); - gSystem->Load("libDataFormatsFWLite.so"); - gSystem->Load("libDataFormatsPatCandidates.so"); - gSystem->Load("libRooFit") ; - using namespace RooFit ; - cout << "loaded" << endl; - } - */ -//*****************************// - - // CMS includes -#include "DataFormats/FWLite/interface/Handle.h" -#include "DataFormats/FWLite/interface/Event.h" -#include - - -#include "TFile.h" -#include "TH1.h" -#include "TCanvas.h" -#include "TLegend.h" - -#if !defined(__CINT__) && !defined(__MAKECINT__) - -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "CondFormats/JetMETObjects/interface/CombinedJetCorrector.h" - - // these includes are needed to make the "gSystem" commands below work -#include "TSystem.h" -#include "TROOT.h" -#include "FWCore/FWLite/interface/AutoLibraryLoader.h" -#endif - - -#include -#include -#include - - -void JetCorrFWLite() -{ - - - // The input file MYCOPY.root is available at - //https://cms-service-sdtweb.web.cern.ch/cms-service-sdtweb/validation/physicstools/PATVALIDATION/MYCOPY.root - - TFile *file = new TFile("MYCOPY.root"); - TFile *outputfile = new TFile("JetCorr.root","RECREATE"); - - - - // Book those histograms for Jet stuff! - TH1F * hist_jetMult = new TH1F( "jetMult", "jetMult", 100, 0, 50) ; - TH1F * hist_jetPt = new TH1F( "jetPt", "jetPt", 100, 0, 200) ; - TH1F * hist_jetEta = new TH1F( "jetEta", "jetEta", 100,-5, 5) ; - TH1F * hist_jetPhi = new TH1F( "jetPhi", "jetPhi", 100, -3.5, 3.5) ; - TH2F * hist_Mapping = new TH2F( "Mapping", "Mapping", 500, 0, 500, 500, 0, 500) ; - TH2F * hist_Ratio = new TH2F( "Ratio", "Ratio", 500, 0, 500, 500, 0.8, 1.2) ; - - - fwlite::Event ev(file); - for( ev.toBegin(); - ! ev.atEnd(); - ++ev) { - - - fwlite::Handle > jetHandle; - jetHandle.getByLabel(ev,"ak5CaloJets"); - - - - //////////////////////////////////////////////////////////////////////// - ////////////// Defining the L2L3L5L7JetCorrector /////////////////////// - //////////////////////////////////////////////////////////////////////// - - string Levels1 = "L2:L3:L5:L7"; - string Tags1 = "900GeV_L2Relative_AK5Calo:900GeV_L3Absolute_AK5Calo:L5Flavor_IC5:L7Parton_IC5"; - string Options1 = "Flavor:gJ & Parton:gJ"; - CombinedJetCorrector *L2L3L5L7JetCorrector = new CombinedJetCorrector(Levels1,Tags1,Options1); - - /////////////////////////////////////////////////////////////////////// - ////////////// Defining the L2L3JetCorrector ////////////////////////// - /////////////////////////////////////////////////////////////////////// - - string Levels = "L2:L3"; - string Tags = "900GeV_L2Relative_AK5Calo:900GeV_L3Absolute_AK5Calo"; - CombinedJetCorrector *L2L3JetCorrector = new CombinedJetCorrector(Levels,Tags); - - - - - - // Loop over the jets - hist_jetMult->Fill(jetHandle->size()); - const vector::const_iterator kJetEnd = jetHandle->end(); - for (vector::const_iterator jetIter = jetHandle->begin(); - kJetEnd != jetIter; - ++jetIter) - { - hist_jetPt ->Fill (jetIter->pt()); - hist_jetEta->Fill (jetIter->eta()); - hist_jetPhi->Fill (jetIter->phi()); - ////////////////////Jet Correctiion Stuff //////////// - double pt = jetIter->pt(); - double eta = jetIter->eta(); - double emf = jetIter->emEnergyFraction(); - - double L2L3scale = L2L3JetCorrector->getCorrection(pt,eta,emf); - double L2L3L5L7scale = L2L3L5L7JetCorrector->getCorrection(pt,eta,emf); - - vector L2L3factors = L2L3JetCorrector->getSubCorrections(pt,eta,emf); - vector L2L3L5L7factors = L2L3L5L7JetCorrector->getSubCorrections(pt,eta,emf); - - cout<<"Pt = "< 0.01 &' - 'jetID.fHPD < 0.98 &' - 'jetID.n90Hits > 1' -) - -## use this selection of particle flow jets -#process. goodJets = selectedPatJets.clone( -# src = 'cleanPatJetsAK5PF', -# cut = 'abs(eta) < 2.4 & pt > 30. &' -# 'chargedHadronEnergyFraction > 0.0 &' -# 'neutralHadronEnergyFraction/corrFactor("raw") < 0.99 &' -# 'chargedEmEnergyFraction/corrFactor("raw") < 0.99 &' -# 'neutralEmEnergyFraction/corrFactor("raw") < 0.99 &' -# 'chargedMultiplicity > 0 &' -# 'nConstituents > 0' -#) - -## Analyze jets -from PhysicsTools.PatExamples.PatJetAnalyzer_cfi import analyzePatJets -process.Uncorrected = analyzePatJets.clone(src = 'goodJets', corrLevel='raw') -process.L2Relative = analyzePatJets.clone(src = 'goodJets', corrLevel='rel') -process.L3Absolute = analyzePatJets.clone(src = 'goodJets', corrLevel='abs') - -## Define output file -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeJetEnergyScale.root') -) - -process.p = cms.Path( - process.goodJets * - process.Uncorrected * - process.L2Relative * - process.L3Absolute - -) diff --git a/PhysicsTools/PatExamples/test/analyzePatJets_cfg.py b/PhysicsTools/PatExamples/test/analyzePatJets_cfg.py deleted file mode 100644 index a12dc4661d44e..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatJets_cfg.py +++ /dev/null @@ -1,43 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Jets") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:patTuple.root' - ) -) - -process.MessageLogger = cms.Service("MessageLogger") - -## prepare jet collections -from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import selectedPatJets -process.goodCaloJets = selectedPatJets.clone(src='cleanPatJets', cut='pt>30 & abs(eta)<3') - -## monitor jet collections -from PhysicsTools.PatExamples.PatJetAnalyzer_cfi import analyzePatJets -## modules for jet response -process.rawJets = analyzePatJets.clone(corrLevel='Uncorrected') -process.relJets = analyzePatJets.clone(corrLevel='L2Relative') -process.absJets = analyzePatJets.clone(corrLevel='L3Absolute') -## modules to compare calo and pflow jets -process.caloJets = analyzePatJets.clone(src='goodCaloJets') -process.pflowJets = analyzePatJets.clone(src='goodCaloJets') -## modules for shift in JES -process.shiftedJets = analyzePatJets.clone(src='goodCaloJets') - - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzePatJets.root') -) - -## process path -process.p = cms.Path( - process.goodCaloJets * - process.rawJets * - process.relJets * - process.absJets * - process.caloJets * - process.pflowJets * - process.shiftedJets -) diff --git a/PhysicsTools/PatExamples/test/analyzePatMCMatchingExtended_cfg.py b/PhysicsTools/PatExamples/test/analyzePatMCMatchingExtended_cfg.py deleted file mode 100644 index 06feacb0b3e89..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatMCMatchingExtended_cfg.py +++ /dev/null @@ -1,118 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -#------------------------------------------------------------------------------------------------------ -# To configure the Matching, we have to configure the PAT-Workflow starting from the patDefaultSequence: -#------------------------------------------------------------------------------------------------------ - -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -## prepare several clones of match associations for status 1, 3 and in flight muons (status -1) -## add inFlightMuons -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.inFlightMuons = cms.EDProducer("PATGenCandsFromSimTracksProducer", - src = cms.InputTag("g4SimHits"), ## use "famosSimHits" for FAMOS - setStatus = cms.int32(-1), - particleTypes = cms.vstring("mu+"), ## picks also mu-, of course - filter = cms.vstring("pt > 0.5"), ## just for testing - makeMotherLink = cms.bool(True), - writeAncestors = cms.bool(True), ## save also the intermediate GEANT ancestors of the muons - genParticles = cms.InputTag("genParticles"), -) - -process.muMatch3 = process.muonMatch.clone(mcStatus = [3]) # hard scattering -process.muMatch1 = process.muonMatch.clone(mcStatus = [1]) # stable -process.muMatchF = process.muonMatch.clone(mcStatus = [-1], matched = cms.InputTag("inFlightMuons")) - -process.muMatch1.checkCharge = False -process.muMatch3.checkCharge = False - -#process.muMatch3.resolveByMatchQuality = True -#process.muMatch1.resolveByMatchQuality = True - -process.muMatch3.maxDeltaR = 0.05 -process.muMatch3.maxDPtRel = 0.1 - -process.muMatch1.maxDeltaR = 0.05 -process.muMatch1.maxDPtRel = 0.1 - -process.muMatchF.maxDeltaR = 0.3 -process.muMatchF.maxDPtRel = 0.2 - - -process.muonMatchByPt = cms.EDProducer("MCMatcherByPt", # cut on deltaR, deltaPt/Pt; pick best by deltaPt - src = cms.InputTag("muons"), # RECO objects to match - matched = cms.InputTag("genParticles"), # mc-truth particle collection - mcPdgId = cms.vint32(13), # one or more PDG ID (13 = muon); absolute values (see below) - checkCharge = cms.bool(True), # True = require RECO and MC objects to have the same charge - mcStatus = cms.vint32(1), # PYTHIA status code (1 = stable, 2 = shower, 3 = hard scattering) - maxDeltaR = cms.double(0.5), # Minimum deltaR for the match - maxDPtRel = cms.double(0.5), # Minimum deltaPt/Pt for the match - resolveAmbiguities = cms.bool(True), # Forbid two RECO objects to match to the same GEN object - resolveByMatchQuality = cms.bool(False), # False = just match input in order; True = pick lowest deltaR pair first -) - - -## add the new matches to the default sequence -process.patDefaultSequence.replace(process.muonMatch, - process.muMatch1 + - process.muMatch3 + - process.muMatchF - #+ process.muonMatchByPt -) - -process.patMuons.genParticleMatch = cms.VInputTag( - cms.InputTag("muMatch3"), - cms.InputTag("muMatch1"), - cms.InputTag("muMatchF") - #, cms.InputTag("muonMatchByPt") -) - - -#----------------------------------------- -# As usual add those two usefull things: -#---------------------------------------- - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzePatMCMatchingExtended.root') -) - -process.MessageLogger = cms.Service("MessageLogger") - - -#---------------------------------------------------------------------- -# Finally let's analyze the matching and run all that in correct order: -#---------------------------------------------------------------------- - -process.analyzePatMCMatching = cms.EDAnalyzer("PatMCMatchingExtended", - muonSrc = cms.untracked.InputTag("cleanPatMuons") -) - -process.out.outputCommands = cms.untracked.vstring('keep *') -process.outpath.remove(process.out) - - -process.p = cms.Path(process.inFlightMuons + process.patDefaultSequence + process.analyzePatMCMatching) - - -#---------------------------------------------------------------------- -# Change the input file to compare -#---------------------------------------------------------------------- -process.maxEvents.input = -1 - -## Source -from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - pickRelValInputFiles( cmsswVersion = 'CMSSW_4_2_8' - #, relVal = 'RelValZMM' - , relVal = 'RelValJpsiMM' - , globalTag = 'START42_V12' - , numberOfFiles = 1 - ) - ) -) - -del(process.out) -del(process.outpath) diff --git a/PhysicsTools/PatExamples/test/analyzePatMCMatching_cfg.py b/PhysicsTools/PatExamples/test/analyzePatMCMatching_cfg.py deleted file mode 100644 index f9c8dfa642c99..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatMCMatching_cfg.py +++ /dev/null @@ -1,68 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -#------------------------------------------------------------------------------------------------------ -# To configure the Matching, we have to configure the PAT-Workflow starting from the patDefaultSequence: -#------------------------------------------------------------------------------------------------------ - -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -## increase the number of events a bit -process.maxEvents.input = 1000 - -## add inFlightMuons -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.inFlightMuons = cms.EDProducer("PATGenCandsFromSimTracksProducer", - src = cms.InputTag("g4SimHits"), ## use "famosSimHits" for FAMOS - setStatus = cms.int32(-1), - particleTypes = cms.vstring("mu+"), ## picks also mu-, of course - filter = cms.vstring("pt > 0.5"), ## just for testing - makeMotherLink = cms.bool(True), - writeAncestors = cms.bool(True), ## save also the intermediate GEANT ancestors of the muons - genParticles = cms.InputTag("genParticles"), -) -## prepare several clones of match associations for status 1, 3 and in flight muons (status -1) -process.muMatch3 = process.muonMatch.clone(mcStatus = [3]) # hard scattering -process.muMatch1 = process.muonMatch.clone(mcStatus = [1]) # stable - - -## add the new matches to the default sequence -process.patDefaultSequence.replace(process.muonMatch, - process.muMatch1 + - process.muMatch3 -) - -process.patMuons.genParticleMatch = cms.VInputTag( - cms.InputTag("muMatch3"), - cms.InputTag("muMatch1") -) - - -#----------------------------------------- -# As usual add those two usefull things: -#---------------------------------------- - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzePatMCMatching.root') -) - -process.MessageLogger = cms.Service("MessageLogger") - - -#---------------------------------------------------------------------- -# Finally let's analyze the matching and run all that in correct order: -#---------------------------------------------------------------------- - -process.analyzePatMCMatching = cms.EDAnalyzer("PatMCMatching", - muonSrc = cms.untracked.InputTag("cleanPatMuons") -) - - -process.outpath.remove(process.out) - -process.p = cms.Path(process.patDefaultSequence + process.analyzePatMCMatching) - -del(process.out) -del(process.outpath) - diff --git a/PhysicsTools/PatExamples/test/analyzePatShiftedJets_cfg.py b/PhysicsTools/PatExamples/test/analyzePatShiftedJets_cfg.py deleted file mode 100644 index 7874684cba686..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatShiftedJets_cfg.py +++ /dev/null @@ -1,46 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("EnergyShift") - -## Declare input -from PhysicsTools.PatExamples.samplesCERN_cff import * - -process.source = cms.Source("PoolSource", - fileNames = ttbarJets -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32( -1 ) -) - -## Message logger configuration -process.load("FWCore.MessageLogger.MessageLogger_cfi") - -## Configure jet energy scaling module -process.load("PhysicsTools.PatExamples.JetEnergyShift_cfi") -process.scaledJets.scaleFactor = 1.0 - -## Select good jets -from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import * -process.goodJets = selectedPatJets.clone( - src="scaledJets:cleanPatJets", - cut = 'abs(eta) < 3 & pt > 30. &' - 'emEnergyFraction > 0.01 &' - 'jetID.fHPD < 0.98 &' - 'jetID.n90Hits > 1' - ) - -## Analyze jets -process.load("PhysicsTools.PatExamples.PatJetAnalyzer_cfi") -process.analyzePatJets.src = 'goodJets' - -## Define output file -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeEnergyShiftedJets.root') -) - -process.p = cms.Path( - process.scaledJets * - process.goodJets * - process.analyzePatJets -) diff --git a/PhysicsTools/PatExamples/test/analyzePatTau_fromAOD_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTau_fromAOD_cfg.py deleted file mode 100644 index b289201691601..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatTau_fromAOD_cfg.py +++ /dev/null @@ -1,63 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process('analyzePatTau') - -process.load('Configuration.StandardSequences.Services_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.cerr.FwkReport.reportEvery = 100 -#process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.load('Configuration.StandardSequences.Geometry_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.GlobalTag.globaltag = cms.string('START42_V12::All') - -process.load('PhysicsTools.PatAlgos.patSequences_cff') - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring() -) - -from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - pickRelValInputFiles( cmsswVersion = 'CMSSW_4_2_8' - , relVal = 'RelValTTbar' - , globalTag = 'START42_V12' - , numberOfFiles = 1 - ) - ) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -# switch to HPS + TaNC combined tau id. algorithm -from PhysicsTools.PatAlgos.tools.tauTools import * -switchToPFTauHPSpTaNC(process) - -process.analyzePatTau = cms.EDAnalyzer("PatTauAnalyzer", - src = cms.InputTag('cleanPatTaus'), - requireGenTauMatch = cms.bool(True), - discrByLeadTrack = cms.string("leadingTrackPtCut"), - discrByIso = cms.string("byHPSloose"), - discrByTaNC = cms.string("byTaNCmedium") -) - -# disable preselection on pat::Tau objects -# (neccessary in order to make efficiency plots) -process.cleanPatTaus.preselection = cms.string('') - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('patTau_Histograms.root') -) - -process.p = cms.Path( process.patDefaultSequence + process.analyzePatTau ) - -# print-out all python configuration parameter information -#print process.dumpPython() diff --git a/PhysicsTools/PatExamples/test/analyzePatTau_fromPatTuple_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTau_fromPatTuple_cfg.py deleted file mode 100644 index a6abcaa9ea26c..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatTau_fromPatTuple_cfg.py +++ /dev/null @@ -1,45 +0,0 @@ -import FWCore.ParameterSet.Config as cms -import copy - -process = cms.Process('analyzePatTau') - -process.load('Configuration.StandardSequences.Services_cff') -process.load('FWCore.MessageService.MessageLogger_cfi') -process.MessageLogger.cerr.FwkReport.reportEvery = 100 -#process.MessageLogger.cerr.threshold = cms.untracked.string('INFO') -process.load('Configuration.StandardSequences.Geometry_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -#process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_noesprefer_cff') -process.GlobalTag.globaltag = 'IDEAL_V9::All' - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:patTuple.root' - ) -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.analyzePatTau = cms.EDAnalyzer("PatTauAnalyzer", - src = cms.InputTag('cleanLayer1Taus'), - requireGenTauMatch = cms.bool(True), - discrByLeadTrack = cms.string("leadingTrackPtCut"), - discrByIso = cms.string("byIsolation"), - discrByTaNC = cms.string("byTaNCfrHalfPercent") -) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('patTau_Histograms.root') -) - -process.p = cms.Path( process.analyzePatTau ) - -# print-out all python configuration parameter information -#print process.dumpPython() diff --git a/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py deleted file mode 100644 index bc119d62fb72a..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatTracks_cfg.py +++ /dev/null @@ -1,55 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -# initialize MessageLogger and output report -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') -process.MessageLogger.cerr.INFO = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) -) -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.GlobalTag.globaltag = cms.string('IDEAL_V12::All') - -# produce PAT Layer 1 -process.load("PhysicsTools.PatAlgos.patSequences_cff") -# switch old trigger matching off -from PhysicsTools.PatAlgos.tools.trigTools import switchOffTriggerMatchingOld -switchOffTriggerMatchingOld( process ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - '/store/mc/Fall08/TTJets-madgraph/GEN-SIM-RECO/IDEAL_V11_redigi_v10/0000/06FC3959-4DFC-DD11-B504-00E08178C091.root', - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string("analyzePatTracks.root") -) - -process.analyzeTracks = cms.EDAnalyzer("PatTrackAnalyzer", - src = cms.InputTag("generalTracks"), - beamSpot = cms.InputTag("offlineBeamSpot"), - qualities = cms.vstring("loose", "tight", "highPurity") -) - -process.analyzeMuons = cms.EDAnalyzer("PatTrackAnalyzer", - src = cms.InputTag("selectedLayer1Muons"), - beamSpot = cms.InputTag("offlineBeamSpot"), - qualities = cms.vstring("undefQuality") -) - -process.p = cms.Path( - process.patDefaultSequence * - process.analyzeTracks * - process.analyzeMuons -) diff --git a/PhysicsTools/PatExamples/test/analyzePatTriggerPrescale_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTriggerPrescale_cfg.py new file mode 100644 index 0000000000000..646523952b7bc --- /dev/null +++ b/PhysicsTools/PatExamples/test/analyzePatTriggerPrescale_cfg.py @@ -0,0 +1,29 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process( "TEST" ) + +process.load( "FWCore.MessageService.MessageLogger_cfi" ) +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( False ) +) + +process.source = cms.Source( "PoolSource", + fileNames = cms.untracked.vstring( + '/store/user/vadler/cms/PatTutorial/CMSSW_5_2_5/data/patTrigger_dataFromRAW.root' + ) +) +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32( -1 ) +) + +process.TFileService = cms.Service( "TFileService", + fileName = cms.string( 'analyzePatTriggerPrescale.root' ) +) + +process.triggerAnalysisPrescale = cms.EDAnalyzer( "PatTriggerAnalyzerPrescale", + pathName = cms.string( "HLT_HT450_v5" ) +) + +process.p = cms.Path( + process.triggerAnalysisPrescale +) diff --git a/PhysicsTools/PatExamples/test/analyzePatTrigger_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTrigger_cfg.py index f1ff116540906..f597c9bdea439 100644 --- a/PhysicsTools/PatExamples/test/analyzePatTrigger_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatTrigger_cfg.py @@ -25,6 +25,8 @@ triggerEvent = cms.InputTag( "patTriggerEvent" ), muons = cms.InputTag( "selectedPatMuons" ), muonMatch = cms.string( 'muonTriggerMatchHLTMuons' ), + nBins = cms.uint32( 20 ), + binWidth = cms.double( 4. ), minID = cms.uint32( 81 ), maxID = cms.uint32( 96 ) ) diff --git a/PhysicsTools/PatExamples/test/analyzePatTrigger_onTheFly_cfg.py b/PhysicsTools/PatExamples/test/analyzePatTrigger_onTheFly_cfg.py index 24ff4be2f10ca..c37e15305dc27 100644 --- a/PhysicsTools/PatExamples/test/analyzePatTrigger_onTheFly_cfg.py +++ b/PhysicsTools/PatExamples/test/analyzePatTrigger_onTheFly_cfg.py @@ -1,42 +1,29 @@ -import FWCore.ParameterSet.Config as cms -process = cms.Process( "TEST" ) - -## MessageLogger -process.load( "FWCore.MessageLogger.MessageLogger_cfi" ) +### ======== +### Skeleton +### ======== -## Options and Output Report -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool( False ) -) +## --- +## Start with pre-defined skeleton process +## --- +from PhysicsTools.PatAlgos.patTemplate_cfg import * -## Source +## --- +## Modifications +## --- +# general from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles -process.source = cms.Source( - "PoolSource" -, fileNames = cms.untracked.vstring( - pickRelValInputFiles( cmsswVersion = 'CMSSW_4_2_8' - , globalTag = 'START42_V12' - ) - ) -) -## Maximal Number of Events -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32( 1000 ) # reduce number of events for testing -) - -## Geometry and Detector Conditions (needed for a few patTuple production steps) -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = cms.string( autoCond[ 'startup' ] ) -process.load("Configuration.StandardSequences.MagneticField_cff") - -## Standard PAT Configuration File -process.load("PhysicsTools.PatAlgos.patSequences_cff") -process.patJetCorrFactors.useRho = False - -process.selectedPatMuons.cut = 'isTrackerMuon=1 & isGlobalMuon=1 & innerTrack.numberOfValidHits>=11 & globalTrack.normalizedChi2<10.0 & globalTrack.hitPattern.numberOfValidMuonHits>0 & abs(dB)<0.02 & (trackIso+caloIso)/pt<0.05' +process.source.fileNames = pickRelValInputFiles( cmsswVersion = 'CMSSW_5_3_6' + , relVal = 'RelValProdTTbar' + , globalTag = 'START53_V14' + , dataTier = 'AODSIM' + , maxVersions = 2 + , numberOfFiles = -1 + ) +process.maxEvents.input = -1 # reduce number of events for testing. +process.options.wantSummary = False # to suppress the long output at the end of the job +# specific +process.selectedPatMuons.cut = 'isGlobalMuon && pt > 20. && abs(eta) < 2.1 && globalTrack.normalizedChi2 < 10. && track.hitPattern.trackerLayersWithMeasurement > 5 && globalTrack.hitPattern.numberOfValidMuonHits > 0 && abs(dB) < 0.2 && innerTrack.hitPattern.numberOfValidPixelHits > 0 && numberOfMatchedStations > 1 && (trackIso+caloIso)/pt<0.2' ## --- ## Define the path @@ -59,7 +46,7 @@ , src = cms.InputTag( 'cleanPatMuons' ) , matched = cms.InputTag( 'patTrigger' ) # selections of trigger objects -, matchedCuts = cms.string( 'type( "TriggerMuon" ) && path( "HLT_Mu24_v*", 1, 0 )' ) # input does not yet have the 'saveTags' parameter in HLT +, matchedCuts = cms.string( 'type( "TriggerMuon" ) && path( "HLT_IsoMu24_eta2p1_v*" )' ) # selection of matches , maxDPtRel = cms.double( 0.5 ) # no effect here , maxDeltaR = cms.double( 0.5 ) @@ -77,28 +64,47 @@ ## Switch to selected PAT objects in the main work flow ## -- from PhysicsTools.PatAlgos.tools.coreTools import removeCleaning -removeCleaning( process, outputInProcess = False ) +removeCleaning( process ) +# to save a bit of disk space +process.out.outputCommands += [ 'drop recoBaseTagInfosOwned_*_*_*' + , 'drop CaloTowers_*_*_*' + , 'drop recoGenJets_*_*_*' + ] ## -- ## Switch on PAT trigger ## -- from PhysicsTools.PatAlgos.tools.trigTools import * -switchOnTriggerMatching( process, triggerMatchers = [ 'muonTriggerMatchHLTMuons' ], outputModule = '' ) +switchOnTrigger( process ) # This is optional and can be omitted. +switchOnTriggerMatching( process, triggerMatchers = [ 'muonTriggerMatchHLTMuons' ] ) # Switch to selected PAT objects in the trigger matching -removeCleaningFromTriggerMatching( process, outputModule = '' ) +removeCleaningFromTriggerMatching( process ) + +## -- +## Remove EDM output by redefinition of the EndPath +## +process.outpath = cms.EndPath() + +### ======== +### Analyser +### ======== -## --- -## Add analysis -## --- process.TFileService = cms.Service( "TFileService", fileName = cms.string( 'analyzePatTrigger_onTheFly.root' ) ) + process.triggerAnalysis = cms.EDAnalyzer( "PatTriggerAnalyzer", trigger = cms.InputTag( "patTrigger" ), triggerEvent = cms.InputTag( "patTriggerEvent" ), muons = cms.InputTag( "selectedPatMuons" ), muonMatch = cms.string( 'muonTriggerMatchHLTMuons' ), + nBins = cms.uint32( 20 ), + binWidth = cms.double( 4. ), minID = cms.uint32( 81 ), maxID = cms.uint32( 96 ) ) -process.p += process.triggerAnalysis + +## -- +## Append the analyser to the existing path +## +process.p *= process.triggerAnalysis diff --git a/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py b/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py deleted file mode 100644 index 34e32a0444311..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatVertex_cfg.py +++ /dev/null @@ -1,47 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -# initialize MessageLogger and output report -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.threshold = 'INFO' -process.MessageLogger.categories.append('PATSummaryTables') -process.MessageLogger.cerr.INFO = cms.untracked.PSet( - default = cms.untracked.PSet( limit = cms.untracked.int32(0) ), - PATSummaryTables = cms.untracked.PSet( limit = cms.untracked.int32(-1) ) -) -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -process.load("Configuration.StandardSequences.Geometry_cff") -process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") - -process.GlobalTag.globaltag = cms.string('IDEAL_V12::All') - -# produce PAT Layer 1 -process.load("PhysicsTools.PatAlgos.patSequences_cff") -# switch old trigger matching off -from PhysicsTools.PatAlgos.tools.trigTools import switchOffTriggerMatchingOld -switchOffTriggerMatchingOld( process ) - -# source -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - '/store/mc/Fall08/TTJets-madgraph/GEN-SIM-RECO/IDEAL_V11_redigi_v10/0000/06FC3959-4DFC-DD11-B504-00E08178C091.root', - ) -) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string("analyzePatVertex.root") -) - -process.analyzeVertex = cms.EDAnalyzer("PatVertexAnalyzer", - src = cms.InputTag("offlinePrimaryVertices"), - mc = cms.InputTag("genParticles") -) - -process.p = cms.Path( - process.patDefaultSequence * - process.analyzeVertex -) diff --git a/PhysicsTools/PatExamples/test/analyzePatZToMuMu_cfg.py b/PhysicsTools/PatExamples/test/analyzePatZToMuMu_cfg.py deleted file mode 100644 index babb161b6c3f7..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzePatZToMuMu_cfg.py +++ /dev/null @@ -1,40 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## Declare process -process = cms.Process("MuonAna") - -## Declare input -from PhysicsTools.PatExamples.samplesCERN_cff import * - -process.source = cms.Source("PoolSource", - fileNames = zjetsTracks -) - -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32( -1 ) -) - -## Message logger configuration -process.MessageLogger = cms.Service("MessageLogger") - -## Selection of good muons -from PhysicsTools.PatAlgos.selectionLayer1.muonSelector_cfi import * -process.goodMuons = selectedPatMuons.clone( - src="cleanPatMuons", - cut='pt>20. & abs(eta)<2.1 & (trackIso+caloIso)/pt<0.1', -) - -## Monitor muons -process.load("PhysicsTools.PatExamples.PatZToMuMuAnalyzer_cfi") -process.analyzeZToMuMu.muons = 'goodMuons' - -## Define output file -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzePatZToMuMu.root') -) - -process.p = cms.Path( - process.goodMuons * - process.analyzeZToMuMu -) - diff --git a/PhysicsTools/PatExamples/test/analyzeTopSelection_cfg.py b/PhysicsTools/PatExamples/test/analyzeTopSelection_cfg.py deleted file mode 100644 index 3962e886a4ee5..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzeTopSelection_cfg.py +++ /dev/null @@ -1,145 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## Define the process -process = cms.Process("Top") - -## Define the input sample -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:patTuple.root' - ) -) -## restrict the number of events for testing -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(1000) -) - -from PhysicsTools.PatExamples.samplesCERN_cff import * -##process.source.fileNames = muonSKIM ## ATTENTION these samples are NOT available on castor -##process.source.fileNames = simulationQCD ## ATTENTION these samples are NOT available on castor -##process.source.fileNames = simulationWjets -##process.source.fileNames = simulationZjets -##process.source.fileNames = simulationTtbar - -## Define the TFileService -process.TFileService = cms.Service("TFileService", -fileName = cms.string('analyzePatTopSelection.root') -##fileName = cms.string('analyzePatTopSelection_qcd.root') -##fileName = cms.string('analyzePatTopSelection_wjets.root') -##fileName = cms.string('analyzePatTopSelection_zjets.root') -##fileName = cms.string('analyzePatTopSelection_ttbar.root') -) - -## ---------------------------------------------------------------- -## Apply object selection according to TopPAG reference selection -## for ICHEP 2010. This will result in 5 additional collections: -## -## * goodJets -## * vetoElecs -## * vetoMuons -## * looseMuons -## * tightMuons -## -## Have a look ont the cff file to learn more about the exact -## selection citeria. -## ---------------------------------------------------------------- -process.load("PhysicsTools.PatExamples.topObjectSelection_cff") -process.topObjectProduction = cms.Path( - process.topObjectSelection -) - -## ---------------------------------------------------------------- -## Define the steps for the TopPAG reference selection for ICHEP -## 2010. Have a look at the WorkBookPATExampleTopQuarks. These -## are event selections. They make use of the object selections -## applied in the step above. -## ---------------------------------------------------------------- - -## Trigger bit (HLT_mu9) -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -process.step1 = hltHighLevel.clone(TriggerResultsTag = "TriggerResults::HLT", HLTPaths = ["HLT_Mu9"]) -## Vertex requirement -process.step2 = cms.EDFilter("VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) < 15 && position.Rho < 2"), filter = cms.bool(True)) -## Exact one tight muon -from PhysicsTools.PatAlgos.selectionLayer1.muonCountFilter_cfi import * -process.step3a = countPatMuons.clone(src = 'tightMuons', minNumber = 1, maxNumber = 1) -## Exact one loose muon -process.step3b = countPatMuons.clone(src = 'looseMuons', minNumber = 1, maxNumber = 1) -## Veto on additional muons -process.step4 = countPatMuons.clone(src = 'vetoMuons' , maxNumber = 1) -## Veto on additional electrons -from PhysicsTools.PatAlgos.selectionLayer1.electronCountFilter_cfi import * -process.step5 = countPatMuons.clone(src = 'vetoElecs' , maxNumber = 0) -## Different jet multiplicity selections -from PhysicsTools.PatAlgos.selectionLayer1.jetCountFilter_cfi import * -process.step6a = countPatJets.clone(src = 'goodJets' , minNumber = 1) -process.step6b = countPatJets.clone(src = 'goodJets' , minNumber = 2) -process.step6c = countPatJets.clone(src = 'goodJets' , minNumber = 3) -process.step7 = countPatJets.clone(src = 'goodJets' , minNumber = 4) - - -## ---------------------------------------------------------------- -## Define monitoring modules for the event selection. You should -## few this only as an example for an analyses technique including -## full CMSSW features, not as a complete analysis. -## ---------------------------------------------------------------- - -from PhysicsTools.PatExamples.PatTopSelectionAnalyzer_cfi import * -process.monStart = analyzePatTopSelection.clone(jets='goodJets') -process.monStep1 = analyzePatTopSelection.clone(jets='goodJets') -process.monStep2 = analyzePatTopSelection.clone(jets='goodJets') -process.monStep3a = analyzePatTopSelection.clone(muons='tightMuons', jets='goodJets') -process.monStep4 = analyzePatTopSelection.clone(muons='vetoMuons' , jets='goodJets') -process.monStep5 = analyzePatTopSelection.clone(muons='vetoMuons', elecs='vetoElecs', jets='goodJets') -process.monStep6a = analyzePatTopSelection.clone(muons='vetoMuons', elecs='vetoElecs', jets='goodJets') -process.monStep6b = analyzePatTopSelection.clone(muons='vetoMuons', elecs='vetoElecs', jets='goodJets') -process.monStep6c = analyzePatTopSelection.clone(muons='vetoMuons', elecs='vetoElecs', jets='goodJets') -process.monStep7 = analyzePatTopSelection.clone(muons='vetoMuons', elecs='vetoElecs', jets='goodJets') - - -## ---------------------------------------------------------------- -## Define the analysis paths: we define two selection paths to -## monitor the cutflow according to the TopPAG reference selection -## for ICHEP 2010. All necessary object collections have been pro- -## duced in the cms.Path topObjectProduction before hand. The out- -## put report is switched on to get a quick overview of the number -## number of events after each selection step. -## ---------------------------------------------------------------- - -## Switch output report on -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) - -## Define loose event selection path -process.looseEventSelection = cms.Path( - #process.step1 * - process.step2 * - process.step3b * - process.step4 * - process.step5 * - process.step6a * - process.step6b * - process.step6c - ) - -## Define tight event selection path -process.tightEventSelection = cms.Path( - process.monStart * - #process.step1 * - #process.monStep1 * - process.step2 * - process.monStep2 * - process.step3a * - process.monStep3a * - process.step4 * - process.monStep4 * - process.step5 * - process.monStep5 * - process.step6a * - process.monStep6a * - process.step6b * - process.monStep6b * - process.step6c * - process.monStep6c * - process.step7 * - process.monStep7 - ) diff --git a/PhysicsTools/PatExamples/test/analyzeZjetsElectrons_cfg.py b/PhysicsTools/PatExamples/test/analyzeZjetsElectrons_cfg.py deleted file mode 100644 index dc0abaaf69a20..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzeZjetsElectrons_cfg.py +++ /dev/null @@ -1,22 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:PATLayer1_Output.fromAOD_full.root' - ) -) - -process.MessageLogger = cms.Service("MessageLogger") - -process.analyzeZjetsElectrons = cms.EDAnalyzer("PatZjetsElectronAnalyzer", - src = cms.untracked.InputTag("cleanLayer1Electrons") -) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeZjetsElectrons.root') - ) - -process.p = cms.Path(process.analyzeZjetsElectrons) - diff --git a/PhysicsTools/PatExamples/test/analyzeZjetsJets_cfg.py b/PhysicsTools/PatExamples/test/analyzeZjetsJets_cfg.py deleted file mode 100644 index e25d39fd910c1..0000000000000 --- a/PhysicsTools/PatExamples/test/analyzeZjetsJets_cfg.py +++ /dev/null @@ -1,22 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process("Test") - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring( - 'file:PATLayer1_Output.fromAOD_full.root' - ) -) - -process.MessageLogger = cms.Service("MessageLogger") - -process.analyzeZjetsJets = cms.EDAnalyzer("PatZjetsJetAnalyzer", - src = cms.untracked.InputTag("cleanLayer1Jets") -) - -process.TFileService = cms.Service("TFileService", - fileName = cms.string('analyzeZjetsJets.root') - ) - -process.p = cms.Path(process.analyzeZjetsJets) - diff --git a/PhysicsTools/PatExamples/test/patBJetTags_efficiencies.C b/PhysicsTools/PatExamples/test/patBJetTags_efficiencies.C deleted file mode 100644 index 1510071099bca..0000000000000 --- a/PhysicsTools/PatExamples/test/patBJetTags_efficiencies.C +++ /dev/null @@ -1,225 +0,0 @@ -// name of analyzer -static const char *directory = "analyzeBJetTags"; - -static const char *algos[] = { "TC", "SSV", "CSV", 0 }; - -static const char *algoNames[] = { - "Track Counting (high efficiency)", - "Simple Secondary Vertex", - "Combined Secondary Vertex", - 0 -}; - -static const char *flavours[] = { "b", "c", "udsg", 0 }; - -void patBJetTags_efficiencies() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatBJetTags.root"); - - TH1 *total = (TH1*)file->Get(Form("%s/flavours", directory)); - unsigned int j = 0; - for(const char **algo = algos; *algo; algo++, j++) { - TLegend *legend[3] = { 0, 0, 0 }; - - // draw canvas with efficiencies - TCanvas *canv; - canv = new TCanvas(*algo, Form("%s efficiencies", algoNames[j]), 800, 300); - canv->Divide(3, 1); - - TH1 *effVsCutB = 0; - unsigned int i = 0; - for(const char **flavour = flavours; *flavour; flavour++, i++) { - TH1 *h = (TH1*)file->Get(Form("%s/discr%s_%s", directory, *algo, *flavour)); - TH1 *discrShape = (TH1*)h->Clone(Form("%s_discrShape", h->GetName())); - discrShape->Scale(1.0 / discrShape->Integral()); - discrShape->SetMaximum(discrShape->GetMaximum() * 5); - TH1 *effVsCut = computeEffVsCut(h, total->GetBinContent(4 - i)); - TH1 *effVsBEff = 0; - - if (flavour == flavours) // b-jets - effVsCutB = effVsCut; - else - effVsBEff = computeEffVsBEff(effVsCut, effVsCutB); - - discrShape->SetTitle("discriminator shape"); - effVsCut->SetTitle("efficiency versus discriminator cut"); - if (effVsBEff) - effVsBEff->SetTitle("mistag versus b efficiency"); - - setHistStyle(discrShape); - setHistStyle(effVsCut); - setHistStyle(effVsBEff); - - canv->cd(1); - gPad->SetLogy(1); - gPad->SetGridy(1); - discrShape->SetLineColor(i + 1); - discrShape->SetMarkerColor(i + 1); - discrShape->Draw(i > 0 ? "same" : ""); - if (!legend[0]) - legend[0] = new TLegend(0.5, 0.7, 0.78, 0.88); - legend[0]->AddEntry(discrShape, *flavour); - - canv->cd(2); - gPad->SetLogy(1); - gPad->SetGridy(1); - effVsCut->SetLineColor(i + 1); - effVsCut->SetMarkerColor(i + 1); - effVsCut->Draw(i > 0 ? "same" : ""); - if (!legend[1]) - legend[1] = new TLegend(0.3, 0.4, 0.58, 0.58); - legend[1]->AddEntry(effVsCut, *flavour); - - if (!effVsBEff) - continue; - canv->cd(3); - gPad->SetLogy(1); - gPad->SetGridx(1); - gPad->SetGridy(1); - effVsBEff->SetLineColor(i + 1); - effVsBEff->SetMarkerColor(i + 1); - effVsBEff->Draw(i > 1 ? "same" : ""); - if (!legend[2]) - legend[2] = new TLegend(0.12, 0.7, 0.40, 0.88); - legend[2]->AddEntry(effVsBEff, *flavour); - } - - canv->cd(1); - legend[0]->Draw(); - - canv->cd(2); - legend[1]->Draw(); - - canv->cd(3); - legend[2]->Draw(); - } -} - -TH1 *computeEffVsCut(TH1 *discrShape, double total) -{ - TH1 *h = discrShape->Clone(Form("%s_effVsCut", discrShape->GetName())); - h->Sumw2(); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = h->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double efficiency = h->Integral(bin, n + 1) / total; - double error = sqrt(efficiency * (1 - efficiency) / total); - h->SetBinContent(bin, efficiency); - h->SetBinError(bin, error); - } - - return h; -} - -TH1 *computeEffVsBEff(TH1 *effVsCut, TH1 *effVsCutB) -{ - TH1 *h = new TH1F(Form("%s_effVsBEff", effVsCut->GetName()), "effVsBEff", - 100, 0, 1); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = effVsCut->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double eff = effVsCut->GetBinContent(bin); - double error = effVsCut->GetBinError(bin); - double effB = effVsCutB->GetBinContent(bin); - - h->SetBinContent(h->FindBin(effB), eff); - h->SetBinError(h->FindBin(effB), error); - // FIXME: The error in effB is not propagated - } - - return h; -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - if (!hist) - return; - - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patBJetTracks_efficiencies.C b/PhysicsTools/PatExamples/test/patBJetTracks_efficiencies.C deleted file mode 100644 index 0b89fbbbe4008..0000000000000 --- a/PhysicsTools/PatExamples/test/patBJetTracks_efficiencies.C +++ /dev/null @@ -1,287 +0,0 @@ -// name of analyzer -static const char *directory = "analyzeBJetTracks"; - -static const char *flavours[] = { "b", "c", "udsg", 0 }; - -void patBJetTracks_efficiencies() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatBJetTracks.root"); - - TLegend *legend[3] = { 0, 0, 0 }; - - // draw canvas with efficiencies - - TCanvas *canv; - canv = new TCanvas("canv0", "hand-crafted track counting efficiencies", 800, 300); - canv->Divide(3, 1); - - TH1 *total = (TH1*)file->Get(Form("%s/flavours", directory)); - TH1 *effVsCutB = 0; - unsigned int i = 0; - for(const char **flavour = flavours; *flavour; flavour++, i++) { - TH1 *h = (TH1*)file->Get(Form("%s/trackIPSig_%s", directory, *flavour)); - TH1 *discrShape = (TH1*)h->Clone(Form("%s_discrShape", h->GetName())); - discrShape->Scale(1.0 / discrShape->Integral()); - discrShape->SetMaximum(discrShape->GetMaximum() * 5); - TH1 *effVsCut = computeEffVsCut(h, total->GetBinContent(4 - i)); - TH1 *effVsBEff = 0; - - if (flavour == flavours) // b-jets - effVsCutB = effVsCut; - else - effVsBEff = computeEffVsBEff(effVsCut, effVsCutB); - - discrShape->SetTitle("discriminator shape"); - effVsCut->SetTitle("efficiency versus discriminator cut"); - if (effVsBEff) - effVsBEff->SetTitle("mistag versus b efficiency"); - - setHistStyle(discrShape); - setHistStyle(effVsCut); - setHistStyle(effVsBEff); - - canv->cd(1); - gPad->SetLogy(1); - gPad->SetGridy(1); - discrShape->SetLineColor(i + 1); - discrShape->SetMarkerColor(i + 1); - discrShape->Draw(i > 0 ? "same" : ""); - if (!legend[0]) - legend[0] = new TLegend(0.5, 0.7, 0.78, 0.88); - legend[0]->AddEntry(discrShape, *flavour); - - canv->cd(2); - gPad->SetLogy(1); - gPad->SetGridy(1); - effVsCut->SetLineColor(i + 1); - effVsCut->SetMarkerColor(i + 1); - effVsCut->Draw(i > 0 ? "same" : ""); - if (!legend[1]) - legend[1] = new TLegend(0.12, 0.12, 0.40, 0.30); - legend[1]->AddEntry(effVsCut, *flavour); - - if (!effVsBEff) - continue; - canv->cd(3); - gPad->SetLogy(1); - gPad->SetGridx(1); - gPad->SetGridy(1); - effVsBEff->SetLineColor(i + 1); - effVsBEff->SetMarkerColor(i + 1); - effVsBEff->Draw(i > 1 ? "same" : ""); - if (!legend[2]) - legend[2] = new TLegend(0.12, 0.7, 0.40, 0.88); - legend[2]->AddEntry(effVsBEff, *flavour); - } - - canv->cd(1); - legend[0]->Draw(); - - canv->cd(2); - legend[1]->Draw(); - - canv->cd(3); - legend[2]->Draw(); - - //////////////////////////////////////////// - - // canvas to compare negative tagger with light flavour mistag - - TCanvas *canv; - canv = new TCanvas("canv1", "comparing light flavour mistag with negative tagger", 530, 300); - canv->Divide(2, 1); - - TH1 *h1 = (TH1*)file->Get(Form("%s/trackIPSig_udsg", directory)); - TH1 *h2 = (TH1*)file->Get(Form("%s/negativeIPSig_all", directory)); - h2 = invertHisto(h2); // invert x-axis - - TH1 *discrShape1 = (TH1*)h1->Clone("discrShape1"); - TH1 *discrShape2 = (TH1*)h2->Clone("discrShape2"); - - discrShape1->Scale(1.0 / discrShape1->Integral()); - discrShape1->SetMaximum(discrShape1->GetMaximum() * 5); - discrShape2->Scale(1.0 / discrShape2->Integral()); - - TH1 *effVsCut1 = computeEffVsCut(h1, total->GetBinContent(2)); - TH1 *effVsCut2 = computeEffVsCut(h2, total->GetBinContent(1)); - - discrShape1->SetTitle("discriminator shape"); - effVsCut1->SetTitle("efficiency versus discriminator cut"); - - setHistStyle(discrShape1); - setHistStyle(discrShape2); - setHistStyle(effVsCut1); - setHistStyle(effVsCut2); - - canv->cd(1); - gPad->SetLogy(1); - gPad->SetGridy(1); - discrShape1->SetLineColor(1); - discrShape1->SetMarkerColor(1); - discrShape2->SetLineColor(2); - discrShape2->SetMarkerColor(2); - - discrShape1->Draw(); - discrShape2->Draw("same"); - - TLegend *l = new TLegend(0.5, 0.7, 0.78, 0.88); - l->AddEntry(discrShape1, "udsg"); - l->AddEntry(discrShape2, "inv. neg"); - l->Draw(); - - canv->cd(2); - gPad->SetLogy(1); - gPad->SetGridy(1); - effVsCut1->SetLineColor(1); - effVsCut1->SetMarkerColor(1); - effVsCut2->SetLineColor(2); - effVsCut2->SetMarkerColor(2); - - effVsCut1->Draw(); - effVsCut2->Draw("same"); - - l = new TLegend(0.5, 0.7, 0.78, 0.88); - l->AddEntry(effVsCut1, "udsg"); - l->AddEntry(effVsCut2, "inv. neg"); - l->Draw(); -} - -TH1 *computeEffVsCut(TH1 *discrShape, double total) -{ - TH1 *h = discrShape->Clone(Form("%s_effVsCut", discrShape->GetName())); - h->Sumw2(); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = h->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double efficiency = h->Integral(bin, n + 1) / total; - double error = sqrt(efficiency * (1 - efficiency) / total); - h->SetBinContent(bin, efficiency); - h->SetBinError(bin, error); - } - - return h; -} - -TH1 *computeEffVsBEff(TH1 *effVsCut, TH1 *effVsCutB) -{ - TH1 *h = new TH1F(Form("%s_effVsBEff", effVsCut->GetName()), "effVsBEff", - 100, 0, 1); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = effVsCut->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double eff = effVsCut->GetBinContent(bin); - double error = effVsCut->GetBinError(bin); - double effB = effVsCutB->GetBinContent(bin); - - h->SetBinContent(h->FindBin(effB), eff); - h->SetBinError(h->FindBin(effB), error); - // FIXME: The error in effB is not propagated - } - - return h; -} - -TH1 *invertHisto(TH1 *h) -{ - unsigned int n = h->GetNbinsX(); - TH1 *inv = new TH1F(Form("%s_inverted", h->GetName()), "inverted", - n, -h->GetXaxis()->GetXmax(), -h->GetXaxis()->GetXmin()); - for(unsigned int i = 0; i <= n + 1; i++) - inv->SetBinContent(n + 1 - i, h->GetBinContent(i)); - - return inv; -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - if (!hist) - return; - - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patBJetTracks_showPlots.C b/PhysicsTools/PatExamples/test/patBJetTracks_showPlots.C deleted file mode 100644 index e4f1de192c022..0000000000000 --- a/PhysicsTools/PatExamples/test/patBJetTracks_showPlots.C +++ /dev/null @@ -1,163 +0,0 @@ -// name of analyzer -static const char *directory = "analyzeBJetTracks"; - -static const char *plots[] = { - "allIP", "allIPErr", "allIPSig", - "trackIP", "trackIPErr", "trackIPSig", - "negativeIP", "negativeIPErr", "negativeIPSig", - "allDeltaR", "nTracks", - 0 -}; - -static const char *flavours[] = { "b", "c", "udsg", 0 }; - -void patBJetTracks_showPlots() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatBJetTracks.root"); - - // draw canvas with track observables - unsigned int i = 3; - unsigned int j = 0; - TCanvas *canv; - for(const char **plot = plots; *plot; plot++) { - if (i >= 3) { - canv = new TCanvas(Form("canv%d", j++), "track counting variables", 800, 400); - canv->Divide(3, 2); - i -= 3; - } - - canv->cd(i + 1); - if (TString(*plot).Contains("IP")) - gPad->SetLogy(1); - TH1 *h = (TH1*)file->Get(Form("%s/%s_all", directory, *plot)); - TString title = h->GetTitle(); - if (TString(*plot).Contains("IP") || TString(*plot).Contains("nTrack")) - title.Resize(title.Index(" in ")); - else if (TString(*plot).Contains("DeltaR")) { - title.Resize(title.Index(" and ")); - title += " and jet"; - } - h->SetTitle(title); - setHistStyle(h); - h->Draw(); - TLegend *l = new TLegend(0.6, 0.75, 0.85, 0.85); - l->AddEntry(h, "all"); - l->Draw(); - - canv->cd(i + 4); - unsigned int k = 1; - if (TString(*plot).Contains("IP")) - gPad->SetLogy(1); - l = new TLegend(0.5, 0.6, 0.85, 0.85); - for(const char **flavour = flavours; *flavour; flavour++) { - h = (TH1*)file->Get(Form("%s/%s_%s", directory, *plot, *flavour)); - title = h->GetTitle(); - if (TString(*plot).Contains("IP") || TString(*plot).Contains("nTrack")) - title.Resize(title.Index(" in ")); - else if (TString(*plot).Contains("DeltaR")) { - title.Resize(title.Index(" and ")); - title += " and jet"; - } - h->SetTitle(title); - setHistStyle(h); - h->SetMarkerColor(k); - h->SetLineColor(k++); - h->DrawNormalized(k > 1 ? "same" : ""); - l->AddEntry(h, *flavour); - } - l->Draw(); - i++; - } - - canv->cd(3); - TH1 *h = (TH1*)file->Get(Form("%s/flavours", directory)); - setHistStyle(h); - h->Draw(); -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patBJetVertex_efficiencies.C b/PhysicsTools/PatExamples/test/patBJetVertex_efficiencies.C deleted file mode 100644 index fc0f9b27f835c..0000000000000 --- a/PhysicsTools/PatExamples/test/patBJetVertex_efficiencies.C +++ /dev/null @@ -1,224 +0,0 @@ -// name of analyzer -static const char *directory = "analyzeBJetVertex"; - -static const char *algos[] = { "distSig", "mass", 0 }; - -static const char *algoNames[] = { - "flight distance significance", - "vertex mass", - 0 -}; - -static const char *flavours[] = { "b", "c", "udsg", 0 }; - -void patBJetVertex_efficiencies() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatBJetVertex.root"); - - unsigned int j = 0; - for(const char **algo = algos; *algo; algo++, j++) { - TLegend *legend[3] = { 0, 0, 0 }; - - // draw canvas with efficiencies - TCanvas *canv; - canv = new TCanvas(*algo, Form("%s efficiencies", algoNames[j]), 800, 300); - canv->Divide(3, 1); - - TH1 *total = (TH1*)file->Get(Form("%s/flavours", directory)); - TH1 *effVsCutB = 0; - unsigned int i = 0; - for(const char **flavour = flavours; *flavour; flavour++, i++) { - TH1 *h = (TH1*)file->Get(Form("%s/%s_%s", directory, *algo, *flavour)); - TH1 *discrShape = (TH1*)h->Clone(Form("%s_discrShape", h->GetName())); - discrShape->Scale(1.0 / discrShape->Integral()); - discrShape->SetMaximum(discrShape->GetMaximum() * 5); - TH1 *effVsCut = computeEffVsCut(h, total->GetBinContent(4 - i)); - TH1 *effVsBEff = 0; - - if (flavour == flavours) // b-jets - effVsCutB = effVsCut; - else - effVsBEff = computeEffVsBEff(effVsCut, effVsCutB); - - discrShape->SetTitle("discriminator shape"); - effVsCut->SetTitle("efficiency versus discriminator cut"); - if (effVsBEff) - effVsBEff->SetTitle("mistag versus b efficiency"); - - setHistStyle(discrShape); - setHistStyle(effVsCut); - setHistStyle(effVsBEff); - - canv->cd(1); - gPad->SetLogy(1); - gPad->SetGridy(1); - discrShape->SetLineColor(i + 1); - discrShape->SetMarkerColor(i + 1); - discrShape->Draw(i > 0 ? "same" : ""); - if (!legend[0]) - legend[0] = new TLegend(0.5, 0.7, 0.78, 0.88); - legend[0]->AddEntry(discrShape, *flavour); - - canv->cd(2); - gPad->SetLogy(1); - gPad->SetGridy(1); - effVsCut->SetLineColor(i + 1); - effVsCut->SetMarkerColor(i + 1); - effVsCut->Draw(i > 0 ? "same" : ""); - if (!legend[1]) - legend[1] = new TLegend(0.3, 0.4, 0.58, 0.58); - legend[1]->AddEntry(effVsCut, *flavour); - - if (!effVsBEff) - continue; - canv->cd(3); - gPad->SetLogy(1); - gPad->SetGridx(1); - gPad->SetGridy(1); - effVsBEff->SetLineColor(i + 1); - effVsBEff->SetMarkerColor(i + 1); - effVsBEff->Draw(i > 1 ? "same" : ""); - if (!legend[2]) - legend[2] = new TLegend(0.12, 0.7, 0.40, 0.88); - legend[2]->AddEntry(effVsBEff, *flavour); - } - - canv->cd(1); - legend[0]->Draw(); - - canv->cd(2); - legend[1]->Draw(); - - canv->cd(3); - legend[2]->Draw(); - } -} - -TH1 *computeEffVsCut(TH1 *discrShape, double total) -{ - TH1 *h = discrShape->Clone(Form("%s_effVsCut", discrShape->GetName())); - h->Sumw2(); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = h->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double efficiency = h->Integral(bin, n + 1) / total; - double error = sqrt(efficiency * (1 - efficiency) / total); - h->SetBinContent(bin, efficiency); - h->SetBinError(bin, error); - } - - return h; -} - -TH1 *computeEffVsBEff(TH1 *effVsCut, TH1 *effVsCutB) -{ - TH1 *h = new TH1F(Form("%s_effVsBEff", effVsCut->GetName()), "effVsBEff", - 100, 0, 1); - h->SetMaximum(1.5); - h->SetMinimum(1e-3); - - unsigned int n = effVsCut->GetNbinsX(); - for(unsigned int bin = 1; bin <= n; bin++) { - double eff = effVsCut->GetBinContent(bin); - double error = effVsCut->GetBinError(bin); - double effB = effVsCutB->GetBinContent(bin); - - h->SetBinContent(h->FindBin(effB), eff); - h->SetBinError(h->FindBin(effB), error); - // FIXME: The error in effB is not propagated - } - - return h; -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - if (!hist) - return; - - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patBJetVertex_showPlots.C b/PhysicsTools/PatExamples/test/patBJetVertex_showPlots.C deleted file mode 100644 index 8fd1d36ea7cb2..0000000000000 --- a/PhysicsTools/PatExamples/test/patBJetVertex_showPlots.C +++ /dev/null @@ -1,151 +0,0 @@ -// name of analyzer -static const char *directory = "analyzeBJetVertex"; - -static const char *plots[] = { - "dist", "distErr", "distSig", - "nTracks", "nVertices", "mass", "chi2", "deltaR", - 0 -}; - -static const char *flavours[] = { "b", "c", "udsg", 0 }; - -void patBJetVertex_showPlots() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatBJetVertex.root"); - - // draw canvas with track observables - unsigned int i = 3; - unsigned int j = 0; - - for(const char **plot = plots; *plot; plot++) { - if (i >= 3) { - canv = new TCanvas(Form("canv%d", j++), "secondary vertex variables", 800, 400); - canv->Divide(3, 2); - i -= 3; - } - - canv->cd(i + 1); - if (TString(*plot).Contains("dist")) - gPad->SetLogy(1); - TH1 *h = (TH1*)file->Get(Form("%s/%s_all", directory, *plot)); - TString title = h->GetTitle(); - title.Resize(title.Index(" in ")); - h->SetTitle(title); - setHistStyle(h); - h->Draw(); - TLegend *l = new TLegend(0.6, 0.75, 0.85, 0.85); - l->AddEntry(h, "all"); - l->Draw(); - - canv->cd(i + 4); - unsigned int k = 1; - if (TString(*plot).Contains("dist")) - gPad->SetLogy(1); - l = new TLegend(0.5, 0.6, 0.85, 0.85); - for(const char **flavour = flavours; *flavour; flavour++) { - h = (TH1*)file->Get(Form("%s/%s_%s", directory, *plot, *flavour)); - title = h->GetTitle(); - title.Resize(title.Index(" in ")); - h->SetTitle(title); - setHistStyle(h); - h->SetMarkerColor(k); - h->SetLineColor(k++); - h->DrawNormalized(k > 1 ? "same" : ""); - l->AddEntry(h, *flavour); - } - l->Draw(); - i++; - } - - canv->cd(3); - TH1 *h = (TH1*)file->Get(Form("%s/flavours", directory)); - setHistStyle(h); - h->Draw(); -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patElectron_eidEfficiency.C b/PhysicsTools/PatExamples/test/patElectron_eidEfficiency.C deleted file mode 100644 index a04505a0127d4..0000000000000 --- a/PhysicsTools/PatExamples/test/patElectron_eidEfficiency.C +++ /dev/null @@ -1,195 +0,0 @@ -void patElectron_eidEfficiency() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatElectron.root"); - - // get probe histograms - // TH1F* proPt_ = file->Get("tightElectronID/pt"); - // TH1F* proEta_ = file->Get("tightElectronID/eta"); - // TH1F* proPhi_ = file->Get("tightElectronID/phi"); - - // get probe histograms - TH1F* proPt_ = file->Get("looseElectronID/pt"); - TH1F* proEta_ = file->Get("looseElectronID/eta"); - TH1F* proPhi_ = file->Get("looseElectronID/phi"); - - // get reference histograms - TH1F* refPt_ = file->Get("plainElectronID/pt"); - TH1F* refEta_ = file->Get("plainElectronID/eta"); - TH1F* refPhi_ = file->Get("plainElectronID/phi"); - - // draw canvas with electron kinematics - TCanvas* canv0 = new TCanvas("canv0", "electron kinemtics", 600, 300); - canv0->Divide(2,1); - canv0->cd(1); - TH1F* kinPt_=proPt_->Clone(); - kinPt_->SetFillStyle(3005.); - kinPt_->SetFillColor(4.); - setHistStyle(kinPt_); - kinPt_ ->DrawCopy(); - - canv0->cd(2); - TH1F* kinEta_=proEta_->Clone(); - kinEta_->SetFillStyle(3005.); - kinEta_->SetFillColor(4.); - setHistStyle(kinEta_); - kinEta_->DrawCopy(); - - // draw canvas with electronID efficiencies - TCanvas* canv1 = new TCanvas("canv1", "electron ID efficiency", 600, 600); - canv1->Divide(2,2); - if(correlatedError(proPt_, refPt_ )==0){ - canv1->cd(1); - canv1->GetPad(1)->SetGridx(1); - canv1->GetPad(1)->SetGridy(1); - proPt_ ->SetMaximum(1.3); - setHistStyle(proPt_); - proPt_ ->DrawCopy(); - } - if(correlatedError(proEta_, refEta_)==0){ - canv1->cd(2); - canv1->GetPad(2)->SetGridx(1); - canv1->GetPad(2)->SetGridy(1); - proEta_ ->SetMaximum(1.3); - setHistStyle(proEta_); - proEta_->DrawCopy(); - } - if(correlatedError(proPhi_, refPhi_)==0){ - canv1->cd(3); - canv1->GetPad(3)->SetGridx(1); - canv1->GetPad(3)->SetGridy(1); - proPhi_ ->SetMaximum(1.3); - setHistStyle(proPhi_); - proPhi_->DrawCopy(); - } -} - -int correlatedError(TH1F* nominator, TH1F* denominator) -{ - // -------------------------------------------------- - // get error of correlated ratio for two histograms - // for gaussian distributed quantities the formular - // - // * de=e*Sqrt((dr/r)^2+(1-2e)*(dv/d)^2) - // - // turns automatically into - // - // * de=Sqrt(e*(1-e)/r) - // -------------------------------------------------- - if(nominator->GetNbinsX()!=denominator->GetNbinsX()){ - // these histogramsd do not correspond to each other - return -1; - } - - // loop over the denominator bins - for(Int_t i=0; iGetNbinsX(); ++i){ - float dval = nominator->GetBinError(i+1); - float val = nominator->GetBinContent(i+1); - float dref = denominator->GetBinError(i+1); - float ref = denominator->GetBinContent(i+1); - - float err; - if(val<=0){ - // val should never be smaller than 0 - err=0; continue; - } - if(ref==0){ - // ref should never be 0 - err=0; continue; - } - - if(val/ref<1) - err=(val/ref)*TMath::Sqrt(TMath::Abs((dref*dref)/(ref*ref)+(1.-2.*(val/ref))*(dval*dval)/(val*val))); - else - err=(ref/val)*TMath::Sqrt(TMath::Abs((dval*dval)/(val*val)+(1.-2.*(ref/val))*(dref*dref)/(ref*ref))); - - // set proper values and errors - nominator->SetBinContent(i+1, val/ref); - nominator->SetBinError(i+1, err); - } - return 0; -} - -void setAxisStyle(TH1* hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1F* hist) -{ - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(3.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patElectron_recoEfficiency.C b/PhysicsTools/PatExamples/test/patElectron_recoEfficiency.C deleted file mode 100644 index c5823c32b4fd6..0000000000000 --- a/PhysicsTools/PatExamples/test/patElectron_recoEfficiency.C +++ /dev/null @@ -1,190 +0,0 @@ -void patElectron_recoEfficiency() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatElectron.root"); - - // get reco histograms - TH1F* recPt_ = file->Get("analyzePatElectron/pt"); - TH1F* recEta_ = file->Get("analyzePatElectron/eta"); - TH1F* recPhi_ = file->Get("analyzePatElectron/phi"); - - // get gene histograms - TH1F* genPt_ = file->Get("analyzePatElectron/genPt"); - TH1F* genEta_ = file->Get("analyzePatElectron/genEta"); - TH1F* genPhi_ = file->Get("analyzePatElectron/genPhi"); - - // draw canvas with electron kinematics - TCanvas* canv0 = new TCanvas("canv0", "electron kinemtics", 600, 300); - canv0->Divide(2,1); - canv0->cd(1); - TH1F* kinPt_=recPt_->Clone(); - kinPt_->SetFillStyle(3005.); - kinPt_->SetFillColor(4.); - setHistStyle(kinPt_); - kinPt_ ->DrawCopy(); - - canv0->cd(2); - TH1F* kinEta_=recEta_->Clone(); - kinEta_->SetFillStyle(3005.); - kinEta_->SetFillColor(4.); - setHistStyle(kinEta_); - kinEta_->DrawCopy(); - - // draw canvas with reco efficiencies - TCanvas* canv1 = new TCanvas("canv1", "electron reco efficiency", 600, 600); - canv1->Divide(2,2); - if(correlatedError(recPt_, genPt_ )==0){ - canv1->cd(1); - canv1->GetPad(1)->SetGridx(1); - canv1->GetPad(1)->SetGridy(1); - recPt_ ->SetMaximum(1.3); - setHistStyle(recPt_); - recPt_ ->DrawCopy(); - } - if(correlatedError(recEta_, genEta_)==0){ - canv1->cd(2); - canv1->GetPad(2)->SetGridx(1); - canv1->GetPad(2)->SetGridy(1); - recEta_ ->SetMaximum(1.3); - setHistStyle(recEta_); - recEta_->DrawCopy(); - } - if(correlatedError(recPhi_, genPhi_)==0){ - canv1->cd(3); - canv1->GetPad(3)->SetGridx(1); - canv1->GetPad(3)->SetGridy(1); - recPhi_ ->SetMaximum(1.3); - setHistStyle(recPhi_); - recPhi_->DrawCopy(); - } -} - -int correlatedError(TH1F* nominator, TH1F* denominator) -{ - // -------------------------------------------------- - // get error of correlated ratio for two histograms - // for gaussian distributed quantities the formular - // - // * de=e*Sqrt((dr/r)^2+(1-2e)*(dv/d)^2) - // - // turns automatically into - // - // * de=Sqrt(e*(1-e)/r) - // -------------------------------------------------- - if(nominator->GetNbinsX()!=denominator->GetNbinsX()){ - // these histogramsd do not correspond to each other - return -1; - } - - // loop over the denominator bins - for(Int_t i=0; iGetNbinsX(); ++i){ - float dval = nominator->GetBinError(i+1); - float val = nominator->GetBinContent(i+1); - float dref = denominator->GetBinError(i+1); - float ref = denominator->GetBinContent(i+1); - - float err; - if(val<=0){ - // val should never be smaller than 0 - err=0; continue; - } - if(ref==0){ - // ref should never be 0 - err=0; continue; - } - - if(val/ref<1) - err=(val/ref)*TMath::Sqrt(TMath::Abs((dref*dref)/(ref*ref)+(1.-2.*(val/ref))*(dval*dval)/(val*val))); - else - err=(ref/val)*TMath::Sqrt(TMath::Abs((dval*dval)/(val*val)+(1.-2.*(ref/val))*(dref*dref)/(ref*ref))); - - // set proper values and errors - nominator->SetBinContent(i+1, val/ref); - nominator->SetBinError(i+1, err); - } - return 0; -} - -void setAxisStyle(TH1* hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1F* hist) -{ - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(3.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patTau_idEfficiency.C b/PhysicsTools/PatExamples/test/patTau_idEfficiency.C deleted file mode 100644 index a82670978e0a8..0000000000000 --- a/PhysicsTools/PatExamples/test/patTau_idEfficiency.C +++ /dev/null @@ -1,63 +0,0 @@ -void showEfficiency(TCanvas& canvas, TH1* hTauJetPtDiscrPassed, const char* paramName, const char* xAxisLabel) -{ -//--- auxiliary function to show a single efficiency plot -// and save the result in an .eps file - - TString plotTitle = TString("Tau Id. Efficiency as function of").Append(" ").Append(paramName); - hTauJetPtDiscrPassed->SetTitle(plotTitle.Data()); - - hTauJetPtDiscrPassed->SetMinimum(0.); - hTauJetPtDiscrPassed->SetMaximum(1.2); - - hTauJetPtDiscrPassed->SetXTitle(paramName); - hTauJetPtDiscrPassed->SetYTitle("#varepsilon"); - - hTauJetPtDiscrPassed->Draw("e1p"); - - canvas.Update(); - - TString outputFileName = TString("tauIdEff").Append("_").Append(paramName).Append(".eps"); - canvas.Print(outputFileName.Data()); -} - -void patTau_idEfficiency() -{ -//--- open ROOT file - TFile inputFile("patTau_Histograms.root"); - -//--- descend into directory containing histograms -// written by TFileService - TDirectory* inputDir = (TDirectory*)inputFile.Get("analyzePatTau"); - - TH1* hTauJetPt = (TH1*)inputDir->Get("TauJetPt"); - TH1* hTauJetEta = (TH1*)inputDir->Get("TauJetEta"); - TH1* hTauJetPhi = (TH1*)inputDir->Get("TauJetPhi"); - - TH1* hTauJetPtDiscrPassed = (TH1*)inputDir->Get("TauJetPtIsoPassed"); - TH1* hTauJetEtaDiscrPassed = (TH1*)inputDir->Get("TauJetEtaIsoPassed"); - TH1* hTauJetPhiDiscrPassed = (TH1*)inputDir->Get("TauJetPhiIsoPassed"); - -//--- compute tau id. efficiency as function of Pt, Eta and Phi -// by dividing histograms; -// enable computation of uncertainties (binomial errors) -// by calling TH1::Sumw2 before TH1::Divide - hTauJetPtDiscrPassed->Sumw2(); - hTauJetPtDiscrPassed->Divide(hTauJetPtDiscrPassed, hTauJetPt, 1., 1., "B"); - hTauJetEtaDiscrPassed->Sumw2(); - hTauJetEtaDiscrPassed->Divide(hTauJetEtaDiscrPassed, hTauJetEta, 1., 1., "B"); - hTauJetPhiDiscrPassed->Sumw2(); - hTauJetPhiDiscrPassed->Divide(hTauJetPhiDiscrPassed, hTauJetPhi, 1., 1., "B"); - -//--- create canvas on which to draw the plots; -// switch background color from (light)grey to white - TCanvas canvas("plotPatTauEff", "plotPatTauEff", 800, 600); - canvas.SetFillColor(10); - -//--- draw efficiciency plots - showEfficiency(canvas, hTauJetPtDiscrPassed, "Pt", "P_{T} / GeV"); - showEfficiency(canvas, hTauJetEtaDiscrPassed, "Eta", "#eta"); - showEfficiency(canvas, hTauJetPhiDiscrPassed, "Phi", "#phi"); - -//--- close ROOT file - inputFile.Close(); -} diff --git a/PhysicsTools/PatExamples/test/patTracks_showPlots.C b/PhysicsTools/PatExamples/test/patTracks_showPlots.C deleted file mode 100644 index 542d011a78a54..0000000000000 --- a/PhysicsTools/PatExamples/test/patTracks_showPlots.C +++ /dev/null @@ -1,164 +0,0 @@ -// change this to analyzeMuons to analyze the selected PAT layer 1 muons -static const char *directory = "analyzeTracks"; -//static const char *directory = "analyzeMuons"; - -static const char *qualities[] = { - "loose", "tight", "highPurity", -// "undefQuality", - 0 -}; - -static const char *plots[] = { - "pt", "ptErr", "eta", - "invPt", "invPtErr", "phi", - "d0", "d0Err", "nHits", - 0 -}; - -static const char *components[] = { - "pxb", "pxe", - "tib", "tid", "tob", "tec", - 0 -}; - -void patTracks_showPlots() -{ - // define proper canvas style - setNiceStyle(); - gStyle->SetOptStat(0); - - // open file - TFile* file = new TFile("analyzePatTracks.root"); - - // draw canvas with track observables - TCanvas* canv0 = new TCanvas("canv0", "track variables", 800, 600); - canv0->Divide(3, 3); - - unsigned int i = 1; - for(const char **plot = plots; *plot; plot++, i++) { - canv0->cd(i); - unsigned int j = 0; - - TLegend *l = new TLegend(0.6, 0.6, 0.85, 0.85); - - for(const char **quality = qualities; *quality; quality++, j++) { - TH1 *h = file->Get(Form("%s/%s_%s", directory, *plot, *quality)); - TString title = h->GetTitle(); - title.Resize(title.Length() - (strlen(*quality) + 3)); - h->SetTitle(title); - setHistStyle(h); - h->SetLineColor(j + 2); - h->SetMarkerColor(j + 2); - h->Draw(j ? "same" : ""); - l->AddEntry(h, *quality); - } - - l->Draw(); - } - - // draw canvas for hits tracking components - TCanvas* canv1 = new TCanvas("canv1", "tracking components", 800, 600); - - THStack *hs = new THStack("components", "average #hits in tracking components"); - TLegend *l = new TLegend(0.12, 0.15, 0.45, 0.35); - const char *quality = qualities[0]; - unsigned int i = 0; - for(const char **component = components; *component; component++, i++) { - TProfile *p = file->Get(Form("%s/%sHitsEta_%s", directory, *component, quality)); - TString title = p->GetTitle(); - title.Resize(title.Length() - (strlen(quality) + 3)); - setHistStyle(p); - TH1 *h = new TH1F(*component, title, p->GetNbinsX(), p->GetXaxis()->GetXmin(), p->GetXaxis()->GetXmax()); - for(unsigned int j = 1; j <= p->GetNbinsX(); j++) - h->SetBinContent(j, p->GetBinContent(j)); - h->SetLineColor(kBlack); - h->SetMarkerColor(kBlack); - h->SetFillColor(i + 2); - hs->Add(h); - l->AddEntry(h); - } - hs->Draw(); - l->Draw(); -} - -void setAxisStyle(TH1 *hist) { - // -------------------------------------------------- - // define proper axsis style for a given histogram - // -------------------------------------------------- - hist->GetXaxis()->SetTitleSize( 0.06); - hist->GetXaxis()->SetTitleColor( 1); - hist->GetXaxis()->SetTitleOffset( 0.8); - hist->GetXaxis()->SetTitleFont( 62); - hist->GetXaxis()->SetLabelSize( 0.05); - hist->GetXaxis()->SetLabelFont( 62); - hist->GetXaxis()->CenterTitle(); - hist->GetXaxis()->SetNdivisions( 505); - - hist->GetYaxis()->SetTitleSize( 0.07); - hist->GetYaxis()->SetTitleColor( 1); - hist->GetYaxis()->SetTitleOffset( 0.5); - hist->GetYaxis()->SetTitleFont( 62); - hist->GetYaxis()->SetLabelSize( 0.05); - hist->GetYaxis()->SetLabelFont( 62); -} - -void setHistStyle(TH1 *hist) -{ - // -------------------------------------------------- - // define proper histogram style - // -------------------------------------------------- - setAxisStyle(hist); - hist->GetXaxis()->SetTitle(hist->GetTitle()); - hist->SetTitle(); - hist->SetLineColor(4.); - hist->SetLineWidth(2.); - hist->SetMarkerSize(0.75); - hist->SetMarkerColor(4.); - hist->SetMarkerStyle(20.); -} - -void setNiceStyle() -{ - gROOT->SetStyle("Plain"); - - // -------------------------------------------------- - // define proper canvas style - // -------------------------------------------------- - TStyle *MyStyle = new TStyle ("MyStyle", "My style for nicer plots"); - - Float_t xoff = MyStyle->GetLabelOffset("X"), - yoff = MyStyle->GetLabelOffset("Y"), - zoff = MyStyle->GetLabelOffset("Z"); - - MyStyle->SetCanvasBorderMode ( 0 ); - MyStyle->SetPadBorderMode ( 0 ); - MyStyle->SetPadColor ( 0 ); - MyStyle->SetCanvasColor ( 0 ); - MyStyle->SetTitleColor ( 0 ); - MyStyle->SetStatColor ( 0 ); - MyStyle->SetTitleBorderSize ( 0 ); - MyStyle->SetTitleFillColor ( 0 ); - MyStyle->SetTitleH ( 0.07 ); - MyStyle->SetTitleW ( 1.00 ); - MyStyle->SetTitleFont ( 132 ); - - MyStyle->SetLabelOffset (1.5*xoff, "X"); - MyStyle->SetLabelOffset (1.5*yoff, "Y"); - MyStyle->SetLabelOffset (1.5*zoff, "Z"); - - MyStyle->SetTitleOffset (0.9, "X"); - MyStyle->SetTitleOffset (0.9, "Y"); - MyStyle->SetTitleOffset (0.9, "Z"); - - MyStyle->SetTitleSize (0.045, "X"); - MyStyle->SetTitleSize (0.045, "Y"); - MyStyle->SetTitleSize (0.045, "Z"); - - MyStyle->SetLabelFont (132, "X"); - MyStyle->SetLabelFont (132, "Y"); - MyStyle->SetLabelFont (132, "Z"); - - MyStyle->SetPalette(1); - - MyStyle->cd(); -} diff --git a/PhysicsTools/PatExamples/test/patTrigger_dataFromRAW_cfg.py b/PhysicsTools/PatExamples/test/patTrigger_dataFromRAW_cfg.py new file mode 100644 index 0000000000000..2e8685bab2176 --- /dev/null +++ b/PhysicsTools/PatExamples/test/patTrigger_dataFromRAW_cfg.py @@ -0,0 +1,62 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process( "PAT" ) + +## Options and Output Report +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( True ) +) + +## Source +process.source = cms.Source( "PoolSource" +, fileNames = cms.untracked.vstring( + '/store/data/Run2011A/HT/RAW/v1/000/166/565/DE60076D-A290-E011-9BC9-003048F118C6.root' + ) +, lumisToProcess = cms.untracked.VLuminosityBlockRange( + '166565:12-166565:12' + ) +) +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32( 100 ) +) + +## Geometry and Detector Conditions (needed for a few patTuple production steps) +process.load( "Configuration.StandardSequences.Services_cff" ) +process.load( "Configuration.StandardSequences.Geometry_cff" ) +process.load( "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff" ) +from Configuration.AlCa.autoCond import autoCond +process.GlobalTag.globaltag = cms.string( autoCond[ 'com10' ] ) +process.load( "Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff" ) + +# RAW to DIGI and RECO pre-requisites +process.load( "Configuration.StandardSequences.RawToDigi_Data_cff" ) +process.load( "L1Trigger.Configuration.L1Reco_cff" ) +process.p = cms.Path( + process.gctDigis +* process.gtDigis +* process.gtEvmDigis +* process.scalersRawToDigi +* process.L1Reco +) + +## Output +from L1Trigger.Configuration.L1Trigger_EventContent_cff import L1TriggerAOD +process.out = cms.OutputModule( + "PoolOutputModule" +, fileName = cms.untracked.string( 'patTrigger_dataFromRAW.root' ) +, SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring( + 'p' + ) + ) +, outputCommands = cms.untracked.vstring( + 'drop *' + ) +) +process.outpath = cms.EndPath( + process.out +) + +## PAT trigger +from PhysicsTools.PatAlgos.tools.trigTools import * +switchOnTrigger( process, sequence = 'p', hltProcess = '*' ) diff --git a/PhysicsTools/PatExamples/test/patTuple_42x_jec_cfg.py b/PhysicsTools/PatExamples/test/patTuple_42x_jec_cfg.py deleted file mode 100644 index 7aac0f40dc5cc..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_42x_jec_cfg.py +++ /dev/null @@ -1,79 +0,0 @@ -## import skeleton process -from PhysicsTools.PatAlgos.patTemplate_cfg import * - - -# Get a list of good primary vertices, in 42x, these are DAF vertices -from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector -process.goodOfflinePrimaryVertices = cms.EDFilter( - "PrimaryVertexObjectFilter", - filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), - src=cms.InputTag('offlinePrimaryVertices') - ) - - -# Configure PAT to use PF2PAT instead of AOD sources -# this function will modify the PAT sequences. It is currently -# not possible to run PF2PAT+PAT and standart PAT at the same time -from PhysicsTools.PatAlgos.tools.pfTools import * -postfix = "PFlow" -usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5', runOnMC=True, postfix=postfix) -process.pfPileUpPFlow.Enable = True -process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False) -process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices') -process.pfJetsPFlow.doAreaFastjet = True -process.pfJetsPFlow.doRhoFastjet = False - - -# Compute the mean pt per unit area (rho) from the -# PFchs inputs -from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets -process.kt6PFJetsPFlow = kt4PFJets.clone( - rParam = cms.double(0.6), - src = cms.InputTag('pfNoElectron'+postfix), - doAreaFastjet = cms.bool(True), - doRhoFastjet = cms.bool(True) - ) -process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho") - - -# Add the PV selector and KT6 producer to the sequence -getattr(process,"patPF2PATSequence"+postfix).replace( - getattr(process,"pfNoElectron"+postfix), - getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsPFlow ) - -process.patseq = cms.Sequence( - process.goodOfflinePrimaryVertices* - getattr(process,"patPF2PATSequence"+postfix) - ) - -# Adjust the event content -process.out.outputCommands += [ - 'keep *_selectedPat*_*_*', - 'keep *_goodOfflinePrimaryVertices*_*_*', - 'keep double_*PFlow*_*_PAT' -] - - -## let it run -process.p = cms.Path( - process.patseq - ) - -## ------------------------------------------------------ -# In addition you usually want to change the following -# parameters: -## ------------------------------------------------------ -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -# ## -# process.source.fileNames = [ ## -# '/store/relval/CMSSW_3_8_6/RelValTTbar/GEN-SIM-RECO/START38_V13-v1/0065/F438C4C4-BCE7-DF11-BC6B-002618943885.root' -# ] ## (e.g. 'file:AOD.root') -# ## -# process.maxEvents.input = ... ## (e.g. -1 to run on all events) -# ## -# process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) -# ## -# process.out.fileName = ... ## (e.g. 'myTuple.root') -# ## -process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatExamples/test/patTuple_configs_cfg.py b/PhysicsTools/PatExamples/test/patTuple_configs_cfg.py deleted file mode 100644 index 0d51e598bb256..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_configs_cfg.py +++ /dev/null @@ -1,43 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on full sim samples - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# ---------------------------------------------------- -# EXAMPLE 1: restrict input to AOD -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.coreTools import * -#restrictInputToAOD(process) - -# ---------------------------------------------------- -# EXAMPLE 2: remove MC matching from PAT default -# sequences -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.coreTools import * -#removeMCMatching(process, ['All']) - -# ---------------------------------------------------- -# EXAMPLE 3: remove certain object collections from -# the PAT workflow -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.coreTools import * -#removeAllPATObjectsBut(process, ['Muons']) -#removeSpecificPATObjects(process, ['Electrons', 'Muons', 'Taus']) - -# let it run -process.p = cms.Path( - process.patDefaultSequence - ) - -# ---------------------------------------------------- -# You might want to change some of these default -# parameters -# ---------------------------------------------------- -#process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -#process.source.fileNames = [ -#'/store/relval/CMSSW_3_1_1/RelValCosmics/GEN-SIM-RECO/STARTUP31X_V1-v2/0002/7625DA7D-E36B-DE11-865A-000423D174FE.root' -# ] ## (e.g. 'file:AOD.root') -#process.maxEvents.input = ... ## (e.g. -1 to run on all events) -#process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) -#process.out.fileName = ... ## (e.g. 'myTuple.root') -#process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatExamples/test/patTuple_contents_cfg.py b/PhysicsTools/PatExamples/test/patTuple_contents_cfg.py deleted file mode 100644 index 34e393b683f8f..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_contents_cfg.py +++ /dev/null @@ -1,85 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on full sim samples - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# ---------------------------------------------------- -# EXAMPLE 1: change the pat jet collection in the -# event content -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.jetTools import * -#switchJetCollection(process,cms.InputTag('ak5PFJets'), -# doJTA = True, -# doBTagging = True, -# jetCorrLabel = ('AK5PF', cms.vstring(['L2Relative', 'L3Absolute', 'L2L3Residual'])), -# doType1MET = True, -# genJetCollection=cms.InputTag("ak5GenJets"), -# doJetID = True -# ) - -# ---------------------------------------------------- -# EXAMPLE 2: add more jet collections to the pat -# event content -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.jetTools import * -#addJetCollection(process,cms.InputTag('ak7CaloJets'), -# 'AK7', 'Calo', -# doJTA = True, -# doBTagging = False, -# jetCorrLabel = ('AK7Calo', cms.vstring(['L2Relative', 'L3Absolute'])), -# doType1MET = True, -# doL1Cleaning = True, -# doL1Counters = False, -# genJetCollection=cms.InputTag("ak7GenJets"), -# doJetID = True, -# jetIdLabel = "ak7" -# ) -#addJetCollection(process,cms.InputTag('ic5CaloJets'), -# 'IC5', 'Calo', -# doJTA = True, -# doBTagging = True, -# jetCorrLabel = ('IC5Calo', cms.vstring(['L2Relative', 'L3Absolute'])), -# doType1MET = True, -# doL1Cleaning = True, -# doL1Counters = False, -# genJetCollection=cms.InputTag("ic5GenJets"), -# doJetID = False -# ) - -# ---------------------------------------------------- -# EXAMPLE 3: add different kinds of MET to the event -# content -# ---------------------------------------------------- -#from PhysicsTools.PatAlgos.tools.metTools import * -#addTcMET(process, 'TC') -#addPfMET(process, 'PF') - -# ---------------------------------------------------- -# EXAMPLE 4: switch to different standard ouputs of -# the pat tuple -# ---------------------------------------------------- -## switched from cleanPatCandidates to selectedPatCandidates -#from PhysicsTools.PatAlgos.tools.coreTools import removeCleaning -#removeCleaning(process) - -## add AODExtras to the event content -#from PhysicsTools.PatAlgos.patEventContent_cff import patExtraAodEventContent -#process.out.outputCommands+= patExtraAodEventContent - -# let it run -process.p = cms.Path( - process.patDefaultSequence - ) - -# ---------------------------------------------------- -# You might want to change some of these default -# parameters -# ---------------------------------------------------- -#process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -#process.source.fileNames = [ -#'/store/relval/CMSSW_3_1_1/RelValCosmics/GEN-SIM-RECO/STARTUP31X_V1-v2/0002/7625DA7D-E36B-DE11-865A-000423D174FE.root' -# ] ## (e.g. 'file:AOD.root') -#process.maxEvents.input = ... ## (e.g. -1 to run on all events) -#process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) -#process.out.fileName = ... ## (e.g. 'myTuple.root') -#process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatExamples/test/patTuple_data_cfg.py b/PhysicsTools/PatExamples/test/patTuple_data_cfg.py deleted file mode 100644 index 8aa1439aff17d..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_data_cfg.py +++ /dev/null @@ -1,170 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on minbias data - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -from PhysicsTools.PatAlgos.tools.coreTools import * -removeMCMatching(process, ['All']) - -## global tag for data -process.GlobalTag.globaltag = 'GR_R_42_V14::All' - - -# Triggers for the /Jet PD in the used example run 165121 are from: -# /cdaq/physics/Run2011/1e33/v1.3/HLT/V2 -# The list is here, let's take all of them : -## Jet = cms.vstring( 'HLT_DiJetAve110_v3', -## 'HLT_DiJetAve150_v3', -## 'HLT_DiJetAve190_v3', -## 'HLT_DiJetAve240_v3', -## 'HLT_DiJetAve300_v3', -## 'HLT_DiJetAve30_v3', -## 'HLT_DiJetAve370_v3', -## 'HLT_DiJetAve60_v3', -## 'HLT_DiJetAve80_v3', -## 'HLT_Jet110_v3', -## 'HLT_Jet150_v3', -## 'HLT_Jet190_v3', -## 'HLT_Jet240_v3', -## 'HLT_Jet300_v2', -## 'HLT_Jet30_v3', -## 'HLT_Jet370_NoJetID_v3', -## 'HLT_Jet370_v3', -## 'HLT_Jet60_v3', -## 'HLT_Jet80_v3' ), -mytrigs = ['*'] - -# Jet energy corrections to use: -#inputJetCorrLabel = ('AK5PF', ['L1Offset', 'L2Relative', 'L3Absolute', 'L2L3Residual']) -inputJetCorrLabel = ('AK5PF', ['L1Offset', 'L2Relative', 'L3Absolute']) -process.patJetCorrFactors.useRho=False - -# add pf met -from PhysicsTools.PatAlgos.tools.metTools import * -addPfMET(process, 'PF') - -# Add PF jets -from PhysicsTools.PatAlgos.tools.jetTools import * -switchJetCollection(process,cms.InputTag('ak5PFJets'), - doJTA = True, - doBTagging = True, - jetCorrLabel = inputJetCorrLabel, - doType1MET = True, - genJetCollection=cms.InputTag("ak5GenJets"), - doJetID = True - ) -process.patJets.addTagInfos = True -process.patJets.tagInfoSources = cms.VInputTag( - cms.InputTag("secondaryVertexTagInfosAOD"), - ) - -# Apply loose PF jet ID -from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector -process.goodPatJets = cms.EDFilter("PFJetIDSelectionFunctorFilter", - filterParams = pfJetIDSelector.clone(), - src = cms.InputTag("selectedPatJets"), - filter = cms.bool(True) - ) - - -# Taus are currently broken in 4.1.x -removeSpecificPATObjects( process, ['Taus'] ) -process.patDefaultSequence.remove( process.patTaus ) - -# require physics declared -process.load('HLTrigger.special.hltPhysicsDeclared_cfi') -process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis' - -# require scraping filter -process.scrapingVeto = cms.EDFilter("FilterOutScraping", - applyfilter = cms.untracked.bool(True), - debugOn = cms.untracked.bool(False), - numtrack = cms.untracked.uint32(10), - thresh = cms.untracked.double(0.2) - ) -# HB + HE noise filtering -process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') -process.HBHENoiseFilter.minIsolatedNoiseSumE = 999999. -process.HBHENoiseFilter.minNumIsolatedNoiseChannels = 999999 -process.HBHENoiseFilter.minIsolatedNoiseSumEt = 999999. - - -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -if mytrigs is not None : - process.hltSelection = hltHighLevel.clone(TriggerResultsTag = 'TriggerResults::HLT', HLTPaths = mytrigs) - process.hltSelection.throw = False - -from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector -goodVertexSelection = pvSelector.clone( maxZ = 24. ) -process.primaryVertexFilter = cms.EDFilter("PrimaryVertexFilter", - goodVertexSelection - ) - - -# Select jets -process.selectedPatJets.cut = cms.string('pt > 25') - -# Add the files -readFiles = cms.untracked.vstring() -secFiles = cms.untracked.vstring() - - -readFiles.extend( [ - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/E4D2CB53-9881-E011-8D99-003048F024DC.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DC453887-7481-E011-89B9-001617E30D0A.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DABFB9E8-9B81-E011-9FF7-0030487CD812.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/D4E6F338-9B81-E011-A8DE-003048F110BE.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/CEC22BF3-9681-E011-AA91-003048CFB40C.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/BC737791-9581-E011-90E2-0030487CD6DA.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/B6E2792E-8881-E011-9C34-000423D9A212.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/A47B3EF5-9D81-E011-AC11-003048F024FA.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/84253FEF-9B81-E011-9DB7-001617DBD230.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/80749EFD-AB81-E011-A6E3-0030487CD76A.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/749CCE90-9581-E011-862A-000423D9A212.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/6CDB388A-9681-E011-B324-0030487CD178.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/464C7F95-9581-E011-BAEC-0030487CAEAC.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/42B01B46-9D81-E011-AF75-003048F1C58C.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/36C0F1A9-1382-E011-A5B5-003048F11942.root', - '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/10691D45-9D81-E011-9A9A-003048F118C2.root', - ] ) - -process.source.fileNames = readFiles - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") - -# let it run - -process.p = cms.Path( - process.hltSelection* - process.scrapingVeto* - process.primaryVertexFilter* - process.HBHENoiseFilter* - process.patDefaultSequence* - process.goodPatJets - ) - -# rename output file -process.out.fileName = cms.untracked.string('jet2011A_aod.root') - -# reduce verbosity -process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(1000) - -# process all the events -process.maxEvents.input = 1000 -process.options.wantSummary = True - -from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning -from PhysicsTools.PatAlgos.patEventContent_cff import patExtraAodEventContent -process.out.outputCommands = patEventContentNoCleaning -process.out.outputCommands += patExtraAodEventContent -process.out.outputCommands += [ - 'drop patJets_selectedPatJets_*_*', - 'keep patJets_goodPatJets_*_*', - 'keep recoPFCandidates_selectedPatJets*_*_*' - ] - -# switch on PAT trigger -from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger -switchOnTrigger( process ) -process.patTrigger.addL1Algos = cms.bool( True ) -switchOnTrigger( process ) # to fix event content diff --git a/PhysicsTools/PatExamples/test/patTuple_embedding_cfg.py b/PhysicsTools/PatExamples/test/patTuple_embedding_cfg.py deleted file mode 100644 index bd9136fde811f..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_embedding_cfg.py +++ /dev/null @@ -1,37 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on full sim samples - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# note that you can use a bunch of core tools of PAT -# to taylor your PAT configuration; for a few examples -# uncomment the following lines - -from PhysicsTools.PatAlgos.tools.coreTools import * -#restrictInputToAOD(process) -#removeMCMatching(process, ['Muons']) -#removeAllPATObjectsBut(process, ['Muons']) -#removeSpecificPATObjects(process, ['Electrons', 'Muons', 'Taus']) - -#switch off new tau features introduced in 33X to restore 31X defaults -# new feaures: - shrinkingConeTaus instead of fixedCone ones -# - TaNC discriminants attached for shrinkingConeTaus -# - default preselection on cleaningLayer1 -from PhysicsTools.PatAlgos.tools.tauTools import * -switchTo31Xdefaults(process) - -# let it run -process.p = cms.Path( - process.patDefaultSequence - ) - -# In addition you usually want to change the following parameters: -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -# process.source.fileNames = [ -# '/store/relval/CMSSW_3_1_1/RelValCosmics/GEN-SIM-RECO/STARTUP31X_V1-v2/0002/7625DA7D-E36B-DE11-865A-000423D174FE.root' -# ] ## (e.g. 'file:AOD.root') -# process.maxEvents.input = ... ## (e.g. -1 to run on all events) -# process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) -# process.out.fileName = ... ## (e.g. 'myTuple.root') -process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatExamples/test/patTuple_first7TeV_data_cfg.py b/PhysicsTools/PatExamples/test/patTuple_first7TeV_data_cfg.py deleted file mode 100644 index 9f16ef46bdb62..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_first7TeV_data_cfg.py +++ /dev/null @@ -1,112 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on minbias data - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -from PhysicsTools.PatAlgos.tools.coreTools import * - -## global tag for data -process.GlobalTag.globaltag = 'GR_R_38X_V14::All' - -# add pf met -from PhysicsTools.PatAlgos.tools.metTools import * -removeMCMatching(process, ['All']) -addPfMET(process, 'PF') - -# Add PF jets -from PhysicsTools.PatAlgos.tools.jetTools import * -addJetCollection(process,cms.InputTag('ak5PFJets'), - 'AK5', 'PF', - doJTA = False, - doBTagging = False, - jetCorrLabel = ('AK5PF', cms.vstring(['L2Relative', 'L3Absolute', 'L2L3Residual'])), - doType1MET = False, - doL1Cleaning = False, - doL1Counters = False, - genJetCollection=cms.InputTag("ak5GenJets"), - doJetID = False - ) - -# require physics declared -process.load('HLTrigger.special.hltPhysicsDeclared_cfi') -process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis' - -# require scraping filter -process.scrapingVeto = cms.EDFilter("FilterOutScraping", - applyfilter = cms.untracked.bool(True), - debugOn = cms.untracked.bool(False), - numtrack = cms.untracked.uint32(10), - thresh = cms.untracked.double(0.2) - ) - - -# configure HLT -process.load('L1TriggerConfig.L1GtConfigProducers.L1GtTriggerMaskTechTrigConfig_cff') -process.load('HLTrigger/HLTfilters/hltLevel1GTSeed_cfi') -process.hltLevel1GTSeed.L1TechTriggerSeeding = cms.bool(True) -process.hltLevel1GTSeed.L1SeedsLogicalExpression = cms.string('0 AND (40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))') - -process.primaryVertexFilter = cms.EDFilter("GoodVertexFilter", - vertexCollection = cms.InputTag('offlinePrimaryVertices'), - minimumNDOF = cms.uint32(4) , - maxAbsZ = cms.double(15), - maxd0 = cms.double(2) - ) - -# Select jets -process.selectedPatJets.cut = cms.string('pt > 10') -process.selectedPatJetsAK5PF.cut = cms.string('pt > 10') - -# Add the files -readFiles = cms.untracked.vstring() -secFiles = cms.untracked.vstring() - -readFiles.extend( [ -'/store/data/Run2010A/MinimumBias/RECO/v4/000/144/114/EA7E0799-10B4-DF11-BA75-0030487CAF0E.root', -'/store/data/Run2010A/MinimumBias/RECO/v4/000/144/114/A6A0ABC9-0DB4-DF11-A5E6-003048F024C2.root', -'/store/data/Run2010A/MinimumBias/RECO/v4/000/144/114/9E7E774E-32B4-DF11-AE21-003048F0258C.root' - ] ); -process.source.fileNames = readFiles - -process.source.inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") - -# let it run - -#print -#print "============== Warning ==============" -#print "technical trigger filter: DISABLED" -#print "physics declare bit filter: DISABLED" -#print "primary vertex filter: DISABLED" - -process.p = cms.Path( - process.hltLevel1GTSeed* - process.scrapingVeto* - process.hltPhysicsDeclared* - process.primaryVertexFilter* - process.patDefaultSequence - ) - -# rename output file -process.out.fileName = cms.untracked.string('reco_7TeV_firstdata_pat.root',) - -# reduce verbosity -process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(1000) - -# process all the events -process.maxEvents.input = 1000 -process.options.wantSummary = True - -from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning -from PhysicsTools.PatAlgos.patEventContent_cff import patExtraAodEventContent -process.out.outputCommands = patEventContentNoCleaning -process.out.outputCommands += patExtraAodEventContent -process.out.outputCommands += [ - 'keep recoPFCandidates_particleFlow_*_*' - ] - -# switch on PAT trigger -from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger -switchOnTrigger( process ) - -process.patTrigger.addL1Algos = cms.bool( True ) - diff --git a/PhysicsTools/PatExamples/test/patTuple_standard_cfg.py b/PhysicsTools/PatExamples/test/patTuple_standard_cfg.py deleted file mode 100644 index fe37db3f75d2e..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_standard_cfg.py +++ /dev/null @@ -1,78 +0,0 @@ -## import skeleton process -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -## ------------------------------------------------------ -# NOTE: you can use a bunch of core tools of PAT to -# taylor your PAT configuration; for a few examples -# uncomment the lines below -## ------------------------------------------------------ -#from PhysicsTools.PatAlgos.tools.coreTools import * - -## remove MC matching from the default sequence -# removeMCMatching(process, ['Muons']) - -## remove certain objects from the default sequence -# removeAllPATObjectsBut(process, ['Muons']) -# removeSpecificPATObjects(process, ['Electrons', 'Muons', 'Taus']) - -## ------------------------------------------------------ -# NOTE: you can still run PAT in the 36X version on -# input files produced within the 35X series. This -# implies some reconfigurations, example are given -# below. -## ------------------------------------------------------ -#from PhysicsTools.PatAlgos.tools.cmsswVersionTools import * - -## uncomment this line to run on an 35X input sample -#run36xOn35xInput(process) - -## uncomment the following lines to add jets from a -## 35X input sample -#addJetCollection35X(process,cms.InputTag('ak7CaloJets'), -# 'AK7', 'Calo', -# doJTA = True, -# doBTagging = False, -# jetCorrLabel = ('AK7', 'Calo'), -# doType1MET = True, -# doL1Cleaning = True, -# doL1Counters = False, -# genJetCollection=cms.InputTag("ak7GenJets"), -# doJetID = True, -# jetIdLabel = "ak7" -# ) - -## uncomment the following lines to switch the jet -## collection from a 35X input sample -#switchJetCollection35X(process,cms.InputTag('ak5PFJets'), -# doJTA = True, -# doBTagging = True, -# jetCorrLabel = None, -# doType1MET = True, -# genJetCollection=cms.InputTag("ak5GenJets"), -# doJetID = True -# ) - - -## let it run -process.p = cms.Path( - process.patDefaultSequence - ) - -## ------------------------------------------------------ -# In addition you usually want to change the following -# parameters: -## ------------------------------------------------------ -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -# ## -# process.source.fileNames = [ ## -# '/store/relval/CMSSW_3_8_6/RelValTTbar/GEN-SIM-RECO/START38_V13-v1/0065/F438C4C4-BCE7-DF11-BC6B-002618943885.root' -# ] ## (e.g. 'file:AOD.root') -# ## -# process.maxEvents.input = ... ## (e.g. -1 to run on all events) -# ## -# process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) -# ## -# process.out.fileName = ... ## (e.g. 'myTuple.root') -# ## -process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatExamples/test/patTuple_topPreproduction_cfg.py b/PhysicsTools/PatExamples/test/patTuple_topPreproduction_cfg.py deleted file mode 100644 index aca9532fc0c59..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_topPreproduction_cfg.py +++ /dev/null @@ -1,33 +0,0 @@ -## import skeleton process -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -## --- -## Adjust inputs if necessary -## --- -#from PhysicsTools.PatAlgos.tools.cmsswVersionTools import run36xOn35xInput -#run36xOn35xInput(process) - -## --- -## adjust workflow to need in TopPAG -## --- -from PhysicsTools.PatAlgos.tools.coreTools import * -removeCleaning(process) -removeMCMatching(process, ['All']) -removeSpecificPATObjects(process, ['Photons','Taus']) - -## --- -## adjust content -## --- -process.patMuons.usePV = False -process.patMuons.embedTrack = True - -## define event content -from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning -process.out.outputCommands = cms.untracked.vstring('drop *', *patEventContentNoCleaning ) -process.out.outputCommands+= [ 'keep edmTriggerResults_*_*_*', - 'keep *_offlinePrimaryVertices_*_*' - ] - -process.p = cms.Path( - process.patDefaultSequence - ) diff --git a/PhysicsTools/PatExamples/test/patTuple_topSelection_cfg.py b/PhysicsTools/PatExamples/test/patTuple_topSelection_cfg.py deleted file mode 100644 index 6a53dfe1845eb..0000000000000 --- a/PhysicsTools/PatExamples/test/patTuple_topSelection_cfg.py +++ /dev/null @@ -1,163 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -## import skeleton process -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -from PhysicsTools.PatAlgos.tools.cmsswVersionTools import run36xOn35xInput - -from PhysicsTools.PatAlgos.tools.coreTools import * -removeMCMatching(process, ['All']) - -removeSpecificPATObjects(process, - ['Photons','Taus'], - outputInProcess=False) - -removeCleaning(process, - outputInProcess=False) - -process.patJetCorrFactors.useRho = False -process.patMuons.usePV = False - -#------------------------------------------------- -# selection step 1: trigger -#------------------------------------------------- - -from HLTrigger.HLTfilters.hltHighLevel_cfi import * -process.step1 = hltHighLevel.clone(TriggerResultsTag = "TriggerResults::HLT", HLTPaths = ["HLT_Mu15"]) - -#------------------------------------------------- -# selection step 2: vertex filter -#------------------------------------------------- - -# vertex filter -process.step2 = cms.EDFilter("VertexSelector", - src = cms.InputTag("offlinePrimaryVertices"), - cut = cms.string("!isFake && ndof > 4 && abs(z) < 15 && position.Rho < 2"), - filter = cms.bool(True), - ) - -#------------------------------------------------- -# selection steps 3 and 4: muon selection -#------------------------------------------------- - -from PhysicsTools.PatAlgos.cleaningLayer1.muonCleaner_cfi import * -process.isolatedMuons010 = cleanPatMuons.clone(preselection = - 'isGlobalMuon & isTrackerMuon &' - 'pt > 20. &' - 'abs(eta) < 2.1 &' - '(trackIso+caloIso)/pt < 0.1 &' - 'innerTrack.numberOfValidHits > 10 &' - 'globalTrack.normalizedChi2 < 10.0 &' - 'globalTrack.hitPattern.numberOfValidMuonHits > 0 &' - 'abs(dB) < 0.02' - ) - -process.isolatedMuons010.checkOverlaps = cms.PSet( - jets = cms.PSet(src = cms.InputTag("goodJets"), - algorithm = cms.string("byDeltaR"), - preselection = cms.string(""), - deltaR = cms.double(0.3), - checkRecoComponents = cms.bool(False), - pairCut = cms.string(""), - requireNoOverlaps = cms.bool(True), - ) - ) -process.isolatedMuons005 = cleanPatMuons.clone(src = 'isolatedMuons010', - preselection = '(trackIso+caloIso)/pt < 0.05' - ) - -process.vetoMuons = cleanPatMuons.clone(preselection = - 'isGlobalMuon &' - 'pt > 10. &' - 'abs(eta) < 2.5 &' - '(trackIso+caloIso)/pt < 0.2' - ) - -from PhysicsTools.PatAlgos.selectionLayer1.muonCountFilter_cfi import * -process.step3a = countPatMuons.clone(src = 'isolatedMuons005', minNumber = 1, maxNumber = 1) -process.step3b = countPatMuons.clone(src = 'isolatedMuons010', minNumber = 1, maxNumber = 1) -process.step4 = countPatMuons.clone(src = 'vetoMuons', maxNumber = 1) - -#------------------------------------------------- -# selection step 5: electron selection -#------------------------------------------------- - -from PhysicsTools.PatAlgos.selectionLayer1.electronSelector_cfi import * -process.vetoElectrons = selectedPatElectrons.clone(src = 'selectedPatElectrons', - cut = - 'et > 15. &' - 'abs(eta) < 2.5 &' - '(dr03TkSumPt+dr03EcalRecHitSumEt+dr03HcalTowerSumEt)/et < 0.2' - ) - -from PhysicsTools.PatAlgos.selectionLayer1.electronCountFilter_cfi import * -process.step5 = countPatMuons.clone(src = 'vetoElectrons', maxNumber = 0) - -#------------------------------------------------- -# selection steps 6 and 7: jet selection -#------------------------------------------------- - -from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import * -process.goodJets = selectedPatJets.clone(src = 'patJets', - cut = - 'pt > 30. &' - 'abs(eta) < 2.4 &' - 'emEnergyFraction > 0.01 &' - 'jetID.n90Hits > 1 &' - 'jetID.fHPD < 0.98' - ) - -from PhysicsTools.PatAlgos.selectionLayer1.jetCountFilter_cfi import * -process.step6a = countPatJets.clone(src = 'goodJets', minNumber = 1) -process.step6b = countPatJets.clone(src = 'goodJets', minNumber = 2) -process.step6c = countPatJets.clone(src = 'goodJets', minNumber = 3) -process.step7 = countPatJets.clone(src = 'goodJets', minNumber = 4) - -#------------------------------------------------- -# paths -#------------------------------------------------- - -process.looseSequence = cms.Path(process.step1 * - process.step2 * - process.patDefaultSequence * - process.goodJets * - process.isolatedMuons010 * - process.step3b * - process.vetoMuons * - process.step4 * - process.vetoElectrons * - process.step5 * - process.step6a * - process.step6b * - process.step6c - ) - -process.tightSequence = cms.Path(process.step1 * - process.step2 * - process.patDefaultSequence * - process.goodJets * - process.isolatedMuons010 * - process.isolatedMuons005 * - process.step3a * - process.vetoMuons * - process.step4 * - process.vetoElectrons * - process.step5 * - process.step6a * - process.step6b * - process.step6c * - process.step7 - ) - - -process.out.SelectEvents.SelectEvents = ['tightSequence', - 'looseSequence' ] - -from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning -process.out.outputCommands = cms.untracked.vstring('drop *', *patEventContentNoCleaning ) -process.out.outputCommands+=[ 'keep *_isolatedMuons010_*_*', - 'keep *_isolatedMuons005_*_*', - 'keep *_vetoMuons_*_*', - 'keep *_vetoElectrons_*_*', - 'keep *_goodJets_*_*' - ] diff --git a/PhysicsTools/PatExamples/test/patTuple_triggerOnly_data_cfg.py b/PhysicsTools/PatExamples/test/patTuple_triggerOnly_data_cfg.py index 7659d1b8bf2a1..6760a6a9f495c 100644 --- a/PhysicsTools/PatExamples/test/patTuple_triggerOnly_data_cfg.py +++ b/PhysicsTools/PatExamples/test/patTuple_triggerOnly_data_cfg.py @@ -3,56 +3,109 @@ ## -- from PhysicsTools.PatAlgos.patTemplate_cfg import * ## ... and modify it according to the needs: -process.source.fileNames = [ '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/06ADBD4E-0E96-E011-A2FE-003048F1C836.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/06F5A72B-E195-E011-A988-001D09F231C9.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/08B4EC25-1396-E011-A4CA-003048D2C174.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/186E812D-0C96-E011-8D83-003048F11CF0.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/18FBAA04-E395-E011-AD96-001D09F24664.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/1C954EEF-1A96-E011-A306-0030487C6A66.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/2084822A-1396-E011-BCC7-003048D2BDD8.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/32C97086-1296-E011-8588-003048F11C5C.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/4620F471-1096-E011-9D47-0030487CD6D8.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/462E5C46-E495-E011-AB68-001D09F252E9.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/4A0AC5B1-DF95-E011-93C7-001D09F25041.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/5655A998-E595-E011-BA75-001D09F23D1D.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/56DA4E81-DC95-E011-835D-0030487A1990.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/5AB9C521-2D96-E011-8648-003048F117B6.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/6422B81F-D995-E011-BA28-003048F1C832.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/74B30E2A-E195-E011-A2A2-001D09F29538.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/7A81AEEF-1A96-E011-A1F6-0030487A18F2.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/8288E509-E395-E011-93F2-001D09F2960F.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/867A73F4-E295-E011-8598-003048F11CF0.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/86B21B4E-1C96-E011-9549-003048F024DE.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/8E25CC65-1096-E011-ADBB-003048F1BF68.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/9A59783C-E495-E011-A8B3-001D09F24600.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/9C51D93B-E495-E011-AA78-0030487CD184.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/9E75657D-DC95-E011-A8FF-001D09F290BF.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/A2B4BF06-E395-E011-8C8B-003048CFB40C.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/AE5CAA73-DC95-E011-BC78-003048F24A04.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/B40C9D36-0C96-E011-9584-003048D2C0F0.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/B48976EF-1A96-E011-96CD-0030487A195C.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/BCDFC3B7-ED95-E011-94F8-0030487CD7E0.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/BE64844F-0E96-E011-8B0E-003048F1C58C.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/C06E873D-E495-E011-8FF1-0019B9F72BAA.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/DE1F0652-0E96-E011-A96C-003048F11C58.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/E0030F46-0896-E011-95AC-003048F117B4.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/E2BD34C9-E995-E011-9B50-00304879EDEA.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/E4C1DE51-1596-E011-8B15-003048673374.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/EAA9643C-E495-E011-9D68-001D09F23A34.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/F61CA81C-0A96-E011-958B-003048D2C01E.root' - , '/store/data/Run2011A/SingleMu/AOD/PromptReco-v4/000/166/841/F6421032-0C96-E011-977B-003048F1C420.root' +process.source.fileNames = [ '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/0609B981-BFB8-E111-9C19-5404A63886EC.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/0C06CE57-C2B8-E111-BA54-001D09F242EF.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/0C97DC6D-CBB8-E111-B39F-00237DDC5BBC.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/1414DF29-B0B8-E111-995D-003048F1C836.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/149AECC7-DDB8-E111-B64C-BCAEC5329713.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/14E56528-BEB8-E111-B538-E0CB4E4408E3.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/169CC587-D7B8-E111-B931-BCAEC532971F.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/1A1965B4-DFB8-E111-9AF1-003048D2C108.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/1A769685-D0B8-E111-A494-BCAEC5329713.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/1CF16C1C-FAB8-E111-8D9E-0019B9F70468.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/1E3B479C-E5B8-E111-BD66-001D09F25041.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/22024FE9-C5B8-E111-AF49-003048F117EC.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/281CC457-C2B8-E111-BA01-003048D37456.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/28CF4557-C0B8-E111-9D2C-001D09F2305C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/2C720413-D6B8-E111-9B5F-001D09F24D67.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/2CA0AF11-DBB8-E111-B2CC-001D09F25041.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/3007DC96-B4B8-E111-B97E-5404A638869E.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/30E73932-CCB8-E111-B4CA-5404A63886B7.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/34A1AB2E-BEB8-E111-802A-BCAEC5329708.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/38E12248-DAB8-E111-B6A0-5404A63886A8.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/3AD35B23-C3B8-E111-95C1-001D09F291D2.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/3C795B12-B9B8-E111-84DD-001D09F2527B.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/3C866812-D6B8-E111-85F5-003048D2BB58.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/3EA1CF8D-A9B8-E111-A97D-BCAEC5329717.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/4ADA49C7-E2B8-E111-8B80-5404A63886B6.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/4C3F6AC9-D6B8-E111-AB16-5404A63886BD.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/4C823F44-B7B8-E111-BA62-BCAEC532970F.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/4E14C168-AFB8-E111-B536-BCAEC518FF52.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/54C4B067-B5B8-E111-B9DA-BCAEC518FF30.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/60205292-C2B8-E111-A735-001D09F291D2.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6066780D-DBB8-E111-BDDA-003048F024F6.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/60757E04-ACB8-E111-B337-001D09F24DA8.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/607B4D00-E0B8-E111-8C47-001D09F2A49C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6639F43D-CEB8-E111-8EA7-0015C5FDE067.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6A36C40F-B3B8-E111-961F-5404A640A643.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6ACC51E9-D3B8-E111-A9C8-BCAEC518FF6E.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6C659AC9-E2B8-E111-A824-003048D37560.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/6C9094E2-CCB8-E111-B179-003048D375AA.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/70060AF9-DFB8-E111-84DA-E0CB4E55367F.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/7027A1F7-C9B8-E111-9C76-E0CB4E4408C4.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/7075EC36-D3B8-E111-B01B-001D09F24303.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/72634C88-D7B8-E111-A414-5404A63886EB.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/780F56E6-AEB8-E111-8AEF-003048D373F6.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/781EA596-B4B8-E111-A073-0025901D5DB2.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/804E595A-E1B8-E111-B42F-003048D2C0F0.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/820C5E88-D0B8-E111-8FFF-0025901D6272.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/826AA5B9-DBB8-E111-B321-003048D3751E.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/86F0406D-CBB8-E111-A7A3-00237DDC5C24.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/8818E2C8-D6B8-E111-89BB-BCAEC518FF5F.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/8A940770-DCB8-E111-A662-003048D373AE.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/8ADB95DC-CCB8-E111-8EC8-003048D2BDD8.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/8AEE1E55-C2B8-E111-BD20-003048F024FA.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/90E7342A-B0B8-E111-A1B2-003048F118D2.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/92A296B0-A6B8-E111-B117-485B3977172C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/92C4A7A4-D9B8-E111-B265-5404A6388694.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/92CF834D-AEB8-E111-AF07-001D09F25460.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/9E72BEFB-BBB8-E111-846D-003048D2BBF0.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/9EFAD8BC-BCB8-E111-A0CB-003048F1C420.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/A2527DCB-A3B8-E111-BEC3-E0CB4E4408E7.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/A4D6AE2A-B0B8-E111-81D2-003048F1BF66.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/A6D1F0A3-D9B8-E111-9F62-0025901D5DEE.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/A8FFFDCF-C0B8-E111-89A7-5404A63886CB.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/AE932793-C6B8-E111-BB78-0030486780AC.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/B0624C2B-C5B8-E111-BB6C-003048F118D4.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/B49BCB59-D5B8-E111-8F3F-5404A640A639.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/BE5931D5-C7B8-E111-87C0-001D09F295A1.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/C09B5259-C0B8-E111-902B-003048D2BEAA.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/C8916851-E6B8-E111-BAC8-001D09F2305C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/D4C0DB30-CCB8-E111-8A1F-5404A63886D6.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/D8100D99-E3B8-E111-8E03-5404A640A63D.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/DA0729DD-E9B8-E111-987E-001D09F2525D.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/DA1E9C37-D3B8-E111-9068-001D09F242EF.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/DE50ADD5-CAB8-E111-B2E1-001D09F2AD4D.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/E036F03D-ABB8-E111-BF04-0025901D627C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/E2B0FEDC-CCB8-E111-937C-001D09F28D54.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/E44C4832-CCB8-E111-84D3-BCAEC518FF76.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/E4970EEB-C5B8-E111-8443-0025901D624A.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/E6DD24C5-DDB8-E111-8C0D-BCAEC5329709.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/EA410BE6-C8B8-E111-B1F2-5404A63886EF.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/EC6EC768-B5B8-E111-9F2D-5404A63886CE.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/EEC2A387-D7B8-E111-8D67-BCAEC518FF63.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/F0583E36-CEB8-E111-9E26-001D09F29114.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/F2B867D6-CAB8-E111-8014-001D09F2A49C.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/F2E649EA-D3B8-E111-B7FA-5404A63886EC.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/F8C5AFFD-BBB8-E111-AEBC-002481E0D958.root' + , '/store/data/Run2012B/SingleMu/AOD/PromptReco-v1/000/196/364/FABD8E12-E7B8-E111-B9DE-BCAEC518FF44.root' ] -process.source.lumisToProcess = cms.untracked.VLuminosityBlockRange( '166841:1-166841:845' - , '166841:851-166841:876' - , '166841:882-166841:977' - , '166841:984-166841:984' - , '166841:988-166841:992' - , '166841:998-166841:1015' +process.source.lumisToProcess = cms.untracked.VLuminosityBlockRange( '196364:1-196364:93' + , '196364:96-196364:136' + , '196364:139-196364:365' + , '196364:368-196364:380' + , '196364:382-196364:601' + , '196364:603-196364:795' + , '196364:798-196364:884' + , '196364:887-196364:1196' + , '196364:1199-196364:1200' + , '196364:1203-196364:1302' ) # use the correct conditions -process.GlobalTag.globaltag = autoCond[ 'com10' ] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag( process.GlobalTag, 'auto:com10_7E33v2' ) # 2012B # use a sufficient number of events -process.maxEvents.input = 1000 +process.maxEvents.input = 25000 # have a proper output file name process.out.fileName = 'patTuple_triggerOnly_data.root' @@ -89,6 +142,6 @@ # save references to original L1 objects process.patTrigger.saveL1Refs = cms.bool( True ) # default: 'False' # exclude HLT copies of L1 objects -process.patTrigger.exludeCollections = cms.vstring( "hltL1extraParticles*" ) +process.patTrigger.exludeCollections = cms.vstring( 'hltL1extraParticles*' ) # update event content to save switchOnTrigger( process, sequence = 'p' ) # called once more to update the event content according to the changed parameters!!! diff --git a/PhysicsTools/PatExamples/test/produceJPsi_cfg.py b/PhysicsTools/PatExamples/test/produceJPsi_cfg.py deleted file mode 100644 index f666ba108efb3..0000000000000 --- a/PhysicsTools/PatExamples/test/produceJPsi_cfg.py +++ /dev/null @@ -1,52 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on full sim samples - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# note that you can use a bunch of core tools of PAT -# to taylor your PAT configuration; for a few examples -# uncomment the following lines - -from PhysicsTools.PatAlgos.tools.coreTools import * -#removeMCMatching(process, 'Muons') -#removeAllPATObjectsBut(process, ['Muons']) -#removeSpecificPATObjects(process, ['Electrons', 'Muons', 'Taus']) - - - -# switch from "ak5" to "antikt5" if running on 31x samples. -run33xOn31xMC = False -if run33xOn31xMC : - switchJetCollection(process, - cms.InputTag('antikt5CaloJets'), - doJTA = True, - doBTagging = True, - jetCorrLabel = ('AK5','Calo'), - doType1MET = True, - genJetCollection = cms.InputTag("antikt5GenJets") - ) - process.cFlavorHistoryProducer.matchedSrc = cms.InputTag("antikt5GenJets") - process.bFlavorHistoryProducer.matchedSrc = cms.InputTag("antikt5GenJets") - - -process.load("PhysicsTools.PatExamples.patJPsiProducer_cfi") - -# let it run -process.p = cms.Path( - process.patDefaultSequence* - process.patJPsiCandidates - ) - -# In addition you usually want to change the following parameters: -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -process.source.fileNames = [ - '/store/relval/CMSSW_3_3_0_pre2/RelValTTbar/GEN-SIM-RECO/STARTUP31X_V7-v1/0002/BA958CA5-B19B-DE11-90C6-0018F3D0961A.root' - ] -# process.maxEvents.input = ... ## (e.g. -1 to run on all events) -process.out.dropMetaData = cms.untracked.string("DROPPED") -process.out.outputCommands += ['keep *_patJPsiCandidates_*_*'] -process.out.fileName = 'jpsi.root' -process.options.wantSummary = True ## (to suppress the long output at the end of the job) - - diff --git a/PhysicsTools/PatExamples/test/producePatMcMatch_cfg.py b/PhysicsTools/PatExamples/test/producePatMcMatch_cfg.py deleted file mode 100644 index 5ab4881d7f71e..0000000000000 --- a/PhysicsTools/PatExamples/test/producePatMcMatch_cfg.py +++ /dev/null @@ -1,36 +0,0 @@ -# Start with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# Load the standard PAT config -process.load( "PhysicsTools.PatAlgos.patSequences_cff" ) - -# Load the exercise config -process.load( "PhysicsTools.PatExamples.mcMatch_cfi" ) # The file to modify! - -# Modify the default config according to needed exercise settings -# You can comment these lines in order to run the default rather than -# your OWN MC matching from PhysicsTools/PatExamples/python/mcMatching_cfi -# CAUTION: Uncommented, this does NOT run out-of-the-box! -# Own muon match -process.makeAllLayer1Muons.remove( process.muonMatch ) -process.makeAllLayer1Muons += process.myMuonMatch -process.makeAllLayer1Muons.remove( process.allLayer1Muons ) -process.makeAllLayer1Muons += process.allLayer1Muons -process.allLayer1Muons.genParticleMatch = "myMuonMatch" -process.allLayer1Muons.embedGenMatch = True -# Own jet match to MC jets -process.makeAllLayer1Jets.remove( process.jetGenJetMatch ) -process.makeAllLayer1Jets += process.myJetGenJetMatch -process.makeAllLayer1Jets.remove( process.allLayer1Jets ) -process.makeAllLayer1Jets += process.allLayer1Jets -process.allLayer1Jets.genJetMatch = "myJetGenJetMatch" - -# Define the path -process.p = cms.Path( - process.patDefaultSequence -) - -process.maxEvents.input = 1000 # Reduce number of events for testing. -process.out.fileName = 'edmPatMcMatch.root' -process.out.outputCommands += [ 'keep recoGenParticles_genParticles_*_*' ] # Keeps the MC objects for references -process.options.wantSummary = False # to suppress the long output at the end of the job diff --git a/PhysicsTools/PatExamples/test/producePatTrigger_cfg.py b/PhysicsTools/PatExamples/test/producePatTrigger_cfg.py index cf6f10eef1249..97cab407acd6a 100644 --- a/PhysicsTools/PatExamples/test/producePatTrigger_cfg.py +++ b/PhysicsTools/PatExamples/test/producePatTrigger_cfg.py @@ -12,12 +12,18 @@ ## Modifications ## --- # general -process.maxEvents.input = 1000 # reduce number of events for testing. +from PhysicsTools.PatAlgos.tools.cmsswVersionTools import pickRelValInputFiles +process.source.fileNames = pickRelValInputFiles( cmsswVersion = 'CMSSW_5_3_6' + , relVal = 'RelValProdTTbar' + , globalTag = 'START53_V14' + , dataTier = 'AODSIM' + , maxVersions = 2 + , numberOfFiles = -1 + ) +process.maxEvents.input = -1 # reduce number of events for testing. process.options.wantSummary = False # to suppress the long output at the end of the job # specific -process.patJetCorrFactors.useRho = False -process.patJets.addTagInfos = False # to save space -process.selectedPatMuons.cut = 'isTrackerMuon=1 & isGlobalMuon=1 & innerTrack.numberOfValidHits>=11 & globalTrack.normalizedChi2<10.0 & globalTrack.hitPattern.numberOfValidMuonHits>0 & abs(dB)<0.02 & (trackIso+caloIso)/pt<0.05' +process.selectedPatMuons.cut = 'isGlobalMuon && pt > 20. && abs(eta) < 2.1 && globalTrack.normalizedChi2 < 10. && track.hitPattern.trackerLayersWithMeasurement > 5 && globalTrack.hitPattern.numberOfValidMuonHits > 0 && abs(dB) < 0.2 && innerTrack.hitPattern.numberOfValidPixelHits > 0 && numberOfMatchedStations > 1 && (trackIso+caloIso)/pt<0.2' ## --- ## Define the path @@ -40,7 +46,7 @@ , src = cms.InputTag( 'cleanPatMuons' ) , matched = cms.InputTag( 'patTrigger' ) # selections of trigger objects -, matchedCuts = cms.string( 'type( "TriggerMuon" ) && path( "HLT_Mu24_v*", 1, 0 )' ) # input does not yet have the 'saveTags' parameter in HLT +, matchedCuts = cms.string( 'type( "TriggerMuon" ) && path( "HLT_IsoMu24_eta2p1_v*" )' ) # selection of matches , maxDPtRel = cms.double( 0.5 ) # no effect here , maxDeltaR = cms.double( 0.5 ) diff --git a/PhysicsTools/PatExamples/test/producePatTrigger_dataFromRAW_cfg.py b/PhysicsTools/PatExamples/test/producePatTrigger_dataFromRAW_cfg.py new file mode 100644 index 0000000000000..959b7c663c0f7 --- /dev/null +++ b/PhysicsTools/PatExamples/test/producePatTrigger_dataFromRAW_cfg.py @@ -0,0 +1,62 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process( "PAT" ) + +## Options and Output Report +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool( True ) +) + +## Source +process.source = cms.Source( "PoolSource" +, fileNames = cms.untracked.vstring( + '/store/data/Run2011A/HT/RAW/v1/000/166/565/DE60076D-A290-E011-9BC9-003048F118C6.root' + ) +, lumisToProcess = cms.untracked.VLuminosityBlockRange( + '166565:12-166565:12' + ) +) +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32( 100 ) +) + +## Geometry and Detector Conditions (needed for a few patTuple production steps) +process.load( "Configuration.StandardSequences.Services_cff" ) +process.load( "Configuration.StandardSequences.Geometry_cff" ) +process.load( "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff" ) +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag( process.GlobalTag, 'auto:com10' ) +process.load( "Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff" ) + +# RAW to DIGI and RECO pre-requisites +process.load( "Configuration.StandardSequences.RawToDigi_Data_cff" ) +process.load( "L1Trigger.Configuration.L1Reco_cff" ) +process.p = cms.Path( + process.gctDigis +* process.gtDigis +* process.gtEvmDigis +* process.scalersRawToDigi +* process.L1Reco +) + +## Output +from L1Trigger.Configuration.L1Trigger_EventContent_cff import L1TriggerAOD +process.out = cms.OutputModule( + "PoolOutputModule" +, fileName = cms.untracked.string( 'patTrigger_dataFromRAW.root' ) +, SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring( + 'p' + ) + ) +, outputCommands = cms.untracked.vstring( + 'drop *' + ) +) +process.outpath = cms.EndPath( + process.out +) + +## PAT trigger +from PhysicsTools.PatAlgos.tools.trigTools import * +switchOnTrigger( process, sequence = 'p', hltProcess = '*' ) # to update event content diff --git a/PhysicsTools/PatExamples/test/producePatZToMuMu_cfg.py b/PhysicsTools/PatExamples/test/producePatZToMuMu_cfg.py deleted file mode 100644 index 323b42affacfd..0000000000000 --- a/PhysicsTools/PatExamples/test/producePatZToMuMu_cfg.py +++ /dev/null @@ -1,48 +0,0 @@ -## Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -## --- -## Use proper input -## --- -from PhysicsTools.PatExamples.samplesCERN_cff import * -process.source.fileNames = zjetsRECO - - -## --- -## Adjust inputs if necessary -## --- -#from PhysicsTools.PatAlgos.tools.cmsswVersionTools import run36xOn35xInput -#run36xOn35xInput(process) - -## This might be needed when running on 383 rereco'ed data -#process.load("RecoJets.Configuration.GenJetParticles_cff") -#process.load("RecoJets.Configuration.RecoGenJets_cff") - -#process.p0 = cms.Path( -# process.genJetParticles * -# process.ak5GenJets -#) - -## --- -## Determine number of events to be processed -## --- -process.maxEvents.input = 100 - -## --- -## Adaptations to the event content -## --- -process.p = cms.Path( - process.patDefaultSequence -) - -## Switch embedding to false -process.patMuons.embedStandAloneMuon = False -process.patMuons.embedCombinedMuon = False -process.patMuons.embedTrack = False - -## Keep tracks and track extras instead -process.out.outputCommands+= [ - "keep *_globalMuons_*_*", - "keep *_generalTracks_*_*", - "keep *_standAloneMuons_*_*" - ] diff --git a/PhysicsTools/PatExamples/test/profileResponseFunction.py b/PhysicsTools/PatExamples/test/profileResponseFunction.py new file mode 100755 index 0000000000000..f59232f5024a9 --- /dev/null +++ b/PhysicsTools/PatExamples/test/profileResponseFunction.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import sys, os, math, array, ROOT, getopt +from array import * + +def main(): + + print "\n \n \t good morning! :-) This script profiles the 2D response functions. \n \n Usage: \n python "+sys.argv[0]+" -i inputfileWith2DHisto.root -o myOutputPlotName -d directoryOf2DHisto -n HistogramName \n \n" + + #Read in Parameters + letters = 'i:o:d:n' + keywords = ['input', 'output', 'dir', 'name'] + opts, extraparams = getopt.getopt(sys.argv[1:], letters, keywords) + input='TFileServiceOutput.root' + output='profiledResponseFunction' + dir='jecAnalyzer' + histname='Response' + for o,p in opts: + if o in ['-i','--input']: + input = p + elif o in ['-o','--output']: + output = p + elif o in ['-d','--dir']: + dir = p + elif o in ['-n','--name']: + histname = p + + print 'Input:',input + print 'Output: ',output + print 'Directory: ', dir + print 'Histogram name: ', histname + + # ReadIn File + inputfile = ROOT.TFile.Open(input) + # Get 2D Histo + histo2d = inputfile.Get("%s/%s" % (dir, histname)) + # Profiling + c = ROOT.TCanvas("canvas", "canvas", 800, 800) + c.cd() + prof = histo2d.ProfileX() + prof.GetYaxis().SetTitle("p_{T}(reco)/p_{T}(gen)") + prof.SetTitle("Response function of "+dir) + prof.Draw() + c.Print(output+"_"+dir+"_"+histname+".png") + +if __name__ == '__main__': + data = main() diff --git a/PhysicsTools/PatExamples/test/vplusjets_cfg.py b/PhysicsTools/PatExamples/test/vplusjets_cfg.py deleted file mode 100644 index 0e42a0ad0921e..0000000000000 --- a/PhysicsTools/PatExamples/test/vplusjets_cfg.py +++ /dev/null @@ -1,75 +0,0 @@ -# This is an example PAT configuration showing the usage of PAT on full sim samples - -# Starting with a skeleton process which gets imported with the following line -from PhysicsTools.PatAlgos.patTemplate_cfg import * - -# note that you can use a bunch of core tools of PAT -# to taylor your PAT configuration; for a few examples -# uncomment the following lines - -from PhysicsTools.PatAlgos.tools.coreTools import * -#removeMCMatching(process, 'Muons') -#removeAllPATObjectsBut(process, ['Muons']) -#removeSpecificPATObjects(process, ['Electrons', 'Muons', 'Taus']) - -# add the trigger information to the configuration -from PhysicsTools.PatAlgos.tools.trigTools import * -switchOnTrigger( process ) -from PhysicsTools.PatAlgos.patEventContent_cff import patTriggerEventContent - -# add the flavor history -process.load("PhysicsTools.HepMCCandAlgos.flavorHistoryPaths_cfi") - -# switch from "ak5" to "antikt5" if running on 31x samples. -run33xOn31xMC = False -if run33xOn31xMC : - switchJetCollection(process, - cms.InputTag('antikt5CaloJets'), - doJTA = True, - doBTagging = True, - jetCorrLabel = ('AK5','Calo'), - doType1MET = True, - genJetCollection = cms.InputTag("antikt5GenJets") - ) - process.cFlavorHistoryProducer.matchedSrc = cms.InputTag("antikt5GenJets") - process.bFlavorHistoryProducer.matchedSrc = cms.InputTag("antikt5GenJets") - - -# shrink the event content -# jets -process.allLayer1Jets.tagInfoSources = cms.VInputTag( - cms.InputTag("secondaryVertexTagInfos") - ) -process.selectedLayer1Jets.cut = cms.string("pt > 20 & abs(eta) < 5") -process.allLayer1Jets.embedGenJetMatch = cms.bool(False) -# electrons -process.allLayer1Electrons.isoDeposits = cms.PSet() -process.allLayer1Electrons.embedGsfTrack = cms.bool(False) -process.allLayer1Electrons.embedSuperCluster = cms.bool(False) -# muons -process.allLayer1Muons.isoDeposits = cms.PSet() -# photons -process.allLayer1Photons.isoDeposits = cms.PSet() -process.allLayer1Photons.embedSuperCluster = cms.bool(False) -#taus -process.allLayer1Taus.isoDeposits = cms.PSet() - -# let it run -process.p = cms.Path( - process.flavorHistorySeq * - process.patDefaultSequence - ) - -# In addition you usually want to change the following parameters: -# -# process.GlobalTag.globaltag = ... ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) -process.source.fileNames = [ - '/store/relval/CMSSW_3_3_0_pre2/RelValTTbar/GEN-SIM-RECO/STARTUP31X_V7-v1/0002/BA958CA5-B19B-DE11-90C6-0018F3D0961A.root' - ] -# process.maxEvents.input = ... ## (e.g. -1 to run on all events) -process.out.outputCommands += ['keep *_flavorHistoryFilter_*_*'] -process.out.outputCommands += patTriggerEventContent -process.out.dropMetaData = cms.untracked.string("DROPPED") -#process.out.outputCommands += patTriggerStandAloneEventContent -process.out.fileName = 'vplusjets.root' -process.options.wantSummary = True ## (to suppress the long output at the end of the job) diff --git a/PhysicsTools/PatUtils/interface/ShiftedJetProducerT.h b/PhysicsTools/PatUtils/interface/ShiftedJetProducerT.h index 8ddad0b1987e3..d187070ccd7fe 100644 --- a/PhysicsTools/PatUtils/interface/ShiftedJetProducerT.h +++ b/PhysicsTools/PatUtils/interface/ShiftedJetProducerT.h @@ -57,7 +57,7 @@ class ShiftedJetProducerT : public edm::EDProducer jetCorrUncertaintyTag_ = cfg.getParameter("jetCorrUncertaintyTag"); if ( cfg.exists("jetCorrInputFileName") ) { jetCorrInputFileName_ = cfg.getParameter("jetCorrInputFileName"); - if ( !jetCorrInputFileName_.isLocal()) throw cms::Exception("ShiftedJetProducerT") + if ( jetCorrInputFileName_.location() == edm::FileInPath::Unknown) throw cms::Exception("ShiftedJetProducerT") << " Failed to find JEC parameter file = " << jetCorrInputFileName_ << " !!\n"; std::cout << "Reading JEC parameters = " << jetCorrUncertaintyTag_ << " from file = " << jetCorrInputFileName_.fullPath() << "." << std::endl; diff --git a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h index 74023af53504b..ff4cc33e1d367 100644 --- a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h +++ b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h @@ -11,9 +11,7 @@ * * \author Christian Veelken, LLR * - * \version $Revision: 1.9 $ * - * $Id: SmearedJetProducerT.h,v 1.9 2012/08/31 09:58:44 veelken Exp $ * */ @@ -159,7 +157,7 @@ class SmearedJetProducerT : public edm::EDProducer edm::FileInPath inputFileName = cfg.getParameter("inputFileName"); std::string lutName = cfg.getParameter("lutName"); - if ( !inputFileName.isLocal() ) + if (inputFileName.location() == edm::FileInPath::Unknown) throw cms::Exception("JetMETsmearInputProducer") << " Failed to find File = " << inputFileName << " !!\n"; diff --git a/PhysicsTools/PatUtils/plugins/ShiftedPFCandidateProducerForNoPileUpPFMEt.cc b/PhysicsTools/PatUtils/plugins/ShiftedPFCandidateProducerForNoPileUpPFMEt.cc index 347ae7fbfba58..107ed629051f8 100644 --- a/PhysicsTools/PatUtils/plugins/ShiftedPFCandidateProducerForNoPileUpPFMEt.cc +++ b/PhysicsTools/PatUtils/plugins/ShiftedPFCandidateProducerForNoPileUpPFMEt.cc @@ -20,7 +20,7 @@ ShiftedPFCandidateProducerForNoPileUpPFMEt::ShiftedPFCandidateProducerForNoPileU jetCorrUncertaintyTag_ = cfg.getParameter("jetCorrUncertaintyTag"); if ( cfg.exists("jetCorrInputFileName") ) { jetCorrInputFileName_ = cfg.getParameter("jetCorrInputFileName"); - if ( !jetCorrInputFileName_.isLocal()) throw cms::Exception("ShiftedJetProducerT") + if ( jetCorrInputFileName_.location() == edm::FileInPath::Unknown) throw cms::Exception("ShiftedJetProducerT") << " Failed to find JEC parameter file = " << jetCorrInputFileName_ << " !!\n"; std::cout << "Reading JEC parameters = " << jetCorrUncertaintyTag_ << " from file = " << jetCorrInputFileName_.fullPath() << "." << std::endl; diff --git a/PhysicsTools/PatUtils/python/tools/metUncertaintyTools.py b/PhysicsTools/PatUtils/python/tools/metUncertaintyTools.py index 5ec5e5dcd42b1..b308a947f55fd 100644 --- a/PhysicsTools/PatUtils/python/tools/metUncertaintyTools.py +++ b/PhysicsTools/PatUtils/python/tools/metUncertaintyTools.py @@ -8,7 +8,7 @@ from PhysicsTools.PatUtils.patPFMETCorrections_cff import * import RecoMET.METProducers.METSigParams_cfi as jetResolutions from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs - + class RunMEtUncertainties(ConfigToolBase): """ Shift energy of electrons, photons, muons, tau-jets and other jets @@ -19,21 +19,21 @@ class RunMEtUncertainties(ConfigToolBase): _defaultParameters=dicttypes.SortedKeysDict() def __init__(self): ConfigToolBase.__init__(self) - self.addParameter(self._defaultParameters, 'electronCollection', cms.InputTag('cleanPatElectrons'), + self.addParameter(self._defaultParameters, 'electronCollection', cms.InputTag('selectedPatElectrons'), "Input electron collection", Type=cms.InputTag, acceptNoneValue=True) - self.addParameter(self._defaultParameters, 'photonCollection', None, # CV: set to empty InputTag to avoid double-counting wrt. cleanPatElectrons collection + self.addParameter(self._defaultParameters, 'photonCollection', None, # CV: set to empty InputTag to avoid double-counting wrt. selectedPatElectrons collection "Input photon collection", Type=cms.InputTag, acceptNoneValue=True) - self.addParameter(self._defaultParameters, 'muonCollection', cms.InputTag('cleanPatMuons'), + self.addParameter(self._defaultParameters, 'muonCollection', cms.InputTag('selectedPatMuons'), "Input muon collection", Type=cms.InputTag, acceptNoneValue=True) - self.addParameter(self._defaultParameters, 'tauCollection', cms.InputTag('cleanPatTaus'), + self.addParameter(self._defaultParameters, 'tauCollection', cms.InputTag('selectedPatTaus'), "Input tau collection", Type=cms.InputTag, acceptNoneValue=True) - self.addParameter(self._defaultParameters, 'jetCollection', cms.InputTag('cleanPatJets'), + self.addParameter(self._defaultParameters, 'jetCollection', cms.InputTag('selectedPatJets'), "Input jet collection", Type=cms.InputTag) - self.addParameter(self._defaultParameters, 'dRjetCleaning', 0.5, + self.addParameter(self._defaultParameters, 'dRjetCleaning', 0.5, "Eta-phi distance for extra jet cleaning", Type=float) - self.addParameter(self._defaultParameters, 'jetCorrLabel', "L3Absolute", + self.addParameter(self._defaultParameters, 'jetCorrLabel', "L3Absolute", "NOTE: use 'L3Absolute' for MC/'L2L3Residual' for Data", Type=str) - self.addParameter(self._defaultParameters, 'doSmearJets', True, + self.addParameter(self._defaultParameters, 'doSmearJets', True, "Flag to enable/disable jet smearing to better match MC to Data", Type=bool) self.addParameter(self._defaultParameters, 'makeType1corrPFMEt', True, "Flag to enable/disable sequence for Type 1 corrected PFMEt", Type=bool) @@ -49,15 +49,15 @@ def __init__(self): "MET sys. shift correction parameters", Type=cms.PSet) self.addParameter(self._defaultParameters, 'doApplySysShiftCorr', False, "Flag to enable/disable usage of MET sys. shift corrections", Type=bool) - self.addParameter(self._defaultParameters, 'jetSmearFileName', 'PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root', - "Name of ROOT file containing histogram with jet smearing factors", Type=str) - self.addParameter(self._defaultParameters, 'jetSmearHistogram', 'pfJetResolutionMCtoDataCorrLUT', - "Name of histogram with jet smearing factors", Type=str) - self.addParameter(self._defaultParameters, 'pfCandCollection', cms.InputTag('particleFlow'), - "Input PFCandidate collection", Type=cms.InputTag) - self.addParameter(self._defaultParameters, 'jetCorrPayloadName', 'AK5PF', + self.addParameter(self._defaultParameters, 'jetSmearFileName', 'PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root', + "Name of ROOT file containing histogram with jet smearing factors", Type=str) + self.addParameter(self._defaultParameters, 'jetSmearHistogram', 'pfJetResolutionMCtoDataCorrLUT', + "Name of histogram with jet smearing factors", Type=str) + self.addParameter(self._defaultParameters, 'pfCandCollection', cms.InputTag('particleFlow'), + "Input PFCandidate collection", Type=cms.InputTag) + self.addParameter(self._defaultParameters, 'jetCorrPayloadName', 'AK5PF', "Use AK5PF for PFJets, AK5Calo for CaloJets", Type=str) - self.addParameter(self._defaultParameters, 'varyByNsigmas', 1.0, + self.addParameter(self._defaultParameters, 'varyByNsigmas', 1.0, "Number of standard deviations by which energies are varied", Type=float) self.addParameter(self._defaultParameters, 'addToPatDefaultSequence', True, "Flag to enable/disable that metUncertaintySequence is inserted into patDefaultSequence", Type=bool) @@ -67,7 +67,7 @@ def __init__(self): "Technical parameter to identify the resulting sequence and its modules (allows multiple calls in a job)", Type=str) self._parameters=copy.deepcopy(self._defaultParameters) self._comment = "" - + def getDefaultParameters(self): return self._defaultParameters @@ -94,13 +94,13 @@ def _addModuleToSequence(self, process, module, moduleName_parts, sequence, post moduleName += part[0].capitalize() + part[1:] else: moduleName += part[0].lower() + part[1:] - lastPart = part + lastPart = part moduleName += postfix setattr(process, moduleName, module) sequence += module - + return moduleName def _addSmearedJets(self, process, jetCollection, smearedJetCollectionName_parts, @@ -110,14 +110,14 @@ def _addSmearedJets(self, process, jetCollection, smearedJetCollectionName_parts smearedJets = cms.EDProducer("SmearedPATJetProducer", src = cms.InputTag(jetCollection), dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), - sigmaMaxGenJetMatch = cms.double(5.), + sigmaMaxGenJetMatch = cms.double(5.), inputFileName = cms.FileInPath(jetSmearFileName), lutName = cms.string(jetSmearHistogram), jetResolutions = jetResolutions.METSignificance_params, # CV: skip jet smearing for pat::Jets for which the jet-energy correction (JEC) factors are either very large or negative # since both cases produce unphysically large tails in the Type 1 corrected MET distribution after the smearing, # - # e.g. raw jet: energy = 50 GeV, eta = 2.86, pt = 1 GeV + # e.g. raw jet: energy = 50 GeV, eta = 2.86, pt = 1 GeV # corr. jet: energy = -3 GeV , pt = -0.1 GeV (JEC factor L1fastjet*L2*L3 = -17) # energy = 10 GeV for corrected jet after smearing # --> smeared raw jet energy = -170 GeV !! @@ -129,7 +129,7 @@ def _addSmearedJets(self, process, jetCollection, smearedJetCollectionName_parts 'jecSetsAvailable & abs(energy - correctedP4("Uncorrected").energy) > (5.*min(energy, correctedP4("Uncorrected").energy))' ), skipRawJetPtThreshold = cms.double(10.), # GeV - skipCorrJetPtThreshold = cms.double(1.e-2) + skipCorrJetPtThreshold = cms.double(1.e-2) ) if shiftBy is not None: setattr(smearedJets, "shiftBy", cms.double(shiftBy*varyByNsigmas)) @@ -139,7 +139,7 @@ def _addSmearedJets(self, process, jetCollection, smearedJetCollectionName_parts getattr(process, "metUncertaintySequence"+postfix), postfix) return smearedJetCollection - + def _propagateMEtUncertainties(self, process, particleCollection, particleType, shiftType, particleCollectionShiftUp, particleCollectionShiftDown, metProducer, sequence, postfix): @@ -148,14 +148,14 @@ def _propagateMEtUncertainties(self, process, # (sum of differences in four-momentum between original and up/down shifted particle collection) moduleMETcorrShiftUp = cms.EDProducer("ShiftedParticleMETcorrInputProducer", srcOriginal = cms.InputTag(particleCollection), - srcShifted = cms.InputTag(particleCollectionShiftUp) + srcShifted = cms.InputTag(particleCollectionShiftUp) ) moduleMETcorrShiftUpName = "patPFMETcorr%s%sUp" % (particleType, shiftType) moduleMETcorrShiftUpName += postfix setattr(process, moduleMETcorrShiftUpName, moduleMETcorrShiftUp) sequence += moduleMETcorrShiftUp moduleMETcorrShiftDown = moduleMETcorrShiftUp.clone( - srcShifted = cms.InputTag(particleCollectionShiftDown) + srcShifted = cms.InputTag(particleCollectionShiftDown) ) moduleMETcorrShiftDownName = "patPFMETcorr%s%sDown" % (particleType, shiftType) moduleMETcorrShiftDownName += postfix @@ -216,7 +216,7 @@ def _isValidInputTag(input): else: return True - def _addShiftedParticleCollections(self, process, + def _addShiftedParticleCollections(self, process, electronCollection, photonCollection, muonCollection, @@ -228,8 +228,8 @@ def _addShiftedParticleCollections(self, process, shiftedParticlesForMEtUncertainties = cms.Sequence() setattr(process, "shiftedParticlesForMEtUncertainties"+postfix, shiftedParticlesForMEtUncertainties) - - shiftedParticleCollections = {} + + shiftedParticleCollections = {} shiftedParticleCollections['electronCollection'] = electronCollection shiftedParticleCollections['photonCollection'] = photonCollection shiftedParticleCollections['muonCollection'] = muonCollection @@ -240,14 +240,14 @@ def _addShiftedParticleCollections(self, process, shiftedParticleCollections['jetCollectionResUp'] = jetCollectionResUp shiftedParticleCollections['jetCollectionResDown'] = jetCollectionResDown collectionsToKeep = [] - + + #-------------------------------------------------------------------------------------------- + # produce collection of jets shifted up/down in energy #-------------------------------------------------------------------------------------------- - # produce collection of jets shifted up/down in energy - #-------------------------------------------------------------------------------------------- # in case of "raw" (uncorrected) MET, # add residual jet energy corrections in quadrature to jet energy uncertainties: - # cf. https://twiki.cern.ch/twiki/bin/view/CMS/MissingETUncertaintyPrescription + # cf. https://twiki.cern.ch/twiki/bin/view/CMS/MissingETUncertaintyPrescription jetsEnUpForRawMEt = cms.EDProducer("ShiftedPATJetProducer", src = cms.InputTag(lastJetCollection), #jetCorrPayloadName = cms.string(jetCorrPayloadName), @@ -256,7 +256,7 @@ def _addShiftedParticleCollections(self, process, jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), addResidualJES = cms.bool(True), jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), - jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), + jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), shiftBy = cms.double(+1.*varyByNsigmas) ) jetCollectionEnUpForRawMEt = \ @@ -312,7 +312,7 @@ def _addShiftedParticleCollections(self, process, binSelection = cms.string('!isEB'), binUncertainty = cms.double(0.015) ), - ), + ), shiftBy = cms.double(+1.*varyByNsigmas) ) electronCollectionEnUp = \ @@ -333,10 +333,10 @@ def _addShiftedParticleCollections(self, process, #-------------------------------------------------------------------------------------------- # produce collection of (high Pt) photon candidates shifted up/down in energy - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- photonCollectionEnUp = None - photonCollectionEnDown = None + photonCollectionEnDown = None if self._isValidInputTag(photonCollection): photonsEnUp = cms.EDProducer("ShiftedPATPhotonProducer", src = photonCollection, @@ -349,7 +349,7 @@ def _addShiftedParticleCollections(self, process, binSelection = cms.string('isEB = false'), binUncertainty = cms.double(0.025) ), - ), + ), shiftBy = cms.double(+1.*varyByNsigmas) ) photonCollectionEnUp = \ @@ -369,11 +369,11 @@ def _addShiftedParticleCollections(self, process, collectionsToKeep.append(photonCollectionEnDown) #-------------------------------------------------------------------------------------------- - # produce collection of muons shifted up/down in energy/momentum + # produce collection of muons shifted up/down in energy/momentum #-------------------------------------------------------------------------------------------- muonCollectionEnUp = None - muonCollectionEnDown = None + muonCollectionEnDown = None if self._isValidInputTag(muonCollection): muonsEnUp = cms.EDProducer("ShiftedPATMuonProducer", src = muonCollection, @@ -398,14 +398,14 @@ def _addShiftedParticleCollections(self, process, #-------------------------------------------------------------------------------------------- # produce collection of tau-jets shifted up/down in energy - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- tauCollectionEnUp = None - tauCollectionEnDown = None + tauCollectionEnDown = None if self._isValidInputTag(tauCollection): tausEnUp = cms.EDProducer("ShiftedPATTauProducer", src = tauCollection, - uncertainty = cms.double(0.03), + uncertainty = cms.double(0.03), shiftBy = cms.double(+1.*varyByNsigmas) ) tauCollectionEnUp = \ @@ -458,12 +458,12 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, configtools.cloneProcessingSnippet(process, process.producePatPFMETCorrectionsOriginalReserved, postfix, removePostfix="OriginalReserved") else: configtools.cloneProcessingSnippet(process, process.producePatPFMETCorrections, postfix) - - # add "nominal" (unshifted) pat::MET collections - getattr(process, "pfCandsNotInJet"+postfix).bottomCollection = pfCandCollection + + # add "nominal" (unshifted) pat::MET collections + getattr(process, "pfCandsNotInJet"+postfix).bottomCollection = pfCandCollection getattr(process, "selectedPatJetsForMETtype1p2Corr"+postfix).src = shiftedParticleCollections['lastJetCollection'] getattr(process, "selectedPatJetsForMETtype2Corr"+postfix).src = shiftedParticleCollections['lastJetCollection'] - + if doApplySysShiftCorr: if not hasattr(process, 'pfMEtSysShiftCorrSequence'): @@ -475,7 +475,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "pfMEtSysShiftCorrSequence"+postfix) metUncertaintySequence += getattr(process, "producePatPFMETCorrections"+postfix) - + patType1correctionsCentralValue = [ cms.InputTag('patPFJetMETtype1p2Corr'+postfix, 'type1') ] if doApplyType0corr: patType1correctionsCentralValue.extend([ cms.InputTag('patPFMETtype0Corr'+postfix) ]) @@ -483,13 +483,13 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, patType1correctionsCentralValue.extend([ cms.InputTag('pfMEtSysShiftCorr'+postfix) ]) getattr(process, "patType1CorrectedPFMet"+postfix).srcType1Corrections = cms.VInputTag(patType1correctionsCentralValue) getattr(process, "patType1p2CorrectedPFMet"+postfix).srcType1Corrections = cms.VInputTag(patType1correctionsCentralValue) - + collectionsToKeep.extend([ 'patPFMet'+postfix, 'patType1CorrectedPFMet'+postfix, 'patType1p2CorrectedPFMet'+postfix]) - setattr(process, "selectedPatJetsForMETtype1p2CorrEnUp"+postfix, + setattr(process, "selectedPatJetsForMETtype1p2CorrEnUp"+postfix, getattr(process, shiftedParticleCollections['jetCollectionEnUpForCorrMEt']).clone( src = cms.InputTag('selectedPatJetsForMETtype1p2Corr'+postfix) )) @@ -522,7 +522,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, src = cms.InputTag('selectedPatJetsForMETtype1p2Corr'+postfix) )) metUncertaintySequence += getattr(process, "selectedPatJetsForMETtype1p2CorrResDown"+postfix) - if makeType1p2corrPFMEt: + if makeType1p2corrPFMEt: setattr(process, "selectedPatJetsForMETtype2CorrResUp"+postfix, getattr(process, shiftedParticleCollections['jetCollectionResUp']).clone( src = cms.InputTag('selectedPatJetsForMETtype2Corr'+postfix) @@ -542,7 +542,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, smearedPatPFMetSequence += getattr(process, "patPFMetForMEtUncertainty"+postfix) setattr(process, "patPFMETcorrJetSmearing"+postfix, cms.EDProducer("ShiftedParticleMETcorrInputProducer", srcOriginal = cms.InputTag(shiftedParticleCollections['cleanedJetCollection']), - srcShifted = cms.InputTag(shiftedParticleCollections['lastJetCollection']) + srcShifted = cms.InputTag(shiftedParticleCollections['lastJetCollection']) )) smearedPatPFMetSequence += getattr(process, "patPFMETcorrJetSmearing"+postfix) getattr(process, "producePatPFMETCorrections"+postfix).replace(getattr(process, "patPFMet"+postfix), smearedPatPFMetSequence) @@ -553,7 +553,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, ) )) smearedPatPFMetSequence += getattr(process, "patPFMet"+postfix) - metUncertaintySequence += smearedPatPFMetSequence + metUncertaintySequence += smearedPatPFMetSequence # propagate shifts in jet energy to "raw" (uncorrected) and Type 1 corrected MET metCollectionsUp_DownForRawMEt = \ @@ -571,7 +571,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, collectionsToKeep.extend(metCollectionsUp_DownForCorrMEt) # propagate shifts in jet energy to Type 1 + 2 corrected MET - if makeType1p2corrPFMEt: + if makeType1p2corrPFMEt: setattr(process, "patPFJetMETtype1p2CorrEnUp"+postfix, getattr(process, "patPFJetMETtype1p2Corr"+postfix).clone( src = cms.InputTag(getattr(process, "selectedPatJetsForMETtype1p2CorrEnUp"+postfix).label()), jetCorrLabel = cms.string(jetCorrLabel) @@ -590,11 +590,11 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, )) metUncertaintySequence += getattr(process, "patPFJetMETtype2CorrEnDown"+postfix) - patType1correctionsJetEnUp = [ cms.InputTag('patPFJetMETtype1p2CorrEnUp'+postfix, 'type1') ] + patType1correctionsJetEnUp = [ cms.InputTag('patPFJetMETtype1p2CorrEnUp'+postfix, 'type1') ] if doApplyType0corr: patType1correctionsJetEnUp.extend([ cms.InputTag('patPFMETtype0Corr'+postfix) ]) if doApplySysShiftCorr: - patType1correctionsJetEnUp.extend([ cms.InputTag('pfMEtSysShiftCorr'+postfix) ]) + patType1correctionsJetEnUp.extend([ cms.InputTag('pfMEtSysShiftCorr'+postfix) ]) setattr(process, "patType1p2CorrectedPFMetJetEnUp"+postfix, getattr(process, "patType1p2CorrectedPFMet"+postfix).clone( srcType1Corrections = cms.VInputTag(patType1correctionsJetEnUp), srcUnclEnergySums = cms.VInputTag( @@ -610,7 +610,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, if doApplyType0corr: patType1correctionsJetEnDown.extend([ cms.InputTag('patPFMETtype0Corr'+postfix) ]) if doApplySysShiftCorr: - patType1correctionsJetEnDown.extend([ cms.InputTag('pfMEtSysShiftCorr'+postfix) ]) + patType1correctionsJetEnDown.extend([ cms.InputTag('pfMEtSysShiftCorr'+postfix) ]) setattr(process, "patType1p2CorrectedPFMetJetEnDown"+postfix, getattr(process, "patType1p2CorrectedPFMetJetEnUp"+postfix).clone( srcType1Corrections = cms.VInputTag(patType1correctionsJetEnDown), srcUnclEnergySums = cms.VInputTag( @@ -634,9 +634,9 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, shiftedParticleCollections['jetCollectionResUp'], shiftedParticleCollections['jetCollectionResDown'], metProducer, metUncertaintySequence, postfix) collectionsToKeep.extend(metCollectionsUp_Down) - + # propagate shifts in jet resolution to Type 1 + 2 corrected MET - if makeType1p2corrPFMEt: + if makeType1p2corrPFMEt: setattr(process, "patPFJetMETtype1p2CorrResUp"+postfix, getattr(process, "patPFJetMETtype1p2Corr"+postfix).clone( src = cms.InputTag(getattr(process, "selectedPatJetsForMETtype1p2CorrResUp"+postfix).label()), jetCorrLabel = cms.string(jetCorrLabel) @@ -730,7 +730,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, unclEnMETcorrectionsDown.extend([ cms.InputTag(moduleUnclEnMETcorrDownName, instanceLabel) for instanceLabel in srcUnclEnMETcorr[1] ] ) - # propagate shifts in jet energy/resolution to "raw" (uncorrected) MET + # propagate shifts in jet energy/resolution to "raw" (uncorrected) MET setattr(process, "patPFMetUnclusteredEnUp"+postfix, getattr(process, "patType1CorrectedPFMet"+postfix).clone( src = cms.InputTag('patPFMet'+postfix), srcType1Corrections = cms.VInputTag(unclEnMETcorrectionsUp) @@ -755,14 +755,14 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, )) metUncertaintySequence += getattr(process, "patType1CorrectedPFMetUnclusteredEnDown"+postfix) collectionsToKeep.append('patType1CorrectedPFMetUnclusteredEnDown'+postfix) - + # propagate shifts in jet energy/resolution to Type 1 + 2 corrected MET - if makeType1p2corrPFMEt: + if makeType1p2corrPFMEt: setattr(process, "patType1p2CorrectedPFMetUnclusteredEnUp"+postfix, getattr(process, "patType1p2CorrectedPFMet"+postfix).clone( srcUnclEnergySums = cms.VInputTag( cms.InputTag('patPFJetMETtype1p2Corr'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnUp'+postfix, 'type2' ), - cms.InputTag('patPFJetMETtype2Corr'+postfix, 'type2' ), + cms.InputTag('patPFJetMETtype2Corr'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype2CorrUnclusteredEnUp'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype1p2Corr'+postfix, 'offset'), cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnUp'+postfix, 'offset'), @@ -776,7 +776,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, srcUnclEnergySums = cms.VInputTag( cms.InputTag('patPFJetMETtype1p2Corr'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnDown'+postfix, 'type2' ), - cms.InputTag('patPFJetMETtype2Corr'+postfix, 'type2' ), + cms.InputTag('patPFJetMETtype2Corr'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype2CorrUnclusteredEnDown'+postfix, 'type2' ), cms.InputTag('patPFJetMETtype1p2Corr'+postfix, 'offset'), cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnDown'+postfix, 'offset'), @@ -787,7 +787,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "patType1p2CorrectedPFMetUnclusteredEnDown"+postfix) collectionsToKeep.append('patType1p2CorrectedPFMetUnclusteredEnDown'+postfix) - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- # propagate shifted electron/photon, muon and tau-jet energies to MET #-------------------------------------------------------------------------------------------- @@ -796,7 +796,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, if makeType1p2corrPFMEt: metProducers.append( getattr(process, "patType1p2CorrectedPFMet"+postfix) ) for metProducer in metProducers: - + if self._isValidInputTag(shiftedParticleCollections['electronCollection']): metCollectionsUp_Down = \ self._propagateMEtUncertainties( @@ -812,7 +812,7 @@ def _addCorrPFMEt(self, process, metUncertaintySequence, shiftedParticleCollections['photonCollectionEnUp'], shiftedParticleCollections['photonCollectionEnDown'], metProducer, metUncertaintySequence, postfix) collectionsToKeep.extend(metCollectionsUp_Down) - + if self._isValidInputTag(shiftedParticleCollections['muonCollection']): metCollectionsUp_Down = \ self._propagateMEtUncertainties( @@ -872,11 +872,11 @@ def _getLeptonsForPFMEtInput(self, shiftedParticleCollections, substituteKeyUnsh else: retVal.append(shiftedParticleCollections[collectionName]) return retVal - + def _addPATMEtProducer(self, process, metUncertaintySequence, pfMEtCollection, patMEtCollection, collectionsToKeep, postfix): - + module = patMETs.clone( metSource = cms.InputTag(pfMEtCollection), addMuonCorrections = cms.bool(False), @@ -886,12 +886,12 @@ def _addPATMEtProducer(self, process, metUncertaintySequence, setattr(process, patMEtCollectionName, module) metUncertaintySequence += module collectionsToKeep.append(patMEtCollectionName) - + def _addPFMEtByMVA(self, process, metUncertaintySequence, shiftedParticleCollections, pfCandCollection, collectionsToKeep, doSmearJets, - makePFMEtByMVA, + makePFMEtByMVA, varyByNsigmas, postfix): @@ -914,9 +914,9 @@ def _addPFMEtByMVA(self, process, metUncertaintySequence, metUncertaintySequence += process.ak5GenJetsNoNu setattr(process, "smearedUncorrectedJetsForPFMEtByMVA"+postfix, cms.EDProducer("SmearedPFJetProducer", src = cms.InputTag('ak5PFJets'), - jetCorrLabel = cms.string("ak5PFL1FastL2L3"), + jetCorrLabel = cms.string("ak5PFL1FastL2L3"), dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), - sigmaMaxGenJetMatch = cms.double(5.), + sigmaMaxGenJetMatch = cms.double(5.), inputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root'), lutName = cms.string('pfJetResolutionMCtoDataCorrLUT'), jetResolutions = jetResolutions.METSignificance_params, @@ -976,14 +976,14 @@ def _addPFMEtByMVA(self, process, metUncertaintySequence, self._addPATMEtProducer(process, metUncertaintySequence, modulePFMEtLeptonShiftDownName, 'patPFMetMVA%s%sDown' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep, postfix) - if self._isValidInputTag(shiftedParticleCollections['jetCollection']): + if self._isValidInputTag(shiftedParticleCollections['jetCollection']): setattr(process, "uncorrectedJetsEnUpForPFMEtByMVA"+postfix, cms.EDProducer("ShiftedPFJetProducer", src = cms.InputTag(lastUncorrectedJetCollectionForPFMEtByMVA), jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), addResidualJES = cms.bool(True), jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), - jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), + jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), shiftBy = cms.double(+1.*varyByNsigmas) )) metUncertaintySequence += getattr(process, "uncorrectedJetsEnUpForPFMEtByMVA"+postfix) @@ -1003,7 +1003,7 @@ def _addPFMEtByMVA(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "correctedJetsEnDownForPFMEtByMVA"+postfix) pfCandCollectionJetEnUp, pfCandCollectionJetEnDown = \ self._addPFCandidatesForPFMEtInput( - process, metUncertaintySequence, + process, metUncertaintySequence, shiftedParticleCollections['lastJetCollection'], "Jet", "En", shiftedParticleCollections['jetCollectionEnUpForCorrMEt'], shiftedParticleCollections['jetCollectionEnDownForCorrMEt'], 0.5, @@ -1069,7 +1069,7 @@ def _addPFMEtByMVA(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "pfMEtMVAJetResDown"+postfix) self._addPATMEtProducer(process, metUncertaintySequence, 'pfMEtMVAJetResDown'+postfix, 'patPFMetMVAJetResDown', collectionsToKeep, postfix) - + setattr(process, "pfCandsNotInJetUnclusteredEnUpForPFMEtByMVA"+postfix, cms.EDProducer("ShiftedPFCandidateProducer", src = cms.InputTag('pfCandsNotInJet'), shiftBy = cms.double(+1.*varyByNsigmas), @@ -1107,10 +1107,10 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, shiftedParticleCollections, pfCandCollection, collectionsToKeep, doSmearJets, - makeNoPileUpPFMEt, + makeNoPileUpPFMEt, varyByNsigmas, postfix): - + if not makeNoPileUpPFMEt: return @@ -1122,8 +1122,8 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, if postfix != "": configtools.cloneProcessingSnippet(process, process.noPileUpPFMEtSequence, postfix) lastCorrectedJetCollectionForNoPileUpPFMEt+= postfix - - + + if doSmearJets: process.load("RecoJets.Configuration.GenJetParticles_cff") metUncertaintySequence += process.genParticlesForJetsNoNu @@ -1131,9 +1131,9 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, metUncertaintySequence += process.ak5GenJetsNoNu setattr(process, "smearedUncorrectedJetsForNoPileUpPFMEt"+postfix, cms.EDProducer("SmearedPFJetProducer", src = cms.InputTag('ak5PFJets'), - jetCorrLabel = cms.string("ak5PFL1FastL2L3"), + jetCorrLabel = cms.string("ak5PFL1FastL2L3"), dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), - sigmaMaxGenJetMatch = cms.double(5.), + sigmaMaxGenJetMatch = cms.double(5.), inputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root'), lutName = cms.string('pfJetResolutionMCtoDataCorrLUT'), jetResolutions = jetResolutions.METSignificance_params, @@ -1192,7 +1192,7 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, modulePFCandidateToVertexAssociationShiftDownName = "pfCandidateToVertexAssociation%s%sDown" % (leptonCollection[0], leptonCollection[1]) modulePFCandidateToVertexAssociationShiftDownName += postfix setattr(process, modulePFCandidateToVertexAssociationShiftDownName, modulePFCandidateToVertexAssociationShiftDown) - metUncertaintySequence += modulePFCandidateToVertexAssociationShiftDown + metUncertaintySequence += modulePFCandidateToVertexAssociationShiftDown modulePFMEtDataLeptonShiftDown = getattr(process, "noPileUpPFMEtData"+postfix).clone( srcPFCandidates = cms.InputTag(pfCandCollectionLeptonShiftDown), srcPFCandToVertexAssociations = cms.InputTag(modulePFCandidateToVertexAssociationShiftDownName) @@ -1213,14 +1213,14 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, self._addPATMEtProducer(process, metUncertaintySequence, modulePFMEtLeptonShiftDownName, 'patPFMetNoPileUp%s%sDown' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep, postfix) - if self._isValidInputTag(shiftedParticleCollections['jetCollection']): + if self._isValidInputTag(shiftedParticleCollections['jetCollection']): setattr(process, "uncorrectedJetsEnUpForNoPileUpPFMEt"+postfix, cms.EDProducer("ShiftedPFJetProducer", src = cms.InputTag(lastUncorrectedJetCollectionForNoPileUpPFMEt), jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), addResidualJES = cms.bool(False), jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), - jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), + jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), shiftBy = cms.double(+1.*varyByNsigmas), ##verbosity = cms.int32(1) )) @@ -1317,13 +1317,13 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "noPileUpPFMEtJetResDown"+postfix) self._addPATMEtProducer(process, metUncertaintySequence, 'noPileUpPFMEtJetResDown'+postfix, 'patPFMetNoPileUpJetResDown', collectionsToKeep, postfix) - + setattr(process, "pfCandsUnclusteredEnUpForNoPileUpPFMEt"+postfix, cms.EDProducer("ShiftedPFCandidateProducerForNoPileUpPFMEt", srcPFCandidates = cms.InputTag('particleFlow'), srcJets = cms.InputTag('calibratedAK5PFJetsForNoPileUpPFMEt'+postfix), jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), - minJetPt = cms.double(10.0), + minJetPt = cms.double(10.0), shiftBy = cms.double(+1.*varyByNsigmas), unclEnUncertainty = cms.double(0.10) )) @@ -1364,7 +1364,7 @@ def _addNoPileUpPFMEt(self, process, metUncertaintySequence, metUncertaintySequence += getattr(process, "noPileUpPFMEtUnclusteredEnDown"+postfix) self._addPATMEtProducer(process, metUncertaintySequence, 'noPileUpPFMEtUnclusteredEnDown'+postfix, 'patPFMetNoPileUpUnclusteredEnDown', collectionsToKeep, postfix) - + def __call__(self, process, electronCollection = None, photonCollection = None, @@ -1411,7 +1411,7 @@ def __call__(self, process, if doApplyType0corr is None: doApplyType0corr = self._defaultParameters['doApplyType0corr'].value if sysShiftCorrParameter is None: - sysShiftCorrParameter = self._defaultParameters['sysShiftCorrParameter'].value + sysShiftCorrParameter = self._defaultParameters['sysShiftCorrParameter'].value if doApplySysShiftCorr is None: doApplySysShiftCorr = self._defaultParameters['doApplySysShiftCorr'].value if sysShiftCorrParameter is None: @@ -1457,10 +1457,10 @@ def __call__(self, process, self.setParameter('addToPatDefaultSequence', addToPatDefaultSequence) self.setParameter('outputModule', outputModule) self.setParameter('postfix', postfix) - - self.apply(process) - - def toolCode(self, process): + + self.apply(process) + + def toolCode(self, process): electronCollection = self._parameters['electronCollection'].value photonCollection = self._parameters['photonCollection'].value muonCollection = self._parameters['muonCollection'].value @@ -1475,7 +1475,7 @@ def toolCode(self, process): makeNoPileUpPFMEt = self._parameters['makeNoPileUpPFMEt'].value doApplyType0corr = self._parameters['doApplyType0corr'].value sysShiftCorrParameter = self._parameters['sysShiftCorrParameter'].value - doApplySysShiftCorr = self._parameters['doApplySysShiftCorr'].value + doApplySysShiftCorr = self._parameters['doApplySysShiftCorr'].value jetSmearFileName = self._parameters['jetSmearFileName'].value jetSmearHistogram = self._parameters['jetSmearHistogram'].value pfCandCollection = self._parameters['pfCandCollection'].value @@ -1510,42 +1510,42 @@ def toolCode(self, process): algorithm = cms.string("byDeltaR"), preselection = cms.string(""), deltaR = cms.double(0.5), - checkRecoComponents = cms.bool(False), + checkRecoComponents = cms.bool(False), pairCut = cms.string(""), requireNoOverlaps = cms.bool(True), )) numOverlapCollections = numOverlapCollections + 1 - lastJetCollection = jetCollection.value() + lastJetCollection = jetCollection.value() if numOverlapCollections >= 1: lastJetCollection = \ self._addModuleToSequence(process, jetsNotOverlappingWithLeptonsForMEtUncertainty, [ jetCollection.value(), "NotOverlappingWithLeptonsForMEtUncertainty" ], metUncertaintySequence, postfix) - cleanedJetCollection = lastJetCollection - + cleanedJetCollection = lastJetCollection + # smear jet energies to account for difference in jet resolutions between MC and Data - # (cf. JME-10-014 PAS) + # (cf. JME-10-014 PAS) jetCollectionResUp = None jetCollectionResDown = None if doSmearJets: lastJetCollection = \ self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value() ], jetSmearFileName, jetSmearHistogram, varyByNsigmas, postfix=postfix) - + jetCollectionResUp = \ self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value(), "ResUp" ], jetSmearFileName, jetSmearHistogram, varyByNsigmas, - -1., postfix=postfix) + -1., postfix=postfix) collectionsToKeep.append(jetCollectionResUp) jetCollectionResDown = \ self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value(), "ResDown" ], jetSmearFileName, jetSmearHistogram, varyByNsigmas, - +1., postfix=postfix) + +1., postfix=postfix) collectionsToKeep.append(jetCollectionResDown) collectionsToKeep.append(lastJetCollection) - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- # produce collection of electrons/photons, muons, tau-jet candidates and jets # shifted up/down in energy by their respective energy uncertainties #-------------------------------------------------------------------------------------------- @@ -1557,13 +1557,13 @@ def toolCode(self, process): muonCollection, tauCollection, jetCollection, cleanedJetCollection, lastJetCollection, - jetCollectionResUp, jetCollectionResDown, + jetCollectionResUp, jetCollectionResDown, varyByNsigmas, postfix) metUncertaintySequence += getattr(process, "shiftedParticlesForMEtUncertainties"+postfix) collectionsToKeep.extend(addCollectionsToKeep) - - #-------------------------------------------------------------------------------------------- + + #-------------------------------------------------------------------------------------------- # propagate shifted particle energies to Type 1 and Type 1 + 2 corrected PFMET #-------------------------------------------------------------------------------------------- @@ -1574,13 +1574,13 @@ def toolCode(self, process): makeType1corrPFMEt, makeType1p2corrPFMEt, doApplyType0corr, - sysShiftCorrParameter, + sysShiftCorrParameter, doApplySysShiftCorr, jetCorrLabel, varyByNsigmas, postfix) - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- # propagate shifted particle energies to MVA-based PFMET #-------------------------------------------------------------------------------------------- @@ -1592,7 +1592,7 @@ def toolCode(self, process): varyByNsigmas, postfix) - #-------------------------------------------------------------------------------------------- + #-------------------------------------------------------------------------------------------- # propagate shifted particle energies to no-PU PFMET #-------------------------------------------------------------------------------------------- @@ -1603,18 +1603,18 @@ def toolCode(self, process): makeNoPileUpPFMEt, varyByNsigmas, postfix) - + # insert metUncertaintySequence into patDefaultSequence - if addToPatDefaultSequence: + if addToPatDefaultSequence and process.options.allowUnscheduled == False: if not hasattr(process, "patDefaultSequence"): raise ValueError("PAT default sequence is not defined !!") - process.patDefaultSequence += metUncertaintySequence - + process.patDefaultSequence += metUncertaintySequence + # add shifted + unshifted collections pf pat::Electrons/Photons, # Muons, Taus, Jets and MET to PAT-tuple event content if outputModule is not None and hasattr(process, outputModule): getattr(process, outputModule).outputCommands = _addEventContent( getattr(process, outputModule).outputCommands, [ 'keep *_%s_*_%s' % (collectionToKeep, process.name_()) for collectionToKeep in collectionsToKeep ]) - + runMEtUncertainties=RunMEtUncertainties() diff --git a/README.md b/README.md new file mode 100644 index 0000000000000..6b3396ebd7f3f --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +cmssw +===== + +CMS Offline Software + + +CondTools/Ecal/python : Alignment : pb with EcalTrivialAlignment_cfi.py ++ copyFileAlignEB_cfg.py and copyFileAlignEE_cfg.py + + +CalibCaorimetry/EcalTrivialCondModules/data : myEBAlignment_2011.txt and myEEAlignment_2011.txt diff --git a/RecoBTag/ImpactParameter/python/impactParameter_cff.py b/RecoBTag/ImpactParameter/python/impactParameter_cff.py index 4d877344a4dd1..5f6a056d5cd9d 100644 --- a/RecoBTag/ImpactParameter/python/impactParameter_cff.py +++ b/RecoBTag/ImpactParameter/python/impactParameter_cff.py @@ -8,13 +8,13 @@ # MVA from RecoBTag.ImpactParameter.impactParameterMVAComputer_cfi import * from RecoBTag.ImpactParameter.impactParameterMVABJetTags_cfi import * -#B Jet Prob +# Jet BProb from RecoBTag.ImpactParameter.jetBProbabilityComputer_cfi import * from RecoBTag.ImpactParameter.jetBProbabilityBJetTags_cfi import * -#Jet Prob +# Jet Prob from RecoBTag.ImpactParameter.jetProbabilityComputer_cfi import * from RecoBTag.ImpactParameter.jetProbabilityBJetTags_cfi import * -# HighEff +# High Eff from RecoBTag.ImpactParameter.trackCounting3D2ndComputer_cfi import * from RecoBTag.ImpactParameter.trackCountingHighEffBJetTags_cfi import * # High Purity @@ -23,8 +23,26 @@ # Negative Tags -from RecoBTag.ImpactParameter.negativeTrackCountingHighEffJetTags_cfi import * -from RecoBTag.ImpactParameter.negativeTrackCountingHighPurJetTags_cfi import * +# Jet BProb +from RecoBTag.ImpactParameter.negativeOnlyJetBProbabilityComputer_cfi import * +from RecoBTag.ImpactParameter.negativeOnlyJetBProbabilityJetTags_cfi import * +# Jet Prob +from RecoBTag.ImpactParameter.negativeOnlyJetProbabilityComputer_cfi import * +from RecoBTag.ImpactParameter.negativeOnlyJetProbabilityJetTags_cfi import * +# High Eff from RecoBTag.ImpactParameter.negativeTrackCounting3D2ndComputer_cfi import * +from RecoBTag.ImpactParameter.negativeTrackCountingHighEffJetTags_cfi import * +# High Purity from RecoBTag.ImpactParameter.negativeTrackCounting3D3rdComputer_cfi import * +from RecoBTag.ImpactParameter.negativeTrackCountingHighPurJetTags_cfi import * + +# Positive Tags + +# Jet BProb +from RecoBTag.ImpactParameter.positiveOnlyJetBProbabilityComputer_cfi import * +from RecoBTag.ImpactParameter.positiveOnlyJetBProbabilityJetTags_cfi import * +# Jet Prob +from RecoBTag.ImpactParameter.positiveOnlyJetProbabilityComputer_cfi import * +from RecoBTag.ImpactParameter.positiveOnlyJetProbabilityJetTags_cfi import * + diff --git a/RecoBTag/ImpactParameter/python/impactParameter_cfi.py b/RecoBTag/ImpactParameter/python/impactParameter_cfi.py index 9f3190b6fee9d..c432dab25f04c 100644 --- a/RecoBTag/ImpactParameter/python/impactParameter_cfi.py +++ b/RecoBTag/ImpactParameter/python/impactParameter_cfi.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms impactParameterTagInfos = cms.EDProducer("TrackIPProducer", - jetTracks = cms.InputTag("ak5JetTracksAssociatorAtVertex"), + jetTracks = cms.InputTag("ak5JetTracksAssociatorAtVertexPF"), primaryVertex = cms.InputTag("offlinePrimaryVertices"), computeProbabilities = cms.bool(True), computeGhostTrack = cms.bool(True), diff --git a/RecoBTag/ImpactParameter/python/negativeOnlyJetBProbabilityComputer_cfi.py b/RecoBTag/ImpactParameter/python/negativeOnlyJetBProbabilityComputer_cfi.py index fec55ee092e81..384c59200f40d 100644 --- a/RecoBTag/ImpactParameter/python/negativeOnlyJetBProbabilityComputer_cfi.py +++ b/RecoBTag/ImpactParameter/python/negativeOnlyJetBProbabilityComputer_cfi.py @@ -1,7 +1,10 @@ import FWCore.ParameterSet.Config as cms +from RecoBTag.ImpactParameter.variableJTA_cfi import * + # jetBProbability btag computer negativeOnlyJetBProbability = cms.ESProducer("JetBProbabilityESProducer", + variableJTAPars, impactParameterType = cms.int32(0), ## 0 = 3D, 1 = 2D deltaR = cms.double(-1.0), ## use cut from JTA @@ -13,7 +16,8 @@ numberOfBTracks = cms.uint32(4), maximumDecayLength = cms.double(5.0), - trackQualityClass = cms.string("any") + trackQualityClass = cms.string("any"), + useVariableJTA = cms.bool(False) ) diff --git a/RecoBTag/ImpactParameter/python/negativeOnlyJetProbabilityComputer_cfi.py b/RecoBTag/ImpactParameter/python/negativeOnlyJetProbabilityComputer_cfi.py index 7b19094c8d598..3d450e862e2a2 100644 --- a/RecoBTag/ImpactParameter/python/negativeOnlyJetProbabilityComputer_cfi.py +++ b/RecoBTag/ImpactParameter/python/negativeOnlyJetProbabilityComputer_cfi.py @@ -1,7 +1,10 @@ import FWCore.ParameterSet.Config as cms +from RecoBTag.ImpactParameter.variableJTA_cfi import * + # negativeOnlyJetProbability btag computer negativeOnlyJetProbability = cms.ESProducer("JetProbabilityESProducer", + variableJTAPars, impactParameterType = cms.int32(0), ## 0 = 3D, 1 = 2D deltaR = cms.double(0.3), @@ -10,7 +13,8 @@ minimumProbability = cms.double(0.005), maximumDecayLength = cms.double(5.0), - trackQualityClass = cms.string("any") + trackQualityClass = cms.string("any"), + useVariableJTA = cms.bool(False) ) diff --git a/RecoBTag/ImpactParameter/python/positiveOnlyJetBProbabilityComputer_cfi.py b/RecoBTag/ImpactParameter/python/positiveOnlyJetBProbabilityComputer_cfi.py index 1cee0201944d2..38fa7f3f463e6 100644 --- a/RecoBTag/ImpactParameter/python/positiveOnlyJetBProbabilityComputer_cfi.py +++ b/RecoBTag/ImpactParameter/python/positiveOnlyJetBProbabilityComputer_cfi.py @@ -1,7 +1,10 @@ import FWCore.ParameterSet.Config as cms +from RecoBTag.ImpactParameter.variableJTA_cfi import * + # jetBProbability btag computer positiveOnlyJetBProbability = cms.ESProducer("JetBProbabilityESProducer", + variableJTAPars, impactParameterType = cms.int32(0), ## 0 = 3D, 1 = 2D deltaR = cms.double(-1.0), ## use cut from JTA diff --git a/RecoBTag/ImpactParameter/python/positiveOnlyJetProbabilityComputer_cfi.py b/RecoBTag/ImpactParameter/python/positiveOnlyJetProbabilityComputer_cfi.py index 53e50b4b931ab..5e131c0e353de 100644 --- a/RecoBTag/ImpactParameter/python/positiveOnlyJetProbabilityComputer_cfi.py +++ b/RecoBTag/ImpactParameter/python/positiveOnlyJetProbabilityComputer_cfi.py @@ -1,7 +1,10 @@ import FWCore.ParameterSet.Config as cms +from RecoBTag.ImpactParameter.variableJTA_cfi import * + # positiveOnlyJetProbability btag computer positiveOnlyJetProbability = cms.ESProducer("JetProbabilityESProducer", + variableJTAPars, impactParameterType = cms.int32(0), ## 0 = 3D, 1 = 2D deltaR = cms.double(0.3), diff --git a/RecoBTag/PerformanceDB/python/BTagPerformanceDBWinter13.py b/RecoBTag/PerformanceDB/python/BTagPerformanceDBWinter13.py new file mode 100644 index 0000000000000..3dc8a5e56b02a --- /dev/null +++ b/RecoBTag/PerformanceDB/python/BTagPerformanceDBWinter13.py @@ -0,0 +1,5 @@ +from RecoBTag.PerformanceDB.measure.Btag_btagMistagWinter13 import * +from RecoBTag.PerformanceDB.measure.Btag_btagMuJetsWpNoTtbar import * +from RecoBTag.PerformanceDB.measure.Btag_btagMuJetsWpTtbar import * +from RecoBTag.PerformanceDB.measure.Btag_btagTtbarWpWinter13 import * +from RecoBTag.PerformanceDB.measure.Btag_btagTtbarDiscrimWinter13 import * diff --git a/RecoBTag/PerformanceDB/python/PoolBTagPerformanceDBWinter13.py b/RecoBTag/PerformanceDB/python/PoolBTagPerformanceDBWinter13.py new file mode 100644 index 0000000000000..1340d9623f5ee --- /dev/null +++ b/RecoBTag/PerformanceDB/python/PoolBTagPerformanceDBWinter13.py @@ -0,0 +1,5 @@ +from RecoBTag.PerformanceDB.measure.Pool_btagMistagWinter13 import * +from RecoBTag.PerformanceDB.measure.Pool_btagMuJetsWpNoTtbar import * +from RecoBTag.PerformanceDB.measure.Pool_btagMuJetsWpTtbar import * +from RecoBTag.PerformanceDB.measure.Pool_btagTtbarWpWinter13 import * +from RecoBTag.PerformanceDB.measure.Pool_btagTtbarDiscrimWinter13 import * diff --git a/RecoBTag/PerformanceDB/python/measure/Btag_btagMistagWinter13.py b/RecoBTag/PerformanceDB/python/measure/Btag_btagMistagWinter13.py new file mode 100644 index 0000000000000..d293ab15b1f90 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Btag_btagMistagWinter13.py @@ -0,0 +1,105 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_MISTAGCSVL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVL'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVL_T'), + WorkingPointName = cms.string('MISTAGCSVL_WP') +) + +BtagPerformanceESProducer_MISTAGCSVM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVM'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVM_T'), + WorkingPointName = cms.string('MISTAGCSVM_WP') +) + +BtagPerformanceESProducer_MISTAGCSVT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVT_T'), + WorkingPointName = cms.string('MISTAGCSVT_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1L_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1L_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1M_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1M_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1T_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1T_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1L_T'), + WorkingPointName = cms.string('MISTAGCSVV1L_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1M_T'), + WorkingPointName = cms.string('MISTAGCSVV1M_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1T_T'), + WorkingPointName = cms.string('MISTAGCSVV1T_WP') +) + +BtagPerformanceESProducer_MISTAGJPL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPL'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPL_T'), + WorkingPointName = cms.string('MISTAGJPL_WP') +) + +BtagPerformanceESProducer_MISTAGJPM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPM'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPM_T'), + WorkingPointName = cms.string('MISTAGJPM_WP') +) + +BtagPerformanceESProducer_MISTAGJPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPT_T'), + WorkingPointName = cms.string('MISTAGJPT_WP') +) + +BtagPerformanceESProducer_MISTAGTCHPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGTCHPT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGTCHPT_T'), + WorkingPointName = cms.string('MISTAGTCHPT_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpNoTtbar.py b/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpNoTtbar.py new file mode 100644 index 0000000000000..f1ffc60a01c6c --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpNoTtbar.py @@ -0,0 +1,105 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVL'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVL_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVL_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVM'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVM_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVM_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVT'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVT_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVT_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVV1L_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVV1L_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVV1M_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVV1M_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVV1T_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVV1T_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVSLV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1L_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1L_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVSLV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1M_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1M_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARCSVSLV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1T_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARCSVSLV1T_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARJPL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARJPL'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARJPL_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARJPL_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARJPM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARJPM'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARJPM_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARJPM_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARJPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARJPT'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARJPT_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARJPT_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGNOTTBARTCHPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGNOTTBARTCHPT'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGNOTTBARTCHPT_T'), + WorkingPointName = cms.string('MUJETSWPBTAGNOTTBARTCHPT_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpTtbar.py b/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpTtbar.py new file mode 100644 index 0000000000000..03944c4c9f921 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Btag_btagMuJetsWpTtbar.py @@ -0,0 +1,81 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVL'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVL_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVL_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVM'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVM_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVM_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVT'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVT_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVT_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVV1L_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVV1L_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVV1M_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVV1M_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVV1T_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVV1T_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVSLV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVSLV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVSLV1L_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVSLV1L_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVSLV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVSLV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVSLV1M_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVSLV1M_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARCSVSLV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARCSVSLV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARCSVSLV1T_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARCSVSLV1T_WP') +) + +BtagPerformanceESProducer_MUJETSWPBTAGTTBARTCHPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MUJETSWPBTAGTTBARTCHPT'), +# this is where it gets the payload from + PayloadName = cms.string('MUJETSWPBTAGTTBARTCHPT_T'), + WorkingPointName = cms.string('MUJETSWPBTAGTTBARTCHPT_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarDiscrimWinter13.py b/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarDiscrimWinter13.py new file mode 100644 index 0000000000000..43c0c04b52b64 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarDiscrimWinter13.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_TTBARDISCRIMBTAGCSV = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARDISCRIMBTAGCSV'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARDISCRIMBTAGCSV_T'), + WorkingPointName = cms.string('TTBARDISCRIMBTAGCSV_WP') +) + +BtagPerformanceESProducer_TTBARDISCRIMBTAGJP = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARDISCRIMBTAGJP'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARDISCRIMBTAGJP_T'), + WorkingPointName = cms.string('TTBARDISCRIMBTAGJP_WP') +) + +BtagPerformanceESProducer_TTBARDISCRIMBTAGTCHP = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARDISCRIMBTAGTCHP'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARDISCRIMBTAGTCHP_T'), + WorkingPointName = cms.string('TTBARDISCRIMBTAGTCHP_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarWpWinter13.py b/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarWpWinter13.py new file mode 100644 index 0000000000000..ca8d388118ae5 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Btag_btagTtbarWpWinter13.py @@ -0,0 +1,57 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_TTBARWPBTAGCSVL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGCSVL'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGCSVL_T'), + WorkingPointName = cms.string('TTBARWPBTAGCSVL_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGCSVM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGCSVM'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGCSVM_T'), + WorkingPointName = cms.string('TTBARWPBTAGCSVM_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGCSVT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGCSVT'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGCSVT_T'), + WorkingPointName = cms.string('TTBARWPBTAGCSVT_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGJPL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGJPL'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGJPL_T'), + WorkingPointName = cms.string('TTBARWPBTAGJPL_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGJPM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGJPM'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGJPM_T'), + WorkingPointName = cms.string('TTBARWPBTAGJPM_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGJPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGJPT'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGJPT_T'), + WorkingPointName = cms.string('TTBARWPBTAGJPT_WP') +) + +BtagPerformanceESProducer_TTBARWPBTAGTCHPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('TTBARWPBTAGTCHPT'), +# this is where it gets the payload from + PayloadName = cms.string('TTBARWPBTAGTCHPT_T'), + WorkingPointName = cms.string('TTBARWPBTAGTCHPT_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Pool_btagMistagWinter13.py b/RecoBTag/PerformanceDB/python/measure/Pool_btagMistagWinter13.py new file mode 100644 index 0000000000000..d293ab15b1f90 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Pool_btagMistagWinter13.py @@ -0,0 +1,105 @@ +import FWCore.ParameterSet.Config as cms + +BtagPerformanceESProducer_MISTAGCSVL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVL'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVL_T'), + WorkingPointName = cms.string('MISTAGCSVL_WP') +) + +BtagPerformanceESProducer_MISTAGCSVM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVM'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVM_T'), + WorkingPointName = cms.string('MISTAGCSVM_WP') +) + +BtagPerformanceESProducer_MISTAGCSVT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVT_T'), + WorkingPointName = cms.string('MISTAGCSVT_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1L_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1L_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1M_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1M_WP') +) + +BtagPerformanceESProducer_MISTAGCSVSLV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVSLV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVSLV1T_T'), + WorkingPointName = cms.string('MISTAGCSVSLV1T_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1L = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1L'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1L_T'), + WorkingPointName = cms.string('MISTAGCSVV1L_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1M = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1M'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1M_T'), + WorkingPointName = cms.string('MISTAGCSVV1M_WP') +) + +BtagPerformanceESProducer_MISTAGCSVV1T = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGCSVV1T'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGCSVV1T_T'), + WorkingPointName = cms.string('MISTAGCSVV1T_WP') +) + +BtagPerformanceESProducer_MISTAGJPL = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPL'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPL_T'), + WorkingPointName = cms.string('MISTAGJPL_WP') +) + +BtagPerformanceESProducer_MISTAGJPM = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPM'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPM_T'), + WorkingPointName = cms.string('MISTAGJPM_WP') +) + +BtagPerformanceESProducer_MISTAGJPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGJPT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGJPT_T'), + WorkingPointName = cms.string('MISTAGJPT_WP') +) + +BtagPerformanceESProducer_MISTAGTCHPT = cms.ESProducer("BtagPerformanceESProducer", +# this is what it makes available + ComponentName = cms.string('MISTAGTCHPT'), +# this is where it gets the payload from + PayloadName = cms.string('MISTAGTCHPT_T'), + WorkingPointName = cms.string('MISTAGTCHPT_WP') +) diff --git a/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpNoTtbar.py b/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpNoTtbar.py new file mode 100644 index 0000000000000..6f009238099ab --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpNoTtbar.py @@ -0,0 +1,142 @@ +import FWCore.ParameterSet.Config as cms + +from CondCore.DBCommon.CondDBCommon_cfi import * + +PoolDBESSourcebtagMuJetsWpNoTtbar = cms.ESSource("PoolDBESSource", + CondDBCommon, + toGet = cms.VPSet( + # + # working points + # + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVL_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVL_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVM_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVM_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVT_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1L_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1L_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1M_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1M_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1T_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVV1T_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVSLV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1L_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVSLV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1L_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVSLV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1M_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVSLV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1M_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARCSVSLV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1T_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARCSVSLV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARCSVSLV1T_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARJPL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPL_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARJPL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPL_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARJPM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPM_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARJPM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPM_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARJPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARJPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARJPT_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGNOTTBARTCHPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARTCHPT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGNOTTBARTCHPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGNOTTBARTCHPT_WP') + ), +)) +PoolDBESSourcebtagMuJetsWpNoTtbar.connect = 'frontier://FrontierProd/CMS_COND_PAT_000' diff --git a/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpTtbar.py b/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpTtbar.py new file mode 100644 index 0000000000000..298434078784c --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Pool_btagMuJetsWpTtbar.py @@ -0,0 +1,112 @@ +import FWCore.ParameterSet.Config as cms + +from CondCore.DBCommon.CondDBCommon_cfi import * + +PoolDBESSourcebtagMuJetsWpTtbar = cms.ESSource("PoolDBESSource", + CondDBCommon, + toGet = cms.VPSet( + # + # working points + # + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVL_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVL_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVL_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVM_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVM_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVM_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVT_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1L_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1L_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1M_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1M_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1T_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVV1T_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVSLV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1L_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVSLV1L_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1L_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVSLV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1M_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVSLV1M_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1M_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARCSVSLV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1T_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARCSVSLV1T_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARCSVSLV1T_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_MUJETSWPBTAGTTBARTCHPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARTCHPT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_MUJETSWPBTAGTTBARTCHPT_v10_offline'), + label = cms.untracked.string('MUJETSWPBTAGTTBARTCHPT_WP') + ), +)) +PoolDBESSourcebtagMuJetsWpTtbar.connect = 'frontier://FrontierProd/CMS_COND_PAT_000' diff --git a/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarDiscrimWinter13.py b/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarDiscrimWinter13.py new file mode 100644 index 0000000000000..6eb9a058cca6a --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarDiscrimWinter13.py @@ -0,0 +1,42 @@ +import FWCore.ParameterSet.Config as cms + +from CondCore.DBCommon.CondDBCommon_cfi import * + +PoolDBESSourcebtagTtbarDiscrim = cms.ESSource("PoolDBESSource", + CondDBCommon, + toGet = cms.VPSet( + # + # working points + # + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_TTBARDISCRIMBTAGCSV_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGCSV_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARDISCRIMBTAGCSV_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGCSV_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_TTBARDISCRIMBTAGJP_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGJP_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARDISCRIMBTAGJP_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGJP_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromBinnedTFormula_TTBARDISCRIMBTAGTCHP_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGTCHP_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARDISCRIMBTAGTCHP_v10_offline'), + label = cms.untracked.string('TTBARDISCRIMBTAGTCHP_WP') + ), +)) +PoolDBESSourcebtagTtbarDiscrim.connect = 'frontier://FrontierProd/CMS_COND_PAT_000' diff --git a/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarWpWinter13.py b/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarWpWinter13.py new file mode 100644 index 0000000000000..67ec0159791d7 --- /dev/null +++ b/RecoBTag/PerformanceDB/python/measure/Pool_btagTtbarWpWinter13.py @@ -0,0 +1,82 @@ +import FWCore.ParameterSet.Config as cms + +from CondCore.DBCommon.CondDBCommon_cfi import * + +PoolDBESSourcebtagTtbarWp = cms.ESSource("PoolDBESSource", + CondDBCommon, + toGet = cms.VPSet( + # + # working points + # + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGCSVL_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVL_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGCSVL_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVL_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGCSVM_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVM_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGCSVM_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVM_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGCSVT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGCSVT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGCSVT_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGJPL_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPL_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGJPL_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPL_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGJPM_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPM_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGJPM_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPM_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGJPT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGJPT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGJPT_WP') + ), + cms.PSet( + record = cms.string('PerformancePayloadRecord'), + tag = cms.string('PerformancePayloadFromTable_TTBARWPBTAGTCHPT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGTCHPT_T') + ), + cms.PSet( + record = cms.string('PerformanceWPRecord'), + tag = cms.string('PerformanceWorkingPoint_TTBARWPBTAGTCHPT_v10_offline'), + label = cms.untracked.string('TTBARWPBTAGTCHPT_WP') + ), +)) +PoolDBESSourcebtagTtbarWp.connect = 'frontier://FrontierProd/CMS_COND_PAT_000' diff --git a/RecoBTag/SecondaryVertex/interface/SimpleSecondaryVertexComputer.h b/RecoBTag/SecondaryVertex/interface/SimpleSecondaryVertexComputer.h index 8c273cb3ad40b..895ec45ea6d72 100644 --- a/RecoBTag/SecondaryVertex/interface/SimpleSecondaryVertexComputer.h +++ b/RecoBTag/SecondaryVertex/interface/SimpleSecondaryVertexComputer.h @@ -16,17 +16,22 @@ class SimpleSecondaryVertexComputer : public JetTagComputer { public: SimpleSecondaryVertexComputer(const edm::ParameterSet ¶meters) : - use2d(!parameters.getParameter("use3d")), + use2d(!parameters.getParameter("use3d")), useSig(parameters.getParameter("useSignificance")), - unBoost(parameters.getParameter("unBoost")), - minTracks(parameters.getParameter("minTracks")) - { uses("svTagInfos"); } + unBoost(parameters.getParameter("unBoost")), + minTracks(parameters.getParameter("minTracks")), + minVertices_(1) + { + uses("svTagInfos"); + minVertices_ = parameters.existsAs("minVertices") ? parameters.getParameter("minVertices") : 1 ; + } float discriminator(const TagInfoHelper &tagInfos) const { const reco::SecondaryVertexTagInfo &info = tagInfos.get(); - unsigned int idx = 0; + if(info.nVertices() < minVertices_) return -1; + unsigned int idx = 0; while(idx < info.nVertices()) { if (info.nVertexTracks(idx) >= minTracks) break; @@ -63,6 +68,7 @@ class SimpleSecondaryVertexComputer : public JetTagComputer { bool useSig; bool unBoost; unsigned int minTracks; + unsigned int minVertices_; }; #endif // RecoBTag_SecondaryVertex_SimpleSecondaryVertexComputer_h diff --git a/RecoBTag/SecondaryVertex/plugins/BVertexFilter.cc b/RecoBTag/SecondaryVertex/plugins/BVertexFilter.cc index cc44af23ebbd8..94e4cc62e2db7 100644 --- a/RecoBTag/SecondaryVertex/plugins/BVertexFilter.cc +++ b/RecoBTag/SecondaryVertex/plugins/BVertexFilter.cc @@ -13,7 +13,7 @@ // // Original Author: Andrea RIZZI // Created: Mon Dec 7 18:02:10 CET 2009 -// $Id: BVertexFilter.cc,v 1.1 2010/06/04 11:36:57 arizzi Exp $ +// $Id: BVertexFilter.cc,v 1.2 2012/10/06 21:17:41 alschmid Exp $ // // @@ -78,25 +78,28 @@ BVertexFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) iEvent.getByLabel(primaryVertexCollection,pvHandle); edm::Handle svHandle; iEvent.getByLabel(secondaryVertexCollection,svHandle); - const reco::Vertex & primary = (*pvHandle.product())[0]; - const reco::VertexCollection & vertices = *svHandle.product(); std::auto_ptr recoVertices(new reco::VertexCollection); - - if(! primary.isFake()) - { - for(reco::VertexCollection::const_iterator it=vertices.begin() ; it!=vertices.end() ; ++it) - { - GlobalVector axis(0,0,0); - if(useVertexKinematicAsJetAxis) axis = GlobalVector(it->p4().X(),it->p4().Y(),it->p4().Z()); - if(svFilter(primary,reco::SecondaryVertex(primary,*it,axis,true),axis)) { - count++; - recoVertices->push_back(*it); + if(pvHandle->size()!=0) { + const reco::Vertex & primary = (*pvHandle.product())[0]; + const reco::VertexCollection & vertices = *svHandle.product(); + + + if(! primary.isFake()) + { + for(reco::VertexCollection::const_iterator it=vertices.begin() ; it!=vertices.end() ; ++it) + { + GlobalVector axis(0,0,0); + if(useVertexKinematicAsJetAxis) axis = GlobalVector(it->p4().X(),it->p4().Y(),it->p4().Z()); + if(svFilter(primary,reco::SecondaryVertex(primary,*it,axis,true),axis)) { + count++; + recoVertices->push_back(*it); } - } + } + } } - iEvent.put(recoVertices); - - return(count >= minVertices); + iEvent.put(recoVertices); + + return(count >= minVertices); } diff --git a/RecoBTag/SecondaryVertex/plugins/BtoCharmDecayVertexMerger.cc b/RecoBTag/SecondaryVertex/plugins/BtoCharmDecayVertexMerger.cc new file mode 100644 index 0000000000000..3141e7b470f7b --- /dev/null +++ b/RecoBTag/SecondaryVertex/plugins/BtoCharmDecayVertexMerger.cc @@ -0,0 +1,244 @@ +// this code is partially taken from BCandidateProducer of L. Wehrli + +// first revised prototype version for CMSSW 29.Aug.2012 + +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "RecoVertex/VertexTools/interface/VertexDistance3D.h" +#include "RecoBTag/SecondaryVertex/interface/SecondaryVertex.h" + +#include "DataFormats/GeometryVector/interface/VectorUtil.h" + +#include + +class BtoCharmDecayVertexMerger : public edm::EDProducer { + public: + BtoCharmDecayVertexMerger(const edm::ParameterSet ¶ms); + + virtual void produce(edm::Event &event, const edm::EventSetup &es); + + private: + + + edm::InputTag primaryVertexCollection; + edm::InputTag secondaryVertexCollection; + reco::Vertex pv; + // double maxFraction; + // double minSignificance; + + double minDRForUnique, vecSumIMCUTForUnique, minCosPAtomerge, maxPtreltomerge; + + // a vertex proxy for sorting using stl + struct vertexProxy{ + reco::Vertex vert; + double invm; + size_t ntracks; + }; + + // comparison operator for vertexProxy, used in sorting + friend bool operator<(vertexProxy v1, vertexProxy v2){ + if(v1.ntracks>2 && v2.ntracks<3) return true; + if(v1.ntracks<3 && v2.ntracks>2) return false; + return (v1.invm>v2.invm); + } + + void resolveBtoDchain(std::vector& coll, unsigned int i, unsigned int k); + GlobalVector flightDirection(reco::Vertex &pv, reco::Vertex &sv); +}; + + + +BtoCharmDecayVertexMerger::BtoCharmDecayVertexMerger(const edm::ParameterSet ¶ms) : + primaryVertexCollection(params.getParameter("primaryVertices")), + secondaryVertexCollection(params.getParameter("secondaryVertices")), + minDRForUnique(params.getUntrackedParameter("minDRUnique",0.4)), + vecSumIMCUTForUnique(params.getUntrackedParameter("minvecSumIMifsmallDRUnique",5.5)), + minCosPAtomerge(params.getUntrackedParameter("minCosPAtomerge",0.99)), + maxPtreltomerge(params.getUntrackedParameter("maxPtreltomerge",7777.0)) + // maxFraction(params.getParameter("maxFraction")), + // minSignificance(params.getParameter("minSignificance")) +{ + produces(); +} +//----------------------- +void BtoCharmDecayVertexMerger::produce(edm::Event &iEvent, const edm::EventSetup &iSetup){ + + using namespace reco; + // PV + edm::Handle PVcoll; + iEvent.getByLabel(primaryVertexCollection, PVcoll); + + if(PVcoll->size()!=0) { + + const reco::VertexCollection pvc = *( PVcoll.product()); + pv = pvc[0]; + + // get the IVF collection + edm::Handle secondaryVertices; + iEvent.getByLabel(secondaryVertexCollection, secondaryVertices); + + + + //loop over vertices, fill into own collection for sorting + std::vector vertexProxyColl; + for(std::vector::const_iterator sv = secondaryVertices->begin(); + sv != secondaryVertices->end(); ++sv) { + vertexProxy vtx = {*sv,(*sv).p4().M(),(*sv).tracksSize()}; + vertexProxyColl.push_back( vtx ); + } + + // sort the vertices by mass and track multiplicity + sort( vertexProxyColl.begin(), vertexProxyColl.end()); + + + // loop forward over all vertices + for(unsigned int iVtx=0; iVtx < vertexProxyColl.size(); iVtx++){ + + // nested loop backwards (in order to start from light masses) + // check all vertices against each other for B->D chain + for(unsigned int kVtx=vertexProxyColl.size()-1; kVtx>iVtx; kVtx--){ + // remove D vertices from the collection and add the tracks to the original one + resolveBtoDchain(vertexProxyColl, iVtx, kVtx); + } + } + + // now create new vertex collection and add to event + VertexCollection *bvertices = new VertexCollection(); + for(std::vector::iterator it=vertexProxyColl.begin(); it!=vertexProxyColl.end(); it++) bvertices->push_back((*it).vert); + std::auto_ptr bvertColl(bvertices); + iEvent.put(bvertColl); + } + else{ + std::auto_ptr bvertCollEmpty(new VertexCollection); + iEvent.put(bvertCollEmpty); + } +} + + +//------------------------------------ +void BtoCharmDecayVertexMerger::resolveBtoDchain(std::vector& coll, unsigned int i, unsigned int k){ + using namespace reco; + + GlobalVector momentum1 = GlobalVector(coll[i].vert.p4().X(), coll[i].vert.p4().Y(), coll[i].vert.p4().Z()); + GlobalVector momentum2 = GlobalVector(coll[k].vert.p4().X(), coll[k].vert.p4().Y(), coll[k].vert.p4().Z()); + + reco::SecondaryVertex sv1(pv, coll[i].vert, momentum1 , true); + reco::SecondaryVertex sv2(pv, coll[k].vert, momentum2 , true); + + + // find out which one is near and far + reco::SecondaryVertex svNear = sv1; + reco::SecondaryVertex svFar = sv2; + GlobalVector momentumNear = momentum1; + GlobalVector momentumFar = momentum2; + + // swap if it is the other way around + if(sv1.dist3d().value() >= sv2.dist3d().value()){ + svNear = sv2; + svFar = sv1; + momentumNear = momentum2; + momentumFar = momentum1; + } + GlobalVector nearToFar = flightDirection( svNear, svFar); + GlobalVector pvToNear = flightDirection( pv, svNear); + + double cosPA = nearToFar.dot(momentumFar) / momentumFar.mag()/ nearToFar.mag(); + double cosa = pvToNear. dot(momentumFar) / pvToNear.mag() / momentumFar.mag(); + double ptrel = sqrt(1.0 - cosa*cosa)* momentumFar.mag(); + + double vertexDeltaR = Geom::deltaR(flightDirection(pv, sv1), flightDirection(pv, sv2) ); + + // create a set of all tracks from both vertices, avoid double counting by using a std::set<> + std::set trackrefs; + // first vertex + for(reco::Vertex::trackRef_iterator ti = sv1.tracks_begin(); ti!=sv1.tracks_end(); ti++){ + if(sv1.trackWeight(*ti)>0.5){ + reco::TrackRef t = ti->castTo(); + trackrefs.insert(t); + } + } + // second vertex + for(reco::Vertex::trackRef_iterator ti = sv2.tracks_begin(); ti!=sv2.tracks_end(); ti++){ + if(sv2.trackWeight(*ti)>0.5){ + reco::TrackRef t = ti->castTo(); + trackrefs.insert(t); + } + } + + // now calculate one LorentzVector from the track momenta + ROOT::Math::LorentzVector > mother; + for(std::set::const_iterator it = trackrefs.begin(); it!= trackrefs.end(); it++){ + ROOT::Math::LorentzVector > temp ( (*it)->px(),(*it)->py(),(*it)->pz(), 0.13957 ); + mother += temp; + } + + + // check if criteria for merging are fulfilled + if(vertexDeltaRminCosPAtomerge && fabs(ptrel) tracks_; + std::vector refittedTracks_; + std::vector weights_; + for(reco::Vertex::trackRef_iterator it = coll[i].vert.tracks_begin(); it!=coll[i].vert.tracks_end(); it++) { + tracks_.push_back( *it); + refittedTracks_.push_back( coll[i].vert.refittedTrack(*it)); + weights_.push_back( coll[i].vert.trackWeight(*it) ); + } + // delete tracks and add all tracks back, and check in which vertex the weight is larger + coll[i].vert.removeTracks(); + std::vector::iterator it2 = refittedTracks_.begin(); + std::vector::iterator it3 = weights_.begin(); + for(reco::Vertex::trackRef_iterator it = tracks_.begin(); it!=tracks_.end(); it++, it2++, it3++){ + float weight = *it3; + float weight2= sv2.trackWeight(*it); + Track refittedTrackWithLargerWeight = *it2; + if( weight2 >weight) { + weight = weight2; + refittedTrackWithLargerWeight = sv2.refittedTrack(*it); + } + coll[i].vert.add(*it , refittedTrackWithLargerWeight , weight); + } + } + + // remove the second vertex from the collection + coll.erase( coll.begin() + k ); + } + +} +//------------- + + +GlobalVector +BtoCharmDecayVertexMerger::flightDirection(reco::Vertex &pv, reco::Vertex &sv){ + GlobalVector res(sv.position().X() - pv.position().X(), + sv.position().Y() - pv.position().Y(), + sv.position().Z() - pv.position().Z()); + return res; +} + + + +DEFINE_FWK_MODULE(BtoCharmDecayVertexMerger); diff --git a/RecoBTag/SecondaryVertex/plugins/BuildFile.xml b/RecoBTag/SecondaryVertex/plugins/BuildFile.xml index 87d1fdb3283fc..204bb6a6ab551 100644 --- a/RecoBTag/SecondaryVertex/plugins/BuildFile.xml +++ b/RecoBTag/SecondaryVertex/plugins/BuildFile.xml @@ -8,7 +8,7 @@ - + diff --git a/RecoBTag/SecondaryVertex/python/bToCharmDecayVertexMerger_cfi.py b/RecoBTag/SecondaryVertex/python/bToCharmDecayVertexMerger_cfi.py new file mode 100644 index 0000000000000..1191bb350e600 --- /dev/null +++ b/RecoBTag/SecondaryVertex/python/bToCharmDecayVertexMerger_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +bToCharmDecayVertexMerged = cms.EDProducer("BtoCharmDecayVertexMerger", + primaryVertices = cms.InputTag("offlinePrimaryVertices"), + secondaryVertices = cms.InputTag("inclusiveMergedVerticesFiltered"), + minDRUnique = cms.untracked.double(0.4), + minvecSumIMifsmallDRUnique = cms.untracked.double(5.5), + minCosPAtomerge = cms.untracked.double(0.99), + maxPtreltomerge = cms.untracked.double(7777.0) +) diff --git a/RecoBTag/SecondaryVertex/python/combinedInclusiveSecondaryVertexPositiveBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/combinedInclusiveSecondaryVertexPositiveBJetTags_cfi.py new file mode 100644 index 0000000000000..6a12bbe60241c --- /dev/null +++ b/RecoBTag/SecondaryVertex/python/combinedInclusiveSecondaryVertexPositiveBJetTags_cfi.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +combinedInclusiveSecondaryVertexPositiveBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('combinedSecondaryVertexPositive'), + tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), + cms.InputTag("inclusiveSecondaryVertexFinderTagInfos")) +) diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexBJetTags_cfi.py index d5c5c3409d2c1..4b7e540156a9c 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexBJetTags_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexBJetTags_cfi.py @@ -5,3 +5,9 @@ tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), cms.InputTag("secondaryVertexTagInfos")) ) + +combinedSecondaryVertexV1BJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('combinedSecondaryVertexV1'), + tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexTagInfos")) +) diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexES_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexES_cfi.py index a054d06a45557..df13d07edb6e4 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexES_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexES_cfi.py @@ -11,3 +11,13 @@ 'CombinedSVNoVertex'), categoryVariableName = cms.string('vertexCategory') ) + +combinedSecondaryVertexV1 = cms.ESProducer("CombinedSecondaryVertexESProducer", + combinedSecondaryVertexCommon, + useCategories = cms.bool(True), + calibrationRecords = cms.vstring( + 'CombinedSVRetrainRecoVertex', + 'CombinedSVRetrainPseudoVertex', + 'CombinedSVRetrainNoVertex'), + categoryVariableName = cms.string('vertexCategory') +) diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeBJetTags_cfi.py index 9eb306a16aa56..ec2c7c5583fb4 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeBJetTags_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeBJetTags_cfi.py @@ -5,3 +5,9 @@ tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), cms.InputTag("secondaryVertexNegativeTagInfos")) ) + +combinedSecondaryVertexV1NegativeBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('combinedSecondaryVertexV1Negative'), + tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexNegativeTagInfos")) +) diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeES_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeES_cfi.py index 612e3c5cb2e49..afd9bb995be29 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeES_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexNegativeES_cfi.py @@ -9,3 +9,11 @@ combinedSecondaryVertexNegative.trackPseudoSelection.sip3dSigMax = 0 combinedSecondaryVertexNegative.trackPseudoSelection.sip2dSigMin = -99999.9 combinedSecondaryVertexNegative.trackPseudoSelection.sip2dSigMax = -2.0 + +combinedSecondaryVertexV1Negative = RecoBTag.SecondaryVertex.combinedSecondaryVertexES_cfi.combinedSecondaryVertexV1.clone() +combinedSecondaryVertexV1Negative.vertexFlip = True +combinedSecondaryVertexV1Negative.trackFlip = True +combinedSecondaryVertexV1Negative.trackSelection.sip3dSigMax = 0 +combinedSecondaryVertexV1Negative.trackPseudoSelection.sip3dSigMax = 0 +combinedSecondaryVertexV1Negative.trackPseudoSelection.sip2dSigMin = -99999.9 +combinedSecondaryVertexV1Negative.trackPseudoSelection.sip2dSigMax = -2.0 diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveBJetTags_cfi.py index b8e6ae3bc5c46..d70e2db33bc95 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveBJetTags_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveBJetTags_cfi.py @@ -5,3 +5,9 @@ tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), cms.InputTag("secondaryVertexTagInfos")) ) + +combinedSecondaryVertexV1PositiveBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('combinedSecondaryVertexV1Positive'), + tagInfos = cms.VInputTag(cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexTagInfos")) +) diff --git a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveES_cfi.py b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveES_cfi.py index ad84e24f21d9c..eb67038277d55 100644 --- a/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveES_cfi.py +++ b/RecoBTag/SecondaryVertex/python/combinedSecondaryVertexPositiveES_cfi.py @@ -5,3 +5,7 @@ combinedSecondaryVertexPositive = RecoBTag.SecondaryVertex.combinedSecondaryVertexES_cfi.combinedSecondaryVertex.clone() combinedSecondaryVertexPositive.trackSelection.sip3dSigMin = 0 combinedSecondaryVertexPositive.trackPseudoSelection.sip3dSigMin = 0 + +combinedSecondaryVertexV1Positive = RecoBTag.SecondaryVertex.combinedSecondaryVertexES_cfi.combinedSecondaryVertexV1.clone() +combinedSecondaryVertexV1Positive.trackSelection.sip3dSigMin = 0 +combinedSecondaryVertexV1Positive.trackPseudoSelection.sip3dSigMin = 0 diff --git a/RecoBTag/SecondaryVertex/python/doubleSecondaryVertexHighEffBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/doubleSecondaryVertexHighEffBJetTags_cfi.py new file mode 100644 index 0000000000000..64edfa1a62665 --- /dev/null +++ b/RecoBTag/SecondaryVertex/python/doubleSecondaryVertexHighEffBJetTags_cfi.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +doubleSecondaryVertexHighEffBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('doubleVertex2Trk'), + tagInfos = cms.VInputTag(cms.InputTag("inclusiveSecondaryVertexFinderFilteredTagInfos")) +) diff --git a/RecoBTag/SecondaryVertex/python/doubleVertex2TrkES_cfi.py b/RecoBTag/SecondaryVertex/python/doubleVertex2TrkES_cfi.py new file mode 100644 index 0000000000000..63a68786229b2 --- /dev/null +++ b/RecoBTag/SecondaryVertex/python/doubleVertex2TrkES_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +doubleVertex2Trk = cms.ESProducer("SimpleSecondaryVertexESProducer", + use3d = cms.bool(True), + unBoost = cms.bool(False), + useSignificance = cms.bool(True), + minTracks = cms.uint32(2), + minVertices = cms.uint32(2) +) diff --git a/RecoBTag/SecondaryVertex/python/inclusiveSecondaryVertexFinderTagInfos_cfi.py b/RecoBTag/SecondaryVertex/python/inclusiveSecondaryVertexFinderTagInfos_cfi.py index 23c16da8be4e6..3662ada5a917a 100644 --- a/RecoBTag/SecondaryVertex/python/inclusiveSecondaryVertexFinderTagInfos_cfi.py +++ b/RecoBTag/SecondaryVertex/python/inclusiveSecondaryVertexFinderTagInfos_cfi.py @@ -11,3 +11,15 @@ inclusiveSecondaryVertexFinderTagInfos.vertexCuts.fracPV = 0.79 ## 4 out of 5 is discarded inclusiveSecondaryVertexFinderTagInfos.vertexCuts.distSig2dMin = 2.0 + + +# filtered IVF as used in some analyses + +inclusiveSecondaryVertexFinderFilteredTagInfos = secondaryVertexTagInfos.clone() + +inclusiveSecondaryVertexFinderFilteredTagInfos.extSVCollection = cms.InputTag('bToCharmDecayVertexMerged') +inclusiveSecondaryVertexFinderFilteredTagInfos.extSVDeltaRToJet = cms.double(0.5) +inclusiveSecondaryVertexFinderFilteredTagInfos.useExternalSV = cms.bool(True) +inclusiveSecondaryVertexFinderFilteredTagInfos.vertexCuts.fracPV = 0.79 ## 4 out of 5 is discarded +inclusiveSecondaryVertexFinderFilteredTagInfos.vertexCuts.distSig2dMin = 2.0 + diff --git a/RecoBTag/SecondaryVertex/python/secondaryVertex_cff.py b/RecoBTag/SecondaryVertex/python/secondaryVertex_cff.py index 8eb2a46c9e0c2..4d24bc1c7b6fe 100644 --- a/RecoBTag/SecondaryVertex/python/secondaryVertex_cff.py +++ b/RecoBTag/SecondaryVertex/python/secondaryVertex_cff.py @@ -15,16 +15,32 @@ from RecoBTag.SecondaryVertex.ghostTrackES_cfi import * from RecoBTag.SecondaryVertex.ghostTrackBJetTags_cfi import * -#IVF +# IVF from RecoBTag.SecondaryVertex.inclusiveSecondaryVertexFinderTagInfos_cfi import * from RecoBTag.SecondaryVertex.combinedInclusiveSecondaryVertexBJetTags_cfi import * #from RecoBTag.SecondaryVertex.combinedIVFES_cfi import * #not yet using dedicated training, share CSV ones +from RecoBTag.SecondaryVertex.bVertexFilter_cfi import * +inclusiveMergedVerticesFiltered = bVertexFilter.clone() +inclusiveMergedVerticesFiltered.vertexFilter.multiplicityMin = 2 +inclusiveMergedVerticesFiltered.secondaryVertices = cms.InputTag("inclusiveMergedVertices") -#negative taggers +from RecoBTag.SecondaryVertex.bToCharmDecayVertexMerger_cfi import * +from RecoBTag.SecondaryVertex.simpleInclusiveSecondaryVertexBJetTags_cfi import * +from RecoBTag.SecondaryVertex.doubleVertex2TrkES_cfi import * +from RecoBTag.SecondaryVertex.doubleSecondaryVertexHighEffBJetTags_cfi import * + +# Negative taggers from RecoBTag.SecondaryVertex.secondaryVertexNegativeTagInfos_cfi import * from RecoBTag.SecondaryVertex.simpleSecondaryVertexNegativeHighEffBJetTags_cfi import * from RecoBTag.SecondaryVertex.simpleSecondaryVertexNegativeHighPurBJetTags_cfi import * +from RecoBTag.SecondaryVertex.combinedSecondaryVertexNegativeES_cfi import * +from RecoBTag.SecondaryVertex.combinedSecondaryVertexNegativeBJetTags_cfi import * + +# Positive taggers +from RecoBTag.SecondaryVertex.combinedSecondaryVertexPositiveES_cfi import * +from RecoBTag.SecondaryVertex.combinedSecondaryVertexPositiveBJetTags_cfi import * +from RecoBTag.SecondaryVertex.combinedInclusiveSecondaryVertexPositiveBJetTags_cfi import * -# backwards compatibility +# Backwards compatibility simpleSecondaryVertexBJetTags = simpleSecondaryVertexHighEffBJetTags.clone() diff --git a/RecoBTag/SecondaryVertex/python/simpleInclusiveSecondaryVertexBJetTags_cfi.py b/RecoBTag/SecondaryVertex/python/simpleInclusiveSecondaryVertexBJetTags_cfi.py new file mode 100644 index 0000000000000..51047e94036a5 --- /dev/null +++ b/RecoBTag/SecondaryVertex/python/simpleInclusiveSecondaryVertexBJetTags_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + + +simpleInclusiveSecondaryVertexHighEffBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('simpleSecondaryVertex2Trk'), + tagInfos = cms.VInputTag(cms.InputTag("inclusiveSecondaryVertexFinderFilteredTagInfos")) +) + +simpleInclusiveSecondaryVertexHighPurBJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('simpleSecondaryVertex3Trk'), + tagInfos = cms.VInputTag(cms.InputTag("inclusiveSecondaryVertexFinderFilteredTagInfos")) +) diff --git a/RecoBTag/SoftLepton/python/muonSelection.py b/RecoBTag/SoftLepton/python/muonSelection.py new file mode 100644 index 0000000000000..61642a4485b58 --- /dev/null +++ b/RecoBTag/SoftLepton/python/muonSelection.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms + +All = cms.uint32(0) # dummy options - always true +AllGlobalMuons = cms.uint32(1) # checks isGlobalMuon flag +AllStandAloneMuons = cms.uint32(2) # checks isStandAloneMuon flag +AllTrackerMuons = cms.uint32(3) # checks isTrackerMuon flag +TrackerMuonArbitrated = cms.uint32(4) # resolve ambiguity of sharing segments +AllArbitrated = cms.uint32(5) # all muons with the tracker muon arbitrated +GlobalMuonPromptTight = cms.uint32(6) # global muons with tighter fit requirements +TMLastStationLoose = cms.uint32(7) # penetration depth loose selector +TMLastStationTight = cms.uint32(8) # penetration depth tight selector +TM2DCompatibilityLoose = cms.uint32(9) # likelihood based loose selector +TM2DCompatibilityTight = cms.uint32(10) # likelihood based tight selector +TMOneStationLoose = cms.uint32(11) # require one well matched segment +TMOneStationTight = cms.uint32(12) # require one well matched segment +TMLastStationOptimizedLowPtLoose = cms.uint32(13) # combination of TMLastStation and TMOneStation +TMLastStationOptimizedLowPtTight = cms.uint32(14) # combination of TMLastStation and TMOneStation diff --git a/RecoBTag/SoftLepton/python/softLepton_cff.py b/RecoBTag/SoftLepton/python/softLepton_cff.py index 93c65dd41bba3..436b3e3e69701 100644 --- a/RecoBTag/SoftLepton/python/softLepton_cff.py +++ b/RecoBTag/SoftLepton/python/softLepton_cff.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms from TrackingTools.TransientTrack.TransientTrackBuilder_cfi import * from RecoBTau.JetTagComputer.jetTagRecord_cfi import * +from RecoBTag.SoftLepton.softMuonTagInfos_cfi import * from RecoBTag.SoftLepton.softPFElectronTagInfos_cfi import * from RecoBTag.SoftLepton.softPFMuonTagInfos_cfi import * from RecoBTag.SoftLepton.SoftLeptonByMLP_cfi import * diff --git a/RecoBTag/SoftLepton/python/softMuonTagInfos_cfi.py b/RecoBTag/SoftLepton/python/softMuonTagInfos_cfi.py new file mode 100644 index 0000000000000..0af8745618ff1 --- /dev/null +++ b/RecoBTag/SoftLepton/python/softMuonTagInfos_cfi.py @@ -0,0 +1,18 @@ +import FWCore.ParameterSet.Config as cms +import RecoBTag.SoftLepton.muonSelection + +# SoftLeptonTagInfo producer for tagging caloJets with global muons +softMuonTagInfos = cms.EDProducer("SoftLepton", + primaryVertex = cms.InputTag("offlinePrimaryVertices"), + jets = cms.InputTag("ak5PFJetsCHS"), + leptons = cms.InputTag("muons"), + leptonCands = cms.InputTag(""), # optional + leptonId = cms.InputTag(""), # optional + + refineJetAxis = cms.uint32(0), # use calorimetric jet direction by default + + leptonDeltaRCut = cms.double(0.4), # lepton distance from jet axis + leptonChi2Cut = cms.double(9999.0), # no cut on lepton's track's chi2/ndof + + muonSelection = RecoBTag.SoftLepton.muonSelection.AllGlobalMuons +) diff --git a/RecoBTag/SoftLepton/python/softPFElectronTagInfos_cfi.py b/RecoBTag/SoftLepton/python/softPFElectronTagInfos_cfi.py index e9c7e2cf09992..89dfbbbbd42cd 100644 --- a/RecoBTag/SoftLepton/python/softPFElectronTagInfos_cfi.py +++ b/RecoBTag/SoftLepton/python/softPFElectronTagInfos_cfi.py @@ -2,5 +2,5 @@ softPFElectronsTagInfos = cms.EDProducer("SoftPFElectronTagInfoProducer", primaryVertex = cms.InputTag("offlinePrimaryVertices"), - jets = cms.InputTag("ak5PFJets") + jets = cms.InputTag("ak5PFJetsCHS") ) diff --git a/RecoBTag/SoftLepton/python/softPFMuonTagInfos_cfi.py b/RecoBTag/SoftLepton/python/softPFMuonTagInfos_cfi.py index 53406348b48d2..32f3d3b84fb83 100644 --- a/RecoBTag/SoftLepton/python/softPFMuonTagInfos_cfi.py +++ b/RecoBTag/SoftLepton/python/softPFMuonTagInfos_cfi.py @@ -2,6 +2,6 @@ softPFMuonsTagInfos = cms.EDProducer("SoftPFMuonTagInfoProducer", primaryVertex = cms.InputTag("offlinePrimaryVertices"), - jets = cms.InputTag("ak5PFJets"), + jets = cms.InputTag("ak5PFJetsCHS"), MuonId =cms.int32(0) ) diff --git a/RecoBTau/JetTagComputer/python/combinedMVABJetTags_cfi.py b/RecoBTau/JetTagComputer/python/combinedMVABJetTags_cfi.py index 22a51ebe903cf..31a04220a3f0a 100644 --- a/RecoBTau/JetTagComputer/python/combinedMVABJetTags_cfi.py +++ b/RecoBTau/JetTagComputer/python/combinedMVABJetTags_cfi.py @@ -5,7 +5,17 @@ tagInfos = cms.VInputTag( cms.InputTag("impactParameterTagInfos"), cms.InputTag("secondaryVertexTagInfos"), - cms.InputTag("softMuonTagInfos"), - cms.InputTag("softElectronTagInfos") + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") + ) +) + +combinedSecondaryVertexSoftPFLeptonV1BJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('combinedSecondaryVertexSoftPFLeptonV1'), + tagInfos = cms.VInputTag( + cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexTagInfos"), + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") ) ) diff --git a/RecoBTau/JetTagComputer/python/combinedMVAES_cfi.py b/RecoBTau/JetTagComputer/python/combinedMVAES_cfi.py index 4a5c31d33c092..d4743bcc9028b 100644 --- a/RecoBTau/JetTagComputer/python/combinedMVAES_cfi.py +++ b/RecoBTau/JetTagComputer/python/combinedMVAES_cfi.py @@ -17,12 +17,39 @@ cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('softMuon') + jetTagComputer = cms.string('softPFMuon') ), cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('softElectron') + jetTagComputer = cms.string('softPFElectron') + ) + ) +) + +combinedSecondaryVertexSoftPFLeptonV1 = cms.ESProducer("CombinedMVAJetTagESProducer", + useCategories = cms.bool(False), + calibrationRecord = cms.string('CombinedCSVSL'), + jetTagComputers = cms.VPSet( + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('jetProbability') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('combinedSecondaryVertexV1') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('softPFMuon') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('softPFElectron') ) ) ) diff --git a/RecoBTau/JetTagComputer/python/combinedMVA_cff.py b/RecoBTau/JetTagComputer/python/combinedMVA_cff.py index 72fcf7905bf11..ab5c19437ac8e 100644 --- a/RecoBTau/JetTagComputer/python/combinedMVA_cff.py +++ b/RecoBTau/JetTagComputer/python/combinedMVA_cff.py @@ -2,3 +2,7 @@ from RecoBTau.JetTagComputer.combinedMVAES_cfi import * from RecoBTau.JetTagComputer.combinedMVABJetTags_cfi import * +from RecoBTau.JetTagComputer.negativeCombinedMVAES_cfi import * +from RecoBTau.JetTagComputer.negativeCombinedMVABJetTags_cfi import * +from RecoBTau.JetTagComputer.positiveCombinedMVAES_cfi import * +from RecoBTau.JetTagComputer.positiveCombinedMVABJetTags_cfi import * diff --git a/RecoBTau/JetTagComputer/python/negativeCombinedMVABJetTags_cfi.py b/RecoBTau/JetTagComputer/python/negativeCombinedMVABJetTags_cfi.py index 19df82d32c854..136c47969a122 100644 --- a/RecoBTau/JetTagComputer/python/negativeCombinedMVABJetTags_cfi.py +++ b/RecoBTau/JetTagComputer/python/negativeCombinedMVABJetTags_cfi.py @@ -4,8 +4,18 @@ jetTagComputer = cms.string('negativeCombinedMVA'), tagInfos = cms.VInputTag( cms.InputTag("impactParameterTagInfos"), - cms.InputTag("secondaryVertexTagInfos"), - cms.InputTag("softMuonTagInfos"), - cms.InputTag("softElectronTagInfos") + cms.InputTag("secondaryVertexNegativeTagInfos"), + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") + ) +) + +negativeCombinedSecondaryVertexSoftPFLeptonV1BJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('negativeCombinedSecondaryVertexSoftPFLeptonV1'), + tagInfos = cms.VInputTag( + cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexNegativeTagInfos"), + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") ) ) diff --git a/RecoBTau/JetTagComputer/python/negativeCombinedMVAES_cfi.py b/RecoBTau/JetTagComputer/python/negativeCombinedMVAES_cfi.py index 30c55b58bef36..6853c4d293cf0 100644 --- a/RecoBTau/JetTagComputer/python/negativeCombinedMVAES_cfi.py +++ b/RecoBTau/JetTagComputer/python/negativeCombinedMVAES_cfi.py @@ -7,7 +7,7 @@ cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('negativeOnlyJetProbabilityJetTags') + jetTagComputer = cms.string('negativeOnlyJetProbability') ), cms.PSet( discriminator = cms.bool(True), @@ -17,12 +17,39 @@ cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('negativeSoftMuon') + jetTagComputer = cms.string('negativeSoftPFMuon') ), cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('negativeSoftElectron') + jetTagComputer = cms.string('negativeSoftPFElectron') + ) + ) +) + +negativeCombinedSecondaryVertexSoftPFLeptonV1 = cms.ESProducer("CombinedMVAJetTagESProducer", + useCategories = cms.bool(False), + calibrationRecord = cms.string('CombinedCSVSL'), + jetTagComputers = cms.VPSet( + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('negativeOnlyJetProbability') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('combinedSecondaryVertexV1Negative') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('negativeSoftPFMuon') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('negativeSoftPFElectron') ) ) ) diff --git a/RecoBTau/JetTagComputer/python/negativeCombinedMVA_cff.py b/RecoBTau/JetTagComputer/python/negativeCombinedMVA_cff.py deleted file mode 100644 index 33b9fea3547d6..0000000000000 --- a/RecoBTau/JetTagComputer/python/negativeCombinedMVA_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from RecoBTau.JetTagComputer.negativeCombinedMVAES_cfi import * -from RecoBTau.JetTagComputer.negativeCombinedMVABJetTags_cfi import * diff --git a/RecoBTau/JetTagComputer/python/positiveCombinedMVABJetTags_cfi.py b/RecoBTau/JetTagComputer/python/positiveCombinedMVABJetTags_cfi.py index 99815ce264801..6bfe8083027fb 100644 --- a/RecoBTau/JetTagComputer/python/positiveCombinedMVABJetTags_cfi.py +++ b/RecoBTau/JetTagComputer/python/positiveCombinedMVABJetTags_cfi.py @@ -5,7 +5,17 @@ tagInfos = cms.VInputTag( cms.InputTag("impactParameterTagInfos"), cms.InputTag("secondaryVertexTagInfos"), - cms.InputTag("softMuonTagInfos"), - cms.InputTag("softElectronTagInfos") + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") + ) +) + +positiveCombinedSecondaryVertexSoftPFLeptonV1BJetTags = cms.EDProducer("JetTagProducer", + jetTagComputer = cms.string('positiveCombinedSecondaryVertexSoftPFLeptonV1'), + tagInfos = cms.VInputTag( + cms.InputTag("impactParameterTagInfos"), + cms.InputTag("secondaryVertexTagInfos"), + cms.InputTag("softPFMuonsTagInfos"), + cms.InputTag("softPFElectronsTagInfos") ) ) diff --git a/RecoBTau/JetTagComputer/python/positiveCombinedMVAES_cfi.py b/RecoBTau/JetTagComputer/python/positiveCombinedMVAES_cfi.py index 5417d438e383e..18b181b6f0a10 100644 --- a/RecoBTau/JetTagComputer/python/positiveCombinedMVAES_cfi.py +++ b/RecoBTau/JetTagComputer/python/positiveCombinedMVAES_cfi.py @@ -7,7 +7,7 @@ cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('positiveOnlyJetProbabilityJetTags') + jetTagComputer = cms.string('positiveOnlyJetProbability') ), cms.PSet( discriminator = cms.bool(True), @@ -17,12 +17,39 @@ cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('positiveSoftMuon') + jetTagComputer = cms.string('positiveSoftPFMuon') ), cms.PSet( discriminator = cms.bool(True), variables = cms.bool(False), - jetTagComputer = cms.string('positiveSoftElectron') + jetTagComputer = cms.string('positiveSoftPFElectron') + ) + ) +) + +positiveCombinedSecondaryVertexSoftPFLeptonV1 = cms.ESProducer("CombinedMVAJetTagESProducer", + useCategories = cms.bool(False), + calibrationRecord = cms.string('CombinedCSVSL'), + jetTagComputers = cms.VPSet( + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('positiveOnlyJetProbability') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('combinedSecondaryVertexV1Positive') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('positiveSoftPFMuon') + ), + cms.PSet( + discriminator = cms.bool(True), + variables = cms.bool(False), + jetTagComputer = cms.string('positiveSoftPFElectron') ) ) ) diff --git a/RecoBTau/JetTagComputer/python/positiveCombinedMVA_cff.py b/RecoBTau/JetTagComputer/python/positiveCombinedMVA_cff.py deleted file mode 100644 index 8734469434732..0000000000000 --- a/RecoBTau/JetTagComputer/python/positiveCombinedMVA_cff.py +++ /dev/null @@ -1,4 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -from RecoBTau.JetTagComputer.positiveCombinedMVAES_cfi import * -from RecoBTau.JetTagComputer.positiveCombinedMVABJetTags_cfi import * diff --git a/RecoJets/Configuration/python/RecoJetsGlobal_cff.py b/RecoJets/Configuration/python/RecoJetsGlobal_cff.py index c2201eaa50990..2266b962edbb9 100644 --- a/RecoJets/Configuration/python/RecoJetsGlobal_cff.py +++ b/RecoJets/Configuration/python/RecoJetsGlobal_cff.py @@ -8,4 +8,4 @@ from RecoJets.Configuration.RecoJPTJets_cff import * jetGlobalReco = cms.Sequence(recoJets*recoJetIds*recoTrackJets) -jetHighLevelReco = cms.Sequence(recoJetAssociations*recoPFJets*recoJetAssociationsExplicit*recoJPTJets) +jetHighLevelReco = cms.Sequence(recoPFJets*recoJetAssociations*recoJetAssociationsExplicit*recoJPTJets) diff --git a/RecoJets/Configuration/python/RecoJets_EventContent_cff.py b/RecoJets/Configuration/python/RecoJets_EventContent_cff.py index 5a64b999a6f76..196044f05a536 100644 --- a/RecoJets/Configuration/python/RecoJets_EventContent_cff.py +++ b/RecoJets/Configuration/python/RecoJets_EventContent_cff.py @@ -17,12 +17,13 @@ 'keep *_kt4JetTracksAssociatorAtVertex_*_*', 'keep *_kt4JetTracksAssociatorAtCaloFace_*_*', 'keep *_kt4JetExtender_*_*', - 'keep *_ak5JetTracksAssociatorAtVertex_*_*', - 'keep *_ak5JetTracksAssociatorAtCaloFace_*_*', + 'keep *_ak5JetTracksAssociatorAtVertex*_*_*', + 'keep *_ak5JetTracksAssociatorAtVertexPF*_*_*', + 'keep *_ak5JetTracksAssociatorAtCaloFace*_*_*', 'keep *_ak5JetExtender_*_*', 'keep *_ak5JetTracksAssociatorExplicit_*_*', - 'keep *_ak7JetTracksAssociatorAtVertex_*_*', - 'keep *_ak7JetTracksAssociatorAtCaloFace_*_*', + 'keep *_ak7JetTracksAssociatorAtVertex*_*_*', + 'keep *_ak7JetTracksAssociatorAtCaloFace*_*_*', 'keep *_ak7JetExtender_*_*', 'keep *_ak5JetID_*_*','keep *_ak7JetID_*_*', 'keep *_sc5JetID_*_*','keep *_sc7JetID_*_*', @@ -80,12 +81,13 @@ 'keep *_kt4JetTracksAssociatorAtVertex_*_*', 'keep *_kt4JetTracksAssociatorAtCaloFace_*_*', 'keep *_kt4JetExtender_*_*', - 'keep *_ak5JetTracksAssociatorAtVertex_*_*', - 'keep *_ak5JetTracksAssociatorAtCaloFace_*_*', + 'keep *_ak5JetTracksAssociatorAtVertex_*_*', + 'keep *_ak5JetTracksAssociatorAtVertexPF_*_*', + 'keep *_ak5JetTracksAssociatorAtCaloFace_*_*', 'keep *_ak5JetTracksAssociatorExplicit_*_*', 'keep *_ak5JetExtender_*_*', - 'keep *_ak7JetTracksAssociatorAtVertex_*_*', - 'keep *_ak7JetTracksAssociatorAtCaloFace_*_*', + 'keep *_ak7JetTracksAssociatorAtVertex*_*_*', + 'keep *_ak7JetTracksAssociatorAtCaloFace*_*_*', 'keep *_ak7JetExtender_*_*', 'keep *_ak5JetID_*_*','keep *_ak7JetID_*_*', 'keep *_ic5JetID_*_*', @@ -138,7 +140,8 @@ # 'keep *_towerMaker_*_*', 'keep *_CastorTowerReco_*_*', # 'keep *_ic5JetTracksAssociatorAtVertex_*_*', - 'keep *_ak5JetTracksAssociatorAtVertex_*_*', + 'keep *_ak5JetTracksAssociatorAtVertex_*_*', + 'keep *_ak5JetTracksAssociatorAtVertexPF_*_*', 'keep *_ak5JetTracksAssociatorExplicit_*_*', #'keep *_ak7JetTracksAssociatorAtVertex_*_*', # 'keep *_iterativeCone5JetExtender_*_*', diff --git a/RecoJets/JetAssociationProducers/python/ak5JTA_cff.py b/RecoJets/JetAssociationProducers/python/ak5JTA_cff.py index f7da9cef2d93f..d4bddb0b93af5 100644 --- a/RecoJets/JetAssociationProducers/python/ak5JTA_cff.py +++ b/RecoJets/JetAssociationProducers/python/ak5JTA_cff.py @@ -1,32 +1,40 @@ -import FWCore.ParameterSet.Config as cms - -# $Id: ak5JTA_cff.py,v 1.4 2012/07/11 14:12:14 srappocc Exp $ -from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi import * ##propagator - -from RecoJets.JetAssociationProducers.j2tParametersCALO_cfi import * -from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import * -ak5JetTracksAssociatorAtVertex = cms.EDProducer("JetTracksAssociatorAtVertex", - j2tParametersVX, - jets = cms.InputTag("ak5CaloJets") -) - -ak5JetTracksAssociatorExplicit = cms.EDProducer("JetTracksAssociatorExplicit", - j2tParametersVX, - jets = cms.InputTag("ak5PFJets") -) - -ak5JetTracksAssociatorAtCaloFace = cms.EDProducer("JetTracksAssociatorAtCaloFace", - j2tParametersCALO, - jets = cms.InputTag("ak5CaloJets") -) - -ak5JetExtender = cms.EDProducer("JetExtender", - jets = cms.InputTag("ak5CaloJets"), - jet2TracksAtCALO = cms.InputTag("ak5JetTracksAssociatorAtCaloFace"), - jet2TracksAtVX = cms.InputTag("ak5JetTracksAssociatorAtVertex"), - coneSize = cms.double(0.5) -) - -ak5JTA = cms.Sequence(ak5JetTracksAssociatorAtVertex*ak5JetTracksAssociatorAtCaloFace*ak5JetExtender) - -ak5JTAExplicit = cms.Sequence(ak5JetTracksAssociatorExplicit) +import FWCore.ParameterSet.Config as cms + +# $Id: ak5JTA_cff.py,v 1.4 2012/07/11 14:12:14 srappocc Exp $ +from TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi import * ##propagator + +from RecoJets.JetAssociationProducers.j2tParametersCALO_cfi import * +from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import * +ak5JetTracksAssociatorAtVertex = cms.EDProducer("JetTracksAssociatorAtVertex", + j2tParametersVX, + jets = cms.InputTag("ak5CaloJets") +) + +ak5JetTracksAssociatorAtVertexPF = cms.EDProducer("JetTracksAssociatorAtVertex", + j2tParametersVX, + jets = cms.InputTag("ak5PFJetsCHS") +) + + +ak5JetTracksAssociatorExplicit = cms.EDProducer("JetTracksAssociatorExplicit", + j2tParametersVX, + jets = cms.InputTag("ak5PFJetsCHS") +) + +ak5JetTracksAssociatorAtCaloFace = cms.EDProducer("JetTracksAssociatorAtCaloFace", + j2tParametersCALO, + jets = cms.InputTag("ak5CaloJets") +) + +ak5JetExtender = cms.EDProducer("JetExtender", + jets = cms.InputTag("ak5CaloJets"), + jet2TracksAtCALO = cms.InputTag("ak5JetTracksAssociatorAtCaloFace"), + jet2TracksAtVX = cms.InputTag("ak5JetTracksAssociatorAtVertex"), + coneSize = cms.double(0.5) +) + +ak5JTA = cms.Sequence(ak5JetTracksAssociatorAtVertexPF* + ak5JetTracksAssociatorAtVertex* + ak5JetTracksAssociatorAtCaloFace*ak5JetExtender) + +ak5JTAExplicit = cms.Sequence(ak5JetTracksAssociatorExplicit) diff --git a/RecoJets/JetAssociationProducers/python/ak7JTA_cff.py b/RecoJets/JetAssociationProducers/python/ak7JTA_cff.py index 811c695f88249..7dc342a04b9e2 100644 --- a/RecoJets/JetAssociationProducers/python/ak7JTA_cff.py +++ b/RecoJets/JetAssociationProducers/python/ak7JTA_cff.py @@ -5,6 +5,11 @@ from RecoJets.JetAssociationProducers.j2tParametersCALO_cfi import * from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import * +ak7JetTracksAssociatorAtVertexPF = cms.EDProducer("JetTracksAssociatorAtVertex", + j2tParametersVX, + jets = cms.InputTag("ak7PFJetsCHS") +) + ak7JetTracksAssociatorAtVertex = cms.EDProducer("JetTracksAssociatorAtVertex", j2tParametersVX, jets = cms.InputTag("ak7CaloJets") @@ -22,5 +27,5 @@ coneSize = cms.double(0.7) ) -ak7JTA = cms.Sequence(ak7JetTracksAssociatorAtVertex*ak7JetTracksAssociatorAtCaloFace*ak7JetExtender) +ak7JTA = cms.Sequence(ak7JetTracksAssociatorAtVertexPF*ak7JetTracksAssociatorAtVertex*ak7JetTracksAssociatorAtCaloFace*ak7JetExtender) diff --git a/RecoMET/METFilters/python/metFilters_cff.py b/RecoMET/METFilters/python/metFilters_cff.py index d252f25966c2d..8205342ab1064 100644 --- a/RecoMET/METFilters/python/metFilters_cff.py +++ b/RecoMET/METFilters/python/metFilters_cff.py @@ -4,7 +4,7 @@ from CommonTools.RecoAlgos.HBHENoiseFilter_cfi import * ## The CSC beam halo tight filter ____________________________________________|| -from RecoMET.METFilters.CSCTightHaloFilter import * +from RecoMET.METFilters.CSCTightHaloFilter_cfi import * ## The HCAL laser filter _____________________________________________________|| from RecoMET.METFilters.hcalLaserEventFilter_cfi import * diff --git a/RecoTracker/DebugTools/plugins/TrackAlgoCompareUtil.h b/RecoTracker/DebugTools/plugins/TrackAlgoCompareUtil.h index 6d86b49c2d93a..2dff5ef6cda86 100644 --- a/RecoTracker/DebugTools/plugins/TrackAlgoCompareUtil.h +++ b/RecoTracker/DebugTools/plugins/TrackAlgoCompareUtil.h @@ -24,7 +24,7 @@ #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" #include "CommonTools/RecoAlgos/interface/RecoTrackSelector.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" // Track Association Methods diff --git a/SLHCUpgradeSimulations/Configuration/python/customise_mixing.py b/SLHCUpgradeSimulations/Configuration/python/customise_mixing.py index 851c29eceaa6d..a87b54b966b9c 100644 --- a/SLHCUpgradeSimulations/Configuration/python/customise_mixing.py +++ b/SLHCUpgradeSimulations/Configuration/python/customise_mixing.py @@ -13,9 +13,10 @@ def customise_NoCrossing(process): 'TotemHitsT2Gem') process.mix.mixObjects.mixCH.crossingFrames = cms.untracked.vstring('') process.mix.mixObjects.mixTracks.makeCrossingFrame = cms.untracked.bool(False) - process.mix.mixObjects.mixVertices.makeCrossingFrame = cms.untracked.bool(False) +# process.mix.mixObjects.mixVertices.makeCrossingFrame = cms.untracked.bool(False) process.mix.mixObjects.mixHepMC.makeCrossingFrame = cms.untracked.bool(False) #and get the tracking particles under control + # this may not be needed if hasattr(process.mix,'digitizers'): if hasattr(process.mix.digitizers,'mergedtruth'): process.mix.digitizers.mergedtruth.createUnmergedCollection=cms.bool(False) diff --git a/SLHCUpgradeSimulations/Configuration/python/phase1TkCustoms.py b/SLHCUpgradeSimulations/Configuration/python/phase1TkCustoms.py index 11952f5196980..1ca6148a46125 100644 --- a/SLHCUpgradeSimulations/Configuration/python/phase1TkCustoms.py +++ b/SLHCUpgradeSimulations/Configuration/python/phase1TkCustoms.py @@ -69,7 +69,7 @@ def customise_Digi(process): # DQM steps change def customise_DQM(process,pileup): # We cut down the number of iterative tracking steps - + process.dqmoffline_step.remove(process.muonAnalyzer) process.dqmoffline_step.remove(process.jetMETAnalyzer) #put isUpgrade flag==true @@ -120,7 +120,8 @@ def customise_Validation(process,pileup): def customise_harvesting(process): process.dqmHarvesting.remove(process.jetMETDQMOfflineClient) process.dqmHarvesting.remove(process.dataCertificationJetMET) - process.dqmHarvesting.remove(process.sipixelEDAClient) + #######process.dqmHarvesting.remove(process.sipixelEDAClient) + process.sipixelEDAClient.isUpgrade = cms.untracked.bool(True) process.dqmHarvesting.remove(process.sipixelCertification) return (process) diff --git a/SLHCUpgradeSimulations/Configuration/python/phase2TkCustomsBE5D.py b/SLHCUpgradeSimulations/Configuration/python/phase2TkCustomsBE5D.py index d76acb878cbcf..cf2a161bcf592 100644 --- a/SLHCUpgradeSimulations/Configuration/python/phase2TkCustomsBE5D.py +++ b/SLHCUpgradeSimulations/Configuration/python/phase2TkCustomsBE5D.py @@ -295,6 +295,10 @@ def customise_Validation(process,pileup): process.mix.minBunch = cms.int32(0) process.mix.maxBunch = cms.int32(0) + if hasattr(process,'simHitTPAssocProducer'): + process.simHitTPAssocProducer.simHitSrc=cms.VInputTag(cms.InputTag("g4SimHits","TrackerHitsPixelBarrelLowTof"), + cms.InputTag("g4SimHits","TrackerHitsPixelEndcapLowTof")) + return process def customise_harvesting(process): diff --git a/SLHCUpgradeSimulations/Configuration/python/postLS1Customs.py b/SLHCUpgradeSimulations/Configuration/python/postLS1Customs.py index 785b8eb5aee41..40c42eccff7e5 100644 --- a/SLHCUpgradeSimulations/Configuration/python/postLS1Customs.py +++ b/SLHCUpgradeSimulations/Configuration/python/postLS1Customs.py @@ -47,15 +47,15 @@ def digiEventContent(process): def customise_DQM(process): - process.dqmoffline_step.remove(process.jetMETAnalyzer) + #process.dqmoffline_step.remove(process.jetMETAnalyzer) return process def customise_Validation(process): - process.validation_step.remove(process.PixelTrackingRecHitsValid) + #process.validation_step.remove(process.PixelTrackingRecHitsValid) # We don't run the HLT - process.validation_step.remove(process.HLTSusyExoVal) - process.validation_step.remove(process.hltHiggsValidator) + #process.validation_step.remove(process.HLTSusyExoVal) + #process.validation_step.remove(process.hltHiggsValidator) return process @@ -86,10 +86,10 @@ def customise_Reco(process): def customise_harvesting(process): - process.dqmHarvesting.remove(process.jetMETDQMOfflineClient) - process.dqmHarvesting.remove(process.dataCertificationJetMET) - process.dqmHarvesting.remove(process.sipixelEDAClient) - process.dqmHarvesting.remove(process.sipixelCertification) + #process.dqmHarvesting.remove(process.jetMETDQMOfflineClient) + #process.dqmHarvesting.remove(process.dataCertificationJetMET) + #process.dqmHarvesting.remove(process.sipixelEDAClient) + #process.dqmHarvesting.remove(process.sipixelCertification) return (process) def recoOutputCustoms(process): diff --git a/SLHCUpgradeSimulations/Geometry/data/PhaseII/BarrelEndcap5D/PixelSkimmedGeometry.txt b/SLHCUpgradeSimulations/Geometry/data/PhaseII/BarrelEndcap5D/PixelSkimmedGeometry.txt index 4a5551971c655..bfe878438c42b 100644 --- a/SLHCUpgradeSimulations/Geometry/data/PhaseII/BarrelEndcap5D/PixelSkimmedGeometry.txt +++ b/SLHCUpgradeSimulations/Geometry/data/PhaseII/BarrelEndcap5D/PixelSkimmedGeometry.txt @@ -1182,17262 +1182,17262 @@ 306446360 416 160 306446364 416 160 306446368 416 160 -307236868 32 896 -307236872 2 896 -307236876 32 896 -307236880 2 896 -307236884 32 896 -307236888 2 896 -307236892 32 896 -307236896 2 896 -307236900 32 896 -307236904 2 896 -307236908 32 896 -307236912 2 896 -307236916 32 896 -307236920 2 896 -307236924 32 896 -307236928 2 896 -307236932 32 896 -307236936 2 896 -307236940 32 896 -307236944 2 896 -307236948 32 896 -307236952 2 896 -307236956 32 896 -307236960 2 896 -307236964 32 896 -307236968 2 896 -307236972 32 896 -307236976 2 896 -307236980 32 896 -307236984 2 896 -307236988 32 896 -307236992 2 896 -307236996 32 896 -307237000 2 896 -307237004 32 896 -307237008 2 896 -307237012 32 896 -307237016 2 896 -307237020 32 896 -307237024 2 896 -307237028 32 896 -307237032 2 896 -307237036 32 896 -307237040 2 896 -307237044 32 896 -307237048 2 896 -307237052 32 896 -307237056 2 896 -307237060 32 896 -307237064 2 896 -307237068 32 896 -307237072 2 896 -307237076 32 896 -307237080 2 896 -307237084 32 896 -307237088 2 896 -307237092 32 896 -307237096 2 896 -307237100 32 896 -307237104 2 896 -307237108 32 896 -307237112 2 896 -307237116 32 896 -307237120 2 896 -307237124 32 896 -307237128 2 896 -307237132 32 896 -307237136 2 896 -307237140 32 896 -307237144 2 896 -307237148 32 896 -307237152 2 896 -307237156 32 896 -307237160 2 896 -307237164 32 896 -307237168 2 896 -307237172 32 896 -307237176 2 896 -307237180 32 896 -307237184 2 896 -307237188 32 896 -307237192 2 896 -307237196 32 896 -307237200 2 896 -307237204 32 896 -307237208 2 896 -307237212 32 896 -307237216 2 896 -307237220 32 896 -307237224 2 896 -307237228 32 896 -307237232 2 896 -307237236 32 896 -307237240 2 896 -307237244 32 896 -307237248 2 896 -307237252 32 896 -307237256 2 896 -307237260 32 896 -307237264 2 896 -307237268 32 896 -307237272 2 896 -307237276 32 896 -307237280 2 896 -307237284 32 896 -307237288 2 896 -307237292 32 896 -307237296 2 896 -307237300 32 896 -307237304 2 896 -307237308 32 896 -307237312 2 896 -307237316 32 896 -307237320 2 896 -307237324 32 896 -307237328 2 896 -307237332 32 896 -307237336 2 896 -307237340 32 896 -307237344 2 896 -307237348 32 896 -307237352 2 896 -307237356 32 896 -307237360 2 896 -307237364 32 896 -307237368 2 896 -307240964 32 896 -307240968 2 896 -307240972 32 896 -307240976 2 896 -307240980 32 896 -307240984 2 896 -307240988 32 896 -307240992 2 896 -307240996 32 896 -307241000 2 896 -307241004 32 896 -307241008 2 896 -307241012 32 896 -307241016 2 896 -307241020 32 896 -307241024 2 896 -307241028 32 896 -307241032 2 896 -307241036 32 896 -307241040 2 896 -307241044 32 896 -307241048 2 896 -307241052 32 896 -307241056 2 896 -307241060 32 896 -307241064 2 896 -307241068 32 896 -307241072 2 896 -307241076 32 896 -307241080 2 896 -307241084 32 896 -307241088 2 896 -307241092 32 896 -307241096 2 896 -307241100 32 896 -307241104 2 896 -307241108 32 896 -307241112 2 896 -307241116 32 896 -307241120 2 896 -307241124 32 896 -307241128 2 896 -307241132 32 896 -307241136 2 896 -307241140 32 896 -307241144 2 896 -307241148 32 896 -307241152 2 896 -307241156 32 896 -307241160 2 896 -307241164 32 896 -307241168 2 896 -307241172 32 896 -307241176 2 896 -307241180 32 896 -307241184 2 896 -307241188 32 896 -307241192 2 896 -307241196 32 896 -307241200 2 896 -307241204 32 896 -307241208 2 896 -307241212 32 896 -307241216 2 896 -307241220 32 896 -307241224 2 896 -307241228 32 896 -307241232 2 896 -307241236 32 896 -307241240 2 896 -307241244 32 896 -307241248 2 896 -307241252 32 896 -307241256 2 896 -307241260 32 896 -307241264 2 896 -307241268 32 896 -307241272 2 896 -307241276 32 896 -307241280 2 896 -307241284 32 896 -307241288 2 896 -307241292 32 896 -307241296 2 896 -307241300 32 896 -307241304 2 896 -307241308 32 896 -307241312 2 896 -307241316 32 896 -307241320 2 896 -307241324 32 896 -307241328 2 896 -307241332 32 896 -307241336 2 896 -307241340 32 896 -307241344 2 896 -307241348 32 896 -307241352 2 896 -307241356 32 896 -307241360 2 896 -307241364 32 896 -307241368 2 896 -307241372 32 896 -307241376 2 896 -307241380 32 896 -307241384 2 896 -307241388 32 896 -307241392 2 896 -307241396 32 896 -307241400 2 896 -307241404 32 896 -307241408 2 896 -307241412 32 896 -307241416 2 896 -307241420 32 896 -307241424 2 896 -307241428 32 896 -307241432 2 896 -307241436 32 896 -307241440 2 896 -307241444 32 896 -307241448 2 896 -307241452 32 896 -307241456 2 896 -307241460 32 896 -307241464 2 896 -307245060 32 896 -307245064 2 896 -307245068 32 896 -307245072 2 896 -307245076 32 896 -307245080 2 896 -307245084 32 896 -307245088 2 896 -307245092 32 896 -307245096 2 896 -307245100 32 896 -307245104 2 896 -307245108 32 896 -307245112 2 896 -307245116 32 896 -307245120 2 896 -307245124 32 896 -307245128 2 896 -307245132 32 896 -307245136 2 896 -307245140 32 896 -307245144 2 896 -307245148 32 896 -307245152 2 896 -307245156 32 896 -307245160 2 896 -307245164 32 896 -307245168 2 896 -307245172 32 896 -307245176 2 896 -307245180 32 896 -307245184 2 896 -307245188 32 896 -307245192 2 896 -307245196 32 896 -307245200 2 896 -307245204 32 896 -307245208 2 896 -307245212 32 896 -307245216 2 896 -307245220 32 896 -307245224 2 896 -307245228 32 896 -307245232 2 896 -307245236 32 896 -307245240 2 896 -307245244 32 896 -307245248 2 896 -307245252 32 896 -307245256 2 896 -307245260 32 896 -307245264 2 896 -307245268 32 896 -307245272 2 896 -307245276 32 896 -307245280 2 896 -307245284 32 896 -307245288 2 896 -307245292 32 896 -307245296 2 896 -307245300 32 896 -307245304 2 896 -307245308 32 896 -307245312 2 896 -307245316 32 896 -307245320 2 896 -307245324 32 896 -307245328 2 896 -307245332 32 896 -307245336 2 896 -307245340 32 896 -307245344 2 896 -307245348 32 896 -307245352 2 896 -307245356 32 896 -307245360 2 896 -307245364 32 896 -307245368 2 896 -307245372 32 896 -307245376 2 896 -307245380 32 896 -307245384 2 896 -307245388 32 896 -307245392 2 896 -307245396 32 896 -307245400 2 896 -307245404 32 896 -307245408 2 896 -307245412 32 896 -307245416 2 896 -307245420 32 896 -307245424 2 896 -307245428 32 896 -307245432 2 896 -307245436 32 896 -307245440 2 896 -307245444 32 896 -307245448 2 896 -307245452 32 896 -307245456 2 896 -307245460 32 896 -307245464 2 896 -307245468 32 896 -307245472 2 896 -307245476 32 896 -307245480 2 896 -307245484 32 896 -307245488 2 896 -307245492 32 896 -307245496 2 896 -307245500 32 896 -307245504 2 896 -307245508 32 896 -307245512 2 896 -307245516 32 896 -307245520 2 896 -307245524 32 896 -307245528 2 896 -307245532 32 896 -307245536 2 896 -307245540 32 896 -307245544 2 896 -307245548 32 896 -307245552 2 896 -307245556 32 896 -307245560 2 896 -307249156 32 896 -307249160 2 896 -307249164 32 896 -307249168 2 896 -307249172 32 896 -307249176 2 896 -307249180 32 896 -307249184 2 896 -307249188 32 896 -307249192 2 896 -307249196 32 896 -307249200 2 896 -307249204 32 896 -307249208 2 896 -307249212 32 896 -307249216 2 896 -307249220 32 896 -307249224 2 896 -307249228 32 896 -307249232 2 896 -307249236 32 896 -307249240 2 896 -307249244 32 896 -307249248 2 896 -307249252 32 896 -307249256 2 896 -307249260 32 896 -307249264 2 896 -307249268 32 896 -307249272 2 896 -307249276 32 896 -307249280 2 896 -307249284 32 896 -307249288 2 896 -307249292 32 896 -307249296 2 896 -307249300 32 896 -307249304 2 896 -307249308 32 896 -307249312 2 896 -307249316 32 896 -307249320 2 896 -307249324 32 896 -307249328 2 896 -307249332 32 896 -307249336 2 896 -307249340 32 896 -307249344 2 896 -307249348 32 896 -307249352 2 896 -307249356 32 896 -307249360 2 896 -307249364 32 896 -307249368 2 896 -307249372 32 896 -307249376 2 896 -307249380 32 896 -307249384 2 896 -307249388 32 896 -307249392 2 896 -307249396 32 896 -307249400 2 896 -307249404 32 896 -307249408 2 896 -307249412 32 896 -307249416 2 896 -307249420 32 896 -307249424 2 896 -307249428 32 896 -307249432 2 896 -307249436 32 896 -307249440 2 896 -307249444 32 896 -307249448 2 896 -307249452 32 896 -307249456 2 896 -307249460 32 896 -307249464 2 896 -307249468 32 896 -307249472 2 896 -307249476 32 896 -307249480 2 896 -307249484 32 896 -307249488 2 896 -307249492 32 896 -307249496 2 896 -307249500 32 896 -307249504 2 896 -307249508 32 896 -307249512 2 896 -307249516 32 896 -307249520 2 896 -307249524 32 896 -307249528 2 896 -307249532 32 896 -307249536 2 896 -307249540 32 896 -307249544 2 896 -307249548 32 896 -307249552 2 896 -307249556 32 896 -307249560 2 896 -307249564 32 896 -307249568 2 896 -307249572 32 896 -307249576 2 896 -307249580 32 896 -307249584 2 896 -307249588 32 896 -307249592 2 896 -307249596 32 896 -307249600 2 896 -307249604 32 896 -307249608 2 896 -307249612 32 896 -307249616 2 896 -307249620 32 896 -307249624 2 896 -307249628 32 896 -307249632 2 896 -307249636 32 896 -307249640 2 896 -307249644 32 896 -307249648 2 896 -307249652 32 896 -307249656 2 896 -307253252 32 896 -307253256 2 896 -307253260 32 896 -307253264 2 896 -307253268 32 896 -307253272 2 896 -307253276 32 896 -307253280 2 896 -307253284 32 896 -307253288 2 896 -307253292 32 896 -307253296 2 896 -307253300 32 896 -307253304 2 896 -307253308 32 896 -307253312 2 896 -307253316 32 896 -307253320 2 896 -307253324 32 896 -307253328 2 896 -307253332 32 896 -307253336 2 896 -307253340 32 896 -307253344 2 896 -307253348 32 896 -307253352 2 896 -307253356 32 896 -307253360 2 896 -307253364 32 896 -307253368 2 896 -307253372 32 896 -307253376 2 896 -307253380 32 896 -307253384 2 896 -307253388 32 896 -307253392 2 896 -307253396 32 896 -307253400 2 896 -307253404 32 896 -307253408 2 896 -307253412 32 896 -307253416 2 896 -307253420 32 896 -307253424 2 896 -307253428 32 896 -307253432 2 896 -307253436 32 896 -307253440 2 896 -307253444 32 896 -307253448 2 896 -307253452 32 896 -307253456 2 896 -307253460 32 896 -307253464 2 896 -307253468 32 896 -307253472 2 896 -307253476 32 896 -307253480 2 896 -307253484 32 896 -307253488 2 896 -307253492 32 896 -307253496 2 896 -307253500 32 896 -307253504 2 896 -307253508 32 896 -307253512 2 896 -307253516 32 896 -307253520 2 896 -307253524 32 896 -307253528 2 896 -307253532 32 896 -307253536 2 896 -307253540 32 896 -307253544 2 896 -307253548 32 896 -307253552 2 896 -307253556 32 896 -307253560 2 896 -307253564 32 896 -307253568 2 896 -307253572 32 896 -307253576 2 896 -307253580 32 896 -307253584 2 896 -307253588 32 896 -307253592 2 896 -307253596 32 896 -307253600 2 896 -307253604 32 896 -307253608 2 896 -307253612 32 896 -307253616 2 896 -307253620 32 896 -307253624 2 896 -307253628 32 896 -307253632 2 896 -307253636 32 896 -307253640 2 896 -307253644 32 896 -307253648 2 896 -307253652 32 896 -307253656 2 896 -307253660 32 896 -307253664 2 896 -307253668 32 896 -307253672 2 896 -307253676 32 896 -307253680 2 896 -307253684 32 896 -307253688 2 896 -307253692 32 896 -307253696 2 896 -307253700 32 896 -307253704 2 896 -307253708 32 896 -307253712 2 896 -307253716 32 896 -307253720 2 896 -307253724 32 896 -307253728 2 896 -307253732 32 896 -307253736 2 896 -307253740 32 896 -307253744 2 896 -307253748 32 896 -307253752 2 896 -307257348 32 896 -307257352 2 896 -307257356 32 896 -307257360 2 896 -307257364 32 896 -307257368 2 896 -307257372 32 896 -307257376 2 896 -307257380 32 896 -307257384 2 896 -307257388 32 896 -307257392 2 896 -307257396 32 896 -307257400 2 896 -307257404 32 896 -307257408 2 896 -307257412 32 896 -307257416 2 896 -307257420 32 896 -307257424 2 896 -307257428 32 896 -307257432 2 896 -307257436 32 896 -307257440 2 896 -307257444 32 896 -307257448 2 896 -307257452 32 896 -307257456 2 896 -307257460 32 896 -307257464 2 896 -307257468 32 896 -307257472 2 896 -307257476 32 896 -307257480 2 896 -307257484 32 896 -307257488 2 896 -307257492 32 896 -307257496 2 896 -307257500 32 896 -307257504 2 896 -307257508 32 896 -307257512 2 896 -307257516 32 896 -307257520 2 896 -307257524 32 896 -307257528 2 896 -307257532 32 896 -307257536 2 896 -307257540 32 896 -307257544 2 896 -307257548 32 896 -307257552 2 896 -307257556 32 896 -307257560 2 896 -307257564 32 896 -307257568 2 896 -307257572 32 896 -307257576 2 896 -307257580 32 896 -307257584 2 896 -307257588 32 896 -307257592 2 896 -307257596 32 896 -307257600 2 896 -307257604 32 896 -307257608 2 896 -307257612 32 896 -307257616 2 896 -307257620 32 896 -307257624 2 896 -307257628 32 896 -307257632 2 896 -307257636 32 896 -307257640 2 896 -307257644 32 896 -307257648 2 896 -307257652 32 896 -307257656 2 896 -307257660 32 896 -307257664 2 896 -307257668 32 896 -307257672 2 896 -307257676 32 896 -307257680 2 896 -307257684 32 896 -307257688 2 896 -307257692 32 896 -307257696 2 896 -307257700 32 896 -307257704 2 896 -307257708 32 896 -307257712 2 896 -307257716 32 896 -307257720 2 896 -307257724 32 896 -307257728 2 896 -307257732 32 896 -307257736 2 896 -307257740 32 896 -307257744 2 896 -307257748 32 896 -307257752 2 896 -307257756 32 896 -307257760 2 896 -307257764 32 896 -307257768 2 896 -307257772 32 896 -307257776 2 896 -307257780 32 896 -307257784 2 896 -307257788 32 896 -307257792 2 896 -307257796 32 896 -307257800 2 896 -307257804 32 896 -307257808 2 896 -307257812 32 896 -307257816 2 896 -307257820 32 896 -307257824 2 896 -307257828 32 896 -307257832 2 896 -307257836 32 896 -307257840 2 896 -307257844 32 896 -307257848 2 896 -307261444 32 896 -307261448 2 896 -307261452 32 896 -307261456 2 896 -307261460 32 896 -307261464 2 896 -307261468 32 896 -307261472 2 896 -307261476 32 896 -307261480 2 896 -307261484 32 896 -307261488 2 896 -307261492 32 896 -307261496 2 896 -307261500 32 896 -307261504 2 896 -307261508 32 896 -307261512 2 896 -307261516 32 896 -307261520 2 896 -307261524 32 896 -307261528 2 896 -307261532 32 896 -307261536 2 896 -307261540 32 896 -307261544 2 896 -307261548 32 896 -307261552 2 896 -307261556 32 896 -307261560 2 896 -307261564 32 896 -307261568 2 896 -307261572 32 896 -307261576 2 896 -307261580 32 896 -307261584 2 896 -307261588 32 896 -307261592 2 896 -307261596 32 896 -307261600 2 896 -307261604 32 896 -307261608 2 896 -307261612 32 896 -307261616 2 896 -307261620 32 896 -307261624 2 896 -307261628 32 896 -307261632 2 896 -307261636 32 896 -307261640 2 896 -307261644 32 896 -307261648 2 896 -307261652 32 896 -307261656 2 896 -307261660 32 896 -307261664 2 896 -307261668 32 896 -307261672 2 896 -307261676 32 896 -307261680 2 896 -307261684 32 896 -307261688 2 896 -307261692 32 896 -307261696 2 896 -307261700 32 896 -307261704 2 896 -307261708 32 896 -307261712 2 896 -307261716 32 896 -307261720 2 896 -307261724 32 896 -307261728 2 896 -307261732 32 896 -307261736 2 896 -307261740 32 896 -307261744 2 896 -307261748 32 896 -307261752 2 896 -307261756 32 896 -307261760 2 896 -307261764 32 896 -307261768 2 896 -307261772 32 896 -307261776 2 896 -307261780 32 896 -307261784 2 896 -307261788 32 896 -307261792 2 896 -307261796 32 896 -307261800 2 896 -307261804 32 896 -307261808 2 896 -307261812 32 896 -307261816 2 896 -307261820 32 896 -307261824 2 896 -307261828 32 896 -307261832 2 896 -307261836 32 896 -307261840 2 896 -307261844 32 896 -307261848 2 896 -307261852 32 896 -307261856 2 896 -307261860 32 896 -307261864 2 896 -307261868 32 896 -307261872 2 896 -307261876 32 896 -307261880 2 896 -307261884 32 896 -307261888 2 896 -307261892 32 896 -307261896 2 896 -307261900 32 896 -307261904 2 896 -307261908 32 896 -307261912 2 896 -307261916 32 896 -307261920 2 896 -307261924 32 896 -307261928 2 896 -307261932 32 896 -307261936 2 896 -307261940 32 896 -307261944 2 896 -307265540 32 896 -307265544 2 896 -307265548 32 896 -307265552 2 896 -307265556 32 896 -307265560 2 896 -307265564 32 896 -307265568 2 896 -307265572 32 896 -307265576 2 896 -307265580 32 896 -307265584 2 896 -307265588 32 896 -307265592 2 896 -307265596 32 896 -307265600 2 896 -307265604 32 896 -307265608 2 896 -307265612 32 896 -307265616 2 896 -307265620 32 896 -307265624 2 896 -307265628 32 896 -307265632 2 896 -307265636 32 896 -307265640 2 896 -307265644 32 896 -307265648 2 896 -307265652 32 896 -307265656 2 896 -307265660 32 896 -307265664 2 896 -307265668 32 896 -307265672 2 896 -307265676 32 896 -307265680 2 896 -307265684 32 896 -307265688 2 896 -307265692 32 896 -307265696 2 896 -307265700 32 896 -307265704 2 896 -307265708 32 896 -307265712 2 896 -307265716 32 896 -307265720 2 896 -307265724 32 896 -307265728 2 896 -307265732 32 896 -307265736 2 896 -307265740 32 896 -307265744 2 896 -307265748 32 896 -307265752 2 896 -307265756 32 896 -307265760 2 896 -307265764 32 896 -307265768 2 896 -307265772 32 896 -307265776 2 896 -307265780 32 896 -307265784 2 896 -307265788 32 896 -307265792 2 896 -307265796 32 896 -307265800 2 896 -307265804 32 896 -307265808 2 896 -307265812 32 896 -307265816 2 896 -307265820 32 896 -307265824 2 896 -307265828 32 896 -307265832 2 896 -307265836 32 896 -307265840 2 896 -307265844 32 896 -307265848 2 896 -307265852 32 896 -307265856 2 896 -307265860 32 896 -307265864 2 896 -307265868 32 896 -307265872 2 896 -307265876 32 896 -307265880 2 896 -307265884 32 896 -307265888 2 896 -307265892 32 896 -307265896 2 896 -307265900 32 896 -307265904 2 896 -307265908 32 896 -307265912 2 896 -307265916 32 896 -307265920 2 896 -307265924 32 896 -307265928 2 896 -307265932 32 896 -307265936 2 896 -307265940 32 896 -307265944 2 896 -307265948 32 896 -307265952 2 896 -307265956 32 896 -307265960 2 896 -307265964 32 896 -307265968 2 896 -307265972 32 896 -307265976 2 896 -307265980 32 896 -307265984 2 896 -307265988 32 896 -307265992 2 896 -307265996 32 896 -307266000 2 896 -307266004 32 896 -307266008 2 896 -307266012 32 896 -307266016 2 896 -307266020 32 896 -307266024 2 896 -307266028 32 896 -307266032 2 896 -307266036 32 896 -307266040 2 896 -307269636 32 896 -307269640 2 896 -307269644 32 896 -307269648 2 896 -307269652 32 896 -307269656 2 896 -307269660 32 896 -307269664 2 896 -307269668 32 896 -307269672 2 896 -307269676 32 896 -307269680 2 896 -307269684 32 896 -307269688 2 896 -307269692 32 896 -307269696 2 896 -307269700 32 896 -307269704 2 896 -307269708 32 896 -307269712 2 896 -307269716 32 896 -307269720 2 896 -307269724 32 896 -307269728 2 896 -307269732 32 896 -307269736 2 896 -307269740 32 896 -307269744 2 896 -307269748 32 896 -307269752 2 896 -307269756 32 896 -307269760 2 896 -307269764 32 896 -307269768 2 896 -307269772 32 896 -307269776 2 896 -307269780 32 896 -307269784 2 896 -307269788 32 896 -307269792 2 896 -307269796 32 896 -307269800 2 896 -307269804 32 896 -307269808 2 896 -307269812 32 896 -307269816 2 896 -307269820 32 896 -307269824 2 896 -307269828 32 896 -307269832 2 896 -307269836 32 896 -307269840 2 896 -307269844 32 896 -307269848 2 896 -307269852 32 896 -307269856 2 896 -307269860 32 896 -307269864 2 896 -307269868 32 896 -307269872 2 896 -307269876 32 896 -307269880 2 896 -307269884 32 896 -307269888 2 896 -307269892 32 896 -307269896 2 896 -307269900 32 896 -307269904 2 896 -307269908 32 896 -307269912 2 896 -307269916 32 896 -307269920 2 896 -307269924 32 896 -307269928 2 896 -307269932 32 896 -307269936 2 896 -307269940 32 896 -307269944 2 896 -307269948 32 896 -307269952 2 896 -307269956 32 896 -307269960 2 896 -307269964 32 896 -307269968 2 896 -307269972 32 896 -307269976 2 896 -307269980 32 896 -307269984 2 896 -307269988 32 896 -307269992 2 896 -307269996 32 896 -307270000 2 896 -307270004 32 896 -307270008 2 896 -307270012 32 896 -307270016 2 896 -307270020 32 896 -307270024 2 896 -307270028 32 896 -307270032 2 896 -307270036 32 896 -307270040 2 896 -307270044 32 896 -307270048 2 896 -307270052 32 896 -307270056 2 896 -307270060 32 896 -307270064 2 896 -307270068 32 896 -307270072 2 896 -307270076 32 896 -307270080 2 896 -307270084 32 896 -307270088 2 896 -307270092 32 896 -307270096 2 896 -307270100 32 896 -307270104 2 896 -307270108 32 896 -307270112 2 896 -307270116 32 896 -307270120 2 896 -307270124 32 896 -307270128 2 896 -307270132 32 896 -307270136 2 896 -307273732 32 896 -307273736 2 896 -307273740 32 896 -307273744 2 896 -307273748 32 896 -307273752 2 896 -307273756 32 896 -307273760 2 896 -307273764 32 896 -307273768 2 896 -307273772 32 896 -307273776 2 896 -307273780 32 896 -307273784 2 896 -307273788 32 896 -307273792 2 896 -307273796 32 896 -307273800 2 896 -307273804 32 896 -307273808 2 896 -307273812 32 896 -307273816 2 896 -307273820 32 896 -307273824 2 896 -307273828 32 896 -307273832 2 896 -307273836 32 896 -307273840 2 896 -307273844 32 896 -307273848 2 896 -307273852 32 896 -307273856 2 896 -307273860 32 896 -307273864 2 896 -307273868 32 896 -307273872 2 896 -307273876 32 896 -307273880 2 896 -307273884 32 896 -307273888 2 896 -307273892 32 896 -307273896 2 896 -307273900 32 896 -307273904 2 896 -307273908 32 896 -307273912 2 896 -307273916 32 896 -307273920 2 896 -307273924 32 896 -307273928 2 896 -307273932 32 896 -307273936 2 896 -307273940 32 896 -307273944 2 896 -307273948 32 896 -307273952 2 896 -307273956 32 896 -307273960 2 896 -307273964 32 896 -307273968 2 896 -307273972 32 896 -307273976 2 896 -307273980 32 896 -307273984 2 896 -307273988 32 896 -307273992 2 896 -307273996 32 896 -307274000 2 896 -307274004 32 896 -307274008 2 896 -307274012 32 896 -307274016 2 896 -307274020 32 896 -307274024 2 896 -307274028 32 896 -307274032 2 896 -307274036 32 896 -307274040 2 896 -307274044 32 896 -307274048 2 896 -307274052 32 896 -307274056 2 896 -307274060 32 896 -307274064 2 896 -307274068 32 896 -307274072 2 896 -307274076 32 896 -307274080 2 896 -307274084 32 896 -307274088 2 896 -307274092 32 896 -307274096 2 896 -307274100 32 896 -307274104 2 896 -307274108 32 896 -307274112 2 896 -307274116 32 896 -307274120 2 896 -307274124 32 896 -307274128 2 896 -307274132 32 896 -307274136 2 896 -307274140 32 896 -307274144 2 896 -307274148 32 896 -307274152 2 896 -307274156 32 896 -307274160 2 896 -307274164 32 896 -307274168 2 896 -307274172 32 896 -307274176 2 896 -307274180 32 896 -307274184 2 896 -307274188 32 896 -307274192 2 896 -307274196 32 896 -307274200 2 896 -307274204 32 896 -307274208 2 896 -307274212 32 896 -307274216 2 896 -307274220 32 896 -307274224 2 896 -307274228 32 896 -307274232 2 896 -307277828 32 896 -307277832 2 896 -307277836 32 896 -307277840 2 896 -307277844 32 896 -307277848 2 896 -307277852 32 896 -307277856 2 896 -307277860 32 896 -307277864 2 896 -307277868 32 896 -307277872 2 896 -307277876 32 896 -307277880 2 896 -307277884 32 896 -307277888 2 896 -307277892 32 896 -307277896 2 896 -307277900 32 896 -307277904 2 896 -307277908 32 896 -307277912 2 896 -307277916 32 896 -307277920 2 896 -307277924 32 896 -307277928 2 896 -307277932 32 896 -307277936 2 896 -307277940 32 896 -307277944 2 896 -307277948 32 896 -307277952 2 896 -307277956 32 896 -307277960 2 896 -307277964 32 896 -307277968 2 896 -307277972 32 896 -307277976 2 896 -307277980 32 896 -307277984 2 896 -307277988 32 896 -307277992 2 896 -307277996 32 896 -307278000 2 896 -307278004 32 896 -307278008 2 896 -307278012 32 896 -307278016 2 896 -307278020 32 896 -307278024 2 896 -307278028 32 896 -307278032 2 896 -307278036 32 896 -307278040 2 896 -307278044 32 896 -307278048 2 896 -307278052 32 896 -307278056 2 896 -307278060 32 896 -307278064 2 896 -307278068 32 896 -307278072 2 896 -307278076 32 896 -307278080 2 896 -307278084 32 896 -307278088 2 896 -307278092 32 896 -307278096 2 896 -307278100 32 896 -307278104 2 896 -307278108 32 896 -307278112 2 896 -307278116 32 896 -307278120 2 896 -307278124 32 896 -307278128 2 896 -307278132 32 896 -307278136 2 896 -307278140 32 896 -307278144 2 896 -307278148 32 896 -307278152 2 896 -307278156 32 896 -307278160 2 896 -307278164 32 896 -307278168 2 896 -307278172 32 896 -307278176 2 896 -307278180 32 896 -307278184 2 896 -307278188 32 896 -307278192 2 896 -307278196 32 896 -307278200 2 896 -307278204 32 896 -307278208 2 896 -307278212 32 896 -307278216 2 896 -307278220 32 896 -307278224 2 896 -307278228 32 896 -307278232 2 896 -307278236 32 896 -307278240 2 896 -307278244 32 896 -307278248 2 896 -307278252 32 896 -307278256 2 896 -307278260 32 896 -307278264 2 896 -307278268 32 896 -307278272 2 896 -307278276 32 896 -307278280 2 896 -307278284 32 896 -307278288 2 896 -307278292 32 896 -307278296 2 896 -307278300 32 896 -307278304 2 896 -307278308 32 896 -307278312 2 896 -307278316 32 896 -307278320 2 896 -307278324 32 896 -307278328 2 896 -307281924 32 896 -307281928 2 896 -307281932 32 896 -307281936 2 896 -307281940 32 896 -307281944 2 896 -307281948 32 896 -307281952 2 896 -307281956 32 896 -307281960 2 896 -307281964 32 896 -307281968 2 896 -307281972 32 896 -307281976 2 896 -307281980 32 896 -307281984 2 896 -307281988 32 896 -307281992 2 896 -307281996 32 896 -307282000 2 896 -307282004 32 896 -307282008 2 896 -307282012 32 896 -307282016 2 896 -307282020 32 896 -307282024 2 896 -307282028 32 896 -307282032 2 896 -307282036 32 896 -307282040 2 896 -307282044 32 896 -307282048 2 896 -307282052 32 896 -307282056 2 896 -307282060 32 896 -307282064 2 896 -307282068 32 896 -307282072 2 896 -307282076 32 896 -307282080 2 896 -307282084 32 896 -307282088 2 896 -307282092 32 896 -307282096 2 896 -307282100 32 896 -307282104 2 896 -307282108 32 896 -307282112 2 896 -307282116 32 896 -307282120 2 896 -307282124 32 896 -307282128 2 896 -307282132 32 896 -307282136 2 896 -307282140 32 896 -307282144 2 896 -307282148 32 896 -307282152 2 896 -307282156 32 896 -307282160 2 896 -307282164 32 896 -307282168 2 896 -307282172 32 896 -307282176 2 896 -307282180 32 896 -307282184 2 896 -307282188 32 896 -307282192 2 896 -307282196 32 896 -307282200 2 896 -307282204 32 896 -307282208 2 896 -307282212 32 896 -307282216 2 896 -307282220 32 896 -307282224 2 896 -307282228 32 896 -307282232 2 896 -307282236 32 896 -307282240 2 896 -307282244 32 896 -307282248 2 896 -307282252 32 896 -307282256 2 896 -307282260 32 896 -307282264 2 896 -307282268 32 896 -307282272 2 896 -307282276 32 896 -307282280 2 896 -307282284 32 896 -307282288 2 896 -307282292 32 896 -307282296 2 896 -307282300 32 896 -307282304 2 896 -307282308 32 896 -307282312 2 896 -307282316 32 896 -307282320 2 896 -307282324 32 896 -307282328 2 896 -307282332 32 896 -307282336 2 896 -307282340 32 896 -307282344 2 896 -307282348 32 896 -307282352 2 896 -307282356 32 896 -307282360 2 896 -307282364 32 896 -307282368 2 896 -307282372 32 896 -307282376 2 896 -307282380 32 896 -307282384 2 896 -307282388 32 896 -307282392 2 896 -307282396 32 896 -307282400 2 896 -307282404 32 896 -307282408 2 896 -307282412 32 896 -307282416 2 896 -307282420 32 896 -307282424 2 896 -307286020 32 896 -307286024 2 896 -307286028 32 896 -307286032 2 896 -307286036 32 896 -307286040 2 896 -307286044 32 896 -307286048 2 896 -307286052 32 896 -307286056 2 896 -307286060 32 896 -307286064 2 896 -307286068 32 896 -307286072 2 896 -307286076 32 896 -307286080 2 896 -307286084 32 896 -307286088 2 896 -307286092 32 896 -307286096 2 896 -307286100 32 896 -307286104 2 896 -307286108 32 896 -307286112 2 896 -307286116 32 896 -307286120 2 896 -307286124 32 896 -307286128 2 896 -307286132 32 896 -307286136 2 896 -307286140 32 896 -307286144 2 896 -307286148 32 896 -307286152 2 896 -307286156 32 896 -307286160 2 896 -307286164 32 896 -307286168 2 896 -307286172 32 896 -307286176 2 896 -307286180 32 896 -307286184 2 896 -307286188 32 896 -307286192 2 896 -307286196 32 896 -307286200 2 896 -307286204 32 896 -307286208 2 896 -307286212 32 896 -307286216 2 896 -307286220 32 896 -307286224 2 896 -307286228 32 896 -307286232 2 896 -307286236 32 896 -307286240 2 896 -307286244 32 896 -307286248 2 896 -307286252 32 896 -307286256 2 896 -307286260 32 896 -307286264 2 896 -307286268 32 896 -307286272 2 896 -307286276 32 896 -307286280 2 896 -307286284 32 896 -307286288 2 896 -307286292 32 896 -307286296 2 896 -307286300 32 896 -307286304 2 896 -307286308 32 896 -307286312 2 896 -307286316 32 896 -307286320 2 896 -307286324 32 896 -307286328 2 896 -307286332 32 896 -307286336 2 896 -307286340 32 896 -307286344 2 896 -307286348 32 896 -307286352 2 896 -307286356 32 896 -307286360 2 896 -307286364 32 896 -307286368 2 896 -307286372 32 896 -307286376 2 896 -307286380 32 896 -307286384 2 896 -307286388 32 896 -307286392 2 896 -307286396 32 896 -307286400 2 896 -307286404 32 896 -307286408 2 896 -307286412 32 896 -307286416 2 896 -307286420 32 896 -307286424 2 896 -307286428 32 896 -307286432 2 896 -307286436 32 896 -307286440 2 896 -307286444 32 896 -307286448 2 896 -307286452 32 896 -307286456 2 896 -307286460 32 896 -307286464 2 896 -307286468 32 896 -307286472 2 896 -307286476 32 896 -307286480 2 896 -307286484 32 896 -307286488 2 896 -307286492 32 896 -307286496 2 896 -307286500 32 896 -307286504 2 896 -307286508 32 896 -307286512 2 896 -307286516 32 896 -307286520 2 896 -307290116 32 896 -307290120 2 896 -307290124 32 896 -307290128 2 896 -307290132 32 896 -307290136 2 896 -307290140 32 896 -307290144 2 896 -307290148 32 896 -307290152 2 896 -307290156 32 896 -307290160 2 896 -307290164 32 896 -307290168 2 896 -307290172 32 896 -307290176 2 896 -307290180 32 896 -307290184 2 896 -307290188 32 896 -307290192 2 896 -307290196 32 896 -307290200 2 896 -307290204 32 896 -307290208 2 896 -307290212 32 896 -307290216 2 896 -307290220 32 896 -307290224 2 896 -307290228 32 896 -307290232 2 896 -307290236 32 896 -307290240 2 896 -307290244 32 896 -307290248 2 896 -307290252 32 896 -307290256 2 896 -307290260 32 896 -307290264 2 896 -307290268 32 896 -307290272 2 896 -307290276 32 896 -307290280 2 896 -307290284 32 896 -307290288 2 896 -307290292 32 896 -307290296 2 896 -307290300 32 896 -307290304 2 896 -307290308 32 896 -307290312 2 896 -307290316 32 896 -307290320 2 896 -307290324 32 896 -307290328 2 896 -307290332 32 896 -307290336 2 896 -307290340 32 896 -307290344 2 896 -307290348 32 896 -307290352 2 896 -307290356 32 896 -307290360 2 896 -307290364 32 896 -307290368 2 896 -307290372 32 896 -307290376 2 896 -307290380 32 896 -307290384 2 896 -307290388 32 896 -307290392 2 896 -307290396 32 896 -307290400 2 896 -307290404 32 896 -307290408 2 896 -307290412 32 896 -307290416 2 896 -307290420 32 896 -307290424 2 896 -307290428 32 896 -307290432 2 896 -307290436 32 896 -307290440 2 896 -307290444 32 896 -307290448 2 896 -307290452 32 896 -307290456 2 896 -307290460 32 896 -307290464 2 896 -307290468 32 896 -307290472 2 896 -307290476 32 896 -307290480 2 896 -307290484 32 896 -307290488 2 896 -307290492 32 896 -307290496 2 896 -307290500 32 896 -307290504 2 896 -307290508 32 896 -307290512 2 896 -307290516 32 896 -307290520 2 896 -307290524 32 896 -307290528 2 896 -307290532 32 896 -307290536 2 896 -307290540 32 896 -307290544 2 896 -307290548 32 896 -307290552 2 896 -307290556 32 896 -307290560 2 896 -307290564 32 896 -307290568 2 896 -307290572 32 896 -307290576 2 896 -307290580 32 896 -307290584 2 896 -307290588 32 896 -307290592 2 896 -307290596 32 896 -307290600 2 896 -307290604 32 896 -307290608 2 896 -307290612 32 896 -307290616 2 896 -307294212 32 896 -307294216 2 896 -307294220 32 896 -307294224 2 896 -307294228 32 896 -307294232 2 896 -307294236 32 896 -307294240 2 896 -307294244 32 896 -307294248 2 896 -307294252 32 896 -307294256 2 896 -307294260 32 896 -307294264 2 896 -307294268 32 896 -307294272 2 896 -307294276 32 896 -307294280 2 896 -307294284 32 896 -307294288 2 896 -307294292 32 896 -307294296 2 896 -307294300 32 896 -307294304 2 896 -307294308 32 896 -307294312 2 896 -307294316 32 896 -307294320 2 896 -307294324 32 896 -307294328 2 896 -307294332 32 896 -307294336 2 896 -307294340 32 896 -307294344 2 896 -307294348 32 896 -307294352 2 896 -307294356 32 896 -307294360 2 896 -307294364 32 896 -307294368 2 896 -307294372 32 896 -307294376 2 896 -307294380 32 896 -307294384 2 896 -307294388 32 896 -307294392 2 896 -307294396 32 896 -307294400 2 896 -307294404 32 896 -307294408 2 896 -307294412 32 896 -307294416 2 896 -307294420 32 896 -307294424 2 896 -307294428 32 896 -307294432 2 896 -307294436 32 896 -307294440 2 896 -307294444 32 896 -307294448 2 896 -307294452 32 896 -307294456 2 896 -307294460 32 896 -307294464 2 896 -307294468 32 896 -307294472 2 896 -307294476 32 896 -307294480 2 896 -307294484 32 896 -307294488 2 896 -307294492 32 896 -307294496 2 896 -307294500 32 896 -307294504 2 896 -307294508 32 896 -307294512 2 896 -307294516 32 896 -307294520 2 896 -307294524 32 896 -307294528 2 896 -307294532 32 896 -307294536 2 896 -307294540 32 896 -307294544 2 896 -307294548 32 896 -307294552 2 896 -307294556 32 896 -307294560 2 896 -307294564 32 896 -307294568 2 896 -307294572 32 896 -307294576 2 896 -307294580 32 896 -307294584 2 896 -307294588 32 896 -307294592 2 896 -307294596 32 896 -307294600 2 896 -307294604 32 896 -307294608 2 896 -307294612 32 896 -307294616 2 896 -307294620 32 896 -307294624 2 896 -307294628 32 896 -307294632 2 896 -307294636 32 896 -307294640 2 896 -307294644 32 896 -307294648 2 896 -307294652 32 896 -307294656 2 896 -307294660 32 896 -307294664 2 896 -307294668 32 896 -307294672 2 896 -307294676 32 896 -307294680 2 896 -307294684 32 896 -307294688 2 896 -307294692 32 896 -307294696 2 896 -307294700 32 896 -307294704 2 896 -307294708 32 896 -307294712 2 896 -307298308 32 896 -307298312 2 896 -307298316 32 896 -307298320 2 896 -307298324 32 896 -307298328 2 896 -307298332 32 896 -307298336 2 896 -307298340 32 896 -307298344 2 896 -307298348 32 896 -307298352 2 896 -307298356 32 896 -307298360 2 896 -307298364 32 896 -307298368 2 896 -307298372 32 896 -307298376 2 896 -307298380 32 896 -307298384 2 896 -307298388 32 896 -307298392 2 896 -307298396 32 896 -307298400 2 896 -307298404 32 896 -307298408 2 896 -307298412 32 896 -307298416 2 896 -307298420 32 896 -307298424 2 896 -307298428 32 896 -307298432 2 896 -307298436 32 896 -307298440 2 896 -307298444 32 896 -307298448 2 896 -307298452 32 896 -307298456 2 896 -307298460 32 896 -307298464 2 896 -307298468 32 896 -307298472 2 896 -307298476 32 896 -307298480 2 896 -307298484 32 896 -307298488 2 896 -307298492 32 896 -307298496 2 896 -307298500 32 896 -307298504 2 896 -307298508 32 896 -307298512 2 896 -307298516 32 896 -307298520 2 896 -307298524 32 896 -307298528 2 896 -307298532 32 896 -307298536 2 896 -307298540 32 896 -307298544 2 896 -307298548 32 896 -307298552 2 896 -307298556 32 896 -307298560 2 896 -307298564 32 896 -307298568 2 896 -307298572 32 896 -307298576 2 896 -307298580 32 896 -307298584 2 896 -307298588 32 896 -307298592 2 896 -307298596 32 896 -307298600 2 896 -307298604 32 896 -307298608 2 896 -307298612 32 896 -307298616 2 896 -307298620 32 896 -307298624 2 896 -307298628 32 896 -307298632 2 896 -307298636 32 896 -307298640 2 896 -307298644 32 896 -307298648 2 896 -307298652 32 896 -307298656 2 896 -307298660 32 896 -307298664 2 896 -307298668 32 896 -307298672 2 896 -307298676 32 896 -307298680 2 896 -307298684 32 896 -307298688 2 896 -307298692 32 896 -307298696 2 896 -307298700 32 896 -307298704 2 896 -307298708 32 896 -307298712 2 896 -307298716 32 896 -307298720 2 896 -307298724 32 896 -307298728 2 896 -307298732 32 896 -307298736 2 896 -307298740 32 896 -307298744 2 896 -307298748 32 896 -307298752 2 896 -307298756 32 896 -307298760 2 896 -307298764 32 896 -307298768 2 896 -307298772 32 896 -307298776 2 896 -307298780 32 896 -307298784 2 896 -307298788 32 896 -307298792 2 896 -307298796 32 896 -307298800 2 896 -307298804 32 896 -307298808 2 896 -308285444 32 896 -308285448 2 896 -308285452 32 896 -308285456 2 896 -308285460 32 896 -308285464 2 896 -308285468 32 896 -308285472 2 896 -308285476 32 896 -308285480 2 896 -308285484 32 896 -308285488 2 896 -308285492 32 896 -308285496 2 896 -308285500 32 896 -308285504 2 896 -308285508 32 896 -308285512 2 896 -308285516 32 896 -308285520 2 896 -308285524 32 896 -308285528 2 896 -308285532 32 896 -308285536 2 896 -308285540 32 896 -308285544 2 896 -308285548 32 896 -308285552 2 896 -308285556 32 896 -308285560 2 896 -308285564 32 896 -308285568 2 896 -308285572 32 896 -308285576 2 896 -308285580 32 896 -308285584 2 896 -308285588 32 896 -308285592 2 896 -308285596 32 896 -308285600 2 896 -308285604 32 896 -308285608 2 896 -308285612 32 896 -308285616 2 896 -308285620 32 896 -308285624 2 896 -308285628 32 896 -308285632 2 896 -308285636 32 896 -308285640 2 896 -308285644 32 896 -308285648 2 896 -308285652 32 896 -308285656 2 896 -308285660 32 896 -308285664 2 896 -308285668 32 896 -308285672 2 896 -308285676 32 896 -308285680 2 896 -308285684 32 896 -308285688 2 896 -308285692 32 896 -308285696 2 896 -308285700 32 896 -308285704 2 896 -308285708 32 896 -308285712 2 896 -308285716 32 896 -308285720 2 896 -308285724 32 896 -308285728 2 896 -308285732 32 896 -308285736 2 896 -308285740 32 896 -308285744 2 896 -308285748 32 896 -308285752 2 896 -308285756 32 896 -308285760 2 896 -308285764 32 896 -308285768 2 896 -308285772 32 896 -308285776 2 896 -308285780 32 896 -308285784 2 896 -308285788 32 896 -308285792 2 896 -308285796 32 896 -308285800 2 896 -308285804 32 896 -308285808 2 896 -308285812 32 896 -308285816 2 896 -308285820 32 896 -308285824 2 896 -308285828 32 896 -308285832 2 896 -308285836 32 896 -308285840 2 896 -308285844 32 896 -308285848 2 896 -308285852 32 896 -308285856 2 896 -308285860 32 896 -308285864 2 896 -308285868 32 896 -308285872 2 896 -308285876 32 896 -308285880 2 896 -308289540 32 896 -308289544 2 896 -308289548 32 896 -308289552 2 896 -308289556 32 896 -308289560 2 896 -308289564 32 896 -308289568 2 896 -308289572 32 896 -308289576 2 896 -308289580 32 896 -308289584 2 896 -308289588 32 896 -308289592 2 896 -308289596 32 896 -308289600 2 896 -308289604 32 896 -308289608 2 896 -308289612 32 896 -308289616 2 896 -308289620 32 896 -308289624 2 896 -308289628 32 896 -308289632 2 896 -308289636 32 896 -308289640 2 896 -308289644 32 896 -308289648 2 896 -308289652 32 896 -308289656 2 896 -308289660 32 896 -308289664 2 896 -308289668 32 896 -308289672 2 896 -308289676 32 896 -308289680 2 896 -308289684 32 896 -308289688 2 896 -308289692 32 896 -308289696 2 896 -308289700 32 896 -308289704 2 896 -308289708 32 896 -308289712 2 896 -308289716 32 896 -308289720 2 896 -308289724 32 896 -308289728 2 896 -308289732 32 896 -308289736 2 896 -308289740 32 896 -308289744 2 896 -308289748 32 896 -308289752 2 896 -308289756 32 896 -308289760 2 896 -308289764 32 896 -308289768 2 896 -308289772 32 896 -308289776 2 896 -308289780 32 896 -308289784 2 896 -308289788 32 896 -308289792 2 896 -308289796 32 896 -308289800 2 896 -308289804 32 896 -308289808 2 896 -308289812 32 896 -308289816 2 896 -308289820 32 896 -308289824 2 896 -308289828 32 896 -308289832 2 896 -308289836 32 896 -308289840 2 896 -308289844 32 896 -308289848 2 896 -308289852 32 896 -308289856 2 896 -308289860 32 896 -308289864 2 896 -308289868 32 896 -308289872 2 896 -308289876 32 896 -308289880 2 896 -308289884 32 896 -308289888 2 896 -308289892 32 896 -308289896 2 896 -308289900 32 896 -308289904 2 896 -308289908 32 896 -308289912 2 896 -308289916 32 896 -308289920 2 896 -308289924 32 896 -308289928 2 896 -308289932 32 896 -308289936 2 896 -308289940 32 896 -308289944 2 896 -308289948 32 896 -308289952 2 896 -308289956 32 896 -308289960 2 896 -308289964 32 896 -308289968 2 896 -308289972 32 896 -308289976 2 896 -308293636 32 896 -308293640 2 896 -308293644 32 896 -308293648 2 896 -308293652 32 896 -308293656 2 896 -308293660 32 896 -308293664 2 896 -308293668 32 896 -308293672 2 896 -308293676 32 896 -308293680 2 896 -308293684 32 896 -308293688 2 896 -308293692 32 896 -308293696 2 896 -308293700 32 896 -308293704 2 896 -308293708 32 896 -308293712 2 896 -308293716 32 896 -308293720 2 896 -308293724 32 896 -308293728 2 896 -308293732 32 896 -308293736 2 896 -308293740 32 896 -308293744 2 896 -308293748 32 896 -308293752 2 896 -308293756 32 896 -308293760 2 896 -308293764 32 896 -308293768 2 896 -308293772 32 896 -308293776 2 896 -308293780 32 896 -308293784 2 896 -308293788 32 896 -308293792 2 896 -308293796 32 896 -308293800 2 896 -308293804 32 896 -308293808 2 896 -308293812 32 896 -308293816 2 896 -308293820 32 896 -308293824 2 896 -308293828 32 896 -308293832 2 896 -308293836 32 896 -308293840 2 896 -308293844 32 896 -308293848 2 896 -308293852 32 896 -308293856 2 896 -308293860 32 896 -308293864 2 896 -308293868 32 896 -308293872 2 896 -308293876 32 896 -308293880 2 896 -308293884 32 896 -308293888 2 896 -308293892 32 896 -308293896 2 896 -308293900 32 896 -308293904 2 896 -308293908 32 896 -308293912 2 896 -308293916 32 896 -308293920 2 896 -308293924 32 896 -308293928 2 896 -308293932 32 896 -308293936 2 896 -308293940 32 896 -308293944 2 896 -308293948 32 896 -308293952 2 896 -308293956 32 896 -308293960 2 896 -308293964 32 896 -308293968 2 896 -308293972 32 896 -308293976 2 896 -308293980 32 896 -308293984 2 896 -308293988 32 896 -308293992 2 896 -308293996 32 896 -308294000 2 896 -308294004 32 896 -308294008 2 896 -308294012 32 896 -308294016 2 896 -308294020 32 896 -308294024 2 896 -308294028 32 896 -308294032 2 896 -308294036 32 896 -308294040 2 896 -308294044 32 896 -308294048 2 896 -308294052 32 896 -308294056 2 896 -308294060 32 896 -308294064 2 896 -308294068 32 896 -308294072 2 896 -308297732 32 896 -308297736 2 896 -308297740 32 896 -308297744 2 896 -308297748 32 896 -308297752 2 896 -308297756 32 896 -308297760 2 896 -308297764 32 896 -308297768 2 896 -308297772 32 896 -308297776 2 896 -308297780 32 896 -308297784 2 896 -308297788 32 896 -308297792 2 896 -308297796 32 896 -308297800 2 896 -308297804 32 896 -308297808 2 896 -308297812 32 896 -308297816 2 896 -308297820 32 896 -308297824 2 896 -308297828 32 896 -308297832 2 896 -308297836 32 896 -308297840 2 896 -308297844 32 896 -308297848 2 896 -308297852 32 896 -308297856 2 896 -308297860 32 896 -308297864 2 896 -308297868 32 896 -308297872 2 896 -308297876 32 896 -308297880 2 896 -308297884 32 896 -308297888 2 896 -308297892 32 896 -308297896 2 896 -308297900 32 896 -308297904 2 896 -308297908 32 896 -308297912 2 896 -308297916 32 896 -308297920 2 896 -308297924 32 896 -308297928 2 896 -308297932 32 896 -308297936 2 896 -308297940 32 896 -308297944 2 896 -308297948 32 896 -308297952 2 896 -308297956 32 896 -308297960 2 896 -308297964 32 896 -308297968 2 896 -308297972 32 896 -308297976 2 896 -308297980 32 896 -308297984 2 896 -308297988 32 896 -308297992 2 896 -308297996 32 896 -308298000 2 896 -308298004 32 896 -308298008 2 896 -308298012 32 896 -308298016 2 896 -308298020 32 896 -308298024 2 896 -308298028 32 896 -308298032 2 896 -308298036 32 896 -308298040 2 896 -308298044 32 896 -308298048 2 896 -308298052 32 896 -308298056 2 896 -308298060 32 896 -308298064 2 896 -308298068 32 896 -308298072 2 896 -308298076 32 896 -308298080 2 896 -308298084 32 896 -308298088 2 896 -308298092 32 896 -308298096 2 896 -308298100 32 896 -308298104 2 896 -308298108 32 896 -308298112 2 896 -308298116 32 896 -308298120 2 896 -308298124 32 896 -308298128 2 896 -308298132 32 896 -308298136 2 896 -308298140 32 896 -308298144 2 896 -308298148 32 896 -308298152 2 896 -308298156 32 896 -308298160 2 896 -308298164 32 896 -308298168 2 896 -308301828 32 896 -308301832 2 896 -308301836 32 896 -308301840 2 896 -308301844 32 896 -308301848 2 896 -308301852 32 896 -308301856 2 896 -308301860 32 896 -308301864 2 896 -308301868 32 896 -308301872 2 896 -308301876 32 896 -308301880 2 896 -308301884 32 896 -308301888 2 896 -308301892 32 896 -308301896 2 896 -308301900 32 896 -308301904 2 896 -308301908 32 896 -308301912 2 896 -308301916 32 896 -308301920 2 896 -308301924 32 896 -308301928 2 896 -308301932 32 896 -308301936 2 896 -308301940 32 896 -308301944 2 896 -308301948 32 896 -308301952 2 896 -308301956 32 896 -308301960 2 896 -308301964 32 896 -308301968 2 896 -308301972 32 896 -308301976 2 896 -308301980 32 896 -308301984 2 896 -308301988 32 896 -308301992 2 896 -308301996 32 896 -308302000 2 896 -308302004 32 896 -308302008 2 896 -308302012 32 896 -308302016 2 896 -308302020 32 896 -308302024 2 896 -308302028 32 896 -308302032 2 896 -308302036 32 896 -308302040 2 896 -308302044 32 896 -308302048 2 896 -308302052 32 896 -308302056 2 896 -308302060 32 896 -308302064 2 896 -308302068 32 896 -308302072 2 896 -308302076 32 896 -308302080 2 896 -308302084 32 896 -308302088 2 896 -308302092 32 896 -308302096 2 896 -308302100 32 896 -308302104 2 896 -308302108 32 896 -308302112 2 896 -308302116 32 896 -308302120 2 896 -308302124 32 896 -308302128 2 896 -308302132 32 896 -308302136 2 896 -308302140 32 896 -308302144 2 896 -308302148 32 896 -308302152 2 896 -308302156 32 896 -308302160 2 896 -308302164 32 896 -308302168 2 896 -308302172 32 896 -308302176 2 896 -308302180 32 896 -308302184 2 896 -308302188 32 896 -308302192 2 896 -308302196 32 896 -308302200 2 896 -308302204 32 896 -308302208 2 896 -308302212 32 896 -308302216 2 896 -308302220 32 896 -308302224 2 896 -308302228 32 896 -308302232 2 896 -308302236 32 896 -308302240 2 896 -308302244 32 896 -308302248 2 896 -308302252 32 896 -308302256 2 896 -308302260 32 896 -308302264 2 896 -308305924 32 896 -308305928 2 896 -308305932 32 896 -308305936 2 896 -308305940 32 896 -308305944 2 896 -308305948 32 896 -308305952 2 896 -308305956 32 896 -308305960 2 896 -308305964 32 896 -308305968 2 896 -308305972 32 896 -308305976 2 896 -308305980 32 896 -308305984 2 896 -308305988 32 896 -308305992 2 896 -308305996 32 896 -308306000 2 896 -308306004 32 896 -308306008 2 896 -308306012 32 896 -308306016 2 896 -308306020 32 896 -308306024 2 896 -308306028 32 896 -308306032 2 896 -308306036 32 896 -308306040 2 896 -308306044 32 896 -308306048 2 896 -308306052 32 896 -308306056 2 896 -308306060 32 896 -308306064 2 896 -308306068 32 896 -308306072 2 896 -308306076 32 896 -308306080 2 896 -308306084 32 896 -308306088 2 896 -308306092 32 896 -308306096 2 896 -308306100 32 896 -308306104 2 896 -308306108 32 896 -308306112 2 896 -308306116 32 896 -308306120 2 896 -308306124 32 896 -308306128 2 896 -308306132 32 896 -308306136 2 896 -308306140 32 896 -308306144 2 896 -308306148 32 896 -308306152 2 896 -308306156 32 896 -308306160 2 896 -308306164 32 896 -308306168 2 896 -308306172 32 896 -308306176 2 896 -308306180 32 896 -308306184 2 896 -308306188 32 896 -308306192 2 896 -308306196 32 896 -308306200 2 896 -308306204 32 896 -308306208 2 896 -308306212 32 896 -308306216 2 896 -308306220 32 896 -308306224 2 896 -308306228 32 896 -308306232 2 896 -308306236 32 896 -308306240 2 896 -308306244 32 896 -308306248 2 896 -308306252 32 896 -308306256 2 896 -308306260 32 896 -308306264 2 896 -308306268 32 896 -308306272 2 896 -308306276 32 896 -308306280 2 896 -308306284 32 896 -308306288 2 896 -308306292 32 896 -308306296 2 896 -308306300 32 896 -308306304 2 896 -308306308 32 896 -308306312 2 896 -308306316 32 896 -308306320 2 896 -308306324 32 896 -308306328 2 896 -308306332 32 896 -308306336 2 896 -308306340 32 896 -308306344 2 896 -308306348 32 896 -308306352 2 896 -308306356 32 896 -308306360 2 896 -308310020 32 896 -308310024 2 896 -308310028 32 896 -308310032 2 896 -308310036 32 896 -308310040 2 896 -308310044 32 896 -308310048 2 896 -308310052 32 896 -308310056 2 896 -308310060 32 896 -308310064 2 896 -308310068 32 896 -308310072 2 896 -308310076 32 896 -308310080 2 896 -308310084 32 896 -308310088 2 896 -308310092 32 896 -308310096 2 896 -308310100 32 896 -308310104 2 896 -308310108 32 896 -308310112 2 896 -308310116 32 896 -308310120 2 896 -308310124 32 896 -308310128 2 896 -308310132 32 896 -308310136 2 896 -308310140 32 896 -308310144 2 896 -308310148 32 896 -308310152 2 896 -308310156 32 896 -308310160 2 896 -308310164 32 896 -308310168 2 896 -308310172 32 896 -308310176 2 896 -308310180 32 896 -308310184 2 896 -308310188 32 896 -308310192 2 896 -308310196 32 896 -308310200 2 896 -308310204 32 896 -308310208 2 896 -308310212 32 896 -308310216 2 896 -308310220 32 896 -308310224 2 896 -308310228 32 896 -308310232 2 896 -308310236 32 896 -308310240 2 896 -308310244 32 896 -308310248 2 896 -308310252 32 896 -308310256 2 896 -308310260 32 896 -308310264 2 896 -308310268 32 896 -308310272 2 896 -308310276 32 896 -308310280 2 896 -308310284 32 896 -308310288 2 896 -308310292 32 896 -308310296 2 896 -308310300 32 896 -308310304 2 896 -308310308 32 896 -308310312 2 896 -308310316 32 896 -308310320 2 896 -308310324 32 896 -308310328 2 896 -308310332 32 896 -308310336 2 896 -308310340 32 896 -308310344 2 896 -308310348 32 896 -308310352 2 896 -308310356 32 896 -308310360 2 896 -308310364 32 896 -308310368 2 896 -308310372 32 896 -308310376 2 896 -308310380 32 896 -308310384 2 896 -308310388 32 896 -308310392 2 896 -308310396 32 896 -308310400 2 896 -308310404 32 896 -308310408 2 896 -308310412 32 896 -308310416 2 896 -308310420 32 896 -308310424 2 896 -308310428 32 896 -308310432 2 896 -308310436 32 896 -308310440 2 896 -308310444 32 896 -308310448 2 896 -308310452 32 896 -308310456 2 896 -308314116 32 896 -308314120 2 896 -308314124 32 896 -308314128 2 896 -308314132 32 896 -308314136 2 896 -308314140 32 896 -308314144 2 896 -308314148 32 896 -308314152 2 896 -308314156 32 896 -308314160 2 896 -308314164 32 896 -308314168 2 896 -308314172 32 896 -308314176 2 896 -308314180 32 896 -308314184 2 896 -308314188 32 896 -308314192 2 896 -308314196 32 896 -308314200 2 896 -308314204 32 896 -308314208 2 896 -308314212 32 896 -308314216 2 896 -308314220 32 896 -308314224 2 896 -308314228 32 896 -308314232 2 896 -308314236 32 896 -308314240 2 896 -308314244 32 896 -308314248 2 896 -308314252 32 896 -308314256 2 896 -308314260 32 896 -308314264 2 896 -308314268 32 896 -308314272 2 896 -308314276 32 896 -308314280 2 896 -308314284 32 896 -308314288 2 896 -308314292 32 896 -308314296 2 896 -308314300 32 896 -308314304 2 896 -308314308 32 896 -308314312 2 896 -308314316 32 896 -308314320 2 896 -308314324 32 896 -308314328 2 896 -308314332 32 896 -308314336 2 896 -308314340 32 896 -308314344 2 896 -308314348 32 896 -308314352 2 896 -308314356 32 896 -308314360 2 896 -308314364 32 896 -308314368 2 896 -308314372 32 896 -308314376 2 896 -308314380 32 896 -308314384 2 896 -308314388 32 896 -308314392 2 896 -308314396 32 896 -308314400 2 896 -308314404 32 896 -308314408 2 896 -308314412 32 896 -308314416 2 896 -308314420 32 896 -308314424 2 896 -308314428 32 896 -308314432 2 896 -308314436 32 896 -308314440 2 896 -308314444 32 896 -308314448 2 896 -308314452 32 896 -308314456 2 896 -308314460 32 896 -308314464 2 896 -308314468 32 896 -308314472 2 896 -308314476 32 896 -308314480 2 896 -308314484 32 896 -308314488 2 896 -308314492 32 896 -308314496 2 896 -308314500 32 896 -308314504 2 896 -308314508 32 896 -308314512 2 896 -308314516 32 896 -308314520 2 896 -308314524 32 896 -308314528 2 896 -308314532 32 896 -308314536 2 896 -308314540 32 896 -308314544 2 896 -308314548 32 896 -308314552 2 896 -308318212 32 896 -308318216 2 896 -308318220 32 896 -308318224 2 896 -308318228 32 896 -308318232 2 896 -308318236 32 896 -308318240 2 896 -308318244 32 896 -308318248 2 896 -308318252 32 896 -308318256 2 896 -308318260 32 896 -308318264 2 896 -308318268 32 896 -308318272 2 896 -308318276 32 896 -308318280 2 896 -308318284 32 896 -308318288 2 896 -308318292 32 896 -308318296 2 896 -308318300 32 896 -308318304 2 896 -308318308 32 896 -308318312 2 896 -308318316 32 896 -308318320 2 896 -308318324 32 896 -308318328 2 896 -308318332 32 896 -308318336 2 896 -308318340 32 896 -308318344 2 896 -308318348 32 896 -308318352 2 896 -308318356 32 896 -308318360 2 896 -308318364 32 896 -308318368 2 896 -308318372 32 896 -308318376 2 896 -308318380 32 896 -308318384 2 896 -308318388 32 896 -308318392 2 896 -308318396 32 896 -308318400 2 896 -308318404 32 896 -308318408 2 896 -308318412 32 896 -308318416 2 896 -308318420 32 896 -308318424 2 896 -308318428 32 896 -308318432 2 896 -308318436 32 896 -308318440 2 896 -308318444 32 896 -308318448 2 896 -308318452 32 896 -308318456 2 896 -308318460 32 896 -308318464 2 896 -308318468 32 896 -308318472 2 896 -308318476 32 896 -308318480 2 896 -308318484 32 896 -308318488 2 896 -308318492 32 896 -308318496 2 896 -308318500 32 896 -308318504 2 896 -308318508 32 896 -308318512 2 896 -308318516 32 896 -308318520 2 896 -308318524 32 896 -308318528 2 896 -308318532 32 896 -308318536 2 896 -308318540 32 896 -308318544 2 896 -308318548 32 896 -308318552 2 896 -308318556 32 896 -308318560 2 896 -308318564 32 896 -308318568 2 896 -308318572 32 896 -308318576 2 896 -308318580 32 896 -308318584 2 896 -308318588 32 896 -308318592 2 896 -308318596 32 896 -308318600 2 896 -308318604 32 896 -308318608 2 896 -308318612 32 896 -308318616 2 896 -308318620 32 896 -308318624 2 896 -308318628 32 896 -308318632 2 896 -308318636 32 896 -308318640 2 896 -308318644 32 896 -308318648 2 896 -308322308 32 896 -308322312 2 896 -308322316 32 896 -308322320 2 896 -308322324 32 896 -308322328 2 896 -308322332 32 896 -308322336 2 896 -308322340 32 896 -308322344 2 896 -308322348 32 896 -308322352 2 896 -308322356 32 896 -308322360 2 896 -308322364 32 896 -308322368 2 896 -308322372 32 896 -308322376 2 896 -308322380 32 896 -308322384 2 896 -308322388 32 896 -308322392 2 896 -308322396 32 896 -308322400 2 896 -308322404 32 896 -308322408 2 896 -308322412 32 896 -308322416 2 896 -308322420 32 896 -308322424 2 896 -308322428 32 896 -308322432 2 896 -308322436 32 896 -308322440 2 896 -308322444 32 896 -308322448 2 896 -308322452 32 896 -308322456 2 896 -308322460 32 896 -308322464 2 896 -308322468 32 896 -308322472 2 896 -308322476 32 896 -308322480 2 896 -308322484 32 896 -308322488 2 896 -308322492 32 896 -308322496 2 896 -308322500 32 896 -308322504 2 896 -308322508 32 896 -308322512 2 896 -308322516 32 896 -308322520 2 896 -308322524 32 896 -308322528 2 896 -308322532 32 896 -308322536 2 896 -308322540 32 896 -308322544 2 896 -308322548 32 896 -308322552 2 896 -308322556 32 896 -308322560 2 896 -308322564 32 896 -308322568 2 896 -308322572 32 896 -308322576 2 896 -308322580 32 896 -308322584 2 896 -308322588 32 896 -308322592 2 896 -308322596 32 896 -308322600 2 896 -308322604 32 896 -308322608 2 896 -308322612 32 896 -308322616 2 896 -308322620 32 896 -308322624 2 896 -308322628 32 896 -308322632 2 896 -308322636 32 896 -308322640 2 896 -308322644 32 896 -308322648 2 896 -308322652 32 896 -308322656 2 896 -308322660 32 896 -308322664 2 896 -308322668 32 896 -308322672 2 896 -308322676 32 896 -308322680 2 896 -308322684 32 896 -308322688 2 896 -308322692 32 896 -308322696 2 896 -308322700 32 896 -308322704 2 896 -308322708 32 896 -308322712 2 896 -308322716 32 896 -308322720 2 896 -308322724 32 896 -308322728 2 896 -308322732 32 896 -308322736 2 896 -308322740 32 896 -308322744 2 896 -308326404 32 896 -308326408 2 896 -308326412 32 896 -308326416 2 896 -308326420 32 896 -308326424 2 896 -308326428 32 896 -308326432 2 896 -308326436 32 896 -308326440 2 896 -308326444 32 896 -308326448 2 896 -308326452 32 896 -308326456 2 896 -308326460 32 896 -308326464 2 896 -308326468 32 896 -308326472 2 896 -308326476 32 896 -308326480 2 896 -308326484 32 896 -308326488 2 896 -308326492 32 896 -308326496 2 896 -308326500 32 896 -308326504 2 896 -308326508 32 896 -308326512 2 896 -308326516 32 896 -308326520 2 896 -308326524 32 896 -308326528 2 896 -308326532 32 896 -308326536 2 896 -308326540 32 896 -308326544 2 896 -308326548 32 896 -308326552 2 896 -308326556 32 896 -308326560 2 896 -308326564 32 896 -308326568 2 896 -308326572 32 896 -308326576 2 896 -308326580 32 896 -308326584 2 896 -308326588 32 896 -308326592 2 896 -308326596 32 896 -308326600 2 896 -308326604 32 896 -308326608 2 896 -308326612 32 896 -308326616 2 896 -308326620 32 896 -308326624 2 896 -308326628 32 896 -308326632 2 896 -308326636 32 896 -308326640 2 896 -308326644 32 896 -308326648 2 896 -308326652 32 896 -308326656 2 896 -308326660 32 896 -308326664 2 896 -308326668 32 896 -308326672 2 896 -308326676 32 896 -308326680 2 896 -308326684 32 896 -308326688 2 896 -308326692 32 896 -308326696 2 896 -308326700 32 896 -308326704 2 896 -308326708 32 896 -308326712 2 896 -308326716 32 896 -308326720 2 896 -308326724 32 896 -308326728 2 896 -308326732 32 896 -308326736 2 896 -308326740 32 896 -308326744 2 896 -308326748 32 896 -308326752 2 896 -308326756 32 896 -308326760 2 896 -308326764 32 896 -308326768 2 896 -308326772 32 896 -308326776 2 896 -308326780 32 896 -308326784 2 896 -308326788 32 896 -308326792 2 896 -308326796 32 896 -308326800 2 896 -308326804 32 896 -308326808 2 896 -308326812 32 896 -308326816 2 896 -308326820 32 896 -308326824 2 896 -308326828 32 896 -308326832 2 896 -308326836 32 896 -308326840 2 896 -308330500 32 896 -308330504 2 896 -308330508 32 896 -308330512 2 896 -308330516 32 896 -308330520 2 896 -308330524 32 896 -308330528 2 896 -308330532 32 896 -308330536 2 896 -308330540 32 896 -308330544 2 896 -308330548 32 896 -308330552 2 896 -308330556 32 896 -308330560 2 896 -308330564 32 896 -308330568 2 896 -308330572 32 896 -308330576 2 896 -308330580 32 896 -308330584 2 896 -308330588 32 896 -308330592 2 896 -308330596 32 896 -308330600 2 896 -308330604 32 896 -308330608 2 896 -308330612 32 896 -308330616 2 896 -308330620 32 896 -308330624 2 896 -308330628 32 896 -308330632 2 896 -308330636 32 896 -308330640 2 896 -308330644 32 896 -308330648 2 896 -308330652 32 896 -308330656 2 896 -308330660 32 896 -308330664 2 896 -308330668 32 896 -308330672 2 896 -308330676 32 896 -308330680 2 896 -308330684 32 896 -308330688 2 896 -308330692 32 896 -308330696 2 896 -308330700 32 896 -308330704 2 896 -308330708 32 896 -308330712 2 896 -308330716 32 896 -308330720 2 896 -308330724 32 896 -308330728 2 896 -308330732 32 896 -308330736 2 896 -308330740 32 896 -308330744 2 896 -308330748 32 896 -308330752 2 896 -308330756 32 896 -308330760 2 896 -308330764 32 896 -308330768 2 896 -308330772 32 896 -308330776 2 896 -308330780 32 896 -308330784 2 896 -308330788 32 896 -308330792 2 896 -308330796 32 896 -308330800 2 896 -308330804 32 896 -308330808 2 896 -308330812 32 896 -308330816 2 896 -308330820 32 896 -308330824 2 896 -308330828 32 896 -308330832 2 896 -308330836 32 896 -308330840 2 896 -308330844 32 896 -308330848 2 896 -308330852 32 896 -308330856 2 896 -308330860 32 896 -308330864 2 896 -308330868 32 896 -308330872 2 896 -308330876 32 896 -308330880 2 896 -308330884 32 896 -308330888 2 896 -308330892 32 896 -308330896 2 896 -308330900 32 896 -308330904 2 896 -308330908 32 896 -308330912 2 896 -308330916 32 896 -308330920 2 896 -308330924 32 896 -308330928 2 896 -308330932 32 896 -308330936 2 896 -308334596 32 896 -308334600 2 896 -308334604 32 896 -308334608 2 896 -308334612 32 896 -308334616 2 896 -308334620 32 896 -308334624 2 896 -308334628 32 896 -308334632 2 896 -308334636 32 896 -308334640 2 896 -308334644 32 896 -308334648 2 896 -308334652 32 896 -308334656 2 896 -308334660 32 896 -308334664 2 896 -308334668 32 896 -308334672 2 896 -308334676 32 896 -308334680 2 896 -308334684 32 896 -308334688 2 896 -308334692 32 896 -308334696 2 896 -308334700 32 896 -308334704 2 896 -308334708 32 896 -308334712 2 896 -308334716 32 896 -308334720 2 896 -308334724 32 896 -308334728 2 896 -308334732 32 896 -308334736 2 896 -308334740 32 896 -308334744 2 896 -308334748 32 896 -308334752 2 896 -308334756 32 896 -308334760 2 896 -308334764 32 896 -308334768 2 896 -308334772 32 896 -308334776 2 896 -308334780 32 896 -308334784 2 896 -308334788 32 896 -308334792 2 896 -308334796 32 896 -308334800 2 896 -308334804 32 896 -308334808 2 896 -308334812 32 896 -308334816 2 896 -308334820 32 896 -308334824 2 896 -308334828 32 896 -308334832 2 896 -308334836 32 896 -308334840 2 896 -308334844 32 896 -308334848 2 896 -308334852 32 896 -308334856 2 896 -308334860 32 896 -308334864 2 896 -308334868 32 896 -308334872 2 896 -308334876 32 896 -308334880 2 896 -308334884 32 896 -308334888 2 896 -308334892 32 896 -308334896 2 896 -308334900 32 896 -308334904 2 896 -308334908 32 896 -308334912 2 896 -308334916 32 896 -308334920 2 896 -308334924 32 896 -308334928 2 896 -308334932 32 896 -308334936 2 896 -308334940 32 896 -308334944 2 896 -308334948 32 896 -308334952 2 896 -308334956 32 896 -308334960 2 896 -308334964 32 896 -308334968 2 896 -308334972 32 896 -308334976 2 896 -308334980 32 896 -308334984 2 896 -308334988 32 896 -308334992 2 896 -308334996 32 896 -308335000 2 896 -308335004 32 896 -308335008 2 896 -308335012 32 896 -308335016 2 896 -308335020 32 896 -308335024 2 896 -308335028 32 896 -308335032 2 896 -308338692 32 896 -308338696 2 896 -308338700 32 896 -308338704 2 896 -308338708 32 896 -308338712 2 896 -308338716 32 896 -308338720 2 896 -308338724 32 896 -308338728 2 896 -308338732 32 896 -308338736 2 896 -308338740 32 896 -308338744 2 896 -308338748 32 896 -308338752 2 896 -308338756 32 896 -308338760 2 896 -308338764 32 896 -308338768 2 896 -308338772 32 896 -308338776 2 896 -308338780 32 896 -308338784 2 896 -308338788 32 896 -308338792 2 896 -308338796 32 896 -308338800 2 896 -308338804 32 896 -308338808 2 896 -308338812 32 896 -308338816 2 896 -308338820 32 896 -308338824 2 896 -308338828 32 896 -308338832 2 896 -308338836 32 896 -308338840 2 896 -308338844 32 896 -308338848 2 896 -308338852 32 896 -308338856 2 896 -308338860 32 896 -308338864 2 896 -308338868 32 896 -308338872 2 896 -308338876 32 896 -308338880 2 896 -308338884 32 896 -308338888 2 896 -308338892 32 896 -308338896 2 896 -308338900 32 896 -308338904 2 896 -308338908 32 896 -308338912 2 896 -308338916 32 896 -308338920 2 896 -308338924 32 896 -308338928 2 896 -308338932 32 896 -308338936 2 896 -308338940 32 896 -308338944 2 896 -308338948 32 896 -308338952 2 896 -308338956 32 896 -308338960 2 896 -308338964 32 896 -308338968 2 896 -308338972 32 896 -308338976 2 896 -308338980 32 896 -308338984 2 896 -308338988 32 896 -308338992 2 896 -308338996 32 896 -308339000 2 896 -308339004 32 896 -308339008 2 896 -308339012 32 896 -308339016 2 896 -308339020 32 896 -308339024 2 896 -308339028 32 896 -308339032 2 896 -308339036 32 896 -308339040 2 896 -308339044 32 896 -308339048 2 896 -308339052 32 896 -308339056 2 896 -308339060 32 896 -308339064 2 896 -308339068 32 896 -308339072 2 896 -308339076 32 896 -308339080 2 896 -308339084 32 896 -308339088 2 896 -308339092 32 896 -308339096 2 896 -308339100 32 896 -308339104 2 896 -308339108 32 896 -308339112 2 896 -308339116 32 896 -308339120 2 896 -308339124 32 896 -308339128 2 896 -308342788 32 896 -308342792 2 896 -308342796 32 896 -308342800 2 896 -308342804 32 896 -308342808 2 896 -308342812 32 896 -308342816 2 896 -308342820 32 896 -308342824 2 896 -308342828 32 896 -308342832 2 896 -308342836 32 896 -308342840 2 896 -308342844 32 896 -308342848 2 896 -308342852 32 896 -308342856 2 896 -308342860 32 896 -308342864 2 896 -308342868 32 896 -308342872 2 896 -308342876 32 896 -308342880 2 896 -308342884 32 896 -308342888 2 896 -308342892 32 896 -308342896 2 896 -308342900 32 896 -308342904 2 896 -308342908 32 896 -308342912 2 896 -308342916 32 896 -308342920 2 896 -308342924 32 896 -308342928 2 896 -308342932 32 896 -308342936 2 896 -308342940 32 896 -308342944 2 896 -308342948 32 896 -308342952 2 896 -308342956 32 896 -308342960 2 896 -308342964 32 896 -308342968 2 896 -308342972 32 896 -308342976 2 896 -308342980 32 896 -308342984 2 896 -308342988 32 896 -308342992 2 896 -308342996 32 896 -308343000 2 896 -308343004 32 896 -308343008 2 896 -308343012 32 896 -308343016 2 896 -308343020 32 896 -308343024 2 896 -308343028 32 896 -308343032 2 896 -308343036 32 896 -308343040 2 896 -308343044 32 896 -308343048 2 896 -308343052 32 896 -308343056 2 896 -308343060 32 896 -308343064 2 896 -308343068 32 896 -308343072 2 896 -308343076 32 896 -308343080 2 896 -308343084 32 896 -308343088 2 896 -308343092 32 896 -308343096 2 896 -308343100 32 896 -308343104 2 896 -308343108 32 896 -308343112 2 896 -308343116 32 896 -308343120 2 896 -308343124 32 896 -308343128 2 896 -308343132 32 896 -308343136 2 896 -308343140 32 896 -308343144 2 896 -308343148 32 896 -308343152 2 896 -308343156 32 896 -308343160 2 896 -308343164 32 896 -308343168 2 896 -308343172 32 896 -308343176 2 896 -308343180 32 896 -308343184 2 896 -308343188 32 896 -308343192 2 896 -308343196 32 896 -308343200 2 896 -308343204 32 896 -308343208 2 896 -308343212 32 896 -308343216 2 896 -308343220 32 896 -308343224 2 896 -308346884 32 896 -308346888 2 896 -308346892 32 896 -308346896 2 896 -308346900 32 896 -308346904 2 896 -308346908 32 896 -308346912 2 896 -308346916 32 896 -308346920 2 896 -308346924 32 896 -308346928 2 896 -308346932 32 896 -308346936 2 896 -308346940 32 896 -308346944 2 896 -308346948 32 896 -308346952 2 896 -308346956 32 896 -308346960 2 896 -308346964 32 896 -308346968 2 896 -308346972 32 896 -308346976 2 896 -308346980 32 896 -308346984 2 896 -308346988 32 896 -308346992 2 896 -308346996 32 896 -308347000 2 896 -308347004 32 896 -308347008 2 896 -308347012 32 896 -308347016 2 896 -308347020 32 896 -308347024 2 896 -308347028 32 896 -308347032 2 896 -308347036 32 896 -308347040 2 896 -308347044 32 896 -308347048 2 896 -308347052 32 896 -308347056 2 896 -308347060 32 896 -308347064 2 896 -308347068 32 896 -308347072 2 896 -308347076 32 896 -308347080 2 896 -308347084 32 896 -308347088 2 896 -308347092 32 896 -308347096 2 896 -308347100 32 896 -308347104 2 896 -308347108 32 896 -308347112 2 896 -308347116 32 896 -308347120 2 896 -308347124 32 896 -308347128 2 896 -308347132 32 896 -308347136 2 896 -308347140 32 896 -308347144 2 896 -308347148 32 896 -308347152 2 896 -308347156 32 896 -308347160 2 896 -308347164 32 896 -308347168 2 896 -308347172 32 896 -308347176 2 896 -308347180 32 896 -308347184 2 896 -308347188 32 896 -308347192 2 896 -308347196 32 896 -308347200 2 896 -308347204 32 896 -308347208 2 896 -308347212 32 896 -308347216 2 896 -308347220 32 896 -308347224 2 896 -308347228 32 896 -308347232 2 896 -308347236 32 896 -308347240 2 896 -308347244 32 896 -308347248 2 896 -308347252 32 896 -308347256 2 896 -308347260 32 896 -308347264 2 896 -308347268 32 896 -308347272 2 896 -308347276 32 896 -308347280 2 896 -308347284 32 896 -308347288 2 896 -308347292 32 896 -308347296 2 896 -308347300 32 896 -308347304 2 896 -308347308 32 896 -308347312 2 896 -308347316 32 896 -308347320 2 896 -308350980 32 896 -308350984 2 896 -308350988 32 896 -308350992 2 896 -308350996 32 896 -308351000 2 896 -308351004 32 896 -308351008 2 896 -308351012 32 896 -308351016 2 896 -308351020 32 896 -308351024 2 896 -308351028 32 896 -308351032 2 896 -308351036 32 896 -308351040 2 896 -308351044 32 896 -308351048 2 896 -308351052 32 896 -308351056 2 896 -308351060 32 896 -308351064 2 896 -308351068 32 896 -308351072 2 896 -308351076 32 896 -308351080 2 896 -308351084 32 896 -308351088 2 896 -308351092 32 896 -308351096 2 896 -308351100 32 896 -308351104 2 896 -308351108 32 896 -308351112 2 896 -308351116 32 896 -308351120 2 896 -308351124 32 896 -308351128 2 896 -308351132 32 896 -308351136 2 896 -308351140 32 896 -308351144 2 896 -308351148 32 896 -308351152 2 896 -308351156 32 896 -308351160 2 896 -308351164 32 896 -308351168 2 896 -308351172 32 896 -308351176 2 896 -308351180 32 896 -308351184 2 896 -308351188 32 896 -308351192 2 896 -308351196 32 896 -308351200 2 896 -308351204 32 896 -308351208 2 896 -308351212 32 896 -308351216 2 896 -308351220 32 896 -308351224 2 896 -308351228 32 896 -308351232 2 896 -308351236 32 896 -308351240 2 896 -308351244 32 896 -308351248 2 896 -308351252 32 896 -308351256 2 896 -308351260 32 896 -308351264 2 896 -308351268 32 896 -308351272 2 896 -308351276 32 896 -308351280 2 896 -308351284 32 896 -308351288 2 896 -308351292 32 896 -308351296 2 896 -308351300 32 896 -308351304 2 896 -308351308 32 896 -308351312 2 896 -308351316 32 896 -308351320 2 896 -308351324 32 896 -308351328 2 896 -308351332 32 896 -308351336 2 896 -308351340 32 896 -308351344 2 896 -308351348 32 896 -308351352 2 896 -308351356 32 896 -308351360 2 896 -308351364 32 896 -308351368 2 896 -308351372 32 896 -308351376 2 896 -308351380 32 896 -308351384 2 896 -308351388 32 896 -308351392 2 896 -308351396 32 896 -308351400 2 896 -308351404 32 896 -308351408 2 896 -308351412 32 896 -308351416 2 896 -308355076 32 896 -308355080 2 896 -308355084 32 896 -308355088 2 896 -308355092 32 896 -308355096 2 896 -308355100 32 896 -308355104 2 896 -308355108 32 896 -308355112 2 896 -308355116 32 896 -308355120 2 896 -308355124 32 896 -308355128 2 896 -308355132 32 896 -308355136 2 896 -308355140 32 896 -308355144 2 896 -308355148 32 896 -308355152 2 896 -308355156 32 896 -308355160 2 896 -308355164 32 896 -308355168 2 896 -308355172 32 896 -308355176 2 896 -308355180 32 896 -308355184 2 896 -308355188 32 896 -308355192 2 896 -308355196 32 896 -308355200 2 896 -308355204 32 896 -308355208 2 896 -308355212 32 896 -308355216 2 896 -308355220 32 896 -308355224 2 896 -308355228 32 896 -308355232 2 896 -308355236 32 896 -308355240 2 896 -308355244 32 896 -308355248 2 896 -308355252 32 896 -308355256 2 896 -308355260 32 896 -308355264 2 896 -308355268 32 896 -308355272 2 896 -308355276 32 896 -308355280 2 896 -308355284 32 896 -308355288 2 896 -308355292 32 896 -308355296 2 896 -308355300 32 896 -308355304 2 896 -308355308 32 896 -308355312 2 896 -308355316 32 896 -308355320 2 896 -308355324 32 896 -308355328 2 896 -308355332 32 896 -308355336 2 896 -308355340 32 896 -308355344 2 896 -308355348 32 896 -308355352 2 896 -308355356 32 896 -308355360 2 896 -308355364 32 896 -308355368 2 896 -308355372 32 896 -308355376 2 896 -308355380 32 896 -308355384 2 896 -308355388 32 896 -308355392 2 896 -308355396 32 896 -308355400 2 896 -308355404 32 896 -308355408 2 896 -308355412 32 896 -308355416 2 896 -308355420 32 896 -308355424 2 896 -308355428 32 896 -308355432 2 896 -308355436 32 896 -308355440 2 896 -308355444 32 896 -308355448 2 896 -308355452 32 896 -308355456 2 896 -308355460 32 896 -308355464 2 896 -308355468 32 896 -308355472 2 896 -308355476 32 896 -308355480 2 896 -308355484 32 896 -308355488 2 896 -308355492 32 896 -308355496 2 896 -308355500 32 896 -308355504 2 896 -308355508 32 896 -308355512 2 896 -308359172 32 896 -308359176 2 896 -308359180 32 896 -308359184 2 896 -308359188 32 896 -308359192 2 896 -308359196 32 896 -308359200 2 896 -308359204 32 896 -308359208 2 896 -308359212 32 896 -308359216 2 896 -308359220 32 896 -308359224 2 896 -308359228 32 896 -308359232 2 896 -308359236 32 896 -308359240 2 896 -308359244 32 896 -308359248 2 896 -308359252 32 896 -308359256 2 896 -308359260 32 896 -308359264 2 896 -308359268 32 896 -308359272 2 896 -308359276 32 896 -308359280 2 896 -308359284 32 896 -308359288 2 896 -308359292 32 896 -308359296 2 896 -308359300 32 896 -308359304 2 896 -308359308 32 896 -308359312 2 896 -308359316 32 896 -308359320 2 896 -308359324 32 896 -308359328 2 896 -308359332 32 896 -308359336 2 896 -308359340 32 896 -308359344 2 896 -308359348 32 896 -308359352 2 896 -308359356 32 896 -308359360 2 896 -308359364 32 896 -308359368 2 896 -308359372 32 896 -308359376 2 896 -308359380 32 896 -308359384 2 896 -308359388 32 896 -308359392 2 896 -308359396 32 896 -308359400 2 896 -308359404 32 896 -308359408 2 896 -308359412 32 896 -308359416 2 896 -308359420 32 896 -308359424 2 896 -308359428 32 896 -308359432 2 896 -308359436 32 896 -308359440 2 896 -308359444 32 896 -308359448 2 896 -308359452 32 896 -308359456 2 896 -308359460 32 896 -308359464 2 896 -308359468 32 896 -308359472 2 896 -308359476 32 896 -308359480 2 896 -308359484 32 896 -308359488 2 896 -308359492 32 896 -308359496 2 896 -308359500 32 896 -308359504 2 896 -308359508 32 896 -308359512 2 896 -308359516 32 896 -308359520 2 896 -308359524 32 896 -308359528 2 896 -308359532 32 896 -308359536 2 896 -308359540 32 896 -308359544 2 896 -308359548 32 896 -308359552 2 896 -308359556 32 896 -308359560 2 896 -308359564 32 896 -308359568 2 896 -308359572 32 896 -308359576 2 896 -308359580 32 896 -308359584 2 896 -308359588 32 896 -308359592 2 896 -308359596 32 896 -308359600 2 896 -308359604 32 896 -308359608 2 896 -308363268 32 896 -308363272 2 896 -308363276 32 896 -308363280 2 896 -308363284 32 896 -308363288 2 896 -308363292 32 896 -308363296 2 896 -308363300 32 896 -308363304 2 896 -308363308 32 896 -308363312 2 896 -308363316 32 896 -308363320 2 896 -308363324 32 896 -308363328 2 896 -308363332 32 896 -308363336 2 896 -308363340 32 896 -308363344 2 896 -308363348 32 896 -308363352 2 896 -308363356 32 896 -308363360 2 896 -308363364 32 896 -308363368 2 896 -308363372 32 896 -308363376 2 896 -308363380 32 896 -308363384 2 896 -308363388 32 896 -308363392 2 896 -308363396 32 896 -308363400 2 896 -308363404 32 896 -308363408 2 896 -308363412 32 896 -308363416 2 896 -308363420 32 896 -308363424 2 896 -308363428 32 896 -308363432 2 896 -308363436 32 896 -308363440 2 896 -308363444 32 896 -308363448 2 896 -308363452 32 896 -308363456 2 896 -308363460 32 896 -308363464 2 896 -308363468 32 896 -308363472 2 896 -308363476 32 896 -308363480 2 896 -308363484 32 896 -308363488 2 896 -308363492 32 896 -308363496 2 896 -308363500 32 896 -308363504 2 896 -308363508 32 896 -308363512 2 896 -308363516 32 896 -308363520 2 896 -308363524 32 896 -308363528 2 896 -308363532 32 896 -308363536 2 896 -308363540 32 896 -308363544 2 896 -308363548 32 896 -308363552 2 896 -308363556 32 896 -308363560 2 896 -308363564 32 896 -308363568 2 896 -308363572 32 896 -308363576 2 896 -308363580 32 896 -308363584 2 896 -308363588 32 896 -308363592 2 896 -308363596 32 896 -308363600 2 896 -308363604 32 896 -308363608 2 896 -308363612 32 896 -308363616 2 896 -308363620 32 896 -308363624 2 896 -308363628 32 896 -308363632 2 896 -308363636 32 896 -308363640 2 896 -308363644 32 896 -308363648 2 896 -308363652 32 896 -308363656 2 896 -308363660 32 896 -308363664 2 896 -308363668 32 896 -308363672 2 896 -308363676 32 896 -308363680 2 896 -308363684 32 896 -308363688 2 896 -308363692 32 896 -308363696 2 896 -308363700 32 896 -308363704 2 896 -308367364 32 896 -308367368 2 896 -308367372 32 896 -308367376 2 896 -308367380 32 896 -308367384 2 896 -308367388 32 896 -308367392 2 896 -308367396 32 896 -308367400 2 896 -308367404 32 896 -308367408 2 896 -308367412 32 896 -308367416 2 896 -308367420 32 896 -308367424 2 896 -308367428 32 896 -308367432 2 896 -308367436 32 896 -308367440 2 896 -308367444 32 896 -308367448 2 896 -308367452 32 896 -308367456 2 896 -308367460 32 896 -308367464 2 896 -308367468 32 896 -308367472 2 896 -308367476 32 896 -308367480 2 896 -308367484 32 896 -308367488 2 896 -308367492 32 896 -308367496 2 896 -308367500 32 896 -308367504 2 896 -308367508 32 896 -308367512 2 896 -308367516 32 896 -308367520 2 896 -308367524 32 896 -308367528 2 896 -308367532 32 896 -308367536 2 896 -308367540 32 896 -308367544 2 896 -308367548 32 896 -308367552 2 896 -308367556 32 896 -308367560 2 896 -308367564 32 896 -308367568 2 896 -308367572 32 896 -308367576 2 896 -308367580 32 896 -308367584 2 896 -308367588 32 896 -308367592 2 896 -308367596 32 896 -308367600 2 896 -308367604 32 896 -308367608 2 896 -308367612 32 896 -308367616 2 896 -308367620 32 896 -308367624 2 896 -308367628 32 896 -308367632 2 896 -308367636 32 896 -308367640 2 896 -308367644 32 896 -308367648 2 896 -308367652 32 896 -308367656 2 896 -308367660 32 896 -308367664 2 896 -308367668 32 896 -308367672 2 896 -308367676 32 896 -308367680 2 896 -308367684 32 896 -308367688 2 896 -308367692 32 896 -308367696 2 896 -308367700 32 896 -308367704 2 896 -308367708 32 896 -308367712 2 896 -308367716 32 896 -308367720 2 896 -308367724 32 896 -308367728 2 896 -308367732 32 896 -308367736 2 896 -308367740 32 896 -308367744 2 896 -308367748 32 896 -308367752 2 896 -308367756 32 896 -308367760 2 896 -308367764 32 896 -308367768 2 896 -308367772 32 896 -308367776 2 896 -308367780 32 896 -308367784 2 896 -308367788 32 896 -308367792 2 896 -308367796 32 896 -308367800 2 896 -308371460 32 896 -308371464 2 896 -308371468 32 896 -308371472 2 896 -308371476 32 896 -308371480 2 896 -308371484 32 896 -308371488 2 896 -308371492 32 896 -308371496 2 896 -308371500 32 896 -308371504 2 896 -308371508 32 896 -308371512 2 896 -308371516 32 896 -308371520 2 896 -308371524 32 896 -308371528 2 896 -308371532 32 896 -308371536 2 896 -308371540 32 896 -308371544 2 896 -308371548 32 896 -308371552 2 896 -308371556 32 896 -308371560 2 896 -308371564 32 896 -308371568 2 896 -308371572 32 896 -308371576 2 896 -308371580 32 896 -308371584 2 896 -308371588 32 896 -308371592 2 896 -308371596 32 896 -308371600 2 896 -308371604 32 896 -308371608 2 896 -308371612 32 896 -308371616 2 896 -308371620 32 896 -308371624 2 896 -308371628 32 896 -308371632 2 896 -308371636 32 896 -308371640 2 896 -308371644 32 896 -308371648 2 896 -308371652 32 896 -308371656 2 896 -308371660 32 896 -308371664 2 896 -308371668 32 896 -308371672 2 896 -308371676 32 896 -308371680 2 896 -308371684 32 896 -308371688 2 896 -308371692 32 896 -308371696 2 896 -308371700 32 896 -308371704 2 896 -308371708 32 896 -308371712 2 896 -308371716 32 896 -308371720 2 896 -308371724 32 896 -308371728 2 896 -308371732 32 896 -308371736 2 896 -308371740 32 896 -308371744 2 896 -308371748 32 896 -308371752 2 896 -308371756 32 896 -308371760 2 896 -308371764 32 896 -308371768 2 896 -308371772 32 896 -308371776 2 896 -308371780 32 896 -308371784 2 896 -308371788 32 896 -308371792 2 896 -308371796 32 896 -308371800 2 896 -308371804 32 896 -308371808 2 896 -308371812 32 896 -308371816 2 896 -308371820 32 896 -308371824 2 896 -308371828 32 896 -308371832 2 896 -308371836 32 896 -308371840 2 896 -308371844 32 896 -308371848 2 896 -308371852 32 896 -308371856 2 896 -308371860 32 896 -308371864 2 896 -308371868 32 896 -308371872 2 896 -308371876 32 896 -308371880 2 896 -308371884 32 896 -308371888 2 896 -308371892 32 896 -308371896 2 896 -308375556 32 896 -308375560 2 896 -308375564 32 896 -308375568 2 896 -308375572 32 896 -308375576 2 896 -308375580 32 896 -308375584 2 896 -308375588 32 896 -308375592 2 896 -308375596 32 896 -308375600 2 896 -308375604 32 896 -308375608 2 896 -308375612 32 896 -308375616 2 896 -308375620 32 896 -308375624 2 896 -308375628 32 896 -308375632 2 896 -308375636 32 896 -308375640 2 896 -308375644 32 896 -308375648 2 896 -308375652 32 896 -308375656 2 896 -308375660 32 896 -308375664 2 896 -308375668 32 896 -308375672 2 896 -308375676 32 896 -308375680 2 896 -308375684 32 896 -308375688 2 896 -308375692 32 896 -308375696 2 896 -308375700 32 896 -308375704 2 896 -308375708 32 896 -308375712 2 896 -308375716 32 896 -308375720 2 896 -308375724 32 896 -308375728 2 896 -308375732 32 896 -308375736 2 896 -308375740 32 896 -308375744 2 896 -308375748 32 896 -308375752 2 896 -308375756 32 896 -308375760 2 896 -308375764 32 896 -308375768 2 896 -308375772 32 896 -308375776 2 896 -308375780 32 896 -308375784 2 896 -308375788 32 896 -308375792 2 896 -308375796 32 896 -308375800 2 896 -308375804 32 896 -308375808 2 896 -308375812 32 896 -308375816 2 896 -308375820 32 896 -308375824 2 896 -308375828 32 896 -308375832 2 896 -308375836 32 896 -308375840 2 896 -308375844 32 896 -308375848 2 896 -308375852 32 896 -308375856 2 896 -308375860 32 896 -308375864 2 896 -308375868 32 896 -308375872 2 896 -308375876 32 896 -308375880 2 896 -308375884 32 896 -308375888 2 896 -308375892 32 896 -308375896 2 896 -308375900 32 896 -308375904 2 896 -308375908 32 896 -308375912 2 896 -308375916 32 896 -308375920 2 896 -308375924 32 896 -308375928 2 896 -308375932 32 896 -308375936 2 896 -308375940 32 896 -308375944 2 896 -308375948 32 896 -308375952 2 896 -308375956 32 896 -308375960 2 896 -308375964 32 896 -308375968 2 896 -308375972 32 896 -308375976 2 896 -308375980 32 896 -308375984 2 896 -308375988 32 896 -308375992 2 896 -308379652 32 896 -308379656 2 896 -308379660 32 896 -308379664 2 896 -308379668 32 896 -308379672 2 896 -308379676 32 896 -308379680 2 896 -308379684 32 896 -308379688 2 896 -308379692 32 896 -308379696 2 896 -308379700 32 896 -308379704 2 896 -308379708 32 896 -308379712 2 896 -308379716 32 896 -308379720 2 896 -308379724 32 896 -308379728 2 896 -308379732 32 896 -308379736 2 896 -308379740 32 896 -308379744 2 896 -308379748 32 896 -308379752 2 896 -308379756 32 896 -308379760 2 896 -308379764 32 896 -308379768 2 896 -308379772 32 896 -308379776 2 896 -308379780 32 896 -308379784 2 896 -308379788 32 896 -308379792 2 896 -308379796 32 896 -308379800 2 896 -308379804 32 896 -308379808 2 896 -308379812 32 896 -308379816 2 896 -308379820 32 896 -308379824 2 896 -308379828 32 896 -308379832 2 896 -308379836 32 896 -308379840 2 896 -308379844 32 896 -308379848 2 896 -308379852 32 896 -308379856 2 896 -308379860 32 896 -308379864 2 896 -308379868 32 896 -308379872 2 896 -308379876 32 896 -308379880 2 896 -308379884 32 896 -308379888 2 896 -308379892 32 896 -308379896 2 896 -308379900 32 896 -308379904 2 896 -308379908 32 896 -308379912 2 896 -308379916 32 896 -308379920 2 896 -308379924 32 896 -308379928 2 896 -308379932 32 896 -308379936 2 896 -308379940 32 896 -308379944 2 896 -308379948 32 896 -308379952 2 896 -308379956 32 896 -308379960 2 896 -308379964 32 896 -308379968 2 896 -308379972 32 896 -308379976 2 896 -308379980 32 896 -308379984 2 896 -308379988 32 896 -308379992 2 896 -308379996 32 896 -308380000 2 896 -308380004 32 896 -308380008 2 896 -308380012 32 896 -308380016 2 896 -308380020 32 896 -308380024 2 896 -308380028 32 896 -308380032 2 896 -308380036 32 896 -308380040 2 896 -308380044 32 896 -308380048 2 896 -308380052 32 896 -308380056 2 896 -308380060 32 896 -308380064 2 896 -308380068 32 896 -308380072 2 896 -308380076 32 896 -308380080 2 896 -308380084 32 896 -308380088 2 896 -309334020 32 896 -309334024 2 896 -309334028 32 896 -309334032 2 896 -309334036 32 896 -309334040 2 896 -309334044 32 896 -309334048 2 896 -309334052 32 896 -309334056 2 896 -309334060 32 896 -309334064 2 896 -309334068 32 896 -309334072 2 896 -309334076 32 896 -309334080 2 896 -309334084 32 896 -309334088 2 896 -309334092 32 896 -309334096 2 896 -309334100 32 896 -309334104 2 896 -309334108 32 896 -309334112 2 896 -309334116 32 896 -309334120 2 896 -309334124 32 896 -309334128 2 896 -309334132 32 896 -309334136 2 896 -309334140 32 896 -309334144 2 896 -309334148 32 896 -309334152 2 896 -309334156 32 896 -309334160 2 896 -309334164 32 896 -309334168 2 896 -309334172 32 896 -309334176 2 896 -309334180 32 896 -309334184 2 896 -309334188 32 896 -309334192 2 896 -309334196 32 896 -309334200 2 896 -309334204 32 896 -309334208 2 896 -309334212 32 896 -309334216 2 896 -309334220 32 896 -309334224 2 896 -309334228 32 896 -309334232 2 896 -309334236 32 896 -309334240 2 896 -309334244 32 896 -309334248 2 896 -309334252 32 896 -309334256 2 896 -309334260 32 896 -309334264 2 896 -309334268 32 896 -309334272 2 896 -309334276 32 896 -309334280 2 896 -309334284 32 896 -309334288 2 896 -309334292 32 896 -309334296 2 896 -309334300 32 896 -309334304 2 896 -309334308 32 896 -309334312 2 896 -309334316 32 896 -309334320 2 896 -309334324 32 896 -309334328 2 896 -309334332 32 896 -309334336 2 896 -309334340 32 896 -309334344 2 896 -309334348 32 896 -309334352 2 896 -309334356 32 896 -309334360 2 896 -309334364 32 896 -309334368 2 896 -309334372 32 896 -309334376 2 896 -309334380 32 896 -309334384 2 896 -309334388 32 896 -309334392 2 896 -309334396 32 896 -309334400 2 896 -309334404 32 896 -309334408 2 896 -309334412 32 896 -309334416 2 896 -309334420 32 896 -309334424 2 896 -309334428 32 896 -309334432 2 896 -309334436 32 896 -309334440 2 896 -309334444 32 896 -309334448 2 896 -309338116 32 896 -309338120 2 896 -309338124 32 896 -309338128 2 896 -309338132 32 896 -309338136 2 896 -309338140 32 896 -309338144 2 896 -309338148 32 896 -309338152 2 896 -309338156 32 896 -309338160 2 896 -309338164 32 896 -309338168 2 896 -309338172 32 896 -309338176 2 896 -309338180 32 896 -309338184 2 896 -309338188 32 896 -309338192 2 896 -309338196 32 896 -309338200 2 896 -309338204 32 896 -309338208 2 896 -309338212 32 896 -309338216 2 896 -309338220 32 896 -309338224 2 896 -309338228 32 896 -309338232 2 896 -309338236 32 896 -309338240 2 896 -309338244 32 896 -309338248 2 896 -309338252 32 896 -309338256 2 896 -309338260 32 896 -309338264 2 896 -309338268 32 896 -309338272 2 896 -309338276 32 896 -309338280 2 896 -309338284 32 896 -309338288 2 896 -309338292 32 896 -309338296 2 896 -309338300 32 896 -309338304 2 896 -309338308 32 896 -309338312 2 896 -309338316 32 896 -309338320 2 896 -309338324 32 896 -309338328 2 896 -309338332 32 896 -309338336 2 896 -309338340 32 896 -309338344 2 896 -309338348 32 896 -309338352 2 896 -309338356 32 896 -309338360 2 896 -309338364 32 896 -309338368 2 896 -309338372 32 896 -309338376 2 896 -309338380 32 896 -309338384 2 896 -309338388 32 896 -309338392 2 896 -309338396 32 896 -309338400 2 896 -309338404 32 896 -309338408 2 896 -309338412 32 896 -309338416 2 896 -309338420 32 896 -309338424 2 896 -309338428 32 896 -309338432 2 896 -309338436 32 896 -309338440 2 896 -309338444 32 896 -309338448 2 896 -309338452 32 896 -309338456 2 896 -309338460 32 896 -309338464 2 896 -309338468 32 896 -309338472 2 896 -309338476 32 896 -309338480 2 896 -309338484 32 896 -309338488 2 896 -309338492 32 896 -309338496 2 896 -309338500 32 896 -309338504 2 896 -309338508 32 896 -309338512 2 896 -309338516 32 896 -309338520 2 896 -309338524 32 896 -309338528 2 896 -309338532 32 896 -309338536 2 896 -309338540 32 896 -309338544 2 896 -309342212 32 896 -309342216 2 896 -309342220 32 896 -309342224 2 896 -309342228 32 896 -309342232 2 896 -309342236 32 896 -309342240 2 896 -309342244 32 896 -309342248 2 896 -309342252 32 896 -309342256 2 896 -309342260 32 896 -309342264 2 896 -309342268 32 896 -309342272 2 896 -309342276 32 896 -309342280 2 896 -309342284 32 896 -309342288 2 896 -309342292 32 896 -309342296 2 896 -309342300 32 896 -309342304 2 896 -309342308 32 896 -309342312 2 896 -309342316 32 896 -309342320 2 896 -309342324 32 896 -309342328 2 896 -309342332 32 896 -309342336 2 896 -309342340 32 896 -309342344 2 896 -309342348 32 896 -309342352 2 896 -309342356 32 896 -309342360 2 896 -309342364 32 896 -309342368 2 896 -309342372 32 896 -309342376 2 896 -309342380 32 896 -309342384 2 896 -309342388 32 896 -309342392 2 896 -309342396 32 896 -309342400 2 896 -309342404 32 896 -309342408 2 896 -309342412 32 896 -309342416 2 896 -309342420 32 896 -309342424 2 896 -309342428 32 896 -309342432 2 896 -309342436 32 896 -309342440 2 896 -309342444 32 896 -309342448 2 896 -309342452 32 896 -309342456 2 896 -309342460 32 896 -309342464 2 896 -309342468 32 896 -309342472 2 896 -309342476 32 896 -309342480 2 896 -309342484 32 896 -309342488 2 896 -309342492 32 896 -309342496 2 896 -309342500 32 896 -309342504 2 896 -309342508 32 896 -309342512 2 896 -309342516 32 896 -309342520 2 896 -309342524 32 896 -309342528 2 896 -309342532 32 896 -309342536 2 896 -309342540 32 896 -309342544 2 896 -309342548 32 896 -309342552 2 896 -309342556 32 896 -309342560 2 896 -309342564 32 896 -309342568 2 896 -309342572 32 896 -309342576 2 896 -309342580 32 896 -309342584 2 896 -309342588 32 896 -309342592 2 896 -309342596 32 896 -309342600 2 896 -309342604 32 896 -309342608 2 896 -309342612 32 896 -309342616 2 896 -309342620 32 896 -309342624 2 896 -309342628 32 896 -309342632 2 896 -309342636 32 896 -309342640 2 896 -309346308 32 896 -309346312 2 896 -309346316 32 896 -309346320 2 896 -309346324 32 896 -309346328 2 896 -309346332 32 896 -309346336 2 896 -309346340 32 896 -309346344 2 896 -309346348 32 896 -309346352 2 896 -309346356 32 896 -309346360 2 896 -309346364 32 896 -309346368 2 896 -309346372 32 896 -309346376 2 896 -309346380 32 896 -309346384 2 896 -309346388 32 896 -309346392 2 896 -309346396 32 896 -309346400 2 896 -309346404 32 896 -309346408 2 896 -309346412 32 896 -309346416 2 896 -309346420 32 896 -309346424 2 896 -309346428 32 896 -309346432 2 896 -309346436 32 896 -309346440 2 896 -309346444 32 896 -309346448 2 896 -309346452 32 896 -309346456 2 896 -309346460 32 896 -309346464 2 896 -309346468 32 896 -309346472 2 896 -309346476 32 896 -309346480 2 896 -309346484 32 896 -309346488 2 896 -309346492 32 896 -309346496 2 896 -309346500 32 896 -309346504 2 896 -309346508 32 896 -309346512 2 896 -309346516 32 896 -309346520 2 896 -309346524 32 896 -309346528 2 896 -309346532 32 896 -309346536 2 896 -309346540 32 896 -309346544 2 896 -309346548 32 896 -309346552 2 896 -309346556 32 896 -309346560 2 896 -309346564 32 896 -309346568 2 896 -309346572 32 896 -309346576 2 896 -309346580 32 896 -309346584 2 896 -309346588 32 896 -309346592 2 896 -309346596 32 896 -309346600 2 896 -309346604 32 896 -309346608 2 896 -309346612 32 896 -309346616 2 896 -309346620 32 896 -309346624 2 896 -309346628 32 896 -309346632 2 896 -309346636 32 896 -309346640 2 896 -309346644 32 896 -309346648 2 896 -309346652 32 896 -309346656 2 896 -309346660 32 896 -309346664 2 896 -309346668 32 896 -309346672 2 896 -309346676 32 896 -309346680 2 896 -309346684 32 896 -309346688 2 896 -309346692 32 896 -309346696 2 896 -309346700 32 896 -309346704 2 896 -309346708 32 896 -309346712 2 896 -309346716 32 896 -309346720 2 896 -309346724 32 896 -309346728 2 896 -309346732 32 896 -309346736 2 896 -309350404 32 896 -309350408 2 896 -309350412 32 896 -309350416 2 896 -309350420 32 896 -309350424 2 896 -309350428 32 896 -309350432 2 896 -309350436 32 896 -309350440 2 896 -309350444 32 896 -309350448 2 896 -309350452 32 896 -309350456 2 896 -309350460 32 896 -309350464 2 896 -309350468 32 896 -309350472 2 896 -309350476 32 896 -309350480 2 896 -309350484 32 896 -309350488 2 896 -309350492 32 896 -309350496 2 896 -309350500 32 896 -309350504 2 896 -309350508 32 896 -309350512 2 896 -309350516 32 896 -309350520 2 896 -309350524 32 896 -309350528 2 896 -309350532 32 896 -309350536 2 896 -309350540 32 896 -309350544 2 896 -309350548 32 896 -309350552 2 896 -309350556 32 896 -309350560 2 896 -309350564 32 896 -309350568 2 896 -309350572 32 896 -309350576 2 896 -309350580 32 896 -309350584 2 896 -309350588 32 896 -309350592 2 896 -309350596 32 896 -309350600 2 896 -309350604 32 896 -309350608 2 896 -309350612 32 896 -309350616 2 896 -309350620 32 896 -309350624 2 896 -309350628 32 896 -309350632 2 896 -309350636 32 896 -309350640 2 896 -309350644 32 896 -309350648 2 896 -309350652 32 896 -309350656 2 896 -309350660 32 896 -309350664 2 896 -309350668 32 896 -309350672 2 896 -309350676 32 896 -309350680 2 896 -309350684 32 896 -309350688 2 896 -309350692 32 896 -309350696 2 896 -309350700 32 896 -309350704 2 896 -309350708 32 896 -309350712 2 896 -309350716 32 896 -309350720 2 896 -309350724 32 896 -309350728 2 896 -309350732 32 896 -309350736 2 896 -309350740 32 896 -309350744 2 896 -309350748 32 896 -309350752 2 896 -309350756 32 896 -309350760 2 896 -309350764 32 896 -309350768 2 896 -309350772 32 896 -309350776 2 896 -309350780 32 896 -309350784 2 896 -309350788 32 896 -309350792 2 896 -309350796 32 896 -309350800 2 896 -309350804 32 896 -309350808 2 896 -309350812 32 896 -309350816 2 896 -309350820 32 896 -309350824 2 896 -309350828 32 896 -309350832 2 896 -309354500 32 896 -309354504 2 896 -309354508 32 896 -309354512 2 896 -309354516 32 896 -309354520 2 896 -309354524 32 896 -309354528 2 896 -309354532 32 896 -309354536 2 896 -309354540 32 896 -309354544 2 896 -309354548 32 896 -309354552 2 896 -309354556 32 896 -309354560 2 896 -309354564 32 896 -309354568 2 896 -309354572 32 896 -309354576 2 896 -309354580 32 896 -309354584 2 896 -309354588 32 896 -309354592 2 896 -309354596 32 896 -309354600 2 896 -309354604 32 896 -309354608 2 896 -309354612 32 896 -309354616 2 896 -309354620 32 896 -309354624 2 896 -309354628 32 896 -309354632 2 896 -309354636 32 896 -309354640 2 896 -309354644 32 896 -309354648 2 896 -309354652 32 896 -309354656 2 896 -309354660 32 896 -309354664 2 896 -309354668 32 896 -309354672 2 896 -309354676 32 896 -309354680 2 896 -309354684 32 896 -309354688 2 896 -309354692 32 896 -309354696 2 896 -309354700 32 896 -309354704 2 896 -309354708 32 896 -309354712 2 896 -309354716 32 896 -309354720 2 896 -309354724 32 896 -309354728 2 896 -309354732 32 896 -309354736 2 896 -309354740 32 896 -309354744 2 896 -309354748 32 896 -309354752 2 896 -309354756 32 896 -309354760 2 896 -309354764 32 896 -309354768 2 896 -309354772 32 896 -309354776 2 896 -309354780 32 896 -309354784 2 896 -309354788 32 896 -309354792 2 896 -309354796 32 896 -309354800 2 896 -309354804 32 896 -309354808 2 896 -309354812 32 896 -309354816 2 896 -309354820 32 896 -309354824 2 896 -309354828 32 896 -309354832 2 896 -309354836 32 896 -309354840 2 896 -309354844 32 896 -309354848 2 896 -309354852 32 896 -309354856 2 896 -309354860 32 896 -309354864 2 896 -309354868 32 896 -309354872 2 896 -309354876 32 896 -309354880 2 896 -309354884 32 896 -309354888 2 896 -309354892 32 896 -309354896 2 896 -309354900 32 896 -309354904 2 896 -309354908 32 896 -309354912 2 896 -309354916 32 896 -309354920 2 896 -309354924 32 896 -309354928 2 896 -309358596 32 896 -309358600 2 896 -309358604 32 896 -309358608 2 896 -309358612 32 896 -309358616 2 896 -309358620 32 896 -309358624 2 896 -309358628 32 896 -309358632 2 896 -309358636 32 896 -309358640 2 896 -309358644 32 896 -309358648 2 896 -309358652 32 896 -309358656 2 896 -309358660 32 896 -309358664 2 896 -309358668 32 896 -309358672 2 896 -309358676 32 896 -309358680 2 896 -309358684 32 896 -309358688 2 896 -309358692 32 896 -309358696 2 896 -309358700 32 896 -309358704 2 896 -309358708 32 896 -309358712 2 896 -309358716 32 896 -309358720 2 896 -309358724 32 896 -309358728 2 896 -309358732 32 896 -309358736 2 896 -309358740 32 896 -309358744 2 896 -309358748 32 896 -309358752 2 896 -309358756 32 896 -309358760 2 896 -309358764 32 896 -309358768 2 896 -309358772 32 896 -309358776 2 896 -309358780 32 896 -309358784 2 896 -309358788 32 896 -309358792 2 896 -309358796 32 896 -309358800 2 896 -309358804 32 896 -309358808 2 896 -309358812 32 896 -309358816 2 896 -309358820 32 896 -309358824 2 896 -309358828 32 896 -309358832 2 896 -309358836 32 896 -309358840 2 896 -309358844 32 896 -309358848 2 896 -309358852 32 896 -309358856 2 896 -309358860 32 896 -309358864 2 896 -309358868 32 896 -309358872 2 896 -309358876 32 896 -309358880 2 896 -309358884 32 896 -309358888 2 896 -309358892 32 896 -309358896 2 896 -309358900 32 896 -309358904 2 896 -309358908 32 896 -309358912 2 896 -309358916 32 896 -309358920 2 896 -309358924 32 896 -309358928 2 896 -309358932 32 896 -309358936 2 896 -309358940 32 896 -309358944 2 896 -309358948 32 896 -309358952 2 896 -309358956 32 896 -309358960 2 896 -309358964 32 896 -309358968 2 896 -309358972 32 896 -309358976 2 896 -309358980 32 896 -309358984 2 896 -309358988 32 896 -309358992 2 896 -309358996 32 896 -309359000 2 896 -309359004 32 896 -309359008 2 896 -309359012 32 896 -309359016 2 896 -309359020 32 896 -309359024 2 896 -309362692 32 896 -309362696 2 896 -309362700 32 896 -309362704 2 896 -309362708 32 896 -309362712 2 896 -309362716 32 896 -309362720 2 896 -309362724 32 896 -309362728 2 896 -309362732 32 896 -309362736 2 896 -309362740 32 896 -309362744 2 896 -309362748 32 896 -309362752 2 896 -309362756 32 896 -309362760 2 896 -309362764 32 896 -309362768 2 896 -309362772 32 896 -309362776 2 896 -309362780 32 896 -309362784 2 896 -309362788 32 896 -309362792 2 896 -309362796 32 896 -309362800 2 896 -309362804 32 896 -309362808 2 896 -309362812 32 896 -309362816 2 896 -309362820 32 896 -309362824 2 896 -309362828 32 896 -309362832 2 896 -309362836 32 896 -309362840 2 896 -309362844 32 896 -309362848 2 896 -309362852 32 896 -309362856 2 896 -309362860 32 896 -309362864 2 896 -309362868 32 896 -309362872 2 896 -309362876 32 896 -309362880 2 896 -309362884 32 896 -309362888 2 896 -309362892 32 896 -309362896 2 896 -309362900 32 896 -309362904 2 896 -309362908 32 896 -309362912 2 896 -309362916 32 896 -309362920 2 896 -309362924 32 896 -309362928 2 896 -309362932 32 896 -309362936 2 896 -309362940 32 896 -309362944 2 896 -309362948 32 896 -309362952 2 896 -309362956 32 896 -309362960 2 896 -309362964 32 896 -309362968 2 896 -309362972 32 896 -309362976 2 896 -309362980 32 896 -309362984 2 896 -309362988 32 896 -309362992 2 896 -309362996 32 896 -309363000 2 896 -309363004 32 896 -309363008 2 896 -309363012 32 896 -309363016 2 896 -309363020 32 896 -309363024 2 896 -309363028 32 896 -309363032 2 896 -309363036 32 896 -309363040 2 896 -309363044 32 896 -309363048 2 896 -309363052 32 896 -309363056 2 896 -309363060 32 896 -309363064 2 896 -309363068 32 896 -309363072 2 896 -309363076 32 896 -309363080 2 896 -309363084 32 896 -309363088 2 896 -309363092 32 896 -309363096 2 896 -309363100 32 896 -309363104 2 896 -309363108 32 896 -309363112 2 896 -309363116 32 896 -309363120 2 896 -309366788 32 896 -309366792 2 896 -309366796 32 896 -309366800 2 896 -309366804 32 896 -309366808 2 896 -309366812 32 896 -309366816 2 896 -309366820 32 896 -309366824 2 896 -309366828 32 896 -309366832 2 896 -309366836 32 896 -309366840 2 896 -309366844 32 896 -309366848 2 896 -309366852 32 896 -309366856 2 896 -309366860 32 896 -309366864 2 896 -309366868 32 896 -309366872 2 896 -309366876 32 896 -309366880 2 896 -309366884 32 896 -309366888 2 896 -309366892 32 896 -309366896 2 896 -309366900 32 896 -309366904 2 896 -309366908 32 896 -309366912 2 896 -309366916 32 896 -309366920 2 896 -309366924 32 896 -309366928 2 896 -309366932 32 896 -309366936 2 896 -309366940 32 896 -309366944 2 896 -309366948 32 896 -309366952 2 896 -309366956 32 896 -309366960 2 896 -309366964 32 896 -309366968 2 896 -309366972 32 896 -309366976 2 896 -309366980 32 896 -309366984 2 896 -309366988 32 896 -309366992 2 896 -309366996 32 896 -309367000 2 896 -309367004 32 896 -309367008 2 896 -309367012 32 896 -309367016 2 896 -309367020 32 896 -309367024 2 896 -309367028 32 896 -309367032 2 896 -309367036 32 896 -309367040 2 896 -309367044 32 896 -309367048 2 896 -309367052 32 896 -309367056 2 896 -309367060 32 896 -309367064 2 896 -309367068 32 896 -309367072 2 896 -309367076 32 896 -309367080 2 896 -309367084 32 896 -309367088 2 896 -309367092 32 896 -309367096 2 896 -309367100 32 896 -309367104 2 896 -309367108 32 896 -309367112 2 896 -309367116 32 896 -309367120 2 896 -309367124 32 896 -309367128 2 896 -309367132 32 896 -309367136 2 896 -309367140 32 896 -309367144 2 896 -309367148 32 896 -309367152 2 896 -309367156 32 896 -309367160 2 896 -309367164 32 896 -309367168 2 896 -309367172 32 896 -309367176 2 896 -309367180 32 896 -309367184 2 896 -309367188 32 896 -309367192 2 896 -309367196 32 896 -309367200 2 896 -309367204 32 896 -309367208 2 896 -309367212 32 896 -309367216 2 896 -309370884 32 896 -309370888 2 896 -309370892 32 896 -309370896 2 896 -309370900 32 896 -309370904 2 896 -309370908 32 896 -309370912 2 896 -309370916 32 896 -309370920 2 896 -309370924 32 896 -309370928 2 896 -309370932 32 896 -309370936 2 896 -309370940 32 896 -309370944 2 896 -309370948 32 896 -309370952 2 896 -309370956 32 896 -309370960 2 896 -309370964 32 896 -309370968 2 896 -309370972 32 896 -309370976 2 896 -309370980 32 896 -309370984 2 896 -309370988 32 896 -309370992 2 896 -309370996 32 896 -309371000 2 896 -309371004 32 896 -309371008 2 896 -309371012 32 896 -309371016 2 896 -309371020 32 896 -309371024 2 896 -309371028 32 896 -309371032 2 896 -309371036 32 896 -309371040 2 896 -309371044 32 896 -309371048 2 896 -309371052 32 896 -309371056 2 896 -309371060 32 896 -309371064 2 896 -309371068 32 896 -309371072 2 896 -309371076 32 896 -309371080 2 896 -309371084 32 896 -309371088 2 896 -309371092 32 896 -309371096 2 896 -309371100 32 896 -309371104 2 896 -309371108 32 896 -309371112 2 896 -309371116 32 896 -309371120 2 896 -309371124 32 896 -309371128 2 896 -309371132 32 896 -309371136 2 896 -309371140 32 896 -309371144 2 896 -309371148 32 896 -309371152 2 896 -309371156 32 896 -309371160 2 896 -309371164 32 896 -309371168 2 896 -309371172 32 896 -309371176 2 896 -309371180 32 896 -309371184 2 896 -309371188 32 896 -309371192 2 896 -309371196 32 896 -309371200 2 896 -309371204 32 896 -309371208 2 896 -309371212 32 896 -309371216 2 896 -309371220 32 896 -309371224 2 896 -309371228 32 896 -309371232 2 896 -309371236 32 896 -309371240 2 896 -309371244 32 896 -309371248 2 896 -309371252 32 896 -309371256 2 896 -309371260 32 896 -309371264 2 896 -309371268 32 896 -309371272 2 896 -309371276 32 896 -309371280 2 896 -309371284 32 896 -309371288 2 896 -309371292 32 896 -309371296 2 896 -309371300 32 896 -309371304 2 896 -309371308 32 896 -309371312 2 896 -309374980 32 896 -309374984 2 896 -309374988 32 896 -309374992 2 896 -309374996 32 896 -309375000 2 896 -309375004 32 896 -309375008 2 896 -309375012 32 896 -309375016 2 896 -309375020 32 896 -309375024 2 896 -309375028 32 896 -309375032 2 896 -309375036 32 896 -309375040 2 896 -309375044 32 896 -309375048 2 896 -309375052 32 896 -309375056 2 896 -309375060 32 896 -309375064 2 896 -309375068 32 896 -309375072 2 896 -309375076 32 896 -309375080 2 896 -309375084 32 896 -309375088 2 896 -309375092 32 896 -309375096 2 896 -309375100 32 896 -309375104 2 896 -309375108 32 896 -309375112 2 896 -309375116 32 896 -309375120 2 896 -309375124 32 896 -309375128 2 896 -309375132 32 896 -309375136 2 896 -309375140 32 896 -309375144 2 896 -309375148 32 896 -309375152 2 896 -309375156 32 896 -309375160 2 896 -309375164 32 896 -309375168 2 896 -309375172 32 896 -309375176 2 896 -309375180 32 896 -309375184 2 896 -309375188 32 896 -309375192 2 896 -309375196 32 896 -309375200 2 896 -309375204 32 896 -309375208 2 896 -309375212 32 896 -309375216 2 896 -309375220 32 896 -309375224 2 896 -309375228 32 896 -309375232 2 896 -309375236 32 896 -309375240 2 896 -309375244 32 896 -309375248 2 896 -309375252 32 896 -309375256 2 896 -309375260 32 896 -309375264 2 896 -309375268 32 896 -309375272 2 896 -309375276 32 896 -309375280 2 896 -309375284 32 896 -309375288 2 896 -309375292 32 896 -309375296 2 896 -309375300 32 896 -309375304 2 896 -309375308 32 896 -309375312 2 896 -309375316 32 896 -309375320 2 896 -309375324 32 896 -309375328 2 896 -309375332 32 896 -309375336 2 896 -309375340 32 896 -309375344 2 896 -309375348 32 896 -309375352 2 896 -309375356 32 896 -309375360 2 896 -309375364 32 896 -309375368 2 896 -309375372 32 896 -309375376 2 896 -309375380 32 896 -309375384 2 896 -309375388 32 896 -309375392 2 896 -309375396 32 896 -309375400 2 896 -309375404 32 896 -309375408 2 896 -309379076 32 896 -309379080 2 896 -309379084 32 896 -309379088 2 896 -309379092 32 896 -309379096 2 896 -309379100 32 896 -309379104 2 896 -309379108 32 896 -309379112 2 896 -309379116 32 896 -309379120 2 896 -309379124 32 896 -309379128 2 896 -309379132 32 896 -309379136 2 896 -309379140 32 896 -309379144 2 896 -309379148 32 896 -309379152 2 896 -309379156 32 896 -309379160 2 896 -309379164 32 896 -309379168 2 896 -309379172 32 896 -309379176 2 896 -309379180 32 896 -309379184 2 896 -309379188 32 896 -309379192 2 896 -309379196 32 896 -309379200 2 896 -309379204 32 896 -309379208 2 896 -309379212 32 896 -309379216 2 896 -309379220 32 896 -309379224 2 896 -309379228 32 896 -309379232 2 896 -309379236 32 896 -309379240 2 896 -309379244 32 896 -309379248 2 896 -309379252 32 896 -309379256 2 896 -309379260 32 896 -309379264 2 896 -309379268 32 896 -309379272 2 896 -309379276 32 896 -309379280 2 896 -309379284 32 896 -309379288 2 896 -309379292 32 896 -309379296 2 896 -309379300 32 896 -309379304 2 896 -309379308 32 896 -309379312 2 896 -309379316 32 896 -309379320 2 896 -309379324 32 896 -309379328 2 896 -309379332 32 896 -309379336 2 896 -309379340 32 896 -309379344 2 896 -309379348 32 896 -309379352 2 896 -309379356 32 896 -309379360 2 896 -309379364 32 896 -309379368 2 896 -309379372 32 896 -309379376 2 896 -309379380 32 896 -309379384 2 896 -309379388 32 896 -309379392 2 896 -309379396 32 896 -309379400 2 896 -309379404 32 896 -309379408 2 896 -309379412 32 896 -309379416 2 896 -309379420 32 896 -309379424 2 896 -309379428 32 896 -309379432 2 896 -309379436 32 896 -309379440 2 896 -309379444 32 896 -309379448 2 896 -309379452 32 896 -309379456 2 896 -309379460 32 896 -309379464 2 896 -309379468 32 896 -309379472 2 896 -309379476 32 896 -309379480 2 896 -309379484 32 896 -309379488 2 896 -309379492 32 896 -309379496 2 896 -309379500 32 896 -309379504 2 896 -309383172 32 896 -309383176 2 896 -309383180 32 896 -309383184 2 896 -309383188 32 896 -309383192 2 896 -309383196 32 896 -309383200 2 896 -309383204 32 896 -309383208 2 896 -309383212 32 896 -309383216 2 896 -309383220 32 896 -309383224 2 896 -309383228 32 896 -309383232 2 896 -309383236 32 896 -309383240 2 896 -309383244 32 896 -309383248 2 896 -309383252 32 896 -309383256 2 896 -309383260 32 896 -309383264 2 896 -309383268 32 896 -309383272 2 896 -309383276 32 896 -309383280 2 896 -309383284 32 896 -309383288 2 896 -309383292 32 896 -309383296 2 896 -309383300 32 896 -309383304 2 896 -309383308 32 896 -309383312 2 896 -309383316 32 896 -309383320 2 896 -309383324 32 896 -309383328 2 896 -309383332 32 896 -309383336 2 896 -309383340 32 896 -309383344 2 896 -309383348 32 896 -309383352 2 896 -309383356 32 896 -309383360 2 896 -309383364 32 896 -309383368 2 896 -309383372 32 896 -309383376 2 896 -309383380 32 896 -309383384 2 896 -309383388 32 896 -309383392 2 896 -309383396 32 896 -309383400 2 896 -309383404 32 896 -309383408 2 896 -309383412 32 896 -309383416 2 896 -309383420 32 896 -309383424 2 896 -309383428 32 896 -309383432 2 896 -309383436 32 896 -309383440 2 896 -309383444 32 896 -309383448 2 896 -309383452 32 896 -309383456 2 896 -309383460 32 896 -309383464 2 896 -309383468 32 896 -309383472 2 896 -309383476 32 896 -309383480 2 896 -309383484 32 896 -309383488 2 896 -309383492 32 896 -309383496 2 896 -309383500 32 896 -309383504 2 896 -309383508 32 896 -309383512 2 896 -309383516 32 896 -309383520 2 896 -309383524 32 896 -309383528 2 896 -309383532 32 896 -309383536 2 896 -309383540 32 896 -309383544 2 896 -309383548 32 896 -309383552 2 896 -309383556 32 896 -309383560 2 896 -309383564 32 896 -309383568 2 896 -309383572 32 896 -309383576 2 896 -309383580 32 896 -309383584 2 896 -309383588 32 896 -309383592 2 896 -309383596 32 896 -309383600 2 896 -309387268 32 896 -309387272 2 896 -309387276 32 896 -309387280 2 896 -309387284 32 896 -309387288 2 896 -309387292 32 896 -309387296 2 896 -309387300 32 896 -309387304 2 896 -309387308 32 896 -309387312 2 896 -309387316 32 896 -309387320 2 896 -309387324 32 896 -309387328 2 896 -309387332 32 896 -309387336 2 896 -309387340 32 896 -309387344 2 896 -309387348 32 896 -309387352 2 896 -309387356 32 896 -309387360 2 896 -309387364 32 896 -309387368 2 896 -309387372 32 896 -309387376 2 896 -309387380 32 896 -309387384 2 896 -309387388 32 896 -309387392 2 896 -309387396 32 896 -309387400 2 896 -309387404 32 896 -309387408 2 896 -309387412 32 896 -309387416 2 896 -309387420 32 896 -309387424 2 896 -309387428 32 896 -309387432 2 896 -309387436 32 896 -309387440 2 896 -309387444 32 896 -309387448 2 896 -309387452 32 896 -309387456 2 896 -309387460 32 896 -309387464 2 896 -309387468 32 896 -309387472 2 896 -309387476 32 896 -309387480 2 896 -309387484 32 896 -309387488 2 896 -309387492 32 896 -309387496 2 896 -309387500 32 896 -309387504 2 896 -309387508 32 896 -309387512 2 896 -309387516 32 896 -309387520 2 896 -309387524 32 896 -309387528 2 896 -309387532 32 896 -309387536 2 896 -309387540 32 896 -309387544 2 896 -309387548 32 896 -309387552 2 896 -309387556 32 896 -309387560 2 896 -309387564 32 896 -309387568 2 896 -309387572 32 896 -309387576 2 896 -309387580 32 896 -309387584 2 896 -309387588 32 896 -309387592 2 896 -309387596 32 896 -309387600 2 896 -309387604 32 896 -309387608 2 896 -309387612 32 896 -309387616 2 896 -309387620 32 896 -309387624 2 896 -309387628 32 896 -309387632 2 896 -309387636 32 896 -309387640 2 896 -309387644 32 896 -309387648 2 896 -309387652 32 896 -309387656 2 896 -309387660 32 896 -309387664 2 896 -309387668 32 896 -309387672 2 896 -309387676 32 896 -309387680 2 896 -309387684 32 896 -309387688 2 896 -309387692 32 896 -309387696 2 896 -309391364 32 896 -309391368 2 896 -309391372 32 896 -309391376 2 896 -309391380 32 896 -309391384 2 896 -309391388 32 896 -309391392 2 896 -309391396 32 896 -309391400 2 896 -309391404 32 896 -309391408 2 896 -309391412 32 896 -309391416 2 896 -309391420 32 896 -309391424 2 896 -309391428 32 896 -309391432 2 896 -309391436 32 896 -309391440 2 896 -309391444 32 896 -309391448 2 896 -309391452 32 896 -309391456 2 896 -309391460 32 896 -309391464 2 896 -309391468 32 896 -309391472 2 896 -309391476 32 896 -309391480 2 896 -309391484 32 896 -309391488 2 896 -309391492 32 896 -309391496 2 896 -309391500 32 896 -309391504 2 896 -309391508 32 896 -309391512 2 896 -309391516 32 896 -309391520 2 896 -309391524 32 896 -309391528 2 896 -309391532 32 896 -309391536 2 896 -309391540 32 896 -309391544 2 896 -309391548 32 896 -309391552 2 896 -309391556 32 896 -309391560 2 896 -309391564 32 896 -309391568 2 896 -309391572 32 896 -309391576 2 896 -309391580 32 896 -309391584 2 896 -309391588 32 896 -309391592 2 896 -309391596 32 896 -309391600 2 896 -309391604 32 896 -309391608 2 896 -309391612 32 896 -309391616 2 896 -309391620 32 896 -309391624 2 896 -309391628 32 896 -309391632 2 896 -309391636 32 896 -309391640 2 896 -309391644 32 896 -309391648 2 896 -309391652 32 896 -309391656 2 896 -309391660 32 896 -309391664 2 896 -309391668 32 896 -309391672 2 896 -309391676 32 896 -309391680 2 896 -309391684 32 896 -309391688 2 896 -309391692 32 896 -309391696 2 896 -309391700 32 896 -309391704 2 896 -309391708 32 896 -309391712 2 896 -309391716 32 896 -309391720 2 896 -309391724 32 896 -309391728 2 896 -309391732 32 896 -309391736 2 896 -309391740 32 896 -309391744 2 896 -309391748 32 896 -309391752 2 896 -309391756 32 896 -309391760 2 896 -309391764 32 896 -309391768 2 896 -309391772 32 896 -309391776 2 896 -309391780 32 896 -309391784 2 896 -309391788 32 896 -309391792 2 896 -309395460 32 896 -309395464 2 896 -309395468 32 896 -309395472 2 896 -309395476 32 896 -309395480 2 896 -309395484 32 896 -309395488 2 896 -309395492 32 896 -309395496 2 896 -309395500 32 896 -309395504 2 896 -309395508 32 896 -309395512 2 896 -309395516 32 896 -309395520 2 896 -309395524 32 896 -309395528 2 896 -309395532 32 896 -309395536 2 896 -309395540 32 896 -309395544 2 896 -309395548 32 896 -309395552 2 896 -309395556 32 896 -309395560 2 896 -309395564 32 896 -309395568 2 896 -309395572 32 896 -309395576 2 896 -309395580 32 896 -309395584 2 896 -309395588 32 896 -309395592 2 896 -309395596 32 896 -309395600 2 896 -309395604 32 896 -309395608 2 896 -309395612 32 896 -309395616 2 896 -309395620 32 896 -309395624 2 896 -309395628 32 896 -309395632 2 896 -309395636 32 896 -309395640 2 896 -309395644 32 896 -309395648 2 896 -309395652 32 896 -309395656 2 896 -309395660 32 896 -309395664 2 896 -309395668 32 896 -309395672 2 896 -309395676 32 896 -309395680 2 896 -309395684 32 896 -309395688 2 896 -309395692 32 896 -309395696 2 896 -309395700 32 896 -309395704 2 896 -309395708 32 896 -309395712 2 896 -309395716 32 896 -309395720 2 896 -309395724 32 896 -309395728 2 896 -309395732 32 896 -309395736 2 896 -309395740 32 896 -309395744 2 896 -309395748 32 896 -309395752 2 896 -309395756 32 896 -309395760 2 896 -309395764 32 896 -309395768 2 896 -309395772 32 896 -309395776 2 896 -309395780 32 896 -309395784 2 896 -309395788 32 896 -309395792 2 896 -309395796 32 896 -309395800 2 896 -309395804 32 896 -309395808 2 896 -309395812 32 896 -309395816 2 896 -309395820 32 896 -309395824 2 896 -309395828 32 896 -309395832 2 896 -309395836 32 896 -309395840 2 896 -309395844 32 896 -309395848 2 896 -309395852 32 896 -309395856 2 896 -309395860 32 896 -309395864 2 896 -309395868 32 896 -309395872 2 896 -309395876 32 896 -309395880 2 896 -309395884 32 896 -309395888 2 896 -309399556 32 896 -309399560 2 896 -309399564 32 896 -309399568 2 896 -309399572 32 896 -309399576 2 896 -309399580 32 896 -309399584 2 896 -309399588 32 896 -309399592 2 896 -309399596 32 896 -309399600 2 896 -309399604 32 896 -309399608 2 896 -309399612 32 896 -309399616 2 896 -309399620 32 896 -309399624 2 896 -309399628 32 896 -309399632 2 896 -309399636 32 896 -309399640 2 896 -309399644 32 896 -309399648 2 896 -309399652 32 896 -309399656 2 896 -309399660 32 896 -309399664 2 896 -309399668 32 896 -309399672 2 896 -309399676 32 896 -309399680 2 896 -309399684 32 896 -309399688 2 896 -309399692 32 896 -309399696 2 896 -309399700 32 896 -309399704 2 896 -309399708 32 896 -309399712 2 896 -309399716 32 896 -309399720 2 896 -309399724 32 896 -309399728 2 896 -309399732 32 896 -309399736 2 896 -309399740 32 896 -309399744 2 896 -309399748 32 896 -309399752 2 896 -309399756 32 896 -309399760 2 896 -309399764 32 896 -309399768 2 896 -309399772 32 896 -309399776 2 896 -309399780 32 896 -309399784 2 896 -309399788 32 896 -309399792 2 896 -309399796 32 896 -309399800 2 896 -309399804 32 896 -309399808 2 896 -309399812 32 896 -309399816 2 896 -309399820 32 896 -309399824 2 896 -309399828 32 896 -309399832 2 896 -309399836 32 896 -309399840 2 896 -309399844 32 896 -309399848 2 896 -309399852 32 896 -309399856 2 896 -309399860 32 896 -309399864 2 896 -309399868 32 896 -309399872 2 896 -309399876 32 896 -309399880 2 896 -309399884 32 896 -309399888 2 896 -309399892 32 896 -309399896 2 896 -309399900 32 896 -309399904 2 896 -309399908 32 896 -309399912 2 896 -309399916 32 896 -309399920 2 896 -309399924 32 896 -309399928 2 896 -309399932 32 896 -309399936 2 896 -309399940 32 896 -309399944 2 896 -309399948 32 896 -309399952 2 896 -309399956 32 896 -309399960 2 896 -309399964 32 896 -309399968 2 896 -309399972 32 896 -309399976 2 896 -309399980 32 896 -309399984 2 896 -309403652 32 896 -309403656 2 896 -309403660 32 896 -309403664 2 896 -309403668 32 896 -309403672 2 896 -309403676 32 896 -309403680 2 896 -309403684 32 896 -309403688 2 896 -309403692 32 896 -309403696 2 896 -309403700 32 896 -309403704 2 896 -309403708 32 896 -309403712 2 896 -309403716 32 896 -309403720 2 896 -309403724 32 896 -309403728 2 896 -309403732 32 896 -309403736 2 896 -309403740 32 896 -309403744 2 896 -309403748 32 896 -309403752 2 896 -309403756 32 896 -309403760 2 896 -309403764 32 896 -309403768 2 896 -309403772 32 896 -309403776 2 896 -309403780 32 896 -309403784 2 896 -309403788 32 896 -309403792 2 896 -309403796 32 896 -309403800 2 896 -309403804 32 896 -309403808 2 896 -309403812 32 896 -309403816 2 896 -309403820 32 896 -309403824 2 896 -309403828 32 896 -309403832 2 896 -309403836 32 896 -309403840 2 896 -309403844 32 896 -309403848 2 896 -309403852 32 896 -309403856 2 896 -309403860 32 896 -309403864 2 896 -309403868 32 896 -309403872 2 896 -309403876 32 896 -309403880 2 896 -309403884 32 896 -309403888 2 896 -309403892 32 896 -309403896 2 896 -309403900 32 896 -309403904 2 896 -309403908 32 896 -309403912 2 896 -309403916 32 896 -309403920 2 896 -309403924 32 896 -309403928 2 896 -309403932 32 896 -309403936 2 896 -309403940 32 896 -309403944 2 896 -309403948 32 896 -309403952 2 896 -309403956 32 896 -309403960 2 896 -309403964 32 896 -309403968 2 896 -309403972 32 896 -309403976 2 896 -309403980 32 896 -309403984 2 896 -309403988 32 896 -309403992 2 896 -309403996 32 896 -309404000 2 896 -309404004 32 896 -309404008 2 896 -309404012 32 896 -309404016 2 896 -309404020 32 896 -309404024 2 896 -309404028 32 896 -309404032 2 896 -309404036 32 896 -309404040 2 896 -309404044 32 896 -309404048 2 896 -309404052 32 896 -309404056 2 896 -309404060 32 896 -309404064 2 896 -309404068 32 896 -309404072 2 896 -309404076 32 896 -309404080 2 896 -309407748 32 896 -309407752 2 896 -309407756 32 896 -309407760 2 896 -309407764 32 896 -309407768 2 896 -309407772 32 896 -309407776 2 896 -309407780 32 896 -309407784 2 896 -309407788 32 896 -309407792 2 896 -309407796 32 896 -309407800 2 896 -309407804 32 896 -309407808 2 896 -309407812 32 896 -309407816 2 896 -309407820 32 896 -309407824 2 896 -309407828 32 896 -309407832 2 896 -309407836 32 896 -309407840 2 896 -309407844 32 896 -309407848 2 896 -309407852 32 896 -309407856 2 896 -309407860 32 896 -309407864 2 896 -309407868 32 896 -309407872 2 896 -309407876 32 896 -309407880 2 896 -309407884 32 896 -309407888 2 896 -309407892 32 896 -309407896 2 896 -309407900 32 896 -309407904 2 896 -309407908 32 896 -309407912 2 896 -309407916 32 896 -309407920 2 896 -309407924 32 896 -309407928 2 896 -309407932 32 896 -309407936 2 896 -309407940 32 896 -309407944 2 896 -309407948 32 896 -309407952 2 896 -309407956 32 896 -309407960 2 896 -309407964 32 896 -309407968 2 896 -309407972 32 896 -309407976 2 896 -309407980 32 896 -309407984 2 896 -309407988 32 896 -309407992 2 896 -309407996 32 896 -309408000 2 896 -309408004 32 896 -309408008 2 896 -309408012 32 896 -309408016 2 896 -309408020 32 896 -309408024 2 896 -309408028 32 896 -309408032 2 896 -309408036 32 896 -309408040 2 896 -309408044 32 896 -309408048 2 896 -309408052 32 896 -309408056 2 896 -309408060 32 896 -309408064 2 896 -309408068 32 896 -309408072 2 896 -309408076 32 896 -309408080 2 896 -309408084 32 896 -309408088 2 896 -309408092 32 896 -309408096 2 896 -309408100 32 896 -309408104 2 896 -309408108 32 896 -309408112 2 896 -309408116 32 896 -309408120 2 896 -309408124 32 896 -309408128 2 896 -309408132 32 896 -309408136 2 896 -309408140 32 896 -309408144 2 896 -309408148 32 896 -309408152 2 896 -309408156 32 896 -309408160 2 896 -309408164 32 896 -309408168 2 896 -309408172 32 896 -309408176 2 896 -309411844 32 896 -309411848 2 896 -309411852 32 896 -309411856 2 896 -309411860 32 896 -309411864 2 896 -309411868 32 896 -309411872 2 896 -309411876 32 896 -309411880 2 896 -309411884 32 896 -309411888 2 896 -309411892 32 896 -309411896 2 896 -309411900 32 896 -309411904 2 896 -309411908 32 896 -309411912 2 896 -309411916 32 896 -309411920 2 896 -309411924 32 896 -309411928 2 896 -309411932 32 896 -309411936 2 896 -309411940 32 896 -309411944 2 896 -309411948 32 896 -309411952 2 896 -309411956 32 896 -309411960 2 896 -309411964 32 896 -309411968 2 896 -309411972 32 896 -309411976 2 896 -309411980 32 896 -309411984 2 896 -309411988 32 896 -309411992 2 896 -309411996 32 896 -309412000 2 896 -309412004 32 896 -309412008 2 896 -309412012 32 896 -309412016 2 896 -309412020 32 896 -309412024 2 896 -309412028 32 896 -309412032 2 896 -309412036 32 896 -309412040 2 896 -309412044 32 896 -309412048 2 896 -309412052 32 896 -309412056 2 896 -309412060 32 896 -309412064 2 896 -309412068 32 896 -309412072 2 896 -309412076 32 896 -309412080 2 896 -309412084 32 896 -309412088 2 896 -309412092 32 896 -309412096 2 896 -309412100 32 896 -309412104 2 896 -309412108 32 896 -309412112 2 896 -309412116 32 896 -309412120 2 896 -309412124 32 896 -309412128 2 896 -309412132 32 896 -309412136 2 896 -309412140 32 896 -309412144 2 896 -309412148 32 896 -309412152 2 896 -309412156 32 896 -309412160 2 896 -309412164 32 896 -309412168 2 896 -309412172 32 896 -309412176 2 896 -309412180 32 896 -309412184 2 896 -309412188 32 896 -309412192 2 896 -309412196 32 896 -309412200 2 896 -309412204 32 896 -309412208 2 896 -309412212 32 896 -309412216 2 896 -309412220 32 896 -309412224 2 896 -309412228 32 896 -309412232 2 896 -309412236 32 896 -309412240 2 896 -309412244 32 896 -309412248 2 896 -309412252 32 896 -309412256 2 896 -309412260 32 896 -309412264 2 896 -309412268 32 896 -309412272 2 896 -309415940 32 896 -309415944 2 896 -309415948 32 896 -309415952 2 896 -309415956 32 896 -309415960 2 896 -309415964 32 896 -309415968 2 896 -309415972 32 896 -309415976 2 896 -309415980 32 896 -309415984 2 896 -309415988 32 896 -309415992 2 896 -309415996 32 896 -309416000 2 896 -309416004 32 896 -309416008 2 896 -309416012 32 896 -309416016 2 896 -309416020 32 896 -309416024 2 896 -309416028 32 896 -309416032 2 896 -309416036 32 896 -309416040 2 896 -309416044 32 896 -309416048 2 896 -309416052 32 896 -309416056 2 896 -309416060 32 896 -309416064 2 896 -309416068 32 896 -309416072 2 896 -309416076 32 896 -309416080 2 896 -309416084 32 896 -309416088 2 896 -309416092 32 896 -309416096 2 896 -309416100 32 896 -309416104 2 896 -309416108 32 896 -309416112 2 896 -309416116 32 896 -309416120 2 896 -309416124 32 896 -309416128 2 896 -309416132 32 896 -309416136 2 896 -309416140 32 896 -309416144 2 896 -309416148 32 896 -309416152 2 896 -309416156 32 896 -309416160 2 896 -309416164 32 896 -309416168 2 896 -309416172 32 896 -309416176 2 896 -309416180 32 896 -309416184 2 896 -309416188 32 896 -309416192 2 896 -309416196 32 896 -309416200 2 896 -309416204 32 896 -309416208 2 896 -309416212 32 896 -309416216 2 896 -309416220 32 896 -309416224 2 896 -309416228 32 896 -309416232 2 896 -309416236 32 896 -309416240 2 896 -309416244 32 896 -309416248 2 896 -309416252 32 896 -309416256 2 896 -309416260 32 896 -309416264 2 896 -309416268 32 896 -309416272 2 896 -309416276 32 896 -309416280 2 896 -309416284 32 896 -309416288 2 896 -309416292 32 896 -309416296 2 896 -309416300 32 896 -309416304 2 896 -309416308 32 896 -309416312 2 896 -309416316 32 896 -309416320 2 896 -309416324 32 896 -309416328 2 896 -309416332 32 896 -309416336 2 896 -309416340 32 896 -309416344 2 896 -309416348 32 896 -309416352 2 896 -309416356 32 896 -309416360 2 896 -309416364 32 896 -309416368 2 896 -309420036 32 896 -309420040 2 896 -309420044 32 896 -309420048 2 896 -309420052 32 896 -309420056 2 896 -309420060 32 896 -309420064 2 896 -309420068 32 896 -309420072 2 896 -309420076 32 896 -309420080 2 896 -309420084 32 896 -309420088 2 896 -309420092 32 896 -309420096 2 896 -309420100 32 896 -309420104 2 896 -309420108 32 896 -309420112 2 896 -309420116 32 896 -309420120 2 896 -309420124 32 896 -309420128 2 896 -309420132 32 896 -309420136 2 896 -309420140 32 896 -309420144 2 896 -309420148 32 896 -309420152 2 896 -309420156 32 896 -309420160 2 896 -309420164 32 896 -309420168 2 896 -309420172 32 896 -309420176 2 896 -309420180 32 896 -309420184 2 896 -309420188 32 896 -309420192 2 896 -309420196 32 896 -309420200 2 896 -309420204 32 896 -309420208 2 896 -309420212 32 896 -309420216 2 896 -309420220 32 896 -309420224 2 896 -309420228 32 896 -309420232 2 896 -309420236 32 896 -309420240 2 896 -309420244 32 896 -309420248 2 896 -309420252 32 896 -309420256 2 896 -309420260 32 896 -309420264 2 896 -309420268 32 896 -309420272 2 896 -309420276 32 896 -309420280 2 896 -309420284 32 896 -309420288 2 896 -309420292 32 896 -309420296 2 896 -309420300 32 896 -309420304 2 896 -309420308 32 896 -309420312 2 896 -309420316 32 896 -309420320 2 896 -309420324 32 896 -309420328 2 896 -309420332 32 896 -309420336 2 896 -309420340 32 896 -309420344 2 896 -309420348 32 896 -309420352 2 896 -309420356 32 896 -309420360 2 896 -309420364 32 896 -309420368 2 896 -309420372 32 896 -309420376 2 896 -309420380 32 896 -309420384 2 896 -309420388 32 896 -309420392 2 896 -309420396 32 896 -309420400 2 896 -309420404 32 896 -309420408 2 896 -309420412 32 896 -309420416 2 896 -309420420 32 896 -309420424 2 896 -309420428 32 896 -309420432 2 896 -309420436 32 896 -309420440 2 896 -309420444 32 896 -309420448 2 896 -309420452 32 896 -309420456 2 896 -309420460 32 896 -309420464 2 896 -309424132 32 896 -309424136 2 896 -309424140 32 896 -309424144 2 896 -309424148 32 896 -309424152 2 896 -309424156 32 896 -309424160 2 896 -309424164 32 896 -309424168 2 896 -309424172 32 896 -309424176 2 896 -309424180 32 896 -309424184 2 896 -309424188 32 896 -309424192 2 896 -309424196 32 896 -309424200 2 896 -309424204 32 896 -309424208 2 896 -309424212 32 896 -309424216 2 896 -309424220 32 896 -309424224 2 896 -309424228 32 896 -309424232 2 896 -309424236 32 896 -309424240 2 896 -309424244 32 896 -309424248 2 896 -309424252 32 896 -309424256 2 896 -309424260 32 896 -309424264 2 896 -309424268 32 896 -309424272 2 896 -309424276 32 896 -309424280 2 896 -309424284 32 896 -309424288 2 896 -309424292 32 896 -309424296 2 896 -309424300 32 896 -309424304 2 896 -309424308 32 896 -309424312 2 896 -309424316 32 896 -309424320 2 896 -309424324 32 896 -309424328 2 896 -309424332 32 896 -309424336 2 896 -309424340 32 896 -309424344 2 896 -309424348 32 896 -309424352 2 896 -309424356 32 896 -309424360 2 896 -309424364 32 896 -309424368 2 896 -309424372 32 896 -309424376 2 896 -309424380 32 896 -309424384 2 896 -309424388 32 896 -309424392 2 896 -309424396 32 896 -309424400 2 896 -309424404 32 896 -309424408 2 896 -309424412 32 896 -309424416 2 896 -309424420 32 896 -309424424 2 896 -309424428 32 896 -309424432 2 896 -309424436 32 896 -309424440 2 896 -309424444 32 896 -309424448 2 896 -309424452 32 896 -309424456 2 896 -309424460 32 896 -309424464 2 896 -309424468 32 896 -309424472 2 896 -309424476 32 896 -309424480 2 896 -309424484 32 896 -309424488 2 896 -309424492 32 896 -309424496 2 896 -309424500 32 896 -309424504 2 896 -309424508 32 896 -309424512 2 896 -309424516 32 896 -309424520 2 896 -309424524 32 896 -309424528 2 896 -309424532 32 896 -309424536 2 896 -309424540 32 896 -309424544 2 896 -309424548 32 896 -309424552 2 896 -309424556 32 896 -309424560 2 896 -309428228 32 896 -309428232 2 896 -309428236 32 896 -309428240 2 896 -309428244 32 896 -309428248 2 896 -309428252 32 896 -309428256 2 896 -309428260 32 896 -309428264 2 896 -309428268 32 896 -309428272 2 896 -309428276 32 896 -309428280 2 896 -309428284 32 896 -309428288 2 896 -309428292 32 896 -309428296 2 896 -309428300 32 896 -309428304 2 896 -309428308 32 896 -309428312 2 896 -309428316 32 896 -309428320 2 896 -309428324 32 896 -309428328 2 896 -309428332 32 896 -309428336 2 896 -309428340 32 896 -309428344 2 896 -309428348 32 896 -309428352 2 896 -309428356 32 896 -309428360 2 896 -309428364 32 896 -309428368 2 896 -309428372 32 896 -309428376 2 896 -309428380 32 896 -309428384 2 896 -309428388 32 896 -309428392 2 896 -309428396 32 896 -309428400 2 896 -309428404 32 896 -309428408 2 896 -309428412 32 896 -309428416 2 896 -309428420 32 896 -309428424 2 896 -309428428 32 896 -309428432 2 896 -309428436 32 896 -309428440 2 896 -309428444 32 896 -309428448 2 896 -309428452 32 896 -309428456 2 896 -309428460 32 896 -309428464 2 896 -309428468 32 896 -309428472 2 896 -309428476 32 896 -309428480 2 896 -309428484 32 896 -309428488 2 896 -309428492 32 896 -309428496 2 896 -309428500 32 896 -309428504 2 896 -309428508 32 896 -309428512 2 896 -309428516 32 896 -309428520 2 896 -309428524 32 896 -309428528 2 896 -309428532 32 896 -309428536 2 896 -309428540 32 896 -309428544 2 896 -309428548 32 896 -309428552 2 896 -309428556 32 896 -309428560 2 896 -309428564 32 896 -309428568 2 896 -309428572 32 896 -309428576 2 896 -309428580 32 896 -309428584 2 896 -309428588 32 896 -309428592 2 896 -309428596 32 896 -309428600 2 896 -309428604 32 896 -309428608 2 896 -309428612 32 896 -309428616 2 896 -309428620 32 896 -309428624 2 896 -309428628 32 896 -309428632 2 896 -309428636 32 896 -309428640 2 896 -309428644 32 896 -309428648 2 896 -309428652 32 896 -309428656 2 896 -309432324 32 896 -309432328 2 896 -309432332 32 896 -309432336 2 896 -309432340 32 896 -309432344 2 896 -309432348 32 896 -309432352 2 896 -309432356 32 896 -309432360 2 896 -309432364 32 896 -309432368 2 896 -309432372 32 896 -309432376 2 896 -309432380 32 896 -309432384 2 896 -309432388 32 896 -309432392 2 896 -309432396 32 896 -309432400 2 896 -309432404 32 896 -309432408 2 896 -309432412 32 896 -309432416 2 896 -309432420 32 896 -309432424 2 896 -309432428 32 896 -309432432 2 896 -309432436 32 896 -309432440 2 896 -309432444 32 896 -309432448 2 896 -309432452 32 896 -309432456 2 896 -309432460 32 896 -309432464 2 896 -309432468 32 896 -309432472 2 896 -309432476 32 896 -309432480 2 896 -309432484 32 896 -309432488 2 896 -309432492 32 896 -309432496 2 896 -309432500 32 896 -309432504 2 896 -309432508 32 896 -309432512 2 896 -309432516 32 896 -309432520 2 896 -309432524 32 896 -309432528 2 896 -309432532 32 896 -309432536 2 896 -309432540 32 896 -309432544 2 896 -309432548 32 896 -309432552 2 896 -309432556 32 896 -309432560 2 896 -309432564 32 896 -309432568 2 896 -309432572 32 896 -309432576 2 896 -309432580 32 896 -309432584 2 896 -309432588 32 896 -309432592 2 896 -309432596 32 896 -309432600 2 896 -309432604 32 896 -309432608 2 896 -309432612 32 896 -309432616 2 896 -309432620 32 896 -309432624 2 896 -309432628 32 896 -309432632 2 896 -309432636 32 896 -309432640 2 896 -309432644 32 896 -309432648 2 896 -309432652 32 896 -309432656 2 896 -309432660 32 896 -309432664 2 896 -309432668 32 896 -309432672 2 896 -309432676 32 896 -309432680 2 896 -309432684 32 896 -309432688 2 896 -309432692 32 896 -309432696 2 896 -309432700 32 896 -309432704 2 896 -309432708 32 896 -309432712 2 896 -309432716 32 896 -309432720 2 896 -309432724 32 896 -309432728 2 896 -309432732 32 896 -309432736 2 896 -309432740 32 896 -309432744 2 896 -309432748 32 896 -309432752 2 896 -309436420 32 896 -309436424 2 896 -309436428 32 896 -309436432 2 896 -309436436 32 896 -309436440 2 896 -309436444 32 896 -309436448 2 896 -309436452 32 896 -309436456 2 896 -309436460 32 896 -309436464 2 896 -309436468 32 896 -309436472 2 896 -309436476 32 896 -309436480 2 896 -309436484 32 896 -309436488 2 896 -309436492 32 896 -309436496 2 896 -309436500 32 896 -309436504 2 896 -309436508 32 896 -309436512 2 896 -309436516 32 896 -309436520 2 896 -309436524 32 896 -309436528 2 896 -309436532 32 896 -309436536 2 896 -309436540 32 896 -309436544 2 896 -309436548 32 896 -309436552 2 896 -309436556 32 896 -309436560 2 896 -309436564 32 896 -309436568 2 896 -309436572 32 896 -309436576 2 896 -309436580 32 896 -309436584 2 896 -309436588 32 896 -309436592 2 896 -309436596 32 896 -309436600 2 896 -309436604 32 896 -309436608 2 896 -309436612 32 896 -309436616 2 896 -309436620 32 896 -309436624 2 896 -309436628 32 896 -309436632 2 896 -309436636 32 896 -309436640 2 896 -309436644 32 896 -309436648 2 896 -309436652 32 896 -309436656 2 896 -309436660 32 896 -309436664 2 896 -309436668 32 896 -309436672 2 896 -309436676 32 896 -309436680 2 896 -309436684 32 896 -309436688 2 896 -309436692 32 896 -309436696 2 896 -309436700 32 896 -309436704 2 896 -309436708 32 896 -309436712 2 896 -309436716 32 896 -309436720 2 896 -309436724 32 896 -309436728 2 896 -309436732 32 896 -309436736 2 896 -309436740 32 896 -309436744 2 896 -309436748 32 896 -309436752 2 896 -309436756 32 896 -309436760 2 896 -309436764 32 896 -309436768 2 896 -309436772 32 896 -309436776 2 896 -309436780 32 896 -309436784 2 896 -309436788 32 896 -309436792 2 896 -309436796 32 896 -309436800 2 896 -309436804 32 896 -309436808 2 896 -309436812 32 896 -309436816 2 896 -309436820 32 896 -309436824 2 896 -309436828 32 896 -309436832 2 896 -309436836 32 896 -309436840 2 896 -309436844 32 896 -309436848 2 896 -309440516 32 896 -309440520 2 896 -309440524 32 896 -309440528 2 896 -309440532 32 896 -309440536 2 896 -309440540 32 896 -309440544 2 896 -309440548 32 896 -309440552 2 896 -309440556 32 896 -309440560 2 896 -309440564 32 896 -309440568 2 896 -309440572 32 896 -309440576 2 896 -309440580 32 896 -309440584 2 896 -309440588 32 896 -309440592 2 896 -309440596 32 896 -309440600 2 896 -309440604 32 896 -309440608 2 896 -309440612 32 896 -309440616 2 896 -309440620 32 896 -309440624 2 896 -309440628 32 896 -309440632 2 896 -309440636 32 896 -309440640 2 896 -309440644 32 896 -309440648 2 896 -309440652 32 896 -309440656 2 896 -309440660 32 896 -309440664 2 896 -309440668 32 896 -309440672 2 896 -309440676 32 896 -309440680 2 896 -309440684 32 896 -309440688 2 896 -309440692 32 896 -309440696 2 896 -309440700 32 896 -309440704 2 896 -309440708 32 896 -309440712 2 896 -309440716 32 896 -309440720 2 896 -309440724 32 896 -309440728 2 896 -309440732 32 896 -309440736 2 896 -309440740 32 896 -309440744 2 896 -309440748 32 896 -309440752 2 896 -309440756 32 896 -309440760 2 896 -309440764 32 896 -309440768 2 896 -309440772 32 896 -309440776 2 896 -309440780 32 896 -309440784 2 896 -309440788 32 896 -309440792 2 896 -309440796 32 896 -309440800 2 896 -309440804 32 896 -309440808 2 896 -309440812 32 896 -309440816 2 896 -309440820 32 896 -309440824 2 896 -309440828 32 896 -309440832 2 896 -309440836 32 896 -309440840 2 896 -309440844 32 896 -309440848 2 896 -309440852 32 896 -309440856 2 896 -309440860 32 896 -309440864 2 896 -309440868 32 896 -309440872 2 896 -309440876 32 896 -309440880 2 896 -309440884 32 896 -309440888 2 896 -309440892 32 896 -309440896 2 896 -309440900 32 896 -309440904 2 896 -309440908 32 896 -309440912 2 896 -309440916 32 896 -309440920 2 896 -309440924 32 896 -309440928 2 896 -309440932 32 896 -309440936 2 896 -309440940 32 896 -309440944 2 896 -309444612 32 896 -309444616 2 896 -309444620 32 896 -309444624 2 896 -309444628 32 896 -309444632 2 896 -309444636 32 896 -309444640 2 896 -309444644 32 896 -309444648 2 896 -309444652 32 896 -309444656 2 896 -309444660 32 896 -309444664 2 896 -309444668 32 896 -309444672 2 896 -309444676 32 896 -309444680 2 896 -309444684 32 896 -309444688 2 896 -309444692 32 896 -309444696 2 896 -309444700 32 896 -309444704 2 896 -309444708 32 896 -309444712 2 896 -309444716 32 896 -309444720 2 896 -309444724 32 896 -309444728 2 896 -309444732 32 896 -309444736 2 896 -309444740 32 896 -309444744 2 896 -309444748 32 896 -309444752 2 896 -309444756 32 896 -309444760 2 896 -309444764 32 896 -309444768 2 896 -309444772 32 896 -309444776 2 896 -309444780 32 896 -309444784 2 896 -309444788 32 896 -309444792 2 896 -309444796 32 896 -309444800 2 896 -309444804 32 896 -309444808 2 896 -309444812 32 896 -309444816 2 896 -309444820 32 896 -309444824 2 896 -309444828 32 896 -309444832 2 896 -309444836 32 896 -309444840 2 896 -309444844 32 896 -309444848 2 896 -309444852 32 896 -309444856 2 896 -309444860 32 896 -309444864 2 896 -309444868 32 896 -309444872 2 896 -309444876 32 896 -309444880 2 896 -309444884 32 896 -309444888 2 896 -309444892 32 896 -309444896 2 896 -309444900 32 896 -309444904 2 896 -309444908 32 896 -309444912 2 896 -309444916 32 896 -309444920 2 896 -309444924 32 896 -309444928 2 896 -309444932 32 896 -309444936 2 896 -309444940 32 896 -309444944 2 896 -309444948 32 896 -309444952 2 896 -309444956 32 896 -309444960 2 896 -309444964 32 896 -309444968 2 896 -309444972 32 896 -309444976 2 896 -309444980 32 896 -309444984 2 896 -309444988 32 896 -309444992 2 896 -309444996 32 896 -309445000 2 896 -309445004 32 896 -309445008 2 896 -309445012 32 896 -309445016 2 896 -309445020 32 896 -309445024 2 896 -309445028 32 896 -309445032 2 896 -309445036 32 896 -309445040 2 896 -309448708 32 896 -309448712 2 896 -309448716 32 896 -309448720 2 896 -309448724 32 896 -309448728 2 896 -309448732 32 896 -309448736 2 896 -309448740 32 896 -309448744 2 896 -309448748 32 896 -309448752 2 896 -309448756 32 896 -309448760 2 896 -309448764 32 896 -309448768 2 896 -309448772 32 896 -309448776 2 896 -309448780 32 896 -309448784 2 896 -309448788 32 896 -309448792 2 896 -309448796 32 896 -309448800 2 896 -309448804 32 896 -309448808 2 896 -309448812 32 896 -309448816 2 896 -309448820 32 896 -309448824 2 896 -309448828 32 896 -309448832 2 896 -309448836 32 896 -309448840 2 896 -309448844 32 896 -309448848 2 896 -309448852 32 896 -309448856 2 896 -309448860 32 896 -309448864 2 896 -309448868 32 896 -309448872 2 896 -309448876 32 896 -309448880 2 896 -309448884 32 896 -309448888 2 896 -309448892 32 896 -309448896 2 896 -309448900 32 896 -309448904 2 896 -309448908 32 896 -309448912 2 896 -309448916 32 896 -309448920 2 896 -309448924 32 896 -309448928 2 896 -309448932 32 896 -309448936 2 896 -309448940 32 896 -309448944 2 896 -309448948 32 896 -309448952 2 896 -309448956 32 896 -309448960 2 896 -309448964 32 896 -309448968 2 896 -309448972 32 896 -309448976 2 896 -309448980 32 896 -309448984 2 896 -309448988 32 896 -309448992 2 896 -309448996 32 896 -309449000 2 896 -309449004 32 896 -309449008 2 896 -309449012 32 896 -309449016 2 896 -309449020 32 896 -309449024 2 896 -309449028 32 896 -309449032 2 896 -309449036 32 896 -309449040 2 896 -309449044 32 896 -309449048 2 896 -309449052 32 896 -309449056 2 896 -309449060 32 896 -309449064 2 896 -309449068 32 896 -309449072 2 896 -309449076 32 896 -309449080 2 896 -309449084 32 896 -309449088 2 896 -309449092 32 896 -309449096 2 896 -309449100 32 896 -309449104 2 896 -309449108 32 896 -309449112 2 896 -309449116 32 896 -309449120 2 896 -309449124 32 896 -309449128 2 896 -309449132 32 896 -309449136 2 896 -309452804 32 896 -309452808 2 896 -309452812 32 896 -309452816 2 896 -309452820 32 896 -309452824 2 896 -309452828 32 896 -309452832 2 896 -309452836 32 896 -309452840 2 896 -309452844 32 896 -309452848 2 896 -309452852 32 896 -309452856 2 896 -309452860 32 896 -309452864 2 896 -309452868 32 896 -309452872 2 896 -309452876 32 896 -309452880 2 896 -309452884 32 896 -309452888 2 896 -309452892 32 896 -309452896 2 896 -309452900 32 896 -309452904 2 896 -309452908 32 896 -309452912 2 896 -309452916 32 896 -309452920 2 896 -309452924 32 896 -309452928 2 896 -309452932 32 896 -309452936 2 896 -309452940 32 896 -309452944 2 896 -309452948 32 896 -309452952 2 896 -309452956 32 896 -309452960 2 896 -309452964 32 896 -309452968 2 896 -309452972 32 896 -309452976 2 896 -309452980 32 896 -309452984 2 896 -309452988 32 896 -309452992 2 896 -309452996 32 896 -309453000 2 896 -309453004 32 896 -309453008 2 896 -309453012 32 896 -309453016 2 896 -309453020 32 896 -309453024 2 896 -309453028 32 896 -309453032 2 896 -309453036 32 896 -309453040 2 896 -309453044 32 896 -309453048 2 896 -309453052 32 896 -309453056 2 896 -309453060 32 896 -309453064 2 896 -309453068 32 896 -309453072 2 896 -309453076 32 896 -309453080 2 896 -309453084 32 896 -309453088 2 896 -309453092 32 896 -309453096 2 896 -309453100 32 896 -309453104 2 896 -309453108 32 896 -309453112 2 896 -309453116 32 896 -309453120 2 896 -309453124 32 896 -309453128 2 896 -309453132 32 896 -309453136 2 896 -309453140 32 896 -309453144 2 896 -309453148 32 896 -309453152 2 896 -309453156 32 896 -309453160 2 896 -309453164 32 896 -309453168 2 896 -309453172 32 896 -309453176 2 896 -309453180 32 896 -309453184 2 896 -309453188 32 896 -309453192 2 896 -309453196 32 896 -309453200 2 896 -309453204 32 896 -309453208 2 896 -309453212 32 896 -309453216 2 896 -309453220 32 896 -309453224 2 896 -309453228 32 896 -309453232 2 896 -309456900 32 896 -309456904 2 896 -309456908 32 896 -309456912 2 896 -309456916 32 896 -309456920 2 896 -309456924 32 896 -309456928 2 896 -309456932 32 896 -309456936 2 896 -309456940 32 896 -309456944 2 896 -309456948 32 896 -309456952 2 896 -309456956 32 896 -309456960 2 896 -309456964 32 896 -309456968 2 896 -309456972 32 896 -309456976 2 896 -309456980 32 896 -309456984 2 896 -309456988 32 896 -309456992 2 896 -309456996 32 896 -309457000 2 896 -309457004 32 896 -309457008 2 896 -309457012 32 896 -309457016 2 896 -309457020 32 896 -309457024 2 896 -309457028 32 896 -309457032 2 896 -309457036 32 896 -309457040 2 896 -309457044 32 896 -309457048 2 896 -309457052 32 896 -309457056 2 896 -309457060 32 896 -309457064 2 896 -309457068 32 896 -309457072 2 896 -309457076 32 896 -309457080 2 896 -309457084 32 896 -309457088 2 896 -309457092 32 896 -309457096 2 896 -309457100 32 896 -309457104 2 896 -309457108 32 896 -309457112 2 896 -309457116 32 896 -309457120 2 896 -309457124 32 896 -309457128 2 896 -309457132 32 896 -309457136 2 896 -309457140 32 896 -309457144 2 896 -309457148 32 896 -309457152 2 896 -309457156 32 896 -309457160 2 896 -309457164 32 896 -309457168 2 896 -309457172 32 896 -309457176 2 896 -309457180 32 896 -309457184 2 896 -309457188 32 896 -309457192 2 896 -309457196 32 896 -309457200 2 896 -309457204 32 896 -309457208 2 896 -309457212 32 896 -309457216 2 896 -309457220 32 896 -309457224 2 896 -309457228 32 896 -309457232 2 896 -309457236 32 896 -309457240 2 896 -309457244 32 896 -309457248 2 896 -309457252 32 896 -309457256 2 896 -309457260 32 896 -309457264 2 896 -309457268 32 896 -309457272 2 896 -309457276 32 896 -309457280 2 896 -309457284 32 896 -309457288 2 896 -309457292 32 896 -309457296 2 896 -309457300 32 896 -309457304 2 896 -309457308 32 896 -309457312 2 896 -309457316 32 896 -309457320 2 896 -309457324 32 896 -309457328 2 896 -309460996 32 896 -309461000 2 896 -309461004 32 896 -309461008 2 896 -309461012 32 896 -309461016 2 896 -309461020 32 896 -309461024 2 896 -309461028 32 896 -309461032 2 896 -309461036 32 896 -309461040 2 896 -309461044 32 896 -309461048 2 896 -309461052 32 896 -309461056 2 896 -309461060 32 896 -309461064 2 896 -309461068 32 896 -309461072 2 896 -309461076 32 896 -309461080 2 896 -309461084 32 896 -309461088 2 896 -309461092 32 896 -309461096 2 896 -309461100 32 896 -309461104 2 896 -309461108 32 896 -309461112 2 896 -309461116 32 896 -309461120 2 896 -309461124 32 896 -309461128 2 896 -309461132 32 896 -309461136 2 896 -309461140 32 896 -309461144 2 896 -309461148 32 896 -309461152 2 896 -309461156 32 896 -309461160 2 896 -309461164 32 896 -309461168 2 896 -309461172 32 896 -309461176 2 896 -309461180 32 896 -309461184 2 896 -309461188 32 896 -309461192 2 896 -309461196 32 896 -309461200 2 896 -309461204 32 896 -309461208 2 896 -309461212 32 896 -309461216 2 896 -309461220 32 896 -309461224 2 896 -309461228 32 896 -309461232 2 896 -309461236 32 896 -309461240 2 896 -309461244 32 896 -309461248 2 896 -309461252 32 896 -309461256 2 896 -309461260 32 896 -309461264 2 896 -309461268 32 896 -309461272 2 896 -309461276 32 896 -309461280 2 896 -309461284 32 896 -309461288 2 896 -309461292 32 896 -309461296 2 896 -309461300 32 896 -309461304 2 896 -309461308 32 896 -309461312 2 896 -309461316 32 896 -309461320 2 896 -309461324 32 896 -309461328 2 896 -309461332 32 896 -309461336 2 896 -309461340 32 896 -309461344 2 896 -309461348 32 896 -309461352 2 896 -309461356 32 896 -309461360 2 896 -309461364 32 896 -309461368 2 896 -309461372 32 896 -309461376 2 896 -309461380 32 896 -309461384 2 896 -309461388 32 896 -309461392 2 896 -309461396 32 896 -309461400 2 896 -309461404 32 896 -309461408 2 896 -309461412 32 896 -309461416 2 896 -309461420 32 896 -309461424 2 896 -309465092 32 896 -309465096 2 896 -309465100 32 896 -309465104 2 896 -309465108 32 896 -309465112 2 896 -309465116 32 896 -309465120 2 896 -309465124 32 896 -309465128 2 896 -309465132 32 896 -309465136 2 896 -309465140 32 896 -309465144 2 896 -309465148 32 896 -309465152 2 896 -309465156 32 896 -309465160 2 896 -309465164 32 896 -309465168 2 896 -309465172 32 896 -309465176 2 896 -309465180 32 896 -309465184 2 896 -309465188 32 896 -309465192 2 896 -309465196 32 896 -309465200 2 896 -309465204 32 896 -309465208 2 896 -309465212 32 896 -309465216 2 896 -309465220 32 896 -309465224 2 896 -309465228 32 896 -309465232 2 896 -309465236 32 896 -309465240 2 896 -309465244 32 896 -309465248 2 896 -309465252 32 896 -309465256 2 896 -309465260 32 896 -309465264 2 896 -309465268 32 896 -309465272 2 896 -309465276 32 896 -309465280 2 896 -309465284 32 896 -309465288 2 896 -309465292 32 896 -309465296 2 896 -309465300 32 896 -309465304 2 896 -309465308 32 896 -309465312 2 896 -309465316 32 896 -309465320 2 896 -309465324 32 896 -309465328 2 896 -309465332 32 896 -309465336 2 896 -309465340 32 896 -309465344 2 896 -309465348 32 896 -309465352 2 896 -309465356 32 896 -309465360 2 896 -309465364 32 896 -309465368 2 896 -309465372 32 896 -309465376 2 896 -309465380 32 896 -309465384 2 896 -309465388 32 896 -309465392 2 896 -309465396 32 896 -309465400 2 896 -309465404 32 896 -309465408 2 896 -309465412 32 896 -309465416 2 896 -309465420 32 896 -309465424 2 896 -309465428 32 896 -309465432 2 896 -309465436 32 896 -309465440 2 896 -309465444 32 896 -309465448 2 896 -309465452 32 896 -309465456 2 896 -309465460 32 896 -309465464 2 896 -309465468 32 896 -309465472 2 896 -309465476 32 896 -309465480 2 896 -309465484 32 896 -309465488 2 896 -309465492 32 896 -309465496 2 896 -309465500 32 896 -309465504 2 896 -309465508 32 896 -309465512 2 896 -309465516 32 896 -309465520 2 896 -309469188 32 896 -309469192 2 896 -309469196 32 896 -309469200 2 896 -309469204 32 896 -309469208 2 896 -309469212 32 896 -309469216 2 896 -309469220 32 896 -309469224 2 896 -309469228 32 896 -309469232 2 896 -309469236 32 896 -309469240 2 896 -309469244 32 896 -309469248 2 896 -309469252 32 896 -309469256 2 896 -309469260 32 896 -309469264 2 896 -309469268 32 896 -309469272 2 896 -309469276 32 896 -309469280 2 896 -309469284 32 896 -309469288 2 896 -309469292 32 896 -309469296 2 896 -309469300 32 896 -309469304 2 896 -309469308 32 896 -309469312 2 896 -309469316 32 896 -309469320 2 896 -309469324 32 896 -309469328 2 896 -309469332 32 896 -309469336 2 896 -309469340 32 896 -309469344 2 896 -309469348 32 896 -309469352 2 896 -309469356 32 896 -309469360 2 896 -309469364 32 896 -309469368 2 896 -309469372 32 896 -309469376 2 896 -309469380 32 896 -309469384 2 896 -309469388 32 896 -309469392 2 896 -309469396 32 896 -309469400 2 896 -309469404 32 896 -309469408 2 896 -309469412 32 896 -309469416 2 896 -309469420 32 896 -309469424 2 896 -309469428 32 896 -309469432 2 896 -309469436 32 896 -309469440 2 896 -309469444 32 896 -309469448 2 896 -309469452 32 896 -309469456 2 896 -309469460 32 896 -309469464 2 896 -309469468 32 896 -309469472 2 896 -309469476 32 896 -309469480 2 896 -309469484 32 896 -309469488 2 896 -309469492 32 896 -309469496 2 896 -309469500 32 896 -309469504 2 896 -309469508 32 896 -309469512 2 896 -309469516 32 896 -309469520 2 896 -309469524 32 896 -309469528 2 896 -309469532 32 896 -309469536 2 896 -309469540 32 896 -309469544 2 896 -309469548 32 896 -309469552 2 896 -309469556 32 896 -309469560 2 896 -309469564 32 896 -309469568 2 896 -309469572 32 896 -309469576 2 896 -309469580 32 896 -309469584 2 896 -309469588 32 896 -309469592 2 896 -309469596 32 896 -309469600 2 896 -309469604 32 896 -309469608 2 896 -309469612 32 896 -309469616 2 896 -310382596 2 896 -310382600 2 896 -310382604 2 896 -310382608 2 896 -310382612 2 896 -310382616 2 896 -310382620 2 896 -310382624 2 896 -310382628 2 896 -310382632 2 896 -310382636 2 896 -310382640 2 896 -310382644 2 896 -310382648 2 896 -310382652 2 896 -310382656 2 896 -310382660 2 896 -310382664 2 896 -310382668 2 896 -310382672 2 896 -310382676 2 896 -310382680 2 896 -310382684 2 896 -310382688 2 896 -310382692 2 896 -310382696 2 896 -310382700 2 896 -310382704 2 896 -310382708 2 896 -310382712 2 896 -310382716 2 896 -310382720 2 896 -310382724 2 896 -310382728 2 896 -310382732 2 896 -310382736 2 896 -310382740 2 896 -310382744 2 896 -310382748 2 896 -310382752 2 896 -310382756 2 896 -310382760 2 896 -310382764 2 896 -310382768 2 896 -310382772 2 896 -310382776 2 896 -310382780 2 896 -310382784 2 896 -310386692 2 896 -310386696 2 896 -310386700 2 896 -310386704 2 896 -310386708 2 896 -310386712 2 896 -310386716 2 896 -310386720 2 896 -310386724 2 896 -310386728 2 896 -310386732 2 896 -310386736 2 896 -310386740 2 896 -310386744 2 896 -310386748 2 896 -310386752 2 896 -310386756 2 896 -310386760 2 896 -310386764 2 896 -310386768 2 896 -310386772 2 896 -310386776 2 896 -310386780 2 896 -310386784 2 896 -310386788 2 896 -310386792 2 896 -310386796 2 896 -310386800 2 896 -310386804 2 896 -310386808 2 896 -310386812 2 896 -310386816 2 896 -310386820 2 896 -310386824 2 896 -310386828 2 896 -310386832 2 896 -310386836 2 896 -310386840 2 896 -310386844 2 896 -310386848 2 896 -310386852 2 896 -310386856 2 896 -310386860 2 896 -310386864 2 896 -310386868 2 896 -310386872 2 896 -310386876 2 896 -310386880 2 896 -310390788 2 896 -310390792 2 896 -310390796 2 896 -310390800 2 896 -310390804 2 896 -310390808 2 896 -310390812 2 896 -310390816 2 896 -310390820 2 896 -310390824 2 896 -310390828 2 896 -310390832 2 896 -310390836 2 896 -310390840 2 896 -310390844 2 896 -310390848 2 896 -310390852 2 896 -310390856 2 896 -310390860 2 896 -310390864 2 896 -310390868 2 896 -310390872 2 896 -310390876 2 896 -310390880 2 896 -310390884 2 896 -310390888 2 896 -310390892 2 896 -310390896 2 896 -310390900 2 896 -310390904 2 896 -310390908 2 896 -310390912 2 896 -310390916 2 896 -310390920 2 896 -310390924 2 896 -310390928 2 896 -310390932 2 896 -310390936 2 896 -310390940 2 896 -310390944 2 896 -310390948 2 896 -310390952 2 896 -310390956 2 896 -310390960 2 896 -310390964 2 896 -310390968 2 896 -310390972 2 896 -310390976 2 896 -310394884 2 896 -310394888 2 896 -310394892 2 896 -310394896 2 896 -310394900 2 896 -310394904 2 896 -310394908 2 896 -310394912 2 896 -310394916 2 896 -310394920 2 896 -310394924 2 896 -310394928 2 896 -310394932 2 896 -310394936 2 896 -310394940 2 896 -310394944 2 896 -310394948 2 896 -310394952 2 896 -310394956 2 896 -310394960 2 896 -310394964 2 896 -310394968 2 896 -310394972 2 896 -310394976 2 896 -310394980 2 896 -310394984 2 896 -310394988 2 896 -310394992 2 896 -310394996 2 896 -310395000 2 896 -310395004 2 896 -310395008 2 896 -310395012 2 896 -310395016 2 896 -310395020 2 896 -310395024 2 896 -310395028 2 896 -310395032 2 896 -310395036 2 896 -310395040 2 896 -310395044 2 896 -310395048 2 896 -310395052 2 896 -310395056 2 896 -310395060 2 896 -310395064 2 896 -310395068 2 896 -310395072 2 896 -310398980 2 896 -310398984 2 896 -310398988 2 896 -310398992 2 896 -310398996 2 896 -310399000 2 896 -310399004 2 896 -310399008 2 896 -310399012 2 896 -310399016 2 896 -310399020 2 896 -310399024 2 896 -310399028 2 896 -310399032 2 896 -310399036 2 896 -310399040 2 896 -310399044 2 896 -310399048 2 896 -310399052 2 896 -310399056 2 896 -310399060 2 896 -310399064 2 896 -310399068 2 896 -310399072 2 896 -310399076 2 896 -310399080 2 896 -310399084 2 896 -310399088 2 896 -310399092 2 896 -310399096 2 896 -310399100 2 896 -310399104 2 896 -310399108 2 896 -310399112 2 896 -310399116 2 896 -310399120 2 896 -310399124 2 896 -310399128 2 896 -310399132 2 896 -310399136 2 896 -310399140 2 896 -310399144 2 896 -310399148 2 896 -310399152 2 896 -310399156 2 896 -310399160 2 896 -310399164 2 896 -310399168 2 896 -310403076 2 896 -310403080 2 896 -310403084 2 896 -310403088 2 896 -310403092 2 896 -310403096 2 896 -310403100 2 896 -310403104 2 896 -310403108 2 896 -310403112 2 896 -310403116 2 896 -310403120 2 896 -310403124 2 896 -310403128 2 896 -310403132 2 896 -310403136 2 896 -310403140 2 896 -310403144 2 896 -310403148 2 896 -310403152 2 896 -310403156 2 896 -310403160 2 896 -310403164 2 896 -310403168 2 896 -310403172 2 896 -310403176 2 896 -310403180 2 896 -310403184 2 896 -310403188 2 896 -310403192 2 896 -310403196 2 896 -310403200 2 896 -310403204 2 896 -310403208 2 896 -310403212 2 896 -310403216 2 896 -310403220 2 896 -310403224 2 896 -310403228 2 896 -310403232 2 896 -310403236 2 896 -310403240 2 896 -310403244 2 896 -310403248 2 896 -310403252 2 896 -310403256 2 896 -310403260 2 896 -310403264 2 896 -310407172 2 896 -310407176 2 896 -310407180 2 896 -310407184 2 896 -310407188 2 896 -310407192 2 896 -310407196 2 896 -310407200 2 896 -310407204 2 896 -310407208 2 896 -310407212 2 896 -310407216 2 896 -310407220 2 896 -310407224 2 896 -310407228 2 896 -310407232 2 896 -310407236 2 896 -310407240 2 896 -310407244 2 896 -310407248 2 896 -310407252 2 896 -310407256 2 896 -310407260 2 896 -310407264 2 896 -310407268 2 896 -310407272 2 896 -310407276 2 896 -310407280 2 896 -310407284 2 896 -310407288 2 896 -310407292 2 896 -310407296 2 896 -310407300 2 896 -310407304 2 896 -310407308 2 896 -310407312 2 896 -310407316 2 896 -310407320 2 896 -310407324 2 896 -310407328 2 896 -310407332 2 896 -310407336 2 896 -310407340 2 896 -310407344 2 896 -310407348 2 896 -310407352 2 896 -310407356 2 896 -310407360 2 896 -310411268 2 896 -310411272 2 896 -310411276 2 896 -310411280 2 896 -310411284 2 896 -310411288 2 896 -310411292 2 896 -310411296 2 896 -310411300 2 896 -310411304 2 896 -310411308 2 896 -310411312 2 896 -310411316 2 896 -310411320 2 896 -310411324 2 896 -310411328 2 896 -310411332 2 896 -310411336 2 896 -310411340 2 896 -310411344 2 896 -310411348 2 896 -310411352 2 896 -310411356 2 896 -310411360 2 896 -310411364 2 896 -310411368 2 896 -310411372 2 896 -310411376 2 896 -310411380 2 896 -310411384 2 896 -310411388 2 896 -310411392 2 896 -310411396 2 896 -310411400 2 896 -310411404 2 896 -310411408 2 896 -310411412 2 896 -310411416 2 896 -310411420 2 896 -310411424 2 896 -310411428 2 896 -310411432 2 896 -310411436 2 896 -310411440 2 896 -310411444 2 896 -310411448 2 896 -310411452 2 896 -310411456 2 896 -310415364 2 896 -310415368 2 896 -310415372 2 896 -310415376 2 896 -310415380 2 896 -310415384 2 896 -310415388 2 896 -310415392 2 896 -310415396 2 896 -310415400 2 896 -310415404 2 896 -310415408 2 896 -310415412 2 896 -310415416 2 896 -310415420 2 896 -310415424 2 896 -310415428 2 896 -310415432 2 896 -310415436 2 896 -310415440 2 896 -310415444 2 896 -310415448 2 896 -310415452 2 896 -310415456 2 896 -310415460 2 896 -310415464 2 896 -310415468 2 896 -310415472 2 896 -310415476 2 896 -310415480 2 896 -310415484 2 896 -310415488 2 896 -310415492 2 896 -310415496 2 896 -310415500 2 896 -310415504 2 896 -310415508 2 896 -310415512 2 896 -310415516 2 896 -310415520 2 896 -310415524 2 896 -310415528 2 896 -310415532 2 896 -310415536 2 896 -310415540 2 896 -310415544 2 896 -310415548 2 896 -310415552 2 896 -310419460 2 896 -310419464 2 896 -310419468 2 896 -310419472 2 896 -310419476 2 896 -310419480 2 896 -310419484 2 896 -310419488 2 896 -310419492 2 896 -310419496 2 896 -310419500 2 896 -310419504 2 896 -310419508 2 896 -310419512 2 896 -310419516 2 896 -310419520 2 896 -310419524 2 896 -310419528 2 896 -310419532 2 896 -310419536 2 896 -310419540 2 896 -310419544 2 896 -310419548 2 896 -310419552 2 896 -310419556 2 896 -310419560 2 896 -310419564 2 896 -310419568 2 896 -310419572 2 896 -310419576 2 896 -310419580 2 896 -310419584 2 896 -310419588 2 896 -310419592 2 896 -310419596 2 896 -310419600 2 896 -310419604 2 896 -310419608 2 896 -310419612 2 896 -310419616 2 896 -310419620 2 896 -310419624 2 896 -310419628 2 896 -310419632 2 896 -310419636 2 896 -310419640 2 896 -310419644 2 896 -310419648 2 896 -310423556 2 896 -310423560 2 896 -310423564 2 896 -310423568 2 896 -310423572 2 896 -310423576 2 896 -310423580 2 896 -310423584 2 896 -310423588 2 896 -310423592 2 896 -310423596 2 896 -310423600 2 896 -310423604 2 896 -310423608 2 896 -310423612 2 896 -310423616 2 896 -310423620 2 896 -310423624 2 896 -310423628 2 896 -310423632 2 896 -310423636 2 896 -310423640 2 896 -310423644 2 896 -310423648 2 896 -310423652 2 896 -310423656 2 896 -310423660 2 896 -310423664 2 896 -310423668 2 896 -310423672 2 896 -310423676 2 896 -310423680 2 896 -310423684 2 896 -310423688 2 896 -310423692 2 896 -310423696 2 896 -310423700 2 896 -310423704 2 896 -310423708 2 896 -310423712 2 896 -310423716 2 896 -310423720 2 896 -310423724 2 896 -310423728 2 896 -310423732 2 896 -310423736 2 896 -310423740 2 896 -310423744 2 896 -310427652 2 896 -310427656 2 896 -310427660 2 896 -310427664 2 896 -310427668 2 896 -310427672 2 896 -310427676 2 896 -310427680 2 896 -310427684 2 896 -310427688 2 896 -310427692 2 896 -310427696 2 896 -310427700 2 896 -310427704 2 896 -310427708 2 896 -310427712 2 896 -310427716 2 896 -310427720 2 896 -310427724 2 896 -310427728 2 896 -310427732 2 896 -310427736 2 896 -310427740 2 896 -310427744 2 896 -310427748 2 896 -310427752 2 896 -310427756 2 896 -310427760 2 896 -310427764 2 896 -310427768 2 896 -310427772 2 896 -310427776 2 896 -310427780 2 896 -310427784 2 896 -310427788 2 896 -310427792 2 896 -310427796 2 896 -310427800 2 896 -310427804 2 896 -310427808 2 896 -310427812 2 896 -310427816 2 896 -310427820 2 896 -310427824 2 896 -310427828 2 896 -310427832 2 896 -310427836 2 896 -310427840 2 896 -310431748 2 896 -310431752 2 896 -310431756 2 896 -310431760 2 896 -310431764 2 896 -310431768 2 896 -310431772 2 896 -310431776 2 896 -310431780 2 896 -310431784 2 896 -310431788 2 896 -310431792 2 896 -310431796 2 896 -310431800 2 896 -310431804 2 896 -310431808 2 896 -310431812 2 896 -310431816 2 896 -310431820 2 896 -310431824 2 896 -310431828 2 896 -310431832 2 896 -310431836 2 896 -310431840 2 896 -310431844 2 896 -310431848 2 896 -310431852 2 896 -310431856 2 896 -310431860 2 896 -310431864 2 896 -310431868 2 896 -310431872 2 896 -310431876 2 896 -310431880 2 896 -310431884 2 896 -310431888 2 896 -310431892 2 896 -310431896 2 896 -310431900 2 896 -310431904 2 896 -310431908 2 896 -310431912 2 896 -310431916 2 896 -310431920 2 896 -310431924 2 896 -310431928 2 896 -310431932 2 896 -310431936 2 896 -310435844 2 896 -310435848 2 896 -310435852 2 896 -310435856 2 896 -310435860 2 896 -310435864 2 896 -310435868 2 896 -310435872 2 896 -310435876 2 896 -310435880 2 896 -310435884 2 896 -310435888 2 896 -310435892 2 896 -310435896 2 896 -310435900 2 896 -310435904 2 896 -310435908 2 896 -310435912 2 896 -310435916 2 896 -310435920 2 896 -310435924 2 896 -310435928 2 896 -310435932 2 896 -310435936 2 896 -310435940 2 896 -310435944 2 896 -310435948 2 896 -310435952 2 896 -310435956 2 896 -310435960 2 896 -310435964 2 896 -310435968 2 896 -310435972 2 896 -310435976 2 896 -310435980 2 896 -310435984 2 896 -310435988 2 896 -310435992 2 896 -310435996 2 896 -310436000 2 896 -310436004 2 896 -310436008 2 896 -310436012 2 896 -310436016 2 896 -310436020 2 896 -310436024 2 896 -310436028 2 896 -310436032 2 896 -310439940 2 896 -310439944 2 896 -310439948 2 896 -310439952 2 896 -310439956 2 896 -310439960 2 896 -310439964 2 896 -310439968 2 896 -310439972 2 896 -310439976 2 896 -310439980 2 896 -310439984 2 896 -310439988 2 896 -310439992 2 896 -310439996 2 896 -310440000 2 896 -310440004 2 896 -310440008 2 896 -310440012 2 896 -310440016 2 896 -310440020 2 896 -310440024 2 896 -310440028 2 896 -310440032 2 896 -310440036 2 896 -310440040 2 896 -310440044 2 896 -310440048 2 896 -310440052 2 896 -310440056 2 896 -310440060 2 896 -310440064 2 896 -310440068 2 896 -310440072 2 896 -310440076 2 896 -310440080 2 896 -310440084 2 896 -310440088 2 896 -310440092 2 896 -310440096 2 896 -310440100 2 896 -310440104 2 896 -310440108 2 896 -310440112 2 896 -310440116 2 896 -310440120 2 896 -310440124 2 896 -310440128 2 896 -310444036 2 896 -310444040 2 896 -310444044 2 896 -310444048 2 896 -310444052 2 896 -310444056 2 896 -310444060 2 896 -310444064 2 896 -310444068 2 896 -310444072 2 896 -310444076 2 896 -310444080 2 896 -310444084 2 896 -310444088 2 896 -310444092 2 896 -310444096 2 896 -310444100 2 896 -310444104 2 896 -310444108 2 896 -310444112 2 896 -310444116 2 896 -310444120 2 896 -310444124 2 896 -310444128 2 896 -310444132 2 896 -310444136 2 896 -310444140 2 896 -310444144 2 896 -310444148 2 896 -310444152 2 896 -310444156 2 896 -310444160 2 896 -310444164 2 896 -310444168 2 896 -310444172 2 896 -310444176 2 896 -310444180 2 896 -310444184 2 896 -310444188 2 896 -310444192 2 896 -310444196 2 896 -310444200 2 896 -310444204 2 896 -310444208 2 896 -310444212 2 896 -310444216 2 896 -310444220 2 896 -310444224 2 896 -310448132 2 896 -310448136 2 896 -310448140 2 896 -310448144 2 896 -310448148 2 896 -310448152 2 896 -310448156 2 896 -310448160 2 896 -310448164 2 896 -310448168 2 896 -310448172 2 896 -310448176 2 896 -310448180 2 896 -310448184 2 896 -310448188 2 896 -310448192 2 896 -310448196 2 896 -310448200 2 896 -310448204 2 896 -310448208 2 896 -310448212 2 896 -310448216 2 896 -310448220 2 896 -310448224 2 896 -310448228 2 896 -310448232 2 896 -310448236 2 896 -310448240 2 896 -310448244 2 896 -310448248 2 896 -310448252 2 896 -310448256 2 896 -310448260 2 896 -310448264 2 896 -310448268 2 896 -310448272 2 896 -310448276 2 896 -310448280 2 896 -310448284 2 896 -310448288 2 896 -310448292 2 896 -310448296 2 896 -310448300 2 896 -310448304 2 896 -310448308 2 896 -310448312 2 896 -310448316 2 896 -310448320 2 896 -310452228 2 896 -310452232 2 896 -310452236 2 896 -310452240 2 896 -310452244 2 896 -310452248 2 896 -310452252 2 896 -310452256 2 896 -310452260 2 896 -310452264 2 896 -310452268 2 896 -310452272 2 896 -310452276 2 896 -310452280 2 896 -310452284 2 896 -310452288 2 896 -310452292 2 896 -310452296 2 896 -310452300 2 896 -310452304 2 896 -310452308 2 896 -310452312 2 896 -310452316 2 896 -310452320 2 896 -310452324 2 896 -310452328 2 896 -310452332 2 896 -310452336 2 896 -310452340 2 896 -310452344 2 896 -310452348 2 896 -310452352 2 896 -310452356 2 896 -310452360 2 896 -310452364 2 896 -310452368 2 896 -310452372 2 896 -310452376 2 896 -310452380 2 896 -310452384 2 896 -310452388 2 896 -310452392 2 896 -310452396 2 896 -310452400 2 896 -310452404 2 896 -310452408 2 896 -310452412 2 896 -310452416 2 896 -310456324 2 896 -310456328 2 896 -310456332 2 896 -310456336 2 896 -310456340 2 896 -310456344 2 896 -310456348 2 896 -310456352 2 896 -310456356 2 896 -310456360 2 896 -310456364 2 896 -310456368 2 896 -310456372 2 896 -310456376 2 896 -310456380 2 896 -310456384 2 896 -310456388 2 896 -310456392 2 896 -310456396 2 896 -310456400 2 896 -310456404 2 896 -310456408 2 896 -310456412 2 896 -310456416 2 896 -310456420 2 896 -310456424 2 896 -310456428 2 896 -310456432 2 896 -310456436 2 896 -310456440 2 896 -310456444 2 896 -310456448 2 896 -310456452 2 896 -310456456 2 896 -310456460 2 896 -310456464 2 896 -310456468 2 896 -310456472 2 896 -310456476 2 896 -310456480 2 896 -310456484 2 896 -310456488 2 896 -310456492 2 896 -310456496 2 896 -310456500 2 896 -310456504 2 896 -310456508 2 896 -310456512 2 896 -310460420 2 896 -310460424 2 896 -310460428 2 896 -310460432 2 896 -310460436 2 896 -310460440 2 896 -310460444 2 896 -310460448 2 896 -310460452 2 896 -310460456 2 896 -310460460 2 896 -310460464 2 896 -310460468 2 896 -310460472 2 896 -310460476 2 896 -310460480 2 896 -310460484 2 896 -310460488 2 896 -310460492 2 896 -310460496 2 896 -310460500 2 896 -310460504 2 896 -310460508 2 896 -310460512 2 896 -310460516 2 896 -310460520 2 896 -310460524 2 896 -310460528 2 896 -310460532 2 896 -310460536 2 896 -310460540 2 896 -310460544 2 896 -310460548 2 896 -310460552 2 896 -310460556 2 896 -310460560 2 896 -310460564 2 896 -310460568 2 896 -310460572 2 896 -310460576 2 896 -310460580 2 896 -310460584 2 896 -310460588 2 896 -310460592 2 896 -310460596 2 896 -310460600 2 896 -310460604 2 896 -310460608 2 896 -310464516 2 896 -310464520 2 896 -310464524 2 896 -310464528 2 896 -310464532 2 896 -310464536 2 896 -310464540 2 896 -310464544 2 896 -310464548 2 896 -310464552 2 896 -310464556 2 896 -310464560 2 896 -310464564 2 896 -310464568 2 896 -310464572 2 896 -310464576 2 896 -310464580 2 896 -310464584 2 896 -310464588 2 896 -310464592 2 896 -310464596 2 896 -310464600 2 896 -310464604 2 896 -310464608 2 896 -310464612 2 896 -310464616 2 896 -310464620 2 896 -310464624 2 896 -310464628 2 896 -310464632 2 896 -310464636 2 896 -310464640 2 896 -310464644 2 896 -310464648 2 896 -310464652 2 896 -310464656 2 896 -310464660 2 896 -310464664 2 896 -310464668 2 896 -310464672 2 896 -310464676 2 896 -310464680 2 896 -310464684 2 896 -310464688 2 896 -310464692 2 896 -310464696 2 896 -310464700 2 896 -310464704 2 896 -310468612 2 896 -310468616 2 896 -310468620 2 896 -310468624 2 896 -310468628 2 896 -310468632 2 896 -310468636 2 896 -310468640 2 896 -310468644 2 896 -310468648 2 896 -310468652 2 896 -310468656 2 896 -310468660 2 896 -310468664 2 896 -310468668 2 896 -310468672 2 896 -310468676 2 896 -310468680 2 896 -310468684 2 896 -310468688 2 896 -310468692 2 896 -310468696 2 896 -310468700 2 896 -310468704 2 896 -310468708 2 896 -310468712 2 896 -310468716 2 896 -310468720 2 896 -310468724 2 896 -310468728 2 896 -310468732 2 896 -310468736 2 896 -310468740 2 896 -310468744 2 896 -310468748 2 896 -310468752 2 896 -310468756 2 896 -310468760 2 896 -310468764 2 896 -310468768 2 896 -310468772 2 896 -310468776 2 896 -310468780 2 896 -310468784 2 896 -310468788 2 896 -310468792 2 896 -310468796 2 896 -310468800 2 896 -310472708 2 896 -310472712 2 896 -310472716 2 896 -310472720 2 896 -310472724 2 896 -310472728 2 896 -310472732 2 896 -310472736 2 896 -310472740 2 896 -310472744 2 896 -310472748 2 896 -310472752 2 896 -310472756 2 896 -310472760 2 896 -310472764 2 896 -310472768 2 896 -310472772 2 896 -310472776 2 896 -310472780 2 896 -310472784 2 896 -310472788 2 896 -310472792 2 896 -310472796 2 896 -310472800 2 896 -310472804 2 896 -310472808 2 896 -310472812 2 896 -310472816 2 896 -310472820 2 896 -310472824 2 896 -310472828 2 896 -310472832 2 896 -310472836 2 896 -310472840 2 896 -310472844 2 896 -310472848 2 896 -310472852 2 896 -310472856 2 896 -310472860 2 896 -310472864 2 896 -310472868 2 896 -310472872 2 896 -310472876 2 896 -310472880 2 896 -310472884 2 896 -310472888 2 896 -310472892 2 896 -310472896 2 896 -310476804 2 896 -310476808 2 896 -310476812 2 896 -310476816 2 896 -310476820 2 896 -310476824 2 896 -310476828 2 896 -310476832 2 896 -310476836 2 896 -310476840 2 896 -310476844 2 896 -310476848 2 896 -310476852 2 896 -310476856 2 896 -310476860 2 896 -310476864 2 896 -310476868 2 896 -310476872 2 896 -310476876 2 896 -310476880 2 896 -310476884 2 896 -310476888 2 896 -310476892 2 896 -310476896 2 896 -310476900 2 896 -310476904 2 896 -310476908 2 896 -310476912 2 896 -310476916 2 896 -310476920 2 896 -310476924 2 896 -310476928 2 896 -310476932 2 896 -310476936 2 896 -310476940 2 896 -310476944 2 896 -310476948 2 896 -310476952 2 896 -310476956 2 896 -310476960 2 896 -310476964 2 896 -310476968 2 896 -310476972 2 896 -310476976 2 896 -310476980 2 896 -310476984 2 896 -310476988 2 896 -310476992 2 896 -310480900 2 896 -310480904 2 896 -310480908 2 896 -310480912 2 896 -310480916 2 896 -310480920 2 896 -310480924 2 896 -310480928 2 896 -310480932 2 896 -310480936 2 896 -310480940 2 896 -310480944 2 896 -310480948 2 896 -310480952 2 896 -310480956 2 896 -310480960 2 896 -310480964 2 896 -310480968 2 896 -310480972 2 896 -310480976 2 896 -310480980 2 896 -310480984 2 896 -310480988 2 896 -310480992 2 896 -310480996 2 896 -310481000 2 896 -310481004 2 896 -310481008 2 896 -310481012 2 896 -310481016 2 896 -310481020 2 896 -310481024 2 896 -310481028 2 896 -310481032 2 896 -310481036 2 896 -310481040 2 896 -310481044 2 896 -310481048 2 896 -310481052 2 896 -310481056 2 896 -310481060 2 896 -310481064 2 896 -310481068 2 896 -310481072 2 896 -310481076 2 896 -310481080 2 896 -310481084 2 896 -310481088 2 896 -310484996 2 896 -310485000 2 896 -310485004 2 896 -310485008 2 896 -310485012 2 896 -310485016 2 896 -310485020 2 896 -310485024 2 896 -310485028 2 896 -310485032 2 896 -310485036 2 896 -310485040 2 896 -310485044 2 896 -310485048 2 896 -310485052 2 896 -310485056 2 896 -310485060 2 896 -310485064 2 896 -310485068 2 896 -310485072 2 896 -310485076 2 896 -310485080 2 896 -310485084 2 896 -310485088 2 896 -310485092 2 896 -310485096 2 896 -310485100 2 896 -310485104 2 896 -310485108 2 896 -310485112 2 896 -310485116 2 896 -310485120 2 896 -310485124 2 896 -310485128 2 896 -310485132 2 896 -310485136 2 896 -310485140 2 896 -310485144 2 896 -310485148 2 896 -310485152 2 896 -310485156 2 896 -310485160 2 896 -310485164 2 896 -310485168 2 896 -310485172 2 896 -310485176 2 896 -310485180 2 896 -310485184 2 896 -310489092 2 896 -310489096 2 896 -310489100 2 896 -310489104 2 896 -310489108 2 896 -310489112 2 896 -310489116 2 896 -310489120 2 896 -310489124 2 896 -310489128 2 896 -310489132 2 896 -310489136 2 896 -310489140 2 896 -310489144 2 896 -310489148 2 896 -310489152 2 896 -310489156 2 896 -310489160 2 896 -310489164 2 896 -310489168 2 896 -310489172 2 896 -310489176 2 896 -310489180 2 896 -310489184 2 896 -310489188 2 896 -310489192 2 896 -310489196 2 896 -310489200 2 896 -310489204 2 896 -310489208 2 896 -310489212 2 896 -310489216 2 896 -310489220 2 896 -310489224 2 896 -310489228 2 896 -310489232 2 896 -310489236 2 896 -310489240 2 896 -310489244 2 896 -310489248 2 896 -310489252 2 896 -310489256 2 896 -310489260 2 896 -310489264 2 896 -310489268 2 896 -310489272 2 896 -310489276 2 896 -310489280 2 896 -310493188 2 896 -310493192 2 896 -310493196 2 896 -310493200 2 896 -310493204 2 896 -310493208 2 896 -310493212 2 896 -310493216 2 896 -310493220 2 896 -310493224 2 896 -310493228 2 896 -310493232 2 896 -310493236 2 896 -310493240 2 896 -310493244 2 896 -310493248 2 896 -310493252 2 896 -310493256 2 896 -310493260 2 896 -310493264 2 896 -310493268 2 896 -310493272 2 896 -310493276 2 896 -310493280 2 896 -310493284 2 896 -310493288 2 896 -310493292 2 896 -310493296 2 896 -310493300 2 896 -310493304 2 896 -310493308 2 896 -310493312 2 896 -310493316 2 896 -310493320 2 896 -310493324 2 896 -310493328 2 896 -310493332 2 896 -310493336 2 896 -310493340 2 896 -310493344 2 896 -310493348 2 896 -310493352 2 896 -310493356 2 896 -310493360 2 896 -310493364 2 896 -310493368 2 896 -310493372 2 896 -310493376 2 896 -310497284 2 896 -310497288 2 896 -310497292 2 896 -310497296 2 896 -310497300 2 896 -310497304 2 896 -310497308 2 896 -310497312 2 896 -310497316 2 896 -310497320 2 896 -310497324 2 896 -310497328 2 896 -310497332 2 896 -310497336 2 896 -310497340 2 896 -310497344 2 896 -310497348 2 896 -310497352 2 896 -310497356 2 896 -310497360 2 896 -310497364 2 896 -310497368 2 896 -310497372 2 896 -310497376 2 896 -310497380 2 896 -310497384 2 896 -310497388 2 896 -310497392 2 896 -310497396 2 896 -310497400 2 896 -310497404 2 896 -310497408 2 896 -310497412 2 896 -310497416 2 896 -310497420 2 896 -310497424 2 896 -310497428 2 896 -310497432 2 896 -310497436 2 896 -310497440 2 896 -310497444 2 896 -310497448 2 896 -310497452 2 896 -310497456 2 896 -310497460 2 896 -310497464 2 896 -310497468 2 896 -310497472 2 896 -310501380 2 896 -310501384 2 896 -310501388 2 896 -310501392 2 896 -310501396 2 896 -310501400 2 896 -310501404 2 896 -310501408 2 896 -310501412 2 896 -310501416 2 896 -310501420 2 896 -310501424 2 896 -310501428 2 896 -310501432 2 896 -310501436 2 896 -310501440 2 896 -310501444 2 896 -310501448 2 896 -310501452 2 896 -310501456 2 896 -310501460 2 896 -310501464 2 896 -310501468 2 896 -310501472 2 896 -310501476 2 896 -310501480 2 896 -310501484 2 896 -310501488 2 896 -310501492 2 896 -310501496 2 896 -310501500 2 896 -310501504 2 896 -310501508 2 896 -310501512 2 896 -310501516 2 896 -310501520 2 896 -310501524 2 896 -310501528 2 896 -310501532 2 896 -310501536 2 896 -310501540 2 896 -310501544 2 896 -310501548 2 896 -310501552 2 896 -310501556 2 896 -310501560 2 896 -310501564 2 896 -310501568 2 896 -310505476 2 896 -310505480 2 896 -310505484 2 896 -310505488 2 896 -310505492 2 896 -310505496 2 896 -310505500 2 896 -310505504 2 896 -310505508 2 896 -310505512 2 896 -310505516 2 896 -310505520 2 896 -310505524 2 896 -310505528 2 896 -310505532 2 896 -310505536 2 896 -310505540 2 896 -310505544 2 896 -310505548 2 896 -310505552 2 896 -310505556 2 896 -310505560 2 896 -310505564 2 896 -310505568 2 896 -310505572 2 896 -310505576 2 896 -310505580 2 896 -310505584 2 896 -310505588 2 896 -310505592 2 896 -310505596 2 896 -310505600 2 896 -310505604 2 896 -310505608 2 896 -310505612 2 896 -310505616 2 896 -310505620 2 896 -310505624 2 896 -310505628 2 896 -310505632 2 896 -310505636 2 896 -310505640 2 896 -310505644 2 896 -310505648 2 896 -310505652 2 896 -310505656 2 896 -310505660 2 896 -310505664 2 896 -310509572 2 896 -310509576 2 896 -310509580 2 896 -310509584 2 896 -310509588 2 896 -310509592 2 896 -310509596 2 896 -310509600 2 896 -310509604 2 896 -310509608 2 896 -310509612 2 896 -310509616 2 896 -310509620 2 896 -310509624 2 896 -310509628 2 896 -310509632 2 896 -310509636 2 896 -310509640 2 896 -310509644 2 896 -310509648 2 896 -310509652 2 896 -310509656 2 896 -310509660 2 896 -310509664 2 896 -310509668 2 896 -310509672 2 896 -310509676 2 896 -310509680 2 896 -310509684 2 896 -310509688 2 896 -310509692 2 896 -310509696 2 896 -310509700 2 896 -310509704 2 896 -310509708 2 896 -310509712 2 896 -310509716 2 896 -310509720 2 896 -310509724 2 896 -310509728 2 896 -310509732 2 896 -310509736 2 896 -310509740 2 896 -310509744 2 896 -310509748 2 896 -310509752 2 896 -310509756 2 896 -310509760 2 896 -310513668 2 896 -310513672 2 896 -310513676 2 896 -310513680 2 896 -310513684 2 896 -310513688 2 896 -310513692 2 896 -310513696 2 896 -310513700 2 896 -310513704 2 896 -310513708 2 896 -310513712 2 896 -310513716 2 896 -310513720 2 896 -310513724 2 896 -310513728 2 896 -310513732 2 896 -310513736 2 896 -310513740 2 896 -310513744 2 896 -310513748 2 896 -310513752 2 896 -310513756 2 896 -310513760 2 896 -310513764 2 896 -310513768 2 896 -310513772 2 896 -310513776 2 896 -310513780 2 896 -310513784 2 896 -310513788 2 896 -310513792 2 896 -310513796 2 896 -310513800 2 896 -310513804 2 896 -310513808 2 896 -310513812 2 896 -310513816 2 896 -310513820 2 896 -310513824 2 896 -310513828 2 896 -310513832 2 896 -310513836 2 896 -310513840 2 896 -310513844 2 896 -310513848 2 896 -310513852 2 896 -310513856 2 896 -310517764 2 896 -310517768 2 896 -310517772 2 896 -310517776 2 896 -310517780 2 896 -310517784 2 896 -310517788 2 896 -310517792 2 896 -310517796 2 896 -310517800 2 896 -310517804 2 896 -310517808 2 896 -310517812 2 896 -310517816 2 896 -310517820 2 896 -310517824 2 896 -310517828 2 896 -310517832 2 896 -310517836 2 896 -310517840 2 896 -310517844 2 896 -310517848 2 896 -310517852 2 896 -310517856 2 896 -310517860 2 896 -310517864 2 896 -310517868 2 896 -310517872 2 896 -310517876 2 896 -310517880 2 896 -310517884 2 896 -310517888 2 896 -310517892 2 896 -310517896 2 896 -310517900 2 896 -310517904 2 896 -310517908 2 896 -310517912 2 896 -310517916 2 896 -310517920 2 896 -310517924 2 896 -310517928 2 896 -310517932 2 896 -310517936 2 896 -310517940 2 896 -310517944 2 896 -310517948 2 896 -310517952 2 896 -310521860 2 896 -310521864 2 896 -310521868 2 896 -310521872 2 896 -310521876 2 896 -310521880 2 896 -310521884 2 896 -310521888 2 896 -310521892 2 896 -310521896 2 896 -310521900 2 896 -310521904 2 896 -310521908 2 896 -310521912 2 896 -310521916 2 896 -310521920 2 896 -310521924 2 896 -310521928 2 896 -310521932 2 896 -310521936 2 896 -310521940 2 896 -310521944 2 896 -310521948 2 896 -310521952 2 896 -310521956 2 896 -310521960 2 896 -310521964 2 896 -310521968 2 896 -310521972 2 896 -310521976 2 896 -310521980 2 896 -310521984 2 896 -310521988 2 896 -310521992 2 896 -310521996 2 896 -310522000 2 896 -310522004 2 896 -310522008 2 896 -310522012 2 896 -310522016 2 896 -310522020 2 896 -310522024 2 896 -310522028 2 896 -310522032 2 896 -310522036 2 896 -310522040 2 896 -310522044 2 896 -310522048 2 896 -310525956 2 896 -310525960 2 896 -310525964 2 896 -310525968 2 896 -310525972 2 896 -310525976 2 896 -310525980 2 896 -310525984 2 896 -310525988 2 896 -310525992 2 896 -310525996 2 896 -310526000 2 896 -310526004 2 896 -310526008 2 896 -310526012 2 896 -310526016 2 896 -310526020 2 896 -310526024 2 896 -310526028 2 896 -310526032 2 896 -310526036 2 896 -310526040 2 896 -310526044 2 896 -310526048 2 896 -310526052 2 896 -310526056 2 896 -310526060 2 896 -310526064 2 896 -310526068 2 896 -310526072 2 896 -310526076 2 896 -310526080 2 896 -310526084 2 896 -310526088 2 896 -310526092 2 896 -310526096 2 896 -310526100 2 896 -310526104 2 896 -310526108 2 896 -310526112 2 896 -310526116 2 896 -310526120 2 896 -310526124 2 896 -310526128 2 896 -310526132 2 896 -310526136 2 896 -310526140 2 896 -310526144 2 896 -310530052 2 896 -310530056 2 896 -310530060 2 896 -310530064 2 896 -310530068 2 896 -310530072 2 896 -310530076 2 896 -310530080 2 896 -310530084 2 896 -310530088 2 896 -310530092 2 896 -310530096 2 896 -310530100 2 896 -310530104 2 896 -310530108 2 896 -310530112 2 896 -310530116 2 896 -310530120 2 896 -310530124 2 896 -310530128 2 896 -310530132 2 896 -310530136 2 896 -310530140 2 896 -310530144 2 896 -310530148 2 896 -310530152 2 896 -310530156 2 896 -310530160 2 896 -310530164 2 896 -310530168 2 896 -310530172 2 896 -310530176 2 896 -310530180 2 896 -310530184 2 896 -310530188 2 896 -310530192 2 896 -310530196 2 896 -310530200 2 896 -310530204 2 896 -310530208 2 896 -310530212 2 896 -310530216 2 896 -310530220 2 896 -310530224 2 896 -310530228 2 896 -310530232 2 896 -310530236 2 896 -310530240 2 896 -310534148 2 896 -310534152 2 896 -310534156 2 896 -310534160 2 896 -310534164 2 896 -310534168 2 896 -310534172 2 896 -310534176 2 896 -310534180 2 896 -310534184 2 896 -310534188 2 896 -310534192 2 896 -310534196 2 896 -310534200 2 896 -310534204 2 896 -310534208 2 896 -310534212 2 896 -310534216 2 896 -310534220 2 896 -310534224 2 896 -310534228 2 896 -310534232 2 896 -310534236 2 896 -310534240 2 896 -310534244 2 896 -310534248 2 896 -310534252 2 896 -310534256 2 896 -310534260 2 896 -310534264 2 896 -310534268 2 896 -310534272 2 896 -310534276 2 896 -310534280 2 896 -310534284 2 896 -310534288 2 896 -310534292 2 896 -310534296 2 896 -310534300 2 896 -310534304 2 896 -310534308 2 896 -310534312 2 896 -310534316 2 896 -310534320 2 896 -310534324 2 896 -310534328 2 896 -310534332 2 896 -310534336 2 896 -310538244 2 896 -310538248 2 896 -310538252 2 896 -310538256 2 896 -310538260 2 896 -310538264 2 896 -310538268 2 896 -310538272 2 896 -310538276 2 896 -310538280 2 896 -310538284 2 896 -310538288 2 896 -310538292 2 896 -310538296 2 896 -310538300 2 896 -310538304 2 896 -310538308 2 896 -310538312 2 896 -310538316 2 896 -310538320 2 896 -310538324 2 896 -310538328 2 896 -310538332 2 896 -310538336 2 896 -310538340 2 896 -310538344 2 896 -310538348 2 896 -310538352 2 896 -310538356 2 896 -310538360 2 896 -310538364 2 896 -310538368 2 896 -310538372 2 896 -310538376 2 896 -310538380 2 896 -310538384 2 896 -310538388 2 896 -310538392 2 896 -310538396 2 896 -310538400 2 896 -310538404 2 896 -310538408 2 896 -310538412 2 896 -310538416 2 896 -310538420 2 896 -310538424 2 896 -310538428 2 896 -310538432 2 896 -310542340 2 896 -310542344 2 896 -310542348 2 896 -310542352 2 896 -310542356 2 896 -310542360 2 896 -310542364 2 896 -310542368 2 896 -310542372 2 896 -310542376 2 896 -310542380 2 896 -310542384 2 896 -310542388 2 896 -310542392 2 896 -310542396 2 896 -310542400 2 896 -310542404 2 896 -310542408 2 896 -310542412 2 896 -310542416 2 896 -310542420 2 896 -310542424 2 896 -310542428 2 896 -310542432 2 896 -310542436 2 896 -310542440 2 896 -310542444 2 896 -310542448 2 896 -310542452 2 896 -310542456 2 896 -310542460 2 896 -310542464 2 896 -310542468 2 896 -310542472 2 896 -310542476 2 896 -310542480 2 896 -310542484 2 896 -310542488 2 896 -310542492 2 896 -310542496 2 896 -310542500 2 896 -310542504 2 896 -310542508 2 896 -310542512 2 896 -310542516 2 896 -310542520 2 896 -310542524 2 896 -310542528 2 896 -310546436 2 896 -310546440 2 896 -310546444 2 896 -310546448 2 896 -310546452 2 896 -310546456 2 896 -310546460 2 896 -310546464 2 896 -310546468 2 896 -310546472 2 896 -310546476 2 896 -310546480 2 896 -310546484 2 896 -310546488 2 896 -310546492 2 896 -310546496 2 896 -310546500 2 896 -310546504 2 896 -310546508 2 896 -310546512 2 896 -310546516 2 896 -310546520 2 896 -310546524 2 896 -310546528 2 896 -310546532 2 896 -310546536 2 896 -310546540 2 896 -310546544 2 896 -310546548 2 896 -310546552 2 896 -310546556 2 896 -310546560 2 896 -310546564 2 896 -310546568 2 896 -310546572 2 896 -310546576 2 896 -310546580 2 896 -310546584 2 896 -310546588 2 896 -310546592 2 896 -310546596 2 896 -310546600 2 896 -310546604 2 896 -310546608 2 896 -310546612 2 896 -310546616 2 896 -310546620 2 896 -310546624 2 896 -310550532 2 896 -310550536 2 896 -310550540 2 896 -310550544 2 896 -310550548 2 896 -310550552 2 896 -310550556 2 896 -310550560 2 896 -310550564 2 896 -310550568 2 896 -310550572 2 896 -310550576 2 896 -310550580 2 896 -310550584 2 896 -310550588 2 896 -310550592 2 896 -310550596 2 896 -310550600 2 896 -310550604 2 896 -310550608 2 896 -310550612 2 896 -310550616 2 896 -310550620 2 896 -310550624 2 896 -310550628 2 896 -310550632 2 896 -310550636 2 896 -310550640 2 896 -310550644 2 896 -310550648 2 896 -310550652 2 896 -310550656 2 896 -310550660 2 896 -310550664 2 896 -310550668 2 896 -310550672 2 896 -310550676 2 896 -310550680 2 896 -310550684 2 896 -310550688 2 896 -310550692 2 896 -310550696 2 896 -310550700 2 896 -310550704 2 896 -310550708 2 896 -310550712 2 896 -310550716 2 896 -310550720 2 896 -310554628 2 896 -310554632 2 896 -310554636 2 896 -310554640 2 896 -310554644 2 896 -310554648 2 896 -310554652 2 896 -310554656 2 896 -310554660 2 896 -310554664 2 896 -310554668 2 896 -310554672 2 896 -310554676 2 896 -310554680 2 896 -310554684 2 896 -310554688 2 896 -310554692 2 896 -310554696 2 896 -310554700 2 896 -310554704 2 896 -310554708 2 896 -310554712 2 896 -310554716 2 896 -310554720 2 896 -310554724 2 896 -310554728 2 896 -310554732 2 896 -310554736 2 896 -310554740 2 896 -310554744 2 896 -310554748 2 896 -310554752 2 896 -310554756 2 896 -310554760 2 896 -310554764 2 896 -310554768 2 896 -310554772 2 896 -310554776 2 896 -310554780 2 896 -310554784 2 896 -310554788 2 896 -310554792 2 896 -310554796 2 896 -310554800 2 896 -310554804 2 896 -310554808 2 896 -310554812 2 896 -310554816 2 896 -310558724 2 896 -310558728 2 896 -310558732 2 896 -310558736 2 896 -310558740 2 896 -310558744 2 896 -310558748 2 896 -310558752 2 896 -310558756 2 896 -310558760 2 896 -310558764 2 896 -310558768 2 896 -310558772 2 896 -310558776 2 896 -310558780 2 896 -310558784 2 896 -310558788 2 896 -310558792 2 896 -310558796 2 896 -310558800 2 896 -310558804 2 896 -310558808 2 896 -310558812 2 896 -310558816 2 896 -310558820 2 896 -310558824 2 896 -310558828 2 896 -310558832 2 896 -310558836 2 896 -310558840 2 896 -310558844 2 896 -310558848 2 896 -310558852 2 896 -310558856 2 896 -310558860 2 896 -310558864 2 896 -310558868 2 896 -310558872 2 896 -310558876 2 896 -310558880 2 896 -310558884 2 896 -310558888 2 896 -310558892 2 896 -310558896 2 896 -310558900 2 896 -310558904 2 896 -310558908 2 896 -310558912 2 896 -310562820 2 896 -310562824 2 896 -310562828 2 896 -310562832 2 896 -310562836 2 896 -310562840 2 896 -310562844 2 896 -310562848 2 896 -310562852 2 896 -310562856 2 896 -310562860 2 896 -310562864 2 896 -310562868 2 896 -310562872 2 896 -310562876 2 896 -310562880 2 896 -310562884 2 896 -310562888 2 896 -310562892 2 896 -310562896 2 896 -310562900 2 896 -310562904 2 896 -310562908 2 896 -310562912 2 896 -310562916 2 896 -310562920 2 896 -310562924 2 896 -310562928 2 896 -310562932 2 896 -310562936 2 896 -310562940 2 896 -310562944 2 896 -310562948 2 896 -310562952 2 896 -310562956 2 896 -310562960 2 896 -310562964 2 896 -310562968 2 896 -310562972 2 896 -310562976 2 896 -310562980 2 896 -310562984 2 896 -310562988 2 896 -310562992 2 896 -310562996 2 896 -310563000 2 896 -310563004 2 896 -310563008 2 896 -310566916 2 896 -310566920 2 896 -310566924 2 896 -310566928 2 896 -310566932 2 896 -310566936 2 896 -310566940 2 896 -310566944 2 896 -310566948 2 896 -310566952 2 896 -310566956 2 896 -310566960 2 896 -310566964 2 896 -310566968 2 896 -310566972 2 896 -310566976 2 896 -310566980 2 896 -310566984 2 896 -310566988 2 896 -310566992 2 896 -310566996 2 896 -310567000 2 896 -310567004 2 896 -310567008 2 896 -310567012 2 896 -310567016 2 896 -310567020 2 896 -310567024 2 896 -310567028 2 896 -310567032 2 896 -310567036 2 896 -310567040 2 896 -310567044 2 896 -310567048 2 896 -310567052 2 896 -310567056 2 896 -310567060 2 896 -310567064 2 896 -310567068 2 896 -310567072 2 896 -310567076 2 896 -310567080 2 896 -310567084 2 896 -310567088 2 896 -310567092 2 896 -310567096 2 896 -310567100 2 896 -310567104 2 896 -310571012 2 896 -310571016 2 896 -310571020 2 896 -310571024 2 896 -310571028 2 896 -310571032 2 896 -310571036 2 896 -310571040 2 896 -310571044 2 896 -310571048 2 896 -310571052 2 896 -310571056 2 896 -310571060 2 896 -310571064 2 896 -310571068 2 896 -310571072 2 896 -310571076 2 896 -310571080 2 896 -310571084 2 896 -310571088 2 896 -310571092 2 896 -310571096 2 896 -310571100 2 896 -310571104 2 896 -310571108 2 896 -310571112 2 896 -310571116 2 896 -310571120 2 896 -310571124 2 896 -310571128 2 896 -310571132 2 896 -310571136 2 896 -310571140 2 896 -310571144 2 896 -310571148 2 896 -310571152 2 896 -310571156 2 896 -310571160 2 896 -310571164 2 896 -310571168 2 896 -310571172 2 896 -310571176 2 896 -310571180 2 896 -310571184 2 896 -310571188 2 896 -310571192 2 896 -310571196 2 896 -310571200 2 896 -310575108 2 896 -310575112 2 896 -310575116 2 896 -310575120 2 896 -310575124 2 896 -310575128 2 896 -310575132 2 896 -310575136 2 896 -310575140 2 896 -310575144 2 896 -310575148 2 896 -310575152 2 896 -310575156 2 896 -310575160 2 896 -310575164 2 896 -310575168 2 896 -310575172 2 896 -310575176 2 896 -310575180 2 896 -310575184 2 896 -310575188 2 896 -310575192 2 896 -310575196 2 896 -310575200 2 896 -310575204 2 896 -310575208 2 896 -310575212 2 896 -310575216 2 896 -310575220 2 896 -310575224 2 896 -310575228 2 896 -310575232 2 896 -310575236 2 896 -310575240 2 896 -310575244 2 896 -310575248 2 896 -310575252 2 896 -310575256 2 896 -310575260 2 896 -310575264 2 896 -310575268 2 896 -310575272 2 896 -310575276 2 896 -310575280 2 896 -310575284 2 896 -310575288 2 896 -310575292 2 896 -310575296 2 896 -311431172 2 896 -311431176 2 896 -311431180 2 896 -311431184 2 896 -311431188 2 896 -311431192 2 896 -311431196 2 896 -311431200 2 896 -311431204 2 896 -311431208 2 896 -311431212 2 896 -311431216 2 896 -311431220 2 896 -311431224 2 896 -311431228 2 896 -311431232 2 896 -311431236 2 896 -311431240 2 896 -311431244 2 896 -311431248 2 896 -311431252 2 896 -311431256 2 896 -311431260 2 896 -311431264 2 896 -311431268 2 896 -311431272 2 896 -311431276 2 896 -311431280 2 896 -311431284 2 896 -311431288 2 896 -311431292 2 896 -311431296 2 896 -311431300 2 896 -311431304 2 896 -311431308 2 896 -311431312 2 896 -311431316 2 896 -311431320 2 896 -311431324 2 896 -311431328 2 896 -311431332 2 896 -311431336 2 896 -311431340 2 896 -311431344 2 896 -311431348 2 896 -311431352 2 896 -311431356 2 896 -311431360 2 896 -311435268 2 896 -311435272 2 896 -311435276 2 896 -311435280 2 896 -311435284 2 896 -311435288 2 896 -311435292 2 896 -311435296 2 896 -311435300 2 896 -311435304 2 896 -311435308 2 896 -311435312 2 896 -311435316 2 896 -311435320 2 896 -311435324 2 896 -311435328 2 896 -311435332 2 896 -311435336 2 896 -311435340 2 896 -311435344 2 896 -311435348 2 896 -311435352 2 896 -311435356 2 896 -311435360 2 896 -311435364 2 896 -311435368 2 896 -311435372 2 896 -311435376 2 896 -311435380 2 896 -311435384 2 896 -311435388 2 896 -311435392 2 896 -311435396 2 896 -311435400 2 896 -311435404 2 896 -311435408 2 896 -311435412 2 896 -311435416 2 896 -311435420 2 896 -311435424 2 896 -311435428 2 896 -311435432 2 896 -311435436 2 896 -311435440 2 896 -311435444 2 896 -311435448 2 896 -311435452 2 896 -311435456 2 896 -311439364 2 896 -311439368 2 896 -311439372 2 896 -311439376 2 896 -311439380 2 896 -311439384 2 896 -311439388 2 896 -311439392 2 896 -311439396 2 896 -311439400 2 896 -311439404 2 896 -311439408 2 896 -311439412 2 896 -311439416 2 896 -311439420 2 896 -311439424 2 896 -311439428 2 896 -311439432 2 896 -311439436 2 896 -311439440 2 896 -311439444 2 896 -311439448 2 896 -311439452 2 896 -311439456 2 896 -311439460 2 896 -311439464 2 896 -311439468 2 896 -311439472 2 896 -311439476 2 896 -311439480 2 896 -311439484 2 896 -311439488 2 896 -311439492 2 896 -311439496 2 896 -311439500 2 896 -311439504 2 896 -311439508 2 896 -311439512 2 896 -311439516 2 896 -311439520 2 896 -311439524 2 896 -311439528 2 896 -311439532 2 896 -311439536 2 896 -311439540 2 896 -311439544 2 896 -311439548 2 896 -311439552 2 896 -311443460 2 896 -311443464 2 896 -311443468 2 896 -311443472 2 896 -311443476 2 896 -311443480 2 896 -311443484 2 896 -311443488 2 896 -311443492 2 896 -311443496 2 896 -311443500 2 896 -311443504 2 896 -311443508 2 896 -311443512 2 896 -311443516 2 896 -311443520 2 896 -311443524 2 896 -311443528 2 896 -311443532 2 896 -311443536 2 896 -311443540 2 896 -311443544 2 896 -311443548 2 896 -311443552 2 896 -311443556 2 896 -311443560 2 896 -311443564 2 896 -311443568 2 896 -311443572 2 896 -311443576 2 896 -311443580 2 896 -311443584 2 896 -311443588 2 896 -311443592 2 896 -311443596 2 896 -311443600 2 896 -311443604 2 896 -311443608 2 896 -311443612 2 896 -311443616 2 896 -311443620 2 896 -311443624 2 896 -311443628 2 896 -311443632 2 896 -311443636 2 896 -311443640 2 896 -311443644 2 896 -311443648 2 896 -311447556 2 896 -311447560 2 896 -311447564 2 896 -311447568 2 896 -311447572 2 896 -311447576 2 896 -311447580 2 896 -311447584 2 896 -311447588 2 896 -311447592 2 896 -311447596 2 896 -311447600 2 896 -311447604 2 896 -311447608 2 896 -311447612 2 896 -311447616 2 896 -311447620 2 896 -311447624 2 896 -311447628 2 896 -311447632 2 896 -311447636 2 896 -311447640 2 896 -311447644 2 896 -311447648 2 896 -311447652 2 896 -311447656 2 896 -311447660 2 896 -311447664 2 896 -311447668 2 896 -311447672 2 896 -311447676 2 896 -311447680 2 896 -311447684 2 896 -311447688 2 896 -311447692 2 896 -311447696 2 896 -311447700 2 896 -311447704 2 896 -311447708 2 896 -311447712 2 896 -311447716 2 896 -311447720 2 896 -311447724 2 896 -311447728 2 896 -311447732 2 896 -311447736 2 896 -311447740 2 896 -311447744 2 896 -311451652 2 896 -311451656 2 896 -311451660 2 896 -311451664 2 896 -311451668 2 896 -311451672 2 896 -311451676 2 896 -311451680 2 896 -311451684 2 896 -311451688 2 896 -311451692 2 896 -311451696 2 896 -311451700 2 896 -311451704 2 896 -311451708 2 896 -311451712 2 896 -311451716 2 896 -311451720 2 896 -311451724 2 896 -311451728 2 896 -311451732 2 896 -311451736 2 896 -311451740 2 896 -311451744 2 896 -311451748 2 896 -311451752 2 896 -311451756 2 896 -311451760 2 896 -311451764 2 896 -311451768 2 896 -311451772 2 896 -311451776 2 896 -311451780 2 896 -311451784 2 896 -311451788 2 896 -311451792 2 896 -311451796 2 896 -311451800 2 896 -311451804 2 896 -311451808 2 896 -311451812 2 896 -311451816 2 896 -311451820 2 896 -311451824 2 896 -311451828 2 896 -311451832 2 896 -311451836 2 896 -311451840 2 896 -311455748 2 896 -311455752 2 896 -311455756 2 896 -311455760 2 896 -311455764 2 896 -311455768 2 896 -311455772 2 896 -311455776 2 896 -311455780 2 896 -311455784 2 896 -311455788 2 896 -311455792 2 896 -311455796 2 896 -311455800 2 896 -311455804 2 896 -311455808 2 896 -311455812 2 896 -311455816 2 896 -311455820 2 896 -311455824 2 896 -311455828 2 896 -311455832 2 896 -311455836 2 896 -311455840 2 896 -311455844 2 896 -311455848 2 896 -311455852 2 896 -311455856 2 896 -311455860 2 896 -311455864 2 896 -311455868 2 896 -311455872 2 896 -311455876 2 896 -311455880 2 896 -311455884 2 896 -311455888 2 896 -311455892 2 896 -311455896 2 896 -311455900 2 896 -311455904 2 896 -311455908 2 896 -311455912 2 896 -311455916 2 896 -311455920 2 896 -311455924 2 896 -311455928 2 896 -311455932 2 896 -311455936 2 896 -311459844 2 896 -311459848 2 896 -311459852 2 896 -311459856 2 896 -311459860 2 896 -311459864 2 896 -311459868 2 896 -311459872 2 896 -311459876 2 896 -311459880 2 896 -311459884 2 896 -311459888 2 896 -311459892 2 896 -311459896 2 896 -311459900 2 896 -311459904 2 896 -311459908 2 896 -311459912 2 896 -311459916 2 896 -311459920 2 896 -311459924 2 896 -311459928 2 896 -311459932 2 896 -311459936 2 896 -311459940 2 896 -311459944 2 896 -311459948 2 896 -311459952 2 896 -311459956 2 896 -311459960 2 896 -311459964 2 896 -311459968 2 896 -311459972 2 896 -311459976 2 896 -311459980 2 896 -311459984 2 896 -311459988 2 896 -311459992 2 896 -311459996 2 896 -311460000 2 896 -311460004 2 896 -311460008 2 896 -311460012 2 896 -311460016 2 896 -311460020 2 896 -311460024 2 896 -311460028 2 896 -311460032 2 896 -311463940 2 896 -311463944 2 896 -311463948 2 896 -311463952 2 896 -311463956 2 896 -311463960 2 896 -311463964 2 896 -311463968 2 896 -311463972 2 896 -311463976 2 896 -311463980 2 896 -311463984 2 896 -311463988 2 896 -311463992 2 896 -311463996 2 896 -311464000 2 896 -311464004 2 896 -311464008 2 896 -311464012 2 896 -311464016 2 896 -311464020 2 896 -311464024 2 896 -311464028 2 896 -311464032 2 896 -311464036 2 896 -311464040 2 896 -311464044 2 896 -311464048 2 896 -311464052 2 896 -311464056 2 896 -311464060 2 896 -311464064 2 896 -311464068 2 896 -311464072 2 896 -311464076 2 896 -311464080 2 896 -311464084 2 896 -311464088 2 896 -311464092 2 896 -311464096 2 896 -311464100 2 896 -311464104 2 896 -311464108 2 896 -311464112 2 896 -311464116 2 896 -311464120 2 896 -311464124 2 896 -311464128 2 896 -311468036 2 896 -311468040 2 896 -311468044 2 896 -311468048 2 896 -311468052 2 896 -311468056 2 896 -311468060 2 896 -311468064 2 896 -311468068 2 896 -311468072 2 896 -311468076 2 896 -311468080 2 896 -311468084 2 896 -311468088 2 896 -311468092 2 896 -311468096 2 896 -311468100 2 896 -311468104 2 896 -311468108 2 896 -311468112 2 896 -311468116 2 896 -311468120 2 896 -311468124 2 896 -311468128 2 896 -311468132 2 896 -311468136 2 896 -311468140 2 896 -311468144 2 896 -311468148 2 896 -311468152 2 896 -311468156 2 896 -311468160 2 896 -311468164 2 896 -311468168 2 896 -311468172 2 896 -311468176 2 896 -311468180 2 896 -311468184 2 896 -311468188 2 896 -311468192 2 896 -311468196 2 896 -311468200 2 896 -311468204 2 896 -311468208 2 896 -311468212 2 896 -311468216 2 896 -311468220 2 896 -311468224 2 896 -311472132 2 896 -311472136 2 896 -311472140 2 896 -311472144 2 896 -311472148 2 896 -311472152 2 896 -311472156 2 896 -311472160 2 896 -311472164 2 896 -311472168 2 896 -311472172 2 896 -311472176 2 896 -311472180 2 896 -311472184 2 896 -311472188 2 896 -311472192 2 896 -311472196 2 896 -311472200 2 896 -311472204 2 896 -311472208 2 896 -311472212 2 896 -311472216 2 896 -311472220 2 896 -311472224 2 896 -311472228 2 896 -311472232 2 896 -311472236 2 896 -311472240 2 896 -311472244 2 896 -311472248 2 896 -311472252 2 896 -311472256 2 896 -311472260 2 896 -311472264 2 896 -311472268 2 896 -311472272 2 896 -311472276 2 896 -311472280 2 896 -311472284 2 896 -311472288 2 896 -311472292 2 896 -311472296 2 896 -311472300 2 896 -311472304 2 896 -311472308 2 896 -311472312 2 896 -311472316 2 896 -311472320 2 896 -311476228 2 896 -311476232 2 896 -311476236 2 896 -311476240 2 896 -311476244 2 896 -311476248 2 896 -311476252 2 896 -311476256 2 896 -311476260 2 896 -311476264 2 896 -311476268 2 896 -311476272 2 896 -311476276 2 896 -311476280 2 896 -311476284 2 896 -311476288 2 896 -311476292 2 896 -311476296 2 896 -311476300 2 896 -311476304 2 896 -311476308 2 896 -311476312 2 896 -311476316 2 896 -311476320 2 896 -311476324 2 896 -311476328 2 896 -311476332 2 896 -311476336 2 896 -311476340 2 896 -311476344 2 896 -311476348 2 896 -311476352 2 896 -311476356 2 896 -311476360 2 896 -311476364 2 896 -311476368 2 896 -311476372 2 896 -311476376 2 896 -311476380 2 896 -311476384 2 896 -311476388 2 896 -311476392 2 896 -311476396 2 896 -311476400 2 896 -311476404 2 896 -311476408 2 896 -311476412 2 896 -311476416 2 896 -311480324 2 896 -311480328 2 896 -311480332 2 896 -311480336 2 896 -311480340 2 896 -311480344 2 896 -311480348 2 896 -311480352 2 896 -311480356 2 896 -311480360 2 896 -311480364 2 896 -311480368 2 896 -311480372 2 896 -311480376 2 896 -311480380 2 896 -311480384 2 896 -311480388 2 896 -311480392 2 896 -311480396 2 896 -311480400 2 896 -311480404 2 896 -311480408 2 896 -311480412 2 896 -311480416 2 896 -311480420 2 896 -311480424 2 896 -311480428 2 896 -311480432 2 896 -311480436 2 896 -311480440 2 896 -311480444 2 896 -311480448 2 896 -311480452 2 896 -311480456 2 896 -311480460 2 896 -311480464 2 896 -311480468 2 896 -311480472 2 896 -311480476 2 896 -311480480 2 896 -311480484 2 896 -311480488 2 896 -311480492 2 896 -311480496 2 896 -311480500 2 896 -311480504 2 896 -311480508 2 896 -311480512 2 896 -311484420 2 896 -311484424 2 896 -311484428 2 896 -311484432 2 896 -311484436 2 896 -311484440 2 896 -311484444 2 896 -311484448 2 896 -311484452 2 896 -311484456 2 896 -311484460 2 896 -311484464 2 896 -311484468 2 896 -311484472 2 896 -311484476 2 896 -311484480 2 896 -311484484 2 896 -311484488 2 896 -311484492 2 896 -311484496 2 896 -311484500 2 896 -311484504 2 896 -311484508 2 896 -311484512 2 896 -311484516 2 896 -311484520 2 896 -311484524 2 896 -311484528 2 896 -311484532 2 896 -311484536 2 896 -311484540 2 896 -311484544 2 896 -311484548 2 896 -311484552 2 896 -311484556 2 896 -311484560 2 896 -311484564 2 896 -311484568 2 896 -311484572 2 896 -311484576 2 896 -311484580 2 896 -311484584 2 896 -311484588 2 896 -311484592 2 896 -311484596 2 896 -311484600 2 896 -311484604 2 896 -311484608 2 896 -311488516 2 896 -311488520 2 896 -311488524 2 896 -311488528 2 896 -311488532 2 896 -311488536 2 896 -311488540 2 896 -311488544 2 896 -311488548 2 896 -311488552 2 896 -311488556 2 896 -311488560 2 896 -311488564 2 896 -311488568 2 896 -311488572 2 896 -311488576 2 896 -311488580 2 896 -311488584 2 896 -311488588 2 896 -311488592 2 896 -311488596 2 896 -311488600 2 896 -311488604 2 896 -311488608 2 896 -311488612 2 896 -311488616 2 896 -311488620 2 896 -311488624 2 896 -311488628 2 896 -311488632 2 896 -311488636 2 896 -311488640 2 896 -311488644 2 896 -311488648 2 896 -311488652 2 896 -311488656 2 896 -311488660 2 896 -311488664 2 896 -311488668 2 896 -311488672 2 896 -311488676 2 896 -311488680 2 896 -311488684 2 896 -311488688 2 896 -311488692 2 896 -311488696 2 896 -311488700 2 896 -311488704 2 896 -311492612 2 896 -311492616 2 896 -311492620 2 896 -311492624 2 896 -311492628 2 896 -311492632 2 896 -311492636 2 896 -311492640 2 896 -311492644 2 896 -311492648 2 896 -311492652 2 896 -311492656 2 896 -311492660 2 896 -311492664 2 896 -311492668 2 896 -311492672 2 896 -311492676 2 896 -311492680 2 896 -311492684 2 896 -311492688 2 896 -311492692 2 896 -311492696 2 896 -311492700 2 896 -311492704 2 896 -311492708 2 896 -311492712 2 896 -311492716 2 896 -311492720 2 896 -311492724 2 896 -311492728 2 896 -311492732 2 896 -311492736 2 896 -311492740 2 896 -311492744 2 896 -311492748 2 896 -311492752 2 896 -311492756 2 896 -311492760 2 896 -311492764 2 896 -311492768 2 896 -311492772 2 896 -311492776 2 896 -311492780 2 896 -311492784 2 896 -311492788 2 896 -311492792 2 896 -311492796 2 896 -311492800 2 896 -311496708 2 896 -311496712 2 896 -311496716 2 896 -311496720 2 896 -311496724 2 896 -311496728 2 896 -311496732 2 896 -311496736 2 896 -311496740 2 896 -311496744 2 896 -311496748 2 896 -311496752 2 896 -311496756 2 896 -311496760 2 896 -311496764 2 896 -311496768 2 896 -311496772 2 896 -311496776 2 896 -311496780 2 896 -311496784 2 896 -311496788 2 896 -311496792 2 896 -311496796 2 896 -311496800 2 896 -311496804 2 896 -311496808 2 896 -311496812 2 896 -311496816 2 896 -311496820 2 896 -311496824 2 896 -311496828 2 896 -311496832 2 896 -311496836 2 896 -311496840 2 896 -311496844 2 896 -311496848 2 896 -311496852 2 896 -311496856 2 896 -311496860 2 896 -311496864 2 896 -311496868 2 896 -311496872 2 896 -311496876 2 896 -311496880 2 896 -311496884 2 896 -311496888 2 896 -311496892 2 896 -311496896 2 896 -311500804 2 896 -311500808 2 896 -311500812 2 896 -311500816 2 896 -311500820 2 896 -311500824 2 896 -311500828 2 896 -311500832 2 896 -311500836 2 896 -311500840 2 896 -311500844 2 896 -311500848 2 896 -311500852 2 896 -311500856 2 896 -311500860 2 896 -311500864 2 896 -311500868 2 896 -311500872 2 896 -311500876 2 896 -311500880 2 896 -311500884 2 896 -311500888 2 896 -311500892 2 896 -311500896 2 896 -311500900 2 896 -311500904 2 896 -311500908 2 896 -311500912 2 896 -311500916 2 896 -311500920 2 896 -311500924 2 896 -311500928 2 896 -311500932 2 896 -311500936 2 896 -311500940 2 896 -311500944 2 896 -311500948 2 896 -311500952 2 896 -311500956 2 896 -311500960 2 896 -311500964 2 896 -311500968 2 896 -311500972 2 896 -311500976 2 896 -311500980 2 896 -311500984 2 896 -311500988 2 896 -311500992 2 896 -311504900 2 896 -311504904 2 896 -311504908 2 896 -311504912 2 896 -311504916 2 896 -311504920 2 896 -311504924 2 896 -311504928 2 896 -311504932 2 896 -311504936 2 896 -311504940 2 896 -311504944 2 896 -311504948 2 896 -311504952 2 896 -311504956 2 896 -311504960 2 896 -311504964 2 896 -311504968 2 896 -311504972 2 896 -311504976 2 896 -311504980 2 896 -311504984 2 896 -311504988 2 896 -311504992 2 896 -311504996 2 896 -311505000 2 896 -311505004 2 896 -311505008 2 896 -311505012 2 896 -311505016 2 896 -311505020 2 896 -311505024 2 896 -311505028 2 896 -311505032 2 896 -311505036 2 896 -311505040 2 896 -311505044 2 896 -311505048 2 896 -311505052 2 896 -311505056 2 896 -311505060 2 896 -311505064 2 896 -311505068 2 896 -311505072 2 896 -311505076 2 896 -311505080 2 896 -311505084 2 896 -311505088 2 896 -311508996 2 896 -311509000 2 896 -311509004 2 896 -311509008 2 896 -311509012 2 896 -311509016 2 896 -311509020 2 896 -311509024 2 896 -311509028 2 896 -311509032 2 896 -311509036 2 896 -311509040 2 896 -311509044 2 896 -311509048 2 896 -311509052 2 896 -311509056 2 896 -311509060 2 896 -311509064 2 896 -311509068 2 896 -311509072 2 896 -311509076 2 896 -311509080 2 896 -311509084 2 896 -311509088 2 896 -311509092 2 896 -311509096 2 896 -311509100 2 896 -311509104 2 896 -311509108 2 896 -311509112 2 896 -311509116 2 896 -311509120 2 896 -311509124 2 896 -311509128 2 896 -311509132 2 896 -311509136 2 896 -311509140 2 896 -311509144 2 896 -311509148 2 896 -311509152 2 896 -311509156 2 896 -311509160 2 896 -311509164 2 896 -311509168 2 896 -311509172 2 896 -311509176 2 896 -311509180 2 896 -311509184 2 896 -311513092 2 896 -311513096 2 896 -311513100 2 896 -311513104 2 896 -311513108 2 896 -311513112 2 896 -311513116 2 896 -311513120 2 896 -311513124 2 896 -311513128 2 896 -311513132 2 896 -311513136 2 896 -311513140 2 896 -311513144 2 896 -311513148 2 896 -311513152 2 896 -311513156 2 896 -311513160 2 896 -311513164 2 896 -311513168 2 896 -311513172 2 896 -311513176 2 896 -311513180 2 896 -311513184 2 896 -311513188 2 896 -311513192 2 896 -311513196 2 896 -311513200 2 896 -311513204 2 896 -311513208 2 896 -311513212 2 896 -311513216 2 896 -311513220 2 896 -311513224 2 896 -311513228 2 896 -311513232 2 896 -311513236 2 896 -311513240 2 896 -311513244 2 896 -311513248 2 896 -311513252 2 896 -311513256 2 896 -311513260 2 896 -311513264 2 896 -311513268 2 896 -311513272 2 896 -311513276 2 896 -311513280 2 896 -311517188 2 896 -311517192 2 896 -311517196 2 896 -311517200 2 896 -311517204 2 896 -311517208 2 896 -311517212 2 896 -311517216 2 896 -311517220 2 896 -311517224 2 896 -311517228 2 896 -311517232 2 896 -311517236 2 896 -311517240 2 896 -311517244 2 896 -311517248 2 896 -311517252 2 896 -311517256 2 896 -311517260 2 896 -311517264 2 896 -311517268 2 896 -311517272 2 896 -311517276 2 896 -311517280 2 896 -311517284 2 896 -311517288 2 896 -311517292 2 896 -311517296 2 896 -311517300 2 896 -311517304 2 896 -311517308 2 896 -311517312 2 896 -311517316 2 896 -311517320 2 896 -311517324 2 896 -311517328 2 896 -311517332 2 896 -311517336 2 896 -311517340 2 896 -311517344 2 896 -311517348 2 896 -311517352 2 896 -311517356 2 896 -311517360 2 896 -311517364 2 896 -311517368 2 896 -311517372 2 896 -311517376 2 896 -311521284 2 896 -311521288 2 896 -311521292 2 896 -311521296 2 896 -311521300 2 896 -311521304 2 896 -311521308 2 896 -311521312 2 896 -311521316 2 896 -311521320 2 896 -311521324 2 896 -311521328 2 896 -311521332 2 896 -311521336 2 896 -311521340 2 896 -311521344 2 896 -311521348 2 896 -311521352 2 896 -311521356 2 896 -311521360 2 896 -311521364 2 896 -311521368 2 896 -311521372 2 896 -311521376 2 896 -311521380 2 896 -311521384 2 896 -311521388 2 896 -311521392 2 896 -311521396 2 896 -311521400 2 896 -311521404 2 896 -311521408 2 896 -311521412 2 896 -311521416 2 896 -311521420 2 896 -311521424 2 896 -311521428 2 896 -311521432 2 896 -311521436 2 896 -311521440 2 896 -311521444 2 896 -311521448 2 896 -311521452 2 896 -311521456 2 896 -311521460 2 896 -311521464 2 896 -311521468 2 896 -311521472 2 896 -311525380 2 896 -311525384 2 896 -311525388 2 896 -311525392 2 896 -311525396 2 896 -311525400 2 896 -311525404 2 896 -311525408 2 896 -311525412 2 896 -311525416 2 896 -311525420 2 896 -311525424 2 896 -311525428 2 896 -311525432 2 896 -311525436 2 896 -311525440 2 896 -311525444 2 896 -311525448 2 896 -311525452 2 896 -311525456 2 896 -311525460 2 896 -311525464 2 896 -311525468 2 896 -311525472 2 896 -311525476 2 896 -311525480 2 896 -311525484 2 896 -311525488 2 896 -311525492 2 896 -311525496 2 896 -311525500 2 896 -311525504 2 896 -311525508 2 896 -311525512 2 896 -311525516 2 896 -311525520 2 896 -311525524 2 896 -311525528 2 896 -311525532 2 896 -311525536 2 896 -311525540 2 896 -311525544 2 896 -311525548 2 896 -311525552 2 896 -311525556 2 896 -311525560 2 896 -311525564 2 896 -311525568 2 896 -311529476 2 896 -311529480 2 896 -311529484 2 896 -311529488 2 896 -311529492 2 896 -311529496 2 896 -311529500 2 896 -311529504 2 896 -311529508 2 896 -311529512 2 896 -311529516 2 896 -311529520 2 896 -311529524 2 896 -311529528 2 896 -311529532 2 896 -311529536 2 896 -311529540 2 896 -311529544 2 896 -311529548 2 896 -311529552 2 896 -311529556 2 896 -311529560 2 896 -311529564 2 896 -311529568 2 896 -311529572 2 896 -311529576 2 896 -311529580 2 896 -311529584 2 896 -311529588 2 896 -311529592 2 896 -311529596 2 896 -311529600 2 896 -311529604 2 896 -311529608 2 896 -311529612 2 896 -311529616 2 896 -311529620 2 896 -311529624 2 896 -311529628 2 896 -311529632 2 896 -311529636 2 896 -311529640 2 896 -311529644 2 896 -311529648 2 896 -311529652 2 896 -311529656 2 896 -311529660 2 896 -311529664 2 896 -311533572 2 896 -311533576 2 896 -311533580 2 896 -311533584 2 896 -311533588 2 896 -311533592 2 896 -311533596 2 896 -311533600 2 896 -311533604 2 896 -311533608 2 896 -311533612 2 896 -311533616 2 896 -311533620 2 896 -311533624 2 896 -311533628 2 896 -311533632 2 896 -311533636 2 896 -311533640 2 896 -311533644 2 896 -311533648 2 896 -311533652 2 896 -311533656 2 896 -311533660 2 896 -311533664 2 896 -311533668 2 896 -311533672 2 896 -311533676 2 896 -311533680 2 896 -311533684 2 896 -311533688 2 896 -311533692 2 896 -311533696 2 896 -311533700 2 896 -311533704 2 896 -311533708 2 896 -311533712 2 896 -311533716 2 896 -311533720 2 896 -311533724 2 896 -311533728 2 896 -311533732 2 896 -311533736 2 896 -311533740 2 896 -311533744 2 896 -311533748 2 896 -311533752 2 896 -311533756 2 896 -311533760 2 896 -311537668 2 896 -311537672 2 896 -311537676 2 896 -311537680 2 896 -311537684 2 896 -311537688 2 896 -311537692 2 896 -311537696 2 896 -311537700 2 896 -311537704 2 896 -311537708 2 896 -311537712 2 896 -311537716 2 896 -311537720 2 896 -311537724 2 896 -311537728 2 896 -311537732 2 896 -311537736 2 896 -311537740 2 896 -311537744 2 896 -311537748 2 896 -311537752 2 896 -311537756 2 896 -311537760 2 896 -311537764 2 896 -311537768 2 896 -311537772 2 896 -311537776 2 896 -311537780 2 896 -311537784 2 896 -311537788 2 896 -311537792 2 896 -311537796 2 896 -311537800 2 896 -311537804 2 896 -311537808 2 896 -311537812 2 896 -311537816 2 896 -311537820 2 896 -311537824 2 896 -311537828 2 896 -311537832 2 896 -311537836 2 896 -311537840 2 896 -311537844 2 896 -311537848 2 896 -311537852 2 896 -311537856 2 896 -311541764 2 896 -311541768 2 896 -311541772 2 896 -311541776 2 896 -311541780 2 896 -311541784 2 896 -311541788 2 896 -311541792 2 896 -311541796 2 896 -311541800 2 896 -311541804 2 896 -311541808 2 896 -311541812 2 896 -311541816 2 896 -311541820 2 896 -311541824 2 896 -311541828 2 896 -311541832 2 896 -311541836 2 896 -311541840 2 896 -311541844 2 896 -311541848 2 896 -311541852 2 896 -311541856 2 896 -311541860 2 896 -311541864 2 896 -311541868 2 896 -311541872 2 896 -311541876 2 896 -311541880 2 896 -311541884 2 896 -311541888 2 896 -311541892 2 896 -311541896 2 896 -311541900 2 896 -311541904 2 896 -311541908 2 896 -311541912 2 896 -311541916 2 896 -311541920 2 896 -311541924 2 896 -311541928 2 896 -311541932 2 896 -311541936 2 896 -311541940 2 896 -311541944 2 896 -311541948 2 896 -311541952 2 896 -311545860 2 896 -311545864 2 896 -311545868 2 896 -311545872 2 896 -311545876 2 896 -311545880 2 896 -311545884 2 896 -311545888 2 896 -311545892 2 896 -311545896 2 896 -311545900 2 896 -311545904 2 896 -311545908 2 896 -311545912 2 896 -311545916 2 896 -311545920 2 896 -311545924 2 896 -311545928 2 896 -311545932 2 896 -311545936 2 896 -311545940 2 896 -311545944 2 896 -311545948 2 896 -311545952 2 896 -311545956 2 896 -311545960 2 896 -311545964 2 896 -311545968 2 896 -311545972 2 896 -311545976 2 896 -311545980 2 896 -311545984 2 896 -311545988 2 896 -311545992 2 896 -311545996 2 896 -311546000 2 896 -311546004 2 896 -311546008 2 896 -311546012 2 896 -311546016 2 896 -311546020 2 896 -311546024 2 896 -311546028 2 896 -311546032 2 896 -311546036 2 896 -311546040 2 896 -311546044 2 896 -311546048 2 896 -311549956 2 896 -311549960 2 896 -311549964 2 896 -311549968 2 896 -311549972 2 896 -311549976 2 896 -311549980 2 896 -311549984 2 896 -311549988 2 896 -311549992 2 896 -311549996 2 896 -311550000 2 896 -311550004 2 896 -311550008 2 896 -311550012 2 896 -311550016 2 896 -311550020 2 896 -311550024 2 896 -311550028 2 896 -311550032 2 896 -311550036 2 896 -311550040 2 896 -311550044 2 896 -311550048 2 896 -311550052 2 896 -311550056 2 896 -311550060 2 896 -311550064 2 896 -311550068 2 896 -311550072 2 896 -311550076 2 896 -311550080 2 896 -311550084 2 896 -311550088 2 896 -311550092 2 896 -311550096 2 896 -311550100 2 896 -311550104 2 896 -311550108 2 896 -311550112 2 896 -311550116 2 896 -311550120 2 896 -311550124 2 896 -311550128 2 896 -311550132 2 896 -311550136 2 896 -311550140 2 896 -311550144 2 896 -311554052 2 896 -311554056 2 896 -311554060 2 896 -311554064 2 896 -311554068 2 896 -311554072 2 896 -311554076 2 896 -311554080 2 896 -311554084 2 896 -311554088 2 896 -311554092 2 896 -311554096 2 896 -311554100 2 896 -311554104 2 896 -311554108 2 896 -311554112 2 896 -311554116 2 896 -311554120 2 896 -311554124 2 896 -311554128 2 896 -311554132 2 896 -311554136 2 896 -311554140 2 896 -311554144 2 896 -311554148 2 896 -311554152 2 896 -311554156 2 896 -311554160 2 896 -311554164 2 896 -311554168 2 896 -311554172 2 896 -311554176 2 896 -311554180 2 896 -311554184 2 896 -311554188 2 896 -311554192 2 896 -311554196 2 896 -311554200 2 896 -311554204 2 896 -311554208 2 896 -311554212 2 896 -311554216 2 896 -311554220 2 896 -311554224 2 896 -311554228 2 896 -311554232 2 896 -311554236 2 896 -311554240 2 896 -311558148 2 896 -311558152 2 896 -311558156 2 896 -311558160 2 896 -311558164 2 896 -311558168 2 896 -311558172 2 896 -311558176 2 896 -311558180 2 896 -311558184 2 896 -311558188 2 896 -311558192 2 896 -311558196 2 896 -311558200 2 896 -311558204 2 896 -311558208 2 896 -311558212 2 896 -311558216 2 896 -311558220 2 896 -311558224 2 896 -311558228 2 896 -311558232 2 896 -311558236 2 896 -311558240 2 896 -311558244 2 896 -311558248 2 896 -311558252 2 896 -311558256 2 896 -311558260 2 896 -311558264 2 896 -311558268 2 896 -311558272 2 896 -311558276 2 896 -311558280 2 896 -311558284 2 896 -311558288 2 896 -311558292 2 896 -311558296 2 896 -311558300 2 896 -311558304 2 896 -311558308 2 896 -311558312 2 896 -311558316 2 896 -311558320 2 896 -311558324 2 896 -311558328 2 896 -311558332 2 896 -311558336 2 896 -311562244 2 896 -311562248 2 896 -311562252 2 896 -311562256 2 896 -311562260 2 896 -311562264 2 896 -311562268 2 896 -311562272 2 896 -311562276 2 896 -311562280 2 896 -311562284 2 896 -311562288 2 896 -311562292 2 896 -311562296 2 896 -311562300 2 896 -311562304 2 896 -311562308 2 896 -311562312 2 896 -311562316 2 896 -311562320 2 896 -311562324 2 896 -311562328 2 896 -311562332 2 896 -311562336 2 896 -311562340 2 896 -311562344 2 896 -311562348 2 896 -311562352 2 896 -311562356 2 896 -311562360 2 896 -311562364 2 896 -311562368 2 896 -311562372 2 896 -311562376 2 896 -311562380 2 896 -311562384 2 896 -311562388 2 896 -311562392 2 896 -311562396 2 896 -311562400 2 896 -311562404 2 896 -311562408 2 896 -311562412 2 896 -311562416 2 896 -311562420 2 896 -311562424 2 896 -311562428 2 896 -311562432 2 896 -311566340 2 896 -311566344 2 896 -311566348 2 896 -311566352 2 896 -311566356 2 896 -311566360 2 896 -311566364 2 896 -311566368 2 896 -311566372 2 896 -311566376 2 896 -311566380 2 896 -311566384 2 896 -311566388 2 896 -311566392 2 896 -311566396 2 896 -311566400 2 896 -311566404 2 896 -311566408 2 896 -311566412 2 896 -311566416 2 896 -311566420 2 896 -311566424 2 896 -311566428 2 896 -311566432 2 896 -311566436 2 896 -311566440 2 896 -311566444 2 896 -311566448 2 896 -311566452 2 896 -311566456 2 896 -311566460 2 896 -311566464 2 896 -311566468 2 896 -311566472 2 896 -311566476 2 896 -311566480 2 896 -311566484 2 896 -311566488 2 896 -311566492 2 896 -311566496 2 896 -311566500 2 896 -311566504 2 896 -311566508 2 896 -311566512 2 896 -311566516 2 896 -311566520 2 896 -311566524 2 896 -311566528 2 896 -311570436 2 896 -311570440 2 896 -311570444 2 896 -311570448 2 896 -311570452 2 896 -311570456 2 896 -311570460 2 896 -311570464 2 896 -311570468 2 896 -311570472 2 896 -311570476 2 896 -311570480 2 896 -311570484 2 896 -311570488 2 896 -311570492 2 896 -311570496 2 896 -311570500 2 896 -311570504 2 896 -311570508 2 896 -311570512 2 896 -311570516 2 896 -311570520 2 896 -311570524 2 896 -311570528 2 896 -311570532 2 896 -311570536 2 896 -311570540 2 896 -311570544 2 896 -311570548 2 896 -311570552 2 896 -311570556 2 896 -311570560 2 896 -311570564 2 896 -311570568 2 896 -311570572 2 896 -311570576 2 896 -311570580 2 896 -311570584 2 896 -311570588 2 896 -311570592 2 896 -311570596 2 896 -311570600 2 896 -311570604 2 896 -311570608 2 896 -311570612 2 896 -311570616 2 896 -311570620 2 896 -311570624 2 896 -311574532 2 896 -311574536 2 896 -311574540 2 896 -311574544 2 896 -311574548 2 896 -311574552 2 896 -311574556 2 896 -311574560 2 896 -311574564 2 896 -311574568 2 896 -311574572 2 896 -311574576 2 896 -311574580 2 896 -311574584 2 896 -311574588 2 896 -311574592 2 896 -311574596 2 896 -311574600 2 896 -311574604 2 896 -311574608 2 896 -311574612 2 896 -311574616 2 896 -311574620 2 896 -311574624 2 896 -311574628 2 896 -311574632 2 896 -311574636 2 896 -311574640 2 896 -311574644 2 896 -311574648 2 896 -311574652 2 896 -311574656 2 896 -311574660 2 896 -311574664 2 896 -311574668 2 896 -311574672 2 896 -311574676 2 896 -311574680 2 896 -311574684 2 896 -311574688 2 896 -311574692 2 896 -311574696 2 896 -311574700 2 896 -311574704 2 896 -311574708 2 896 -311574712 2 896 -311574716 2 896 -311574720 2 896 -311578628 2 896 -311578632 2 896 -311578636 2 896 -311578640 2 896 -311578644 2 896 -311578648 2 896 -311578652 2 896 -311578656 2 896 -311578660 2 896 -311578664 2 896 -311578668 2 896 -311578672 2 896 -311578676 2 896 -311578680 2 896 -311578684 2 896 -311578688 2 896 -311578692 2 896 -311578696 2 896 -311578700 2 896 -311578704 2 896 -311578708 2 896 -311578712 2 896 -311578716 2 896 -311578720 2 896 -311578724 2 896 -311578728 2 896 -311578732 2 896 -311578736 2 896 -311578740 2 896 -311578744 2 896 -311578748 2 896 -311578752 2 896 -311578756 2 896 -311578760 2 896 -311578764 2 896 -311578768 2 896 -311578772 2 896 -311578776 2 896 -311578780 2 896 -311578784 2 896 -311578788 2 896 -311578792 2 896 -311578796 2 896 -311578800 2 896 -311578804 2 896 -311578808 2 896 -311578812 2 896 -311578816 2 896 -311582724 2 896 -311582728 2 896 -311582732 2 896 -311582736 2 896 -311582740 2 896 -311582744 2 896 -311582748 2 896 -311582752 2 896 -311582756 2 896 -311582760 2 896 -311582764 2 896 -311582768 2 896 -311582772 2 896 -311582776 2 896 -311582780 2 896 -311582784 2 896 -311582788 2 896 -311582792 2 896 -311582796 2 896 -311582800 2 896 -311582804 2 896 -311582808 2 896 -311582812 2 896 -311582816 2 896 -311582820 2 896 -311582824 2 896 -311582828 2 896 -311582832 2 896 -311582836 2 896 -311582840 2 896 -311582844 2 896 -311582848 2 896 -311582852 2 896 -311582856 2 896 -311582860 2 896 -311582864 2 896 -311582868 2 896 -311582872 2 896 -311582876 2 896 -311582880 2 896 -311582884 2 896 -311582888 2 896 -311582892 2 896 -311582896 2 896 -311582900 2 896 -311582904 2 896 -311582908 2 896 -311582912 2 896 -311586820 2 896 -311586824 2 896 -311586828 2 896 -311586832 2 896 -311586836 2 896 -311586840 2 896 -311586844 2 896 -311586848 2 896 -311586852 2 896 -311586856 2 896 -311586860 2 896 -311586864 2 896 -311586868 2 896 -311586872 2 896 -311586876 2 896 -311586880 2 896 -311586884 2 896 -311586888 2 896 -311586892 2 896 -311586896 2 896 -311586900 2 896 -311586904 2 896 -311586908 2 896 -311586912 2 896 -311586916 2 896 -311586920 2 896 -311586924 2 896 -311586928 2 896 -311586932 2 896 -311586936 2 896 -311586940 2 896 -311586944 2 896 -311586948 2 896 -311586952 2 896 -311586956 2 896 -311586960 2 896 -311586964 2 896 -311586968 2 896 -311586972 2 896 -311586976 2 896 -311586980 2 896 -311586984 2 896 -311586988 2 896 -311586992 2 896 -311586996 2 896 -311587000 2 896 -311587004 2 896 -311587008 2 896 -311590916 2 896 -311590920 2 896 -311590924 2 896 -311590928 2 896 -311590932 2 896 -311590936 2 896 -311590940 2 896 -311590944 2 896 -311590948 2 896 -311590952 2 896 -311590956 2 896 -311590960 2 896 -311590964 2 896 -311590968 2 896 -311590972 2 896 -311590976 2 896 -311590980 2 896 -311590984 2 896 -311590988 2 896 -311590992 2 896 -311590996 2 896 -311591000 2 896 -311591004 2 896 -311591008 2 896 -311591012 2 896 -311591016 2 896 -311591020 2 896 -311591024 2 896 -311591028 2 896 -311591032 2 896 -311591036 2 896 -311591040 2 896 -311591044 2 896 -311591048 2 896 -311591052 2 896 -311591056 2 896 -311591060 2 896 -311591064 2 896 -311591068 2 896 -311591072 2 896 -311591076 2 896 -311591080 2 896 -311591084 2 896 -311591088 2 896 -311591092 2 896 -311591096 2 896 -311591100 2 896 -311591104 2 896 -311595012 2 896 -311595016 2 896 -311595020 2 896 -311595024 2 896 -311595028 2 896 -311595032 2 896 -311595036 2 896 -311595040 2 896 -311595044 2 896 -311595048 2 896 -311595052 2 896 -311595056 2 896 -311595060 2 896 -311595064 2 896 -311595068 2 896 -311595072 2 896 -311595076 2 896 -311595080 2 896 -311595084 2 896 -311595088 2 896 -311595092 2 896 -311595096 2 896 -311595100 2 896 -311595104 2 896 -311595108 2 896 -311595112 2 896 -311595116 2 896 -311595120 2 896 -311595124 2 896 -311595128 2 896 -311595132 2 896 -311595136 2 896 -311595140 2 896 -311595144 2 896 -311595148 2 896 -311595152 2 896 -311595156 2 896 -311595160 2 896 -311595164 2 896 -311595168 2 896 -311595172 2 896 -311595176 2 896 -311595180 2 896 -311595184 2 896 -311595188 2 896 -311595192 2 896 -311595196 2 896 -311595200 2 896 -311599108 2 896 -311599112 2 896 -311599116 2 896 -311599120 2 896 -311599124 2 896 -311599128 2 896 -311599132 2 896 -311599136 2 896 -311599140 2 896 -311599144 2 896 -311599148 2 896 -311599152 2 896 -311599156 2 896 -311599160 2 896 -311599164 2 896 -311599168 2 896 -311599172 2 896 -311599176 2 896 -311599180 2 896 -311599184 2 896 -311599188 2 896 -311599192 2 896 -311599196 2 896 -311599200 2 896 -311599204 2 896 -311599208 2 896 -311599212 2 896 -311599216 2 896 -311599220 2 896 -311599224 2 896 -311599228 2 896 -311599232 2 896 -311599236 2 896 -311599240 2 896 -311599244 2 896 -311599248 2 896 -311599252 2 896 -311599256 2 896 -311599260 2 896 -311599264 2 896 -311599268 2 896 -311599272 2 896 -311599276 2 896 -311599280 2 896 -311599284 2 896 -311599288 2 896 -311599292 2 896 -311599296 2 896 -311603204 2 896 -311603208 2 896 -311603212 2 896 -311603216 2 896 -311603220 2 896 -311603224 2 896 -311603228 2 896 -311603232 2 896 -311603236 2 896 -311603240 2 896 -311603244 2 896 -311603248 2 896 -311603252 2 896 -311603256 2 896 -311603260 2 896 -311603264 2 896 -311603268 2 896 -311603272 2 896 -311603276 2 896 -311603280 2 896 -311603284 2 896 -311603288 2 896 -311603292 2 896 -311603296 2 896 -311603300 2 896 -311603304 2 896 -311603308 2 896 -311603312 2 896 -311603316 2 896 -311603320 2 896 -311603324 2 896 -311603328 2 896 -311603332 2 896 -311603336 2 896 -311603340 2 896 -311603344 2 896 -311603348 2 896 -311603352 2 896 -311603356 2 896 -311603360 2 896 -311603364 2 896 -311603368 2 896 -311603372 2 896 -311603376 2 896 -311603380 2 896 -311603384 2 896 -311603388 2 896 -311603392 2 896 -311607300 2 896 -311607304 2 896 -311607308 2 896 -311607312 2 896 -311607316 2 896 -311607320 2 896 -311607324 2 896 -311607328 2 896 -311607332 2 896 -311607336 2 896 -311607340 2 896 -311607344 2 896 -311607348 2 896 -311607352 2 896 -311607356 2 896 -311607360 2 896 -311607364 2 896 -311607368 2 896 -311607372 2 896 -311607376 2 896 -311607380 2 896 -311607384 2 896 -311607388 2 896 -311607392 2 896 -311607396 2 896 -311607400 2 896 -311607404 2 896 -311607408 2 896 -311607412 2 896 -311607416 2 896 -311607420 2 896 -311607424 2 896 -311607428 2 896 -311607432 2 896 -311607436 2 896 -311607440 2 896 -311607444 2 896 -311607448 2 896 -311607452 2 896 -311607456 2 896 -311607460 2 896 -311607464 2 896 -311607468 2 896 -311607472 2 896 -311607476 2 896 -311607480 2 896 -311607484 2 896 -311607488 2 896 -311611396 2 896 -311611400 2 896 -311611404 2 896 -311611408 2 896 -311611412 2 896 -311611416 2 896 -311611420 2 896 -311611424 2 896 -311611428 2 896 -311611432 2 896 -311611436 2 896 -311611440 2 896 -311611444 2 896 -311611448 2 896 -311611452 2 896 -311611456 2 896 -311611460 2 896 -311611464 2 896 -311611468 2 896 -311611472 2 896 -311611476 2 896 -311611480 2 896 -311611484 2 896 -311611488 2 896 -311611492 2 896 -311611496 2 896 -311611500 2 896 -311611504 2 896 -311611508 2 896 -311611512 2 896 -311611516 2 896 -311611520 2 896 -311611524 2 896 -311611528 2 896 -311611532 2 896 -311611536 2 896 -311611540 2 896 -311611544 2 896 -311611548 2 896 -311611552 2 896 -311611556 2 896 -311611560 2 896 -311611564 2 896 -311611568 2 896 -311611572 2 896 -311611576 2 896 -311611580 2 896 -311611584 2 896 -311615492 2 896 -311615496 2 896 -311615500 2 896 -311615504 2 896 -311615508 2 896 -311615512 2 896 -311615516 2 896 -311615520 2 896 -311615524 2 896 -311615528 2 896 -311615532 2 896 -311615536 2 896 -311615540 2 896 -311615544 2 896 -311615548 2 896 -311615552 2 896 -311615556 2 896 -311615560 2 896 -311615564 2 896 -311615568 2 896 -311615572 2 896 -311615576 2 896 -311615580 2 896 -311615584 2 896 -311615588 2 896 -311615592 2 896 -311615596 2 896 -311615600 2 896 -311615604 2 896 -311615608 2 896 -311615612 2 896 -311615616 2 896 -311615620 2 896 -311615624 2 896 -311615628 2 896 -311615632 2 896 -311615636 2 896 -311615640 2 896 -311615644 2 896 -311615648 2 896 -311615652 2 896 -311615656 2 896 -311615660 2 896 -311615664 2 896 -311615668 2 896 -311615672 2 896 -311615676 2 896 -311615680 2 896 -311619588 2 896 -311619592 2 896 -311619596 2 896 -311619600 2 896 -311619604 2 896 -311619608 2 896 -311619612 2 896 -311619616 2 896 -311619620 2 896 -311619624 2 896 -311619628 2 896 -311619632 2 896 -311619636 2 896 -311619640 2 896 -311619644 2 896 -311619648 2 896 -311619652 2 896 -311619656 2 896 -311619660 2 896 -311619664 2 896 -311619668 2 896 -311619672 2 896 -311619676 2 896 -311619680 2 896 -311619684 2 896 -311619688 2 896 -311619692 2 896 -311619696 2 896 -311619700 2 896 -311619704 2 896 -311619708 2 896 -311619712 2 896 -311619716 2 896 -311619720 2 896 -311619724 2 896 -311619728 2 896 -311619732 2 896 -311619736 2 896 -311619740 2 896 -311619744 2 896 -311619748 2 896 -311619752 2 896 -311619756 2 896 -311619760 2 896 -311619764 2 896 -311619768 2 896 -311619772 2 896 -311619776 2 896 -311623684 2 896 -311623688 2 896 -311623692 2 896 -311623696 2 896 -311623700 2 896 -311623704 2 896 -311623708 2 896 -311623712 2 896 -311623716 2 896 -311623720 2 896 -311623724 2 896 -311623728 2 896 -311623732 2 896 -311623736 2 896 -311623740 2 896 -311623744 2 896 -311623748 2 896 -311623752 2 896 -311623756 2 896 -311623760 2 896 -311623764 2 896 -311623768 2 896 -311623772 2 896 -311623776 2 896 -311623780 2 896 -311623784 2 896 -311623788 2 896 -311623792 2 896 -311623796 2 896 -311623800 2 896 -311623804 2 896 -311623808 2 896 -311623812 2 896 -311623816 2 896 -311623820 2 896 -311623824 2 896 -311623828 2 896 -311623832 2 896 -311623836 2 896 -311623840 2 896 -311623844 2 896 -311623848 2 896 -311623852 2 896 -311623856 2 896 -311623860 2 896 -311623864 2 896 -311623868 2 896 -311623872 2 896 -311627780 2 896 -311627784 2 896 -311627788 2 896 -311627792 2 896 -311627796 2 896 -311627800 2 896 -311627804 2 896 -311627808 2 896 -311627812 2 896 -311627816 2 896 -311627820 2 896 -311627824 2 896 -311627828 2 896 -311627832 2 896 -311627836 2 896 -311627840 2 896 -311627844 2 896 -311627848 2 896 -311627852 2 896 -311627856 2 896 -311627860 2 896 -311627864 2 896 -311627868 2 896 -311627872 2 896 -311627876 2 896 -311627880 2 896 -311627884 2 896 -311627888 2 896 -311627892 2 896 -311627896 2 896 -311627900 2 896 -311627904 2 896 -311627908 2 896 -311627912 2 896 -311627916 2 896 -311627920 2 896 -311627924 2 896 -311627928 2 896 -311627932 2 896 -311627936 2 896 -311627940 2 896 -311627944 2 896 -311627948 2 896 -311627952 2 896 -311627956 2 896 -311627960 2 896 -311627964 2 896 -311627968 2 896 -311631876 2 896 -311631880 2 896 -311631884 2 896 -311631888 2 896 -311631892 2 896 -311631896 2 896 -311631900 2 896 -311631904 2 896 -311631908 2 896 -311631912 2 896 -311631916 2 896 -311631920 2 896 -311631924 2 896 -311631928 2 896 -311631932 2 896 -311631936 2 896 -311631940 2 896 -311631944 2 896 -311631948 2 896 -311631952 2 896 -311631956 2 896 -311631960 2 896 -311631964 2 896 -311631968 2 896 -311631972 2 896 -311631976 2 896 -311631980 2 896 -311631984 2 896 -311631988 2 896 -311631992 2 896 -311631996 2 896 -311632000 2 896 -311632004 2 896 -311632008 2 896 -311632012 2 896 -311632016 2 896 -311632020 2 896 -311632024 2 896 -311632028 2 896 -311632032 2 896 -311632036 2 896 -311632040 2 896 -311632044 2 896 -311632048 2 896 -311632052 2 896 -311632056 2 896 -311632060 2 896 -311632064 2 896 -311635972 2 896 -311635976 2 896 -311635980 2 896 -311635984 2 896 -311635988 2 896 -311635992 2 896 -311635996 2 896 -311636000 2 896 -311636004 2 896 -311636008 2 896 -311636012 2 896 -311636016 2 896 -311636020 2 896 -311636024 2 896 -311636028 2 896 -311636032 2 896 -311636036 2 896 -311636040 2 896 -311636044 2 896 -311636048 2 896 -311636052 2 896 -311636056 2 896 -311636060 2 896 -311636064 2 896 -311636068 2 896 -311636072 2 896 -311636076 2 896 -311636080 2 896 -311636084 2 896 -311636088 2 896 -311636092 2 896 -311636096 2 896 -311636100 2 896 -311636104 2 896 -311636108 2 896 -311636112 2 896 -311636116 2 896 -311636120 2 896 -311636124 2 896 -311636128 2 896 -311636132 2 896 -311636136 2 896 -311636140 2 896 -311636144 2 896 -311636148 2 896 -311636152 2 896 -311636156 2 896 -311636160 2 896 -311640068 2 896 -311640072 2 896 -311640076 2 896 -311640080 2 896 -311640084 2 896 -311640088 2 896 -311640092 2 896 -311640096 2 896 -311640100 2 896 -311640104 2 896 -311640108 2 896 -311640112 2 896 -311640116 2 896 -311640120 2 896 -311640124 2 896 -311640128 2 896 -311640132 2 896 -311640136 2 896 -311640140 2 896 -311640144 2 896 -311640148 2 896 -311640152 2 896 -311640156 2 896 -311640160 2 896 -311640164 2 896 -311640168 2 896 -311640172 2 896 -311640176 2 896 -311640180 2 896 -311640184 2 896 -311640188 2 896 -311640192 2 896 -311640196 2 896 -311640200 2 896 -311640204 2 896 -311640208 2 896 -311640212 2 896 -311640216 2 896 -311640220 2 896 -311640224 2 896 -311640228 2 896 -311640232 2 896 -311640236 2 896 -311640240 2 896 -311640244 2 896 -311640248 2 896 -311640252 2 896 -311640256 2 896 -311644164 2 896 -311644168 2 896 -311644172 2 896 -311644176 2 896 -311644180 2 896 -311644184 2 896 -311644188 2 896 -311644192 2 896 -311644196 2 896 -311644200 2 896 -311644204 2 896 -311644208 2 896 -311644212 2 896 -311644216 2 896 -311644220 2 896 -311644224 2 896 -311644228 2 896 -311644232 2 896 -311644236 2 896 -311644240 2 896 -311644244 2 896 -311644248 2 896 -311644252 2 896 -311644256 2 896 -311644260 2 896 -311644264 2 896 -311644268 2 896 -311644272 2 896 -311644276 2 896 -311644280 2 896 -311644284 2 896 -311644288 2 896 -311644292 2 896 -311644296 2 896 -311644300 2 896 -311644304 2 896 -311644308 2 896 -311644312 2 896 -311644316 2 896 -311644320 2 896 -311644324 2 896 -311644328 2 896 -311644332 2 896 -311644336 2 896 -311644340 2 896 -311644344 2 896 -311644348 2 896 -311644352 2 896 -311648260 2 896 -311648264 2 896 -311648268 2 896 -311648272 2 896 -311648276 2 896 -311648280 2 896 -311648284 2 896 -311648288 2 896 -311648292 2 896 -311648296 2 896 -311648300 2 896 -311648304 2 896 -311648308 2 896 -311648312 2 896 -311648316 2 896 -311648320 2 896 -311648324 2 896 -311648328 2 896 -311648332 2 896 -311648336 2 896 -311648340 2 896 -311648344 2 896 -311648348 2 896 -311648352 2 896 -311648356 2 896 -311648360 2 896 -311648364 2 896 -311648368 2 896 -311648372 2 896 -311648376 2 896 -311648380 2 896 -311648384 2 896 -311648388 2 896 -311648392 2 896 -311648396 2 896 -311648400 2 896 -311648404 2 896 -311648408 2 896 -311648412 2 896 -311648416 2 896 -311648420 2 896 -311648424 2 896 -311648428 2 896 -311648432 2 896 -311648436 2 896 -311648440 2 896 -311648444 2 896 -311648448 2 896 -311652356 2 896 -311652360 2 896 -311652364 2 896 -311652368 2 896 -311652372 2 896 -311652376 2 896 -311652380 2 896 -311652384 2 896 -311652388 2 896 -311652392 2 896 -311652396 2 896 -311652400 2 896 -311652404 2 896 -311652408 2 896 -311652412 2 896 -311652416 2 896 -311652420 2 896 -311652424 2 896 -311652428 2 896 -311652432 2 896 -311652436 2 896 -311652440 2 896 -311652444 2 896 -311652448 2 896 -311652452 2 896 -311652456 2 896 -311652460 2 896 -311652464 2 896 -311652468 2 896 -311652472 2 896 -311652476 2 896 -311652480 2 896 -311652484 2 896 -311652488 2 896 -311652492 2 896 -311652496 2 896 -311652500 2 896 -311652504 2 896 -311652508 2 896 -311652512 2 896 -311652516 2 896 -311652520 2 896 -311652524 2 896 -311652528 2 896 -311652532 2 896 -311652536 2 896 -311652540 2 896 -311652544 2 896 -311656452 2 896 -311656456 2 896 -311656460 2 896 -311656464 2 896 -311656468 2 896 -311656472 2 896 -311656476 2 896 -311656480 2 896 -311656484 2 896 -311656488 2 896 -311656492 2 896 -311656496 2 896 -311656500 2 896 -311656504 2 896 -311656508 2 896 -311656512 2 896 -311656516 2 896 -311656520 2 896 -311656524 2 896 -311656528 2 896 -311656532 2 896 -311656536 2 896 -311656540 2 896 -311656544 2 896 -311656548 2 896 -311656552 2 896 -311656556 2 896 -311656560 2 896 -311656564 2 896 -311656568 2 896 -311656572 2 896 -311656576 2 896 -311656580 2 896 -311656584 2 896 -311656588 2 896 -311656592 2 896 -311656596 2 896 -311656600 2 896 -311656604 2 896 -311656608 2 896 -311656612 2 896 -311656616 2 896 -311656620 2 896 -311656624 2 896 -311656628 2 896 -311656632 2 896 -311656636 2 896 -311656640 2 896 -311660548 2 896 -311660552 2 896 -311660556 2 896 -311660560 2 896 -311660564 2 896 -311660568 2 896 -311660572 2 896 -311660576 2 896 -311660580 2 896 -311660584 2 896 -311660588 2 896 -311660592 2 896 -311660596 2 896 -311660600 2 896 -311660604 2 896 -311660608 2 896 -311660612 2 896 -311660616 2 896 -311660620 2 896 -311660624 2 896 -311660628 2 896 -311660632 2 896 -311660636 2 896 -311660640 2 896 -311660644 2 896 -311660648 2 896 -311660652 2 896 -311660656 2 896 -311660660 2 896 -311660664 2 896 -311660668 2 896 -311660672 2 896 -311660676 2 896 -311660680 2 896 -311660684 2 896 -311660688 2 896 -311660692 2 896 -311660696 2 896 -311660700 2 896 -311660704 2 896 -311660708 2 896 -311660712 2 896 -311660716 2 896 -311660720 2 896 -311660724 2 896 -311660728 2 896 -311660732 2 896 -311660736 2 896 -311664644 2 896 -311664648 2 896 -311664652 2 896 -311664656 2 896 -311664660 2 896 -311664664 2 896 -311664668 2 896 -311664672 2 896 -311664676 2 896 -311664680 2 896 -311664684 2 896 -311664688 2 896 -311664692 2 896 -311664696 2 896 -311664700 2 896 -311664704 2 896 -311664708 2 896 -311664712 2 896 -311664716 2 896 -311664720 2 896 -311664724 2 896 -311664728 2 896 -311664732 2 896 -311664736 2 896 -311664740 2 896 -311664744 2 896 -311664748 2 896 -311664752 2 896 -311664756 2 896 -311664760 2 896 -311664764 2 896 -311664768 2 896 -311664772 2 896 -311664776 2 896 -311664780 2 896 -311664784 2 896 -311664788 2 896 -311664792 2 896 -311664796 2 896 -311664800 2 896 -311664804 2 896 -311664808 2 896 -311664812 2 896 -311664816 2 896 -311664820 2 896 -311664824 2 896 -311664828 2 896 -311664832 2 896 -311668740 2 896 -311668744 2 896 -311668748 2 896 -311668752 2 896 -311668756 2 896 -311668760 2 896 -311668764 2 896 -311668768 2 896 -311668772 2 896 -311668776 2 896 -311668780 2 896 -311668784 2 896 -311668788 2 896 -311668792 2 896 -311668796 2 896 -311668800 2 896 -311668804 2 896 -311668808 2 896 -311668812 2 896 -311668816 2 896 -311668820 2 896 -311668824 2 896 -311668828 2 896 -311668832 2 896 -311668836 2 896 -311668840 2 896 -311668844 2 896 -311668848 2 896 -311668852 2 896 -311668856 2 896 -311668860 2 896 -311668864 2 896 -311668868 2 896 -311668872 2 896 -311668876 2 896 -311668880 2 896 -311668884 2 896 -311668888 2 896 -311668892 2 896 -311668896 2 896 -311668900 2 896 -311668904 2 896 -311668908 2 896 -311668912 2 896 -311668916 2 896 -311668920 2 896 -311668924 2 896 -311668928 2 896 -311672836 2 896 -311672840 2 896 -311672844 2 896 -311672848 2 896 -311672852 2 896 -311672856 2 896 -311672860 2 896 -311672864 2 896 -311672868 2 896 -311672872 2 896 -311672876 2 896 -311672880 2 896 -311672884 2 896 -311672888 2 896 -311672892 2 896 -311672896 2 896 -311672900 2 896 -311672904 2 896 -311672908 2 896 -311672912 2 896 -311672916 2 896 -311672920 2 896 -311672924 2 896 -311672928 2 896 -311672932 2 896 -311672936 2 896 -311672940 2 896 -311672944 2 896 -311672948 2 896 -311672952 2 896 -311672956 2 896 -311672960 2 896 -311672964 2 896 -311672968 2 896 -311672972 2 896 -311672976 2 896 -311672980 2 896 -311672984 2 896 -311672988 2 896 -311672992 2 896 -311672996 2 896 -311673000 2 896 -311673004 2 896 -311673008 2 896 -311673012 2 896 -311673016 2 896 -311673020 2 896 -311673024 2 896 -311676932 2 896 -311676936 2 896 -311676940 2 896 -311676944 2 896 -311676948 2 896 -311676952 2 896 -311676956 2 896 -311676960 2 896 -311676964 2 896 -311676968 2 896 -311676972 2 896 -311676976 2 896 -311676980 2 896 -311676984 2 896 -311676988 2 896 -311676992 2 896 -311676996 2 896 -311677000 2 896 -311677004 2 896 -311677008 2 896 -311677012 2 896 -311677016 2 896 -311677020 2 896 -311677024 2 896 -311677028 2 896 -311677032 2 896 -311677036 2 896 -311677040 2 896 -311677044 2 896 -311677048 2 896 -311677052 2 896 -311677056 2 896 -311677060 2 896 -311677064 2 896 -311677068 2 896 -311677072 2 896 -311677076 2 896 -311677080 2 896 -311677084 2 896 -311677088 2 896 -311677092 2 896 -311677096 2 896 -311677100 2 896 -311677104 2 896 -311677108 2 896 -311677112 2 896 -311677116 2 896 -311677120 2 896 -311681028 2 896 -311681032 2 896 -311681036 2 896 -311681040 2 896 -311681044 2 896 -311681048 2 896 -311681052 2 896 -311681056 2 896 -311681060 2 896 -311681064 2 896 -311681068 2 896 -311681072 2 896 -311681076 2 896 -311681080 2 896 -311681084 2 896 -311681088 2 896 -311681092 2 896 -311681096 2 896 -311681100 2 896 -311681104 2 896 -311681108 2 896 -311681112 2 896 -311681116 2 896 -311681120 2 896 -311681124 2 896 -311681128 2 896 -311681132 2 896 -311681136 2 896 -311681140 2 896 -311681144 2 896 -311681148 2 896 -311681152 2 896 -311681156 2 896 -311681160 2 896 -311681164 2 896 -311681168 2 896 -311681172 2 896 -311681176 2 896 -311681180 2 896 -311681184 2 896 -311681188 2 896 -311681192 2 896 -311681196 2 896 -311681200 2 896 -311681204 2 896 -311681208 2 896 -311681212 2 896 -311681216 2 896 -312479748 2 896 -312479752 2 896 -312479756 2 896 -312479760 2 896 -312479764 2 896 -312479768 2 896 -312479772 2 896 -312479776 2 896 -312479780 2 896 -312479784 2 896 -312479788 2 896 -312479792 2 896 -312479796 2 896 -312479800 2 896 -312479804 2 896 -312479808 2 896 -312479812 2 896 -312479816 2 896 -312479820 2 896 -312479824 2 896 -312479828 2 896 -312479832 2 896 -312479836 2 896 -312479840 2 896 -312479844 2 896 -312479848 2 896 -312479852 2 896 -312479856 2 896 -312479860 2 896 -312479864 2 896 -312479868 2 896 -312479872 2 896 -312479876 2 896 -312479880 2 896 -312479884 2 896 -312479888 2 896 -312479892 2 896 -312479896 2 896 -312479900 2 896 -312479904 2 896 -312479908 2 896 -312479912 2 896 -312479916 2 896 -312479920 2 896 -312479924 2 896 -312479928 2 896 -312479932 2 896 -312479936 2 896 -312483844 2 896 -312483848 2 896 -312483852 2 896 -312483856 2 896 -312483860 2 896 -312483864 2 896 -312483868 2 896 -312483872 2 896 -312483876 2 896 -312483880 2 896 -312483884 2 896 -312483888 2 896 -312483892 2 896 -312483896 2 896 -312483900 2 896 -312483904 2 896 -312483908 2 896 -312483912 2 896 -312483916 2 896 -312483920 2 896 -312483924 2 896 -312483928 2 896 -312483932 2 896 -312483936 2 896 -312483940 2 896 -312483944 2 896 -312483948 2 896 -312483952 2 896 -312483956 2 896 -312483960 2 896 -312483964 2 896 -312483968 2 896 -312483972 2 896 -312483976 2 896 -312483980 2 896 -312483984 2 896 -312483988 2 896 -312483992 2 896 -312483996 2 896 -312484000 2 896 -312484004 2 896 -312484008 2 896 -312484012 2 896 -312484016 2 896 -312484020 2 896 -312484024 2 896 -312484028 2 896 -312484032 2 896 -312487940 2 896 -312487944 2 896 -312487948 2 896 -312487952 2 896 -312487956 2 896 -312487960 2 896 -312487964 2 896 -312487968 2 896 -312487972 2 896 -312487976 2 896 -312487980 2 896 -312487984 2 896 -312487988 2 896 -312487992 2 896 -312487996 2 896 -312488000 2 896 -312488004 2 896 -312488008 2 896 -312488012 2 896 -312488016 2 896 -312488020 2 896 -312488024 2 896 -312488028 2 896 -312488032 2 896 -312488036 2 896 -312488040 2 896 -312488044 2 896 -312488048 2 896 -312488052 2 896 -312488056 2 896 -312488060 2 896 -312488064 2 896 -312488068 2 896 -312488072 2 896 -312488076 2 896 -312488080 2 896 -312488084 2 896 -312488088 2 896 -312488092 2 896 -312488096 2 896 -312488100 2 896 -312488104 2 896 -312488108 2 896 -312488112 2 896 -312488116 2 896 -312488120 2 896 -312488124 2 896 -312488128 2 896 -312492036 2 896 -312492040 2 896 -312492044 2 896 -312492048 2 896 -312492052 2 896 -312492056 2 896 -312492060 2 896 -312492064 2 896 -312492068 2 896 -312492072 2 896 -312492076 2 896 -312492080 2 896 -312492084 2 896 -312492088 2 896 -312492092 2 896 -312492096 2 896 -312492100 2 896 -312492104 2 896 -312492108 2 896 -312492112 2 896 -312492116 2 896 -312492120 2 896 -312492124 2 896 -312492128 2 896 -312492132 2 896 -312492136 2 896 -312492140 2 896 -312492144 2 896 -312492148 2 896 -312492152 2 896 -312492156 2 896 -312492160 2 896 -312492164 2 896 -312492168 2 896 -312492172 2 896 -312492176 2 896 -312492180 2 896 -312492184 2 896 -312492188 2 896 -312492192 2 896 -312492196 2 896 -312492200 2 896 -312492204 2 896 -312492208 2 896 -312492212 2 896 -312492216 2 896 -312492220 2 896 -312492224 2 896 -312496132 2 896 -312496136 2 896 -312496140 2 896 -312496144 2 896 -312496148 2 896 -312496152 2 896 -312496156 2 896 -312496160 2 896 -312496164 2 896 -312496168 2 896 -312496172 2 896 -312496176 2 896 -312496180 2 896 -312496184 2 896 -312496188 2 896 -312496192 2 896 -312496196 2 896 -312496200 2 896 -312496204 2 896 -312496208 2 896 -312496212 2 896 -312496216 2 896 -312496220 2 896 -312496224 2 896 -312496228 2 896 -312496232 2 896 -312496236 2 896 -312496240 2 896 -312496244 2 896 -312496248 2 896 -312496252 2 896 -312496256 2 896 -312496260 2 896 -312496264 2 896 -312496268 2 896 -312496272 2 896 -312496276 2 896 -312496280 2 896 -312496284 2 896 -312496288 2 896 -312496292 2 896 -312496296 2 896 -312496300 2 896 -312496304 2 896 -312496308 2 896 -312496312 2 896 -312496316 2 896 -312496320 2 896 -312500228 2 896 -312500232 2 896 -312500236 2 896 -312500240 2 896 -312500244 2 896 -312500248 2 896 -312500252 2 896 -312500256 2 896 -312500260 2 896 -312500264 2 896 -312500268 2 896 -312500272 2 896 -312500276 2 896 -312500280 2 896 -312500284 2 896 -312500288 2 896 -312500292 2 896 -312500296 2 896 -312500300 2 896 -312500304 2 896 -312500308 2 896 -312500312 2 896 -312500316 2 896 -312500320 2 896 -312500324 2 896 -312500328 2 896 -312500332 2 896 -312500336 2 896 -312500340 2 896 -312500344 2 896 -312500348 2 896 -312500352 2 896 -312500356 2 896 -312500360 2 896 -312500364 2 896 -312500368 2 896 -312500372 2 896 -312500376 2 896 -312500380 2 896 -312500384 2 896 -312500388 2 896 -312500392 2 896 -312500396 2 896 -312500400 2 896 -312500404 2 896 -312500408 2 896 -312500412 2 896 -312500416 2 896 -312504324 2 896 -312504328 2 896 -312504332 2 896 -312504336 2 896 -312504340 2 896 -312504344 2 896 -312504348 2 896 -312504352 2 896 -312504356 2 896 -312504360 2 896 -312504364 2 896 -312504368 2 896 -312504372 2 896 -312504376 2 896 -312504380 2 896 -312504384 2 896 -312504388 2 896 -312504392 2 896 -312504396 2 896 -312504400 2 896 -312504404 2 896 -312504408 2 896 -312504412 2 896 -312504416 2 896 -312504420 2 896 -312504424 2 896 -312504428 2 896 -312504432 2 896 -312504436 2 896 -312504440 2 896 -312504444 2 896 -312504448 2 896 -312504452 2 896 -312504456 2 896 -312504460 2 896 -312504464 2 896 -312504468 2 896 -312504472 2 896 -312504476 2 896 -312504480 2 896 -312504484 2 896 -312504488 2 896 -312504492 2 896 -312504496 2 896 -312504500 2 896 -312504504 2 896 -312504508 2 896 -312504512 2 896 -312508420 2 896 -312508424 2 896 -312508428 2 896 -312508432 2 896 -312508436 2 896 -312508440 2 896 -312508444 2 896 -312508448 2 896 -312508452 2 896 -312508456 2 896 -312508460 2 896 -312508464 2 896 -312508468 2 896 -312508472 2 896 -312508476 2 896 -312508480 2 896 -312508484 2 896 -312508488 2 896 -312508492 2 896 -312508496 2 896 -312508500 2 896 -312508504 2 896 -312508508 2 896 -312508512 2 896 -312508516 2 896 -312508520 2 896 -312508524 2 896 -312508528 2 896 -312508532 2 896 -312508536 2 896 -312508540 2 896 -312508544 2 896 -312508548 2 896 -312508552 2 896 -312508556 2 896 -312508560 2 896 -312508564 2 896 -312508568 2 896 -312508572 2 896 -312508576 2 896 -312508580 2 896 -312508584 2 896 -312508588 2 896 -312508592 2 896 -312508596 2 896 -312508600 2 896 -312508604 2 896 -312508608 2 896 -312512516 2 896 -312512520 2 896 -312512524 2 896 -312512528 2 896 -312512532 2 896 -312512536 2 896 -312512540 2 896 -312512544 2 896 -312512548 2 896 -312512552 2 896 -312512556 2 896 -312512560 2 896 -312512564 2 896 -312512568 2 896 -312512572 2 896 -312512576 2 896 -312512580 2 896 -312512584 2 896 -312512588 2 896 -312512592 2 896 -312512596 2 896 -312512600 2 896 -312512604 2 896 -312512608 2 896 -312512612 2 896 -312512616 2 896 -312512620 2 896 -312512624 2 896 -312512628 2 896 -312512632 2 896 -312512636 2 896 -312512640 2 896 -312512644 2 896 -312512648 2 896 -312512652 2 896 -312512656 2 896 -312512660 2 896 -312512664 2 896 -312512668 2 896 -312512672 2 896 -312512676 2 896 -312512680 2 896 -312512684 2 896 -312512688 2 896 -312512692 2 896 -312512696 2 896 -312512700 2 896 -312512704 2 896 -312516612 2 896 -312516616 2 896 -312516620 2 896 -312516624 2 896 -312516628 2 896 -312516632 2 896 -312516636 2 896 -312516640 2 896 -312516644 2 896 -312516648 2 896 -312516652 2 896 -312516656 2 896 -312516660 2 896 -312516664 2 896 -312516668 2 896 -312516672 2 896 -312516676 2 896 -312516680 2 896 -312516684 2 896 -312516688 2 896 -312516692 2 896 -312516696 2 896 -312516700 2 896 -312516704 2 896 -312516708 2 896 -312516712 2 896 -312516716 2 896 -312516720 2 896 -312516724 2 896 -312516728 2 896 -312516732 2 896 -312516736 2 896 -312516740 2 896 -312516744 2 896 -312516748 2 896 -312516752 2 896 -312516756 2 896 -312516760 2 896 -312516764 2 896 -312516768 2 896 -312516772 2 896 -312516776 2 896 -312516780 2 896 -312516784 2 896 -312516788 2 896 -312516792 2 896 -312516796 2 896 -312516800 2 896 -312520708 2 896 -312520712 2 896 -312520716 2 896 -312520720 2 896 -312520724 2 896 -312520728 2 896 -312520732 2 896 -312520736 2 896 -312520740 2 896 -312520744 2 896 -312520748 2 896 -312520752 2 896 -312520756 2 896 -312520760 2 896 -312520764 2 896 -312520768 2 896 -312520772 2 896 -312520776 2 896 -312520780 2 896 -312520784 2 896 -312520788 2 896 -312520792 2 896 -312520796 2 896 -312520800 2 896 -312520804 2 896 -312520808 2 896 -312520812 2 896 -312520816 2 896 -312520820 2 896 -312520824 2 896 -312520828 2 896 -312520832 2 896 -312520836 2 896 -312520840 2 896 -312520844 2 896 -312520848 2 896 -312520852 2 896 -312520856 2 896 -312520860 2 896 -312520864 2 896 -312520868 2 896 -312520872 2 896 -312520876 2 896 -312520880 2 896 -312520884 2 896 -312520888 2 896 -312520892 2 896 -312520896 2 896 -312524804 2 896 -312524808 2 896 -312524812 2 896 -312524816 2 896 -312524820 2 896 -312524824 2 896 -312524828 2 896 -312524832 2 896 -312524836 2 896 -312524840 2 896 -312524844 2 896 -312524848 2 896 -312524852 2 896 -312524856 2 896 -312524860 2 896 -312524864 2 896 -312524868 2 896 -312524872 2 896 -312524876 2 896 -312524880 2 896 -312524884 2 896 -312524888 2 896 -312524892 2 896 -312524896 2 896 -312524900 2 896 -312524904 2 896 -312524908 2 896 -312524912 2 896 -312524916 2 896 -312524920 2 896 -312524924 2 896 -312524928 2 896 -312524932 2 896 -312524936 2 896 -312524940 2 896 -312524944 2 896 -312524948 2 896 -312524952 2 896 -312524956 2 896 -312524960 2 896 -312524964 2 896 -312524968 2 896 -312524972 2 896 -312524976 2 896 -312524980 2 896 -312524984 2 896 -312524988 2 896 -312524992 2 896 -312528900 2 896 -312528904 2 896 -312528908 2 896 -312528912 2 896 -312528916 2 896 -312528920 2 896 -312528924 2 896 -312528928 2 896 -312528932 2 896 -312528936 2 896 -312528940 2 896 -312528944 2 896 -312528948 2 896 -312528952 2 896 -312528956 2 896 -312528960 2 896 -312528964 2 896 -312528968 2 896 -312528972 2 896 -312528976 2 896 -312528980 2 896 -312528984 2 896 -312528988 2 896 -312528992 2 896 -312528996 2 896 -312529000 2 896 -312529004 2 896 -312529008 2 896 -312529012 2 896 -312529016 2 896 -312529020 2 896 -312529024 2 896 -312529028 2 896 -312529032 2 896 -312529036 2 896 -312529040 2 896 -312529044 2 896 -312529048 2 896 -312529052 2 896 -312529056 2 896 -312529060 2 896 -312529064 2 896 -312529068 2 896 -312529072 2 896 -312529076 2 896 -312529080 2 896 -312529084 2 896 -312529088 2 896 -312532996 2 896 -312533000 2 896 -312533004 2 896 -312533008 2 896 -312533012 2 896 -312533016 2 896 -312533020 2 896 -312533024 2 896 -312533028 2 896 -312533032 2 896 -312533036 2 896 -312533040 2 896 -312533044 2 896 -312533048 2 896 -312533052 2 896 -312533056 2 896 -312533060 2 896 -312533064 2 896 -312533068 2 896 -312533072 2 896 -312533076 2 896 -312533080 2 896 -312533084 2 896 -312533088 2 896 -312533092 2 896 -312533096 2 896 -312533100 2 896 -312533104 2 896 -312533108 2 896 -312533112 2 896 -312533116 2 896 -312533120 2 896 -312533124 2 896 -312533128 2 896 -312533132 2 896 -312533136 2 896 -312533140 2 896 -312533144 2 896 -312533148 2 896 -312533152 2 896 -312533156 2 896 -312533160 2 896 -312533164 2 896 -312533168 2 896 -312533172 2 896 -312533176 2 896 -312533180 2 896 -312533184 2 896 -312537092 2 896 -312537096 2 896 -312537100 2 896 -312537104 2 896 -312537108 2 896 -312537112 2 896 -312537116 2 896 -312537120 2 896 -312537124 2 896 -312537128 2 896 -312537132 2 896 -312537136 2 896 -312537140 2 896 -312537144 2 896 -312537148 2 896 -312537152 2 896 -312537156 2 896 -312537160 2 896 -312537164 2 896 -312537168 2 896 -312537172 2 896 -312537176 2 896 -312537180 2 896 -312537184 2 896 -312537188 2 896 -312537192 2 896 -312537196 2 896 -312537200 2 896 -312537204 2 896 -312537208 2 896 -312537212 2 896 -312537216 2 896 -312537220 2 896 -312537224 2 896 -312537228 2 896 -312537232 2 896 -312537236 2 896 -312537240 2 896 -312537244 2 896 -312537248 2 896 -312537252 2 896 -312537256 2 896 -312537260 2 896 -312537264 2 896 -312537268 2 896 -312537272 2 896 -312537276 2 896 -312537280 2 896 -312541188 2 896 -312541192 2 896 -312541196 2 896 -312541200 2 896 -312541204 2 896 -312541208 2 896 -312541212 2 896 -312541216 2 896 -312541220 2 896 -312541224 2 896 -312541228 2 896 -312541232 2 896 -312541236 2 896 -312541240 2 896 -312541244 2 896 -312541248 2 896 -312541252 2 896 -312541256 2 896 -312541260 2 896 -312541264 2 896 -312541268 2 896 -312541272 2 896 -312541276 2 896 -312541280 2 896 -312541284 2 896 -312541288 2 896 -312541292 2 896 -312541296 2 896 -312541300 2 896 -312541304 2 896 -312541308 2 896 -312541312 2 896 -312541316 2 896 -312541320 2 896 -312541324 2 896 -312541328 2 896 -312541332 2 896 -312541336 2 896 -312541340 2 896 -312541344 2 896 -312541348 2 896 -312541352 2 896 -312541356 2 896 -312541360 2 896 -312541364 2 896 -312541368 2 896 -312541372 2 896 -312541376 2 896 -312545284 2 896 -312545288 2 896 -312545292 2 896 -312545296 2 896 -312545300 2 896 -312545304 2 896 -312545308 2 896 -312545312 2 896 -312545316 2 896 -312545320 2 896 -312545324 2 896 -312545328 2 896 -312545332 2 896 -312545336 2 896 -312545340 2 896 -312545344 2 896 -312545348 2 896 -312545352 2 896 -312545356 2 896 -312545360 2 896 -312545364 2 896 -312545368 2 896 -312545372 2 896 -312545376 2 896 -312545380 2 896 -312545384 2 896 -312545388 2 896 -312545392 2 896 -312545396 2 896 -312545400 2 896 -312545404 2 896 -312545408 2 896 -312545412 2 896 -312545416 2 896 -312545420 2 896 -312545424 2 896 -312545428 2 896 -312545432 2 896 -312545436 2 896 -312545440 2 896 -312545444 2 896 -312545448 2 896 -312545452 2 896 -312545456 2 896 -312545460 2 896 -312545464 2 896 -312545468 2 896 -312545472 2 896 -312549380 2 896 -312549384 2 896 -312549388 2 896 -312549392 2 896 -312549396 2 896 -312549400 2 896 -312549404 2 896 -312549408 2 896 -312549412 2 896 -312549416 2 896 -312549420 2 896 -312549424 2 896 -312549428 2 896 -312549432 2 896 -312549436 2 896 -312549440 2 896 -312549444 2 896 -312549448 2 896 -312549452 2 896 -312549456 2 896 -312549460 2 896 -312549464 2 896 -312549468 2 896 -312549472 2 896 -312549476 2 896 -312549480 2 896 -312549484 2 896 -312549488 2 896 -312549492 2 896 -312549496 2 896 -312549500 2 896 -312549504 2 896 -312549508 2 896 -312549512 2 896 -312549516 2 896 -312549520 2 896 -312549524 2 896 -312549528 2 896 -312549532 2 896 -312549536 2 896 -312549540 2 896 -312549544 2 896 -312549548 2 896 -312549552 2 896 -312549556 2 896 -312549560 2 896 -312549564 2 896 -312549568 2 896 -312553476 2 896 -312553480 2 896 -312553484 2 896 -312553488 2 896 -312553492 2 896 -312553496 2 896 -312553500 2 896 -312553504 2 896 -312553508 2 896 -312553512 2 896 -312553516 2 896 -312553520 2 896 -312553524 2 896 -312553528 2 896 -312553532 2 896 -312553536 2 896 -312553540 2 896 -312553544 2 896 -312553548 2 896 -312553552 2 896 -312553556 2 896 -312553560 2 896 -312553564 2 896 -312553568 2 896 -312553572 2 896 -312553576 2 896 -312553580 2 896 -312553584 2 896 -312553588 2 896 -312553592 2 896 -312553596 2 896 -312553600 2 896 -312553604 2 896 -312553608 2 896 -312553612 2 896 -312553616 2 896 -312553620 2 896 -312553624 2 896 -312553628 2 896 -312553632 2 896 -312553636 2 896 -312553640 2 896 -312553644 2 896 -312553648 2 896 -312553652 2 896 -312553656 2 896 -312553660 2 896 -312553664 2 896 -312557572 2 896 -312557576 2 896 -312557580 2 896 -312557584 2 896 -312557588 2 896 -312557592 2 896 -312557596 2 896 -312557600 2 896 -312557604 2 896 -312557608 2 896 -312557612 2 896 -312557616 2 896 -312557620 2 896 -312557624 2 896 -312557628 2 896 -312557632 2 896 -312557636 2 896 -312557640 2 896 -312557644 2 896 -312557648 2 896 -312557652 2 896 -312557656 2 896 -312557660 2 896 -312557664 2 896 -312557668 2 896 -312557672 2 896 -312557676 2 896 -312557680 2 896 -312557684 2 896 -312557688 2 896 -312557692 2 896 -312557696 2 896 -312557700 2 896 -312557704 2 896 -312557708 2 896 -312557712 2 896 -312557716 2 896 -312557720 2 896 -312557724 2 896 -312557728 2 896 -312557732 2 896 -312557736 2 896 -312557740 2 896 -312557744 2 896 -312557748 2 896 -312557752 2 896 -312557756 2 896 -312557760 2 896 -312561668 2 896 -312561672 2 896 -312561676 2 896 -312561680 2 896 -312561684 2 896 -312561688 2 896 -312561692 2 896 -312561696 2 896 -312561700 2 896 -312561704 2 896 -312561708 2 896 -312561712 2 896 -312561716 2 896 -312561720 2 896 -312561724 2 896 -312561728 2 896 -312561732 2 896 -312561736 2 896 -312561740 2 896 -312561744 2 896 -312561748 2 896 -312561752 2 896 -312561756 2 896 -312561760 2 896 -312561764 2 896 -312561768 2 896 -312561772 2 896 -312561776 2 896 -312561780 2 896 -312561784 2 896 -312561788 2 896 -312561792 2 896 -312561796 2 896 -312561800 2 896 -312561804 2 896 -312561808 2 896 -312561812 2 896 -312561816 2 896 -312561820 2 896 -312561824 2 896 -312561828 2 896 -312561832 2 896 -312561836 2 896 -312561840 2 896 -312561844 2 896 -312561848 2 896 -312561852 2 896 -312561856 2 896 -312565764 2 896 -312565768 2 896 -312565772 2 896 -312565776 2 896 -312565780 2 896 -312565784 2 896 -312565788 2 896 -312565792 2 896 -312565796 2 896 -312565800 2 896 -312565804 2 896 -312565808 2 896 -312565812 2 896 -312565816 2 896 -312565820 2 896 -312565824 2 896 -312565828 2 896 -312565832 2 896 -312565836 2 896 -312565840 2 896 -312565844 2 896 -312565848 2 896 -312565852 2 896 -312565856 2 896 -312565860 2 896 -312565864 2 896 -312565868 2 896 -312565872 2 896 -312565876 2 896 -312565880 2 896 -312565884 2 896 -312565888 2 896 -312565892 2 896 -312565896 2 896 -312565900 2 896 -312565904 2 896 -312565908 2 896 -312565912 2 896 -312565916 2 896 -312565920 2 896 -312565924 2 896 -312565928 2 896 -312565932 2 896 -312565936 2 896 -312565940 2 896 -312565944 2 896 -312565948 2 896 -312565952 2 896 -312569860 2 896 -312569864 2 896 -312569868 2 896 -312569872 2 896 -312569876 2 896 -312569880 2 896 -312569884 2 896 -312569888 2 896 -312569892 2 896 -312569896 2 896 -312569900 2 896 -312569904 2 896 -312569908 2 896 -312569912 2 896 -312569916 2 896 -312569920 2 896 -312569924 2 896 -312569928 2 896 -312569932 2 896 -312569936 2 896 -312569940 2 896 -312569944 2 896 -312569948 2 896 -312569952 2 896 -312569956 2 896 -312569960 2 896 -312569964 2 896 -312569968 2 896 -312569972 2 896 -312569976 2 896 -312569980 2 896 -312569984 2 896 -312569988 2 896 -312569992 2 896 -312569996 2 896 -312570000 2 896 -312570004 2 896 -312570008 2 896 -312570012 2 896 -312570016 2 896 -312570020 2 896 -312570024 2 896 -312570028 2 896 -312570032 2 896 -312570036 2 896 -312570040 2 896 -312570044 2 896 -312570048 2 896 -312573956 2 896 -312573960 2 896 -312573964 2 896 -312573968 2 896 -312573972 2 896 -312573976 2 896 -312573980 2 896 -312573984 2 896 -312573988 2 896 -312573992 2 896 -312573996 2 896 -312574000 2 896 -312574004 2 896 -312574008 2 896 -312574012 2 896 -312574016 2 896 -312574020 2 896 -312574024 2 896 -312574028 2 896 -312574032 2 896 -312574036 2 896 -312574040 2 896 -312574044 2 896 -312574048 2 896 -312574052 2 896 -312574056 2 896 -312574060 2 896 -312574064 2 896 -312574068 2 896 -312574072 2 896 -312574076 2 896 -312574080 2 896 -312574084 2 896 -312574088 2 896 -312574092 2 896 -312574096 2 896 -312574100 2 896 -312574104 2 896 -312574108 2 896 -312574112 2 896 -312574116 2 896 -312574120 2 896 -312574124 2 896 -312574128 2 896 -312574132 2 896 -312574136 2 896 -312574140 2 896 -312574144 2 896 -312578052 2 896 -312578056 2 896 -312578060 2 896 -312578064 2 896 -312578068 2 896 -312578072 2 896 -312578076 2 896 -312578080 2 896 -312578084 2 896 -312578088 2 896 -312578092 2 896 -312578096 2 896 -312578100 2 896 -312578104 2 896 -312578108 2 896 -312578112 2 896 -312578116 2 896 -312578120 2 896 -312578124 2 896 -312578128 2 896 -312578132 2 896 -312578136 2 896 -312578140 2 896 -312578144 2 896 -312578148 2 896 -312578152 2 896 -312578156 2 896 -312578160 2 896 -312578164 2 896 -312578168 2 896 -312578172 2 896 -312578176 2 896 -312578180 2 896 -312578184 2 896 -312578188 2 896 -312578192 2 896 -312578196 2 896 -312578200 2 896 -312578204 2 896 -312578208 2 896 -312578212 2 896 -312578216 2 896 -312578220 2 896 -312578224 2 896 -312578228 2 896 -312578232 2 896 -312578236 2 896 -312578240 2 896 -312582148 2 896 -312582152 2 896 -312582156 2 896 -312582160 2 896 -312582164 2 896 -312582168 2 896 -312582172 2 896 -312582176 2 896 -312582180 2 896 -312582184 2 896 -312582188 2 896 -312582192 2 896 -312582196 2 896 -312582200 2 896 -312582204 2 896 -312582208 2 896 -312582212 2 896 -312582216 2 896 -312582220 2 896 -312582224 2 896 -312582228 2 896 -312582232 2 896 -312582236 2 896 -312582240 2 896 -312582244 2 896 -312582248 2 896 -312582252 2 896 -312582256 2 896 -312582260 2 896 -312582264 2 896 -312582268 2 896 -312582272 2 896 -312582276 2 896 -312582280 2 896 -312582284 2 896 -312582288 2 896 -312582292 2 896 -312582296 2 896 -312582300 2 896 -312582304 2 896 -312582308 2 896 -312582312 2 896 -312582316 2 896 -312582320 2 896 -312582324 2 896 -312582328 2 896 -312582332 2 896 -312582336 2 896 -312586244 2 896 -312586248 2 896 -312586252 2 896 -312586256 2 896 -312586260 2 896 -312586264 2 896 -312586268 2 896 -312586272 2 896 -312586276 2 896 -312586280 2 896 -312586284 2 896 -312586288 2 896 -312586292 2 896 -312586296 2 896 -312586300 2 896 -312586304 2 896 -312586308 2 896 -312586312 2 896 -312586316 2 896 -312586320 2 896 -312586324 2 896 -312586328 2 896 -312586332 2 896 -312586336 2 896 -312586340 2 896 -312586344 2 896 -312586348 2 896 -312586352 2 896 -312586356 2 896 -312586360 2 896 -312586364 2 896 -312586368 2 896 -312586372 2 896 -312586376 2 896 -312586380 2 896 -312586384 2 896 -312586388 2 896 -312586392 2 896 -312586396 2 896 -312586400 2 896 -312586404 2 896 -312586408 2 896 -312586412 2 896 -312586416 2 896 -312586420 2 896 -312586424 2 896 -312586428 2 896 -312586432 2 896 -312590340 2 896 -312590344 2 896 -312590348 2 896 -312590352 2 896 -312590356 2 896 -312590360 2 896 -312590364 2 896 -312590368 2 896 -312590372 2 896 -312590376 2 896 -312590380 2 896 -312590384 2 896 -312590388 2 896 -312590392 2 896 -312590396 2 896 -312590400 2 896 -312590404 2 896 -312590408 2 896 -312590412 2 896 -312590416 2 896 -312590420 2 896 -312590424 2 896 -312590428 2 896 -312590432 2 896 -312590436 2 896 -312590440 2 896 -312590444 2 896 -312590448 2 896 -312590452 2 896 -312590456 2 896 -312590460 2 896 -312590464 2 896 -312590468 2 896 -312590472 2 896 -312590476 2 896 -312590480 2 896 -312590484 2 896 -312590488 2 896 -312590492 2 896 -312590496 2 896 -312590500 2 896 -312590504 2 896 -312590508 2 896 -312590512 2 896 -312590516 2 896 -312590520 2 896 -312590524 2 896 -312590528 2 896 -312594436 2 896 -312594440 2 896 -312594444 2 896 -312594448 2 896 -312594452 2 896 -312594456 2 896 -312594460 2 896 -312594464 2 896 -312594468 2 896 -312594472 2 896 -312594476 2 896 -312594480 2 896 -312594484 2 896 -312594488 2 896 -312594492 2 896 -312594496 2 896 -312594500 2 896 -312594504 2 896 -312594508 2 896 -312594512 2 896 -312594516 2 896 -312594520 2 896 -312594524 2 896 -312594528 2 896 -312594532 2 896 -312594536 2 896 -312594540 2 896 -312594544 2 896 -312594548 2 896 -312594552 2 896 -312594556 2 896 -312594560 2 896 -312594564 2 896 -312594568 2 896 -312594572 2 896 -312594576 2 896 -312594580 2 896 -312594584 2 896 -312594588 2 896 -312594592 2 896 -312594596 2 896 -312594600 2 896 -312594604 2 896 -312594608 2 896 -312594612 2 896 -312594616 2 896 -312594620 2 896 -312594624 2 896 -312598532 2 896 -312598536 2 896 -312598540 2 896 -312598544 2 896 -312598548 2 896 -312598552 2 896 -312598556 2 896 -312598560 2 896 -312598564 2 896 -312598568 2 896 -312598572 2 896 -312598576 2 896 -312598580 2 896 -312598584 2 896 -312598588 2 896 -312598592 2 896 -312598596 2 896 -312598600 2 896 -312598604 2 896 -312598608 2 896 -312598612 2 896 -312598616 2 896 -312598620 2 896 -312598624 2 896 -312598628 2 896 -312598632 2 896 -312598636 2 896 -312598640 2 896 -312598644 2 896 -312598648 2 896 -312598652 2 896 -312598656 2 896 -312598660 2 896 -312598664 2 896 -312598668 2 896 -312598672 2 896 -312598676 2 896 -312598680 2 896 -312598684 2 896 -312598688 2 896 -312598692 2 896 -312598696 2 896 -312598700 2 896 -312598704 2 896 -312598708 2 896 -312598712 2 896 -312598716 2 896 -312598720 2 896 -312602628 2 896 -312602632 2 896 -312602636 2 896 -312602640 2 896 -312602644 2 896 -312602648 2 896 -312602652 2 896 -312602656 2 896 -312602660 2 896 -312602664 2 896 -312602668 2 896 -312602672 2 896 -312602676 2 896 -312602680 2 896 -312602684 2 896 -312602688 2 896 -312602692 2 896 -312602696 2 896 -312602700 2 896 -312602704 2 896 -312602708 2 896 -312602712 2 896 -312602716 2 896 -312602720 2 896 -312602724 2 896 -312602728 2 896 -312602732 2 896 -312602736 2 896 -312602740 2 896 -312602744 2 896 -312602748 2 896 -312602752 2 896 -312602756 2 896 -312602760 2 896 -312602764 2 896 -312602768 2 896 -312602772 2 896 -312602776 2 896 -312602780 2 896 -312602784 2 896 -312602788 2 896 -312602792 2 896 -312602796 2 896 -312602800 2 896 -312602804 2 896 -312602808 2 896 -312602812 2 896 -312602816 2 896 -312606724 2 896 -312606728 2 896 -312606732 2 896 -312606736 2 896 -312606740 2 896 -312606744 2 896 -312606748 2 896 -312606752 2 896 -312606756 2 896 -312606760 2 896 -312606764 2 896 -312606768 2 896 -312606772 2 896 -312606776 2 896 -312606780 2 896 -312606784 2 896 -312606788 2 896 -312606792 2 896 -312606796 2 896 -312606800 2 896 -312606804 2 896 -312606808 2 896 -312606812 2 896 -312606816 2 896 -312606820 2 896 -312606824 2 896 -312606828 2 896 -312606832 2 896 -312606836 2 896 -312606840 2 896 -312606844 2 896 -312606848 2 896 -312606852 2 896 -312606856 2 896 -312606860 2 896 -312606864 2 896 -312606868 2 896 -312606872 2 896 -312606876 2 896 -312606880 2 896 -312606884 2 896 -312606888 2 896 -312606892 2 896 -312606896 2 896 -312606900 2 896 -312606904 2 896 -312606908 2 896 -312606912 2 896 -312610820 2 896 -312610824 2 896 -312610828 2 896 -312610832 2 896 -312610836 2 896 -312610840 2 896 -312610844 2 896 -312610848 2 896 -312610852 2 896 -312610856 2 896 -312610860 2 896 -312610864 2 896 -312610868 2 896 -312610872 2 896 -312610876 2 896 -312610880 2 896 -312610884 2 896 -312610888 2 896 -312610892 2 896 -312610896 2 896 -312610900 2 896 -312610904 2 896 -312610908 2 896 -312610912 2 896 -312610916 2 896 -312610920 2 896 -312610924 2 896 -312610928 2 896 -312610932 2 896 -312610936 2 896 -312610940 2 896 -312610944 2 896 -312610948 2 896 -312610952 2 896 -312610956 2 896 -312610960 2 896 -312610964 2 896 -312610968 2 896 -312610972 2 896 -312610976 2 896 -312610980 2 896 -312610984 2 896 -312610988 2 896 -312610992 2 896 -312610996 2 896 -312611000 2 896 -312611004 2 896 -312611008 2 896 -312614916 2 896 -312614920 2 896 -312614924 2 896 -312614928 2 896 -312614932 2 896 -312614936 2 896 -312614940 2 896 -312614944 2 896 -312614948 2 896 -312614952 2 896 -312614956 2 896 -312614960 2 896 -312614964 2 896 -312614968 2 896 -312614972 2 896 -312614976 2 896 -312614980 2 896 -312614984 2 896 -312614988 2 896 -312614992 2 896 -312614996 2 896 -312615000 2 896 -312615004 2 896 -312615008 2 896 -312615012 2 896 -312615016 2 896 -312615020 2 896 -312615024 2 896 -312615028 2 896 -312615032 2 896 -312615036 2 896 -312615040 2 896 -312615044 2 896 -312615048 2 896 -312615052 2 896 -312615056 2 896 -312615060 2 896 -312615064 2 896 -312615068 2 896 -312615072 2 896 -312615076 2 896 -312615080 2 896 -312615084 2 896 -312615088 2 896 -312615092 2 896 -312615096 2 896 -312615100 2 896 -312615104 2 896 -312619012 2 896 -312619016 2 896 -312619020 2 896 -312619024 2 896 -312619028 2 896 -312619032 2 896 -312619036 2 896 -312619040 2 896 -312619044 2 896 -312619048 2 896 -312619052 2 896 -312619056 2 896 -312619060 2 896 -312619064 2 896 -312619068 2 896 -312619072 2 896 -312619076 2 896 -312619080 2 896 -312619084 2 896 -312619088 2 896 -312619092 2 896 -312619096 2 896 -312619100 2 896 -312619104 2 896 -312619108 2 896 -312619112 2 896 -312619116 2 896 -312619120 2 896 -312619124 2 896 -312619128 2 896 -312619132 2 896 -312619136 2 896 -312619140 2 896 -312619144 2 896 -312619148 2 896 -312619152 2 896 -312619156 2 896 -312619160 2 896 -312619164 2 896 -312619168 2 896 -312619172 2 896 -312619176 2 896 -312619180 2 896 -312619184 2 896 -312619188 2 896 -312619192 2 896 -312619196 2 896 -312619200 2 896 -312623108 2 896 -312623112 2 896 -312623116 2 896 -312623120 2 896 -312623124 2 896 -312623128 2 896 -312623132 2 896 -312623136 2 896 -312623140 2 896 -312623144 2 896 -312623148 2 896 -312623152 2 896 -312623156 2 896 -312623160 2 896 -312623164 2 896 -312623168 2 896 -312623172 2 896 -312623176 2 896 -312623180 2 896 -312623184 2 896 -312623188 2 896 -312623192 2 896 -312623196 2 896 -312623200 2 896 -312623204 2 896 -312623208 2 896 -312623212 2 896 -312623216 2 896 -312623220 2 896 -312623224 2 896 -312623228 2 896 -312623232 2 896 -312623236 2 896 -312623240 2 896 -312623244 2 896 -312623248 2 896 -312623252 2 896 -312623256 2 896 -312623260 2 896 -312623264 2 896 -312623268 2 896 -312623272 2 896 -312623276 2 896 -312623280 2 896 -312623284 2 896 -312623288 2 896 -312623292 2 896 -312623296 2 896 -312627204 2 896 -312627208 2 896 -312627212 2 896 -312627216 2 896 -312627220 2 896 -312627224 2 896 -312627228 2 896 -312627232 2 896 -312627236 2 896 -312627240 2 896 -312627244 2 896 -312627248 2 896 -312627252 2 896 -312627256 2 896 -312627260 2 896 -312627264 2 896 -312627268 2 896 -312627272 2 896 -312627276 2 896 -312627280 2 896 -312627284 2 896 -312627288 2 896 -312627292 2 896 -312627296 2 896 -312627300 2 896 -312627304 2 896 -312627308 2 896 -312627312 2 896 -312627316 2 896 -312627320 2 896 -312627324 2 896 -312627328 2 896 -312627332 2 896 -312627336 2 896 -312627340 2 896 -312627344 2 896 -312627348 2 896 -312627352 2 896 -312627356 2 896 -312627360 2 896 -312627364 2 896 -312627368 2 896 -312627372 2 896 -312627376 2 896 -312627380 2 896 -312627384 2 896 -312627388 2 896 -312627392 2 896 -312631300 2 896 -312631304 2 896 -312631308 2 896 -312631312 2 896 -312631316 2 896 -312631320 2 896 -312631324 2 896 -312631328 2 896 -312631332 2 896 -312631336 2 896 -312631340 2 896 -312631344 2 896 -312631348 2 896 -312631352 2 896 -312631356 2 896 -312631360 2 896 -312631364 2 896 -312631368 2 896 -312631372 2 896 -312631376 2 896 -312631380 2 896 -312631384 2 896 -312631388 2 896 -312631392 2 896 -312631396 2 896 -312631400 2 896 -312631404 2 896 -312631408 2 896 -312631412 2 896 -312631416 2 896 -312631420 2 896 -312631424 2 896 -312631428 2 896 -312631432 2 896 -312631436 2 896 -312631440 2 896 -312631444 2 896 -312631448 2 896 -312631452 2 896 -312631456 2 896 -312631460 2 896 -312631464 2 896 -312631468 2 896 -312631472 2 896 -312631476 2 896 -312631480 2 896 -312631484 2 896 -312631488 2 896 -312635396 2 896 -312635400 2 896 -312635404 2 896 -312635408 2 896 -312635412 2 896 -312635416 2 896 -312635420 2 896 -312635424 2 896 -312635428 2 896 -312635432 2 896 -312635436 2 896 -312635440 2 896 -312635444 2 896 -312635448 2 896 -312635452 2 896 -312635456 2 896 -312635460 2 896 -312635464 2 896 -312635468 2 896 -312635472 2 896 -312635476 2 896 -312635480 2 896 -312635484 2 896 -312635488 2 896 -312635492 2 896 -312635496 2 896 -312635500 2 896 -312635504 2 896 -312635508 2 896 -312635512 2 896 -312635516 2 896 -312635520 2 896 -312635524 2 896 -312635528 2 896 -312635532 2 896 -312635536 2 896 -312635540 2 896 -312635544 2 896 -312635548 2 896 -312635552 2 896 -312635556 2 896 -312635560 2 896 -312635564 2 896 -312635568 2 896 -312635572 2 896 -312635576 2 896 -312635580 2 896 -312635584 2 896 -312639492 2 896 -312639496 2 896 -312639500 2 896 -312639504 2 896 -312639508 2 896 -312639512 2 896 -312639516 2 896 -312639520 2 896 -312639524 2 896 -312639528 2 896 -312639532 2 896 -312639536 2 896 -312639540 2 896 -312639544 2 896 -312639548 2 896 -312639552 2 896 -312639556 2 896 -312639560 2 896 -312639564 2 896 -312639568 2 896 -312639572 2 896 -312639576 2 896 -312639580 2 896 -312639584 2 896 -312639588 2 896 -312639592 2 896 -312639596 2 896 -312639600 2 896 -312639604 2 896 -312639608 2 896 -312639612 2 896 -312639616 2 896 -312639620 2 896 -312639624 2 896 -312639628 2 896 -312639632 2 896 -312639636 2 896 -312639640 2 896 -312639644 2 896 -312639648 2 896 -312639652 2 896 -312639656 2 896 -312639660 2 896 -312639664 2 896 -312639668 2 896 -312639672 2 896 -312639676 2 896 -312639680 2 896 -312643588 2 896 -312643592 2 896 -312643596 2 896 -312643600 2 896 -312643604 2 896 -312643608 2 896 -312643612 2 896 -312643616 2 896 -312643620 2 896 -312643624 2 896 -312643628 2 896 -312643632 2 896 -312643636 2 896 -312643640 2 896 -312643644 2 896 -312643648 2 896 -312643652 2 896 -312643656 2 896 -312643660 2 896 -312643664 2 896 -312643668 2 896 -312643672 2 896 -312643676 2 896 -312643680 2 896 -312643684 2 896 -312643688 2 896 -312643692 2 896 -312643696 2 896 -312643700 2 896 -312643704 2 896 -312643708 2 896 -312643712 2 896 -312643716 2 896 -312643720 2 896 -312643724 2 896 -312643728 2 896 -312643732 2 896 -312643736 2 896 -312643740 2 896 -312643744 2 896 -312643748 2 896 -312643752 2 896 -312643756 2 896 -312643760 2 896 -312643764 2 896 -312643768 2 896 -312643772 2 896 -312643776 2 896 -312647684 2 896 -312647688 2 896 -312647692 2 896 -312647696 2 896 -312647700 2 896 -312647704 2 896 -312647708 2 896 -312647712 2 896 -312647716 2 896 -312647720 2 896 -312647724 2 896 -312647728 2 896 -312647732 2 896 -312647736 2 896 -312647740 2 896 -312647744 2 896 -312647748 2 896 -312647752 2 896 -312647756 2 896 -312647760 2 896 -312647764 2 896 -312647768 2 896 -312647772 2 896 -312647776 2 896 -312647780 2 896 -312647784 2 896 -312647788 2 896 -312647792 2 896 -312647796 2 896 -312647800 2 896 -312647804 2 896 -312647808 2 896 -312647812 2 896 -312647816 2 896 -312647820 2 896 -312647824 2 896 -312647828 2 896 -312647832 2 896 -312647836 2 896 -312647840 2 896 -312647844 2 896 -312647848 2 896 -312647852 2 896 -312647856 2 896 -312647860 2 896 -312647864 2 896 -312647868 2 896 -312647872 2 896 -312651780 2 896 -312651784 2 896 -312651788 2 896 -312651792 2 896 -312651796 2 896 -312651800 2 896 -312651804 2 896 -312651808 2 896 -312651812 2 896 -312651816 2 896 -312651820 2 896 -312651824 2 896 -312651828 2 896 -312651832 2 896 -312651836 2 896 -312651840 2 896 -312651844 2 896 -312651848 2 896 -312651852 2 896 -312651856 2 896 -312651860 2 896 -312651864 2 896 -312651868 2 896 -312651872 2 896 -312651876 2 896 -312651880 2 896 -312651884 2 896 -312651888 2 896 -312651892 2 896 -312651896 2 896 -312651900 2 896 -312651904 2 896 -312651908 2 896 -312651912 2 896 -312651916 2 896 -312651920 2 896 -312651924 2 896 -312651928 2 896 -312651932 2 896 -312651936 2 896 -312651940 2 896 -312651944 2 896 -312651948 2 896 -312651952 2 896 -312651956 2 896 -312651960 2 896 -312651964 2 896 -312651968 2 896 -312655876 2 896 -312655880 2 896 -312655884 2 896 -312655888 2 896 -312655892 2 896 -312655896 2 896 -312655900 2 896 -312655904 2 896 -312655908 2 896 -312655912 2 896 -312655916 2 896 -312655920 2 896 -312655924 2 896 -312655928 2 896 -312655932 2 896 -312655936 2 896 -312655940 2 896 -312655944 2 896 -312655948 2 896 -312655952 2 896 -312655956 2 896 -312655960 2 896 -312655964 2 896 -312655968 2 896 -312655972 2 896 -312655976 2 896 -312655980 2 896 -312655984 2 896 -312655988 2 896 -312655992 2 896 -312655996 2 896 -312656000 2 896 -312656004 2 896 -312656008 2 896 -312656012 2 896 -312656016 2 896 -312656020 2 896 -312656024 2 896 -312656028 2 896 -312656032 2 896 -312656036 2 896 -312656040 2 896 -312656044 2 896 -312656048 2 896 -312656052 2 896 -312656056 2 896 -312656060 2 896 -312656064 2 896 -312659972 2 896 -312659976 2 896 -312659980 2 896 -312659984 2 896 -312659988 2 896 -312659992 2 896 -312659996 2 896 -312660000 2 896 -312660004 2 896 -312660008 2 896 -312660012 2 896 -312660016 2 896 -312660020 2 896 -312660024 2 896 -312660028 2 896 -312660032 2 896 -312660036 2 896 -312660040 2 896 -312660044 2 896 -312660048 2 896 -312660052 2 896 -312660056 2 896 -312660060 2 896 -312660064 2 896 -312660068 2 896 -312660072 2 896 -312660076 2 896 -312660080 2 896 -312660084 2 896 -312660088 2 896 -312660092 2 896 -312660096 2 896 -312660100 2 896 -312660104 2 896 -312660108 2 896 -312660112 2 896 -312660116 2 896 -312660120 2 896 -312660124 2 896 -312660128 2 896 -312660132 2 896 -312660136 2 896 -312660140 2 896 -312660144 2 896 -312660148 2 896 -312660152 2 896 -312660156 2 896 -312660160 2 896 -312664068 2 896 -312664072 2 896 -312664076 2 896 -312664080 2 896 -312664084 2 896 -312664088 2 896 -312664092 2 896 -312664096 2 896 -312664100 2 896 -312664104 2 896 -312664108 2 896 -312664112 2 896 -312664116 2 896 -312664120 2 896 -312664124 2 896 -312664128 2 896 -312664132 2 896 -312664136 2 896 -312664140 2 896 -312664144 2 896 -312664148 2 896 -312664152 2 896 -312664156 2 896 -312664160 2 896 -312664164 2 896 -312664168 2 896 -312664172 2 896 -312664176 2 896 -312664180 2 896 -312664184 2 896 -312664188 2 896 -312664192 2 896 -312664196 2 896 -312664200 2 896 -312664204 2 896 -312664208 2 896 -312664212 2 896 -312664216 2 896 -312664220 2 896 -312664224 2 896 -312664228 2 896 -312664232 2 896 -312664236 2 896 -312664240 2 896 -312664244 2 896 -312664248 2 896 -312664252 2 896 -312664256 2 896 -312668164 2 896 -312668168 2 896 -312668172 2 896 -312668176 2 896 -312668180 2 896 -312668184 2 896 -312668188 2 896 -312668192 2 896 -312668196 2 896 -312668200 2 896 -312668204 2 896 -312668208 2 896 -312668212 2 896 -312668216 2 896 -312668220 2 896 -312668224 2 896 -312668228 2 896 -312668232 2 896 -312668236 2 896 -312668240 2 896 -312668244 2 896 -312668248 2 896 -312668252 2 896 -312668256 2 896 -312668260 2 896 -312668264 2 896 -312668268 2 896 -312668272 2 896 -312668276 2 896 -312668280 2 896 -312668284 2 896 -312668288 2 896 -312668292 2 896 -312668296 2 896 -312668300 2 896 -312668304 2 896 -312668308 2 896 -312668312 2 896 -312668316 2 896 -312668320 2 896 -312668324 2 896 -312668328 2 896 -312668332 2 896 -312668336 2 896 -312668340 2 896 -312668344 2 896 -312668348 2 896 -312668352 2 896 -312672260 2 896 -312672264 2 896 -312672268 2 896 -312672272 2 896 -312672276 2 896 -312672280 2 896 -312672284 2 896 -312672288 2 896 -312672292 2 896 -312672296 2 896 -312672300 2 896 -312672304 2 896 -312672308 2 896 -312672312 2 896 -312672316 2 896 -312672320 2 896 -312672324 2 896 -312672328 2 896 -312672332 2 896 -312672336 2 896 -312672340 2 896 -312672344 2 896 -312672348 2 896 -312672352 2 896 -312672356 2 896 -312672360 2 896 -312672364 2 896 -312672368 2 896 -312672372 2 896 -312672376 2 896 -312672380 2 896 -312672384 2 896 -312672388 2 896 -312672392 2 896 -312672396 2 896 -312672400 2 896 -312672404 2 896 -312672408 2 896 -312672412 2 896 -312672416 2 896 -312672420 2 896 -312672424 2 896 -312672428 2 896 -312672432 2 896 -312672436 2 896 -312672440 2 896 -312672444 2 896 -312672448 2 896 -312676356 2 896 -312676360 2 896 -312676364 2 896 -312676368 2 896 -312676372 2 896 -312676376 2 896 -312676380 2 896 -312676384 2 896 -312676388 2 896 -312676392 2 896 -312676396 2 896 -312676400 2 896 -312676404 2 896 -312676408 2 896 -312676412 2 896 -312676416 2 896 -312676420 2 896 -312676424 2 896 -312676428 2 896 -312676432 2 896 -312676436 2 896 -312676440 2 896 -312676444 2 896 -312676448 2 896 -312676452 2 896 -312676456 2 896 -312676460 2 896 -312676464 2 896 -312676468 2 896 -312676472 2 896 -312676476 2 896 -312676480 2 896 -312676484 2 896 -312676488 2 896 -312676492 2 896 -312676496 2 896 -312676500 2 896 -312676504 2 896 -312676508 2 896 -312676512 2 896 -312676516 2 896 -312676520 2 896 -312676524 2 896 -312676528 2 896 -312676532 2 896 -312676536 2 896 -312676540 2 896 -312676544 2 896 -312680452 2 896 -312680456 2 896 -312680460 2 896 -312680464 2 896 -312680468 2 896 -312680472 2 896 -312680476 2 896 -312680480 2 896 -312680484 2 896 -312680488 2 896 -312680492 2 896 -312680496 2 896 -312680500 2 896 -312680504 2 896 -312680508 2 896 -312680512 2 896 -312680516 2 896 -312680520 2 896 -312680524 2 896 -312680528 2 896 -312680532 2 896 -312680536 2 896 -312680540 2 896 -312680544 2 896 -312680548 2 896 -312680552 2 896 -312680556 2 896 -312680560 2 896 -312680564 2 896 -312680568 2 896 -312680572 2 896 -312680576 2 896 -312680580 2 896 -312680584 2 896 -312680588 2 896 -312680592 2 896 -312680596 2 896 -312680600 2 896 -312680604 2 896 -312680608 2 896 -312680612 2 896 -312680616 2 896 -312680620 2 896 -312680624 2 896 -312680628 2 896 -312680632 2 896 -312680636 2 896 -312680640 2 896 -312684548 2 896 -312684552 2 896 -312684556 2 896 -312684560 2 896 -312684564 2 896 -312684568 2 896 -312684572 2 896 -312684576 2 896 -312684580 2 896 -312684584 2 896 -312684588 2 896 -312684592 2 896 -312684596 2 896 -312684600 2 896 -312684604 2 896 -312684608 2 896 -312684612 2 896 -312684616 2 896 -312684620 2 896 -312684624 2 896 -312684628 2 896 -312684632 2 896 -312684636 2 896 -312684640 2 896 -312684644 2 896 -312684648 2 896 -312684652 2 896 -312684656 2 896 -312684660 2 896 -312684664 2 896 -312684668 2 896 -312684672 2 896 -312684676 2 896 -312684680 2 896 -312684684 2 896 -312684688 2 896 -312684692 2 896 -312684696 2 896 -312684700 2 896 -312684704 2 896 -312684708 2 896 -312684712 2 896 -312684716 2 896 -312684720 2 896 -312684724 2 896 -312684728 2 896 -312684732 2 896 -312684736 2 896 -312688644 2 896 -312688648 2 896 -312688652 2 896 -312688656 2 896 -312688660 2 896 -312688664 2 896 -312688668 2 896 -312688672 2 896 -312688676 2 896 -312688680 2 896 -312688684 2 896 -312688688 2 896 -312688692 2 896 -312688696 2 896 -312688700 2 896 -312688704 2 896 -312688708 2 896 -312688712 2 896 -312688716 2 896 -312688720 2 896 -312688724 2 896 -312688728 2 896 -312688732 2 896 -312688736 2 896 -312688740 2 896 -312688744 2 896 -312688748 2 896 -312688752 2 896 -312688756 2 896 -312688760 2 896 -312688764 2 896 -312688768 2 896 -312688772 2 896 -312688776 2 896 -312688780 2 896 -312688784 2 896 -312688788 2 896 -312688792 2 896 -312688796 2 896 -312688800 2 896 -312688804 2 896 -312688808 2 896 -312688812 2 896 -312688816 2 896 -312688820 2 896 -312688824 2 896 -312688828 2 896 -312688832 2 896 -312692740 2 896 -312692744 2 896 -312692748 2 896 -312692752 2 896 -312692756 2 896 -312692760 2 896 -312692764 2 896 -312692768 2 896 -312692772 2 896 -312692776 2 896 -312692780 2 896 -312692784 2 896 -312692788 2 896 -312692792 2 896 -312692796 2 896 -312692800 2 896 -312692804 2 896 -312692808 2 896 -312692812 2 896 -312692816 2 896 -312692820 2 896 -312692824 2 896 -312692828 2 896 -312692832 2 896 -312692836 2 896 -312692840 2 896 -312692844 2 896 -312692848 2 896 -312692852 2 896 -312692856 2 896 -312692860 2 896 -312692864 2 896 -312692868 2 896 -312692872 2 896 -312692876 2 896 -312692880 2 896 -312692884 2 896 -312692888 2 896 -312692892 2 896 -312692896 2 896 -312692900 2 896 -312692904 2 896 -312692908 2 896 -312692912 2 896 -312692916 2 896 -312692920 2 896 -312692924 2 896 -312692928 2 896 -312696836 2 896 -312696840 2 896 -312696844 2 896 -312696848 2 896 -312696852 2 896 -312696856 2 896 -312696860 2 896 -312696864 2 896 -312696868 2 896 -312696872 2 896 -312696876 2 896 -312696880 2 896 -312696884 2 896 -312696888 2 896 -312696892 2 896 -312696896 2 896 -312696900 2 896 -312696904 2 896 -312696908 2 896 -312696912 2 896 -312696916 2 896 -312696920 2 896 -312696924 2 896 -312696928 2 896 -312696932 2 896 -312696936 2 896 -312696940 2 896 -312696944 2 896 -312696948 2 896 -312696952 2 896 -312696956 2 896 -312696960 2 896 -312696964 2 896 -312696968 2 896 -312696972 2 896 -312696976 2 896 -312696980 2 896 -312696984 2 896 -312696988 2 896 -312696992 2 896 -312696996 2 896 -312697000 2 896 -312697004 2 896 -312697008 2 896 -312697012 2 896 -312697016 2 896 -312697020 2 896 -312697024 2 896 -312700932 2 896 -312700936 2 896 -312700940 2 896 -312700944 2 896 -312700948 2 896 -312700952 2 896 -312700956 2 896 -312700960 2 896 -312700964 2 896 -312700968 2 896 -312700972 2 896 -312700976 2 896 -312700980 2 896 -312700984 2 896 -312700988 2 896 -312700992 2 896 -312700996 2 896 -312701000 2 896 -312701004 2 896 -312701008 2 896 -312701012 2 896 -312701016 2 896 -312701020 2 896 -312701024 2 896 -312701028 2 896 -312701032 2 896 -312701036 2 896 -312701040 2 896 -312701044 2 896 -312701048 2 896 -312701052 2 896 -312701056 2 896 -312701060 2 896 -312701064 2 896 -312701068 2 896 -312701072 2 896 -312701076 2 896 -312701080 2 896 -312701084 2 896 -312701088 2 896 -312701092 2 896 -312701096 2 896 -312701100 2 896 -312701104 2 896 -312701108 2 896 -312701112 2 896 -312701116 2 896 -312701120 2 896 -312705028 2 896 -312705032 2 896 -312705036 2 896 -312705040 2 896 -312705044 2 896 -312705048 2 896 -312705052 2 896 -312705056 2 896 -312705060 2 896 -312705064 2 896 -312705068 2 896 -312705072 2 896 -312705076 2 896 -312705080 2 896 -312705084 2 896 -312705088 2 896 -312705092 2 896 -312705096 2 896 -312705100 2 896 -312705104 2 896 -312705108 2 896 -312705112 2 896 -312705116 2 896 -312705120 2 896 -312705124 2 896 -312705128 2 896 -312705132 2 896 -312705136 2 896 -312705140 2 896 -312705144 2 896 -312705148 2 896 -312705152 2 896 -312705156 2 896 -312705160 2 896 -312705164 2 896 -312705168 2 896 -312705172 2 896 -312705176 2 896 -312705180 2 896 -312705184 2 896 -312705188 2 896 -312705192 2 896 -312705196 2 896 -312705200 2 896 -312705204 2 896 -312705208 2 896 -312705212 2 896 -312705216 2 896 -312709124 2 896 -312709128 2 896 -312709132 2 896 -312709136 2 896 -312709140 2 896 -312709144 2 896 -312709148 2 896 -312709152 2 896 -312709156 2 896 -312709160 2 896 -312709164 2 896 -312709168 2 896 -312709172 2 896 -312709176 2 896 -312709180 2 896 -312709184 2 896 -312709188 2 896 -312709192 2 896 -312709196 2 896 -312709200 2 896 -312709204 2 896 -312709208 2 896 -312709212 2 896 -312709216 2 896 -312709220 2 896 -312709224 2 896 -312709228 2 896 -312709232 2 896 -312709236 2 896 -312709240 2 896 -312709244 2 896 -312709248 2 896 -312709252 2 896 -312709256 2 896 -312709260 2 896 -312709264 2 896 -312709268 2 896 -312709272 2 896 -312709276 2 896 -312709280 2 896 -312709284 2 896 -312709288 2 896 -312709292 2 896 -312709296 2 896 -312709300 2 896 -312709304 2 896 -312709308 2 896 -312709312 2 896 -312713220 2 896 -312713224 2 896 -312713228 2 896 -312713232 2 896 -312713236 2 896 -312713240 2 896 -312713244 2 896 -312713248 2 896 -312713252 2 896 -312713256 2 896 -312713260 2 896 -312713264 2 896 -312713268 2 896 -312713272 2 896 -312713276 2 896 -312713280 2 896 -312713284 2 896 -312713288 2 896 -312713292 2 896 -312713296 2 896 -312713300 2 896 -312713304 2 896 -312713308 2 896 -312713312 2 896 -312713316 2 896 -312713320 2 896 -312713324 2 896 -312713328 2 896 -312713332 2 896 -312713336 2 896 -312713340 2 896 -312713344 2 896 -312713348 2 896 -312713352 2 896 -312713356 2 896 -312713360 2 896 -312713364 2 896 -312713368 2 896 -312713372 2 896 -312713376 2 896 -312713380 2 896 -312713384 2 896 -312713388 2 896 -312713392 2 896 -312713396 2 896 -312713400 2 896 -312713404 2 896 -312713408 2 896 -312717316 2 896 -312717320 2 896 -312717324 2 896 -312717328 2 896 -312717332 2 896 -312717336 2 896 -312717340 2 896 -312717344 2 896 -312717348 2 896 -312717352 2 896 -312717356 2 896 -312717360 2 896 -312717364 2 896 -312717368 2 896 -312717372 2 896 -312717376 2 896 -312717380 2 896 -312717384 2 896 -312717388 2 896 -312717392 2 896 -312717396 2 896 -312717400 2 896 -312717404 2 896 -312717408 2 896 -312717412 2 896 -312717416 2 896 -312717420 2 896 -312717424 2 896 -312717428 2 896 -312717432 2 896 -312717436 2 896 -312717440 2 896 -312717444 2 896 -312717448 2 896 -312717452 2 896 -312717456 2 896 -312717460 2 896 -312717464 2 896 -312717468 2 896 -312717472 2 896 -312717476 2 896 -312717480 2 896 -312717484 2 896 -312717488 2 896 -312717492 2 896 -312717496 2 896 -312717500 2 896 -312717504 2 896 -312721412 2 896 -312721416 2 896 -312721420 2 896 -312721424 2 896 -312721428 2 896 -312721432 2 896 -312721436 2 896 -312721440 2 896 -312721444 2 896 -312721448 2 896 -312721452 2 896 -312721456 2 896 -312721460 2 896 -312721464 2 896 -312721468 2 896 -312721472 2 896 -312721476 2 896 -312721480 2 896 -312721484 2 896 -312721488 2 896 -312721492 2 896 -312721496 2 896 -312721500 2 896 -312721504 2 896 -312721508 2 896 -312721512 2 896 -312721516 2 896 -312721520 2 896 -312721524 2 896 -312721528 2 896 -312721532 2 896 -312721536 2 896 -312721540 2 896 -312721544 2 896 -312721548 2 896 -312721552 2 896 -312721556 2 896 -312721560 2 896 -312721564 2 896 -312721568 2 896 -312721572 2 896 -312721576 2 896 -312721580 2 896 -312721584 2 896 -312721588 2 896 -312721592 2 896 -312721596 2 896 -312721600 2 896 -312725508 2 896 -312725512 2 896 -312725516 2 896 -312725520 2 896 -312725524 2 896 -312725528 2 896 -312725532 2 896 -312725536 2 896 -312725540 2 896 -312725544 2 896 -312725548 2 896 -312725552 2 896 -312725556 2 896 -312725560 2 896 -312725564 2 896 -312725568 2 896 -312725572 2 896 -312725576 2 896 -312725580 2 896 -312725584 2 896 -312725588 2 896 -312725592 2 896 -312725596 2 896 -312725600 2 896 -312725604 2 896 -312725608 2 896 -312725612 2 896 -312725616 2 896 -312725620 2 896 -312725624 2 896 -312725628 2 896 -312725632 2 896 -312725636 2 896 -312725640 2 896 -312725644 2 896 -312725648 2 896 -312725652 2 896 -312725656 2 896 -312725660 2 896 -312725664 2 896 -312725668 2 896 -312725672 2 896 -312725676 2 896 -312725680 2 896 -312725684 2 896 -312725688 2 896 -312725692 2 896 -312725696 2 896 -312729604 2 896 -312729608 2 896 -312729612 2 896 -312729616 2 896 -312729620 2 896 -312729624 2 896 -312729628 2 896 -312729632 2 896 -312729636 2 896 -312729640 2 896 -312729644 2 896 -312729648 2 896 -312729652 2 896 -312729656 2 896 -312729660 2 896 -312729664 2 896 -312729668 2 896 -312729672 2 896 -312729676 2 896 -312729680 2 896 -312729684 2 896 -312729688 2 896 -312729692 2 896 -312729696 2 896 -312729700 2 896 -312729704 2 896 -312729708 2 896 -312729712 2 896 -312729716 2 896 -312729720 2 896 -312729724 2 896 -312729728 2 896 -312729732 2 896 -312729736 2 896 -312729740 2 896 -312729744 2 896 -312729748 2 896 -312729752 2 896 -312729756 2 896 -312729760 2 896 -312729764 2 896 -312729768 2 896 -312729772 2 896 -312729776 2 896 -312729780 2 896 -312729784 2 896 -312729788 2 896 -312729792 2 896 -312733700 2 896 -312733704 2 896 -312733708 2 896 -312733712 2 896 -312733716 2 896 -312733720 2 896 -312733724 2 896 -312733728 2 896 -312733732 2 896 -312733736 2 896 -312733740 2 896 -312733744 2 896 -312733748 2 896 -312733752 2 896 -312733756 2 896 -312733760 2 896 -312733764 2 896 -312733768 2 896 -312733772 2 896 -312733776 2 896 -312733780 2 896 -312733784 2 896 -312733788 2 896 -312733792 2 896 -312733796 2 896 -312733800 2 896 -312733804 2 896 -312733808 2 896 -312733812 2 896 -312733816 2 896 -312733820 2 896 -312733824 2 896 -312733828 2 896 -312733832 2 896 -312733836 2 896 -312733840 2 896 -312733844 2 896 -312733848 2 896 -312733852 2 896 -312733856 2 896 -312733860 2 896 -312733864 2 896 -312733868 2 896 -312733872 2 896 -312733876 2 896 -312733880 2 896 -312733884 2 896 -312733888 2 896 -312737796 2 896 -312737800 2 896 -312737804 2 896 -312737808 2 896 -312737812 2 896 -312737816 2 896 -312737820 2 896 -312737824 2 896 -312737828 2 896 -312737832 2 896 -312737836 2 896 -312737840 2 896 -312737844 2 896 -312737848 2 896 -312737852 2 896 -312737856 2 896 -312737860 2 896 -312737864 2 896 -312737868 2 896 -312737872 2 896 -312737876 2 896 -312737880 2 896 -312737884 2 896 -312737888 2 896 -312737892 2 896 -312737896 2 896 -312737900 2 896 -312737904 2 896 -312737908 2 896 -312737912 2 896 -312737916 2 896 -312737920 2 896 -312737924 2 896 -312737928 2 896 -312737932 2 896 -312737936 2 896 -312737940 2 896 -312737944 2 896 -312737948 2 896 -312737952 2 896 -312737956 2 896 -312737960 2 896 -312737964 2 896 -312737968 2 896 -312737972 2 896 -312737976 2 896 -312737980 2 896 -312737984 2 896 -312741892 2 896 -312741896 2 896 -312741900 2 896 -312741904 2 896 -312741908 2 896 -312741912 2 896 -312741916 2 896 -312741920 2 896 -312741924 2 896 -312741928 2 896 -312741932 2 896 -312741936 2 896 -312741940 2 896 -312741944 2 896 -312741948 2 896 -312741952 2 896 -312741956 2 896 -312741960 2 896 -312741964 2 896 -312741968 2 896 -312741972 2 896 -312741976 2 896 -312741980 2 896 -312741984 2 896 -312741988 2 896 -312741992 2 896 -312741996 2 896 -312742000 2 896 -312742004 2 896 -312742008 2 896 -312742012 2 896 -312742016 2 896 -312742020 2 896 -312742024 2 896 -312742028 2 896 -312742032 2 896 -312742036 2 896 -312742040 2 896 -312742044 2 896 -312742048 2 896 -312742052 2 896 -312742056 2 896 -312742060 2 896 -312742064 2 896 -312742068 2 896 -312742072 2 896 -312742076 2 896 -312742080 2 896 -312745988 2 896 -312745992 2 896 -312745996 2 896 -312746000 2 896 -312746004 2 896 -312746008 2 896 -312746012 2 896 -312746016 2 896 -312746020 2 896 -312746024 2 896 -312746028 2 896 -312746032 2 896 -312746036 2 896 -312746040 2 896 -312746044 2 896 -312746048 2 896 -312746052 2 896 -312746056 2 896 -312746060 2 896 -312746064 2 896 -312746068 2 896 -312746072 2 896 -312746076 2 896 -312746080 2 896 -312746084 2 896 -312746088 2 896 -312746092 2 896 -312746096 2 896 -312746100 2 896 -312746104 2 896 -312746108 2 896 -312746112 2 896 -312746116 2 896 -312746120 2 896 -312746124 2 896 -312746128 2 896 -312746132 2 896 -312746136 2 896 -312746140 2 896 -312746144 2 896 -312746148 2 896 -312746152 2 896 -312746156 2 896 -312746160 2 896 -312746164 2 896 -312746168 2 896 -312746172 2 896 -312746176 2 896 -312750084 2 896 -312750088 2 896 -312750092 2 896 -312750096 2 896 -312750100 2 896 -312750104 2 896 -312750108 2 896 -312750112 2 896 -312750116 2 896 -312750120 2 896 -312750124 2 896 -312750128 2 896 -312750132 2 896 -312750136 2 896 -312750140 2 896 -312750144 2 896 -312750148 2 896 -312750152 2 896 -312750156 2 896 -312750160 2 896 -312750164 2 896 -312750168 2 896 -312750172 2 896 -312750176 2 896 -312750180 2 896 -312750184 2 896 -312750188 2 896 -312750192 2 896 -312750196 2 896 -312750200 2 896 -312750204 2 896 -312750208 2 896 -312750212 2 896 -312750216 2 896 -312750220 2 896 -312750224 2 896 -312750228 2 896 -312750232 2 896 -312750236 2 896 -312750240 2 896 -312750244 2 896 -312750248 2 896 -312750252 2 896 -312750256 2 896 -312750260 2 896 -312750264 2 896 -312750268 2 896 -312750272 2 896 -312754180 2 896 -312754184 2 896 -312754188 2 896 -312754192 2 896 -312754196 2 896 -312754200 2 896 -312754204 2 896 -312754208 2 896 -312754212 2 896 -312754216 2 896 -312754220 2 896 -312754224 2 896 -312754228 2 896 -312754232 2 896 -312754236 2 896 -312754240 2 896 -312754244 2 896 -312754248 2 896 -312754252 2 896 -312754256 2 896 -312754260 2 896 -312754264 2 896 -312754268 2 896 -312754272 2 896 -312754276 2 896 -312754280 2 896 -312754284 2 896 -312754288 2 896 -312754292 2 896 -312754296 2 896 -312754300 2 896 -312754304 2 896 -312754308 2 896 -312754312 2 896 -312754316 2 896 -312754320 2 896 -312754324 2 896 -312754328 2 896 -312754332 2 896 -312754336 2 896 -312754340 2 896 -312754344 2 896 -312754348 2 896 -312754352 2 896 -312754356 2 896 -312754360 2 896 -312754364 2 896 -312754368 2 896 -312758276 2 896 -312758280 2 896 -312758284 2 896 -312758288 2 896 -312758292 2 896 -312758296 2 896 -312758300 2 896 -312758304 2 896 -312758308 2 896 -312758312 2 896 -312758316 2 896 -312758320 2 896 -312758324 2 896 -312758328 2 896 -312758332 2 896 -312758336 2 896 -312758340 2 896 -312758344 2 896 -312758348 2 896 -312758352 2 896 -312758356 2 896 -312758360 2 896 -312758364 2 896 -312758368 2 896 -312758372 2 896 -312758376 2 896 -312758380 2 896 -312758384 2 896 -312758388 2 896 -312758392 2 896 -312758396 2 896 -312758400 2 896 -312758404 2 896 -312758408 2 896 -312758412 2 896 -312758416 2 896 -312758420 2 896 -312758424 2 896 -312758428 2 896 -312758432 2 896 -312758436 2 896 -312758440 2 896 -312758444 2 896 -312758448 2 896 -312758452 2 896 -312758456 2 896 -312758460 2 896 -312758464 2 896 -312762372 2 896 -312762376 2 896 -312762380 2 896 -312762384 2 896 -312762388 2 896 -312762392 2 896 -312762396 2 896 -312762400 2 896 -312762404 2 896 -312762408 2 896 -312762412 2 896 -312762416 2 896 -312762420 2 896 -312762424 2 896 -312762428 2 896 -312762432 2 896 -312762436 2 896 -312762440 2 896 -312762444 2 896 -312762448 2 896 -312762452 2 896 -312762456 2 896 -312762460 2 896 -312762464 2 896 -312762468 2 896 -312762472 2 896 -312762476 2 896 -312762480 2 896 -312762484 2 896 -312762488 2 896 -312762492 2 896 -312762496 2 896 -312762500 2 896 -312762504 2 896 -312762508 2 896 -312762512 2 896 -312762516 2 896 -312762520 2 896 -312762524 2 896 -312762528 2 896 -312762532 2 896 -312762536 2 896 -312762540 2 896 -312762544 2 896 -312762548 2 896 -312762552 2 896 -312762556 2 896 -312762560 2 896 -312766468 2 896 -312766472 2 896 -312766476 2 896 -312766480 2 896 -312766484 2 896 -312766488 2 896 -312766492 2 896 -312766496 2 896 -312766500 2 896 -312766504 2 896 -312766508 2 896 -312766512 2 896 -312766516 2 896 -312766520 2 896 -312766524 2 896 -312766528 2 896 -312766532 2 896 -312766536 2 896 -312766540 2 896 -312766544 2 896 -312766548 2 896 -312766552 2 896 -312766556 2 896 -312766560 2 896 -312766564 2 896 -312766568 2 896 -312766572 2 896 -312766576 2 896 -312766580 2 896 -312766584 2 896 -312766588 2 896 -312766592 2 896 -312766596 2 896 -312766600 2 896 -312766604 2 896 -312766608 2 896 -312766612 2 896 -312766616 2 896 -312766620 2 896 -312766624 2 896 -312766628 2 896 -312766632 2 896 -312766636 2 896 -312766640 2 896 -312766644 2 896 -312766648 2 896 -312766652 2 896 -312766656 2 896 -312770564 2 896 -312770568 2 896 -312770572 2 896 -312770576 2 896 -312770580 2 896 -312770584 2 896 -312770588 2 896 -312770592 2 896 -312770596 2 896 -312770600 2 896 -312770604 2 896 -312770608 2 896 -312770612 2 896 -312770616 2 896 -312770620 2 896 -312770624 2 896 -312770628 2 896 -312770632 2 896 -312770636 2 896 -312770640 2 896 -312770644 2 896 -312770648 2 896 -312770652 2 896 -312770656 2 896 -312770660 2 896 -312770664 2 896 -312770668 2 896 -312770672 2 896 -312770676 2 896 -312770680 2 896 -312770684 2 896 -312770688 2 896 -312770692 2 896 -312770696 2 896 -312770700 2 896 -312770704 2 896 -312770708 2 896 -312770712 2 896 -312770716 2 896 -312770720 2 896 -312770724 2 896 -312770728 2 896 -312770732 2 896 -312770736 2 896 -312770740 2 896 -312770744 2 896 -312770748 2 896 -312770752 2 896 -312774660 2 896 -312774664 2 896 -312774668 2 896 -312774672 2 896 -312774676 2 896 -312774680 2 896 -312774684 2 896 -312774688 2 896 -312774692 2 896 -312774696 2 896 -312774700 2 896 -312774704 2 896 -312774708 2 896 -312774712 2 896 -312774716 2 896 -312774720 2 896 -312774724 2 896 -312774728 2 896 -312774732 2 896 -312774736 2 896 -312774740 2 896 -312774744 2 896 -312774748 2 896 -312774752 2 896 -312774756 2 896 -312774760 2 896 -312774764 2 896 -312774768 2 896 -312774772 2 896 -312774776 2 896 -312774780 2 896 -312774784 2 896 -312774788 2 896 -312774792 2 896 -312774796 2 896 -312774800 2 896 -312774804 2 896 -312774808 2 896 -312774812 2 896 -312774816 2 896 -312774820 2 896 -312774824 2 896 -312774828 2 896 -312774832 2 896 -312774836 2 896 -312774840 2 896 -312774844 2 896 -312774848 2 896 -312778756 2 896 -312778760 2 896 -312778764 2 896 -312778768 2 896 -312778772 2 896 -312778776 2 896 -312778780 2 896 -312778784 2 896 -312778788 2 896 -312778792 2 896 -312778796 2 896 -312778800 2 896 -312778804 2 896 -312778808 2 896 -312778812 2 896 -312778816 2 896 -312778820 2 896 -312778824 2 896 -312778828 2 896 -312778832 2 896 -312778836 2 896 -312778840 2 896 -312778844 2 896 -312778848 2 896 -312778852 2 896 -312778856 2 896 -312778860 2 896 -312778864 2 896 -312778868 2 896 -312778872 2 896 -312778876 2 896 -312778880 2 896 -312778884 2 896 -312778888 2 896 -312778892 2 896 -312778896 2 896 -312778900 2 896 -312778904 2 896 -312778908 2 896 -312778912 2 896 -312778916 2 896 -312778920 2 896 -312778924 2 896 -312778928 2 896 -312778932 2 896 -312778936 2 896 -312778940 2 896 -312778944 2 896 -312782852 2 896 -312782856 2 896 -312782860 2 896 -312782864 2 896 -312782868 2 896 -312782872 2 896 -312782876 2 896 -312782880 2 896 -312782884 2 896 -312782888 2 896 -312782892 2 896 -312782896 2 896 -312782900 2 896 -312782904 2 896 -312782908 2 896 -312782912 2 896 -312782916 2 896 -312782920 2 896 -312782924 2 896 -312782928 2 896 -312782932 2 896 -312782936 2 896 -312782940 2 896 -312782944 2 896 -312782948 2 896 -312782952 2 896 -312782956 2 896 -312782960 2 896 -312782964 2 896 -312782968 2 896 -312782972 2 896 -312782976 2 896 -312782980 2 896 -312782984 2 896 -312782988 2 896 -312782992 2 896 -312782996 2 896 -312783000 2 896 -312783004 2 896 -312783008 2 896 -312783012 2 896 -312783016 2 896 -312783020 2 896 -312783024 2 896 -312783028 2 896 -312783032 2 896 -312783036 2 896 -312783040 2 896 -312786948 2 896 -312786952 2 896 -312786956 2 896 -312786960 2 896 -312786964 2 896 -312786968 2 896 -312786972 2 896 -312786976 2 896 -312786980 2 896 -312786984 2 896 -312786988 2 896 -312786992 2 896 -312786996 2 896 -312787000 2 896 -312787004 2 896 -312787008 2 896 -312787012 2 896 -312787016 2 896 -312787020 2 896 -312787024 2 896 -312787028 2 896 -312787032 2 896 -312787036 2 896 -312787040 2 896 -312787044 2 896 -312787048 2 896 -312787052 2 896 -312787056 2 896 -312787060 2 896 -312787064 2 896 -312787068 2 896 -312787072 2 896 -312787076 2 896 -312787080 2 896 -312787084 2 896 -312787088 2 896 -312787092 2 896 -312787096 2 896 -312787100 2 896 -312787104 2 896 -312787108 2 896 -312787112 2 896 -312787116 2 896 -312787120 2 896 -312787124 2 896 -312787128 2 896 -312787132 2 896 -312787136 2 896 +307236868 32 960 +307236872 2 960 +307236876 32 960 +307236880 2 960 +307236884 32 960 +307236888 2 960 +307236892 32 960 +307236896 2 960 +307236900 32 960 +307236904 2 960 +307236908 32 960 +307236912 2 960 +307236916 32 960 +307236920 2 960 +307236924 32 960 +307236928 2 960 +307236932 32 960 +307236936 2 960 +307236940 32 960 +307236944 2 960 +307236948 32 960 +307236952 2 960 +307236956 32 960 +307236960 2 960 +307236964 32 960 +307236968 2 960 +307236972 32 960 +307236976 2 960 +307236980 32 960 +307236984 2 960 +307236988 32 960 +307236992 2 960 +307236996 32 960 +307237000 2 960 +307237004 32 960 +307237008 2 960 +307237012 32 960 +307237016 2 960 +307237020 32 960 +307237024 2 960 +307237028 32 960 +307237032 2 960 +307237036 32 960 +307237040 2 960 +307237044 32 960 +307237048 2 960 +307237052 32 960 +307237056 2 960 +307237060 32 960 +307237064 2 960 +307237068 32 960 +307237072 2 960 +307237076 32 960 +307237080 2 960 +307237084 32 960 +307237088 2 960 +307237092 32 960 +307237096 2 960 +307237100 32 960 +307237104 2 960 +307237108 32 960 +307237112 2 960 +307237116 32 960 +307237120 2 960 +307237124 32 960 +307237128 2 960 +307237132 32 960 +307237136 2 960 +307237140 32 960 +307237144 2 960 +307237148 32 960 +307237152 2 960 +307237156 32 960 +307237160 2 960 +307237164 32 960 +307237168 2 960 +307237172 32 960 +307237176 2 960 +307237180 32 960 +307237184 2 960 +307237188 32 960 +307237192 2 960 +307237196 32 960 +307237200 2 960 +307237204 32 960 +307237208 2 960 +307237212 32 960 +307237216 2 960 +307237220 32 960 +307237224 2 960 +307237228 32 960 +307237232 2 960 +307237236 32 960 +307237240 2 960 +307237244 32 960 +307237248 2 960 +307237252 32 960 +307237256 2 960 +307237260 32 960 +307237264 2 960 +307237268 32 960 +307237272 2 960 +307237276 32 960 +307237280 2 960 +307237284 32 960 +307237288 2 960 +307237292 32 960 +307237296 2 960 +307237300 32 960 +307237304 2 960 +307237308 32 960 +307237312 2 960 +307237316 32 960 +307237320 2 960 +307237324 32 960 +307237328 2 960 +307237332 32 960 +307237336 2 960 +307237340 32 960 +307237344 2 960 +307237348 32 960 +307237352 2 960 +307237356 32 960 +307237360 2 960 +307237364 32 960 +307237368 2 960 +307240964 32 960 +307240968 2 960 +307240972 32 960 +307240976 2 960 +307240980 32 960 +307240984 2 960 +307240988 32 960 +307240992 2 960 +307240996 32 960 +307241000 2 960 +307241004 32 960 +307241008 2 960 +307241012 32 960 +307241016 2 960 +307241020 32 960 +307241024 2 960 +307241028 32 960 +307241032 2 960 +307241036 32 960 +307241040 2 960 +307241044 32 960 +307241048 2 960 +307241052 32 960 +307241056 2 960 +307241060 32 960 +307241064 2 960 +307241068 32 960 +307241072 2 960 +307241076 32 960 +307241080 2 960 +307241084 32 960 +307241088 2 960 +307241092 32 960 +307241096 2 960 +307241100 32 960 +307241104 2 960 +307241108 32 960 +307241112 2 960 +307241116 32 960 +307241120 2 960 +307241124 32 960 +307241128 2 960 +307241132 32 960 +307241136 2 960 +307241140 32 960 +307241144 2 960 +307241148 32 960 +307241152 2 960 +307241156 32 960 +307241160 2 960 +307241164 32 960 +307241168 2 960 +307241172 32 960 +307241176 2 960 +307241180 32 960 +307241184 2 960 +307241188 32 960 +307241192 2 960 +307241196 32 960 +307241200 2 960 +307241204 32 960 +307241208 2 960 +307241212 32 960 +307241216 2 960 +307241220 32 960 +307241224 2 960 +307241228 32 960 +307241232 2 960 +307241236 32 960 +307241240 2 960 +307241244 32 960 +307241248 2 960 +307241252 32 960 +307241256 2 960 +307241260 32 960 +307241264 2 960 +307241268 32 960 +307241272 2 960 +307241276 32 960 +307241280 2 960 +307241284 32 960 +307241288 2 960 +307241292 32 960 +307241296 2 960 +307241300 32 960 +307241304 2 960 +307241308 32 960 +307241312 2 960 +307241316 32 960 +307241320 2 960 +307241324 32 960 +307241328 2 960 +307241332 32 960 +307241336 2 960 +307241340 32 960 +307241344 2 960 +307241348 32 960 +307241352 2 960 +307241356 32 960 +307241360 2 960 +307241364 32 960 +307241368 2 960 +307241372 32 960 +307241376 2 960 +307241380 32 960 +307241384 2 960 +307241388 32 960 +307241392 2 960 +307241396 32 960 +307241400 2 960 +307241404 32 960 +307241408 2 960 +307241412 32 960 +307241416 2 960 +307241420 32 960 +307241424 2 960 +307241428 32 960 +307241432 2 960 +307241436 32 960 +307241440 2 960 +307241444 32 960 +307241448 2 960 +307241452 32 960 +307241456 2 960 +307241460 32 960 +307241464 2 960 +307245060 32 960 +307245064 2 960 +307245068 32 960 +307245072 2 960 +307245076 32 960 +307245080 2 960 +307245084 32 960 +307245088 2 960 +307245092 32 960 +307245096 2 960 +307245100 32 960 +307245104 2 960 +307245108 32 960 +307245112 2 960 +307245116 32 960 +307245120 2 960 +307245124 32 960 +307245128 2 960 +307245132 32 960 +307245136 2 960 +307245140 32 960 +307245144 2 960 +307245148 32 960 +307245152 2 960 +307245156 32 960 +307245160 2 960 +307245164 32 960 +307245168 2 960 +307245172 32 960 +307245176 2 960 +307245180 32 960 +307245184 2 960 +307245188 32 960 +307245192 2 960 +307245196 32 960 +307245200 2 960 +307245204 32 960 +307245208 2 960 +307245212 32 960 +307245216 2 960 +307245220 32 960 +307245224 2 960 +307245228 32 960 +307245232 2 960 +307245236 32 960 +307245240 2 960 +307245244 32 960 +307245248 2 960 +307245252 32 960 +307245256 2 960 +307245260 32 960 +307245264 2 960 +307245268 32 960 +307245272 2 960 +307245276 32 960 +307245280 2 960 +307245284 32 960 +307245288 2 960 +307245292 32 960 +307245296 2 960 +307245300 32 960 +307245304 2 960 +307245308 32 960 +307245312 2 960 +307245316 32 960 +307245320 2 960 +307245324 32 960 +307245328 2 960 +307245332 32 960 +307245336 2 960 +307245340 32 960 +307245344 2 960 +307245348 32 960 +307245352 2 960 +307245356 32 960 +307245360 2 960 +307245364 32 960 +307245368 2 960 +307245372 32 960 +307245376 2 960 +307245380 32 960 +307245384 2 960 +307245388 32 960 +307245392 2 960 +307245396 32 960 +307245400 2 960 +307245404 32 960 +307245408 2 960 +307245412 32 960 +307245416 2 960 +307245420 32 960 +307245424 2 960 +307245428 32 960 +307245432 2 960 +307245436 32 960 +307245440 2 960 +307245444 32 960 +307245448 2 960 +307245452 32 960 +307245456 2 960 +307245460 32 960 +307245464 2 960 +307245468 32 960 +307245472 2 960 +307245476 32 960 +307245480 2 960 +307245484 32 960 +307245488 2 960 +307245492 32 960 +307245496 2 960 +307245500 32 960 +307245504 2 960 +307245508 32 960 +307245512 2 960 +307245516 32 960 +307245520 2 960 +307245524 32 960 +307245528 2 960 +307245532 32 960 +307245536 2 960 +307245540 32 960 +307245544 2 960 +307245548 32 960 +307245552 2 960 +307245556 32 960 +307245560 2 960 +307249156 32 960 +307249160 2 960 +307249164 32 960 +307249168 2 960 +307249172 32 960 +307249176 2 960 +307249180 32 960 +307249184 2 960 +307249188 32 960 +307249192 2 960 +307249196 32 960 +307249200 2 960 +307249204 32 960 +307249208 2 960 +307249212 32 960 +307249216 2 960 +307249220 32 960 +307249224 2 960 +307249228 32 960 +307249232 2 960 +307249236 32 960 +307249240 2 960 +307249244 32 960 +307249248 2 960 +307249252 32 960 +307249256 2 960 +307249260 32 960 +307249264 2 960 +307249268 32 960 +307249272 2 960 +307249276 32 960 +307249280 2 960 +307249284 32 960 +307249288 2 960 +307249292 32 960 +307249296 2 960 +307249300 32 960 +307249304 2 960 +307249308 32 960 +307249312 2 960 +307249316 32 960 +307249320 2 960 +307249324 32 960 +307249328 2 960 +307249332 32 960 +307249336 2 960 +307249340 32 960 +307249344 2 960 +307249348 32 960 +307249352 2 960 +307249356 32 960 +307249360 2 960 +307249364 32 960 +307249368 2 960 +307249372 32 960 +307249376 2 960 +307249380 32 960 +307249384 2 960 +307249388 32 960 +307249392 2 960 +307249396 32 960 +307249400 2 960 +307249404 32 960 +307249408 2 960 +307249412 32 960 +307249416 2 960 +307249420 32 960 +307249424 2 960 +307249428 32 960 +307249432 2 960 +307249436 32 960 +307249440 2 960 +307249444 32 960 +307249448 2 960 +307249452 32 960 +307249456 2 960 +307249460 32 960 +307249464 2 960 +307249468 32 960 +307249472 2 960 +307249476 32 960 +307249480 2 960 +307249484 32 960 +307249488 2 960 +307249492 32 960 +307249496 2 960 +307249500 32 960 +307249504 2 960 +307249508 32 960 +307249512 2 960 +307249516 32 960 +307249520 2 960 +307249524 32 960 +307249528 2 960 +307249532 32 960 +307249536 2 960 +307249540 32 960 +307249544 2 960 +307249548 32 960 +307249552 2 960 +307249556 32 960 +307249560 2 960 +307249564 32 960 +307249568 2 960 +307249572 32 960 +307249576 2 960 +307249580 32 960 +307249584 2 960 +307249588 32 960 +307249592 2 960 +307249596 32 960 +307249600 2 960 +307249604 32 960 +307249608 2 960 +307249612 32 960 +307249616 2 960 +307249620 32 960 +307249624 2 960 +307249628 32 960 +307249632 2 960 +307249636 32 960 +307249640 2 960 +307249644 32 960 +307249648 2 960 +307249652 32 960 +307249656 2 960 +307253252 32 960 +307253256 2 960 +307253260 32 960 +307253264 2 960 +307253268 32 960 +307253272 2 960 +307253276 32 960 +307253280 2 960 +307253284 32 960 +307253288 2 960 +307253292 32 960 +307253296 2 960 +307253300 32 960 +307253304 2 960 +307253308 32 960 +307253312 2 960 +307253316 32 960 +307253320 2 960 +307253324 32 960 +307253328 2 960 +307253332 32 960 +307253336 2 960 +307253340 32 960 +307253344 2 960 +307253348 32 960 +307253352 2 960 +307253356 32 960 +307253360 2 960 +307253364 32 960 +307253368 2 960 +307253372 32 960 +307253376 2 960 +307253380 32 960 +307253384 2 960 +307253388 32 960 +307253392 2 960 +307253396 32 960 +307253400 2 960 +307253404 32 960 +307253408 2 960 +307253412 32 960 +307253416 2 960 +307253420 32 960 +307253424 2 960 +307253428 32 960 +307253432 2 960 +307253436 32 960 +307253440 2 960 +307253444 32 960 +307253448 2 960 +307253452 32 960 +307253456 2 960 +307253460 32 960 +307253464 2 960 +307253468 32 960 +307253472 2 960 +307253476 32 960 +307253480 2 960 +307253484 32 960 +307253488 2 960 +307253492 32 960 +307253496 2 960 +307253500 32 960 +307253504 2 960 +307253508 32 960 +307253512 2 960 +307253516 32 960 +307253520 2 960 +307253524 32 960 +307253528 2 960 +307253532 32 960 +307253536 2 960 +307253540 32 960 +307253544 2 960 +307253548 32 960 +307253552 2 960 +307253556 32 960 +307253560 2 960 +307253564 32 960 +307253568 2 960 +307253572 32 960 +307253576 2 960 +307253580 32 960 +307253584 2 960 +307253588 32 960 +307253592 2 960 +307253596 32 960 +307253600 2 960 +307253604 32 960 +307253608 2 960 +307253612 32 960 +307253616 2 960 +307253620 32 960 +307253624 2 960 +307253628 32 960 +307253632 2 960 +307253636 32 960 +307253640 2 960 +307253644 32 960 +307253648 2 960 +307253652 32 960 +307253656 2 960 +307253660 32 960 +307253664 2 960 +307253668 32 960 +307253672 2 960 +307253676 32 960 +307253680 2 960 +307253684 32 960 +307253688 2 960 +307253692 32 960 +307253696 2 960 +307253700 32 960 +307253704 2 960 +307253708 32 960 +307253712 2 960 +307253716 32 960 +307253720 2 960 +307253724 32 960 +307253728 2 960 +307253732 32 960 +307253736 2 960 +307253740 32 960 +307253744 2 960 +307253748 32 960 +307253752 2 960 +307257348 32 960 +307257352 2 960 +307257356 32 960 +307257360 2 960 +307257364 32 960 +307257368 2 960 +307257372 32 960 +307257376 2 960 +307257380 32 960 +307257384 2 960 +307257388 32 960 +307257392 2 960 +307257396 32 960 +307257400 2 960 +307257404 32 960 +307257408 2 960 +307257412 32 960 +307257416 2 960 +307257420 32 960 +307257424 2 960 +307257428 32 960 +307257432 2 960 +307257436 32 960 +307257440 2 960 +307257444 32 960 +307257448 2 960 +307257452 32 960 +307257456 2 960 +307257460 32 960 +307257464 2 960 +307257468 32 960 +307257472 2 960 +307257476 32 960 +307257480 2 960 +307257484 32 960 +307257488 2 960 +307257492 32 960 +307257496 2 960 +307257500 32 960 +307257504 2 960 +307257508 32 960 +307257512 2 960 +307257516 32 960 +307257520 2 960 +307257524 32 960 +307257528 2 960 +307257532 32 960 +307257536 2 960 +307257540 32 960 +307257544 2 960 +307257548 32 960 +307257552 2 960 +307257556 32 960 +307257560 2 960 +307257564 32 960 +307257568 2 960 +307257572 32 960 +307257576 2 960 +307257580 32 960 +307257584 2 960 +307257588 32 960 +307257592 2 960 +307257596 32 960 +307257600 2 960 +307257604 32 960 +307257608 2 960 +307257612 32 960 +307257616 2 960 +307257620 32 960 +307257624 2 960 +307257628 32 960 +307257632 2 960 +307257636 32 960 +307257640 2 960 +307257644 32 960 +307257648 2 960 +307257652 32 960 +307257656 2 960 +307257660 32 960 +307257664 2 960 +307257668 32 960 +307257672 2 960 +307257676 32 960 +307257680 2 960 +307257684 32 960 +307257688 2 960 +307257692 32 960 +307257696 2 960 +307257700 32 960 +307257704 2 960 +307257708 32 960 +307257712 2 960 +307257716 32 960 +307257720 2 960 +307257724 32 960 +307257728 2 960 +307257732 32 960 +307257736 2 960 +307257740 32 960 +307257744 2 960 +307257748 32 960 +307257752 2 960 +307257756 32 960 +307257760 2 960 +307257764 32 960 +307257768 2 960 +307257772 32 960 +307257776 2 960 +307257780 32 960 +307257784 2 960 +307257788 32 960 +307257792 2 960 +307257796 32 960 +307257800 2 960 +307257804 32 960 +307257808 2 960 +307257812 32 960 +307257816 2 960 +307257820 32 960 +307257824 2 960 +307257828 32 960 +307257832 2 960 +307257836 32 960 +307257840 2 960 +307257844 32 960 +307257848 2 960 +307261444 32 960 +307261448 2 960 +307261452 32 960 +307261456 2 960 +307261460 32 960 +307261464 2 960 +307261468 32 960 +307261472 2 960 +307261476 32 960 +307261480 2 960 +307261484 32 960 +307261488 2 960 +307261492 32 960 +307261496 2 960 +307261500 32 960 +307261504 2 960 +307261508 32 960 +307261512 2 960 +307261516 32 960 +307261520 2 960 +307261524 32 960 +307261528 2 960 +307261532 32 960 +307261536 2 960 +307261540 32 960 +307261544 2 960 +307261548 32 960 +307261552 2 960 +307261556 32 960 +307261560 2 960 +307261564 32 960 +307261568 2 960 +307261572 32 960 +307261576 2 960 +307261580 32 960 +307261584 2 960 +307261588 32 960 +307261592 2 960 +307261596 32 960 +307261600 2 960 +307261604 32 960 +307261608 2 960 +307261612 32 960 +307261616 2 960 +307261620 32 960 +307261624 2 960 +307261628 32 960 +307261632 2 960 +307261636 32 960 +307261640 2 960 +307261644 32 960 +307261648 2 960 +307261652 32 960 +307261656 2 960 +307261660 32 960 +307261664 2 960 +307261668 32 960 +307261672 2 960 +307261676 32 960 +307261680 2 960 +307261684 32 960 +307261688 2 960 +307261692 32 960 +307261696 2 960 +307261700 32 960 +307261704 2 960 +307261708 32 960 +307261712 2 960 +307261716 32 960 +307261720 2 960 +307261724 32 960 +307261728 2 960 +307261732 32 960 +307261736 2 960 +307261740 32 960 +307261744 2 960 +307261748 32 960 +307261752 2 960 +307261756 32 960 +307261760 2 960 +307261764 32 960 +307261768 2 960 +307261772 32 960 +307261776 2 960 +307261780 32 960 +307261784 2 960 +307261788 32 960 +307261792 2 960 +307261796 32 960 +307261800 2 960 +307261804 32 960 +307261808 2 960 +307261812 32 960 +307261816 2 960 +307261820 32 960 +307261824 2 960 +307261828 32 960 +307261832 2 960 +307261836 32 960 +307261840 2 960 +307261844 32 960 +307261848 2 960 +307261852 32 960 +307261856 2 960 +307261860 32 960 +307261864 2 960 +307261868 32 960 +307261872 2 960 +307261876 32 960 +307261880 2 960 +307261884 32 960 +307261888 2 960 +307261892 32 960 +307261896 2 960 +307261900 32 960 +307261904 2 960 +307261908 32 960 +307261912 2 960 +307261916 32 960 +307261920 2 960 +307261924 32 960 +307261928 2 960 +307261932 32 960 +307261936 2 960 +307261940 32 960 +307261944 2 960 +307265540 32 960 +307265544 2 960 +307265548 32 960 +307265552 2 960 +307265556 32 960 +307265560 2 960 +307265564 32 960 +307265568 2 960 +307265572 32 960 +307265576 2 960 +307265580 32 960 +307265584 2 960 +307265588 32 960 +307265592 2 960 +307265596 32 960 +307265600 2 960 +307265604 32 960 +307265608 2 960 +307265612 32 960 +307265616 2 960 +307265620 32 960 +307265624 2 960 +307265628 32 960 +307265632 2 960 +307265636 32 960 +307265640 2 960 +307265644 32 960 +307265648 2 960 +307265652 32 960 +307265656 2 960 +307265660 32 960 +307265664 2 960 +307265668 32 960 +307265672 2 960 +307265676 32 960 +307265680 2 960 +307265684 32 960 +307265688 2 960 +307265692 32 960 +307265696 2 960 +307265700 32 960 +307265704 2 960 +307265708 32 960 +307265712 2 960 +307265716 32 960 +307265720 2 960 +307265724 32 960 +307265728 2 960 +307265732 32 960 +307265736 2 960 +307265740 32 960 +307265744 2 960 +307265748 32 960 +307265752 2 960 +307265756 32 960 +307265760 2 960 +307265764 32 960 +307265768 2 960 +307265772 32 960 +307265776 2 960 +307265780 32 960 +307265784 2 960 +307265788 32 960 +307265792 2 960 +307265796 32 960 +307265800 2 960 +307265804 32 960 +307265808 2 960 +307265812 32 960 +307265816 2 960 +307265820 32 960 +307265824 2 960 +307265828 32 960 +307265832 2 960 +307265836 32 960 +307265840 2 960 +307265844 32 960 +307265848 2 960 +307265852 32 960 +307265856 2 960 +307265860 32 960 +307265864 2 960 +307265868 32 960 +307265872 2 960 +307265876 32 960 +307265880 2 960 +307265884 32 960 +307265888 2 960 +307265892 32 960 +307265896 2 960 +307265900 32 960 +307265904 2 960 +307265908 32 960 +307265912 2 960 +307265916 32 960 +307265920 2 960 +307265924 32 960 +307265928 2 960 +307265932 32 960 +307265936 2 960 +307265940 32 960 +307265944 2 960 +307265948 32 960 +307265952 2 960 +307265956 32 960 +307265960 2 960 +307265964 32 960 +307265968 2 960 +307265972 32 960 +307265976 2 960 +307265980 32 960 +307265984 2 960 +307265988 32 960 +307265992 2 960 +307265996 32 960 +307266000 2 960 +307266004 32 960 +307266008 2 960 +307266012 32 960 +307266016 2 960 +307266020 32 960 +307266024 2 960 +307266028 32 960 +307266032 2 960 +307266036 32 960 +307266040 2 960 +307269636 32 960 +307269640 2 960 +307269644 32 960 +307269648 2 960 +307269652 32 960 +307269656 2 960 +307269660 32 960 +307269664 2 960 +307269668 32 960 +307269672 2 960 +307269676 32 960 +307269680 2 960 +307269684 32 960 +307269688 2 960 +307269692 32 960 +307269696 2 960 +307269700 32 960 +307269704 2 960 +307269708 32 960 +307269712 2 960 +307269716 32 960 +307269720 2 960 +307269724 32 960 +307269728 2 960 +307269732 32 960 +307269736 2 960 +307269740 32 960 +307269744 2 960 +307269748 32 960 +307269752 2 960 +307269756 32 960 +307269760 2 960 +307269764 32 960 +307269768 2 960 +307269772 32 960 +307269776 2 960 +307269780 32 960 +307269784 2 960 +307269788 32 960 +307269792 2 960 +307269796 32 960 +307269800 2 960 +307269804 32 960 +307269808 2 960 +307269812 32 960 +307269816 2 960 +307269820 32 960 +307269824 2 960 +307269828 32 960 +307269832 2 960 +307269836 32 960 +307269840 2 960 +307269844 32 960 +307269848 2 960 +307269852 32 960 +307269856 2 960 +307269860 32 960 +307269864 2 960 +307269868 32 960 +307269872 2 960 +307269876 32 960 +307269880 2 960 +307269884 32 960 +307269888 2 960 +307269892 32 960 +307269896 2 960 +307269900 32 960 +307269904 2 960 +307269908 32 960 +307269912 2 960 +307269916 32 960 +307269920 2 960 +307269924 32 960 +307269928 2 960 +307269932 32 960 +307269936 2 960 +307269940 32 960 +307269944 2 960 +307269948 32 960 +307269952 2 960 +307269956 32 960 +307269960 2 960 +307269964 32 960 +307269968 2 960 +307269972 32 960 +307269976 2 960 +307269980 32 960 +307269984 2 960 +307269988 32 960 +307269992 2 960 +307269996 32 960 +307270000 2 960 +307270004 32 960 +307270008 2 960 +307270012 32 960 +307270016 2 960 +307270020 32 960 +307270024 2 960 +307270028 32 960 +307270032 2 960 +307270036 32 960 +307270040 2 960 +307270044 32 960 +307270048 2 960 +307270052 32 960 +307270056 2 960 +307270060 32 960 +307270064 2 960 +307270068 32 960 +307270072 2 960 +307270076 32 960 +307270080 2 960 +307270084 32 960 +307270088 2 960 +307270092 32 960 +307270096 2 960 +307270100 32 960 +307270104 2 960 +307270108 32 960 +307270112 2 960 +307270116 32 960 +307270120 2 960 +307270124 32 960 +307270128 2 960 +307270132 32 960 +307270136 2 960 +307273732 32 960 +307273736 2 960 +307273740 32 960 +307273744 2 960 +307273748 32 960 +307273752 2 960 +307273756 32 960 +307273760 2 960 +307273764 32 960 +307273768 2 960 +307273772 32 960 +307273776 2 960 +307273780 32 960 +307273784 2 960 +307273788 32 960 +307273792 2 960 +307273796 32 960 +307273800 2 960 +307273804 32 960 +307273808 2 960 +307273812 32 960 +307273816 2 960 +307273820 32 960 +307273824 2 960 +307273828 32 960 +307273832 2 960 +307273836 32 960 +307273840 2 960 +307273844 32 960 +307273848 2 960 +307273852 32 960 +307273856 2 960 +307273860 32 960 +307273864 2 960 +307273868 32 960 +307273872 2 960 +307273876 32 960 +307273880 2 960 +307273884 32 960 +307273888 2 960 +307273892 32 960 +307273896 2 960 +307273900 32 960 +307273904 2 960 +307273908 32 960 +307273912 2 960 +307273916 32 960 +307273920 2 960 +307273924 32 960 +307273928 2 960 +307273932 32 960 +307273936 2 960 +307273940 32 960 +307273944 2 960 +307273948 32 960 +307273952 2 960 +307273956 32 960 +307273960 2 960 +307273964 32 960 +307273968 2 960 +307273972 32 960 +307273976 2 960 +307273980 32 960 +307273984 2 960 +307273988 32 960 +307273992 2 960 +307273996 32 960 +307274000 2 960 +307274004 32 960 +307274008 2 960 +307274012 32 960 +307274016 2 960 +307274020 32 960 +307274024 2 960 +307274028 32 960 +307274032 2 960 +307274036 32 960 +307274040 2 960 +307274044 32 960 +307274048 2 960 +307274052 32 960 +307274056 2 960 +307274060 32 960 +307274064 2 960 +307274068 32 960 +307274072 2 960 +307274076 32 960 +307274080 2 960 +307274084 32 960 +307274088 2 960 +307274092 32 960 +307274096 2 960 +307274100 32 960 +307274104 2 960 +307274108 32 960 +307274112 2 960 +307274116 32 960 +307274120 2 960 +307274124 32 960 +307274128 2 960 +307274132 32 960 +307274136 2 960 +307274140 32 960 +307274144 2 960 +307274148 32 960 +307274152 2 960 +307274156 32 960 +307274160 2 960 +307274164 32 960 +307274168 2 960 +307274172 32 960 +307274176 2 960 +307274180 32 960 +307274184 2 960 +307274188 32 960 +307274192 2 960 +307274196 32 960 +307274200 2 960 +307274204 32 960 +307274208 2 960 +307274212 32 960 +307274216 2 960 +307274220 32 960 +307274224 2 960 +307274228 32 960 +307274232 2 960 +307277828 32 960 +307277832 2 960 +307277836 32 960 +307277840 2 960 +307277844 32 960 +307277848 2 960 +307277852 32 960 +307277856 2 960 +307277860 32 960 +307277864 2 960 +307277868 32 960 +307277872 2 960 +307277876 32 960 +307277880 2 960 +307277884 32 960 +307277888 2 960 +307277892 32 960 +307277896 2 960 +307277900 32 960 +307277904 2 960 +307277908 32 960 +307277912 2 960 +307277916 32 960 +307277920 2 960 +307277924 32 960 +307277928 2 960 +307277932 32 960 +307277936 2 960 +307277940 32 960 +307277944 2 960 +307277948 32 960 +307277952 2 960 +307277956 32 960 +307277960 2 960 +307277964 32 960 +307277968 2 960 +307277972 32 960 +307277976 2 960 +307277980 32 960 +307277984 2 960 +307277988 32 960 +307277992 2 960 +307277996 32 960 +307278000 2 960 +307278004 32 960 +307278008 2 960 +307278012 32 960 +307278016 2 960 +307278020 32 960 +307278024 2 960 +307278028 32 960 +307278032 2 960 +307278036 32 960 +307278040 2 960 +307278044 32 960 +307278048 2 960 +307278052 32 960 +307278056 2 960 +307278060 32 960 +307278064 2 960 +307278068 32 960 +307278072 2 960 +307278076 32 960 +307278080 2 960 +307278084 32 960 +307278088 2 960 +307278092 32 960 +307278096 2 960 +307278100 32 960 +307278104 2 960 +307278108 32 960 +307278112 2 960 +307278116 32 960 +307278120 2 960 +307278124 32 960 +307278128 2 960 +307278132 32 960 +307278136 2 960 +307278140 32 960 +307278144 2 960 +307278148 32 960 +307278152 2 960 +307278156 32 960 +307278160 2 960 +307278164 32 960 +307278168 2 960 +307278172 32 960 +307278176 2 960 +307278180 32 960 +307278184 2 960 +307278188 32 960 +307278192 2 960 +307278196 32 960 +307278200 2 960 +307278204 32 960 +307278208 2 960 +307278212 32 960 +307278216 2 960 +307278220 32 960 +307278224 2 960 +307278228 32 960 +307278232 2 960 +307278236 32 960 +307278240 2 960 +307278244 32 960 +307278248 2 960 +307278252 32 960 +307278256 2 960 +307278260 32 960 +307278264 2 960 +307278268 32 960 +307278272 2 960 +307278276 32 960 +307278280 2 960 +307278284 32 960 +307278288 2 960 +307278292 32 960 +307278296 2 960 +307278300 32 960 +307278304 2 960 +307278308 32 960 +307278312 2 960 +307278316 32 960 +307278320 2 960 +307278324 32 960 +307278328 2 960 +307281924 32 960 +307281928 2 960 +307281932 32 960 +307281936 2 960 +307281940 32 960 +307281944 2 960 +307281948 32 960 +307281952 2 960 +307281956 32 960 +307281960 2 960 +307281964 32 960 +307281968 2 960 +307281972 32 960 +307281976 2 960 +307281980 32 960 +307281984 2 960 +307281988 32 960 +307281992 2 960 +307281996 32 960 +307282000 2 960 +307282004 32 960 +307282008 2 960 +307282012 32 960 +307282016 2 960 +307282020 32 960 +307282024 2 960 +307282028 32 960 +307282032 2 960 +307282036 32 960 +307282040 2 960 +307282044 32 960 +307282048 2 960 +307282052 32 960 +307282056 2 960 +307282060 32 960 +307282064 2 960 +307282068 32 960 +307282072 2 960 +307282076 32 960 +307282080 2 960 +307282084 32 960 +307282088 2 960 +307282092 32 960 +307282096 2 960 +307282100 32 960 +307282104 2 960 +307282108 32 960 +307282112 2 960 +307282116 32 960 +307282120 2 960 +307282124 32 960 +307282128 2 960 +307282132 32 960 +307282136 2 960 +307282140 32 960 +307282144 2 960 +307282148 32 960 +307282152 2 960 +307282156 32 960 +307282160 2 960 +307282164 32 960 +307282168 2 960 +307282172 32 960 +307282176 2 960 +307282180 32 960 +307282184 2 960 +307282188 32 960 +307282192 2 960 +307282196 32 960 +307282200 2 960 +307282204 32 960 +307282208 2 960 +307282212 32 960 +307282216 2 960 +307282220 32 960 +307282224 2 960 +307282228 32 960 +307282232 2 960 +307282236 32 960 +307282240 2 960 +307282244 32 960 +307282248 2 960 +307282252 32 960 +307282256 2 960 +307282260 32 960 +307282264 2 960 +307282268 32 960 +307282272 2 960 +307282276 32 960 +307282280 2 960 +307282284 32 960 +307282288 2 960 +307282292 32 960 +307282296 2 960 +307282300 32 960 +307282304 2 960 +307282308 32 960 +307282312 2 960 +307282316 32 960 +307282320 2 960 +307282324 32 960 +307282328 2 960 +307282332 32 960 +307282336 2 960 +307282340 32 960 +307282344 2 960 +307282348 32 960 +307282352 2 960 +307282356 32 960 +307282360 2 960 +307282364 32 960 +307282368 2 960 +307282372 32 960 +307282376 2 960 +307282380 32 960 +307282384 2 960 +307282388 32 960 +307282392 2 960 +307282396 32 960 +307282400 2 960 +307282404 32 960 +307282408 2 960 +307282412 32 960 +307282416 2 960 +307282420 32 960 +307282424 2 960 +307286020 32 960 +307286024 2 960 +307286028 32 960 +307286032 2 960 +307286036 32 960 +307286040 2 960 +307286044 32 960 +307286048 2 960 +307286052 32 960 +307286056 2 960 +307286060 32 960 +307286064 2 960 +307286068 32 960 +307286072 2 960 +307286076 32 960 +307286080 2 960 +307286084 32 960 +307286088 2 960 +307286092 32 960 +307286096 2 960 +307286100 32 960 +307286104 2 960 +307286108 32 960 +307286112 2 960 +307286116 32 960 +307286120 2 960 +307286124 32 960 +307286128 2 960 +307286132 32 960 +307286136 2 960 +307286140 32 960 +307286144 2 960 +307286148 32 960 +307286152 2 960 +307286156 32 960 +307286160 2 960 +307286164 32 960 +307286168 2 960 +307286172 32 960 +307286176 2 960 +307286180 32 960 +307286184 2 960 +307286188 32 960 +307286192 2 960 +307286196 32 960 +307286200 2 960 +307286204 32 960 +307286208 2 960 +307286212 32 960 +307286216 2 960 +307286220 32 960 +307286224 2 960 +307286228 32 960 +307286232 2 960 +307286236 32 960 +307286240 2 960 +307286244 32 960 +307286248 2 960 +307286252 32 960 +307286256 2 960 +307286260 32 960 +307286264 2 960 +307286268 32 960 +307286272 2 960 +307286276 32 960 +307286280 2 960 +307286284 32 960 +307286288 2 960 +307286292 32 960 +307286296 2 960 +307286300 32 960 +307286304 2 960 +307286308 32 960 +307286312 2 960 +307286316 32 960 +307286320 2 960 +307286324 32 960 +307286328 2 960 +307286332 32 960 +307286336 2 960 +307286340 32 960 +307286344 2 960 +307286348 32 960 +307286352 2 960 +307286356 32 960 +307286360 2 960 +307286364 32 960 +307286368 2 960 +307286372 32 960 +307286376 2 960 +307286380 32 960 +307286384 2 960 +307286388 32 960 +307286392 2 960 +307286396 32 960 +307286400 2 960 +307286404 32 960 +307286408 2 960 +307286412 32 960 +307286416 2 960 +307286420 32 960 +307286424 2 960 +307286428 32 960 +307286432 2 960 +307286436 32 960 +307286440 2 960 +307286444 32 960 +307286448 2 960 +307286452 32 960 +307286456 2 960 +307286460 32 960 +307286464 2 960 +307286468 32 960 +307286472 2 960 +307286476 32 960 +307286480 2 960 +307286484 32 960 +307286488 2 960 +307286492 32 960 +307286496 2 960 +307286500 32 960 +307286504 2 960 +307286508 32 960 +307286512 2 960 +307286516 32 960 +307286520 2 960 +307290116 32 960 +307290120 2 960 +307290124 32 960 +307290128 2 960 +307290132 32 960 +307290136 2 960 +307290140 32 960 +307290144 2 960 +307290148 32 960 +307290152 2 960 +307290156 32 960 +307290160 2 960 +307290164 32 960 +307290168 2 960 +307290172 32 960 +307290176 2 960 +307290180 32 960 +307290184 2 960 +307290188 32 960 +307290192 2 960 +307290196 32 960 +307290200 2 960 +307290204 32 960 +307290208 2 960 +307290212 32 960 +307290216 2 960 +307290220 32 960 +307290224 2 960 +307290228 32 960 +307290232 2 960 +307290236 32 960 +307290240 2 960 +307290244 32 960 +307290248 2 960 +307290252 32 960 +307290256 2 960 +307290260 32 960 +307290264 2 960 +307290268 32 960 +307290272 2 960 +307290276 32 960 +307290280 2 960 +307290284 32 960 +307290288 2 960 +307290292 32 960 +307290296 2 960 +307290300 32 960 +307290304 2 960 +307290308 32 960 +307290312 2 960 +307290316 32 960 +307290320 2 960 +307290324 32 960 +307290328 2 960 +307290332 32 960 +307290336 2 960 +307290340 32 960 +307290344 2 960 +307290348 32 960 +307290352 2 960 +307290356 32 960 +307290360 2 960 +307290364 32 960 +307290368 2 960 +307290372 32 960 +307290376 2 960 +307290380 32 960 +307290384 2 960 +307290388 32 960 +307290392 2 960 +307290396 32 960 +307290400 2 960 +307290404 32 960 +307290408 2 960 +307290412 32 960 +307290416 2 960 +307290420 32 960 +307290424 2 960 +307290428 32 960 +307290432 2 960 +307290436 32 960 +307290440 2 960 +307290444 32 960 +307290448 2 960 +307290452 32 960 +307290456 2 960 +307290460 32 960 +307290464 2 960 +307290468 32 960 +307290472 2 960 +307290476 32 960 +307290480 2 960 +307290484 32 960 +307290488 2 960 +307290492 32 960 +307290496 2 960 +307290500 32 960 +307290504 2 960 +307290508 32 960 +307290512 2 960 +307290516 32 960 +307290520 2 960 +307290524 32 960 +307290528 2 960 +307290532 32 960 +307290536 2 960 +307290540 32 960 +307290544 2 960 +307290548 32 960 +307290552 2 960 +307290556 32 960 +307290560 2 960 +307290564 32 960 +307290568 2 960 +307290572 32 960 +307290576 2 960 +307290580 32 960 +307290584 2 960 +307290588 32 960 +307290592 2 960 +307290596 32 960 +307290600 2 960 +307290604 32 960 +307290608 2 960 +307290612 32 960 +307290616 2 960 +307294212 32 960 +307294216 2 960 +307294220 32 960 +307294224 2 960 +307294228 32 960 +307294232 2 960 +307294236 32 960 +307294240 2 960 +307294244 32 960 +307294248 2 960 +307294252 32 960 +307294256 2 960 +307294260 32 960 +307294264 2 960 +307294268 32 960 +307294272 2 960 +307294276 32 960 +307294280 2 960 +307294284 32 960 +307294288 2 960 +307294292 32 960 +307294296 2 960 +307294300 32 960 +307294304 2 960 +307294308 32 960 +307294312 2 960 +307294316 32 960 +307294320 2 960 +307294324 32 960 +307294328 2 960 +307294332 32 960 +307294336 2 960 +307294340 32 960 +307294344 2 960 +307294348 32 960 +307294352 2 960 +307294356 32 960 +307294360 2 960 +307294364 32 960 +307294368 2 960 +307294372 32 960 +307294376 2 960 +307294380 32 960 +307294384 2 960 +307294388 32 960 +307294392 2 960 +307294396 32 960 +307294400 2 960 +307294404 32 960 +307294408 2 960 +307294412 32 960 +307294416 2 960 +307294420 32 960 +307294424 2 960 +307294428 32 960 +307294432 2 960 +307294436 32 960 +307294440 2 960 +307294444 32 960 +307294448 2 960 +307294452 32 960 +307294456 2 960 +307294460 32 960 +307294464 2 960 +307294468 32 960 +307294472 2 960 +307294476 32 960 +307294480 2 960 +307294484 32 960 +307294488 2 960 +307294492 32 960 +307294496 2 960 +307294500 32 960 +307294504 2 960 +307294508 32 960 +307294512 2 960 +307294516 32 960 +307294520 2 960 +307294524 32 960 +307294528 2 960 +307294532 32 960 +307294536 2 960 +307294540 32 960 +307294544 2 960 +307294548 32 960 +307294552 2 960 +307294556 32 960 +307294560 2 960 +307294564 32 960 +307294568 2 960 +307294572 32 960 +307294576 2 960 +307294580 32 960 +307294584 2 960 +307294588 32 960 +307294592 2 960 +307294596 32 960 +307294600 2 960 +307294604 32 960 +307294608 2 960 +307294612 32 960 +307294616 2 960 +307294620 32 960 +307294624 2 960 +307294628 32 960 +307294632 2 960 +307294636 32 960 +307294640 2 960 +307294644 32 960 +307294648 2 960 +307294652 32 960 +307294656 2 960 +307294660 32 960 +307294664 2 960 +307294668 32 960 +307294672 2 960 +307294676 32 960 +307294680 2 960 +307294684 32 960 +307294688 2 960 +307294692 32 960 +307294696 2 960 +307294700 32 960 +307294704 2 960 +307294708 32 960 +307294712 2 960 +307298308 32 960 +307298312 2 960 +307298316 32 960 +307298320 2 960 +307298324 32 960 +307298328 2 960 +307298332 32 960 +307298336 2 960 +307298340 32 960 +307298344 2 960 +307298348 32 960 +307298352 2 960 +307298356 32 960 +307298360 2 960 +307298364 32 960 +307298368 2 960 +307298372 32 960 +307298376 2 960 +307298380 32 960 +307298384 2 960 +307298388 32 960 +307298392 2 960 +307298396 32 960 +307298400 2 960 +307298404 32 960 +307298408 2 960 +307298412 32 960 +307298416 2 960 +307298420 32 960 +307298424 2 960 +307298428 32 960 +307298432 2 960 +307298436 32 960 +307298440 2 960 +307298444 32 960 +307298448 2 960 +307298452 32 960 +307298456 2 960 +307298460 32 960 +307298464 2 960 +307298468 32 960 +307298472 2 960 +307298476 32 960 +307298480 2 960 +307298484 32 960 +307298488 2 960 +307298492 32 960 +307298496 2 960 +307298500 32 960 +307298504 2 960 +307298508 32 960 +307298512 2 960 +307298516 32 960 +307298520 2 960 +307298524 32 960 +307298528 2 960 +307298532 32 960 +307298536 2 960 +307298540 32 960 +307298544 2 960 +307298548 32 960 +307298552 2 960 +307298556 32 960 +307298560 2 960 +307298564 32 960 +307298568 2 960 +307298572 32 960 +307298576 2 960 +307298580 32 960 +307298584 2 960 +307298588 32 960 +307298592 2 960 +307298596 32 960 +307298600 2 960 +307298604 32 960 +307298608 2 960 +307298612 32 960 +307298616 2 960 +307298620 32 960 +307298624 2 960 +307298628 32 960 +307298632 2 960 +307298636 32 960 +307298640 2 960 +307298644 32 960 +307298648 2 960 +307298652 32 960 +307298656 2 960 +307298660 32 960 +307298664 2 960 +307298668 32 960 +307298672 2 960 +307298676 32 960 +307298680 2 960 +307298684 32 960 +307298688 2 960 +307298692 32 960 +307298696 2 960 +307298700 32 960 +307298704 2 960 +307298708 32 960 +307298712 2 960 +307298716 32 960 +307298720 2 960 +307298724 32 960 +307298728 2 960 +307298732 32 960 +307298736 2 960 +307298740 32 960 +307298744 2 960 +307298748 32 960 +307298752 2 960 +307298756 32 960 +307298760 2 960 +307298764 32 960 +307298768 2 960 +307298772 32 960 +307298776 2 960 +307298780 32 960 +307298784 2 960 +307298788 32 960 +307298792 2 960 +307298796 32 960 +307298800 2 960 +307298804 32 960 +307298808 2 960 +308285444 32 960 +308285448 2 960 +308285452 32 960 +308285456 2 960 +308285460 32 960 +308285464 2 960 +308285468 32 960 +308285472 2 960 +308285476 32 960 +308285480 2 960 +308285484 32 960 +308285488 2 960 +308285492 32 960 +308285496 2 960 +308285500 32 960 +308285504 2 960 +308285508 32 960 +308285512 2 960 +308285516 32 960 +308285520 2 960 +308285524 32 960 +308285528 2 960 +308285532 32 960 +308285536 2 960 +308285540 32 960 +308285544 2 960 +308285548 32 960 +308285552 2 960 +308285556 32 960 +308285560 2 960 +308285564 32 960 +308285568 2 960 +308285572 32 960 +308285576 2 960 +308285580 32 960 +308285584 2 960 +308285588 32 960 +308285592 2 960 +308285596 32 960 +308285600 2 960 +308285604 32 960 +308285608 2 960 +308285612 32 960 +308285616 2 960 +308285620 32 960 +308285624 2 960 +308285628 32 960 +308285632 2 960 +308285636 32 960 +308285640 2 960 +308285644 32 960 +308285648 2 960 +308285652 32 960 +308285656 2 960 +308285660 32 960 +308285664 2 960 +308285668 32 960 +308285672 2 960 +308285676 32 960 +308285680 2 960 +308285684 32 960 +308285688 2 960 +308285692 32 960 +308285696 2 960 +308285700 32 960 +308285704 2 960 +308285708 32 960 +308285712 2 960 +308285716 32 960 +308285720 2 960 +308285724 32 960 +308285728 2 960 +308285732 32 960 +308285736 2 960 +308285740 32 960 +308285744 2 960 +308285748 32 960 +308285752 2 960 +308285756 32 960 +308285760 2 960 +308285764 32 960 +308285768 2 960 +308285772 32 960 +308285776 2 960 +308285780 32 960 +308285784 2 960 +308285788 32 960 +308285792 2 960 +308285796 32 960 +308285800 2 960 +308285804 32 960 +308285808 2 960 +308285812 32 960 +308285816 2 960 +308285820 32 960 +308285824 2 960 +308285828 32 960 +308285832 2 960 +308285836 32 960 +308285840 2 960 +308285844 32 960 +308285848 2 960 +308285852 32 960 +308285856 2 960 +308285860 32 960 +308285864 2 960 +308285868 32 960 +308285872 2 960 +308285876 32 960 +308285880 2 960 +308289540 32 960 +308289544 2 960 +308289548 32 960 +308289552 2 960 +308289556 32 960 +308289560 2 960 +308289564 32 960 +308289568 2 960 +308289572 32 960 +308289576 2 960 +308289580 32 960 +308289584 2 960 +308289588 32 960 +308289592 2 960 +308289596 32 960 +308289600 2 960 +308289604 32 960 +308289608 2 960 +308289612 32 960 +308289616 2 960 +308289620 32 960 +308289624 2 960 +308289628 32 960 +308289632 2 960 +308289636 32 960 +308289640 2 960 +308289644 32 960 +308289648 2 960 +308289652 32 960 +308289656 2 960 +308289660 32 960 +308289664 2 960 +308289668 32 960 +308289672 2 960 +308289676 32 960 +308289680 2 960 +308289684 32 960 +308289688 2 960 +308289692 32 960 +308289696 2 960 +308289700 32 960 +308289704 2 960 +308289708 32 960 +308289712 2 960 +308289716 32 960 +308289720 2 960 +308289724 32 960 +308289728 2 960 +308289732 32 960 +308289736 2 960 +308289740 32 960 +308289744 2 960 +308289748 32 960 +308289752 2 960 +308289756 32 960 +308289760 2 960 +308289764 32 960 +308289768 2 960 +308289772 32 960 +308289776 2 960 +308289780 32 960 +308289784 2 960 +308289788 32 960 +308289792 2 960 +308289796 32 960 +308289800 2 960 +308289804 32 960 +308289808 2 960 +308289812 32 960 +308289816 2 960 +308289820 32 960 +308289824 2 960 +308289828 32 960 +308289832 2 960 +308289836 32 960 +308289840 2 960 +308289844 32 960 +308289848 2 960 +308289852 32 960 +308289856 2 960 +308289860 32 960 +308289864 2 960 +308289868 32 960 +308289872 2 960 +308289876 32 960 +308289880 2 960 +308289884 32 960 +308289888 2 960 +308289892 32 960 +308289896 2 960 +308289900 32 960 +308289904 2 960 +308289908 32 960 +308289912 2 960 +308289916 32 960 +308289920 2 960 +308289924 32 960 +308289928 2 960 +308289932 32 960 +308289936 2 960 +308289940 32 960 +308289944 2 960 +308289948 32 960 +308289952 2 960 +308289956 32 960 +308289960 2 960 +308289964 32 960 +308289968 2 960 +308289972 32 960 +308289976 2 960 +308293636 32 960 +308293640 2 960 +308293644 32 960 +308293648 2 960 +308293652 32 960 +308293656 2 960 +308293660 32 960 +308293664 2 960 +308293668 32 960 +308293672 2 960 +308293676 32 960 +308293680 2 960 +308293684 32 960 +308293688 2 960 +308293692 32 960 +308293696 2 960 +308293700 32 960 +308293704 2 960 +308293708 32 960 +308293712 2 960 +308293716 32 960 +308293720 2 960 +308293724 32 960 +308293728 2 960 +308293732 32 960 +308293736 2 960 +308293740 32 960 +308293744 2 960 +308293748 32 960 +308293752 2 960 +308293756 32 960 +308293760 2 960 +308293764 32 960 +308293768 2 960 +308293772 32 960 +308293776 2 960 +308293780 32 960 +308293784 2 960 +308293788 32 960 +308293792 2 960 +308293796 32 960 +308293800 2 960 +308293804 32 960 +308293808 2 960 +308293812 32 960 +308293816 2 960 +308293820 32 960 +308293824 2 960 +308293828 32 960 +308293832 2 960 +308293836 32 960 +308293840 2 960 +308293844 32 960 +308293848 2 960 +308293852 32 960 +308293856 2 960 +308293860 32 960 +308293864 2 960 +308293868 32 960 +308293872 2 960 +308293876 32 960 +308293880 2 960 +308293884 32 960 +308293888 2 960 +308293892 32 960 +308293896 2 960 +308293900 32 960 +308293904 2 960 +308293908 32 960 +308293912 2 960 +308293916 32 960 +308293920 2 960 +308293924 32 960 +308293928 2 960 +308293932 32 960 +308293936 2 960 +308293940 32 960 +308293944 2 960 +308293948 32 960 +308293952 2 960 +308293956 32 960 +308293960 2 960 +308293964 32 960 +308293968 2 960 +308293972 32 960 +308293976 2 960 +308293980 32 960 +308293984 2 960 +308293988 32 960 +308293992 2 960 +308293996 32 960 +308294000 2 960 +308294004 32 960 +308294008 2 960 +308294012 32 960 +308294016 2 960 +308294020 32 960 +308294024 2 960 +308294028 32 960 +308294032 2 960 +308294036 32 960 +308294040 2 960 +308294044 32 960 +308294048 2 960 +308294052 32 960 +308294056 2 960 +308294060 32 960 +308294064 2 960 +308294068 32 960 +308294072 2 960 +308297732 32 960 +308297736 2 960 +308297740 32 960 +308297744 2 960 +308297748 32 960 +308297752 2 960 +308297756 32 960 +308297760 2 960 +308297764 32 960 +308297768 2 960 +308297772 32 960 +308297776 2 960 +308297780 32 960 +308297784 2 960 +308297788 32 960 +308297792 2 960 +308297796 32 960 +308297800 2 960 +308297804 32 960 +308297808 2 960 +308297812 32 960 +308297816 2 960 +308297820 32 960 +308297824 2 960 +308297828 32 960 +308297832 2 960 +308297836 32 960 +308297840 2 960 +308297844 32 960 +308297848 2 960 +308297852 32 960 +308297856 2 960 +308297860 32 960 +308297864 2 960 +308297868 32 960 +308297872 2 960 +308297876 32 960 +308297880 2 960 +308297884 32 960 +308297888 2 960 +308297892 32 960 +308297896 2 960 +308297900 32 960 +308297904 2 960 +308297908 32 960 +308297912 2 960 +308297916 32 960 +308297920 2 960 +308297924 32 960 +308297928 2 960 +308297932 32 960 +308297936 2 960 +308297940 32 960 +308297944 2 960 +308297948 32 960 +308297952 2 960 +308297956 32 960 +308297960 2 960 +308297964 32 960 +308297968 2 960 +308297972 32 960 +308297976 2 960 +308297980 32 960 +308297984 2 960 +308297988 32 960 +308297992 2 960 +308297996 32 960 +308298000 2 960 +308298004 32 960 +308298008 2 960 +308298012 32 960 +308298016 2 960 +308298020 32 960 +308298024 2 960 +308298028 32 960 +308298032 2 960 +308298036 32 960 +308298040 2 960 +308298044 32 960 +308298048 2 960 +308298052 32 960 +308298056 2 960 +308298060 32 960 +308298064 2 960 +308298068 32 960 +308298072 2 960 +308298076 32 960 +308298080 2 960 +308298084 32 960 +308298088 2 960 +308298092 32 960 +308298096 2 960 +308298100 32 960 +308298104 2 960 +308298108 32 960 +308298112 2 960 +308298116 32 960 +308298120 2 960 +308298124 32 960 +308298128 2 960 +308298132 32 960 +308298136 2 960 +308298140 32 960 +308298144 2 960 +308298148 32 960 +308298152 2 960 +308298156 32 960 +308298160 2 960 +308298164 32 960 +308298168 2 960 +308301828 32 960 +308301832 2 960 +308301836 32 960 +308301840 2 960 +308301844 32 960 +308301848 2 960 +308301852 32 960 +308301856 2 960 +308301860 32 960 +308301864 2 960 +308301868 32 960 +308301872 2 960 +308301876 32 960 +308301880 2 960 +308301884 32 960 +308301888 2 960 +308301892 32 960 +308301896 2 960 +308301900 32 960 +308301904 2 960 +308301908 32 960 +308301912 2 960 +308301916 32 960 +308301920 2 960 +308301924 32 960 +308301928 2 960 +308301932 32 960 +308301936 2 960 +308301940 32 960 +308301944 2 960 +308301948 32 960 +308301952 2 960 +308301956 32 960 +308301960 2 960 +308301964 32 960 +308301968 2 960 +308301972 32 960 +308301976 2 960 +308301980 32 960 +308301984 2 960 +308301988 32 960 +308301992 2 960 +308301996 32 960 +308302000 2 960 +308302004 32 960 +308302008 2 960 +308302012 32 960 +308302016 2 960 +308302020 32 960 +308302024 2 960 +308302028 32 960 +308302032 2 960 +308302036 32 960 +308302040 2 960 +308302044 32 960 +308302048 2 960 +308302052 32 960 +308302056 2 960 +308302060 32 960 +308302064 2 960 +308302068 32 960 +308302072 2 960 +308302076 32 960 +308302080 2 960 +308302084 32 960 +308302088 2 960 +308302092 32 960 +308302096 2 960 +308302100 32 960 +308302104 2 960 +308302108 32 960 +308302112 2 960 +308302116 32 960 +308302120 2 960 +308302124 32 960 +308302128 2 960 +308302132 32 960 +308302136 2 960 +308302140 32 960 +308302144 2 960 +308302148 32 960 +308302152 2 960 +308302156 32 960 +308302160 2 960 +308302164 32 960 +308302168 2 960 +308302172 32 960 +308302176 2 960 +308302180 32 960 +308302184 2 960 +308302188 32 960 +308302192 2 960 +308302196 32 960 +308302200 2 960 +308302204 32 960 +308302208 2 960 +308302212 32 960 +308302216 2 960 +308302220 32 960 +308302224 2 960 +308302228 32 960 +308302232 2 960 +308302236 32 960 +308302240 2 960 +308302244 32 960 +308302248 2 960 +308302252 32 960 +308302256 2 960 +308302260 32 960 +308302264 2 960 +308305924 32 960 +308305928 2 960 +308305932 32 960 +308305936 2 960 +308305940 32 960 +308305944 2 960 +308305948 32 960 +308305952 2 960 +308305956 32 960 +308305960 2 960 +308305964 32 960 +308305968 2 960 +308305972 32 960 +308305976 2 960 +308305980 32 960 +308305984 2 960 +308305988 32 960 +308305992 2 960 +308305996 32 960 +308306000 2 960 +308306004 32 960 +308306008 2 960 +308306012 32 960 +308306016 2 960 +308306020 32 960 +308306024 2 960 +308306028 32 960 +308306032 2 960 +308306036 32 960 +308306040 2 960 +308306044 32 960 +308306048 2 960 +308306052 32 960 +308306056 2 960 +308306060 32 960 +308306064 2 960 +308306068 32 960 +308306072 2 960 +308306076 32 960 +308306080 2 960 +308306084 32 960 +308306088 2 960 +308306092 32 960 +308306096 2 960 +308306100 32 960 +308306104 2 960 +308306108 32 960 +308306112 2 960 +308306116 32 960 +308306120 2 960 +308306124 32 960 +308306128 2 960 +308306132 32 960 +308306136 2 960 +308306140 32 960 +308306144 2 960 +308306148 32 960 +308306152 2 960 +308306156 32 960 +308306160 2 960 +308306164 32 960 +308306168 2 960 +308306172 32 960 +308306176 2 960 +308306180 32 960 +308306184 2 960 +308306188 32 960 +308306192 2 960 +308306196 32 960 +308306200 2 960 +308306204 32 960 +308306208 2 960 +308306212 32 960 +308306216 2 960 +308306220 32 960 +308306224 2 960 +308306228 32 960 +308306232 2 960 +308306236 32 960 +308306240 2 960 +308306244 32 960 +308306248 2 960 +308306252 32 960 +308306256 2 960 +308306260 32 960 +308306264 2 960 +308306268 32 960 +308306272 2 960 +308306276 32 960 +308306280 2 960 +308306284 32 960 +308306288 2 960 +308306292 32 960 +308306296 2 960 +308306300 32 960 +308306304 2 960 +308306308 32 960 +308306312 2 960 +308306316 32 960 +308306320 2 960 +308306324 32 960 +308306328 2 960 +308306332 32 960 +308306336 2 960 +308306340 32 960 +308306344 2 960 +308306348 32 960 +308306352 2 960 +308306356 32 960 +308306360 2 960 +308310020 32 960 +308310024 2 960 +308310028 32 960 +308310032 2 960 +308310036 32 960 +308310040 2 960 +308310044 32 960 +308310048 2 960 +308310052 32 960 +308310056 2 960 +308310060 32 960 +308310064 2 960 +308310068 32 960 +308310072 2 960 +308310076 32 960 +308310080 2 960 +308310084 32 960 +308310088 2 960 +308310092 32 960 +308310096 2 960 +308310100 32 960 +308310104 2 960 +308310108 32 960 +308310112 2 960 +308310116 32 960 +308310120 2 960 +308310124 32 960 +308310128 2 960 +308310132 32 960 +308310136 2 960 +308310140 32 960 +308310144 2 960 +308310148 32 960 +308310152 2 960 +308310156 32 960 +308310160 2 960 +308310164 32 960 +308310168 2 960 +308310172 32 960 +308310176 2 960 +308310180 32 960 +308310184 2 960 +308310188 32 960 +308310192 2 960 +308310196 32 960 +308310200 2 960 +308310204 32 960 +308310208 2 960 +308310212 32 960 +308310216 2 960 +308310220 32 960 +308310224 2 960 +308310228 32 960 +308310232 2 960 +308310236 32 960 +308310240 2 960 +308310244 32 960 +308310248 2 960 +308310252 32 960 +308310256 2 960 +308310260 32 960 +308310264 2 960 +308310268 32 960 +308310272 2 960 +308310276 32 960 +308310280 2 960 +308310284 32 960 +308310288 2 960 +308310292 32 960 +308310296 2 960 +308310300 32 960 +308310304 2 960 +308310308 32 960 +308310312 2 960 +308310316 32 960 +308310320 2 960 +308310324 32 960 +308310328 2 960 +308310332 32 960 +308310336 2 960 +308310340 32 960 +308310344 2 960 +308310348 32 960 +308310352 2 960 +308310356 32 960 +308310360 2 960 +308310364 32 960 +308310368 2 960 +308310372 32 960 +308310376 2 960 +308310380 32 960 +308310384 2 960 +308310388 32 960 +308310392 2 960 +308310396 32 960 +308310400 2 960 +308310404 32 960 +308310408 2 960 +308310412 32 960 +308310416 2 960 +308310420 32 960 +308310424 2 960 +308310428 32 960 +308310432 2 960 +308310436 32 960 +308310440 2 960 +308310444 32 960 +308310448 2 960 +308310452 32 960 +308310456 2 960 +308314116 32 960 +308314120 2 960 +308314124 32 960 +308314128 2 960 +308314132 32 960 +308314136 2 960 +308314140 32 960 +308314144 2 960 +308314148 32 960 +308314152 2 960 +308314156 32 960 +308314160 2 960 +308314164 32 960 +308314168 2 960 +308314172 32 960 +308314176 2 960 +308314180 32 960 +308314184 2 960 +308314188 32 960 +308314192 2 960 +308314196 32 960 +308314200 2 960 +308314204 32 960 +308314208 2 960 +308314212 32 960 +308314216 2 960 +308314220 32 960 +308314224 2 960 +308314228 32 960 +308314232 2 960 +308314236 32 960 +308314240 2 960 +308314244 32 960 +308314248 2 960 +308314252 32 960 +308314256 2 960 +308314260 32 960 +308314264 2 960 +308314268 32 960 +308314272 2 960 +308314276 32 960 +308314280 2 960 +308314284 32 960 +308314288 2 960 +308314292 32 960 +308314296 2 960 +308314300 32 960 +308314304 2 960 +308314308 32 960 +308314312 2 960 +308314316 32 960 +308314320 2 960 +308314324 32 960 +308314328 2 960 +308314332 32 960 +308314336 2 960 +308314340 32 960 +308314344 2 960 +308314348 32 960 +308314352 2 960 +308314356 32 960 +308314360 2 960 +308314364 32 960 +308314368 2 960 +308314372 32 960 +308314376 2 960 +308314380 32 960 +308314384 2 960 +308314388 32 960 +308314392 2 960 +308314396 32 960 +308314400 2 960 +308314404 32 960 +308314408 2 960 +308314412 32 960 +308314416 2 960 +308314420 32 960 +308314424 2 960 +308314428 32 960 +308314432 2 960 +308314436 32 960 +308314440 2 960 +308314444 32 960 +308314448 2 960 +308314452 32 960 +308314456 2 960 +308314460 32 960 +308314464 2 960 +308314468 32 960 +308314472 2 960 +308314476 32 960 +308314480 2 960 +308314484 32 960 +308314488 2 960 +308314492 32 960 +308314496 2 960 +308314500 32 960 +308314504 2 960 +308314508 32 960 +308314512 2 960 +308314516 32 960 +308314520 2 960 +308314524 32 960 +308314528 2 960 +308314532 32 960 +308314536 2 960 +308314540 32 960 +308314544 2 960 +308314548 32 960 +308314552 2 960 +308318212 32 960 +308318216 2 960 +308318220 32 960 +308318224 2 960 +308318228 32 960 +308318232 2 960 +308318236 32 960 +308318240 2 960 +308318244 32 960 +308318248 2 960 +308318252 32 960 +308318256 2 960 +308318260 32 960 +308318264 2 960 +308318268 32 960 +308318272 2 960 +308318276 32 960 +308318280 2 960 +308318284 32 960 +308318288 2 960 +308318292 32 960 +308318296 2 960 +308318300 32 960 +308318304 2 960 +308318308 32 960 +308318312 2 960 +308318316 32 960 +308318320 2 960 +308318324 32 960 +308318328 2 960 +308318332 32 960 +308318336 2 960 +308318340 32 960 +308318344 2 960 +308318348 32 960 +308318352 2 960 +308318356 32 960 +308318360 2 960 +308318364 32 960 +308318368 2 960 +308318372 32 960 +308318376 2 960 +308318380 32 960 +308318384 2 960 +308318388 32 960 +308318392 2 960 +308318396 32 960 +308318400 2 960 +308318404 32 960 +308318408 2 960 +308318412 32 960 +308318416 2 960 +308318420 32 960 +308318424 2 960 +308318428 32 960 +308318432 2 960 +308318436 32 960 +308318440 2 960 +308318444 32 960 +308318448 2 960 +308318452 32 960 +308318456 2 960 +308318460 32 960 +308318464 2 960 +308318468 32 960 +308318472 2 960 +308318476 32 960 +308318480 2 960 +308318484 32 960 +308318488 2 960 +308318492 32 960 +308318496 2 960 +308318500 32 960 +308318504 2 960 +308318508 32 960 +308318512 2 960 +308318516 32 960 +308318520 2 960 +308318524 32 960 +308318528 2 960 +308318532 32 960 +308318536 2 960 +308318540 32 960 +308318544 2 960 +308318548 32 960 +308318552 2 960 +308318556 32 960 +308318560 2 960 +308318564 32 960 +308318568 2 960 +308318572 32 960 +308318576 2 960 +308318580 32 960 +308318584 2 960 +308318588 32 960 +308318592 2 960 +308318596 32 960 +308318600 2 960 +308318604 32 960 +308318608 2 960 +308318612 32 960 +308318616 2 960 +308318620 32 960 +308318624 2 960 +308318628 32 960 +308318632 2 960 +308318636 32 960 +308318640 2 960 +308318644 32 960 +308318648 2 960 +308322308 32 960 +308322312 2 960 +308322316 32 960 +308322320 2 960 +308322324 32 960 +308322328 2 960 +308322332 32 960 +308322336 2 960 +308322340 32 960 +308322344 2 960 +308322348 32 960 +308322352 2 960 +308322356 32 960 +308322360 2 960 +308322364 32 960 +308322368 2 960 +308322372 32 960 +308322376 2 960 +308322380 32 960 +308322384 2 960 +308322388 32 960 +308322392 2 960 +308322396 32 960 +308322400 2 960 +308322404 32 960 +308322408 2 960 +308322412 32 960 +308322416 2 960 +308322420 32 960 +308322424 2 960 +308322428 32 960 +308322432 2 960 +308322436 32 960 +308322440 2 960 +308322444 32 960 +308322448 2 960 +308322452 32 960 +308322456 2 960 +308322460 32 960 +308322464 2 960 +308322468 32 960 +308322472 2 960 +308322476 32 960 +308322480 2 960 +308322484 32 960 +308322488 2 960 +308322492 32 960 +308322496 2 960 +308322500 32 960 +308322504 2 960 +308322508 32 960 +308322512 2 960 +308322516 32 960 +308322520 2 960 +308322524 32 960 +308322528 2 960 +308322532 32 960 +308322536 2 960 +308322540 32 960 +308322544 2 960 +308322548 32 960 +308322552 2 960 +308322556 32 960 +308322560 2 960 +308322564 32 960 +308322568 2 960 +308322572 32 960 +308322576 2 960 +308322580 32 960 +308322584 2 960 +308322588 32 960 +308322592 2 960 +308322596 32 960 +308322600 2 960 +308322604 32 960 +308322608 2 960 +308322612 32 960 +308322616 2 960 +308322620 32 960 +308322624 2 960 +308322628 32 960 +308322632 2 960 +308322636 32 960 +308322640 2 960 +308322644 32 960 +308322648 2 960 +308322652 32 960 +308322656 2 960 +308322660 32 960 +308322664 2 960 +308322668 32 960 +308322672 2 960 +308322676 32 960 +308322680 2 960 +308322684 32 960 +308322688 2 960 +308322692 32 960 +308322696 2 960 +308322700 32 960 +308322704 2 960 +308322708 32 960 +308322712 2 960 +308322716 32 960 +308322720 2 960 +308322724 32 960 +308322728 2 960 +308322732 32 960 +308322736 2 960 +308322740 32 960 +308322744 2 960 +308326404 32 960 +308326408 2 960 +308326412 32 960 +308326416 2 960 +308326420 32 960 +308326424 2 960 +308326428 32 960 +308326432 2 960 +308326436 32 960 +308326440 2 960 +308326444 32 960 +308326448 2 960 +308326452 32 960 +308326456 2 960 +308326460 32 960 +308326464 2 960 +308326468 32 960 +308326472 2 960 +308326476 32 960 +308326480 2 960 +308326484 32 960 +308326488 2 960 +308326492 32 960 +308326496 2 960 +308326500 32 960 +308326504 2 960 +308326508 32 960 +308326512 2 960 +308326516 32 960 +308326520 2 960 +308326524 32 960 +308326528 2 960 +308326532 32 960 +308326536 2 960 +308326540 32 960 +308326544 2 960 +308326548 32 960 +308326552 2 960 +308326556 32 960 +308326560 2 960 +308326564 32 960 +308326568 2 960 +308326572 32 960 +308326576 2 960 +308326580 32 960 +308326584 2 960 +308326588 32 960 +308326592 2 960 +308326596 32 960 +308326600 2 960 +308326604 32 960 +308326608 2 960 +308326612 32 960 +308326616 2 960 +308326620 32 960 +308326624 2 960 +308326628 32 960 +308326632 2 960 +308326636 32 960 +308326640 2 960 +308326644 32 960 +308326648 2 960 +308326652 32 960 +308326656 2 960 +308326660 32 960 +308326664 2 960 +308326668 32 960 +308326672 2 960 +308326676 32 960 +308326680 2 960 +308326684 32 960 +308326688 2 960 +308326692 32 960 +308326696 2 960 +308326700 32 960 +308326704 2 960 +308326708 32 960 +308326712 2 960 +308326716 32 960 +308326720 2 960 +308326724 32 960 +308326728 2 960 +308326732 32 960 +308326736 2 960 +308326740 32 960 +308326744 2 960 +308326748 32 960 +308326752 2 960 +308326756 32 960 +308326760 2 960 +308326764 32 960 +308326768 2 960 +308326772 32 960 +308326776 2 960 +308326780 32 960 +308326784 2 960 +308326788 32 960 +308326792 2 960 +308326796 32 960 +308326800 2 960 +308326804 32 960 +308326808 2 960 +308326812 32 960 +308326816 2 960 +308326820 32 960 +308326824 2 960 +308326828 32 960 +308326832 2 960 +308326836 32 960 +308326840 2 960 +308330500 32 960 +308330504 2 960 +308330508 32 960 +308330512 2 960 +308330516 32 960 +308330520 2 960 +308330524 32 960 +308330528 2 960 +308330532 32 960 +308330536 2 960 +308330540 32 960 +308330544 2 960 +308330548 32 960 +308330552 2 960 +308330556 32 960 +308330560 2 960 +308330564 32 960 +308330568 2 960 +308330572 32 960 +308330576 2 960 +308330580 32 960 +308330584 2 960 +308330588 32 960 +308330592 2 960 +308330596 32 960 +308330600 2 960 +308330604 32 960 +308330608 2 960 +308330612 32 960 +308330616 2 960 +308330620 32 960 +308330624 2 960 +308330628 32 960 +308330632 2 960 +308330636 32 960 +308330640 2 960 +308330644 32 960 +308330648 2 960 +308330652 32 960 +308330656 2 960 +308330660 32 960 +308330664 2 960 +308330668 32 960 +308330672 2 960 +308330676 32 960 +308330680 2 960 +308330684 32 960 +308330688 2 960 +308330692 32 960 +308330696 2 960 +308330700 32 960 +308330704 2 960 +308330708 32 960 +308330712 2 960 +308330716 32 960 +308330720 2 960 +308330724 32 960 +308330728 2 960 +308330732 32 960 +308330736 2 960 +308330740 32 960 +308330744 2 960 +308330748 32 960 +308330752 2 960 +308330756 32 960 +308330760 2 960 +308330764 32 960 +308330768 2 960 +308330772 32 960 +308330776 2 960 +308330780 32 960 +308330784 2 960 +308330788 32 960 +308330792 2 960 +308330796 32 960 +308330800 2 960 +308330804 32 960 +308330808 2 960 +308330812 32 960 +308330816 2 960 +308330820 32 960 +308330824 2 960 +308330828 32 960 +308330832 2 960 +308330836 32 960 +308330840 2 960 +308330844 32 960 +308330848 2 960 +308330852 32 960 +308330856 2 960 +308330860 32 960 +308330864 2 960 +308330868 32 960 +308330872 2 960 +308330876 32 960 +308330880 2 960 +308330884 32 960 +308330888 2 960 +308330892 32 960 +308330896 2 960 +308330900 32 960 +308330904 2 960 +308330908 32 960 +308330912 2 960 +308330916 32 960 +308330920 2 960 +308330924 32 960 +308330928 2 960 +308330932 32 960 +308330936 2 960 +308334596 32 960 +308334600 2 960 +308334604 32 960 +308334608 2 960 +308334612 32 960 +308334616 2 960 +308334620 32 960 +308334624 2 960 +308334628 32 960 +308334632 2 960 +308334636 32 960 +308334640 2 960 +308334644 32 960 +308334648 2 960 +308334652 32 960 +308334656 2 960 +308334660 32 960 +308334664 2 960 +308334668 32 960 +308334672 2 960 +308334676 32 960 +308334680 2 960 +308334684 32 960 +308334688 2 960 +308334692 32 960 +308334696 2 960 +308334700 32 960 +308334704 2 960 +308334708 32 960 +308334712 2 960 +308334716 32 960 +308334720 2 960 +308334724 32 960 +308334728 2 960 +308334732 32 960 +308334736 2 960 +308334740 32 960 +308334744 2 960 +308334748 32 960 +308334752 2 960 +308334756 32 960 +308334760 2 960 +308334764 32 960 +308334768 2 960 +308334772 32 960 +308334776 2 960 +308334780 32 960 +308334784 2 960 +308334788 32 960 +308334792 2 960 +308334796 32 960 +308334800 2 960 +308334804 32 960 +308334808 2 960 +308334812 32 960 +308334816 2 960 +308334820 32 960 +308334824 2 960 +308334828 32 960 +308334832 2 960 +308334836 32 960 +308334840 2 960 +308334844 32 960 +308334848 2 960 +308334852 32 960 +308334856 2 960 +308334860 32 960 +308334864 2 960 +308334868 32 960 +308334872 2 960 +308334876 32 960 +308334880 2 960 +308334884 32 960 +308334888 2 960 +308334892 32 960 +308334896 2 960 +308334900 32 960 +308334904 2 960 +308334908 32 960 +308334912 2 960 +308334916 32 960 +308334920 2 960 +308334924 32 960 +308334928 2 960 +308334932 32 960 +308334936 2 960 +308334940 32 960 +308334944 2 960 +308334948 32 960 +308334952 2 960 +308334956 32 960 +308334960 2 960 +308334964 32 960 +308334968 2 960 +308334972 32 960 +308334976 2 960 +308334980 32 960 +308334984 2 960 +308334988 32 960 +308334992 2 960 +308334996 32 960 +308335000 2 960 +308335004 32 960 +308335008 2 960 +308335012 32 960 +308335016 2 960 +308335020 32 960 +308335024 2 960 +308335028 32 960 +308335032 2 960 +308338692 32 960 +308338696 2 960 +308338700 32 960 +308338704 2 960 +308338708 32 960 +308338712 2 960 +308338716 32 960 +308338720 2 960 +308338724 32 960 +308338728 2 960 +308338732 32 960 +308338736 2 960 +308338740 32 960 +308338744 2 960 +308338748 32 960 +308338752 2 960 +308338756 32 960 +308338760 2 960 +308338764 32 960 +308338768 2 960 +308338772 32 960 +308338776 2 960 +308338780 32 960 +308338784 2 960 +308338788 32 960 +308338792 2 960 +308338796 32 960 +308338800 2 960 +308338804 32 960 +308338808 2 960 +308338812 32 960 +308338816 2 960 +308338820 32 960 +308338824 2 960 +308338828 32 960 +308338832 2 960 +308338836 32 960 +308338840 2 960 +308338844 32 960 +308338848 2 960 +308338852 32 960 +308338856 2 960 +308338860 32 960 +308338864 2 960 +308338868 32 960 +308338872 2 960 +308338876 32 960 +308338880 2 960 +308338884 32 960 +308338888 2 960 +308338892 32 960 +308338896 2 960 +308338900 32 960 +308338904 2 960 +308338908 32 960 +308338912 2 960 +308338916 32 960 +308338920 2 960 +308338924 32 960 +308338928 2 960 +308338932 32 960 +308338936 2 960 +308338940 32 960 +308338944 2 960 +308338948 32 960 +308338952 2 960 +308338956 32 960 +308338960 2 960 +308338964 32 960 +308338968 2 960 +308338972 32 960 +308338976 2 960 +308338980 32 960 +308338984 2 960 +308338988 32 960 +308338992 2 960 +308338996 32 960 +308339000 2 960 +308339004 32 960 +308339008 2 960 +308339012 32 960 +308339016 2 960 +308339020 32 960 +308339024 2 960 +308339028 32 960 +308339032 2 960 +308339036 32 960 +308339040 2 960 +308339044 32 960 +308339048 2 960 +308339052 32 960 +308339056 2 960 +308339060 32 960 +308339064 2 960 +308339068 32 960 +308339072 2 960 +308339076 32 960 +308339080 2 960 +308339084 32 960 +308339088 2 960 +308339092 32 960 +308339096 2 960 +308339100 32 960 +308339104 2 960 +308339108 32 960 +308339112 2 960 +308339116 32 960 +308339120 2 960 +308339124 32 960 +308339128 2 960 +308342788 32 960 +308342792 2 960 +308342796 32 960 +308342800 2 960 +308342804 32 960 +308342808 2 960 +308342812 32 960 +308342816 2 960 +308342820 32 960 +308342824 2 960 +308342828 32 960 +308342832 2 960 +308342836 32 960 +308342840 2 960 +308342844 32 960 +308342848 2 960 +308342852 32 960 +308342856 2 960 +308342860 32 960 +308342864 2 960 +308342868 32 960 +308342872 2 960 +308342876 32 960 +308342880 2 960 +308342884 32 960 +308342888 2 960 +308342892 32 960 +308342896 2 960 +308342900 32 960 +308342904 2 960 +308342908 32 960 +308342912 2 960 +308342916 32 960 +308342920 2 960 +308342924 32 960 +308342928 2 960 +308342932 32 960 +308342936 2 960 +308342940 32 960 +308342944 2 960 +308342948 32 960 +308342952 2 960 +308342956 32 960 +308342960 2 960 +308342964 32 960 +308342968 2 960 +308342972 32 960 +308342976 2 960 +308342980 32 960 +308342984 2 960 +308342988 32 960 +308342992 2 960 +308342996 32 960 +308343000 2 960 +308343004 32 960 +308343008 2 960 +308343012 32 960 +308343016 2 960 +308343020 32 960 +308343024 2 960 +308343028 32 960 +308343032 2 960 +308343036 32 960 +308343040 2 960 +308343044 32 960 +308343048 2 960 +308343052 32 960 +308343056 2 960 +308343060 32 960 +308343064 2 960 +308343068 32 960 +308343072 2 960 +308343076 32 960 +308343080 2 960 +308343084 32 960 +308343088 2 960 +308343092 32 960 +308343096 2 960 +308343100 32 960 +308343104 2 960 +308343108 32 960 +308343112 2 960 +308343116 32 960 +308343120 2 960 +308343124 32 960 +308343128 2 960 +308343132 32 960 +308343136 2 960 +308343140 32 960 +308343144 2 960 +308343148 32 960 +308343152 2 960 +308343156 32 960 +308343160 2 960 +308343164 32 960 +308343168 2 960 +308343172 32 960 +308343176 2 960 +308343180 32 960 +308343184 2 960 +308343188 32 960 +308343192 2 960 +308343196 32 960 +308343200 2 960 +308343204 32 960 +308343208 2 960 +308343212 32 960 +308343216 2 960 +308343220 32 960 +308343224 2 960 +308346884 32 960 +308346888 2 960 +308346892 32 960 +308346896 2 960 +308346900 32 960 +308346904 2 960 +308346908 32 960 +308346912 2 960 +308346916 32 960 +308346920 2 960 +308346924 32 960 +308346928 2 960 +308346932 32 960 +308346936 2 960 +308346940 32 960 +308346944 2 960 +308346948 32 960 +308346952 2 960 +308346956 32 960 +308346960 2 960 +308346964 32 960 +308346968 2 960 +308346972 32 960 +308346976 2 960 +308346980 32 960 +308346984 2 960 +308346988 32 960 +308346992 2 960 +308346996 32 960 +308347000 2 960 +308347004 32 960 +308347008 2 960 +308347012 32 960 +308347016 2 960 +308347020 32 960 +308347024 2 960 +308347028 32 960 +308347032 2 960 +308347036 32 960 +308347040 2 960 +308347044 32 960 +308347048 2 960 +308347052 32 960 +308347056 2 960 +308347060 32 960 +308347064 2 960 +308347068 32 960 +308347072 2 960 +308347076 32 960 +308347080 2 960 +308347084 32 960 +308347088 2 960 +308347092 32 960 +308347096 2 960 +308347100 32 960 +308347104 2 960 +308347108 32 960 +308347112 2 960 +308347116 32 960 +308347120 2 960 +308347124 32 960 +308347128 2 960 +308347132 32 960 +308347136 2 960 +308347140 32 960 +308347144 2 960 +308347148 32 960 +308347152 2 960 +308347156 32 960 +308347160 2 960 +308347164 32 960 +308347168 2 960 +308347172 32 960 +308347176 2 960 +308347180 32 960 +308347184 2 960 +308347188 32 960 +308347192 2 960 +308347196 32 960 +308347200 2 960 +308347204 32 960 +308347208 2 960 +308347212 32 960 +308347216 2 960 +308347220 32 960 +308347224 2 960 +308347228 32 960 +308347232 2 960 +308347236 32 960 +308347240 2 960 +308347244 32 960 +308347248 2 960 +308347252 32 960 +308347256 2 960 +308347260 32 960 +308347264 2 960 +308347268 32 960 +308347272 2 960 +308347276 32 960 +308347280 2 960 +308347284 32 960 +308347288 2 960 +308347292 32 960 +308347296 2 960 +308347300 32 960 +308347304 2 960 +308347308 32 960 +308347312 2 960 +308347316 32 960 +308347320 2 960 +308350980 32 960 +308350984 2 960 +308350988 32 960 +308350992 2 960 +308350996 32 960 +308351000 2 960 +308351004 32 960 +308351008 2 960 +308351012 32 960 +308351016 2 960 +308351020 32 960 +308351024 2 960 +308351028 32 960 +308351032 2 960 +308351036 32 960 +308351040 2 960 +308351044 32 960 +308351048 2 960 +308351052 32 960 +308351056 2 960 +308351060 32 960 +308351064 2 960 +308351068 32 960 +308351072 2 960 +308351076 32 960 +308351080 2 960 +308351084 32 960 +308351088 2 960 +308351092 32 960 +308351096 2 960 +308351100 32 960 +308351104 2 960 +308351108 32 960 +308351112 2 960 +308351116 32 960 +308351120 2 960 +308351124 32 960 +308351128 2 960 +308351132 32 960 +308351136 2 960 +308351140 32 960 +308351144 2 960 +308351148 32 960 +308351152 2 960 +308351156 32 960 +308351160 2 960 +308351164 32 960 +308351168 2 960 +308351172 32 960 +308351176 2 960 +308351180 32 960 +308351184 2 960 +308351188 32 960 +308351192 2 960 +308351196 32 960 +308351200 2 960 +308351204 32 960 +308351208 2 960 +308351212 32 960 +308351216 2 960 +308351220 32 960 +308351224 2 960 +308351228 32 960 +308351232 2 960 +308351236 32 960 +308351240 2 960 +308351244 32 960 +308351248 2 960 +308351252 32 960 +308351256 2 960 +308351260 32 960 +308351264 2 960 +308351268 32 960 +308351272 2 960 +308351276 32 960 +308351280 2 960 +308351284 32 960 +308351288 2 960 +308351292 32 960 +308351296 2 960 +308351300 32 960 +308351304 2 960 +308351308 32 960 +308351312 2 960 +308351316 32 960 +308351320 2 960 +308351324 32 960 +308351328 2 960 +308351332 32 960 +308351336 2 960 +308351340 32 960 +308351344 2 960 +308351348 32 960 +308351352 2 960 +308351356 32 960 +308351360 2 960 +308351364 32 960 +308351368 2 960 +308351372 32 960 +308351376 2 960 +308351380 32 960 +308351384 2 960 +308351388 32 960 +308351392 2 960 +308351396 32 960 +308351400 2 960 +308351404 32 960 +308351408 2 960 +308351412 32 960 +308351416 2 960 +308355076 32 960 +308355080 2 960 +308355084 32 960 +308355088 2 960 +308355092 32 960 +308355096 2 960 +308355100 32 960 +308355104 2 960 +308355108 32 960 +308355112 2 960 +308355116 32 960 +308355120 2 960 +308355124 32 960 +308355128 2 960 +308355132 32 960 +308355136 2 960 +308355140 32 960 +308355144 2 960 +308355148 32 960 +308355152 2 960 +308355156 32 960 +308355160 2 960 +308355164 32 960 +308355168 2 960 +308355172 32 960 +308355176 2 960 +308355180 32 960 +308355184 2 960 +308355188 32 960 +308355192 2 960 +308355196 32 960 +308355200 2 960 +308355204 32 960 +308355208 2 960 +308355212 32 960 +308355216 2 960 +308355220 32 960 +308355224 2 960 +308355228 32 960 +308355232 2 960 +308355236 32 960 +308355240 2 960 +308355244 32 960 +308355248 2 960 +308355252 32 960 +308355256 2 960 +308355260 32 960 +308355264 2 960 +308355268 32 960 +308355272 2 960 +308355276 32 960 +308355280 2 960 +308355284 32 960 +308355288 2 960 +308355292 32 960 +308355296 2 960 +308355300 32 960 +308355304 2 960 +308355308 32 960 +308355312 2 960 +308355316 32 960 +308355320 2 960 +308355324 32 960 +308355328 2 960 +308355332 32 960 +308355336 2 960 +308355340 32 960 +308355344 2 960 +308355348 32 960 +308355352 2 960 +308355356 32 960 +308355360 2 960 +308355364 32 960 +308355368 2 960 +308355372 32 960 +308355376 2 960 +308355380 32 960 +308355384 2 960 +308355388 32 960 +308355392 2 960 +308355396 32 960 +308355400 2 960 +308355404 32 960 +308355408 2 960 +308355412 32 960 +308355416 2 960 +308355420 32 960 +308355424 2 960 +308355428 32 960 +308355432 2 960 +308355436 32 960 +308355440 2 960 +308355444 32 960 +308355448 2 960 +308355452 32 960 +308355456 2 960 +308355460 32 960 +308355464 2 960 +308355468 32 960 +308355472 2 960 +308355476 32 960 +308355480 2 960 +308355484 32 960 +308355488 2 960 +308355492 32 960 +308355496 2 960 +308355500 32 960 +308355504 2 960 +308355508 32 960 +308355512 2 960 +308359172 32 960 +308359176 2 960 +308359180 32 960 +308359184 2 960 +308359188 32 960 +308359192 2 960 +308359196 32 960 +308359200 2 960 +308359204 32 960 +308359208 2 960 +308359212 32 960 +308359216 2 960 +308359220 32 960 +308359224 2 960 +308359228 32 960 +308359232 2 960 +308359236 32 960 +308359240 2 960 +308359244 32 960 +308359248 2 960 +308359252 32 960 +308359256 2 960 +308359260 32 960 +308359264 2 960 +308359268 32 960 +308359272 2 960 +308359276 32 960 +308359280 2 960 +308359284 32 960 +308359288 2 960 +308359292 32 960 +308359296 2 960 +308359300 32 960 +308359304 2 960 +308359308 32 960 +308359312 2 960 +308359316 32 960 +308359320 2 960 +308359324 32 960 +308359328 2 960 +308359332 32 960 +308359336 2 960 +308359340 32 960 +308359344 2 960 +308359348 32 960 +308359352 2 960 +308359356 32 960 +308359360 2 960 +308359364 32 960 +308359368 2 960 +308359372 32 960 +308359376 2 960 +308359380 32 960 +308359384 2 960 +308359388 32 960 +308359392 2 960 +308359396 32 960 +308359400 2 960 +308359404 32 960 +308359408 2 960 +308359412 32 960 +308359416 2 960 +308359420 32 960 +308359424 2 960 +308359428 32 960 +308359432 2 960 +308359436 32 960 +308359440 2 960 +308359444 32 960 +308359448 2 960 +308359452 32 960 +308359456 2 960 +308359460 32 960 +308359464 2 960 +308359468 32 960 +308359472 2 960 +308359476 32 960 +308359480 2 960 +308359484 32 960 +308359488 2 960 +308359492 32 960 +308359496 2 960 +308359500 32 960 +308359504 2 960 +308359508 32 960 +308359512 2 960 +308359516 32 960 +308359520 2 960 +308359524 32 960 +308359528 2 960 +308359532 32 960 +308359536 2 960 +308359540 32 960 +308359544 2 960 +308359548 32 960 +308359552 2 960 +308359556 32 960 +308359560 2 960 +308359564 32 960 +308359568 2 960 +308359572 32 960 +308359576 2 960 +308359580 32 960 +308359584 2 960 +308359588 32 960 +308359592 2 960 +308359596 32 960 +308359600 2 960 +308359604 32 960 +308359608 2 960 +308363268 32 960 +308363272 2 960 +308363276 32 960 +308363280 2 960 +308363284 32 960 +308363288 2 960 +308363292 32 960 +308363296 2 960 +308363300 32 960 +308363304 2 960 +308363308 32 960 +308363312 2 960 +308363316 32 960 +308363320 2 960 +308363324 32 960 +308363328 2 960 +308363332 32 960 +308363336 2 960 +308363340 32 960 +308363344 2 960 +308363348 32 960 +308363352 2 960 +308363356 32 960 +308363360 2 960 +308363364 32 960 +308363368 2 960 +308363372 32 960 +308363376 2 960 +308363380 32 960 +308363384 2 960 +308363388 32 960 +308363392 2 960 +308363396 32 960 +308363400 2 960 +308363404 32 960 +308363408 2 960 +308363412 32 960 +308363416 2 960 +308363420 32 960 +308363424 2 960 +308363428 32 960 +308363432 2 960 +308363436 32 960 +308363440 2 960 +308363444 32 960 +308363448 2 960 +308363452 32 960 +308363456 2 960 +308363460 32 960 +308363464 2 960 +308363468 32 960 +308363472 2 960 +308363476 32 960 +308363480 2 960 +308363484 32 960 +308363488 2 960 +308363492 32 960 +308363496 2 960 +308363500 32 960 +308363504 2 960 +308363508 32 960 +308363512 2 960 +308363516 32 960 +308363520 2 960 +308363524 32 960 +308363528 2 960 +308363532 32 960 +308363536 2 960 +308363540 32 960 +308363544 2 960 +308363548 32 960 +308363552 2 960 +308363556 32 960 +308363560 2 960 +308363564 32 960 +308363568 2 960 +308363572 32 960 +308363576 2 960 +308363580 32 960 +308363584 2 960 +308363588 32 960 +308363592 2 960 +308363596 32 960 +308363600 2 960 +308363604 32 960 +308363608 2 960 +308363612 32 960 +308363616 2 960 +308363620 32 960 +308363624 2 960 +308363628 32 960 +308363632 2 960 +308363636 32 960 +308363640 2 960 +308363644 32 960 +308363648 2 960 +308363652 32 960 +308363656 2 960 +308363660 32 960 +308363664 2 960 +308363668 32 960 +308363672 2 960 +308363676 32 960 +308363680 2 960 +308363684 32 960 +308363688 2 960 +308363692 32 960 +308363696 2 960 +308363700 32 960 +308363704 2 960 +308367364 32 960 +308367368 2 960 +308367372 32 960 +308367376 2 960 +308367380 32 960 +308367384 2 960 +308367388 32 960 +308367392 2 960 +308367396 32 960 +308367400 2 960 +308367404 32 960 +308367408 2 960 +308367412 32 960 +308367416 2 960 +308367420 32 960 +308367424 2 960 +308367428 32 960 +308367432 2 960 +308367436 32 960 +308367440 2 960 +308367444 32 960 +308367448 2 960 +308367452 32 960 +308367456 2 960 +308367460 32 960 +308367464 2 960 +308367468 32 960 +308367472 2 960 +308367476 32 960 +308367480 2 960 +308367484 32 960 +308367488 2 960 +308367492 32 960 +308367496 2 960 +308367500 32 960 +308367504 2 960 +308367508 32 960 +308367512 2 960 +308367516 32 960 +308367520 2 960 +308367524 32 960 +308367528 2 960 +308367532 32 960 +308367536 2 960 +308367540 32 960 +308367544 2 960 +308367548 32 960 +308367552 2 960 +308367556 32 960 +308367560 2 960 +308367564 32 960 +308367568 2 960 +308367572 32 960 +308367576 2 960 +308367580 32 960 +308367584 2 960 +308367588 32 960 +308367592 2 960 +308367596 32 960 +308367600 2 960 +308367604 32 960 +308367608 2 960 +308367612 32 960 +308367616 2 960 +308367620 32 960 +308367624 2 960 +308367628 32 960 +308367632 2 960 +308367636 32 960 +308367640 2 960 +308367644 32 960 +308367648 2 960 +308367652 32 960 +308367656 2 960 +308367660 32 960 +308367664 2 960 +308367668 32 960 +308367672 2 960 +308367676 32 960 +308367680 2 960 +308367684 32 960 +308367688 2 960 +308367692 32 960 +308367696 2 960 +308367700 32 960 +308367704 2 960 +308367708 32 960 +308367712 2 960 +308367716 32 960 +308367720 2 960 +308367724 32 960 +308367728 2 960 +308367732 32 960 +308367736 2 960 +308367740 32 960 +308367744 2 960 +308367748 32 960 +308367752 2 960 +308367756 32 960 +308367760 2 960 +308367764 32 960 +308367768 2 960 +308367772 32 960 +308367776 2 960 +308367780 32 960 +308367784 2 960 +308367788 32 960 +308367792 2 960 +308367796 32 960 +308367800 2 960 +308371460 32 960 +308371464 2 960 +308371468 32 960 +308371472 2 960 +308371476 32 960 +308371480 2 960 +308371484 32 960 +308371488 2 960 +308371492 32 960 +308371496 2 960 +308371500 32 960 +308371504 2 960 +308371508 32 960 +308371512 2 960 +308371516 32 960 +308371520 2 960 +308371524 32 960 +308371528 2 960 +308371532 32 960 +308371536 2 960 +308371540 32 960 +308371544 2 960 +308371548 32 960 +308371552 2 960 +308371556 32 960 +308371560 2 960 +308371564 32 960 +308371568 2 960 +308371572 32 960 +308371576 2 960 +308371580 32 960 +308371584 2 960 +308371588 32 960 +308371592 2 960 +308371596 32 960 +308371600 2 960 +308371604 32 960 +308371608 2 960 +308371612 32 960 +308371616 2 960 +308371620 32 960 +308371624 2 960 +308371628 32 960 +308371632 2 960 +308371636 32 960 +308371640 2 960 +308371644 32 960 +308371648 2 960 +308371652 32 960 +308371656 2 960 +308371660 32 960 +308371664 2 960 +308371668 32 960 +308371672 2 960 +308371676 32 960 +308371680 2 960 +308371684 32 960 +308371688 2 960 +308371692 32 960 +308371696 2 960 +308371700 32 960 +308371704 2 960 +308371708 32 960 +308371712 2 960 +308371716 32 960 +308371720 2 960 +308371724 32 960 +308371728 2 960 +308371732 32 960 +308371736 2 960 +308371740 32 960 +308371744 2 960 +308371748 32 960 +308371752 2 960 +308371756 32 960 +308371760 2 960 +308371764 32 960 +308371768 2 960 +308371772 32 960 +308371776 2 960 +308371780 32 960 +308371784 2 960 +308371788 32 960 +308371792 2 960 +308371796 32 960 +308371800 2 960 +308371804 32 960 +308371808 2 960 +308371812 32 960 +308371816 2 960 +308371820 32 960 +308371824 2 960 +308371828 32 960 +308371832 2 960 +308371836 32 960 +308371840 2 960 +308371844 32 960 +308371848 2 960 +308371852 32 960 +308371856 2 960 +308371860 32 960 +308371864 2 960 +308371868 32 960 +308371872 2 960 +308371876 32 960 +308371880 2 960 +308371884 32 960 +308371888 2 960 +308371892 32 960 +308371896 2 960 +308375556 32 960 +308375560 2 960 +308375564 32 960 +308375568 2 960 +308375572 32 960 +308375576 2 960 +308375580 32 960 +308375584 2 960 +308375588 32 960 +308375592 2 960 +308375596 32 960 +308375600 2 960 +308375604 32 960 +308375608 2 960 +308375612 32 960 +308375616 2 960 +308375620 32 960 +308375624 2 960 +308375628 32 960 +308375632 2 960 +308375636 32 960 +308375640 2 960 +308375644 32 960 +308375648 2 960 +308375652 32 960 +308375656 2 960 +308375660 32 960 +308375664 2 960 +308375668 32 960 +308375672 2 960 +308375676 32 960 +308375680 2 960 +308375684 32 960 +308375688 2 960 +308375692 32 960 +308375696 2 960 +308375700 32 960 +308375704 2 960 +308375708 32 960 +308375712 2 960 +308375716 32 960 +308375720 2 960 +308375724 32 960 +308375728 2 960 +308375732 32 960 +308375736 2 960 +308375740 32 960 +308375744 2 960 +308375748 32 960 +308375752 2 960 +308375756 32 960 +308375760 2 960 +308375764 32 960 +308375768 2 960 +308375772 32 960 +308375776 2 960 +308375780 32 960 +308375784 2 960 +308375788 32 960 +308375792 2 960 +308375796 32 960 +308375800 2 960 +308375804 32 960 +308375808 2 960 +308375812 32 960 +308375816 2 960 +308375820 32 960 +308375824 2 960 +308375828 32 960 +308375832 2 960 +308375836 32 960 +308375840 2 960 +308375844 32 960 +308375848 2 960 +308375852 32 960 +308375856 2 960 +308375860 32 960 +308375864 2 960 +308375868 32 960 +308375872 2 960 +308375876 32 960 +308375880 2 960 +308375884 32 960 +308375888 2 960 +308375892 32 960 +308375896 2 960 +308375900 32 960 +308375904 2 960 +308375908 32 960 +308375912 2 960 +308375916 32 960 +308375920 2 960 +308375924 32 960 +308375928 2 960 +308375932 32 960 +308375936 2 960 +308375940 32 960 +308375944 2 960 +308375948 32 960 +308375952 2 960 +308375956 32 960 +308375960 2 960 +308375964 32 960 +308375968 2 960 +308375972 32 960 +308375976 2 960 +308375980 32 960 +308375984 2 960 +308375988 32 960 +308375992 2 960 +308379652 32 960 +308379656 2 960 +308379660 32 960 +308379664 2 960 +308379668 32 960 +308379672 2 960 +308379676 32 960 +308379680 2 960 +308379684 32 960 +308379688 2 960 +308379692 32 960 +308379696 2 960 +308379700 32 960 +308379704 2 960 +308379708 32 960 +308379712 2 960 +308379716 32 960 +308379720 2 960 +308379724 32 960 +308379728 2 960 +308379732 32 960 +308379736 2 960 +308379740 32 960 +308379744 2 960 +308379748 32 960 +308379752 2 960 +308379756 32 960 +308379760 2 960 +308379764 32 960 +308379768 2 960 +308379772 32 960 +308379776 2 960 +308379780 32 960 +308379784 2 960 +308379788 32 960 +308379792 2 960 +308379796 32 960 +308379800 2 960 +308379804 32 960 +308379808 2 960 +308379812 32 960 +308379816 2 960 +308379820 32 960 +308379824 2 960 +308379828 32 960 +308379832 2 960 +308379836 32 960 +308379840 2 960 +308379844 32 960 +308379848 2 960 +308379852 32 960 +308379856 2 960 +308379860 32 960 +308379864 2 960 +308379868 32 960 +308379872 2 960 +308379876 32 960 +308379880 2 960 +308379884 32 960 +308379888 2 960 +308379892 32 960 +308379896 2 960 +308379900 32 960 +308379904 2 960 +308379908 32 960 +308379912 2 960 +308379916 32 960 +308379920 2 960 +308379924 32 960 +308379928 2 960 +308379932 32 960 +308379936 2 960 +308379940 32 960 +308379944 2 960 +308379948 32 960 +308379952 2 960 +308379956 32 960 +308379960 2 960 +308379964 32 960 +308379968 2 960 +308379972 32 960 +308379976 2 960 +308379980 32 960 +308379984 2 960 +308379988 32 960 +308379992 2 960 +308379996 32 960 +308380000 2 960 +308380004 32 960 +308380008 2 960 +308380012 32 960 +308380016 2 960 +308380020 32 960 +308380024 2 960 +308380028 32 960 +308380032 2 960 +308380036 32 960 +308380040 2 960 +308380044 32 960 +308380048 2 960 +308380052 32 960 +308380056 2 960 +308380060 32 960 +308380064 2 960 +308380068 32 960 +308380072 2 960 +308380076 32 960 +308380080 2 960 +308380084 32 960 +308380088 2 960 +309334020 32 960 +309334024 2 960 +309334028 32 960 +309334032 2 960 +309334036 32 960 +309334040 2 960 +309334044 32 960 +309334048 2 960 +309334052 32 960 +309334056 2 960 +309334060 32 960 +309334064 2 960 +309334068 32 960 +309334072 2 960 +309334076 32 960 +309334080 2 960 +309334084 32 960 +309334088 2 960 +309334092 32 960 +309334096 2 960 +309334100 32 960 +309334104 2 960 +309334108 32 960 +309334112 2 960 +309334116 32 960 +309334120 2 960 +309334124 32 960 +309334128 2 960 +309334132 32 960 +309334136 2 960 +309334140 32 960 +309334144 2 960 +309334148 32 960 +309334152 2 960 +309334156 32 960 +309334160 2 960 +309334164 32 960 +309334168 2 960 +309334172 32 960 +309334176 2 960 +309334180 32 960 +309334184 2 960 +309334188 32 960 +309334192 2 960 +309334196 32 960 +309334200 2 960 +309334204 32 960 +309334208 2 960 +309334212 32 960 +309334216 2 960 +309334220 32 960 +309334224 2 960 +309334228 32 960 +309334232 2 960 +309334236 32 960 +309334240 2 960 +309334244 32 960 +309334248 2 960 +309334252 32 960 +309334256 2 960 +309334260 32 960 +309334264 2 960 +309334268 32 960 +309334272 2 960 +309334276 32 960 +309334280 2 960 +309334284 32 960 +309334288 2 960 +309334292 32 960 +309334296 2 960 +309334300 32 960 +309334304 2 960 +309334308 32 960 +309334312 2 960 +309334316 32 960 +309334320 2 960 +309334324 32 960 +309334328 2 960 +309334332 32 960 +309334336 2 960 +309334340 32 960 +309334344 2 960 +309334348 32 960 +309334352 2 960 +309334356 32 960 +309334360 2 960 +309334364 32 960 +309334368 2 960 +309334372 32 960 +309334376 2 960 +309334380 32 960 +309334384 2 960 +309334388 32 960 +309334392 2 960 +309334396 32 960 +309334400 2 960 +309334404 32 960 +309334408 2 960 +309334412 32 960 +309334416 2 960 +309334420 32 960 +309334424 2 960 +309334428 32 960 +309334432 2 960 +309334436 32 960 +309334440 2 960 +309334444 32 960 +309334448 2 960 +309338116 32 960 +309338120 2 960 +309338124 32 960 +309338128 2 960 +309338132 32 960 +309338136 2 960 +309338140 32 960 +309338144 2 960 +309338148 32 960 +309338152 2 960 +309338156 32 960 +309338160 2 960 +309338164 32 960 +309338168 2 960 +309338172 32 960 +309338176 2 960 +309338180 32 960 +309338184 2 960 +309338188 32 960 +309338192 2 960 +309338196 32 960 +309338200 2 960 +309338204 32 960 +309338208 2 960 +309338212 32 960 +309338216 2 960 +309338220 32 960 +309338224 2 960 +309338228 32 960 +309338232 2 960 +309338236 32 960 +309338240 2 960 +309338244 32 960 +309338248 2 960 +309338252 32 960 +309338256 2 960 +309338260 32 960 +309338264 2 960 +309338268 32 960 +309338272 2 960 +309338276 32 960 +309338280 2 960 +309338284 32 960 +309338288 2 960 +309338292 32 960 +309338296 2 960 +309338300 32 960 +309338304 2 960 +309338308 32 960 +309338312 2 960 +309338316 32 960 +309338320 2 960 +309338324 32 960 +309338328 2 960 +309338332 32 960 +309338336 2 960 +309338340 32 960 +309338344 2 960 +309338348 32 960 +309338352 2 960 +309338356 32 960 +309338360 2 960 +309338364 32 960 +309338368 2 960 +309338372 32 960 +309338376 2 960 +309338380 32 960 +309338384 2 960 +309338388 32 960 +309338392 2 960 +309338396 32 960 +309338400 2 960 +309338404 32 960 +309338408 2 960 +309338412 32 960 +309338416 2 960 +309338420 32 960 +309338424 2 960 +309338428 32 960 +309338432 2 960 +309338436 32 960 +309338440 2 960 +309338444 32 960 +309338448 2 960 +309338452 32 960 +309338456 2 960 +309338460 32 960 +309338464 2 960 +309338468 32 960 +309338472 2 960 +309338476 32 960 +309338480 2 960 +309338484 32 960 +309338488 2 960 +309338492 32 960 +309338496 2 960 +309338500 32 960 +309338504 2 960 +309338508 32 960 +309338512 2 960 +309338516 32 960 +309338520 2 960 +309338524 32 960 +309338528 2 960 +309338532 32 960 +309338536 2 960 +309338540 32 960 +309338544 2 960 +309342212 32 960 +309342216 2 960 +309342220 32 960 +309342224 2 960 +309342228 32 960 +309342232 2 960 +309342236 32 960 +309342240 2 960 +309342244 32 960 +309342248 2 960 +309342252 32 960 +309342256 2 960 +309342260 32 960 +309342264 2 960 +309342268 32 960 +309342272 2 960 +309342276 32 960 +309342280 2 960 +309342284 32 960 +309342288 2 960 +309342292 32 960 +309342296 2 960 +309342300 32 960 +309342304 2 960 +309342308 32 960 +309342312 2 960 +309342316 32 960 +309342320 2 960 +309342324 32 960 +309342328 2 960 +309342332 32 960 +309342336 2 960 +309342340 32 960 +309342344 2 960 +309342348 32 960 +309342352 2 960 +309342356 32 960 +309342360 2 960 +309342364 32 960 +309342368 2 960 +309342372 32 960 +309342376 2 960 +309342380 32 960 +309342384 2 960 +309342388 32 960 +309342392 2 960 +309342396 32 960 +309342400 2 960 +309342404 32 960 +309342408 2 960 +309342412 32 960 +309342416 2 960 +309342420 32 960 +309342424 2 960 +309342428 32 960 +309342432 2 960 +309342436 32 960 +309342440 2 960 +309342444 32 960 +309342448 2 960 +309342452 32 960 +309342456 2 960 +309342460 32 960 +309342464 2 960 +309342468 32 960 +309342472 2 960 +309342476 32 960 +309342480 2 960 +309342484 32 960 +309342488 2 960 +309342492 32 960 +309342496 2 960 +309342500 32 960 +309342504 2 960 +309342508 32 960 +309342512 2 960 +309342516 32 960 +309342520 2 960 +309342524 32 960 +309342528 2 960 +309342532 32 960 +309342536 2 960 +309342540 32 960 +309342544 2 960 +309342548 32 960 +309342552 2 960 +309342556 32 960 +309342560 2 960 +309342564 32 960 +309342568 2 960 +309342572 32 960 +309342576 2 960 +309342580 32 960 +309342584 2 960 +309342588 32 960 +309342592 2 960 +309342596 32 960 +309342600 2 960 +309342604 32 960 +309342608 2 960 +309342612 32 960 +309342616 2 960 +309342620 32 960 +309342624 2 960 +309342628 32 960 +309342632 2 960 +309342636 32 960 +309342640 2 960 +309346308 32 960 +309346312 2 960 +309346316 32 960 +309346320 2 960 +309346324 32 960 +309346328 2 960 +309346332 32 960 +309346336 2 960 +309346340 32 960 +309346344 2 960 +309346348 32 960 +309346352 2 960 +309346356 32 960 +309346360 2 960 +309346364 32 960 +309346368 2 960 +309346372 32 960 +309346376 2 960 +309346380 32 960 +309346384 2 960 +309346388 32 960 +309346392 2 960 +309346396 32 960 +309346400 2 960 +309346404 32 960 +309346408 2 960 +309346412 32 960 +309346416 2 960 +309346420 32 960 +309346424 2 960 +309346428 32 960 +309346432 2 960 +309346436 32 960 +309346440 2 960 +309346444 32 960 +309346448 2 960 +309346452 32 960 +309346456 2 960 +309346460 32 960 +309346464 2 960 +309346468 32 960 +309346472 2 960 +309346476 32 960 +309346480 2 960 +309346484 32 960 +309346488 2 960 +309346492 32 960 +309346496 2 960 +309346500 32 960 +309346504 2 960 +309346508 32 960 +309346512 2 960 +309346516 32 960 +309346520 2 960 +309346524 32 960 +309346528 2 960 +309346532 32 960 +309346536 2 960 +309346540 32 960 +309346544 2 960 +309346548 32 960 +309346552 2 960 +309346556 32 960 +309346560 2 960 +309346564 32 960 +309346568 2 960 +309346572 32 960 +309346576 2 960 +309346580 32 960 +309346584 2 960 +309346588 32 960 +309346592 2 960 +309346596 32 960 +309346600 2 960 +309346604 32 960 +309346608 2 960 +309346612 32 960 +309346616 2 960 +309346620 32 960 +309346624 2 960 +309346628 32 960 +309346632 2 960 +309346636 32 960 +309346640 2 960 +309346644 32 960 +309346648 2 960 +309346652 32 960 +309346656 2 960 +309346660 32 960 +309346664 2 960 +309346668 32 960 +309346672 2 960 +309346676 32 960 +309346680 2 960 +309346684 32 960 +309346688 2 960 +309346692 32 960 +309346696 2 960 +309346700 32 960 +309346704 2 960 +309346708 32 960 +309346712 2 960 +309346716 32 960 +309346720 2 960 +309346724 32 960 +309346728 2 960 +309346732 32 960 +309346736 2 960 +309350404 32 960 +309350408 2 960 +309350412 32 960 +309350416 2 960 +309350420 32 960 +309350424 2 960 +309350428 32 960 +309350432 2 960 +309350436 32 960 +309350440 2 960 +309350444 32 960 +309350448 2 960 +309350452 32 960 +309350456 2 960 +309350460 32 960 +309350464 2 960 +309350468 32 960 +309350472 2 960 +309350476 32 960 +309350480 2 960 +309350484 32 960 +309350488 2 960 +309350492 32 960 +309350496 2 960 +309350500 32 960 +309350504 2 960 +309350508 32 960 +309350512 2 960 +309350516 32 960 +309350520 2 960 +309350524 32 960 +309350528 2 960 +309350532 32 960 +309350536 2 960 +309350540 32 960 +309350544 2 960 +309350548 32 960 +309350552 2 960 +309350556 32 960 +309350560 2 960 +309350564 32 960 +309350568 2 960 +309350572 32 960 +309350576 2 960 +309350580 32 960 +309350584 2 960 +309350588 32 960 +309350592 2 960 +309350596 32 960 +309350600 2 960 +309350604 32 960 +309350608 2 960 +309350612 32 960 +309350616 2 960 +309350620 32 960 +309350624 2 960 +309350628 32 960 +309350632 2 960 +309350636 32 960 +309350640 2 960 +309350644 32 960 +309350648 2 960 +309350652 32 960 +309350656 2 960 +309350660 32 960 +309350664 2 960 +309350668 32 960 +309350672 2 960 +309350676 32 960 +309350680 2 960 +309350684 32 960 +309350688 2 960 +309350692 32 960 +309350696 2 960 +309350700 32 960 +309350704 2 960 +309350708 32 960 +309350712 2 960 +309350716 32 960 +309350720 2 960 +309350724 32 960 +309350728 2 960 +309350732 32 960 +309350736 2 960 +309350740 32 960 +309350744 2 960 +309350748 32 960 +309350752 2 960 +309350756 32 960 +309350760 2 960 +309350764 32 960 +309350768 2 960 +309350772 32 960 +309350776 2 960 +309350780 32 960 +309350784 2 960 +309350788 32 960 +309350792 2 960 +309350796 32 960 +309350800 2 960 +309350804 32 960 +309350808 2 960 +309350812 32 960 +309350816 2 960 +309350820 32 960 +309350824 2 960 +309350828 32 960 +309350832 2 960 +309354500 32 960 +309354504 2 960 +309354508 32 960 +309354512 2 960 +309354516 32 960 +309354520 2 960 +309354524 32 960 +309354528 2 960 +309354532 32 960 +309354536 2 960 +309354540 32 960 +309354544 2 960 +309354548 32 960 +309354552 2 960 +309354556 32 960 +309354560 2 960 +309354564 32 960 +309354568 2 960 +309354572 32 960 +309354576 2 960 +309354580 32 960 +309354584 2 960 +309354588 32 960 +309354592 2 960 +309354596 32 960 +309354600 2 960 +309354604 32 960 +309354608 2 960 +309354612 32 960 +309354616 2 960 +309354620 32 960 +309354624 2 960 +309354628 32 960 +309354632 2 960 +309354636 32 960 +309354640 2 960 +309354644 32 960 +309354648 2 960 +309354652 32 960 +309354656 2 960 +309354660 32 960 +309354664 2 960 +309354668 32 960 +309354672 2 960 +309354676 32 960 +309354680 2 960 +309354684 32 960 +309354688 2 960 +309354692 32 960 +309354696 2 960 +309354700 32 960 +309354704 2 960 +309354708 32 960 +309354712 2 960 +309354716 32 960 +309354720 2 960 +309354724 32 960 +309354728 2 960 +309354732 32 960 +309354736 2 960 +309354740 32 960 +309354744 2 960 +309354748 32 960 +309354752 2 960 +309354756 32 960 +309354760 2 960 +309354764 32 960 +309354768 2 960 +309354772 32 960 +309354776 2 960 +309354780 32 960 +309354784 2 960 +309354788 32 960 +309354792 2 960 +309354796 32 960 +309354800 2 960 +309354804 32 960 +309354808 2 960 +309354812 32 960 +309354816 2 960 +309354820 32 960 +309354824 2 960 +309354828 32 960 +309354832 2 960 +309354836 32 960 +309354840 2 960 +309354844 32 960 +309354848 2 960 +309354852 32 960 +309354856 2 960 +309354860 32 960 +309354864 2 960 +309354868 32 960 +309354872 2 960 +309354876 32 960 +309354880 2 960 +309354884 32 960 +309354888 2 960 +309354892 32 960 +309354896 2 960 +309354900 32 960 +309354904 2 960 +309354908 32 960 +309354912 2 960 +309354916 32 960 +309354920 2 960 +309354924 32 960 +309354928 2 960 +309358596 32 960 +309358600 2 960 +309358604 32 960 +309358608 2 960 +309358612 32 960 +309358616 2 960 +309358620 32 960 +309358624 2 960 +309358628 32 960 +309358632 2 960 +309358636 32 960 +309358640 2 960 +309358644 32 960 +309358648 2 960 +309358652 32 960 +309358656 2 960 +309358660 32 960 +309358664 2 960 +309358668 32 960 +309358672 2 960 +309358676 32 960 +309358680 2 960 +309358684 32 960 +309358688 2 960 +309358692 32 960 +309358696 2 960 +309358700 32 960 +309358704 2 960 +309358708 32 960 +309358712 2 960 +309358716 32 960 +309358720 2 960 +309358724 32 960 +309358728 2 960 +309358732 32 960 +309358736 2 960 +309358740 32 960 +309358744 2 960 +309358748 32 960 +309358752 2 960 +309358756 32 960 +309358760 2 960 +309358764 32 960 +309358768 2 960 +309358772 32 960 +309358776 2 960 +309358780 32 960 +309358784 2 960 +309358788 32 960 +309358792 2 960 +309358796 32 960 +309358800 2 960 +309358804 32 960 +309358808 2 960 +309358812 32 960 +309358816 2 960 +309358820 32 960 +309358824 2 960 +309358828 32 960 +309358832 2 960 +309358836 32 960 +309358840 2 960 +309358844 32 960 +309358848 2 960 +309358852 32 960 +309358856 2 960 +309358860 32 960 +309358864 2 960 +309358868 32 960 +309358872 2 960 +309358876 32 960 +309358880 2 960 +309358884 32 960 +309358888 2 960 +309358892 32 960 +309358896 2 960 +309358900 32 960 +309358904 2 960 +309358908 32 960 +309358912 2 960 +309358916 32 960 +309358920 2 960 +309358924 32 960 +309358928 2 960 +309358932 32 960 +309358936 2 960 +309358940 32 960 +309358944 2 960 +309358948 32 960 +309358952 2 960 +309358956 32 960 +309358960 2 960 +309358964 32 960 +309358968 2 960 +309358972 32 960 +309358976 2 960 +309358980 32 960 +309358984 2 960 +309358988 32 960 +309358992 2 960 +309358996 32 960 +309359000 2 960 +309359004 32 960 +309359008 2 960 +309359012 32 960 +309359016 2 960 +309359020 32 960 +309359024 2 960 +309362692 32 960 +309362696 2 960 +309362700 32 960 +309362704 2 960 +309362708 32 960 +309362712 2 960 +309362716 32 960 +309362720 2 960 +309362724 32 960 +309362728 2 960 +309362732 32 960 +309362736 2 960 +309362740 32 960 +309362744 2 960 +309362748 32 960 +309362752 2 960 +309362756 32 960 +309362760 2 960 +309362764 32 960 +309362768 2 960 +309362772 32 960 +309362776 2 960 +309362780 32 960 +309362784 2 960 +309362788 32 960 +309362792 2 960 +309362796 32 960 +309362800 2 960 +309362804 32 960 +309362808 2 960 +309362812 32 960 +309362816 2 960 +309362820 32 960 +309362824 2 960 +309362828 32 960 +309362832 2 960 +309362836 32 960 +309362840 2 960 +309362844 32 960 +309362848 2 960 +309362852 32 960 +309362856 2 960 +309362860 32 960 +309362864 2 960 +309362868 32 960 +309362872 2 960 +309362876 32 960 +309362880 2 960 +309362884 32 960 +309362888 2 960 +309362892 32 960 +309362896 2 960 +309362900 32 960 +309362904 2 960 +309362908 32 960 +309362912 2 960 +309362916 32 960 +309362920 2 960 +309362924 32 960 +309362928 2 960 +309362932 32 960 +309362936 2 960 +309362940 32 960 +309362944 2 960 +309362948 32 960 +309362952 2 960 +309362956 32 960 +309362960 2 960 +309362964 32 960 +309362968 2 960 +309362972 32 960 +309362976 2 960 +309362980 32 960 +309362984 2 960 +309362988 32 960 +309362992 2 960 +309362996 32 960 +309363000 2 960 +309363004 32 960 +309363008 2 960 +309363012 32 960 +309363016 2 960 +309363020 32 960 +309363024 2 960 +309363028 32 960 +309363032 2 960 +309363036 32 960 +309363040 2 960 +309363044 32 960 +309363048 2 960 +309363052 32 960 +309363056 2 960 +309363060 32 960 +309363064 2 960 +309363068 32 960 +309363072 2 960 +309363076 32 960 +309363080 2 960 +309363084 32 960 +309363088 2 960 +309363092 32 960 +309363096 2 960 +309363100 32 960 +309363104 2 960 +309363108 32 960 +309363112 2 960 +309363116 32 960 +309363120 2 960 +309366788 32 960 +309366792 2 960 +309366796 32 960 +309366800 2 960 +309366804 32 960 +309366808 2 960 +309366812 32 960 +309366816 2 960 +309366820 32 960 +309366824 2 960 +309366828 32 960 +309366832 2 960 +309366836 32 960 +309366840 2 960 +309366844 32 960 +309366848 2 960 +309366852 32 960 +309366856 2 960 +309366860 32 960 +309366864 2 960 +309366868 32 960 +309366872 2 960 +309366876 32 960 +309366880 2 960 +309366884 32 960 +309366888 2 960 +309366892 32 960 +309366896 2 960 +309366900 32 960 +309366904 2 960 +309366908 32 960 +309366912 2 960 +309366916 32 960 +309366920 2 960 +309366924 32 960 +309366928 2 960 +309366932 32 960 +309366936 2 960 +309366940 32 960 +309366944 2 960 +309366948 32 960 +309366952 2 960 +309366956 32 960 +309366960 2 960 +309366964 32 960 +309366968 2 960 +309366972 32 960 +309366976 2 960 +309366980 32 960 +309366984 2 960 +309366988 32 960 +309366992 2 960 +309366996 32 960 +309367000 2 960 +309367004 32 960 +309367008 2 960 +309367012 32 960 +309367016 2 960 +309367020 32 960 +309367024 2 960 +309367028 32 960 +309367032 2 960 +309367036 32 960 +309367040 2 960 +309367044 32 960 +309367048 2 960 +309367052 32 960 +309367056 2 960 +309367060 32 960 +309367064 2 960 +309367068 32 960 +309367072 2 960 +309367076 32 960 +309367080 2 960 +309367084 32 960 +309367088 2 960 +309367092 32 960 +309367096 2 960 +309367100 32 960 +309367104 2 960 +309367108 32 960 +309367112 2 960 +309367116 32 960 +309367120 2 960 +309367124 32 960 +309367128 2 960 +309367132 32 960 +309367136 2 960 +309367140 32 960 +309367144 2 960 +309367148 32 960 +309367152 2 960 +309367156 32 960 +309367160 2 960 +309367164 32 960 +309367168 2 960 +309367172 32 960 +309367176 2 960 +309367180 32 960 +309367184 2 960 +309367188 32 960 +309367192 2 960 +309367196 32 960 +309367200 2 960 +309367204 32 960 +309367208 2 960 +309367212 32 960 +309367216 2 960 +309370884 32 960 +309370888 2 960 +309370892 32 960 +309370896 2 960 +309370900 32 960 +309370904 2 960 +309370908 32 960 +309370912 2 960 +309370916 32 960 +309370920 2 960 +309370924 32 960 +309370928 2 960 +309370932 32 960 +309370936 2 960 +309370940 32 960 +309370944 2 960 +309370948 32 960 +309370952 2 960 +309370956 32 960 +309370960 2 960 +309370964 32 960 +309370968 2 960 +309370972 32 960 +309370976 2 960 +309370980 32 960 +309370984 2 960 +309370988 32 960 +309370992 2 960 +309370996 32 960 +309371000 2 960 +309371004 32 960 +309371008 2 960 +309371012 32 960 +309371016 2 960 +309371020 32 960 +309371024 2 960 +309371028 32 960 +309371032 2 960 +309371036 32 960 +309371040 2 960 +309371044 32 960 +309371048 2 960 +309371052 32 960 +309371056 2 960 +309371060 32 960 +309371064 2 960 +309371068 32 960 +309371072 2 960 +309371076 32 960 +309371080 2 960 +309371084 32 960 +309371088 2 960 +309371092 32 960 +309371096 2 960 +309371100 32 960 +309371104 2 960 +309371108 32 960 +309371112 2 960 +309371116 32 960 +309371120 2 960 +309371124 32 960 +309371128 2 960 +309371132 32 960 +309371136 2 960 +309371140 32 960 +309371144 2 960 +309371148 32 960 +309371152 2 960 +309371156 32 960 +309371160 2 960 +309371164 32 960 +309371168 2 960 +309371172 32 960 +309371176 2 960 +309371180 32 960 +309371184 2 960 +309371188 32 960 +309371192 2 960 +309371196 32 960 +309371200 2 960 +309371204 32 960 +309371208 2 960 +309371212 32 960 +309371216 2 960 +309371220 32 960 +309371224 2 960 +309371228 32 960 +309371232 2 960 +309371236 32 960 +309371240 2 960 +309371244 32 960 +309371248 2 960 +309371252 32 960 +309371256 2 960 +309371260 32 960 +309371264 2 960 +309371268 32 960 +309371272 2 960 +309371276 32 960 +309371280 2 960 +309371284 32 960 +309371288 2 960 +309371292 32 960 +309371296 2 960 +309371300 32 960 +309371304 2 960 +309371308 32 960 +309371312 2 960 +309374980 32 960 +309374984 2 960 +309374988 32 960 +309374992 2 960 +309374996 32 960 +309375000 2 960 +309375004 32 960 +309375008 2 960 +309375012 32 960 +309375016 2 960 +309375020 32 960 +309375024 2 960 +309375028 32 960 +309375032 2 960 +309375036 32 960 +309375040 2 960 +309375044 32 960 +309375048 2 960 +309375052 32 960 +309375056 2 960 +309375060 32 960 +309375064 2 960 +309375068 32 960 +309375072 2 960 +309375076 32 960 +309375080 2 960 +309375084 32 960 +309375088 2 960 +309375092 32 960 +309375096 2 960 +309375100 32 960 +309375104 2 960 +309375108 32 960 +309375112 2 960 +309375116 32 960 +309375120 2 960 +309375124 32 960 +309375128 2 960 +309375132 32 960 +309375136 2 960 +309375140 32 960 +309375144 2 960 +309375148 32 960 +309375152 2 960 +309375156 32 960 +309375160 2 960 +309375164 32 960 +309375168 2 960 +309375172 32 960 +309375176 2 960 +309375180 32 960 +309375184 2 960 +309375188 32 960 +309375192 2 960 +309375196 32 960 +309375200 2 960 +309375204 32 960 +309375208 2 960 +309375212 32 960 +309375216 2 960 +309375220 32 960 +309375224 2 960 +309375228 32 960 +309375232 2 960 +309375236 32 960 +309375240 2 960 +309375244 32 960 +309375248 2 960 +309375252 32 960 +309375256 2 960 +309375260 32 960 +309375264 2 960 +309375268 32 960 +309375272 2 960 +309375276 32 960 +309375280 2 960 +309375284 32 960 +309375288 2 960 +309375292 32 960 +309375296 2 960 +309375300 32 960 +309375304 2 960 +309375308 32 960 +309375312 2 960 +309375316 32 960 +309375320 2 960 +309375324 32 960 +309375328 2 960 +309375332 32 960 +309375336 2 960 +309375340 32 960 +309375344 2 960 +309375348 32 960 +309375352 2 960 +309375356 32 960 +309375360 2 960 +309375364 32 960 +309375368 2 960 +309375372 32 960 +309375376 2 960 +309375380 32 960 +309375384 2 960 +309375388 32 960 +309375392 2 960 +309375396 32 960 +309375400 2 960 +309375404 32 960 +309375408 2 960 +309379076 32 960 +309379080 2 960 +309379084 32 960 +309379088 2 960 +309379092 32 960 +309379096 2 960 +309379100 32 960 +309379104 2 960 +309379108 32 960 +309379112 2 960 +309379116 32 960 +309379120 2 960 +309379124 32 960 +309379128 2 960 +309379132 32 960 +309379136 2 960 +309379140 32 960 +309379144 2 960 +309379148 32 960 +309379152 2 960 +309379156 32 960 +309379160 2 960 +309379164 32 960 +309379168 2 960 +309379172 32 960 +309379176 2 960 +309379180 32 960 +309379184 2 960 +309379188 32 960 +309379192 2 960 +309379196 32 960 +309379200 2 960 +309379204 32 960 +309379208 2 960 +309379212 32 960 +309379216 2 960 +309379220 32 960 +309379224 2 960 +309379228 32 960 +309379232 2 960 +309379236 32 960 +309379240 2 960 +309379244 32 960 +309379248 2 960 +309379252 32 960 +309379256 2 960 +309379260 32 960 +309379264 2 960 +309379268 32 960 +309379272 2 960 +309379276 32 960 +309379280 2 960 +309379284 32 960 +309379288 2 960 +309379292 32 960 +309379296 2 960 +309379300 32 960 +309379304 2 960 +309379308 32 960 +309379312 2 960 +309379316 32 960 +309379320 2 960 +309379324 32 960 +309379328 2 960 +309379332 32 960 +309379336 2 960 +309379340 32 960 +309379344 2 960 +309379348 32 960 +309379352 2 960 +309379356 32 960 +309379360 2 960 +309379364 32 960 +309379368 2 960 +309379372 32 960 +309379376 2 960 +309379380 32 960 +309379384 2 960 +309379388 32 960 +309379392 2 960 +309379396 32 960 +309379400 2 960 +309379404 32 960 +309379408 2 960 +309379412 32 960 +309379416 2 960 +309379420 32 960 +309379424 2 960 +309379428 32 960 +309379432 2 960 +309379436 32 960 +309379440 2 960 +309379444 32 960 +309379448 2 960 +309379452 32 960 +309379456 2 960 +309379460 32 960 +309379464 2 960 +309379468 32 960 +309379472 2 960 +309379476 32 960 +309379480 2 960 +309379484 32 960 +309379488 2 960 +309379492 32 960 +309379496 2 960 +309379500 32 960 +309379504 2 960 +309383172 32 960 +309383176 2 960 +309383180 32 960 +309383184 2 960 +309383188 32 960 +309383192 2 960 +309383196 32 960 +309383200 2 960 +309383204 32 960 +309383208 2 960 +309383212 32 960 +309383216 2 960 +309383220 32 960 +309383224 2 960 +309383228 32 960 +309383232 2 960 +309383236 32 960 +309383240 2 960 +309383244 32 960 +309383248 2 960 +309383252 32 960 +309383256 2 960 +309383260 32 960 +309383264 2 960 +309383268 32 960 +309383272 2 960 +309383276 32 960 +309383280 2 960 +309383284 32 960 +309383288 2 960 +309383292 32 960 +309383296 2 960 +309383300 32 960 +309383304 2 960 +309383308 32 960 +309383312 2 960 +309383316 32 960 +309383320 2 960 +309383324 32 960 +309383328 2 960 +309383332 32 960 +309383336 2 960 +309383340 32 960 +309383344 2 960 +309383348 32 960 +309383352 2 960 +309383356 32 960 +309383360 2 960 +309383364 32 960 +309383368 2 960 +309383372 32 960 +309383376 2 960 +309383380 32 960 +309383384 2 960 +309383388 32 960 +309383392 2 960 +309383396 32 960 +309383400 2 960 +309383404 32 960 +309383408 2 960 +309383412 32 960 +309383416 2 960 +309383420 32 960 +309383424 2 960 +309383428 32 960 +309383432 2 960 +309383436 32 960 +309383440 2 960 +309383444 32 960 +309383448 2 960 +309383452 32 960 +309383456 2 960 +309383460 32 960 +309383464 2 960 +309383468 32 960 +309383472 2 960 +309383476 32 960 +309383480 2 960 +309383484 32 960 +309383488 2 960 +309383492 32 960 +309383496 2 960 +309383500 32 960 +309383504 2 960 +309383508 32 960 +309383512 2 960 +309383516 32 960 +309383520 2 960 +309383524 32 960 +309383528 2 960 +309383532 32 960 +309383536 2 960 +309383540 32 960 +309383544 2 960 +309383548 32 960 +309383552 2 960 +309383556 32 960 +309383560 2 960 +309383564 32 960 +309383568 2 960 +309383572 32 960 +309383576 2 960 +309383580 32 960 +309383584 2 960 +309383588 32 960 +309383592 2 960 +309383596 32 960 +309383600 2 960 +309387268 32 960 +309387272 2 960 +309387276 32 960 +309387280 2 960 +309387284 32 960 +309387288 2 960 +309387292 32 960 +309387296 2 960 +309387300 32 960 +309387304 2 960 +309387308 32 960 +309387312 2 960 +309387316 32 960 +309387320 2 960 +309387324 32 960 +309387328 2 960 +309387332 32 960 +309387336 2 960 +309387340 32 960 +309387344 2 960 +309387348 32 960 +309387352 2 960 +309387356 32 960 +309387360 2 960 +309387364 32 960 +309387368 2 960 +309387372 32 960 +309387376 2 960 +309387380 32 960 +309387384 2 960 +309387388 32 960 +309387392 2 960 +309387396 32 960 +309387400 2 960 +309387404 32 960 +309387408 2 960 +309387412 32 960 +309387416 2 960 +309387420 32 960 +309387424 2 960 +309387428 32 960 +309387432 2 960 +309387436 32 960 +309387440 2 960 +309387444 32 960 +309387448 2 960 +309387452 32 960 +309387456 2 960 +309387460 32 960 +309387464 2 960 +309387468 32 960 +309387472 2 960 +309387476 32 960 +309387480 2 960 +309387484 32 960 +309387488 2 960 +309387492 32 960 +309387496 2 960 +309387500 32 960 +309387504 2 960 +309387508 32 960 +309387512 2 960 +309387516 32 960 +309387520 2 960 +309387524 32 960 +309387528 2 960 +309387532 32 960 +309387536 2 960 +309387540 32 960 +309387544 2 960 +309387548 32 960 +309387552 2 960 +309387556 32 960 +309387560 2 960 +309387564 32 960 +309387568 2 960 +309387572 32 960 +309387576 2 960 +309387580 32 960 +309387584 2 960 +309387588 32 960 +309387592 2 960 +309387596 32 960 +309387600 2 960 +309387604 32 960 +309387608 2 960 +309387612 32 960 +309387616 2 960 +309387620 32 960 +309387624 2 960 +309387628 32 960 +309387632 2 960 +309387636 32 960 +309387640 2 960 +309387644 32 960 +309387648 2 960 +309387652 32 960 +309387656 2 960 +309387660 32 960 +309387664 2 960 +309387668 32 960 +309387672 2 960 +309387676 32 960 +309387680 2 960 +309387684 32 960 +309387688 2 960 +309387692 32 960 +309387696 2 960 +309391364 32 960 +309391368 2 960 +309391372 32 960 +309391376 2 960 +309391380 32 960 +309391384 2 960 +309391388 32 960 +309391392 2 960 +309391396 32 960 +309391400 2 960 +309391404 32 960 +309391408 2 960 +309391412 32 960 +309391416 2 960 +309391420 32 960 +309391424 2 960 +309391428 32 960 +309391432 2 960 +309391436 32 960 +309391440 2 960 +309391444 32 960 +309391448 2 960 +309391452 32 960 +309391456 2 960 +309391460 32 960 +309391464 2 960 +309391468 32 960 +309391472 2 960 +309391476 32 960 +309391480 2 960 +309391484 32 960 +309391488 2 960 +309391492 32 960 +309391496 2 960 +309391500 32 960 +309391504 2 960 +309391508 32 960 +309391512 2 960 +309391516 32 960 +309391520 2 960 +309391524 32 960 +309391528 2 960 +309391532 32 960 +309391536 2 960 +309391540 32 960 +309391544 2 960 +309391548 32 960 +309391552 2 960 +309391556 32 960 +309391560 2 960 +309391564 32 960 +309391568 2 960 +309391572 32 960 +309391576 2 960 +309391580 32 960 +309391584 2 960 +309391588 32 960 +309391592 2 960 +309391596 32 960 +309391600 2 960 +309391604 32 960 +309391608 2 960 +309391612 32 960 +309391616 2 960 +309391620 32 960 +309391624 2 960 +309391628 32 960 +309391632 2 960 +309391636 32 960 +309391640 2 960 +309391644 32 960 +309391648 2 960 +309391652 32 960 +309391656 2 960 +309391660 32 960 +309391664 2 960 +309391668 32 960 +309391672 2 960 +309391676 32 960 +309391680 2 960 +309391684 32 960 +309391688 2 960 +309391692 32 960 +309391696 2 960 +309391700 32 960 +309391704 2 960 +309391708 32 960 +309391712 2 960 +309391716 32 960 +309391720 2 960 +309391724 32 960 +309391728 2 960 +309391732 32 960 +309391736 2 960 +309391740 32 960 +309391744 2 960 +309391748 32 960 +309391752 2 960 +309391756 32 960 +309391760 2 960 +309391764 32 960 +309391768 2 960 +309391772 32 960 +309391776 2 960 +309391780 32 960 +309391784 2 960 +309391788 32 960 +309391792 2 960 +309395460 32 960 +309395464 2 960 +309395468 32 960 +309395472 2 960 +309395476 32 960 +309395480 2 960 +309395484 32 960 +309395488 2 960 +309395492 32 960 +309395496 2 960 +309395500 32 960 +309395504 2 960 +309395508 32 960 +309395512 2 960 +309395516 32 960 +309395520 2 960 +309395524 32 960 +309395528 2 960 +309395532 32 960 +309395536 2 960 +309395540 32 960 +309395544 2 960 +309395548 32 960 +309395552 2 960 +309395556 32 960 +309395560 2 960 +309395564 32 960 +309395568 2 960 +309395572 32 960 +309395576 2 960 +309395580 32 960 +309395584 2 960 +309395588 32 960 +309395592 2 960 +309395596 32 960 +309395600 2 960 +309395604 32 960 +309395608 2 960 +309395612 32 960 +309395616 2 960 +309395620 32 960 +309395624 2 960 +309395628 32 960 +309395632 2 960 +309395636 32 960 +309395640 2 960 +309395644 32 960 +309395648 2 960 +309395652 32 960 +309395656 2 960 +309395660 32 960 +309395664 2 960 +309395668 32 960 +309395672 2 960 +309395676 32 960 +309395680 2 960 +309395684 32 960 +309395688 2 960 +309395692 32 960 +309395696 2 960 +309395700 32 960 +309395704 2 960 +309395708 32 960 +309395712 2 960 +309395716 32 960 +309395720 2 960 +309395724 32 960 +309395728 2 960 +309395732 32 960 +309395736 2 960 +309395740 32 960 +309395744 2 960 +309395748 32 960 +309395752 2 960 +309395756 32 960 +309395760 2 960 +309395764 32 960 +309395768 2 960 +309395772 32 960 +309395776 2 960 +309395780 32 960 +309395784 2 960 +309395788 32 960 +309395792 2 960 +309395796 32 960 +309395800 2 960 +309395804 32 960 +309395808 2 960 +309395812 32 960 +309395816 2 960 +309395820 32 960 +309395824 2 960 +309395828 32 960 +309395832 2 960 +309395836 32 960 +309395840 2 960 +309395844 32 960 +309395848 2 960 +309395852 32 960 +309395856 2 960 +309395860 32 960 +309395864 2 960 +309395868 32 960 +309395872 2 960 +309395876 32 960 +309395880 2 960 +309395884 32 960 +309395888 2 960 +309399556 32 960 +309399560 2 960 +309399564 32 960 +309399568 2 960 +309399572 32 960 +309399576 2 960 +309399580 32 960 +309399584 2 960 +309399588 32 960 +309399592 2 960 +309399596 32 960 +309399600 2 960 +309399604 32 960 +309399608 2 960 +309399612 32 960 +309399616 2 960 +309399620 32 960 +309399624 2 960 +309399628 32 960 +309399632 2 960 +309399636 32 960 +309399640 2 960 +309399644 32 960 +309399648 2 960 +309399652 32 960 +309399656 2 960 +309399660 32 960 +309399664 2 960 +309399668 32 960 +309399672 2 960 +309399676 32 960 +309399680 2 960 +309399684 32 960 +309399688 2 960 +309399692 32 960 +309399696 2 960 +309399700 32 960 +309399704 2 960 +309399708 32 960 +309399712 2 960 +309399716 32 960 +309399720 2 960 +309399724 32 960 +309399728 2 960 +309399732 32 960 +309399736 2 960 +309399740 32 960 +309399744 2 960 +309399748 32 960 +309399752 2 960 +309399756 32 960 +309399760 2 960 +309399764 32 960 +309399768 2 960 +309399772 32 960 +309399776 2 960 +309399780 32 960 +309399784 2 960 +309399788 32 960 +309399792 2 960 +309399796 32 960 +309399800 2 960 +309399804 32 960 +309399808 2 960 +309399812 32 960 +309399816 2 960 +309399820 32 960 +309399824 2 960 +309399828 32 960 +309399832 2 960 +309399836 32 960 +309399840 2 960 +309399844 32 960 +309399848 2 960 +309399852 32 960 +309399856 2 960 +309399860 32 960 +309399864 2 960 +309399868 32 960 +309399872 2 960 +309399876 32 960 +309399880 2 960 +309399884 32 960 +309399888 2 960 +309399892 32 960 +309399896 2 960 +309399900 32 960 +309399904 2 960 +309399908 32 960 +309399912 2 960 +309399916 32 960 +309399920 2 960 +309399924 32 960 +309399928 2 960 +309399932 32 960 +309399936 2 960 +309399940 32 960 +309399944 2 960 +309399948 32 960 +309399952 2 960 +309399956 32 960 +309399960 2 960 +309399964 32 960 +309399968 2 960 +309399972 32 960 +309399976 2 960 +309399980 32 960 +309399984 2 960 +309403652 32 960 +309403656 2 960 +309403660 32 960 +309403664 2 960 +309403668 32 960 +309403672 2 960 +309403676 32 960 +309403680 2 960 +309403684 32 960 +309403688 2 960 +309403692 32 960 +309403696 2 960 +309403700 32 960 +309403704 2 960 +309403708 32 960 +309403712 2 960 +309403716 32 960 +309403720 2 960 +309403724 32 960 +309403728 2 960 +309403732 32 960 +309403736 2 960 +309403740 32 960 +309403744 2 960 +309403748 32 960 +309403752 2 960 +309403756 32 960 +309403760 2 960 +309403764 32 960 +309403768 2 960 +309403772 32 960 +309403776 2 960 +309403780 32 960 +309403784 2 960 +309403788 32 960 +309403792 2 960 +309403796 32 960 +309403800 2 960 +309403804 32 960 +309403808 2 960 +309403812 32 960 +309403816 2 960 +309403820 32 960 +309403824 2 960 +309403828 32 960 +309403832 2 960 +309403836 32 960 +309403840 2 960 +309403844 32 960 +309403848 2 960 +309403852 32 960 +309403856 2 960 +309403860 32 960 +309403864 2 960 +309403868 32 960 +309403872 2 960 +309403876 32 960 +309403880 2 960 +309403884 32 960 +309403888 2 960 +309403892 32 960 +309403896 2 960 +309403900 32 960 +309403904 2 960 +309403908 32 960 +309403912 2 960 +309403916 32 960 +309403920 2 960 +309403924 32 960 +309403928 2 960 +309403932 32 960 +309403936 2 960 +309403940 32 960 +309403944 2 960 +309403948 32 960 +309403952 2 960 +309403956 32 960 +309403960 2 960 +309403964 32 960 +309403968 2 960 +309403972 32 960 +309403976 2 960 +309403980 32 960 +309403984 2 960 +309403988 32 960 +309403992 2 960 +309403996 32 960 +309404000 2 960 +309404004 32 960 +309404008 2 960 +309404012 32 960 +309404016 2 960 +309404020 32 960 +309404024 2 960 +309404028 32 960 +309404032 2 960 +309404036 32 960 +309404040 2 960 +309404044 32 960 +309404048 2 960 +309404052 32 960 +309404056 2 960 +309404060 32 960 +309404064 2 960 +309404068 32 960 +309404072 2 960 +309404076 32 960 +309404080 2 960 +309407748 32 960 +309407752 2 960 +309407756 32 960 +309407760 2 960 +309407764 32 960 +309407768 2 960 +309407772 32 960 +309407776 2 960 +309407780 32 960 +309407784 2 960 +309407788 32 960 +309407792 2 960 +309407796 32 960 +309407800 2 960 +309407804 32 960 +309407808 2 960 +309407812 32 960 +309407816 2 960 +309407820 32 960 +309407824 2 960 +309407828 32 960 +309407832 2 960 +309407836 32 960 +309407840 2 960 +309407844 32 960 +309407848 2 960 +309407852 32 960 +309407856 2 960 +309407860 32 960 +309407864 2 960 +309407868 32 960 +309407872 2 960 +309407876 32 960 +309407880 2 960 +309407884 32 960 +309407888 2 960 +309407892 32 960 +309407896 2 960 +309407900 32 960 +309407904 2 960 +309407908 32 960 +309407912 2 960 +309407916 32 960 +309407920 2 960 +309407924 32 960 +309407928 2 960 +309407932 32 960 +309407936 2 960 +309407940 32 960 +309407944 2 960 +309407948 32 960 +309407952 2 960 +309407956 32 960 +309407960 2 960 +309407964 32 960 +309407968 2 960 +309407972 32 960 +309407976 2 960 +309407980 32 960 +309407984 2 960 +309407988 32 960 +309407992 2 960 +309407996 32 960 +309408000 2 960 +309408004 32 960 +309408008 2 960 +309408012 32 960 +309408016 2 960 +309408020 32 960 +309408024 2 960 +309408028 32 960 +309408032 2 960 +309408036 32 960 +309408040 2 960 +309408044 32 960 +309408048 2 960 +309408052 32 960 +309408056 2 960 +309408060 32 960 +309408064 2 960 +309408068 32 960 +309408072 2 960 +309408076 32 960 +309408080 2 960 +309408084 32 960 +309408088 2 960 +309408092 32 960 +309408096 2 960 +309408100 32 960 +309408104 2 960 +309408108 32 960 +309408112 2 960 +309408116 32 960 +309408120 2 960 +309408124 32 960 +309408128 2 960 +309408132 32 960 +309408136 2 960 +309408140 32 960 +309408144 2 960 +309408148 32 960 +309408152 2 960 +309408156 32 960 +309408160 2 960 +309408164 32 960 +309408168 2 960 +309408172 32 960 +309408176 2 960 +309411844 32 960 +309411848 2 960 +309411852 32 960 +309411856 2 960 +309411860 32 960 +309411864 2 960 +309411868 32 960 +309411872 2 960 +309411876 32 960 +309411880 2 960 +309411884 32 960 +309411888 2 960 +309411892 32 960 +309411896 2 960 +309411900 32 960 +309411904 2 960 +309411908 32 960 +309411912 2 960 +309411916 32 960 +309411920 2 960 +309411924 32 960 +309411928 2 960 +309411932 32 960 +309411936 2 960 +309411940 32 960 +309411944 2 960 +309411948 32 960 +309411952 2 960 +309411956 32 960 +309411960 2 960 +309411964 32 960 +309411968 2 960 +309411972 32 960 +309411976 2 960 +309411980 32 960 +309411984 2 960 +309411988 32 960 +309411992 2 960 +309411996 32 960 +309412000 2 960 +309412004 32 960 +309412008 2 960 +309412012 32 960 +309412016 2 960 +309412020 32 960 +309412024 2 960 +309412028 32 960 +309412032 2 960 +309412036 32 960 +309412040 2 960 +309412044 32 960 +309412048 2 960 +309412052 32 960 +309412056 2 960 +309412060 32 960 +309412064 2 960 +309412068 32 960 +309412072 2 960 +309412076 32 960 +309412080 2 960 +309412084 32 960 +309412088 2 960 +309412092 32 960 +309412096 2 960 +309412100 32 960 +309412104 2 960 +309412108 32 960 +309412112 2 960 +309412116 32 960 +309412120 2 960 +309412124 32 960 +309412128 2 960 +309412132 32 960 +309412136 2 960 +309412140 32 960 +309412144 2 960 +309412148 32 960 +309412152 2 960 +309412156 32 960 +309412160 2 960 +309412164 32 960 +309412168 2 960 +309412172 32 960 +309412176 2 960 +309412180 32 960 +309412184 2 960 +309412188 32 960 +309412192 2 960 +309412196 32 960 +309412200 2 960 +309412204 32 960 +309412208 2 960 +309412212 32 960 +309412216 2 960 +309412220 32 960 +309412224 2 960 +309412228 32 960 +309412232 2 960 +309412236 32 960 +309412240 2 960 +309412244 32 960 +309412248 2 960 +309412252 32 960 +309412256 2 960 +309412260 32 960 +309412264 2 960 +309412268 32 960 +309412272 2 960 +309415940 32 960 +309415944 2 960 +309415948 32 960 +309415952 2 960 +309415956 32 960 +309415960 2 960 +309415964 32 960 +309415968 2 960 +309415972 32 960 +309415976 2 960 +309415980 32 960 +309415984 2 960 +309415988 32 960 +309415992 2 960 +309415996 32 960 +309416000 2 960 +309416004 32 960 +309416008 2 960 +309416012 32 960 +309416016 2 960 +309416020 32 960 +309416024 2 960 +309416028 32 960 +309416032 2 960 +309416036 32 960 +309416040 2 960 +309416044 32 960 +309416048 2 960 +309416052 32 960 +309416056 2 960 +309416060 32 960 +309416064 2 960 +309416068 32 960 +309416072 2 960 +309416076 32 960 +309416080 2 960 +309416084 32 960 +309416088 2 960 +309416092 32 960 +309416096 2 960 +309416100 32 960 +309416104 2 960 +309416108 32 960 +309416112 2 960 +309416116 32 960 +309416120 2 960 +309416124 32 960 +309416128 2 960 +309416132 32 960 +309416136 2 960 +309416140 32 960 +309416144 2 960 +309416148 32 960 +309416152 2 960 +309416156 32 960 +309416160 2 960 +309416164 32 960 +309416168 2 960 +309416172 32 960 +309416176 2 960 +309416180 32 960 +309416184 2 960 +309416188 32 960 +309416192 2 960 +309416196 32 960 +309416200 2 960 +309416204 32 960 +309416208 2 960 +309416212 32 960 +309416216 2 960 +309416220 32 960 +309416224 2 960 +309416228 32 960 +309416232 2 960 +309416236 32 960 +309416240 2 960 +309416244 32 960 +309416248 2 960 +309416252 32 960 +309416256 2 960 +309416260 32 960 +309416264 2 960 +309416268 32 960 +309416272 2 960 +309416276 32 960 +309416280 2 960 +309416284 32 960 +309416288 2 960 +309416292 32 960 +309416296 2 960 +309416300 32 960 +309416304 2 960 +309416308 32 960 +309416312 2 960 +309416316 32 960 +309416320 2 960 +309416324 32 960 +309416328 2 960 +309416332 32 960 +309416336 2 960 +309416340 32 960 +309416344 2 960 +309416348 32 960 +309416352 2 960 +309416356 32 960 +309416360 2 960 +309416364 32 960 +309416368 2 960 +309420036 32 960 +309420040 2 960 +309420044 32 960 +309420048 2 960 +309420052 32 960 +309420056 2 960 +309420060 32 960 +309420064 2 960 +309420068 32 960 +309420072 2 960 +309420076 32 960 +309420080 2 960 +309420084 32 960 +309420088 2 960 +309420092 32 960 +309420096 2 960 +309420100 32 960 +309420104 2 960 +309420108 32 960 +309420112 2 960 +309420116 32 960 +309420120 2 960 +309420124 32 960 +309420128 2 960 +309420132 32 960 +309420136 2 960 +309420140 32 960 +309420144 2 960 +309420148 32 960 +309420152 2 960 +309420156 32 960 +309420160 2 960 +309420164 32 960 +309420168 2 960 +309420172 32 960 +309420176 2 960 +309420180 32 960 +309420184 2 960 +309420188 32 960 +309420192 2 960 +309420196 32 960 +309420200 2 960 +309420204 32 960 +309420208 2 960 +309420212 32 960 +309420216 2 960 +309420220 32 960 +309420224 2 960 +309420228 32 960 +309420232 2 960 +309420236 32 960 +309420240 2 960 +309420244 32 960 +309420248 2 960 +309420252 32 960 +309420256 2 960 +309420260 32 960 +309420264 2 960 +309420268 32 960 +309420272 2 960 +309420276 32 960 +309420280 2 960 +309420284 32 960 +309420288 2 960 +309420292 32 960 +309420296 2 960 +309420300 32 960 +309420304 2 960 +309420308 32 960 +309420312 2 960 +309420316 32 960 +309420320 2 960 +309420324 32 960 +309420328 2 960 +309420332 32 960 +309420336 2 960 +309420340 32 960 +309420344 2 960 +309420348 32 960 +309420352 2 960 +309420356 32 960 +309420360 2 960 +309420364 32 960 +309420368 2 960 +309420372 32 960 +309420376 2 960 +309420380 32 960 +309420384 2 960 +309420388 32 960 +309420392 2 960 +309420396 32 960 +309420400 2 960 +309420404 32 960 +309420408 2 960 +309420412 32 960 +309420416 2 960 +309420420 32 960 +309420424 2 960 +309420428 32 960 +309420432 2 960 +309420436 32 960 +309420440 2 960 +309420444 32 960 +309420448 2 960 +309420452 32 960 +309420456 2 960 +309420460 32 960 +309420464 2 960 +309424132 32 960 +309424136 2 960 +309424140 32 960 +309424144 2 960 +309424148 32 960 +309424152 2 960 +309424156 32 960 +309424160 2 960 +309424164 32 960 +309424168 2 960 +309424172 32 960 +309424176 2 960 +309424180 32 960 +309424184 2 960 +309424188 32 960 +309424192 2 960 +309424196 32 960 +309424200 2 960 +309424204 32 960 +309424208 2 960 +309424212 32 960 +309424216 2 960 +309424220 32 960 +309424224 2 960 +309424228 32 960 +309424232 2 960 +309424236 32 960 +309424240 2 960 +309424244 32 960 +309424248 2 960 +309424252 32 960 +309424256 2 960 +309424260 32 960 +309424264 2 960 +309424268 32 960 +309424272 2 960 +309424276 32 960 +309424280 2 960 +309424284 32 960 +309424288 2 960 +309424292 32 960 +309424296 2 960 +309424300 32 960 +309424304 2 960 +309424308 32 960 +309424312 2 960 +309424316 32 960 +309424320 2 960 +309424324 32 960 +309424328 2 960 +309424332 32 960 +309424336 2 960 +309424340 32 960 +309424344 2 960 +309424348 32 960 +309424352 2 960 +309424356 32 960 +309424360 2 960 +309424364 32 960 +309424368 2 960 +309424372 32 960 +309424376 2 960 +309424380 32 960 +309424384 2 960 +309424388 32 960 +309424392 2 960 +309424396 32 960 +309424400 2 960 +309424404 32 960 +309424408 2 960 +309424412 32 960 +309424416 2 960 +309424420 32 960 +309424424 2 960 +309424428 32 960 +309424432 2 960 +309424436 32 960 +309424440 2 960 +309424444 32 960 +309424448 2 960 +309424452 32 960 +309424456 2 960 +309424460 32 960 +309424464 2 960 +309424468 32 960 +309424472 2 960 +309424476 32 960 +309424480 2 960 +309424484 32 960 +309424488 2 960 +309424492 32 960 +309424496 2 960 +309424500 32 960 +309424504 2 960 +309424508 32 960 +309424512 2 960 +309424516 32 960 +309424520 2 960 +309424524 32 960 +309424528 2 960 +309424532 32 960 +309424536 2 960 +309424540 32 960 +309424544 2 960 +309424548 32 960 +309424552 2 960 +309424556 32 960 +309424560 2 960 +309428228 32 960 +309428232 2 960 +309428236 32 960 +309428240 2 960 +309428244 32 960 +309428248 2 960 +309428252 32 960 +309428256 2 960 +309428260 32 960 +309428264 2 960 +309428268 32 960 +309428272 2 960 +309428276 32 960 +309428280 2 960 +309428284 32 960 +309428288 2 960 +309428292 32 960 +309428296 2 960 +309428300 32 960 +309428304 2 960 +309428308 32 960 +309428312 2 960 +309428316 32 960 +309428320 2 960 +309428324 32 960 +309428328 2 960 +309428332 32 960 +309428336 2 960 +309428340 32 960 +309428344 2 960 +309428348 32 960 +309428352 2 960 +309428356 32 960 +309428360 2 960 +309428364 32 960 +309428368 2 960 +309428372 32 960 +309428376 2 960 +309428380 32 960 +309428384 2 960 +309428388 32 960 +309428392 2 960 +309428396 32 960 +309428400 2 960 +309428404 32 960 +309428408 2 960 +309428412 32 960 +309428416 2 960 +309428420 32 960 +309428424 2 960 +309428428 32 960 +309428432 2 960 +309428436 32 960 +309428440 2 960 +309428444 32 960 +309428448 2 960 +309428452 32 960 +309428456 2 960 +309428460 32 960 +309428464 2 960 +309428468 32 960 +309428472 2 960 +309428476 32 960 +309428480 2 960 +309428484 32 960 +309428488 2 960 +309428492 32 960 +309428496 2 960 +309428500 32 960 +309428504 2 960 +309428508 32 960 +309428512 2 960 +309428516 32 960 +309428520 2 960 +309428524 32 960 +309428528 2 960 +309428532 32 960 +309428536 2 960 +309428540 32 960 +309428544 2 960 +309428548 32 960 +309428552 2 960 +309428556 32 960 +309428560 2 960 +309428564 32 960 +309428568 2 960 +309428572 32 960 +309428576 2 960 +309428580 32 960 +309428584 2 960 +309428588 32 960 +309428592 2 960 +309428596 32 960 +309428600 2 960 +309428604 32 960 +309428608 2 960 +309428612 32 960 +309428616 2 960 +309428620 32 960 +309428624 2 960 +309428628 32 960 +309428632 2 960 +309428636 32 960 +309428640 2 960 +309428644 32 960 +309428648 2 960 +309428652 32 960 +309428656 2 960 +309432324 32 960 +309432328 2 960 +309432332 32 960 +309432336 2 960 +309432340 32 960 +309432344 2 960 +309432348 32 960 +309432352 2 960 +309432356 32 960 +309432360 2 960 +309432364 32 960 +309432368 2 960 +309432372 32 960 +309432376 2 960 +309432380 32 960 +309432384 2 960 +309432388 32 960 +309432392 2 960 +309432396 32 960 +309432400 2 960 +309432404 32 960 +309432408 2 960 +309432412 32 960 +309432416 2 960 +309432420 32 960 +309432424 2 960 +309432428 32 960 +309432432 2 960 +309432436 32 960 +309432440 2 960 +309432444 32 960 +309432448 2 960 +309432452 32 960 +309432456 2 960 +309432460 32 960 +309432464 2 960 +309432468 32 960 +309432472 2 960 +309432476 32 960 +309432480 2 960 +309432484 32 960 +309432488 2 960 +309432492 32 960 +309432496 2 960 +309432500 32 960 +309432504 2 960 +309432508 32 960 +309432512 2 960 +309432516 32 960 +309432520 2 960 +309432524 32 960 +309432528 2 960 +309432532 32 960 +309432536 2 960 +309432540 32 960 +309432544 2 960 +309432548 32 960 +309432552 2 960 +309432556 32 960 +309432560 2 960 +309432564 32 960 +309432568 2 960 +309432572 32 960 +309432576 2 960 +309432580 32 960 +309432584 2 960 +309432588 32 960 +309432592 2 960 +309432596 32 960 +309432600 2 960 +309432604 32 960 +309432608 2 960 +309432612 32 960 +309432616 2 960 +309432620 32 960 +309432624 2 960 +309432628 32 960 +309432632 2 960 +309432636 32 960 +309432640 2 960 +309432644 32 960 +309432648 2 960 +309432652 32 960 +309432656 2 960 +309432660 32 960 +309432664 2 960 +309432668 32 960 +309432672 2 960 +309432676 32 960 +309432680 2 960 +309432684 32 960 +309432688 2 960 +309432692 32 960 +309432696 2 960 +309432700 32 960 +309432704 2 960 +309432708 32 960 +309432712 2 960 +309432716 32 960 +309432720 2 960 +309432724 32 960 +309432728 2 960 +309432732 32 960 +309432736 2 960 +309432740 32 960 +309432744 2 960 +309432748 32 960 +309432752 2 960 +309436420 32 960 +309436424 2 960 +309436428 32 960 +309436432 2 960 +309436436 32 960 +309436440 2 960 +309436444 32 960 +309436448 2 960 +309436452 32 960 +309436456 2 960 +309436460 32 960 +309436464 2 960 +309436468 32 960 +309436472 2 960 +309436476 32 960 +309436480 2 960 +309436484 32 960 +309436488 2 960 +309436492 32 960 +309436496 2 960 +309436500 32 960 +309436504 2 960 +309436508 32 960 +309436512 2 960 +309436516 32 960 +309436520 2 960 +309436524 32 960 +309436528 2 960 +309436532 32 960 +309436536 2 960 +309436540 32 960 +309436544 2 960 +309436548 32 960 +309436552 2 960 +309436556 32 960 +309436560 2 960 +309436564 32 960 +309436568 2 960 +309436572 32 960 +309436576 2 960 +309436580 32 960 +309436584 2 960 +309436588 32 960 +309436592 2 960 +309436596 32 960 +309436600 2 960 +309436604 32 960 +309436608 2 960 +309436612 32 960 +309436616 2 960 +309436620 32 960 +309436624 2 960 +309436628 32 960 +309436632 2 960 +309436636 32 960 +309436640 2 960 +309436644 32 960 +309436648 2 960 +309436652 32 960 +309436656 2 960 +309436660 32 960 +309436664 2 960 +309436668 32 960 +309436672 2 960 +309436676 32 960 +309436680 2 960 +309436684 32 960 +309436688 2 960 +309436692 32 960 +309436696 2 960 +309436700 32 960 +309436704 2 960 +309436708 32 960 +309436712 2 960 +309436716 32 960 +309436720 2 960 +309436724 32 960 +309436728 2 960 +309436732 32 960 +309436736 2 960 +309436740 32 960 +309436744 2 960 +309436748 32 960 +309436752 2 960 +309436756 32 960 +309436760 2 960 +309436764 32 960 +309436768 2 960 +309436772 32 960 +309436776 2 960 +309436780 32 960 +309436784 2 960 +309436788 32 960 +309436792 2 960 +309436796 32 960 +309436800 2 960 +309436804 32 960 +309436808 2 960 +309436812 32 960 +309436816 2 960 +309436820 32 960 +309436824 2 960 +309436828 32 960 +309436832 2 960 +309436836 32 960 +309436840 2 960 +309436844 32 960 +309436848 2 960 +309440516 32 960 +309440520 2 960 +309440524 32 960 +309440528 2 960 +309440532 32 960 +309440536 2 960 +309440540 32 960 +309440544 2 960 +309440548 32 960 +309440552 2 960 +309440556 32 960 +309440560 2 960 +309440564 32 960 +309440568 2 960 +309440572 32 960 +309440576 2 960 +309440580 32 960 +309440584 2 960 +309440588 32 960 +309440592 2 960 +309440596 32 960 +309440600 2 960 +309440604 32 960 +309440608 2 960 +309440612 32 960 +309440616 2 960 +309440620 32 960 +309440624 2 960 +309440628 32 960 +309440632 2 960 +309440636 32 960 +309440640 2 960 +309440644 32 960 +309440648 2 960 +309440652 32 960 +309440656 2 960 +309440660 32 960 +309440664 2 960 +309440668 32 960 +309440672 2 960 +309440676 32 960 +309440680 2 960 +309440684 32 960 +309440688 2 960 +309440692 32 960 +309440696 2 960 +309440700 32 960 +309440704 2 960 +309440708 32 960 +309440712 2 960 +309440716 32 960 +309440720 2 960 +309440724 32 960 +309440728 2 960 +309440732 32 960 +309440736 2 960 +309440740 32 960 +309440744 2 960 +309440748 32 960 +309440752 2 960 +309440756 32 960 +309440760 2 960 +309440764 32 960 +309440768 2 960 +309440772 32 960 +309440776 2 960 +309440780 32 960 +309440784 2 960 +309440788 32 960 +309440792 2 960 +309440796 32 960 +309440800 2 960 +309440804 32 960 +309440808 2 960 +309440812 32 960 +309440816 2 960 +309440820 32 960 +309440824 2 960 +309440828 32 960 +309440832 2 960 +309440836 32 960 +309440840 2 960 +309440844 32 960 +309440848 2 960 +309440852 32 960 +309440856 2 960 +309440860 32 960 +309440864 2 960 +309440868 32 960 +309440872 2 960 +309440876 32 960 +309440880 2 960 +309440884 32 960 +309440888 2 960 +309440892 32 960 +309440896 2 960 +309440900 32 960 +309440904 2 960 +309440908 32 960 +309440912 2 960 +309440916 32 960 +309440920 2 960 +309440924 32 960 +309440928 2 960 +309440932 32 960 +309440936 2 960 +309440940 32 960 +309440944 2 960 +309444612 32 960 +309444616 2 960 +309444620 32 960 +309444624 2 960 +309444628 32 960 +309444632 2 960 +309444636 32 960 +309444640 2 960 +309444644 32 960 +309444648 2 960 +309444652 32 960 +309444656 2 960 +309444660 32 960 +309444664 2 960 +309444668 32 960 +309444672 2 960 +309444676 32 960 +309444680 2 960 +309444684 32 960 +309444688 2 960 +309444692 32 960 +309444696 2 960 +309444700 32 960 +309444704 2 960 +309444708 32 960 +309444712 2 960 +309444716 32 960 +309444720 2 960 +309444724 32 960 +309444728 2 960 +309444732 32 960 +309444736 2 960 +309444740 32 960 +309444744 2 960 +309444748 32 960 +309444752 2 960 +309444756 32 960 +309444760 2 960 +309444764 32 960 +309444768 2 960 +309444772 32 960 +309444776 2 960 +309444780 32 960 +309444784 2 960 +309444788 32 960 +309444792 2 960 +309444796 32 960 +309444800 2 960 +309444804 32 960 +309444808 2 960 +309444812 32 960 +309444816 2 960 +309444820 32 960 +309444824 2 960 +309444828 32 960 +309444832 2 960 +309444836 32 960 +309444840 2 960 +309444844 32 960 +309444848 2 960 +309444852 32 960 +309444856 2 960 +309444860 32 960 +309444864 2 960 +309444868 32 960 +309444872 2 960 +309444876 32 960 +309444880 2 960 +309444884 32 960 +309444888 2 960 +309444892 32 960 +309444896 2 960 +309444900 32 960 +309444904 2 960 +309444908 32 960 +309444912 2 960 +309444916 32 960 +309444920 2 960 +309444924 32 960 +309444928 2 960 +309444932 32 960 +309444936 2 960 +309444940 32 960 +309444944 2 960 +309444948 32 960 +309444952 2 960 +309444956 32 960 +309444960 2 960 +309444964 32 960 +309444968 2 960 +309444972 32 960 +309444976 2 960 +309444980 32 960 +309444984 2 960 +309444988 32 960 +309444992 2 960 +309444996 32 960 +309445000 2 960 +309445004 32 960 +309445008 2 960 +309445012 32 960 +309445016 2 960 +309445020 32 960 +309445024 2 960 +309445028 32 960 +309445032 2 960 +309445036 32 960 +309445040 2 960 +309448708 32 960 +309448712 2 960 +309448716 32 960 +309448720 2 960 +309448724 32 960 +309448728 2 960 +309448732 32 960 +309448736 2 960 +309448740 32 960 +309448744 2 960 +309448748 32 960 +309448752 2 960 +309448756 32 960 +309448760 2 960 +309448764 32 960 +309448768 2 960 +309448772 32 960 +309448776 2 960 +309448780 32 960 +309448784 2 960 +309448788 32 960 +309448792 2 960 +309448796 32 960 +309448800 2 960 +309448804 32 960 +309448808 2 960 +309448812 32 960 +309448816 2 960 +309448820 32 960 +309448824 2 960 +309448828 32 960 +309448832 2 960 +309448836 32 960 +309448840 2 960 +309448844 32 960 +309448848 2 960 +309448852 32 960 +309448856 2 960 +309448860 32 960 +309448864 2 960 +309448868 32 960 +309448872 2 960 +309448876 32 960 +309448880 2 960 +309448884 32 960 +309448888 2 960 +309448892 32 960 +309448896 2 960 +309448900 32 960 +309448904 2 960 +309448908 32 960 +309448912 2 960 +309448916 32 960 +309448920 2 960 +309448924 32 960 +309448928 2 960 +309448932 32 960 +309448936 2 960 +309448940 32 960 +309448944 2 960 +309448948 32 960 +309448952 2 960 +309448956 32 960 +309448960 2 960 +309448964 32 960 +309448968 2 960 +309448972 32 960 +309448976 2 960 +309448980 32 960 +309448984 2 960 +309448988 32 960 +309448992 2 960 +309448996 32 960 +309449000 2 960 +309449004 32 960 +309449008 2 960 +309449012 32 960 +309449016 2 960 +309449020 32 960 +309449024 2 960 +309449028 32 960 +309449032 2 960 +309449036 32 960 +309449040 2 960 +309449044 32 960 +309449048 2 960 +309449052 32 960 +309449056 2 960 +309449060 32 960 +309449064 2 960 +309449068 32 960 +309449072 2 960 +309449076 32 960 +309449080 2 960 +309449084 32 960 +309449088 2 960 +309449092 32 960 +309449096 2 960 +309449100 32 960 +309449104 2 960 +309449108 32 960 +309449112 2 960 +309449116 32 960 +309449120 2 960 +309449124 32 960 +309449128 2 960 +309449132 32 960 +309449136 2 960 +309452804 32 960 +309452808 2 960 +309452812 32 960 +309452816 2 960 +309452820 32 960 +309452824 2 960 +309452828 32 960 +309452832 2 960 +309452836 32 960 +309452840 2 960 +309452844 32 960 +309452848 2 960 +309452852 32 960 +309452856 2 960 +309452860 32 960 +309452864 2 960 +309452868 32 960 +309452872 2 960 +309452876 32 960 +309452880 2 960 +309452884 32 960 +309452888 2 960 +309452892 32 960 +309452896 2 960 +309452900 32 960 +309452904 2 960 +309452908 32 960 +309452912 2 960 +309452916 32 960 +309452920 2 960 +309452924 32 960 +309452928 2 960 +309452932 32 960 +309452936 2 960 +309452940 32 960 +309452944 2 960 +309452948 32 960 +309452952 2 960 +309452956 32 960 +309452960 2 960 +309452964 32 960 +309452968 2 960 +309452972 32 960 +309452976 2 960 +309452980 32 960 +309452984 2 960 +309452988 32 960 +309452992 2 960 +309452996 32 960 +309453000 2 960 +309453004 32 960 +309453008 2 960 +309453012 32 960 +309453016 2 960 +309453020 32 960 +309453024 2 960 +309453028 32 960 +309453032 2 960 +309453036 32 960 +309453040 2 960 +309453044 32 960 +309453048 2 960 +309453052 32 960 +309453056 2 960 +309453060 32 960 +309453064 2 960 +309453068 32 960 +309453072 2 960 +309453076 32 960 +309453080 2 960 +309453084 32 960 +309453088 2 960 +309453092 32 960 +309453096 2 960 +309453100 32 960 +309453104 2 960 +309453108 32 960 +309453112 2 960 +309453116 32 960 +309453120 2 960 +309453124 32 960 +309453128 2 960 +309453132 32 960 +309453136 2 960 +309453140 32 960 +309453144 2 960 +309453148 32 960 +309453152 2 960 +309453156 32 960 +309453160 2 960 +309453164 32 960 +309453168 2 960 +309453172 32 960 +309453176 2 960 +309453180 32 960 +309453184 2 960 +309453188 32 960 +309453192 2 960 +309453196 32 960 +309453200 2 960 +309453204 32 960 +309453208 2 960 +309453212 32 960 +309453216 2 960 +309453220 32 960 +309453224 2 960 +309453228 32 960 +309453232 2 960 +309456900 32 960 +309456904 2 960 +309456908 32 960 +309456912 2 960 +309456916 32 960 +309456920 2 960 +309456924 32 960 +309456928 2 960 +309456932 32 960 +309456936 2 960 +309456940 32 960 +309456944 2 960 +309456948 32 960 +309456952 2 960 +309456956 32 960 +309456960 2 960 +309456964 32 960 +309456968 2 960 +309456972 32 960 +309456976 2 960 +309456980 32 960 +309456984 2 960 +309456988 32 960 +309456992 2 960 +309456996 32 960 +309457000 2 960 +309457004 32 960 +309457008 2 960 +309457012 32 960 +309457016 2 960 +309457020 32 960 +309457024 2 960 +309457028 32 960 +309457032 2 960 +309457036 32 960 +309457040 2 960 +309457044 32 960 +309457048 2 960 +309457052 32 960 +309457056 2 960 +309457060 32 960 +309457064 2 960 +309457068 32 960 +309457072 2 960 +309457076 32 960 +309457080 2 960 +309457084 32 960 +309457088 2 960 +309457092 32 960 +309457096 2 960 +309457100 32 960 +309457104 2 960 +309457108 32 960 +309457112 2 960 +309457116 32 960 +309457120 2 960 +309457124 32 960 +309457128 2 960 +309457132 32 960 +309457136 2 960 +309457140 32 960 +309457144 2 960 +309457148 32 960 +309457152 2 960 +309457156 32 960 +309457160 2 960 +309457164 32 960 +309457168 2 960 +309457172 32 960 +309457176 2 960 +309457180 32 960 +309457184 2 960 +309457188 32 960 +309457192 2 960 +309457196 32 960 +309457200 2 960 +309457204 32 960 +309457208 2 960 +309457212 32 960 +309457216 2 960 +309457220 32 960 +309457224 2 960 +309457228 32 960 +309457232 2 960 +309457236 32 960 +309457240 2 960 +309457244 32 960 +309457248 2 960 +309457252 32 960 +309457256 2 960 +309457260 32 960 +309457264 2 960 +309457268 32 960 +309457272 2 960 +309457276 32 960 +309457280 2 960 +309457284 32 960 +309457288 2 960 +309457292 32 960 +309457296 2 960 +309457300 32 960 +309457304 2 960 +309457308 32 960 +309457312 2 960 +309457316 32 960 +309457320 2 960 +309457324 32 960 +309457328 2 960 +309460996 32 960 +309461000 2 960 +309461004 32 960 +309461008 2 960 +309461012 32 960 +309461016 2 960 +309461020 32 960 +309461024 2 960 +309461028 32 960 +309461032 2 960 +309461036 32 960 +309461040 2 960 +309461044 32 960 +309461048 2 960 +309461052 32 960 +309461056 2 960 +309461060 32 960 +309461064 2 960 +309461068 32 960 +309461072 2 960 +309461076 32 960 +309461080 2 960 +309461084 32 960 +309461088 2 960 +309461092 32 960 +309461096 2 960 +309461100 32 960 +309461104 2 960 +309461108 32 960 +309461112 2 960 +309461116 32 960 +309461120 2 960 +309461124 32 960 +309461128 2 960 +309461132 32 960 +309461136 2 960 +309461140 32 960 +309461144 2 960 +309461148 32 960 +309461152 2 960 +309461156 32 960 +309461160 2 960 +309461164 32 960 +309461168 2 960 +309461172 32 960 +309461176 2 960 +309461180 32 960 +309461184 2 960 +309461188 32 960 +309461192 2 960 +309461196 32 960 +309461200 2 960 +309461204 32 960 +309461208 2 960 +309461212 32 960 +309461216 2 960 +309461220 32 960 +309461224 2 960 +309461228 32 960 +309461232 2 960 +309461236 32 960 +309461240 2 960 +309461244 32 960 +309461248 2 960 +309461252 32 960 +309461256 2 960 +309461260 32 960 +309461264 2 960 +309461268 32 960 +309461272 2 960 +309461276 32 960 +309461280 2 960 +309461284 32 960 +309461288 2 960 +309461292 32 960 +309461296 2 960 +309461300 32 960 +309461304 2 960 +309461308 32 960 +309461312 2 960 +309461316 32 960 +309461320 2 960 +309461324 32 960 +309461328 2 960 +309461332 32 960 +309461336 2 960 +309461340 32 960 +309461344 2 960 +309461348 32 960 +309461352 2 960 +309461356 32 960 +309461360 2 960 +309461364 32 960 +309461368 2 960 +309461372 32 960 +309461376 2 960 +309461380 32 960 +309461384 2 960 +309461388 32 960 +309461392 2 960 +309461396 32 960 +309461400 2 960 +309461404 32 960 +309461408 2 960 +309461412 32 960 +309461416 2 960 +309461420 32 960 +309461424 2 960 +309465092 32 960 +309465096 2 960 +309465100 32 960 +309465104 2 960 +309465108 32 960 +309465112 2 960 +309465116 32 960 +309465120 2 960 +309465124 32 960 +309465128 2 960 +309465132 32 960 +309465136 2 960 +309465140 32 960 +309465144 2 960 +309465148 32 960 +309465152 2 960 +309465156 32 960 +309465160 2 960 +309465164 32 960 +309465168 2 960 +309465172 32 960 +309465176 2 960 +309465180 32 960 +309465184 2 960 +309465188 32 960 +309465192 2 960 +309465196 32 960 +309465200 2 960 +309465204 32 960 +309465208 2 960 +309465212 32 960 +309465216 2 960 +309465220 32 960 +309465224 2 960 +309465228 32 960 +309465232 2 960 +309465236 32 960 +309465240 2 960 +309465244 32 960 +309465248 2 960 +309465252 32 960 +309465256 2 960 +309465260 32 960 +309465264 2 960 +309465268 32 960 +309465272 2 960 +309465276 32 960 +309465280 2 960 +309465284 32 960 +309465288 2 960 +309465292 32 960 +309465296 2 960 +309465300 32 960 +309465304 2 960 +309465308 32 960 +309465312 2 960 +309465316 32 960 +309465320 2 960 +309465324 32 960 +309465328 2 960 +309465332 32 960 +309465336 2 960 +309465340 32 960 +309465344 2 960 +309465348 32 960 +309465352 2 960 +309465356 32 960 +309465360 2 960 +309465364 32 960 +309465368 2 960 +309465372 32 960 +309465376 2 960 +309465380 32 960 +309465384 2 960 +309465388 32 960 +309465392 2 960 +309465396 32 960 +309465400 2 960 +309465404 32 960 +309465408 2 960 +309465412 32 960 +309465416 2 960 +309465420 32 960 +309465424 2 960 +309465428 32 960 +309465432 2 960 +309465436 32 960 +309465440 2 960 +309465444 32 960 +309465448 2 960 +309465452 32 960 +309465456 2 960 +309465460 32 960 +309465464 2 960 +309465468 32 960 +309465472 2 960 +309465476 32 960 +309465480 2 960 +309465484 32 960 +309465488 2 960 +309465492 32 960 +309465496 2 960 +309465500 32 960 +309465504 2 960 +309465508 32 960 +309465512 2 960 +309465516 32 960 +309465520 2 960 +309469188 32 960 +309469192 2 960 +309469196 32 960 +309469200 2 960 +309469204 32 960 +309469208 2 960 +309469212 32 960 +309469216 2 960 +309469220 32 960 +309469224 2 960 +309469228 32 960 +309469232 2 960 +309469236 32 960 +309469240 2 960 +309469244 32 960 +309469248 2 960 +309469252 32 960 +309469256 2 960 +309469260 32 960 +309469264 2 960 +309469268 32 960 +309469272 2 960 +309469276 32 960 +309469280 2 960 +309469284 32 960 +309469288 2 960 +309469292 32 960 +309469296 2 960 +309469300 32 960 +309469304 2 960 +309469308 32 960 +309469312 2 960 +309469316 32 960 +309469320 2 960 +309469324 32 960 +309469328 2 960 +309469332 32 960 +309469336 2 960 +309469340 32 960 +309469344 2 960 +309469348 32 960 +309469352 2 960 +309469356 32 960 +309469360 2 960 +309469364 32 960 +309469368 2 960 +309469372 32 960 +309469376 2 960 +309469380 32 960 +309469384 2 960 +309469388 32 960 +309469392 2 960 +309469396 32 960 +309469400 2 960 +309469404 32 960 +309469408 2 960 +309469412 32 960 +309469416 2 960 +309469420 32 960 +309469424 2 960 +309469428 32 960 +309469432 2 960 +309469436 32 960 +309469440 2 960 +309469444 32 960 +309469448 2 960 +309469452 32 960 +309469456 2 960 +309469460 32 960 +309469464 2 960 +309469468 32 960 +309469472 2 960 +309469476 32 960 +309469480 2 960 +309469484 32 960 +309469488 2 960 +309469492 32 960 +309469496 2 960 +309469500 32 960 +309469504 2 960 +309469508 32 960 +309469512 2 960 +309469516 32 960 +309469520 2 960 +309469524 32 960 +309469528 2 960 +309469532 32 960 +309469536 2 960 +309469540 32 960 +309469544 2 960 +309469548 32 960 +309469552 2 960 +309469556 32 960 +309469560 2 960 +309469564 32 960 +309469568 2 960 +309469572 32 960 +309469576 2 960 +309469580 32 960 +309469584 2 960 +309469588 32 960 +309469592 2 960 +309469596 32 960 +309469600 2 960 +309469604 32 960 +309469608 2 960 +309469612 32 960 +309469616 2 960 +310382596 2 1016 +310382600 2 1016 +310382604 2 1016 +310382608 2 1016 +310382612 2 1016 +310382616 2 1016 +310382620 2 1016 +310382624 2 1016 +310382628 2 1016 +310382632 2 1016 +310382636 2 1016 +310382640 2 1016 +310382644 2 1016 +310382648 2 1016 +310382652 2 1016 +310382656 2 1016 +310382660 2 1016 +310382664 2 1016 +310382668 2 1016 +310382672 2 1016 +310382676 2 1016 +310382680 2 1016 +310382684 2 1016 +310382688 2 1016 +310382692 2 1016 +310382696 2 1016 +310382700 2 1016 +310382704 2 1016 +310382708 2 1016 +310382712 2 1016 +310382716 2 1016 +310382720 2 1016 +310382724 2 1016 +310382728 2 1016 +310382732 2 1016 +310382736 2 1016 +310382740 2 1016 +310382744 2 1016 +310382748 2 1016 +310382752 2 1016 +310382756 2 1016 +310382760 2 1016 +310382764 2 1016 +310382768 2 1016 +310382772 2 1016 +310382776 2 1016 +310382780 2 1016 +310382784 2 1016 +310386692 2 1016 +310386696 2 1016 +310386700 2 1016 +310386704 2 1016 +310386708 2 1016 +310386712 2 1016 +310386716 2 1016 +310386720 2 1016 +310386724 2 1016 +310386728 2 1016 +310386732 2 1016 +310386736 2 1016 +310386740 2 1016 +310386744 2 1016 +310386748 2 1016 +310386752 2 1016 +310386756 2 1016 +310386760 2 1016 +310386764 2 1016 +310386768 2 1016 +310386772 2 1016 +310386776 2 1016 +310386780 2 1016 +310386784 2 1016 +310386788 2 1016 +310386792 2 1016 +310386796 2 1016 +310386800 2 1016 +310386804 2 1016 +310386808 2 1016 +310386812 2 1016 +310386816 2 1016 +310386820 2 1016 +310386824 2 1016 +310386828 2 1016 +310386832 2 1016 +310386836 2 1016 +310386840 2 1016 +310386844 2 1016 +310386848 2 1016 +310386852 2 1016 +310386856 2 1016 +310386860 2 1016 +310386864 2 1016 +310386868 2 1016 +310386872 2 1016 +310386876 2 1016 +310386880 2 1016 +310390788 2 1016 +310390792 2 1016 +310390796 2 1016 +310390800 2 1016 +310390804 2 1016 +310390808 2 1016 +310390812 2 1016 +310390816 2 1016 +310390820 2 1016 +310390824 2 1016 +310390828 2 1016 +310390832 2 1016 +310390836 2 1016 +310390840 2 1016 +310390844 2 1016 +310390848 2 1016 +310390852 2 1016 +310390856 2 1016 +310390860 2 1016 +310390864 2 1016 +310390868 2 1016 +310390872 2 1016 +310390876 2 1016 +310390880 2 1016 +310390884 2 1016 +310390888 2 1016 +310390892 2 1016 +310390896 2 1016 +310390900 2 1016 +310390904 2 1016 +310390908 2 1016 +310390912 2 1016 +310390916 2 1016 +310390920 2 1016 +310390924 2 1016 +310390928 2 1016 +310390932 2 1016 +310390936 2 1016 +310390940 2 1016 +310390944 2 1016 +310390948 2 1016 +310390952 2 1016 +310390956 2 1016 +310390960 2 1016 +310390964 2 1016 +310390968 2 1016 +310390972 2 1016 +310390976 2 1016 +310394884 2 1016 +310394888 2 1016 +310394892 2 1016 +310394896 2 1016 +310394900 2 1016 +310394904 2 1016 +310394908 2 1016 +310394912 2 1016 +310394916 2 1016 +310394920 2 1016 +310394924 2 1016 +310394928 2 1016 +310394932 2 1016 +310394936 2 1016 +310394940 2 1016 +310394944 2 1016 +310394948 2 1016 +310394952 2 1016 +310394956 2 1016 +310394960 2 1016 +310394964 2 1016 +310394968 2 1016 +310394972 2 1016 +310394976 2 1016 +310394980 2 1016 +310394984 2 1016 +310394988 2 1016 +310394992 2 1016 +310394996 2 1016 +310395000 2 1016 +310395004 2 1016 +310395008 2 1016 +310395012 2 1016 +310395016 2 1016 +310395020 2 1016 +310395024 2 1016 +310395028 2 1016 +310395032 2 1016 +310395036 2 1016 +310395040 2 1016 +310395044 2 1016 +310395048 2 1016 +310395052 2 1016 +310395056 2 1016 +310395060 2 1016 +310395064 2 1016 +310395068 2 1016 +310395072 2 1016 +310398980 2 1016 +310398984 2 1016 +310398988 2 1016 +310398992 2 1016 +310398996 2 1016 +310399000 2 1016 +310399004 2 1016 +310399008 2 1016 +310399012 2 1016 +310399016 2 1016 +310399020 2 1016 +310399024 2 1016 +310399028 2 1016 +310399032 2 1016 +310399036 2 1016 +310399040 2 1016 +310399044 2 1016 +310399048 2 1016 +310399052 2 1016 +310399056 2 1016 +310399060 2 1016 +310399064 2 1016 +310399068 2 1016 +310399072 2 1016 +310399076 2 1016 +310399080 2 1016 +310399084 2 1016 +310399088 2 1016 +310399092 2 1016 +310399096 2 1016 +310399100 2 1016 +310399104 2 1016 +310399108 2 1016 +310399112 2 1016 +310399116 2 1016 +310399120 2 1016 +310399124 2 1016 +310399128 2 1016 +310399132 2 1016 +310399136 2 1016 +310399140 2 1016 +310399144 2 1016 +310399148 2 1016 +310399152 2 1016 +310399156 2 1016 +310399160 2 1016 +310399164 2 1016 +310399168 2 1016 +310403076 2 1016 +310403080 2 1016 +310403084 2 1016 +310403088 2 1016 +310403092 2 1016 +310403096 2 1016 +310403100 2 1016 +310403104 2 1016 +310403108 2 1016 +310403112 2 1016 +310403116 2 1016 +310403120 2 1016 +310403124 2 1016 +310403128 2 1016 +310403132 2 1016 +310403136 2 1016 +310403140 2 1016 +310403144 2 1016 +310403148 2 1016 +310403152 2 1016 +310403156 2 1016 +310403160 2 1016 +310403164 2 1016 +310403168 2 1016 +310403172 2 1016 +310403176 2 1016 +310403180 2 1016 +310403184 2 1016 +310403188 2 1016 +310403192 2 1016 +310403196 2 1016 +310403200 2 1016 +310403204 2 1016 +310403208 2 1016 +310403212 2 1016 +310403216 2 1016 +310403220 2 1016 +310403224 2 1016 +310403228 2 1016 +310403232 2 1016 +310403236 2 1016 +310403240 2 1016 +310403244 2 1016 +310403248 2 1016 +310403252 2 1016 +310403256 2 1016 +310403260 2 1016 +310403264 2 1016 +310407172 2 1016 +310407176 2 1016 +310407180 2 1016 +310407184 2 1016 +310407188 2 1016 +310407192 2 1016 +310407196 2 1016 +310407200 2 1016 +310407204 2 1016 +310407208 2 1016 +310407212 2 1016 +310407216 2 1016 +310407220 2 1016 +310407224 2 1016 +310407228 2 1016 +310407232 2 1016 +310407236 2 1016 +310407240 2 1016 +310407244 2 1016 +310407248 2 1016 +310407252 2 1016 +310407256 2 1016 +310407260 2 1016 +310407264 2 1016 +310407268 2 1016 +310407272 2 1016 +310407276 2 1016 +310407280 2 1016 +310407284 2 1016 +310407288 2 1016 +310407292 2 1016 +310407296 2 1016 +310407300 2 1016 +310407304 2 1016 +310407308 2 1016 +310407312 2 1016 +310407316 2 1016 +310407320 2 1016 +310407324 2 1016 +310407328 2 1016 +310407332 2 1016 +310407336 2 1016 +310407340 2 1016 +310407344 2 1016 +310407348 2 1016 +310407352 2 1016 +310407356 2 1016 +310407360 2 1016 +310411268 2 1016 +310411272 2 1016 +310411276 2 1016 +310411280 2 1016 +310411284 2 1016 +310411288 2 1016 +310411292 2 1016 +310411296 2 1016 +310411300 2 1016 +310411304 2 1016 +310411308 2 1016 +310411312 2 1016 +310411316 2 1016 +310411320 2 1016 +310411324 2 1016 +310411328 2 1016 +310411332 2 1016 +310411336 2 1016 +310411340 2 1016 +310411344 2 1016 +310411348 2 1016 +310411352 2 1016 +310411356 2 1016 +310411360 2 1016 +310411364 2 1016 +310411368 2 1016 +310411372 2 1016 +310411376 2 1016 +310411380 2 1016 +310411384 2 1016 +310411388 2 1016 +310411392 2 1016 +310411396 2 1016 +310411400 2 1016 +310411404 2 1016 +310411408 2 1016 +310411412 2 1016 +310411416 2 1016 +310411420 2 1016 +310411424 2 1016 +310411428 2 1016 +310411432 2 1016 +310411436 2 1016 +310411440 2 1016 +310411444 2 1016 +310411448 2 1016 +310411452 2 1016 +310411456 2 1016 +310415364 2 1016 +310415368 2 1016 +310415372 2 1016 +310415376 2 1016 +310415380 2 1016 +310415384 2 1016 +310415388 2 1016 +310415392 2 1016 +310415396 2 1016 +310415400 2 1016 +310415404 2 1016 +310415408 2 1016 +310415412 2 1016 +310415416 2 1016 +310415420 2 1016 +310415424 2 1016 +310415428 2 1016 +310415432 2 1016 +310415436 2 1016 +310415440 2 1016 +310415444 2 1016 +310415448 2 1016 +310415452 2 1016 +310415456 2 1016 +310415460 2 1016 +310415464 2 1016 +310415468 2 1016 +310415472 2 1016 +310415476 2 1016 +310415480 2 1016 +310415484 2 1016 +310415488 2 1016 +310415492 2 1016 +310415496 2 1016 +310415500 2 1016 +310415504 2 1016 +310415508 2 1016 +310415512 2 1016 +310415516 2 1016 +310415520 2 1016 +310415524 2 1016 +310415528 2 1016 +310415532 2 1016 +310415536 2 1016 +310415540 2 1016 +310415544 2 1016 +310415548 2 1016 +310415552 2 1016 +310419460 2 1016 +310419464 2 1016 +310419468 2 1016 +310419472 2 1016 +310419476 2 1016 +310419480 2 1016 +310419484 2 1016 +310419488 2 1016 +310419492 2 1016 +310419496 2 1016 +310419500 2 1016 +310419504 2 1016 +310419508 2 1016 +310419512 2 1016 +310419516 2 1016 +310419520 2 1016 +310419524 2 1016 +310419528 2 1016 +310419532 2 1016 +310419536 2 1016 +310419540 2 1016 +310419544 2 1016 +310419548 2 1016 +310419552 2 1016 +310419556 2 1016 +310419560 2 1016 +310419564 2 1016 +310419568 2 1016 +310419572 2 1016 +310419576 2 1016 +310419580 2 1016 +310419584 2 1016 +310419588 2 1016 +310419592 2 1016 +310419596 2 1016 +310419600 2 1016 +310419604 2 1016 +310419608 2 1016 +310419612 2 1016 +310419616 2 1016 +310419620 2 1016 +310419624 2 1016 +310419628 2 1016 +310419632 2 1016 +310419636 2 1016 +310419640 2 1016 +310419644 2 1016 +310419648 2 1016 +310423556 2 1016 +310423560 2 1016 +310423564 2 1016 +310423568 2 1016 +310423572 2 1016 +310423576 2 1016 +310423580 2 1016 +310423584 2 1016 +310423588 2 1016 +310423592 2 1016 +310423596 2 1016 +310423600 2 1016 +310423604 2 1016 +310423608 2 1016 +310423612 2 1016 +310423616 2 1016 +310423620 2 1016 +310423624 2 1016 +310423628 2 1016 +310423632 2 1016 +310423636 2 1016 +310423640 2 1016 +310423644 2 1016 +310423648 2 1016 +310423652 2 1016 +310423656 2 1016 +310423660 2 1016 +310423664 2 1016 +310423668 2 1016 +310423672 2 1016 +310423676 2 1016 +310423680 2 1016 +310423684 2 1016 +310423688 2 1016 +310423692 2 1016 +310423696 2 1016 +310423700 2 1016 +310423704 2 1016 +310423708 2 1016 +310423712 2 1016 +310423716 2 1016 +310423720 2 1016 +310423724 2 1016 +310423728 2 1016 +310423732 2 1016 +310423736 2 1016 +310423740 2 1016 +310423744 2 1016 +310427652 2 1016 +310427656 2 1016 +310427660 2 1016 +310427664 2 1016 +310427668 2 1016 +310427672 2 1016 +310427676 2 1016 +310427680 2 1016 +310427684 2 1016 +310427688 2 1016 +310427692 2 1016 +310427696 2 1016 +310427700 2 1016 +310427704 2 1016 +310427708 2 1016 +310427712 2 1016 +310427716 2 1016 +310427720 2 1016 +310427724 2 1016 +310427728 2 1016 +310427732 2 1016 +310427736 2 1016 +310427740 2 1016 +310427744 2 1016 +310427748 2 1016 +310427752 2 1016 +310427756 2 1016 +310427760 2 1016 +310427764 2 1016 +310427768 2 1016 +310427772 2 1016 +310427776 2 1016 +310427780 2 1016 +310427784 2 1016 +310427788 2 1016 +310427792 2 1016 +310427796 2 1016 +310427800 2 1016 +310427804 2 1016 +310427808 2 1016 +310427812 2 1016 +310427816 2 1016 +310427820 2 1016 +310427824 2 1016 +310427828 2 1016 +310427832 2 1016 +310427836 2 1016 +310427840 2 1016 +310431748 2 1016 +310431752 2 1016 +310431756 2 1016 +310431760 2 1016 +310431764 2 1016 +310431768 2 1016 +310431772 2 1016 +310431776 2 1016 +310431780 2 1016 +310431784 2 1016 +310431788 2 1016 +310431792 2 1016 +310431796 2 1016 +310431800 2 1016 +310431804 2 1016 +310431808 2 1016 +310431812 2 1016 +310431816 2 1016 +310431820 2 1016 +310431824 2 1016 +310431828 2 1016 +310431832 2 1016 +310431836 2 1016 +310431840 2 1016 +310431844 2 1016 +310431848 2 1016 +310431852 2 1016 +310431856 2 1016 +310431860 2 1016 +310431864 2 1016 +310431868 2 1016 +310431872 2 1016 +310431876 2 1016 +310431880 2 1016 +310431884 2 1016 +310431888 2 1016 +310431892 2 1016 +310431896 2 1016 +310431900 2 1016 +310431904 2 1016 +310431908 2 1016 +310431912 2 1016 +310431916 2 1016 +310431920 2 1016 +310431924 2 1016 +310431928 2 1016 +310431932 2 1016 +310431936 2 1016 +310435844 2 1016 +310435848 2 1016 +310435852 2 1016 +310435856 2 1016 +310435860 2 1016 +310435864 2 1016 +310435868 2 1016 +310435872 2 1016 +310435876 2 1016 +310435880 2 1016 +310435884 2 1016 +310435888 2 1016 +310435892 2 1016 +310435896 2 1016 +310435900 2 1016 +310435904 2 1016 +310435908 2 1016 +310435912 2 1016 +310435916 2 1016 +310435920 2 1016 +310435924 2 1016 +310435928 2 1016 +310435932 2 1016 +310435936 2 1016 +310435940 2 1016 +310435944 2 1016 +310435948 2 1016 +310435952 2 1016 +310435956 2 1016 +310435960 2 1016 +310435964 2 1016 +310435968 2 1016 +310435972 2 1016 +310435976 2 1016 +310435980 2 1016 +310435984 2 1016 +310435988 2 1016 +310435992 2 1016 +310435996 2 1016 +310436000 2 1016 +310436004 2 1016 +310436008 2 1016 +310436012 2 1016 +310436016 2 1016 +310436020 2 1016 +310436024 2 1016 +310436028 2 1016 +310436032 2 1016 +310439940 2 1016 +310439944 2 1016 +310439948 2 1016 +310439952 2 1016 +310439956 2 1016 +310439960 2 1016 +310439964 2 1016 +310439968 2 1016 +310439972 2 1016 +310439976 2 1016 +310439980 2 1016 +310439984 2 1016 +310439988 2 1016 +310439992 2 1016 +310439996 2 1016 +310440000 2 1016 +310440004 2 1016 +310440008 2 1016 +310440012 2 1016 +310440016 2 1016 +310440020 2 1016 +310440024 2 1016 +310440028 2 1016 +310440032 2 1016 +310440036 2 1016 +310440040 2 1016 +310440044 2 1016 +310440048 2 1016 +310440052 2 1016 +310440056 2 1016 +310440060 2 1016 +310440064 2 1016 +310440068 2 1016 +310440072 2 1016 +310440076 2 1016 +310440080 2 1016 +310440084 2 1016 +310440088 2 1016 +310440092 2 1016 +310440096 2 1016 +310440100 2 1016 +310440104 2 1016 +310440108 2 1016 +310440112 2 1016 +310440116 2 1016 +310440120 2 1016 +310440124 2 1016 +310440128 2 1016 +310444036 2 1016 +310444040 2 1016 +310444044 2 1016 +310444048 2 1016 +310444052 2 1016 +310444056 2 1016 +310444060 2 1016 +310444064 2 1016 +310444068 2 1016 +310444072 2 1016 +310444076 2 1016 +310444080 2 1016 +310444084 2 1016 +310444088 2 1016 +310444092 2 1016 +310444096 2 1016 +310444100 2 1016 +310444104 2 1016 +310444108 2 1016 +310444112 2 1016 +310444116 2 1016 +310444120 2 1016 +310444124 2 1016 +310444128 2 1016 +310444132 2 1016 +310444136 2 1016 +310444140 2 1016 +310444144 2 1016 +310444148 2 1016 +310444152 2 1016 +310444156 2 1016 +310444160 2 1016 +310444164 2 1016 +310444168 2 1016 +310444172 2 1016 +310444176 2 1016 +310444180 2 1016 +310444184 2 1016 +310444188 2 1016 +310444192 2 1016 +310444196 2 1016 +310444200 2 1016 +310444204 2 1016 +310444208 2 1016 +310444212 2 1016 +310444216 2 1016 +310444220 2 1016 +310444224 2 1016 +310448132 2 1016 +310448136 2 1016 +310448140 2 1016 +310448144 2 1016 +310448148 2 1016 +310448152 2 1016 +310448156 2 1016 +310448160 2 1016 +310448164 2 1016 +310448168 2 1016 +310448172 2 1016 +310448176 2 1016 +310448180 2 1016 +310448184 2 1016 +310448188 2 1016 +310448192 2 1016 +310448196 2 1016 +310448200 2 1016 +310448204 2 1016 +310448208 2 1016 +310448212 2 1016 +310448216 2 1016 +310448220 2 1016 +310448224 2 1016 +310448228 2 1016 +310448232 2 1016 +310448236 2 1016 +310448240 2 1016 +310448244 2 1016 +310448248 2 1016 +310448252 2 1016 +310448256 2 1016 +310448260 2 1016 +310448264 2 1016 +310448268 2 1016 +310448272 2 1016 +310448276 2 1016 +310448280 2 1016 +310448284 2 1016 +310448288 2 1016 +310448292 2 1016 +310448296 2 1016 +310448300 2 1016 +310448304 2 1016 +310448308 2 1016 +310448312 2 1016 +310448316 2 1016 +310448320 2 1016 +310452228 2 1016 +310452232 2 1016 +310452236 2 1016 +310452240 2 1016 +310452244 2 1016 +310452248 2 1016 +310452252 2 1016 +310452256 2 1016 +310452260 2 1016 +310452264 2 1016 +310452268 2 1016 +310452272 2 1016 +310452276 2 1016 +310452280 2 1016 +310452284 2 1016 +310452288 2 1016 +310452292 2 1016 +310452296 2 1016 +310452300 2 1016 +310452304 2 1016 +310452308 2 1016 +310452312 2 1016 +310452316 2 1016 +310452320 2 1016 +310452324 2 1016 +310452328 2 1016 +310452332 2 1016 +310452336 2 1016 +310452340 2 1016 +310452344 2 1016 +310452348 2 1016 +310452352 2 1016 +310452356 2 1016 +310452360 2 1016 +310452364 2 1016 +310452368 2 1016 +310452372 2 1016 +310452376 2 1016 +310452380 2 1016 +310452384 2 1016 +310452388 2 1016 +310452392 2 1016 +310452396 2 1016 +310452400 2 1016 +310452404 2 1016 +310452408 2 1016 +310452412 2 1016 +310452416 2 1016 +310456324 2 1016 +310456328 2 1016 +310456332 2 1016 +310456336 2 1016 +310456340 2 1016 +310456344 2 1016 +310456348 2 1016 +310456352 2 1016 +310456356 2 1016 +310456360 2 1016 +310456364 2 1016 +310456368 2 1016 +310456372 2 1016 +310456376 2 1016 +310456380 2 1016 +310456384 2 1016 +310456388 2 1016 +310456392 2 1016 +310456396 2 1016 +310456400 2 1016 +310456404 2 1016 +310456408 2 1016 +310456412 2 1016 +310456416 2 1016 +310456420 2 1016 +310456424 2 1016 +310456428 2 1016 +310456432 2 1016 +310456436 2 1016 +310456440 2 1016 +310456444 2 1016 +310456448 2 1016 +310456452 2 1016 +310456456 2 1016 +310456460 2 1016 +310456464 2 1016 +310456468 2 1016 +310456472 2 1016 +310456476 2 1016 +310456480 2 1016 +310456484 2 1016 +310456488 2 1016 +310456492 2 1016 +310456496 2 1016 +310456500 2 1016 +310456504 2 1016 +310456508 2 1016 +310456512 2 1016 +310460420 2 1016 +310460424 2 1016 +310460428 2 1016 +310460432 2 1016 +310460436 2 1016 +310460440 2 1016 +310460444 2 1016 +310460448 2 1016 +310460452 2 1016 +310460456 2 1016 +310460460 2 1016 +310460464 2 1016 +310460468 2 1016 +310460472 2 1016 +310460476 2 1016 +310460480 2 1016 +310460484 2 1016 +310460488 2 1016 +310460492 2 1016 +310460496 2 1016 +310460500 2 1016 +310460504 2 1016 +310460508 2 1016 +310460512 2 1016 +310460516 2 1016 +310460520 2 1016 +310460524 2 1016 +310460528 2 1016 +310460532 2 1016 +310460536 2 1016 +310460540 2 1016 +310460544 2 1016 +310460548 2 1016 +310460552 2 1016 +310460556 2 1016 +310460560 2 1016 +310460564 2 1016 +310460568 2 1016 +310460572 2 1016 +310460576 2 1016 +310460580 2 1016 +310460584 2 1016 +310460588 2 1016 +310460592 2 1016 +310460596 2 1016 +310460600 2 1016 +310460604 2 1016 +310460608 2 1016 +310464516 2 1016 +310464520 2 1016 +310464524 2 1016 +310464528 2 1016 +310464532 2 1016 +310464536 2 1016 +310464540 2 1016 +310464544 2 1016 +310464548 2 1016 +310464552 2 1016 +310464556 2 1016 +310464560 2 1016 +310464564 2 1016 +310464568 2 1016 +310464572 2 1016 +310464576 2 1016 +310464580 2 1016 +310464584 2 1016 +310464588 2 1016 +310464592 2 1016 +310464596 2 1016 +310464600 2 1016 +310464604 2 1016 +310464608 2 1016 +310464612 2 1016 +310464616 2 1016 +310464620 2 1016 +310464624 2 1016 +310464628 2 1016 +310464632 2 1016 +310464636 2 1016 +310464640 2 1016 +310464644 2 1016 +310464648 2 1016 +310464652 2 1016 +310464656 2 1016 +310464660 2 1016 +310464664 2 1016 +310464668 2 1016 +310464672 2 1016 +310464676 2 1016 +310464680 2 1016 +310464684 2 1016 +310464688 2 1016 +310464692 2 1016 +310464696 2 1016 +310464700 2 1016 +310464704 2 1016 +310468612 2 1016 +310468616 2 1016 +310468620 2 1016 +310468624 2 1016 +310468628 2 1016 +310468632 2 1016 +310468636 2 1016 +310468640 2 1016 +310468644 2 1016 +310468648 2 1016 +310468652 2 1016 +310468656 2 1016 +310468660 2 1016 +310468664 2 1016 +310468668 2 1016 +310468672 2 1016 +310468676 2 1016 +310468680 2 1016 +310468684 2 1016 +310468688 2 1016 +310468692 2 1016 +310468696 2 1016 +310468700 2 1016 +310468704 2 1016 +310468708 2 1016 +310468712 2 1016 +310468716 2 1016 +310468720 2 1016 +310468724 2 1016 +310468728 2 1016 +310468732 2 1016 +310468736 2 1016 +310468740 2 1016 +310468744 2 1016 +310468748 2 1016 +310468752 2 1016 +310468756 2 1016 +310468760 2 1016 +310468764 2 1016 +310468768 2 1016 +310468772 2 1016 +310468776 2 1016 +310468780 2 1016 +310468784 2 1016 +310468788 2 1016 +310468792 2 1016 +310468796 2 1016 +310468800 2 1016 +310472708 2 1016 +310472712 2 1016 +310472716 2 1016 +310472720 2 1016 +310472724 2 1016 +310472728 2 1016 +310472732 2 1016 +310472736 2 1016 +310472740 2 1016 +310472744 2 1016 +310472748 2 1016 +310472752 2 1016 +310472756 2 1016 +310472760 2 1016 +310472764 2 1016 +310472768 2 1016 +310472772 2 1016 +310472776 2 1016 +310472780 2 1016 +310472784 2 1016 +310472788 2 1016 +310472792 2 1016 +310472796 2 1016 +310472800 2 1016 +310472804 2 1016 +310472808 2 1016 +310472812 2 1016 +310472816 2 1016 +310472820 2 1016 +310472824 2 1016 +310472828 2 1016 +310472832 2 1016 +310472836 2 1016 +310472840 2 1016 +310472844 2 1016 +310472848 2 1016 +310472852 2 1016 +310472856 2 1016 +310472860 2 1016 +310472864 2 1016 +310472868 2 1016 +310472872 2 1016 +310472876 2 1016 +310472880 2 1016 +310472884 2 1016 +310472888 2 1016 +310472892 2 1016 +310472896 2 1016 +310476804 2 1016 +310476808 2 1016 +310476812 2 1016 +310476816 2 1016 +310476820 2 1016 +310476824 2 1016 +310476828 2 1016 +310476832 2 1016 +310476836 2 1016 +310476840 2 1016 +310476844 2 1016 +310476848 2 1016 +310476852 2 1016 +310476856 2 1016 +310476860 2 1016 +310476864 2 1016 +310476868 2 1016 +310476872 2 1016 +310476876 2 1016 +310476880 2 1016 +310476884 2 1016 +310476888 2 1016 +310476892 2 1016 +310476896 2 1016 +310476900 2 1016 +310476904 2 1016 +310476908 2 1016 +310476912 2 1016 +310476916 2 1016 +310476920 2 1016 +310476924 2 1016 +310476928 2 1016 +310476932 2 1016 +310476936 2 1016 +310476940 2 1016 +310476944 2 1016 +310476948 2 1016 +310476952 2 1016 +310476956 2 1016 +310476960 2 1016 +310476964 2 1016 +310476968 2 1016 +310476972 2 1016 +310476976 2 1016 +310476980 2 1016 +310476984 2 1016 +310476988 2 1016 +310476992 2 1016 +310480900 2 1016 +310480904 2 1016 +310480908 2 1016 +310480912 2 1016 +310480916 2 1016 +310480920 2 1016 +310480924 2 1016 +310480928 2 1016 +310480932 2 1016 +310480936 2 1016 +310480940 2 1016 +310480944 2 1016 +310480948 2 1016 +310480952 2 1016 +310480956 2 1016 +310480960 2 1016 +310480964 2 1016 +310480968 2 1016 +310480972 2 1016 +310480976 2 1016 +310480980 2 1016 +310480984 2 1016 +310480988 2 1016 +310480992 2 1016 +310480996 2 1016 +310481000 2 1016 +310481004 2 1016 +310481008 2 1016 +310481012 2 1016 +310481016 2 1016 +310481020 2 1016 +310481024 2 1016 +310481028 2 1016 +310481032 2 1016 +310481036 2 1016 +310481040 2 1016 +310481044 2 1016 +310481048 2 1016 +310481052 2 1016 +310481056 2 1016 +310481060 2 1016 +310481064 2 1016 +310481068 2 1016 +310481072 2 1016 +310481076 2 1016 +310481080 2 1016 +310481084 2 1016 +310481088 2 1016 +310484996 2 1016 +310485000 2 1016 +310485004 2 1016 +310485008 2 1016 +310485012 2 1016 +310485016 2 1016 +310485020 2 1016 +310485024 2 1016 +310485028 2 1016 +310485032 2 1016 +310485036 2 1016 +310485040 2 1016 +310485044 2 1016 +310485048 2 1016 +310485052 2 1016 +310485056 2 1016 +310485060 2 1016 +310485064 2 1016 +310485068 2 1016 +310485072 2 1016 +310485076 2 1016 +310485080 2 1016 +310485084 2 1016 +310485088 2 1016 +310485092 2 1016 +310485096 2 1016 +310485100 2 1016 +310485104 2 1016 +310485108 2 1016 +310485112 2 1016 +310485116 2 1016 +310485120 2 1016 +310485124 2 1016 +310485128 2 1016 +310485132 2 1016 +310485136 2 1016 +310485140 2 1016 +310485144 2 1016 +310485148 2 1016 +310485152 2 1016 +310485156 2 1016 +310485160 2 1016 +310485164 2 1016 +310485168 2 1016 +310485172 2 1016 +310485176 2 1016 +310485180 2 1016 +310485184 2 1016 +310489092 2 1016 +310489096 2 1016 +310489100 2 1016 +310489104 2 1016 +310489108 2 1016 +310489112 2 1016 +310489116 2 1016 +310489120 2 1016 +310489124 2 1016 +310489128 2 1016 +310489132 2 1016 +310489136 2 1016 +310489140 2 1016 +310489144 2 1016 +310489148 2 1016 +310489152 2 1016 +310489156 2 1016 +310489160 2 1016 +310489164 2 1016 +310489168 2 1016 +310489172 2 1016 +310489176 2 1016 +310489180 2 1016 +310489184 2 1016 +310489188 2 1016 +310489192 2 1016 +310489196 2 1016 +310489200 2 1016 +310489204 2 1016 +310489208 2 1016 +310489212 2 1016 +310489216 2 1016 +310489220 2 1016 +310489224 2 1016 +310489228 2 1016 +310489232 2 1016 +310489236 2 1016 +310489240 2 1016 +310489244 2 1016 +310489248 2 1016 +310489252 2 1016 +310489256 2 1016 +310489260 2 1016 +310489264 2 1016 +310489268 2 1016 +310489272 2 1016 +310489276 2 1016 +310489280 2 1016 +310493188 2 1016 +310493192 2 1016 +310493196 2 1016 +310493200 2 1016 +310493204 2 1016 +310493208 2 1016 +310493212 2 1016 +310493216 2 1016 +310493220 2 1016 +310493224 2 1016 +310493228 2 1016 +310493232 2 1016 +310493236 2 1016 +310493240 2 1016 +310493244 2 1016 +310493248 2 1016 +310493252 2 1016 +310493256 2 1016 +310493260 2 1016 +310493264 2 1016 +310493268 2 1016 +310493272 2 1016 +310493276 2 1016 +310493280 2 1016 +310493284 2 1016 +310493288 2 1016 +310493292 2 1016 +310493296 2 1016 +310493300 2 1016 +310493304 2 1016 +310493308 2 1016 +310493312 2 1016 +310493316 2 1016 +310493320 2 1016 +310493324 2 1016 +310493328 2 1016 +310493332 2 1016 +310493336 2 1016 +310493340 2 1016 +310493344 2 1016 +310493348 2 1016 +310493352 2 1016 +310493356 2 1016 +310493360 2 1016 +310493364 2 1016 +310493368 2 1016 +310493372 2 1016 +310493376 2 1016 +310497284 2 1016 +310497288 2 1016 +310497292 2 1016 +310497296 2 1016 +310497300 2 1016 +310497304 2 1016 +310497308 2 1016 +310497312 2 1016 +310497316 2 1016 +310497320 2 1016 +310497324 2 1016 +310497328 2 1016 +310497332 2 1016 +310497336 2 1016 +310497340 2 1016 +310497344 2 1016 +310497348 2 1016 +310497352 2 1016 +310497356 2 1016 +310497360 2 1016 +310497364 2 1016 +310497368 2 1016 +310497372 2 1016 +310497376 2 1016 +310497380 2 1016 +310497384 2 1016 +310497388 2 1016 +310497392 2 1016 +310497396 2 1016 +310497400 2 1016 +310497404 2 1016 +310497408 2 1016 +310497412 2 1016 +310497416 2 1016 +310497420 2 1016 +310497424 2 1016 +310497428 2 1016 +310497432 2 1016 +310497436 2 1016 +310497440 2 1016 +310497444 2 1016 +310497448 2 1016 +310497452 2 1016 +310497456 2 1016 +310497460 2 1016 +310497464 2 1016 +310497468 2 1016 +310497472 2 1016 +310501380 2 1016 +310501384 2 1016 +310501388 2 1016 +310501392 2 1016 +310501396 2 1016 +310501400 2 1016 +310501404 2 1016 +310501408 2 1016 +310501412 2 1016 +310501416 2 1016 +310501420 2 1016 +310501424 2 1016 +310501428 2 1016 +310501432 2 1016 +310501436 2 1016 +310501440 2 1016 +310501444 2 1016 +310501448 2 1016 +310501452 2 1016 +310501456 2 1016 +310501460 2 1016 +310501464 2 1016 +310501468 2 1016 +310501472 2 1016 +310501476 2 1016 +310501480 2 1016 +310501484 2 1016 +310501488 2 1016 +310501492 2 1016 +310501496 2 1016 +310501500 2 1016 +310501504 2 1016 +310501508 2 1016 +310501512 2 1016 +310501516 2 1016 +310501520 2 1016 +310501524 2 1016 +310501528 2 1016 +310501532 2 1016 +310501536 2 1016 +310501540 2 1016 +310501544 2 1016 +310501548 2 1016 +310501552 2 1016 +310501556 2 1016 +310501560 2 1016 +310501564 2 1016 +310501568 2 1016 +310505476 2 1016 +310505480 2 1016 +310505484 2 1016 +310505488 2 1016 +310505492 2 1016 +310505496 2 1016 +310505500 2 1016 +310505504 2 1016 +310505508 2 1016 +310505512 2 1016 +310505516 2 1016 +310505520 2 1016 +310505524 2 1016 +310505528 2 1016 +310505532 2 1016 +310505536 2 1016 +310505540 2 1016 +310505544 2 1016 +310505548 2 1016 +310505552 2 1016 +310505556 2 1016 +310505560 2 1016 +310505564 2 1016 +310505568 2 1016 +310505572 2 1016 +310505576 2 1016 +310505580 2 1016 +310505584 2 1016 +310505588 2 1016 +310505592 2 1016 +310505596 2 1016 +310505600 2 1016 +310505604 2 1016 +310505608 2 1016 +310505612 2 1016 +310505616 2 1016 +310505620 2 1016 +310505624 2 1016 +310505628 2 1016 +310505632 2 1016 +310505636 2 1016 +310505640 2 1016 +310505644 2 1016 +310505648 2 1016 +310505652 2 1016 +310505656 2 1016 +310505660 2 1016 +310505664 2 1016 +310509572 2 1016 +310509576 2 1016 +310509580 2 1016 +310509584 2 1016 +310509588 2 1016 +310509592 2 1016 +310509596 2 1016 +310509600 2 1016 +310509604 2 1016 +310509608 2 1016 +310509612 2 1016 +310509616 2 1016 +310509620 2 1016 +310509624 2 1016 +310509628 2 1016 +310509632 2 1016 +310509636 2 1016 +310509640 2 1016 +310509644 2 1016 +310509648 2 1016 +310509652 2 1016 +310509656 2 1016 +310509660 2 1016 +310509664 2 1016 +310509668 2 1016 +310509672 2 1016 +310509676 2 1016 +310509680 2 1016 +310509684 2 1016 +310509688 2 1016 +310509692 2 1016 +310509696 2 1016 +310509700 2 1016 +310509704 2 1016 +310509708 2 1016 +310509712 2 1016 +310509716 2 1016 +310509720 2 1016 +310509724 2 1016 +310509728 2 1016 +310509732 2 1016 +310509736 2 1016 +310509740 2 1016 +310509744 2 1016 +310509748 2 1016 +310509752 2 1016 +310509756 2 1016 +310509760 2 1016 +310513668 2 1016 +310513672 2 1016 +310513676 2 1016 +310513680 2 1016 +310513684 2 1016 +310513688 2 1016 +310513692 2 1016 +310513696 2 1016 +310513700 2 1016 +310513704 2 1016 +310513708 2 1016 +310513712 2 1016 +310513716 2 1016 +310513720 2 1016 +310513724 2 1016 +310513728 2 1016 +310513732 2 1016 +310513736 2 1016 +310513740 2 1016 +310513744 2 1016 +310513748 2 1016 +310513752 2 1016 +310513756 2 1016 +310513760 2 1016 +310513764 2 1016 +310513768 2 1016 +310513772 2 1016 +310513776 2 1016 +310513780 2 1016 +310513784 2 1016 +310513788 2 1016 +310513792 2 1016 +310513796 2 1016 +310513800 2 1016 +310513804 2 1016 +310513808 2 1016 +310513812 2 1016 +310513816 2 1016 +310513820 2 1016 +310513824 2 1016 +310513828 2 1016 +310513832 2 1016 +310513836 2 1016 +310513840 2 1016 +310513844 2 1016 +310513848 2 1016 +310513852 2 1016 +310513856 2 1016 +310517764 2 1016 +310517768 2 1016 +310517772 2 1016 +310517776 2 1016 +310517780 2 1016 +310517784 2 1016 +310517788 2 1016 +310517792 2 1016 +310517796 2 1016 +310517800 2 1016 +310517804 2 1016 +310517808 2 1016 +310517812 2 1016 +310517816 2 1016 +310517820 2 1016 +310517824 2 1016 +310517828 2 1016 +310517832 2 1016 +310517836 2 1016 +310517840 2 1016 +310517844 2 1016 +310517848 2 1016 +310517852 2 1016 +310517856 2 1016 +310517860 2 1016 +310517864 2 1016 +310517868 2 1016 +310517872 2 1016 +310517876 2 1016 +310517880 2 1016 +310517884 2 1016 +310517888 2 1016 +310517892 2 1016 +310517896 2 1016 +310517900 2 1016 +310517904 2 1016 +310517908 2 1016 +310517912 2 1016 +310517916 2 1016 +310517920 2 1016 +310517924 2 1016 +310517928 2 1016 +310517932 2 1016 +310517936 2 1016 +310517940 2 1016 +310517944 2 1016 +310517948 2 1016 +310517952 2 1016 +310521860 2 1016 +310521864 2 1016 +310521868 2 1016 +310521872 2 1016 +310521876 2 1016 +310521880 2 1016 +310521884 2 1016 +310521888 2 1016 +310521892 2 1016 +310521896 2 1016 +310521900 2 1016 +310521904 2 1016 +310521908 2 1016 +310521912 2 1016 +310521916 2 1016 +310521920 2 1016 +310521924 2 1016 +310521928 2 1016 +310521932 2 1016 +310521936 2 1016 +310521940 2 1016 +310521944 2 1016 +310521948 2 1016 +310521952 2 1016 +310521956 2 1016 +310521960 2 1016 +310521964 2 1016 +310521968 2 1016 +310521972 2 1016 +310521976 2 1016 +310521980 2 1016 +310521984 2 1016 +310521988 2 1016 +310521992 2 1016 +310521996 2 1016 +310522000 2 1016 +310522004 2 1016 +310522008 2 1016 +310522012 2 1016 +310522016 2 1016 +310522020 2 1016 +310522024 2 1016 +310522028 2 1016 +310522032 2 1016 +310522036 2 1016 +310522040 2 1016 +310522044 2 1016 +310522048 2 1016 +310525956 2 1016 +310525960 2 1016 +310525964 2 1016 +310525968 2 1016 +310525972 2 1016 +310525976 2 1016 +310525980 2 1016 +310525984 2 1016 +310525988 2 1016 +310525992 2 1016 +310525996 2 1016 +310526000 2 1016 +310526004 2 1016 +310526008 2 1016 +310526012 2 1016 +310526016 2 1016 +310526020 2 1016 +310526024 2 1016 +310526028 2 1016 +310526032 2 1016 +310526036 2 1016 +310526040 2 1016 +310526044 2 1016 +310526048 2 1016 +310526052 2 1016 +310526056 2 1016 +310526060 2 1016 +310526064 2 1016 +310526068 2 1016 +310526072 2 1016 +310526076 2 1016 +310526080 2 1016 +310526084 2 1016 +310526088 2 1016 +310526092 2 1016 +310526096 2 1016 +310526100 2 1016 +310526104 2 1016 +310526108 2 1016 +310526112 2 1016 +310526116 2 1016 +310526120 2 1016 +310526124 2 1016 +310526128 2 1016 +310526132 2 1016 +310526136 2 1016 +310526140 2 1016 +310526144 2 1016 +310530052 2 1016 +310530056 2 1016 +310530060 2 1016 +310530064 2 1016 +310530068 2 1016 +310530072 2 1016 +310530076 2 1016 +310530080 2 1016 +310530084 2 1016 +310530088 2 1016 +310530092 2 1016 +310530096 2 1016 +310530100 2 1016 +310530104 2 1016 +310530108 2 1016 +310530112 2 1016 +310530116 2 1016 +310530120 2 1016 +310530124 2 1016 +310530128 2 1016 +310530132 2 1016 +310530136 2 1016 +310530140 2 1016 +310530144 2 1016 +310530148 2 1016 +310530152 2 1016 +310530156 2 1016 +310530160 2 1016 +310530164 2 1016 +310530168 2 1016 +310530172 2 1016 +310530176 2 1016 +310530180 2 1016 +310530184 2 1016 +310530188 2 1016 +310530192 2 1016 +310530196 2 1016 +310530200 2 1016 +310530204 2 1016 +310530208 2 1016 +310530212 2 1016 +310530216 2 1016 +310530220 2 1016 +310530224 2 1016 +310530228 2 1016 +310530232 2 1016 +310530236 2 1016 +310530240 2 1016 +310534148 2 1016 +310534152 2 1016 +310534156 2 1016 +310534160 2 1016 +310534164 2 1016 +310534168 2 1016 +310534172 2 1016 +310534176 2 1016 +310534180 2 1016 +310534184 2 1016 +310534188 2 1016 +310534192 2 1016 +310534196 2 1016 +310534200 2 1016 +310534204 2 1016 +310534208 2 1016 +310534212 2 1016 +310534216 2 1016 +310534220 2 1016 +310534224 2 1016 +310534228 2 1016 +310534232 2 1016 +310534236 2 1016 +310534240 2 1016 +310534244 2 1016 +310534248 2 1016 +310534252 2 1016 +310534256 2 1016 +310534260 2 1016 +310534264 2 1016 +310534268 2 1016 +310534272 2 1016 +310534276 2 1016 +310534280 2 1016 +310534284 2 1016 +310534288 2 1016 +310534292 2 1016 +310534296 2 1016 +310534300 2 1016 +310534304 2 1016 +310534308 2 1016 +310534312 2 1016 +310534316 2 1016 +310534320 2 1016 +310534324 2 1016 +310534328 2 1016 +310534332 2 1016 +310534336 2 1016 +310538244 2 1016 +310538248 2 1016 +310538252 2 1016 +310538256 2 1016 +310538260 2 1016 +310538264 2 1016 +310538268 2 1016 +310538272 2 1016 +310538276 2 1016 +310538280 2 1016 +310538284 2 1016 +310538288 2 1016 +310538292 2 1016 +310538296 2 1016 +310538300 2 1016 +310538304 2 1016 +310538308 2 1016 +310538312 2 1016 +310538316 2 1016 +310538320 2 1016 +310538324 2 1016 +310538328 2 1016 +310538332 2 1016 +310538336 2 1016 +310538340 2 1016 +310538344 2 1016 +310538348 2 1016 +310538352 2 1016 +310538356 2 1016 +310538360 2 1016 +310538364 2 1016 +310538368 2 1016 +310538372 2 1016 +310538376 2 1016 +310538380 2 1016 +310538384 2 1016 +310538388 2 1016 +310538392 2 1016 +310538396 2 1016 +310538400 2 1016 +310538404 2 1016 +310538408 2 1016 +310538412 2 1016 +310538416 2 1016 +310538420 2 1016 +310538424 2 1016 +310538428 2 1016 +310538432 2 1016 +310542340 2 1016 +310542344 2 1016 +310542348 2 1016 +310542352 2 1016 +310542356 2 1016 +310542360 2 1016 +310542364 2 1016 +310542368 2 1016 +310542372 2 1016 +310542376 2 1016 +310542380 2 1016 +310542384 2 1016 +310542388 2 1016 +310542392 2 1016 +310542396 2 1016 +310542400 2 1016 +310542404 2 1016 +310542408 2 1016 +310542412 2 1016 +310542416 2 1016 +310542420 2 1016 +310542424 2 1016 +310542428 2 1016 +310542432 2 1016 +310542436 2 1016 +310542440 2 1016 +310542444 2 1016 +310542448 2 1016 +310542452 2 1016 +310542456 2 1016 +310542460 2 1016 +310542464 2 1016 +310542468 2 1016 +310542472 2 1016 +310542476 2 1016 +310542480 2 1016 +310542484 2 1016 +310542488 2 1016 +310542492 2 1016 +310542496 2 1016 +310542500 2 1016 +310542504 2 1016 +310542508 2 1016 +310542512 2 1016 +310542516 2 1016 +310542520 2 1016 +310542524 2 1016 +310542528 2 1016 +310546436 2 1016 +310546440 2 1016 +310546444 2 1016 +310546448 2 1016 +310546452 2 1016 +310546456 2 1016 +310546460 2 1016 +310546464 2 1016 +310546468 2 1016 +310546472 2 1016 +310546476 2 1016 +310546480 2 1016 +310546484 2 1016 +310546488 2 1016 +310546492 2 1016 +310546496 2 1016 +310546500 2 1016 +310546504 2 1016 +310546508 2 1016 +310546512 2 1016 +310546516 2 1016 +310546520 2 1016 +310546524 2 1016 +310546528 2 1016 +310546532 2 1016 +310546536 2 1016 +310546540 2 1016 +310546544 2 1016 +310546548 2 1016 +310546552 2 1016 +310546556 2 1016 +310546560 2 1016 +310546564 2 1016 +310546568 2 1016 +310546572 2 1016 +310546576 2 1016 +310546580 2 1016 +310546584 2 1016 +310546588 2 1016 +310546592 2 1016 +310546596 2 1016 +310546600 2 1016 +310546604 2 1016 +310546608 2 1016 +310546612 2 1016 +310546616 2 1016 +310546620 2 1016 +310546624 2 1016 +310550532 2 1016 +310550536 2 1016 +310550540 2 1016 +310550544 2 1016 +310550548 2 1016 +310550552 2 1016 +310550556 2 1016 +310550560 2 1016 +310550564 2 1016 +310550568 2 1016 +310550572 2 1016 +310550576 2 1016 +310550580 2 1016 +310550584 2 1016 +310550588 2 1016 +310550592 2 1016 +310550596 2 1016 +310550600 2 1016 +310550604 2 1016 +310550608 2 1016 +310550612 2 1016 +310550616 2 1016 +310550620 2 1016 +310550624 2 1016 +310550628 2 1016 +310550632 2 1016 +310550636 2 1016 +310550640 2 1016 +310550644 2 1016 +310550648 2 1016 +310550652 2 1016 +310550656 2 1016 +310550660 2 1016 +310550664 2 1016 +310550668 2 1016 +310550672 2 1016 +310550676 2 1016 +310550680 2 1016 +310550684 2 1016 +310550688 2 1016 +310550692 2 1016 +310550696 2 1016 +310550700 2 1016 +310550704 2 1016 +310550708 2 1016 +310550712 2 1016 +310550716 2 1016 +310550720 2 1016 +310554628 2 1016 +310554632 2 1016 +310554636 2 1016 +310554640 2 1016 +310554644 2 1016 +310554648 2 1016 +310554652 2 1016 +310554656 2 1016 +310554660 2 1016 +310554664 2 1016 +310554668 2 1016 +310554672 2 1016 +310554676 2 1016 +310554680 2 1016 +310554684 2 1016 +310554688 2 1016 +310554692 2 1016 +310554696 2 1016 +310554700 2 1016 +310554704 2 1016 +310554708 2 1016 +310554712 2 1016 +310554716 2 1016 +310554720 2 1016 +310554724 2 1016 +310554728 2 1016 +310554732 2 1016 +310554736 2 1016 +310554740 2 1016 +310554744 2 1016 +310554748 2 1016 +310554752 2 1016 +310554756 2 1016 +310554760 2 1016 +310554764 2 1016 +310554768 2 1016 +310554772 2 1016 +310554776 2 1016 +310554780 2 1016 +310554784 2 1016 +310554788 2 1016 +310554792 2 1016 +310554796 2 1016 +310554800 2 1016 +310554804 2 1016 +310554808 2 1016 +310554812 2 1016 +310554816 2 1016 +310558724 2 1016 +310558728 2 1016 +310558732 2 1016 +310558736 2 1016 +310558740 2 1016 +310558744 2 1016 +310558748 2 1016 +310558752 2 1016 +310558756 2 1016 +310558760 2 1016 +310558764 2 1016 +310558768 2 1016 +310558772 2 1016 +310558776 2 1016 +310558780 2 1016 +310558784 2 1016 +310558788 2 1016 +310558792 2 1016 +310558796 2 1016 +310558800 2 1016 +310558804 2 1016 +310558808 2 1016 +310558812 2 1016 +310558816 2 1016 +310558820 2 1016 +310558824 2 1016 +310558828 2 1016 +310558832 2 1016 +310558836 2 1016 +310558840 2 1016 +310558844 2 1016 +310558848 2 1016 +310558852 2 1016 +310558856 2 1016 +310558860 2 1016 +310558864 2 1016 +310558868 2 1016 +310558872 2 1016 +310558876 2 1016 +310558880 2 1016 +310558884 2 1016 +310558888 2 1016 +310558892 2 1016 +310558896 2 1016 +310558900 2 1016 +310558904 2 1016 +310558908 2 1016 +310558912 2 1016 +310562820 2 1016 +310562824 2 1016 +310562828 2 1016 +310562832 2 1016 +310562836 2 1016 +310562840 2 1016 +310562844 2 1016 +310562848 2 1016 +310562852 2 1016 +310562856 2 1016 +310562860 2 1016 +310562864 2 1016 +310562868 2 1016 +310562872 2 1016 +310562876 2 1016 +310562880 2 1016 +310562884 2 1016 +310562888 2 1016 +310562892 2 1016 +310562896 2 1016 +310562900 2 1016 +310562904 2 1016 +310562908 2 1016 +310562912 2 1016 +310562916 2 1016 +310562920 2 1016 +310562924 2 1016 +310562928 2 1016 +310562932 2 1016 +310562936 2 1016 +310562940 2 1016 +310562944 2 1016 +310562948 2 1016 +310562952 2 1016 +310562956 2 1016 +310562960 2 1016 +310562964 2 1016 +310562968 2 1016 +310562972 2 1016 +310562976 2 1016 +310562980 2 1016 +310562984 2 1016 +310562988 2 1016 +310562992 2 1016 +310562996 2 1016 +310563000 2 1016 +310563004 2 1016 +310563008 2 1016 +310566916 2 1016 +310566920 2 1016 +310566924 2 1016 +310566928 2 1016 +310566932 2 1016 +310566936 2 1016 +310566940 2 1016 +310566944 2 1016 +310566948 2 1016 +310566952 2 1016 +310566956 2 1016 +310566960 2 1016 +310566964 2 1016 +310566968 2 1016 +310566972 2 1016 +310566976 2 1016 +310566980 2 1016 +310566984 2 1016 +310566988 2 1016 +310566992 2 1016 +310566996 2 1016 +310567000 2 1016 +310567004 2 1016 +310567008 2 1016 +310567012 2 1016 +310567016 2 1016 +310567020 2 1016 +310567024 2 1016 +310567028 2 1016 +310567032 2 1016 +310567036 2 1016 +310567040 2 1016 +310567044 2 1016 +310567048 2 1016 +310567052 2 1016 +310567056 2 1016 +310567060 2 1016 +310567064 2 1016 +310567068 2 1016 +310567072 2 1016 +310567076 2 1016 +310567080 2 1016 +310567084 2 1016 +310567088 2 1016 +310567092 2 1016 +310567096 2 1016 +310567100 2 1016 +310567104 2 1016 +310571012 2 1016 +310571016 2 1016 +310571020 2 1016 +310571024 2 1016 +310571028 2 1016 +310571032 2 1016 +310571036 2 1016 +310571040 2 1016 +310571044 2 1016 +310571048 2 1016 +310571052 2 1016 +310571056 2 1016 +310571060 2 1016 +310571064 2 1016 +310571068 2 1016 +310571072 2 1016 +310571076 2 1016 +310571080 2 1016 +310571084 2 1016 +310571088 2 1016 +310571092 2 1016 +310571096 2 1016 +310571100 2 1016 +310571104 2 1016 +310571108 2 1016 +310571112 2 1016 +310571116 2 1016 +310571120 2 1016 +310571124 2 1016 +310571128 2 1016 +310571132 2 1016 +310571136 2 1016 +310571140 2 1016 +310571144 2 1016 +310571148 2 1016 +310571152 2 1016 +310571156 2 1016 +310571160 2 1016 +310571164 2 1016 +310571168 2 1016 +310571172 2 1016 +310571176 2 1016 +310571180 2 1016 +310571184 2 1016 +310571188 2 1016 +310571192 2 1016 +310571196 2 1016 +310571200 2 1016 +310575108 2 1016 +310575112 2 1016 +310575116 2 1016 +310575120 2 1016 +310575124 2 1016 +310575128 2 1016 +310575132 2 1016 +310575136 2 1016 +310575140 2 1016 +310575144 2 1016 +310575148 2 1016 +310575152 2 1016 +310575156 2 1016 +310575160 2 1016 +310575164 2 1016 +310575168 2 1016 +310575172 2 1016 +310575176 2 1016 +310575180 2 1016 +310575184 2 1016 +310575188 2 1016 +310575192 2 1016 +310575196 2 1016 +310575200 2 1016 +310575204 2 1016 +310575208 2 1016 +310575212 2 1016 +310575216 2 1016 +310575220 2 1016 +310575224 2 1016 +310575228 2 1016 +310575232 2 1016 +310575236 2 1016 +310575240 2 1016 +310575244 2 1016 +310575248 2 1016 +310575252 2 1016 +310575256 2 1016 +310575260 2 1016 +310575264 2 1016 +310575268 2 1016 +310575272 2 1016 +310575276 2 1016 +310575280 2 1016 +310575284 2 1016 +310575288 2 1016 +310575292 2 1016 +310575296 2 1016 +311431172 2 1016 +311431176 2 1016 +311431180 2 1016 +311431184 2 1016 +311431188 2 1016 +311431192 2 1016 +311431196 2 1016 +311431200 2 1016 +311431204 2 1016 +311431208 2 1016 +311431212 2 1016 +311431216 2 1016 +311431220 2 1016 +311431224 2 1016 +311431228 2 1016 +311431232 2 1016 +311431236 2 1016 +311431240 2 1016 +311431244 2 1016 +311431248 2 1016 +311431252 2 1016 +311431256 2 1016 +311431260 2 1016 +311431264 2 1016 +311431268 2 1016 +311431272 2 1016 +311431276 2 1016 +311431280 2 1016 +311431284 2 1016 +311431288 2 1016 +311431292 2 1016 +311431296 2 1016 +311431300 2 1016 +311431304 2 1016 +311431308 2 1016 +311431312 2 1016 +311431316 2 1016 +311431320 2 1016 +311431324 2 1016 +311431328 2 1016 +311431332 2 1016 +311431336 2 1016 +311431340 2 1016 +311431344 2 1016 +311431348 2 1016 +311431352 2 1016 +311431356 2 1016 +311431360 2 1016 +311435268 2 1016 +311435272 2 1016 +311435276 2 1016 +311435280 2 1016 +311435284 2 1016 +311435288 2 1016 +311435292 2 1016 +311435296 2 1016 +311435300 2 1016 +311435304 2 1016 +311435308 2 1016 +311435312 2 1016 +311435316 2 1016 +311435320 2 1016 +311435324 2 1016 +311435328 2 1016 +311435332 2 1016 +311435336 2 1016 +311435340 2 1016 +311435344 2 1016 +311435348 2 1016 +311435352 2 1016 +311435356 2 1016 +311435360 2 1016 +311435364 2 1016 +311435368 2 1016 +311435372 2 1016 +311435376 2 1016 +311435380 2 1016 +311435384 2 1016 +311435388 2 1016 +311435392 2 1016 +311435396 2 1016 +311435400 2 1016 +311435404 2 1016 +311435408 2 1016 +311435412 2 1016 +311435416 2 1016 +311435420 2 1016 +311435424 2 1016 +311435428 2 1016 +311435432 2 1016 +311435436 2 1016 +311435440 2 1016 +311435444 2 1016 +311435448 2 1016 +311435452 2 1016 +311435456 2 1016 +311439364 2 1016 +311439368 2 1016 +311439372 2 1016 +311439376 2 1016 +311439380 2 1016 +311439384 2 1016 +311439388 2 1016 +311439392 2 1016 +311439396 2 1016 +311439400 2 1016 +311439404 2 1016 +311439408 2 1016 +311439412 2 1016 +311439416 2 1016 +311439420 2 1016 +311439424 2 1016 +311439428 2 1016 +311439432 2 1016 +311439436 2 1016 +311439440 2 1016 +311439444 2 1016 +311439448 2 1016 +311439452 2 1016 +311439456 2 1016 +311439460 2 1016 +311439464 2 1016 +311439468 2 1016 +311439472 2 1016 +311439476 2 1016 +311439480 2 1016 +311439484 2 1016 +311439488 2 1016 +311439492 2 1016 +311439496 2 1016 +311439500 2 1016 +311439504 2 1016 +311439508 2 1016 +311439512 2 1016 +311439516 2 1016 +311439520 2 1016 +311439524 2 1016 +311439528 2 1016 +311439532 2 1016 +311439536 2 1016 +311439540 2 1016 +311439544 2 1016 +311439548 2 1016 +311439552 2 1016 +311443460 2 1016 +311443464 2 1016 +311443468 2 1016 +311443472 2 1016 +311443476 2 1016 +311443480 2 1016 +311443484 2 1016 +311443488 2 1016 +311443492 2 1016 +311443496 2 1016 +311443500 2 1016 +311443504 2 1016 +311443508 2 1016 +311443512 2 1016 +311443516 2 1016 +311443520 2 1016 +311443524 2 1016 +311443528 2 1016 +311443532 2 1016 +311443536 2 1016 +311443540 2 1016 +311443544 2 1016 +311443548 2 1016 +311443552 2 1016 +311443556 2 1016 +311443560 2 1016 +311443564 2 1016 +311443568 2 1016 +311443572 2 1016 +311443576 2 1016 +311443580 2 1016 +311443584 2 1016 +311443588 2 1016 +311443592 2 1016 +311443596 2 1016 +311443600 2 1016 +311443604 2 1016 +311443608 2 1016 +311443612 2 1016 +311443616 2 1016 +311443620 2 1016 +311443624 2 1016 +311443628 2 1016 +311443632 2 1016 +311443636 2 1016 +311443640 2 1016 +311443644 2 1016 +311443648 2 1016 +311447556 2 1016 +311447560 2 1016 +311447564 2 1016 +311447568 2 1016 +311447572 2 1016 +311447576 2 1016 +311447580 2 1016 +311447584 2 1016 +311447588 2 1016 +311447592 2 1016 +311447596 2 1016 +311447600 2 1016 +311447604 2 1016 +311447608 2 1016 +311447612 2 1016 +311447616 2 1016 +311447620 2 1016 +311447624 2 1016 +311447628 2 1016 +311447632 2 1016 +311447636 2 1016 +311447640 2 1016 +311447644 2 1016 +311447648 2 1016 +311447652 2 1016 +311447656 2 1016 +311447660 2 1016 +311447664 2 1016 +311447668 2 1016 +311447672 2 1016 +311447676 2 1016 +311447680 2 1016 +311447684 2 1016 +311447688 2 1016 +311447692 2 1016 +311447696 2 1016 +311447700 2 1016 +311447704 2 1016 +311447708 2 1016 +311447712 2 1016 +311447716 2 1016 +311447720 2 1016 +311447724 2 1016 +311447728 2 1016 +311447732 2 1016 +311447736 2 1016 +311447740 2 1016 +311447744 2 1016 +311451652 2 1016 +311451656 2 1016 +311451660 2 1016 +311451664 2 1016 +311451668 2 1016 +311451672 2 1016 +311451676 2 1016 +311451680 2 1016 +311451684 2 1016 +311451688 2 1016 +311451692 2 1016 +311451696 2 1016 +311451700 2 1016 +311451704 2 1016 +311451708 2 1016 +311451712 2 1016 +311451716 2 1016 +311451720 2 1016 +311451724 2 1016 +311451728 2 1016 +311451732 2 1016 +311451736 2 1016 +311451740 2 1016 +311451744 2 1016 +311451748 2 1016 +311451752 2 1016 +311451756 2 1016 +311451760 2 1016 +311451764 2 1016 +311451768 2 1016 +311451772 2 1016 +311451776 2 1016 +311451780 2 1016 +311451784 2 1016 +311451788 2 1016 +311451792 2 1016 +311451796 2 1016 +311451800 2 1016 +311451804 2 1016 +311451808 2 1016 +311451812 2 1016 +311451816 2 1016 +311451820 2 1016 +311451824 2 1016 +311451828 2 1016 +311451832 2 1016 +311451836 2 1016 +311451840 2 1016 +311455748 2 1016 +311455752 2 1016 +311455756 2 1016 +311455760 2 1016 +311455764 2 1016 +311455768 2 1016 +311455772 2 1016 +311455776 2 1016 +311455780 2 1016 +311455784 2 1016 +311455788 2 1016 +311455792 2 1016 +311455796 2 1016 +311455800 2 1016 +311455804 2 1016 +311455808 2 1016 +311455812 2 1016 +311455816 2 1016 +311455820 2 1016 +311455824 2 1016 +311455828 2 1016 +311455832 2 1016 +311455836 2 1016 +311455840 2 1016 +311455844 2 1016 +311455848 2 1016 +311455852 2 1016 +311455856 2 1016 +311455860 2 1016 +311455864 2 1016 +311455868 2 1016 +311455872 2 1016 +311455876 2 1016 +311455880 2 1016 +311455884 2 1016 +311455888 2 1016 +311455892 2 1016 +311455896 2 1016 +311455900 2 1016 +311455904 2 1016 +311455908 2 1016 +311455912 2 1016 +311455916 2 1016 +311455920 2 1016 +311455924 2 1016 +311455928 2 1016 +311455932 2 1016 +311455936 2 1016 +311459844 2 1016 +311459848 2 1016 +311459852 2 1016 +311459856 2 1016 +311459860 2 1016 +311459864 2 1016 +311459868 2 1016 +311459872 2 1016 +311459876 2 1016 +311459880 2 1016 +311459884 2 1016 +311459888 2 1016 +311459892 2 1016 +311459896 2 1016 +311459900 2 1016 +311459904 2 1016 +311459908 2 1016 +311459912 2 1016 +311459916 2 1016 +311459920 2 1016 +311459924 2 1016 +311459928 2 1016 +311459932 2 1016 +311459936 2 1016 +311459940 2 1016 +311459944 2 1016 +311459948 2 1016 +311459952 2 1016 +311459956 2 1016 +311459960 2 1016 +311459964 2 1016 +311459968 2 1016 +311459972 2 1016 +311459976 2 1016 +311459980 2 1016 +311459984 2 1016 +311459988 2 1016 +311459992 2 1016 +311459996 2 1016 +311460000 2 1016 +311460004 2 1016 +311460008 2 1016 +311460012 2 1016 +311460016 2 1016 +311460020 2 1016 +311460024 2 1016 +311460028 2 1016 +311460032 2 1016 +311463940 2 1016 +311463944 2 1016 +311463948 2 1016 +311463952 2 1016 +311463956 2 1016 +311463960 2 1016 +311463964 2 1016 +311463968 2 1016 +311463972 2 1016 +311463976 2 1016 +311463980 2 1016 +311463984 2 1016 +311463988 2 1016 +311463992 2 1016 +311463996 2 1016 +311464000 2 1016 +311464004 2 1016 +311464008 2 1016 +311464012 2 1016 +311464016 2 1016 +311464020 2 1016 +311464024 2 1016 +311464028 2 1016 +311464032 2 1016 +311464036 2 1016 +311464040 2 1016 +311464044 2 1016 +311464048 2 1016 +311464052 2 1016 +311464056 2 1016 +311464060 2 1016 +311464064 2 1016 +311464068 2 1016 +311464072 2 1016 +311464076 2 1016 +311464080 2 1016 +311464084 2 1016 +311464088 2 1016 +311464092 2 1016 +311464096 2 1016 +311464100 2 1016 +311464104 2 1016 +311464108 2 1016 +311464112 2 1016 +311464116 2 1016 +311464120 2 1016 +311464124 2 1016 +311464128 2 1016 +311468036 2 1016 +311468040 2 1016 +311468044 2 1016 +311468048 2 1016 +311468052 2 1016 +311468056 2 1016 +311468060 2 1016 +311468064 2 1016 +311468068 2 1016 +311468072 2 1016 +311468076 2 1016 +311468080 2 1016 +311468084 2 1016 +311468088 2 1016 +311468092 2 1016 +311468096 2 1016 +311468100 2 1016 +311468104 2 1016 +311468108 2 1016 +311468112 2 1016 +311468116 2 1016 +311468120 2 1016 +311468124 2 1016 +311468128 2 1016 +311468132 2 1016 +311468136 2 1016 +311468140 2 1016 +311468144 2 1016 +311468148 2 1016 +311468152 2 1016 +311468156 2 1016 +311468160 2 1016 +311468164 2 1016 +311468168 2 1016 +311468172 2 1016 +311468176 2 1016 +311468180 2 1016 +311468184 2 1016 +311468188 2 1016 +311468192 2 1016 +311468196 2 1016 +311468200 2 1016 +311468204 2 1016 +311468208 2 1016 +311468212 2 1016 +311468216 2 1016 +311468220 2 1016 +311468224 2 1016 +311472132 2 1016 +311472136 2 1016 +311472140 2 1016 +311472144 2 1016 +311472148 2 1016 +311472152 2 1016 +311472156 2 1016 +311472160 2 1016 +311472164 2 1016 +311472168 2 1016 +311472172 2 1016 +311472176 2 1016 +311472180 2 1016 +311472184 2 1016 +311472188 2 1016 +311472192 2 1016 +311472196 2 1016 +311472200 2 1016 +311472204 2 1016 +311472208 2 1016 +311472212 2 1016 +311472216 2 1016 +311472220 2 1016 +311472224 2 1016 +311472228 2 1016 +311472232 2 1016 +311472236 2 1016 +311472240 2 1016 +311472244 2 1016 +311472248 2 1016 +311472252 2 1016 +311472256 2 1016 +311472260 2 1016 +311472264 2 1016 +311472268 2 1016 +311472272 2 1016 +311472276 2 1016 +311472280 2 1016 +311472284 2 1016 +311472288 2 1016 +311472292 2 1016 +311472296 2 1016 +311472300 2 1016 +311472304 2 1016 +311472308 2 1016 +311472312 2 1016 +311472316 2 1016 +311472320 2 1016 +311476228 2 1016 +311476232 2 1016 +311476236 2 1016 +311476240 2 1016 +311476244 2 1016 +311476248 2 1016 +311476252 2 1016 +311476256 2 1016 +311476260 2 1016 +311476264 2 1016 +311476268 2 1016 +311476272 2 1016 +311476276 2 1016 +311476280 2 1016 +311476284 2 1016 +311476288 2 1016 +311476292 2 1016 +311476296 2 1016 +311476300 2 1016 +311476304 2 1016 +311476308 2 1016 +311476312 2 1016 +311476316 2 1016 +311476320 2 1016 +311476324 2 1016 +311476328 2 1016 +311476332 2 1016 +311476336 2 1016 +311476340 2 1016 +311476344 2 1016 +311476348 2 1016 +311476352 2 1016 +311476356 2 1016 +311476360 2 1016 +311476364 2 1016 +311476368 2 1016 +311476372 2 1016 +311476376 2 1016 +311476380 2 1016 +311476384 2 1016 +311476388 2 1016 +311476392 2 1016 +311476396 2 1016 +311476400 2 1016 +311476404 2 1016 +311476408 2 1016 +311476412 2 1016 +311476416 2 1016 +311480324 2 1016 +311480328 2 1016 +311480332 2 1016 +311480336 2 1016 +311480340 2 1016 +311480344 2 1016 +311480348 2 1016 +311480352 2 1016 +311480356 2 1016 +311480360 2 1016 +311480364 2 1016 +311480368 2 1016 +311480372 2 1016 +311480376 2 1016 +311480380 2 1016 +311480384 2 1016 +311480388 2 1016 +311480392 2 1016 +311480396 2 1016 +311480400 2 1016 +311480404 2 1016 +311480408 2 1016 +311480412 2 1016 +311480416 2 1016 +311480420 2 1016 +311480424 2 1016 +311480428 2 1016 +311480432 2 1016 +311480436 2 1016 +311480440 2 1016 +311480444 2 1016 +311480448 2 1016 +311480452 2 1016 +311480456 2 1016 +311480460 2 1016 +311480464 2 1016 +311480468 2 1016 +311480472 2 1016 +311480476 2 1016 +311480480 2 1016 +311480484 2 1016 +311480488 2 1016 +311480492 2 1016 +311480496 2 1016 +311480500 2 1016 +311480504 2 1016 +311480508 2 1016 +311480512 2 1016 +311484420 2 1016 +311484424 2 1016 +311484428 2 1016 +311484432 2 1016 +311484436 2 1016 +311484440 2 1016 +311484444 2 1016 +311484448 2 1016 +311484452 2 1016 +311484456 2 1016 +311484460 2 1016 +311484464 2 1016 +311484468 2 1016 +311484472 2 1016 +311484476 2 1016 +311484480 2 1016 +311484484 2 1016 +311484488 2 1016 +311484492 2 1016 +311484496 2 1016 +311484500 2 1016 +311484504 2 1016 +311484508 2 1016 +311484512 2 1016 +311484516 2 1016 +311484520 2 1016 +311484524 2 1016 +311484528 2 1016 +311484532 2 1016 +311484536 2 1016 +311484540 2 1016 +311484544 2 1016 +311484548 2 1016 +311484552 2 1016 +311484556 2 1016 +311484560 2 1016 +311484564 2 1016 +311484568 2 1016 +311484572 2 1016 +311484576 2 1016 +311484580 2 1016 +311484584 2 1016 +311484588 2 1016 +311484592 2 1016 +311484596 2 1016 +311484600 2 1016 +311484604 2 1016 +311484608 2 1016 +311488516 2 1016 +311488520 2 1016 +311488524 2 1016 +311488528 2 1016 +311488532 2 1016 +311488536 2 1016 +311488540 2 1016 +311488544 2 1016 +311488548 2 1016 +311488552 2 1016 +311488556 2 1016 +311488560 2 1016 +311488564 2 1016 +311488568 2 1016 +311488572 2 1016 +311488576 2 1016 +311488580 2 1016 +311488584 2 1016 +311488588 2 1016 +311488592 2 1016 +311488596 2 1016 +311488600 2 1016 +311488604 2 1016 +311488608 2 1016 +311488612 2 1016 +311488616 2 1016 +311488620 2 1016 +311488624 2 1016 +311488628 2 1016 +311488632 2 1016 +311488636 2 1016 +311488640 2 1016 +311488644 2 1016 +311488648 2 1016 +311488652 2 1016 +311488656 2 1016 +311488660 2 1016 +311488664 2 1016 +311488668 2 1016 +311488672 2 1016 +311488676 2 1016 +311488680 2 1016 +311488684 2 1016 +311488688 2 1016 +311488692 2 1016 +311488696 2 1016 +311488700 2 1016 +311488704 2 1016 +311492612 2 1016 +311492616 2 1016 +311492620 2 1016 +311492624 2 1016 +311492628 2 1016 +311492632 2 1016 +311492636 2 1016 +311492640 2 1016 +311492644 2 1016 +311492648 2 1016 +311492652 2 1016 +311492656 2 1016 +311492660 2 1016 +311492664 2 1016 +311492668 2 1016 +311492672 2 1016 +311492676 2 1016 +311492680 2 1016 +311492684 2 1016 +311492688 2 1016 +311492692 2 1016 +311492696 2 1016 +311492700 2 1016 +311492704 2 1016 +311492708 2 1016 +311492712 2 1016 +311492716 2 1016 +311492720 2 1016 +311492724 2 1016 +311492728 2 1016 +311492732 2 1016 +311492736 2 1016 +311492740 2 1016 +311492744 2 1016 +311492748 2 1016 +311492752 2 1016 +311492756 2 1016 +311492760 2 1016 +311492764 2 1016 +311492768 2 1016 +311492772 2 1016 +311492776 2 1016 +311492780 2 1016 +311492784 2 1016 +311492788 2 1016 +311492792 2 1016 +311492796 2 1016 +311492800 2 1016 +311496708 2 1016 +311496712 2 1016 +311496716 2 1016 +311496720 2 1016 +311496724 2 1016 +311496728 2 1016 +311496732 2 1016 +311496736 2 1016 +311496740 2 1016 +311496744 2 1016 +311496748 2 1016 +311496752 2 1016 +311496756 2 1016 +311496760 2 1016 +311496764 2 1016 +311496768 2 1016 +311496772 2 1016 +311496776 2 1016 +311496780 2 1016 +311496784 2 1016 +311496788 2 1016 +311496792 2 1016 +311496796 2 1016 +311496800 2 1016 +311496804 2 1016 +311496808 2 1016 +311496812 2 1016 +311496816 2 1016 +311496820 2 1016 +311496824 2 1016 +311496828 2 1016 +311496832 2 1016 +311496836 2 1016 +311496840 2 1016 +311496844 2 1016 +311496848 2 1016 +311496852 2 1016 +311496856 2 1016 +311496860 2 1016 +311496864 2 1016 +311496868 2 1016 +311496872 2 1016 +311496876 2 1016 +311496880 2 1016 +311496884 2 1016 +311496888 2 1016 +311496892 2 1016 +311496896 2 1016 +311500804 2 1016 +311500808 2 1016 +311500812 2 1016 +311500816 2 1016 +311500820 2 1016 +311500824 2 1016 +311500828 2 1016 +311500832 2 1016 +311500836 2 1016 +311500840 2 1016 +311500844 2 1016 +311500848 2 1016 +311500852 2 1016 +311500856 2 1016 +311500860 2 1016 +311500864 2 1016 +311500868 2 1016 +311500872 2 1016 +311500876 2 1016 +311500880 2 1016 +311500884 2 1016 +311500888 2 1016 +311500892 2 1016 +311500896 2 1016 +311500900 2 1016 +311500904 2 1016 +311500908 2 1016 +311500912 2 1016 +311500916 2 1016 +311500920 2 1016 +311500924 2 1016 +311500928 2 1016 +311500932 2 1016 +311500936 2 1016 +311500940 2 1016 +311500944 2 1016 +311500948 2 1016 +311500952 2 1016 +311500956 2 1016 +311500960 2 1016 +311500964 2 1016 +311500968 2 1016 +311500972 2 1016 +311500976 2 1016 +311500980 2 1016 +311500984 2 1016 +311500988 2 1016 +311500992 2 1016 +311504900 2 1016 +311504904 2 1016 +311504908 2 1016 +311504912 2 1016 +311504916 2 1016 +311504920 2 1016 +311504924 2 1016 +311504928 2 1016 +311504932 2 1016 +311504936 2 1016 +311504940 2 1016 +311504944 2 1016 +311504948 2 1016 +311504952 2 1016 +311504956 2 1016 +311504960 2 1016 +311504964 2 1016 +311504968 2 1016 +311504972 2 1016 +311504976 2 1016 +311504980 2 1016 +311504984 2 1016 +311504988 2 1016 +311504992 2 1016 +311504996 2 1016 +311505000 2 1016 +311505004 2 1016 +311505008 2 1016 +311505012 2 1016 +311505016 2 1016 +311505020 2 1016 +311505024 2 1016 +311505028 2 1016 +311505032 2 1016 +311505036 2 1016 +311505040 2 1016 +311505044 2 1016 +311505048 2 1016 +311505052 2 1016 +311505056 2 1016 +311505060 2 1016 +311505064 2 1016 +311505068 2 1016 +311505072 2 1016 +311505076 2 1016 +311505080 2 1016 +311505084 2 1016 +311505088 2 1016 +311508996 2 1016 +311509000 2 1016 +311509004 2 1016 +311509008 2 1016 +311509012 2 1016 +311509016 2 1016 +311509020 2 1016 +311509024 2 1016 +311509028 2 1016 +311509032 2 1016 +311509036 2 1016 +311509040 2 1016 +311509044 2 1016 +311509048 2 1016 +311509052 2 1016 +311509056 2 1016 +311509060 2 1016 +311509064 2 1016 +311509068 2 1016 +311509072 2 1016 +311509076 2 1016 +311509080 2 1016 +311509084 2 1016 +311509088 2 1016 +311509092 2 1016 +311509096 2 1016 +311509100 2 1016 +311509104 2 1016 +311509108 2 1016 +311509112 2 1016 +311509116 2 1016 +311509120 2 1016 +311509124 2 1016 +311509128 2 1016 +311509132 2 1016 +311509136 2 1016 +311509140 2 1016 +311509144 2 1016 +311509148 2 1016 +311509152 2 1016 +311509156 2 1016 +311509160 2 1016 +311509164 2 1016 +311509168 2 1016 +311509172 2 1016 +311509176 2 1016 +311509180 2 1016 +311509184 2 1016 +311513092 2 1016 +311513096 2 1016 +311513100 2 1016 +311513104 2 1016 +311513108 2 1016 +311513112 2 1016 +311513116 2 1016 +311513120 2 1016 +311513124 2 1016 +311513128 2 1016 +311513132 2 1016 +311513136 2 1016 +311513140 2 1016 +311513144 2 1016 +311513148 2 1016 +311513152 2 1016 +311513156 2 1016 +311513160 2 1016 +311513164 2 1016 +311513168 2 1016 +311513172 2 1016 +311513176 2 1016 +311513180 2 1016 +311513184 2 1016 +311513188 2 1016 +311513192 2 1016 +311513196 2 1016 +311513200 2 1016 +311513204 2 1016 +311513208 2 1016 +311513212 2 1016 +311513216 2 1016 +311513220 2 1016 +311513224 2 1016 +311513228 2 1016 +311513232 2 1016 +311513236 2 1016 +311513240 2 1016 +311513244 2 1016 +311513248 2 1016 +311513252 2 1016 +311513256 2 1016 +311513260 2 1016 +311513264 2 1016 +311513268 2 1016 +311513272 2 1016 +311513276 2 1016 +311513280 2 1016 +311517188 2 1016 +311517192 2 1016 +311517196 2 1016 +311517200 2 1016 +311517204 2 1016 +311517208 2 1016 +311517212 2 1016 +311517216 2 1016 +311517220 2 1016 +311517224 2 1016 +311517228 2 1016 +311517232 2 1016 +311517236 2 1016 +311517240 2 1016 +311517244 2 1016 +311517248 2 1016 +311517252 2 1016 +311517256 2 1016 +311517260 2 1016 +311517264 2 1016 +311517268 2 1016 +311517272 2 1016 +311517276 2 1016 +311517280 2 1016 +311517284 2 1016 +311517288 2 1016 +311517292 2 1016 +311517296 2 1016 +311517300 2 1016 +311517304 2 1016 +311517308 2 1016 +311517312 2 1016 +311517316 2 1016 +311517320 2 1016 +311517324 2 1016 +311517328 2 1016 +311517332 2 1016 +311517336 2 1016 +311517340 2 1016 +311517344 2 1016 +311517348 2 1016 +311517352 2 1016 +311517356 2 1016 +311517360 2 1016 +311517364 2 1016 +311517368 2 1016 +311517372 2 1016 +311517376 2 1016 +311521284 2 1016 +311521288 2 1016 +311521292 2 1016 +311521296 2 1016 +311521300 2 1016 +311521304 2 1016 +311521308 2 1016 +311521312 2 1016 +311521316 2 1016 +311521320 2 1016 +311521324 2 1016 +311521328 2 1016 +311521332 2 1016 +311521336 2 1016 +311521340 2 1016 +311521344 2 1016 +311521348 2 1016 +311521352 2 1016 +311521356 2 1016 +311521360 2 1016 +311521364 2 1016 +311521368 2 1016 +311521372 2 1016 +311521376 2 1016 +311521380 2 1016 +311521384 2 1016 +311521388 2 1016 +311521392 2 1016 +311521396 2 1016 +311521400 2 1016 +311521404 2 1016 +311521408 2 1016 +311521412 2 1016 +311521416 2 1016 +311521420 2 1016 +311521424 2 1016 +311521428 2 1016 +311521432 2 1016 +311521436 2 1016 +311521440 2 1016 +311521444 2 1016 +311521448 2 1016 +311521452 2 1016 +311521456 2 1016 +311521460 2 1016 +311521464 2 1016 +311521468 2 1016 +311521472 2 1016 +311525380 2 1016 +311525384 2 1016 +311525388 2 1016 +311525392 2 1016 +311525396 2 1016 +311525400 2 1016 +311525404 2 1016 +311525408 2 1016 +311525412 2 1016 +311525416 2 1016 +311525420 2 1016 +311525424 2 1016 +311525428 2 1016 +311525432 2 1016 +311525436 2 1016 +311525440 2 1016 +311525444 2 1016 +311525448 2 1016 +311525452 2 1016 +311525456 2 1016 +311525460 2 1016 +311525464 2 1016 +311525468 2 1016 +311525472 2 1016 +311525476 2 1016 +311525480 2 1016 +311525484 2 1016 +311525488 2 1016 +311525492 2 1016 +311525496 2 1016 +311525500 2 1016 +311525504 2 1016 +311525508 2 1016 +311525512 2 1016 +311525516 2 1016 +311525520 2 1016 +311525524 2 1016 +311525528 2 1016 +311525532 2 1016 +311525536 2 1016 +311525540 2 1016 +311525544 2 1016 +311525548 2 1016 +311525552 2 1016 +311525556 2 1016 +311525560 2 1016 +311525564 2 1016 +311525568 2 1016 +311529476 2 1016 +311529480 2 1016 +311529484 2 1016 +311529488 2 1016 +311529492 2 1016 +311529496 2 1016 +311529500 2 1016 +311529504 2 1016 +311529508 2 1016 +311529512 2 1016 +311529516 2 1016 +311529520 2 1016 +311529524 2 1016 +311529528 2 1016 +311529532 2 1016 +311529536 2 1016 +311529540 2 1016 +311529544 2 1016 +311529548 2 1016 +311529552 2 1016 +311529556 2 1016 +311529560 2 1016 +311529564 2 1016 +311529568 2 1016 +311529572 2 1016 +311529576 2 1016 +311529580 2 1016 +311529584 2 1016 +311529588 2 1016 +311529592 2 1016 +311529596 2 1016 +311529600 2 1016 +311529604 2 1016 +311529608 2 1016 +311529612 2 1016 +311529616 2 1016 +311529620 2 1016 +311529624 2 1016 +311529628 2 1016 +311529632 2 1016 +311529636 2 1016 +311529640 2 1016 +311529644 2 1016 +311529648 2 1016 +311529652 2 1016 +311529656 2 1016 +311529660 2 1016 +311529664 2 1016 +311533572 2 1016 +311533576 2 1016 +311533580 2 1016 +311533584 2 1016 +311533588 2 1016 +311533592 2 1016 +311533596 2 1016 +311533600 2 1016 +311533604 2 1016 +311533608 2 1016 +311533612 2 1016 +311533616 2 1016 +311533620 2 1016 +311533624 2 1016 +311533628 2 1016 +311533632 2 1016 +311533636 2 1016 +311533640 2 1016 +311533644 2 1016 +311533648 2 1016 +311533652 2 1016 +311533656 2 1016 +311533660 2 1016 +311533664 2 1016 +311533668 2 1016 +311533672 2 1016 +311533676 2 1016 +311533680 2 1016 +311533684 2 1016 +311533688 2 1016 +311533692 2 1016 +311533696 2 1016 +311533700 2 1016 +311533704 2 1016 +311533708 2 1016 +311533712 2 1016 +311533716 2 1016 +311533720 2 1016 +311533724 2 1016 +311533728 2 1016 +311533732 2 1016 +311533736 2 1016 +311533740 2 1016 +311533744 2 1016 +311533748 2 1016 +311533752 2 1016 +311533756 2 1016 +311533760 2 1016 +311537668 2 1016 +311537672 2 1016 +311537676 2 1016 +311537680 2 1016 +311537684 2 1016 +311537688 2 1016 +311537692 2 1016 +311537696 2 1016 +311537700 2 1016 +311537704 2 1016 +311537708 2 1016 +311537712 2 1016 +311537716 2 1016 +311537720 2 1016 +311537724 2 1016 +311537728 2 1016 +311537732 2 1016 +311537736 2 1016 +311537740 2 1016 +311537744 2 1016 +311537748 2 1016 +311537752 2 1016 +311537756 2 1016 +311537760 2 1016 +311537764 2 1016 +311537768 2 1016 +311537772 2 1016 +311537776 2 1016 +311537780 2 1016 +311537784 2 1016 +311537788 2 1016 +311537792 2 1016 +311537796 2 1016 +311537800 2 1016 +311537804 2 1016 +311537808 2 1016 +311537812 2 1016 +311537816 2 1016 +311537820 2 1016 +311537824 2 1016 +311537828 2 1016 +311537832 2 1016 +311537836 2 1016 +311537840 2 1016 +311537844 2 1016 +311537848 2 1016 +311537852 2 1016 +311537856 2 1016 +311541764 2 1016 +311541768 2 1016 +311541772 2 1016 +311541776 2 1016 +311541780 2 1016 +311541784 2 1016 +311541788 2 1016 +311541792 2 1016 +311541796 2 1016 +311541800 2 1016 +311541804 2 1016 +311541808 2 1016 +311541812 2 1016 +311541816 2 1016 +311541820 2 1016 +311541824 2 1016 +311541828 2 1016 +311541832 2 1016 +311541836 2 1016 +311541840 2 1016 +311541844 2 1016 +311541848 2 1016 +311541852 2 1016 +311541856 2 1016 +311541860 2 1016 +311541864 2 1016 +311541868 2 1016 +311541872 2 1016 +311541876 2 1016 +311541880 2 1016 +311541884 2 1016 +311541888 2 1016 +311541892 2 1016 +311541896 2 1016 +311541900 2 1016 +311541904 2 1016 +311541908 2 1016 +311541912 2 1016 +311541916 2 1016 +311541920 2 1016 +311541924 2 1016 +311541928 2 1016 +311541932 2 1016 +311541936 2 1016 +311541940 2 1016 +311541944 2 1016 +311541948 2 1016 +311541952 2 1016 +311545860 2 1016 +311545864 2 1016 +311545868 2 1016 +311545872 2 1016 +311545876 2 1016 +311545880 2 1016 +311545884 2 1016 +311545888 2 1016 +311545892 2 1016 +311545896 2 1016 +311545900 2 1016 +311545904 2 1016 +311545908 2 1016 +311545912 2 1016 +311545916 2 1016 +311545920 2 1016 +311545924 2 1016 +311545928 2 1016 +311545932 2 1016 +311545936 2 1016 +311545940 2 1016 +311545944 2 1016 +311545948 2 1016 +311545952 2 1016 +311545956 2 1016 +311545960 2 1016 +311545964 2 1016 +311545968 2 1016 +311545972 2 1016 +311545976 2 1016 +311545980 2 1016 +311545984 2 1016 +311545988 2 1016 +311545992 2 1016 +311545996 2 1016 +311546000 2 1016 +311546004 2 1016 +311546008 2 1016 +311546012 2 1016 +311546016 2 1016 +311546020 2 1016 +311546024 2 1016 +311546028 2 1016 +311546032 2 1016 +311546036 2 1016 +311546040 2 1016 +311546044 2 1016 +311546048 2 1016 +311549956 2 1016 +311549960 2 1016 +311549964 2 1016 +311549968 2 1016 +311549972 2 1016 +311549976 2 1016 +311549980 2 1016 +311549984 2 1016 +311549988 2 1016 +311549992 2 1016 +311549996 2 1016 +311550000 2 1016 +311550004 2 1016 +311550008 2 1016 +311550012 2 1016 +311550016 2 1016 +311550020 2 1016 +311550024 2 1016 +311550028 2 1016 +311550032 2 1016 +311550036 2 1016 +311550040 2 1016 +311550044 2 1016 +311550048 2 1016 +311550052 2 1016 +311550056 2 1016 +311550060 2 1016 +311550064 2 1016 +311550068 2 1016 +311550072 2 1016 +311550076 2 1016 +311550080 2 1016 +311550084 2 1016 +311550088 2 1016 +311550092 2 1016 +311550096 2 1016 +311550100 2 1016 +311550104 2 1016 +311550108 2 1016 +311550112 2 1016 +311550116 2 1016 +311550120 2 1016 +311550124 2 1016 +311550128 2 1016 +311550132 2 1016 +311550136 2 1016 +311550140 2 1016 +311550144 2 1016 +311554052 2 1016 +311554056 2 1016 +311554060 2 1016 +311554064 2 1016 +311554068 2 1016 +311554072 2 1016 +311554076 2 1016 +311554080 2 1016 +311554084 2 1016 +311554088 2 1016 +311554092 2 1016 +311554096 2 1016 +311554100 2 1016 +311554104 2 1016 +311554108 2 1016 +311554112 2 1016 +311554116 2 1016 +311554120 2 1016 +311554124 2 1016 +311554128 2 1016 +311554132 2 1016 +311554136 2 1016 +311554140 2 1016 +311554144 2 1016 +311554148 2 1016 +311554152 2 1016 +311554156 2 1016 +311554160 2 1016 +311554164 2 1016 +311554168 2 1016 +311554172 2 1016 +311554176 2 1016 +311554180 2 1016 +311554184 2 1016 +311554188 2 1016 +311554192 2 1016 +311554196 2 1016 +311554200 2 1016 +311554204 2 1016 +311554208 2 1016 +311554212 2 1016 +311554216 2 1016 +311554220 2 1016 +311554224 2 1016 +311554228 2 1016 +311554232 2 1016 +311554236 2 1016 +311554240 2 1016 +311558148 2 1016 +311558152 2 1016 +311558156 2 1016 +311558160 2 1016 +311558164 2 1016 +311558168 2 1016 +311558172 2 1016 +311558176 2 1016 +311558180 2 1016 +311558184 2 1016 +311558188 2 1016 +311558192 2 1016 +311558196 2 1016 +311558200 2 1016 +311558204 2 1016 +311558208 2 1016 +311558212 2 1016 +311558216 2 1016 +311558220 2 1016 +311558224 2 1016 +311558228 2 1016 +311558232 2 1016 +311558236 2 1016 +311558240 2 1016 +311558244 2 1016 +311558248 2 1016 +311558252 2 1016 +311558256 2 1016 +311558260 2 1016 +311558264 2 1016 +311558268 2 1016 +311558272 2 1016 +311558276 2 1016 +311558280 2 1016 +311558284 2 1016 +311558288 2 1016 +311558292 2 1016 +311558296 2 1016 +311558300 2 1016 +311558304 2 1016 +311558308 2 1016 +311558312 2 1016 +311558316 2 1016 +311558320 2 1016 +311558324 2 1016 +311558328 2 1016 +311558332 2 1016 +311558336 2 1016 +311562244 2 1016 +311562248 2 1016 +311562252 2 1016 +311562256 2 1016 +311562260 2 1016 +311562264 2 1016 +311562268 2 1016 +311562272 2 1016 +311562276 2 1016 +311562280 2 1016 +311562284 2 1016 +311562288 2 1016 +311562292 2 1016 +311562296 2 1016 +311562300 2 1016 +311562304 2 1016 +311562308 2 1016 +311562312 2 1016 +311562316 2 1016 +311562320 2 1016 +311562324 2 1016 +311562328 2 1016 +311562332 2 1016 +311562336 2 1016 +311562340 2 1016 +311562344 2 1016 +311562348 2 1016 +311562352 2 1016 +311562356 2 1016 +311562360 2 1016 +311562364 2 1016 +311562368 2 1016 +311562372 2 1016 +311562376 2 1016 +311562380 2 1016 +311562384 2 1016 +311562388 2 1016 +311562392 2 1016 +311562396 2 1016 +311562400 2 1016 +311562404 2 1016 +311562408 2 1016 +311562412 2 1016 +311562416 2 1016 +311562420 2 1016 +311562424 2 1016 +311562428 2 1016 +311562432 2 1016 +311566340 2 1016 +311566344 2 1016 +311566348 2 1016 +311566352 2 1016 +311566356 2 1016 +311566360 2 1016 +311566364 2 1016 +311566368 2 1016 +311566372 2 1016 +311566376 2 1016 +311566380 2 1016 +311566384 2 1016 +311566388 2 1016 +311566392 2 1016 +311566396 2 1016 +311566400 2 1016 +311566404 2 1016 +311566408 2 1016 +311566412 2 1016 +311566416 2 1016 +311566420 2 1016 +311566424 2 1016 +311566428 2 1016 +311566432 2 1016 +311566436 2 1016 +311566440 2 1016 +311566444 2 1016 +311566448 2 1016 +311566452 2 1016 +311566456 2 1016 +311566460 2 1016 +311566464 2 1016 +311566468 2 1016 +311566472 2 1016 +311566476 2 1016 +311566480 2 1016 +311566484 2 1016 +311566488 2 1016 +311566492 2 1016 +311566496 2 1016 +311566500 2 1016 +311566504 2 1016 +311566508 2 1016 +311566512 2 1016 +311566516 2 1016 +311566520 2 1016 +311566524 2 1016 +311566528 2 1016 +311570436 2 1016 +311570440 2 1016 +311570444 2 1016 +311570448 2 1016 +311570452 2 1016 +311570456 2 1016 +311570460 2 1016 +311570464 2 1016 +311570468 2 1016 +311570472 2 1016 +311570476 2 1016 +311570480 2 1016 +311570484 2 1016 +311570488 2 1016 +311570492 2 1016 +311570496 2 1016 +311570500 2 1016 +311570504 2 1016 +311570508 2 1016 +311570512 2 1016 +311570516 2 1016 +311570520 2 1016 +311570524 2 1016 +311570528 2 1016 +311570532 2 1016 +311570536 2 1016 +311570540 2 1016 +311570544 2 1016 +311570548 2 1016 +311570552 2 1016 +311570556 2 1016 +311570560 2 1016 +311570564 2 1016 +311570568 2 1016 +311570572 2 1016 +311570576 2 1016 +311570580 2 1016 +311570584 2 1016 +311570588 2 1016 +311570592 2 1016 +311570596 2 1016 +311570600 2 1016 +311570604 2 1016 +311570608 2 1016 +311570612 2 1016 +311570616 2 1016 +311570620 2 1016 +311570624 2 1016 +311574532 2 1016 +311574536 2 1016 +311574540 2 1016 +311574544 2 1016 +311574548 2 1016 +311574552 2 1016 +311574556 2 1016 +311574560 2 1016 +311574564 2 1016 +311574568 2 1016 +311574572 2 1016 +311574576 2 1016 +311574580 2 1016 +311574584 2 1016 +311574588 2 1016 +311574592 2 1016 +311574596 2 1016 +311574600 2 1016 +311574604 2 1016 +311574608 2 1016 +311574612 2 1016 +311574616 2 1016 +311574620 2 1016 +311574624 2 1016 +311574628 2 1016 +311574632 2 1016 +311574636 2 1016 +311574640 2 1016 +311574644 2 1016 +311574648 2 1016 +311574652 2 1016 +311574656 2 1016 +311574660 2 1016 +311574664 2 1016 +311574668 2 1016 +311574672 2 1016 +311574676 2 1016 +311574680 2 1016 +311574684 2 1016 +311574688 2 1016 +311574692 2 1016 +311574696 2 1016 +311574700 2 1016 +311574704 2 1016 +311574708 2 1016 +311574712 2 1016 +311574716 2 1016 +311574720 2 1016 +311578628 2 1016 +311578632 2 1016 +311578636 2 1016 +311578640 2 1016 +311578644 2 1016 +311578648 2 1016 +311578652 2 1016 +311578656 2 1016 +311578660 2 1016 +311578664 2 1016 +311578668 2 1016 +311578672 2 1016 +311578676 2 1016 +311578680 2 1016 +311578684 2 1016 +311578688 2 1016 +311578692 2 1016 +311578696 2 1016 +311578700 2 1016 +311578704 2 1016 +311578708 2 1016 +311578712 2 1016 +311578716 2 1016 +311578720 2 1016 +311578724 2 1016 +311578728 2 1016 +311578732 2 1016 +311578736 2 1016 +311578740 2 1016 +311578744 2 1016 +311578748 2 1016 +311578752 2 1016 +311578756 2 1016 +311578760 2 1016 +311578764 2 1016 +311578768 2 1016 +311578772 2 1016 +311578776 2 1016 +311578780 2 1016 +311578784 2 1016 +311578788 2 1016 +311578792 2 1016 +311578796 2 1016 +311578800 2 1016 +311578804 2 1016 +311578808 2 1016 +311578812 2 1016 +311578816 2 1016 +311582724 2 1016 +311582728 2 1016 +311582732 2 1016 +311582736 2 1016 +311582740 2 1016 +311582744 2 1016 +311582748 2 1016 +311582752 2 1016 +311582756 2 1016 +311582760 2 1016 +311582764 2 1016 +311582768 2 1016 +311582772 2 1016 +311582776 2 1016 +311582780 2 1016 +311582784 2 1016 +311582788 2 1016 +311582792 2 1016 +311582796 2 1016 +311582800 2 1016 +311582804 2 1016 +311582808 2 1016 +311582812 2 1016 +311582816 2 1016 +311582820 2 1016 +311582824 2 1016 +311582828 2 1016 +311582832 2 1016 +311582836 2 1016 +311582840 2 1016 +311582844 2 1016 +311582848 2 1016 +311582852 2 1016 +311582856 2 1016 +311582860 2 1016 +311582864 2 1016 +311582868 2 1016 +311582872 2 1016 +311582876 2 1016 +311582880 2 1016 +311582884 2 1016 +311582888 2 1016 +311582892 2 1016 +311582896 2 1016 +311582900 2 1016 +311582904 2 1016 +311582908 2 1016 +311582912 2 1016 +311586820 2 1016 +311586824 2 1016 +311586828 2 1016 +311586832 2 1016 +311586836 2 1016 +311586840 2 1016 +311586844 2 1016 +311586848 2 1016 +311586852 2 1016 +311586856 2 1016 +311586860 2 1016 +311586864 2 1016 +311586868 2 1016 +311586872 2 1016 +311586876 2 1016 +311586880 2 1016 +311586884 2 1016 +311586888 2 1016 +311586892 2 1016 +311586896 2 1016 +311586900 2 1016 +311586904 2 1016 +311586908 2 1016 +311586912 2 1016 +311586916 2 1016 +311586920 2 1016 +311586924 2 1016 +311586928 2 1016 +311586932 2 1016 +311586936 2 1016 +311586940 2 1016 +311586944 2 1016 +311586948 2 1016 +311586952 2 1016 +311586956 2 1016 +311586960 2 1016 +311586964 2 1016 +311586968 2 1016 +311586972 2 1016 +311586976 2 1016 +311586980 2 1016 +311586984 2 1016 +311586988 2 1016 +311586992 2 1016 +311586996 2 1016 +311587000 2 1016 +311587004 2 1016 +311587008 2 1016 +311590916 2 1016 +311590920 2 1016 +311590924 2 1016 +311590928 2 1016 +311590932 2 1016 +311590936 2 1016 +311590940 2 1016 +311590944 2 1016 +311590948 2 1016 +311590952 2 1016 +311590956 2 1016 +311590960 2 1016 +311590964 2 1016 +311590968 2 1016 +311590972 2 1016 +311590976 2 1016 +311590980 2 1016 +311590984 2 1016 +311590988 2 1016 +311590992 2 1016 +311590996 2 1016 +311591000 2 1016 +311591004 2 1016 +311591008 2 1016 +311591012 2 1016 +311591016 2 1016 +311591020 2 1016 +311591024 2 1016 +311591028 2 1016 +311591032 2 1016 +311591036 2 1016 +311591040 2 1016 +311591044 2 1016 +311591048 2 1016 +311591052 2 1016 +311591056 2 1016 +311591060 2 1016 +311591064 2 1016 +311591068 2 1016 +311591072 2 1016 +311591076 2 1016 +311591080 2 1016 +311591084 2 1016 +311591088 2 1016 +311591092 2 1016 +311591096 2 1016 +311591100 2 1016 +311591104 2 1016 +311595012 2 1016 +311595016 2 1016 +311595020 2 1016 +311595024 2 1016 +311595028 2 1016 +311595032 2 1016 +311595036 2 1016 +311595040 2 1016 +311595044 2 1016 +311595048 2 1016 +311595052 2 1016 +311595056 2 1016 +311595060 2 1016 +311595064 2 1016 +311595068 2 1016 +311595072 2 1016 +311595076 2 1016 +311595080 2 1016 +311595084 2 1016 +311595088 2 1016 +311595092 2 1016 +311595096 2 1016 +311595100 2 1016 +311595104 2 1016 +311595108 2 1016 +311595112 2 1016 +311595116 2 1016 +311595120 2 1016 +311595124 2 1016 +311595128 2 1016 +311595132 2 1016 +311595136 2 1016 +311595140 2 1016 +311595144 2 1016 +311595148 2 1016 +311595152 2 1016 +311595156 2 1016 +311595160 2 1016 +311595164 2 1016 +311595168 2 1016 +311595172 2 1016 +311595176 2 1016 +311595180 2 1016 +311595184 2 1016 +311595188 2 1016 +311595192 2 1016 +311595196 2 1016 +311595200 2 1016 +311599108 2 1016 +311599112 2 1016 +311599116 2 1016 +311599120 2 1016 +311599124 2 1016 +311599128 2 1016 +311599132 2 1016 +311599136 2 1016 +311599140 2 1016 +311599144 2 1016 +311599148 2 1016 +311599152 2 1016 +311599156 2 1016 +311599160 2 1016 +311599164 2 1016 +311599168 2 1016 +311599172 2 1016 +311599176 2 1016 +311599180 2 1016 +311599184 2 1016 +311599188 2 1016 +311599192 2 1016 +311599196 2 1016 +311599200 2 1016 +311599204 2 1016 +311599208 2 1016 +311599212 2 1016 +311599216 2 1016 +311599220 2 1016 +311599224 2 1016 +311599228 2 1016 +311599232 2 1016 +311599236 2 1016 +311599240 2 1016 +311599244 2 1016 +311599248 2 1016 +311599252 2 1016 +311599256 2 1016 +311599260 2 1016 +311599264 2 1016 +311599268 2 1016 +311599272 2 1016 +311599276 2 1016 +311599280 2 1016 +311599284 2 1016 +311599288 2 1016 +311599292 2 1016 +311599296 2 1016 +311603204 2 1016 +311603208 2 1016 +311603212 2 1016 +311603216 2 1016 +311603220 2 1016 +311603224 2 1016 +311603228 2 1016 +311603232 2 1016 +311603236 2 1016 +311603240 2 1016 +311603244 2 1016 +311603248 2 1016 +311603252 2 1016 +311603256 2 1016 +311603260 2 1016 +311603264 2 1016 +311603268 2 1016 +311603272 2 1016 +311603276 2 1016 +311603280 2 1016 +311603284 2 1016 +311603288 2 1016 +311603292 2 1016 +311603296 2 1016 +311603300 2 1016 +311603304 2 1016 +311603308 2 1016 +311603312 2 1016 +311603316 2 1016 +311603320 2 1016 +311603324 2 1016 +311603328 2 1016 +311603332 2 1016 +311603336 2 1016 +311603340 2 1016 +311603344 2 1016 +311603348 2 1016 +311603352 2 1016 +311603356 2 1016 +311603360 2 1016 +311603364 2 1016 +311603368 2 1016 +311603372 2 1016 +311603376 2 1016 +311603380 2 1016 +311603384 2 1016 +311603388 2 1016 +311603392 2 1016 +311607300 2 1016 +311607304 2 1016 +311607308 2 1016 +311607312 2 1016 +311607316 2 1016 +311607320 2 1016 +311607324 2 1016 +311607328 2 1016 +311607332 2 1016 +311607336 2 1016 +311607340 2 1016 +311607344 2 1016 +311607348 2 1016 +311607352 2 1016 +311607356 2 1016 +311607360 2 1016 +311607364 2 1016 +311607368 2 1016 +311607372 2 1016 +311607376 2 1016 +311607380 2 1016 +311607384 2 1016 +311607388 2 1016 +311607392 2 1016 +311607396 2 1016 +311607400 2 1016 +311607404 2 1016 +311607408 2 1016 +311607412 2 1016 +311607416 2 1016 +311607420 2 1016 +311607424 2 1016 +311607428 2 1016 +311607432 2 1016 +311607436 2 1016 +311607440 2 1016 +311607444 2 1016 +311607448 2 1016 +311607452 2 1016 +311607456 2 1016 +311607460 2 1016 +311607464 2 1016 +311607468 2 1016 +311607472 2 1016 +311607476 2 1016 +311607480 2 1016 +311607484 2 1016 +311607488 2 1016 +311611396 2 1016 +311611400 2 1016 +311611404 2 1016 +311611408 2 1016 +311611412 2 1016 +311611416 2 1016 +311611420 2 1016 +311611424 2 1016 +311611428 2 1016 +311611432 2 1016 +311611436 2 1016 +311611440 2 1016 +311611444 2 1016 +311611448 2 1016 +311611452 2 1016 +311611456 2 1016 +311611460 2 1016 +311611464 2 1016 +311611468 2 1016 +311611472 2 1016 +311611476 2 1016 +311611480 2 1016 +311611484 2 1016 +311611488 2 1016 +311611492 2 1016 +311611496 2 1016 +311611500 2 1016 +311611504 2 1016 +311611508 2 1016 +311611512 2 1016 +311611516 2 1016 +311611520 2 1016 +311611524 2 1016 +311611528 2 1016 +311611532 2 1016 +311611536 2 1016 +311611540 2 1016 +311611544 2 1016 +311611548 2 1016 +311611552 2 1016 +311611556 2 1016 +311611560 2 1016 +311611564 2 1016 +311611568 2 1016 +311611572 2 1016 +311611576 2 1016 +311611580 2 1016 +311611584 2 1016 +311615492 2 1016 +311615496 2 1016 +311615500 2 1016 +311615504 2 1016 +311615508 2 1016 +311615512 2 1016 +311615516 2 1016 +311615520 2 1016 +311615524 2 1016 +311615528 2 1016 +311615532 2 1016 +311615536 2 1016 +311615540 2 1016 +311615544 2 1016 +311615548 2 1016 +311615552 2 1016 +311615556 2 1016 +311615560 2 1016 +311615564 2 1016 +311615568 2 1016 +311615572 2 1016 +311615576 2 1016 +311615580 2 1016 +311615584 2 1016 +311615588 2 1016 +311615592 2 1016 +311615596 2 1016 +311615600 2 1016 +311615604 2 1016 +311615608 2 1016 +311615612 2 1016 +311615616 2 1016 +311615620 2 1016 +311615624 2 1016 +311615628 2 1016 +311615632 2 1016 +311615636 2 1016 +311615640 2 1016 +311615644 2 1016 +311615648 2 1016 +311615652 2 1016 +311615656 2 1016 +311615660 2 1016 +311615664 2 1016 +311615668 2 1016 +311615672 2 1016 +311615676 2 1016 +311615680 2 1016 +311619588 2 1016 +311619592 2 1016 +311619596 2 1016 +311619600 2 1016 +311619604 2 1016 +311619608 2 1016 +311619612 2 1016 +311619616 2 1016 +311619620 2 1016 +311619624 2 1016 +311619628 2 1016 +311619632 2 1016 +311619636 2 1016 +311619640 2 1016 +311619644 2 1016 +311619648 2 1016 +311619652 2 1016 +311619656 2 1016 +311619660 2 1016 +311619664 2 1016 +311619668 2 1016 +311619672 2 1016 +311619676 2 1016 +311619680 2 1016 +311619684 2 1016 +311619688 2 1016 +311619692 2 1016 +311619696 2 1016 +311619700 2 1016 +311619704 2 1016 +311619708 2 1016 +311619712 2 1016 +311619716 2 1016 +311619720 2 1016 +311619724 2 1016 +311619728 2 1016 +311619732 2 1016 +311619736 2 1016 +311619740 2 1016 +311619744 2 1016 +311619748 2 1016 +311619752 2 1016 +311619756 2 1016 +311619760 2 1016 +311619764 2 1016 +311619768 2 1016 +311619772 2 1016 +311619776 2 1016 +311623684 2 1016 +311623688 2 1016 +311623692 2 1016 +311623696 2 1016 +311623700 2 1016 +311623704 2 1016 +311623708 2 1016 +311623712 2 1016 +311623716 2 1016 +311623720 2 1016 +311623724 2 1016 +311623728 2 1016 +311623732 2 1016 +311623736 2 1016 +311623740 2 1016 +311623744 2 1016 +311623748 2 1016 +311623752 2 1016 +311623756 2 1016 +311623760 2 1016 +311623764 2 1016 +311623768 2 1016 +311623772 2 1016 +311623776 2 1016 +311623780 2 1016 +311623784 2 1016 +311623788 2 1016 +311623792 2 1016 +311623796 2 1016 +311623800 2 1016 +311623804 2 1016 +311623808 2 1016 +311623812 2 1016 +311623816 2 1016 +311623820 2 1016 +311623824 2 1016 +311623828 2 1016 +311623832 2 1016 +311623836 2 1016 +311623840 2 1016 +311623844 2 1016 +311623848 2 1016 +311623852 2 1016 +311623856 2 1016 +311623860 2 1016 +311623864 2 1016 +311623868 2 1016 +311623872 2 1016 +311627780 2 1016 +311627784 2 1016 +311627788 2 1016 +311627792 2 1016 +311627796 2 1016 +311627800 2 1016 +311627804 2 1016 +311627808 2 1016 +311627812 2 1016 +311627816 2 1016 +311627820 2 1016 +311627824 2 1016 +311627828 2 1016 +311627832 2 1016 +311627836 2 1016 +311627840 2 1016 +311627844 2 1016 +311627848 2 1016 +311627852 2 1016 +311627856 2 1016 +311627860 2 1016 +311627864 2 1016 +311627868 2 1016 +311627872 2 1016 +311627876 2 1016 +311627880 2 1016 +311627884 2 1016 +311627888 2 1016 +311627892 2 1016 +311627896 2 1016 +311627900 2 1016 +311627904 2 1016 +311627908 2 1016 +311627912 2 1016 +311627916 2 1016 +311627920 2 1016 +311627924 2 1016 +311627928 2 1016 +311627932 2 1016 +311627936 2 1016 +311627940 2 1016 +311627944 2 1016 +311627948 2 1016 +311627952 2 1016 +311627956 2 1016 +311627960 2 1016 +311627964 2 1016 +311627968 2 1016 +311631876 2 1016 +311631880 2 1016 +311631884 2 1016 +311631888 2 1016 +311631892 2 1016 +311631896 2 1016 +311631900 2 1016 +311631904 2 1016 +311631908 2 1016 +311631912 2 1016 +311631916 2 1016 +311631920 2 1016 +311631924 2 1016 +311631928 2 1016 +311631932 2 1016 +311631936 2 1016 +311631940 2 1016 +311631944 2 1016 +311631948 2 1016 +311631952 2 1016 +311631956 2 1016 +311631960 2 1016 +311631964 2 1016 +311631968 2 1016 +311631972 2 1016 +311631976 2 1016 +311631980 2 1016 +311631984 2 1016 +311631988 2 1016 +311631992 2 1016 +311631996 2 1016 +311632000 2 1016 +311632004 2 1016 +311632008 2 1016 +311632012 2 1016 +311632016 2 1016 +311632020 2 1016 +311632024 2 1016 +311632028 2 1016 +311632032 2 1016 +311632036 2 1016 +311632040 2 1016 +311632044 2 1016 +311632048 2 1016 +311632052 2 1016 +311632056 2 1016 +311632060 2 1016 +311632064 2 1016 +311635972 2 1016 +311635976 2 1016 +311635980 2 1016 +311635984 2 1016 +311635988 2 1016 +311635992 2 1016 +311635996 2 1016 +311636000 2 1016 +311636004 2 1016 +311636008 2 1016 +311636012 2 1016 +311636016 2 1016 +311636020 2 1016 +311636024 2 1016 +311636028 2 1016 +311636032 2 1016 +311636036 2 1016 +311636040 2 1016 +311636044 2 1016 +311636048 2 1016 +311636052 2 1016 +311636056 2 1016 +311636060 2 1016 +311636064 2 1016 +311636068 2 1016 +311636072 2 1016 +311636076 2 1016 +311636080 2 1016 +311636084 2 1016 +311636088 2 1016 +311636092 2 1016 +311636096 2 1016 +311636100 2 1016 +311636104 2 1016 +311636108 2 1016 +311636112 2 1016 +311636116 2 1016 +311636120 2 1016 +311636124 2 1016 +311636128 2 1016 +311636132 2 1016 +311636136 2 1016 +311636140 2 1016 +311636144 2 1016 +311636148 2 1016 +311636152 2 1016 +311636156 2 1016 +311636160 2 1016 +311640068 2 1016 +311640072 2 1016 +311640076 2 1016 +311640080 2 1016 +311640084 2 1016 +311640088 2 1016 +311640092 2 1016 +311640096 2 1016 +311640100 2 1016 +311640104 2 1016 +311640108 2 1016 +311640112 2 1016 +311640116 2 1016 +311640120 2 1016 +311640124 2 1016 +311640128 2 1016 +311640132 2 1016 +311640136 2 1016 +311640140 2 1016 +311640144 2 1016 +311640148 2 1016 +311640152 2 1016 +311640156 2 1016 +311640160 2 1016 +311640164 2 1016 +311640168 2 1016 +311640172 2 1016 +311640176 2 1016 +311640180 2 1016 +311640184 2 1016 +311640188 2 1016 +311640192 2 1016 +311640196 2 1016 +311640200 2 1016 +311640204 2 1016 +311640208 2 1016 +311640212 2 1016 +311640216 2 1016 +311640220 2 1016 +311640224 2 1016 +311640228 2 1016 +311640232 2 1016 +311640236 2 1016 +311640240 2 1016 +311640244 2 1016 +311640248 2 1016 +311640252 2 1016 +311640256 2 1016 +311644164 2 1016 +311644168 2 1016 +311644172 2 1016 +311644176 2 1016 +311644180 2 1016 +311644184 2 1016 +311644188 2 1016 +311644192 2 1016 +311644196 2 1016 +311644200 2 1016 +311644204 2 1016 +311644208 2 1016 +311644212 2 1016 +311644216 2 1016 +311644220 2 1016 +311644224 2 1016 +311644228 2 1016 +311644232 2 1016 +311644236 2 1016 +311644240 2 1016 +311644244 2 1016 +311644248 2 1016 +311644252 2 1016 +311644256 2 1016 +311644260 2 1016 +311644264 2 1016 +311644268 2 1016 +311644272 2 1016 +311644276 2 1016 +311644280 2 1016 +311644284 2 1016 +311644288 2 1016 +311644292 2 1016 +311644296 2 1016 +311644300 2 1016 +311644304 2 1016 +311644308 2 1016 +311644312 2 1016 +311644316 2 1016 +311644320 2 1016 +311644324 2 1016 +311644328 2 1016 +311644332 2 1016 +311644336 2 1016 +311644340 2 1016 +311644344 2 1016 +311644348 2 1016 +311644352 2 1016 +311648260 2 1016 +311648264 2 1016 +311648268 2 1016 +311648272 2 1016 +311648276 2 1016 +311648280 2 1016 +311648284 2 1016 +311648288 2 1016 +311648292 2 1016 +311648296 2 1016 +311648300 2 1016 +311648304 2 1016 +311648308 2 1016 +311648312 2 1016 +311648316 2 1016 +311648320 2 1016 +311648324 2 1016 +311648328 2 1016 +311648332 2 1016 +311648336 2 1016 +311648340 2 1016 +311648344 2 1016 +311648348 2 1016 +311648352 2 1016 +311648356 2 1016 +311648360 2 1016 +311648364 2 1016 +311648368 2 1016 +311648372 2 1016 +311648376 2 1016 +311648380 2 1016 +311648384 2 1016 +311648388 2 1016 +311648392 2 1016 +311648396 2 1016 +311648400 2 1016 +311648404 2 1016 +311648408 2 1016 +311648412 2 1016 +311648416 2 1016 +311648420 2 1016 +311648424 2 1016 +311648428 2 1016 +311648432 2 1016 +311648436 2 1016 +311648440 2 1016 +311648444 2 1016 +311648448 2 1016 +311652356 2 1016 +311652360 2 1016 +311652364 2 1016 +311652368 2 1016 +311652372 2 1016 +311652376 2 1016 +311652380 2 1016 +311652384 2 1016 +311652388 2 1016 +311652392 2 1016 +311652396 2 1016 +311652400 2 1016 +311652404 2 1016 +311652408 2 1016 +311652412 2 1016 +311652416 2 1016 +311652420 2 1016 +311652424 2 1016 +311652428 2 1016 +311652432 2 1016 +311652436 2 1016 +311652440 2 1016 +311652444 2 1016 +311652448 2 1016 +311652452 2 1016 +311652456 2 1016 +311652460 2 1016 +311652464 2 1016 +311652468 2 1016 +311652472 2 1016 +311652476 2 1016 +311652480 2 1016 +311652484 2 1016 +311652488 2 1016 +311652492 2 1016 +311652496 2 1016 +311652500 2 1016 +311652504 2 1016 +311652508 2 1016 +311652512 2 1016 +311652516 2 1016 +311652520 2 1016 +311652524 2 1016 +311652528 2 1016 +311652532 2 1016 +311652536 2 1016 +311652540 2 1016 +311652544 2 1016 +311656452 2 1016 +311656456 2 1016 +311656460 2 1016 +311656464 2 1016 +311656468 2 1016 +311656472 2 1016 +311656476 2 1016 +311656480 2 1016 +311656484 2 1016 +311656488 2 1016 +311656492 2 1016 +311656496 2 1016 +311656500 2 1016 +311656504 2 1016 +311656508 2 1016 +311656512 2 1016 +311656516 2 1016 +311656520 2 1016 +311656524 2 1016 +311656528 2 1016 +311656532 2 1016 +311656536 2 1016 +311656540 2 1016 +311656544 2 1016 +311656548 2 1016 +311656552 2 1016 +311656556 2 1016 +311656560 2 1016 +311656564 2 1016 +311656568 2 1016 +311656572 2 1016 +311656576 2 1016 +311656580 2 1016 +311656584 2 1016 +311656588 2 1016 +311656592 2 1016 +311656596 2 1016 +311656600 2 1016 +311656604 2 1016 +311656608 2 1016 +311656612 2 1016 +311656616 2 1016 +311656620 2 1016 +311656624 2 1016 +311656628 2 1016 +311656632 2 1016 +311656636 2 1016 +311656640 2 1016 +311660548 2 1016 +311660552 2 1016 +311660556 2 1016 +311660560 2 1016 +311660564 2 1016 +311660568 2 1016 +311660572 2 1016 +311660576 2 1016 +311660580 2 1016 +311660584 2 1016 +311660588 2 1016 +311660592 2 1016 +311660596 2 1016 +311660600 2 1016 +311660604 2 1016 +311660608 2 1016 +311660612 2 1016 +311660616 2 1016 +311660620 2 1016 +311660624 2 1016 +311660628 2 1016 +311660632 2 1016 +311660636 2 1016 +311660640 2 1016 +311660644 2 1016 +311660648 2 1016 +311660652 2 1016 +311660656 2 1016 +311660660 2 1016 +311660664 2 1016 +311660668 2 1016 +311660672 2 1016 +311660676 2 1016 +311660680 2 1016 +311660684 2 1016 +311660688 2 1016 +311660692 2 1016 +311660696 2 1016 +311660700 2 1016 +311660704 2 1016 +311660708 2 1016 +311660712 2 1016 +311660716 2 1016 +311660720 2 1016 +311660724 2 1016 +311660728 2 1016 +311660732 2 1016 +311660736 2 1016 +311664644 2 1016 +311664648 2 1016 +311664652 2 1016 +311664656 2 1016 +311664660 2 1016 +311664664 2 1016 +311664668 2 1016 +311664672 2 1016 +311664676 2 1016 +311664680 2 1016 +311664684 2 1016 +311664688 2 1016 +311664692 2 1016 +311664696 2 1016 +311664700 2 1016 +311664704 2 1016 +311664708 2 1016 +311664712 2 1016 +311664716 2 1016 +311664720 2 1016 +311664724 2 1016 +311664728 2 1016 +311664732 2 1016 +311664736 2 1016 +311664740 2 1016 +311664744 2 1016 +311664748 2 1016 +311664752 2 1016 +311664756 2 1016 +311664760 2 1016 +311664764 2 1016 +311664768 2 1016 +311664772 2 1016 +311664776 2 1016 +311664780 2 1016 +311664784 2 1016 +311664788 2 1016 +311664792 2 1016 +311664796 2 1016 +311664800 2 1016 +311664804 2 1016 +311664808 2 1016 +311664812 2 1016 +311664816 2 1016 +311664820 2 1016 +311664824 2 1016 +311664828 2 1016 +311664832 2 1016 +311668740 2 1016 +311668744 2 1016 +311668748 2 1016 +311668752 2 1016 +311668756 2 1016 +311668760 2 1016 +311668764 2 1016 +311668768 2 1016 +311668772 2 1016 +311668776 2 1016 +311668780 2 1016 +311668784 2 1016 +311668788 2 1016 +311668792 2 1016 +311668796 2 1016 +311668800 2 1016 +311668804 2 1016 +311668808 2 1016 +311668812 2 1016 +311668816 2 1016 +311668820 2 1016 +311668824 2 1016 +311668828 2 1016 +311668832 2 1016 +311668836 2 1016 +311668840 2 1016 +311668844 2 1016 +311668848 2 1016 +311668852 2 1016 +311668856 2 1016 +311668860 2 1016 +311668864 2 1016 +311668868 2 1016 +311668872 2 1016 +311668876 2 1016 +311668880 2 1016 +311668884 2 1016 +311668888 2 1016 +311668892 2 1016 +311668896 2 1016 +311668900 2 1016 +311668904 2 1016 +311668908 2 1016 +311668912 2 1016 +311668916 2 1016 +311668920 2 1016 +311668924 2 1016 +311668928 2 1016 +311672836 2 1016 +311672840 2 1016 +311672844 2 1016 +311672848 2 1016 +311672852 2 1016 +311672856 2 1016 +311672860 2 1016 +311672864 2 1016 +311672868 2 1016 +311672872 2 1016 +311672876 2 1016 +311672880 2 1016 +311672884 2 1016 +311672888 2 1016 +311672892 2 1016 +311672896 2 1016 +311672900 2 1016 +311672904 2 1016 +311672908 2 1016 +311672912 2 1016 +311672916 2 1016 +311672920 2 1016 +311672924 2 1016 +311672928 2 1016 +311672932 2 1016 +311672936 2 1016 +311672940 2 1016 +311672944 2 1016 +311672948 2 1016 +311672952 2 1016 +311672956 2 1016 +311672960 2 1016 +311672964 2 1016 +311672968 2 1016 +311672972 2 1016 +311672976 2 1016 +311672980 2 1016 +311672984 2 1016 +311672988 2 1016 +311672992 2 1016 +311672996 2 1016 +311673000 2 1016 +311673004 2 1016 +311673008 2 1016 +311673012 2 1016 +311673016 2 1016 +311673020 2 1016 +311673024 2 1016 +311676932 2 1016 +311676936 2 1016 +311676940 2 1016 +311676944 2 1016 +311676948 2 1016 +311676952 2 1016 +311676956 2 1016 +311676960 2 1016 +311676964 2 1016 +311676968 2 1016 +311676972 2 1016 +311676976 2 1016 +311676980 2 1016 +311676984 2 1016 +311676988 2 1016 +311676992 2 1016 +311676996 2 1016 +311677000 2 1016 +311677004 2 1016 +311677008 2 1016 +311677012 2 1016 +311677016 2 1016 +311677020 2 1016 +311677024 2 1016 +311677028 2 1016 +311677032 2 1016 +311677036 2 1016 +311677040 2 1016 +311677044 2 1016 +311677048 2 1016 +311677052 2 1016 +311677056 2 1016 +311677060 2 1016 +311677064 2 1016 +311677068 2 1016 +311677072 2 1016 +311677076 2 1016 +311677080 2 1016 +311677084 2 1016 +311677088 2 1016 +311677092 2 1016 +311677096 2 1016 +311677100 2 1016 +311677104 2 1016 +311677108 2 1016 +311677112 2 1016 +311677116 2 1016 +311677120 2 1016 +311681028 2 1016 +311681032 2 1016 +311681036 2 1016 +311681040 2 1016 +311681044 2 1016 +311681048 2 1016 +311681052 2 1016 +311681056 2 1016 +311681060 2 1016 +311681064 2 1016 +311681068 2 1016 +311681072 2 1016 +311681076 2 1016 +311681080 2 1016 +311681084 2 1016 +311681088 2 1016 +311681092 2 1016 +311681096 2 1016 +311681100 2 1016 +311681104 2 1016 +311681108 2 1016 +311681112 2 1016 +311681116 2 1016 +311681120 2 1016 +311681124 2 1016 +311681128 2 1016 +311681132 2 1016 +311681136 2 1016 +311681140 2 1016 +311681144 2 1016 +311681148 2 1016 +311681152 2 1016 +311681156 2 1016 +311681160 2 1016 +311681164 2 1016 +311681168 2 1016 +311681172 2 1016 +311681176 2 1016 +311681180 2 1016 +311681184 2 1016 +311681188 2 1016 +311681192 2 1016 +311681196 2 1016 +311681200 2 1016 +311681204 2 1016 +311681208 2 1016 +311681212 2 1016 +311681216 2 1016 +312479748 2 1016 +312479752 2 1016 +312479756 2 1016 +312479760 2 1016 +312479764 2 1016 +312479768 2 1016 +312479772 2 1016 +312479776 2 1016 +312479780 2 1016 +312479784 2 1016 +312479788 2 1016 +312479792 2 1016 +312479796 2 1016 +312479800 2 1016 +312479804 2 1016 +312479808 2 1016 +312479812 2 1016 +312479816 2 1016 +312479820 2 1016 +312479824 2 1016 +312479828 2 1016 +312479832 2 1016 +312479836 2 1016 +312479840 2 1016 +312479844 2 1016 +312479848 2 1016 +312479852 2 1016 +312479856 2 1016 +312479860 2 1016 +312479864 2 1016 +312479868 2 1016 +312479872 2 1016 +312479876 2 1016 +312479880 2 1016 +312479884 2 1016 +312479888 2 1016 +312479892 2 1016 +312479896 2 1016 +312479900 2 1016 +312479904 2 1016 +312479908 2 1016 +312479912 2 1016 +312479916 2 1016 +312479920 2 1016 +312479924 2 1016 +312479928 2 1016 +312479932 2 1016 +312479936 2 1016 +312483844 2 1016 +312483848 2 1016 +312483852 2 1016 +312483856 2 1016 +312483860 2 1016 +312483864 2 1016 +312483868 2 1016 +312483872 2 1016 +312483876 2 1016 +312483880 2 1016 +312483884 2 1016 +312483888 2 1016 +312483892 2 1016 +312483896 2 1016 +312483900 2 1016 +312483904 2 1016 +312483908 2 1016 +312483912 2 1016 +312483916 2 1016 +312483920 2 1016 +312483924 2 1016 +312483928 2 1016 +312483932 2 1016 +312483936 2 1016 +312483940 2 1016 +312483944 2 1016 +312483948 2 1016 +312483952 2 1016 +312483956 2 1016 +312483960 2 1016 +312483964 2 1016 +312483968 2 1016 +312483972 2 1016 +312483976 2 1016 +312483980 2 1016 +312483984 2 1016 +312483988 2 1016 +312483992 2 1016 +312483996 2 1016 +312484000 2 1016 +312484004 2 1016 +312484008 2 1016 +312484012 2 1016 +312484016 2 1016 +312484020 2 1016 +312484024 2 1016 +312484028 2 1016 +312484032 2 1016 +312487940 2 1016 +312487944 2 1016 +312487948 2 1016 +312487952 2 1016 +312487956 2 1016 +312487960 2 1016 +312487964 2 1016 +312487968 2 1016 +312487972 2 1016 +312487976 2 1016 +312487980 2 1016 +312487984 2 1016 +312487988 2 1016 +312487992 2 1016 +312487996 2 1016 +312488000 2 1016 +312488004 2 1016 +312488008 2 1016 +312488012 2 1016 +312488016 2 1016 +312488020 2 1016 +312488024 2 1016 +312488028 2 1016 +312488032 2 1016 +312488036 2 1016 +312488040 2 1016 +312488044 2 1016 +312488048 2 1016 +312488052 2 1016 +312488056 2 1016 +312488060 2 1016 +312488064 2 1016 +312488068 2 1016 +312488072 2 1016 +312488076 2 1016 +312488080 2 1016 +312488084 2 1016 +312488088 2 1016 +312488092 2 1016 +312488096 2 1016 +312488100 2 1016 +312488104 2 1016 +312488108 2 1016 +312488112 2 1016 +312488116 2 1016 +312488120 2 1016 +312488124 2 1016 +312488128 2 1016 +312492036 2 1016 +312492040 2 1016 +312492044 2 1016 +312492048 2 1016 +312492052 2 1016 +312492056 2 1016 +312492060 2 1016 +312492064 2 1016 +312492068 2 1016 +312492072 2 1016 +312492076 2 1016 +312492080 2 1016 +312492084 2 1016 +312492088 2 1016 +312492092 2 1016 +312492096 2 1016 +312492100 2 1016 +312492104 2 1016 +312492108 2 1016 +312492112 2 1016 +312492116 2 1016 +312492120 2 1016 +312492124 2 1016 +312492128 2 1016 +312492132 2 1016 +312492136 2 1016 +312492140 2 1016 +312492144 2 1016 +312492148 2 1016 +312492152 2 1016 +312492156 2 1016 +312492160 2 1016 +312492164 2 1016 +312492168 2 1016 +312492172 2 1016 +312492176 2 1016 +312492180 2 1016 +312492184 2 1016 +312492188 2 1016 +312492192 2 1016 +312492196 2 1016 +312492200 2 1016 +312492204 2 1016 +312492208 2 1016 +312492212 2 1016 +312492216 2 1016 +312492220 2 1016 +312492224 2 1016 +312496132 2 1016 +312496136 2 1016 +312496140 2 1016 +312496144 2 1016 +312496148 2 1016 +312496152 2 1016 +312496156 2 1016 +312496160 2 1016 +312496164 2 1016 +312496168 2 1016 +312496172 2 1016 +312496176 2 1016 +312496180 2 1016 +312496184 2 1016 +312496188 2 1016 +312496192 2 1016 +312496196 2 1016 +312496200 2 1016 +312496204 2 1016 +312496208 2 1016 +312496212 2 1016 +312496216 2 1016 +312496220 2 1016 +312496224 2 1016 +312496228 2 1016 +312496232 2 1016 +312496236 2 1016 +312496240 2 1016 +312496244 2 1016 +312496248 2 1016 +312496252 2 1016 +312496256 2 1016 +312496260 2 1016 +312496264 2 1016 +312496268 2 1016 +312496272 2 1016 +312496276 2 1016 +312496280 2 1016 +312496284 2 1016 +312496288 2 1016 +312496292 2 1016 +312496296 2 1016 +312496300 2 1016 +312496304 2 1016 +312496308 2 1016 +312496312 2 1016 +312496316 2 1016 +312496320 2 1016 +312500228 2 1016 +312500232 2 1016 +312500236 2 1016 +312500240 2 1016 +312500244 2 1016 +312500248 2 1016 +312500252 2 1016 +312500256 2 1016 +312500260 2 1016 +312500264 2 1016 +312500268 2 1016 +312500272 2 1016 +312500276 2 1016 +312500280 2 1016 +312500284 2 1016 +312500288 2 1016 +312500292 2 1016 +312500296 2 1016 +312500300 2 1016 +312500304 2 1016 +312500308 2 1016 +312500312 2 1016 +312500316 2 1016 +312500320 2 1016 +312500324 2 1016 +312500328 2 1016 +312500332 2 1016 +312500336 2 1016 +312500340 2 1016 +312500344 2 1016 +312500348 2 1016 +312500352 2 1016 +312500356 2 1016 +312500360 2 1016 +312500364 2 1016 +312500368 2 1016 +312500372 2 1016 +312500376 2 1016 +312500380 2 1016 +312500384 2 1016 +312500388 2 1016 +312500392 2 1016 +312500396 2 1016 +312500400 2 1016 +312500404 2 1016 +312500408 2 1016 +312500412 2 1016 +312500416 2 1016 +312504324 2 1016 +312504328 2 1016 +312504332 2 1016 +312504336 2 1016 +312504340 2 1016 +312504344 2 1016 +312504348 2 1016 +312504352 2 1016 +312504356 2 1016 +312504360 2 1016 +312504364 2 1016 +312504368 2 1016 +312504372 2 1016 +312504376 2 1016 +312504380 2 1016 +312504384 2 1016 +312504388 2 1016 +312504392 2 1016 +312504396 2 1016 +312504400 2 1016 +312504404 2 1016 +312504408 2 1016 +312504412 2 1016 +312504416 2 1016 +312504420 2 1016 +312504424 2 1016 +312504428 2 1016 +312504432 2 1016 +312504436 2 1016 +312504440 2 1016 +312504444 2 1016 +312504448 2 1016 +312504452 2 1016 +312504456 2 1016 +312504460 2 1016 +312504464 2 1016 +312504468 2 1016 +312504472 2 1016 +312504476 2 1016 +312504480 2 1016 +312504484 2 1016 +312504488 2 1016 +312504492 2 1016 +312504496 2 1016 +312504500 2 1016 +312504504 2 1016 +312504508 2 1016 +312504512 2 1016 +312508420 2 1016 +312508424 2 1016 +312508428 2 1016 +312508432 2 1016 +312508436 2 1016 +312508440 2 1016 +312508444 2 1016 +312508448 2 1016 +312508452 2 1016 +312508456 2 1016 +312508460 2 1016 +312508464 2 1016 +312508468 2 1016 +312508472 2 1016 +312508476 2 1016 +312508480 2 1016 +312508484 2 1016 +312508488 2 1016 +312508492 2 1016 +312508496 2 1016 +312508500 2 1016 +312508504 2 1016 +312508508 2 1016 +312508512 2 1016 +312508516 2 1016 +312508520 2 1016 +312508524 2 1016 +312508528 2 1016 +312508532 2 1016 +312508536 2 1016 +312508540 2 1016 +312508544 2 1016 +312508548 2 1016 +312508552 2 1016 +312508556 2 1016 +312508560 2 1016 +312508564 2 1016 +312508568 2 1016 +312508572 2 1016 +312508576 2 1016 +312508580 2 1016 +312508584 2 1016 +312508588 2 1016 +312508592 2 1016 +312508596 2 1016 +312508600 2 1016 +312508604 2 1016 +312508608 2 1016 +312512516 2 1016 +312512520 2 1016 +312512524 2 1016 +312512528 2 1016 +312512532 2 1016 +312512536 2 1016 +312512540 2 1016 +312512544 2 1016 +312512548 2 1016 +312512552 2 1016 +312512556 2 1016 +312512560 2 1016 +312512564 2 1016 +312512568 2 1016 +312512572 2 1016 +312512576 2 1016 +312512580 2 1016 +312512584 2 1016 +312512588 2 1016 +312512592 2 1016 +312512596 2 1016 +312512600 2 1016 +312512604 2 1016 +312512608 2 1016 +312512612 2 1016 +312512616 2 1016 +312512620 2 1016 +312512624 2 1016 +312512628 2 1016 +312512632 2 1016 +312512636 2 1016 +312512640 2 1016 +312512644 2 1016 +312512648 2 1016 +312512652 2 1016 +312512656 2 1016 +312512660 2 1016 +312512664 2 1016 +312512668 2 1016 +312512672 2 1016 +312512676 2 1016 +312512680 2 1016 +312512684 2 1016 +312512688 2 1016 +312512692 2 1016 +312512696 2 1016 +312512700 2 1016 +312512704 2 1016 +312516612 2 1016 +312516616 2 1016 +312516620 2 1016 +312516624 2 1016 +312516628 2 1016 +312516632 2 1016 +312516636 2 1016 +312516640 2 1016 +312516644 2 1016 +312516648 2 1016 +312516652 2 1016 +312516656 2 1016 +312516660 2 1016 +312516664 2 1016 +312516668 2 1016 +312516672 2 1016 +312516676 2 1016 +312516680 2 1016 +312516684 2 1016 +312516688 2 1016 +312516692 2 1016 +312516696 2 1016 +312516700 2 1016 +312516704 2 1016 +312516708 2 1016 +312516712 2 1016 +312516716 2 1016 +312516720 2 1016 +312516724 2 1016 +312516728 2 1016 +312516732 2 1016 +312516736 2 1016 +312516740 2 1016 +312516744 2 1016 +312516748 2 1016 +312516752 2 1016 +312516756 2 1016 +312516760 2 1016 +312516764 2 1016 +312516768 2 1016 +312516772 2 1016 +312516776 2 1016 +312516780 2 1016 +312516784 2 1016 +312516788 2 1016 +312516792 2 1016 +312516796 2 1016 +312516800 2 1016 +312520708 2 1016 +312520712 2 1016 +312520716 2 1016 +312520720 2 1016 +312520724 2 1016 +312520728 2 1016 +312520732 2 1016 +312520736 2 1016 +312520740 2 1016 +312520744 2 1016 +312520748 2 1016 +312520752 2 1016 +312520756 2 1016 +312520760 2 1016 +312520764 2 1016 +312520768 2 1016 +312520772 2 1016 +312520776 2 1016 +312520780 2 1016 +312520784 2 1016 +312520788 2 1016 +312520792 2 1016 +312520796 2 1016 +312520800 2 1016 +312520804 2 1016 +312520808 2 1016 +312520812 2 1016 +312520816 2 1016 +312520820 2 1016 +312520824 2 1016 +312520828 2 1016 +312520832 2 1016 +312520836 2 1016 +312520840 2 1016 +312520844 2 1016 +312520848 2 1016 +312520852 2 1016 +312520856 2 1016 +312520860 2 1016 +312520864 2 1016 +312520868 2 1016 +312520872 2 1016 +312520876 2 1016 +312520880 2 1016 +312520884 2 1016 +312520888 2 1016 +312520892 2 1016 +312520896 2 1016 +312524804 2 1016 +312524808 2 1016 +312524812 2 1016 +312524816 2 1016 +312524820 2 1016 +312524824 2 1016 +312524828 2 1016 +312524832 2 1016 +312524836 2 1016 +312524840 2 1016 +312524844 2 1016 +312524848 2 1016 +312524852 2 1016 +312524856 2 1016 +312524860 2 1016 +312524864 2 1016 +312524868 2 1016 +312524872 2 1016 +312524876 2 1016 +312524880 2 1016 +312524884 2 1016 +312524888 2 1016 +312524892 2 1016 +312524896 2 1016 +312524900 2 1016 +312524904 2 1016 +312524908 2 1016 +312524912 2 1016 +312524916 2 1016 +312524920 2 1016 +312524924 2 1016 +312524928 2 1016 +312524932 2 1016 +312524936 2 1016 +312524940 2 1016 +312524944 2 1016 +312524948 2 1016 +312524952 2 1016 +312524956 2 1016 +312524960 2 1016 +312524964 2 1016 +312524968 2 1016 +312524972 2 1016 +312524976 2 1016 +312524980 2 1016 +312524984 2 1016 +312524988 2 1016 +312524992 2 1016 +312528900 2 1016 +312528904 2 1016 +312528908 2 1016 +312528912 2 1016 +312528916 2 1016 +312528920 2 1016 +312528924 2 1016 +312528928 2 1016 +312528932 2 1016 +312528936 2 1016 +312528940 2 1016 +312528944 2 1016 +312528948 2 1016 +312528952 2 1016 +312528956 2 1016 +312528960 2 1016 +312528964 2 1016 +312528968 2 1016 +312528972 2 1016 +312528976 2 1016 +312528980 2 1016 +312528984 2 1016 +312528988 2 1016 +312528992 2 1016 +312528996 2 1016 +312529000 2 1016 +312529004 2 1016 +312529008 2 1016 +312529012 2 1016 +312529016 2 1016 +312529020 2 1016 +312529024 2 1016 +312529028 2 1016 +312529032 2 1016 +312529036 2 1016 +312529040 2 1016 +312529044 2 1016 +312529048 2 1016 +312529052 2 1016 +312529056 2 1016 +312529060 2 1016 +312529064 2 1016 +312529068 2 1016 +312529072 2 1016 +312529076 2 1016 +312529080 2 1016 +312529084 2 1016 +312529088 2 1016 +312532996 2 1016 +312533000 2 1016 +312533004 2 1016 +312533008 2 1016 +312533012 2 1016 +312533016 2 1016 +312533020 2 1016 +312533024 2 1016 +312533028 2 1016 +312533032 2 1016 +312533036 2 1016 +312533040 2 1016 +312533044 2 1016 +312533048 2 1016 +312533052 2 1016 +312533056 2 1016 +312533060 2 1016 +312533064 2 1016 +312533068 2 1016 +312533072 2 1016 +312533076 2 1016 +312533080 2 1016 +312533084 2 1016 +312533088 2 1016 +312533092 2 1016 +312533096 2 1016 +312533100 2 1016 +312533104 2 1016 +312533108 2 1016 +312533112 2 1016 +312533116 2 1016 +312533120 2 1016 +312533124 2 1016 +312533128 2 1016 +312533132 2 1016 +312533136 2 1016 +312533140 2 1016 +312533144 2 1016 +312533148 2 1016 +312533152 2 1016 +312533156 2 1016 +312533160 2 1016 +312533164 2 1016 +312533168 2 1016 +312533172 2 1016 +312533176 2 1016 +312533180 2 1016 +312533184 2 1016 +312537092 2 1016 +312537096 2 1016 +312537100 2 1016 +312537104 2 1016 +312537108 2 1016 +312537112 2 1016 +312537116 2 1016 +312537120 2 1016 +312537124 2 1016 +312537128 2 1016 +312537132 2 1016 +312537136 2 1016 +312537140 2 1016 +312537144 2 1016 +312537148 2 1016 +312537152 2 1016 +312537156 2 1016 +312537160 2 1016 +312537164 2 1016 +312537168 2 1016 +312537172 2 1016 +312537176 2 1016 +312537180 2 1016 +312537184 2 1016 +312537188 2 1016 +312537192 2 1016 +312537196 2 1016 +312537200 2 1016 +312537204 2 1016 +312537208 2 1016 +312537212 2 1016 +312537216 2 1016 +312537220 2 1016 +312537224 2 1016 +312537228 2 1016 +312537232 2 1016 +312537236 2 1016 +312537240 2 1016 +312537244 2 1016 +312537248 2 1016 +312537252 2 1016 +312537256 2 1016 +312537260 2 1016 +312537264 2 1016 +312537268 2 1016 +312537272 2 1016 +312537276 2 1016 +312537280 2 1016 +312541188 2 1016 +312541192 2 1016 +312541196 2 1016 +312541200 2 1016 +312541204 2 1016 +312541208 2 1016 +312541212 2 1016 +312541216 2 1016 +312541220 2 1016 +312541224 2 1016 +312541228 2 1016 +312541232 2 1016 +312541236 2 1016 +312541240 2 1016 +312541244 2 1016 +312541248 2 1016 +312541252 2 1016 +312541256 2 1016 +312541260 2 1016 +312541264 2 1016 +312541268 2 1016 +312541272 2 1016 +312541276 2 1016 +312541280 2 1016 +312541284 2 1016 +312541288 2 1016 +312541292 2 1016 +312541296 2 1016 +312541300 2 1016 +312541304 2 1016 +312541308 2 1016 +312541312 2 1016 +312541316 2 1016 +312541320 2 1016 +312541324 2 1016 +312541328 2 1016 +312541332 2 1016 +312541336 2 1016 +312541340 2 1016 +312541344 2 1016 +312541348 2 1016 +312541352 2 1016 +312541356 2 1016 +312541360 2 1016 +312541364 2 1016 +312541368 2 1016 +312541372 2 1016 +312541376 2 1016 +312545284 2 1016 +312545288 2 1016 +312545292 2 1016 +312545296 2 1016 +312545300 2 1016 +312545304 2 1016 +312545308 2 1016 +312545312 2 1016 +312545316 2 1016 +312545320 2 1016 +312545324 2 1016 +312545328 2 1016 +312545332 2 1016 +312545336 2 1016 +312545340 2 1016 +312545344 2 1016 +312545348 2 1016 +312545352 2 1016 +312545356 2 1016 +312545360 2 1016 +312545364 2 1016 +312545368 2 1016 +312545372 2 1016 +312545376 2 1016 +312545380 2 1016 +312545384 2 1016 +312545388 2 1016 +312545392 2 1016 +312545396 2 1016 +312545400 2 1016 +312545404 2 1016 +312545408 2 1016 +312545412 2 1016 +312545416 2 1016 +312545420 2 1016 +312545424 2 1016 +312545428 2 1016 +312545432 2 1016 +312545436 2 1016 +312545440 2 1016 +312545444 2 1016 +312545448 2 1016 +312545452 2 1016 +312545456 2 1016 +312545460 2 1016 +312545464 2 1016 +312545468 2 1016 +312545472 2 1016 +312549380 2 1016 +312549384 2 1016 +312549388 2 1016 +312549392 2 1016 +312549396 2 1016 +312549400 2 1016 +312549404 2 1016 +312549408 2 1016 +312549412 2 1016 +312549416 2 1016 +312549420 2 1016 +312549424 2 1016 +312549428 2 1016 +312549432 2 1016 +312549436 2 1016 +312549440 2 1016 +312549444 2 1016 +312549448 2 1016 +312549452 2 1016 +312549456 2 1016 +312549460 2 1016 +312549464 2 1016 +312549468 2 1016 +312549472 2 1016 +312549476 2 1016 +312549480 2 1016 +312549484 2 1016 +312549488 2 1016 +312549492 2 1016 +312549496 2 1016 +312549500 2 1016 +312549504 2 1016 +312549508 2 1016 +312549512 2 1016 +312549516 2 1016 +312549520 2 1016 +312549524 2 1016 +312549528 2 1016 +312549532 2 1016 +312549536 2 1016 +312549540 2 1016 +312549544 2 1016 +312549548 2 1016 +312549552 2 1016 +312549556 2 1016 +312549560 2 1016 +312549564 2 1016 +312549568 2 1016 +312553476 2 1016 +312553480 2 1016 +312553484 2 1016 +312553488 2 1016 +312553492 2 1016 +312553496 2 1016 +312553500 2 1016 +312553504 2 1016 +312553508 2 1016 +312553512 2 1016 +312553516 2 1016 +312553520 2 1016 +312553524 2 1016 +312553528 2 1016 +312553532 2 1016 +312553536 2 1016 +312553540 2 1016 +312553544 2 1016 +312553548 2 1016 +312553552 2 1016 +312553556 2 1016 +312553560 2 1016 +312553564 2 1016 +312553568 2 1016 +312553572 2 1016 +312553576 2 1016 +312553580 2 1016 +312553584 2 1016 +312553588 2 1016 +312553592 2 1016 +312553596 2 1016 +312553600 2 1016 +312553604 2 1016 +312553608 2 1016 +312553612 2 1016 +312553616 2 1016 +312553620 2 1016 +312553624 2 1016 +312553628 2 1016 +312553632 2 1016 +312553636 2 1016 +312553640 2 1016 +312553644 2 1016 +312553648 2 1016 +312553652 2 1016 +312553656 2 1016 +312553660 2 1016 +312553664 2 1016 +312557572 2 1016 +312557576 2 1016 +312557580 2 1016 +312557584 2 1016 +312557588 2 1016 +312557592 2 1016 +312557596 2 1016 +312557600 2 1016 +312557604 2 1016 +312557608 2 1016 +312557612 2 1016 +312557616 2 1016 +312557620 2 1016 +312557624 2 1016 +312557628 2 1016 +312557632 2 1016 +312557636 2 1016 +312557640 2 1016 +312557644 2 1016 +312557648 2 1016 +312557652 2 1016 +312557656 2 1016 +312557660 2 1016 +312557664 2 1016 +312557668 2 1016 +312557672 2 1016 +312557676 2 1016 +312557680 2 1016 +312557684 2 1016 +312557688 2 1016 +312557692 2 1016 +312557696 2 1016 +312557700 2 1016 +312557704 2 1016 +312557708 2 1016 +312557712 2 1016 +312557716 2 1016 +312557720 2 1016 +312557724 2 1016 +312557728 2 1016 +312557732 2 1016 +312557736 2 1016 +312557740 2 1016 +312557744 2 1016 +312557748 2 1016 +312557752 2 1016 +312557756 2 1016 +312557760 2 1016 +312561668 2 1016 +312561672 2 1016 +312561676 2 1016 +312561680 2 1016 +312561684 2 1016 +312561688 2 1016 +312561692 2 1016 +312561696 2 1016 +312561700 2 1016 +312561704 2 1016 +312561708 2 1016 +312561712 2 1016 +312561716 2 1016 +312561720 2 1016 +312561724 2 1016 +312561728 2 1016 +312561732 2 1016 +312561736 2 1016 +312561740 2 1016 +312561744 2 1016 +312561748 2 1016 +312561752 2 1016 +312561756 2 1016 +312561760 2 1016 +312561764 2 1016 +312561768 2 1016 +312561772 2 1016 +312561776 2 1016 +312561780 2 1016 +312561784 2 1016 +312561788 2 1016 +312561792 2 1016 +312561796 2 1016 +312561800 2 1016 +312561804 2 1016 +312561808 2 1016 +312561812 2 1016 +312561816 2 1016 +312561820 2 1016 +312561824 2 1016 +312561828 2 1016 +312561832 2 1016 +312561836 2 1016 +312561840 2 1016 +312561844 2 1016 +312561848 2 1016 +312561852 2 1016 +312561856 2 1016 +312565764 2 1016 +312565768 2 1016 +312565772 2 1016 +312565776 2 1016 +312565780 2 1016 +312565784 2 1016 +312565788 2 1016 +312565792 2 1016 +312565796 2 1016 +312565800 2 1016 +312565804 2 1016 +312565808 2 1016 +312565812 2 1016 +312565816 2 1016 +312565820 2 1016 +312565824 2 1016 +312565828 2 1016 +312565832 2 1016 +312565836 2 1016 +312565840 2 1016 +312565844 2 1016 +312565848 2 1016 +312565852 2 1016 +312565856 2 1016 +312565860 2 1016 +312565864 2 1016 +312565868 2 1016 +312565872 2 1016 +312565876 2 1016 +312565880 2 1016 +312565884 2 1016 +312565888 2 1016 +312565892 2 1016 +312565896 2 1016 +312565900 2 1016 +312565904 2 1016 +312565908 2 1016 +312565912 2 1016 +312565916 2 1016 +312565920 2 1016 +312565924 2 1016 +312565928 2 1016 +312565932 2 1016 +312565936 2 1016 +312565940 2 1016 +312565944 2 1016 +312565948 2 1016 +312565952 2 1016 +312569860 2 1016 +312569864 2 1016 +312569868 2 1016 +312569872 2 1016 +312569876 2 1016 +312569880 2 1016 +312569884 2 1016 +312569888 2 1016 +312569892 2 1016 +312569896 2 1016 +312569900 2 1016 +312569904 2 1016 +312569908 2 1016 +312569912 2 1016 +312569916 2 1016 +312569920 2 1016 +312569924 2 1016 +312569928 2 1016 +312569932 2 1016 +312569936 2 1016 +312569940 2 1016 +312569944 2 1016 +312569948 2 1016 +312569952 2 1016 +312569956 2 1016 +312569960 2 1016 +312569964 2 1016 +312569968 2 1016 +312569972 2 1016 +312569976 2 1016 +312569980 2 1016 +312569984 2 1016 +312569988 2 1016 +312569992 2 1016 +312569996 2 1016 +312570000 2 1016 +312570004 2 1016 +312570008 2 1016 +312570012 2 1016 +312570016 2 1016 +312570020 2 1016 +312570024 2 1016 +312570028 2 1016 +312570032 2 1016 +312570036 2 1016 +312570040 2 1016 +312570044 2 1016 +312570048 2 1016 +312573956 2 1016 +312573960 2 1016 +312573964 2 1016 +312573968 2 1016 +312573972 2 1016 +312573976 2 1016 +312573980 2 1016 +312573984 2 1016 +312573988 2 1016 +312573992 2 1016 +312573996 2 1016 +312574000 2 1016 +312574004 2 1016 +312574008 2 1016 +312574012 2 1016 +312574016 2 1016 +312574020 2 1016 +312574024 2 1016 +312574028 2 1016 +312574032 2 1016 +312574036 2 1016 +312574040 2 1016 +312574044 2 1016 +312574048 2 1016 +312574052 2 1016 +312574056 2 1016 +312574060 2 1016 +312574064 2 1016 +312574068 2 1016 +312574072 2 1016 +312574076 2 1016 +312574080 2 1016 +312574084 2 1016 +312574088 2 1016 +312574092 2 1016 +312574096 2 1016 +312574100 2 1016 +312574104 2 1016 +312574108 2 1016 +312574112 2 1016 +312574116 2 1016 +312574120 2 1016 +312574124 2 1016 +312574128 2 1016 +312574132 2 1016 +312574136 2 1016 +312574140 2 1016 +312574144 2 1016 +312578052 2 1016 +312578056 2 1016 +312578060 2 1016 +312578064 2 1016 +312578068 2 1016 +312578072 2 1016 +312578076 2 1016 +312578080 2 1016 +312578084 2 1016 +312578088 2 1016 +312578092 2 1016 +312578096 2 1016 +312578100 2 1016 +312578104 2 1016 +312578108 2 1016 +312578112 2 1016 +312578116 2 1016 +312578120 2 1016 +312578124 2 1016 +312578128 2 1016 +312578132 2 1016 +312578136 2 1016 +312578140 2 1016 +312578144 2 1016 +312578148 2 1016 +312578152 2 1016 +312578156 2 1016 +312578160 2 1016 +312578164 2 1016 +312578168 2 1016 +312578172 2 1016 +312578176 2 1016 +312578180 2 1016 +312578184 2 1016 +312578188 2 1016 +312578192 2 1016 +312578196 2 1016 +312578200 2 1016 +312578204 2 1016 +312578208 2 1016 +312578212 2 1016 +312578216 2 1016 +312578220 2 1016 +312578224 2 1016 +312578228 2 1016 +312578232 2 1016 +312578236 2 1016 +312578240 2 1016 +312582148 2 1016 +312582152 2 1016 +312582156 2 1016 +312582160 2 1016 +312582164 2 1016 +312582168 2 1016 +312582172 2 1016 +312582176 2 1016 +312582180 2 1016 +312582184 2 1016 +312582188 2 1016 +312582192 2 1016 +312582196 2 1016 +312582200 2 1016 +312582204 2 1016 +312582208 2 1016 +312582212 2 1016 +312582216 2 1016 +312582220 2 1016 +312582224 2 1016 +312582228 2 1016 +312582232 2 1016 +312582236 2 1016 +312582240 2 1016 +312582244 2 1016 +312582248 2 1016 +312582252 2 1016 +312582256 2 1016 +312582260 2 1016 +312582264 2 1016 +312582268 2 1016 +312582272 2 1016 +312582276 2 1016 +312582280 2 1016 +312582284 2 1016 +312582288 2 1016 +312582292 2 1016 +312582296 2 1016 +312582300 2 1016 +312582304 2 1016 +312582308 2 1016 +312582312 2 1016 +312582316 2 1016 +312582320 2 1016 +312582324 2 1016 +312582328 2 1016 +312582332 2 1016 +312582336 2 1016 +312586244 2 1016 +312586248 2 1016 +312586252 2 1016 +312586256 2 1016 +312586260 2 1016 +312586264 2 1016 +312586268 2 1016 +312586272 2 1016 +312586276 2 1016 +312586280 2 1016 +312586284 2 1016 +312586288 2 1016 +312586292 2 1016 +312586296 2 1016 +312586300 2 1016 +312586304 2 1016 +312586308 2 1016 +312586312 2 1016 +312586316 2 1016 +312586320 2 1016 +312586324 2 1016 +312586328 2 1016 +312586332 2 1016 +312586336 2 1016 +312586340 2 1016 +312586344 2 1016 +312586348 2 1016 +312586352 2 1016 +312586356 2 1016 +312586360 2 1016 +312586364 2 1016 +312586368 2 1016 +312586372 2 1016 +312586376 2 1016 +312586380 2 1016 +312586384 2 1016 +312586388 2 1016 +312586392 2 1016 +312586396 2 1016 +312586400 2 1016 +312586404 2 1016 +312586408 2 1016 +312586412 2 1016 +312586416 2 1016 +312586420 2 1016 +312586424 2 1016 +312586428 2 1016 +312586432 2 1016 +312590340 2 1016 +312590344 2 1016 +312590348 2 1016 +312590352 2 1016 +312590356 2 1016 +312590360 2 1016 +312590364 2 1016 +312590368 2 1016 +312590372 2 1016 +312590376 2 1016 +312590380 2 1016 +312590384 2 1016 +312590388 2 1016 +312590392 2 1016 +312590396 2 1016 +312590400 2 1016 +312590404 2 1016 +312590408 2 1016 +312590412 2 1016 +312590416 2 1016 +312590420 2 1016 +312590424 2 1016 +312590428 2 1016 +312590432 2 1016 +312590436 2 1016 +312590440 2 1016 +312590444 2 1016 +312590448 2 1016 +312590452 2 1016 +312590456 2 1016 +312590460 2 1016 +312590464 2 1016 +312590468 2 1016 +312590472 2 1016 +312590476 2 1016 +312590480 2 1016 +312590484 2 1016 +312590488 2 1016 +312590492 2 1016 +312590496 2 1016 +312590500 2 1016 +312590504 2 1016 +312590508 2 1016 +312590512 2 1016 +312590516 2 1016 +312590520 2 1016 +312590524 2 1016 +312590528 2 1016 +312594436 2 1016 +312594440 2 1016 +312594444 2 1016 +312594448 2 1016 +312594452 2 1016 +312594456 2 1016 +312594460 2 1016 +312594464 2 1016 +312594468 2 1016 +312594472 2 1016 +312594476 2 1016 +312594480 2 1016 +312594484 2 1016 +312594488 2 1016 +312594492 2 1016 +312594496 2 1016 +312594500 2 1016 +312594504 2 1016 +312594508 2 1016 +312594512 2 1016 +312594516 2 1016 +312594520 2 1016 +312594524 2 1016 +312594528 2 1016 +312594532 2 1016 +312594536 2 1016 +312594540 2 1016 +312594544 2 1016 +312594548 2 1016 +312594552 2 1016 +312594556 2 1016 +312594560 2 1016 +312594564 2 1016 +312594568 2 1016 +312594572 2 1016 +312594576 2 1016 +312594580 2 1016 +312594584 2 1016 +312594588 2 1016 +312594592 2 1016 +312594596 2 1016 +312594600 2 1016 +312594604 2 1016 +312594608 2 1016 +312594612 2 1016 +312594616 2 1016 +312594620 2 1016 +312594624 2 1016 +312598532 2 1016 +312598536 2 1016 +312598540 2 1016 +312598544 2 1016 +312598548 2 1016 +312598552 2 1016 +312598556 2 1016 +312598560 2 1016 +312598564 2 1016 +312598568 2 1016 +312598572 2 1016 +312598576 2 1016 +312598580 2 1016 +312598584 2 1016 +312598588 2 1016 +312598592 2 1016 +312598596 2 1016 +312598600 2 1016 +312598604 2 1016 +312598608 2 1016 +312598612 2 1016 +312598616 2 1016 +312598620 2 1016 +312598624 2 1016 +312598628 2 1016 +312598632 2 1016 +312598636 2 1016 +312598640 2 1016 +312598644 2 1016 +312598648 2 1016 +312598652 2 1016 +312598656 2 1016 +312598660 2 1016 +312598664 2 1016 +312598668 2 1016 +312598672 2 1016 +312598676 2 1016 +312598680 2 1016 +312598684 2 1016 +312598688 2 1016 +312598692 2 1016 +312598696 2 1016 +312598700 2 1016 +312598704 2 1016 +312598708 2 1016 +312598712 2 1016 +312598716 2 1016 +312598720 2 1016 +312602628 2 1016 +312602632 2 1016 +312602636 2 1016 +312602640 2 1016 +312602644 2 1016 +312602648 2 1016 +312602652 2 1016 +312602656 2 1016 +312602660 2 1016 +312602664 2 1016 +312602668 2 1016 +312602672 2 1016 +312602676 2 1016 +312602680 2 1016 +312602684 2 1016 +312602688 2 1016 +312602692 2 1016 +312602696 2 1016 +312602700 2 1016 +312602704 2 1016 +312602708 2 1016 +312602712 2 1016 +312602716 2 1016 +312602720 2 1016 +312602724 2 1016 +312602728 2 1016 +312602732 2 1016 +312602736 2 1016 +312602740 2 1016 +312602744 2 1016 +312602748 2 1016 +312602752 2 1016 +312602756 2 1016 +312602760 2 1016 +312602764 2 1016 +312602768 2 1016 +312602772 2 1016 +312602776 2 1016 +312602780 2 1016 +312602784 2 1016 +312602788 2 1016 +312602792 2 1016 +312602796 2 1016 +312602800 2 1016 +312602804 2 1016 +312602808 2 1016 +312602812 2 1016 +312602816 2 1016 +312606724 2 1016 +312606728 2 1016 +312606732 2 1016 +312606736 2 1016 +312606740 2 1016 +312606744 2 1016 +312606748 2 1016 +312606752 2 1016 +312606756 2 1016 +312606760 2 1016 +312606764 2 1016 +312606768 2 1016 +312606772 2 1016 +312606776 2 1016 +312606780 2 1016 +312606784 2 1016 +312606788 2 1016 +312606792 2 1016 +312606796 2 1016 +312606800 2 1016 +312606804 2 1016 +312606808 2 1016 +312606812 2 1016 +312606816 2 1016 +312606820 2 1016 +312606824 2 1016 +312606828 2 1016 +312606832 2 1016 +312606836 2 1016 +312606840 2 1016 +312606844 2 1016 +312606848 2 1016 +312606852 2 1016 +312606856 2 1016 +312606860 2 1016 +312606864 2 1016 +312606868 2 1016 +312606872 2 1016 +312606876 2 1016 +312606880 2 1016 +312606884 2 1016 +312606888 2 1016 +312606892 2 1016 +312606896 2 1016 +312606900 2 1016 +312606904 2 1016 +312606908 2 1016 +312606912 2 1016 +312610820 2 1016 +312610824 2 1016 +312610828 2 1016 +312610832 2 1016 +312610836 2 1016 +312610840 2 1016 +312610844 2 1016 +312610848 2 1016 +312610852 2 1016 +312610856 2 1016 +312610860 2 1016 +312610864 2 1016 +312610868 2 1016 +312610872 2 1016 +312610876 2 1016 +312610880 2 1016 +312610884 2 1016 +312610888 2 1016 +312610892 2 1016 +312610896 2 1016 +312610900 2 1016 +312610904 2 1016 +312610908 2 1016 +312610912 2 1016 +312610916 2 1016 +312610920 2 1016 +312610924 2 1016 +312610928 2 1016 +312610932 2 1016 +312610936 2 1016 +312610940 2 1016 +312610944 2 1016 +312610948 2 1016 +312610952 2 1016 +312610956 2 1016 +312610960 2 1016 +312610964 2 1016 +312610968 2 1016 +312610972 2 1016 +312610976 2 1016 +312610980 2 1016 +312610984 2 1016 +312610988 2 1016 +312610992 2 1016 +312610996 2 1016 +312611000 2 1016 +312611004 2 1016 +312611008 2 1016 +312614916 2 1016 +312614920 2 1016 +312614924 2 1016 +312614928 2 1016 +312614932 2 1016 +312614936 2 1016 +312614940 2 1016 +312614944 2 1016 +312614948 2 1016 +312614952 2 1016 +312614956 2 1016 +312614960 2 1016 +312614964 2 1016 +312614968 2 1016 +312614972 2 1016 +312614976 2 1016 +312614980 2 1016 +312614984 2 1016 +312614988 2 1016 +312614992 2 1016 +312614996 2 1016 +312615000 2 1016 +312615004 2 1016 +312615008 2 1016 +312615012 2 1016 +312615016 2 1016 +312615020 2 1016 +312615024 2 1016 +312615028 2 1016 +312615032 2 1016 +312615036 2 1016 +312615040 2 1016 +312615044 2 1016 +312615048 2 1016 +312615052 2 1016 +312615056 2 1016 +312615060 2 1016 +312615064 2 1016 +312615068 2 1016 +312615072 2 1016 +312615076 2 1016 +312615080 2 1016 +312615084 2 1016 +312615088 2 1016 +312615092 2 1016 +312615096 2 1016 +312615100 2 1016 +312615104 2 1016 +312619012 2 1016 +312619016 2 1016 +312619020 2 1016 +312619024 2 1016 +312619028 2 1016 +312619032 2 1016 +312619036 2 1016 +312619040 2 1016 +312619044 2 1016 +312619048 2 1016 +312619052 2 1016 +312619056 2 1016 +312619060 2 1016 +312619064 2 1016 +312619068 2 1016 +312619072 2 1016 +312619076 2 1016 +312619080 2 1016 +312619084 2 1016 +312619088 2 1016 +312619092 2 1016 +312619096 2 1016 +312619100 2 1016 +312619104 2 1016 +312619108 2 1016 +312619112 2 1016 +312619116 2 1016 +312619120 2 1016 +312619124 2 1016 +312619128 2 1016 +312619132 2 1016 +312619136 2 1016 +312619140 2 1016 +312619144 2 1016 +312619148 2 1016 +312619152 2 1016 +312619156 2 1016 +312619160 2 1016 +312619164 2 1016 +312619168 2 1016 +312619172 2 1016 +312619176 2 1016 +312619180 2 1016 +312619184 2 1016 +312619188 2 1016 +312619192 2 1016 +312619196 2 1016 +312619200 2 1016 +312623108 2 1016 +312623112 2 1016 +312623116 2 1016 +312623120 2 1016 +312623124 2 1016 +312623128 2 1016 +312623132 2 1016 +312623136 2 1016 +312623140 2 1016 +312623144 2 1016 +312623148 2 1016 +312623152 2 1016 +312623156 2 1016 +312623160 2 1016 +312623164 2 1016 +312623168 2 1016 +312623172 2 1016 +312623176 2 1016 +312623180 2 1016 +312623184 2 1016 +312623188 2 1016 +312623192 2 1016 +312623196 2 1016 +312623200 2 1016 +312623204 2 1016 +312623208 2 1016 +312623212 2 1016 +312623216 2 1016 +312623220 2 1016 +312623224 2 1016 +312623228 2 1016 +312623232 2 1016 +312623236 2 1016 +312623240 2 1016 +312623244 2 1016 +312623248 2 1016 +312623252 2 1016 +312623256 2 1016 +312623260 2 1016 +312623264 2 1016 +312623268 2 1016 +312623272 2 1016 +312623276 2 1016 +312623280 2 1016 +312623284 2 1016 +312623288 2 1016 +312623292 2 1016 +312623296 2 1016 +312627204 2 1016 +312627208 2 1016 +312627212 2 1016 +312627216 2 1016 +312627220 2 1016 +312627224 2 1016 +312627228 2 1016 +312627232 2 1016 +312627236 2 1016 +312627240 2 1016 +312627244 2 1016 +312627248 2 1016 +312627252 2 1016 +312627256 2 1016 +312627260 2 1016 +312627264 2 1016 +312627268 2 1016 +312627272 2 1016 +312627276 2 1016 +312627280 2 1016 +312627284 2 1016 +312627288 2 1016 +312627292 2 1016 +312627296 2 1016 +312627300 2 1016 +312627304 2 1016 +312627308 2 1016 +312627312 2 1016 +312627316 2 1016 +312627320 2 1016 +312627324 2 1016 +312627328 2 1016 +312627332 2 1016 +312627336 2 1016 +312627340 2 1016 +312627344 2 1016 +312627348 2 1016 +312627352 2 1016 +312627356 2 1016 +312627360 2 1016 +312627364 2 1016 +312627368 2 1016 +312627372 2 1016 +312627376 2 1016 +312627380 2 1016 +312627384 2 1016 +312627388 2 1016 +312627392 2 1016 +312631300 2 1016 +312631304 2 1016 +312631308 2 1016 +312631312 2 1016 +312631316 2 1016 +312631320 2 1016 +312631324 2 1016 +312631328 2 1016 +312631332 2 1016 +312631336 2 1016 +312631340 2 1016 +312631344 2 1016 +312631348 2 1016 +312631352 2 1016 +312631356 2 1016 +312631360 2 1016 +312631364 2 1016 +312631368 2 1016 +312631372 2 1016 +312631376 2 1016 +312631380 2 1016 +312631384 2 1016 +312631388 2 1016 +312631392 2 1016 +312631396 2 1016 +312631400 2 1016 +312631404 2 1016 +312631408 2 1016 +312631412 2 1016 +312631416 2 1016 +312631420 2 1016 +312631424 2 1016 +312631428 2 1016 +312631432 2 1016 +312631436 2 1016 +312631440 2 1016 +312631444 2 1016 +312631448 2 1016 +312631452 2 1016 +312631456 2 1016 +312631460 2 1016 +312631464 2 1016 +312631468 2 1016 +312631472 2 1016 +312631476 2 1016 +312631480 2 1016 +312631484 2 1016 +312631488 2 1016 +312635396 2 1016 +312635400 2 1016 +312635404 2 1016 +312635408 2 1016 +312635412 2 1016 +312635416 2 1016 +312635420 2 1016 +312635424 2 1016 +312635428 2 1016 +312635432 2 1016 +312635436 2 1016 +312635440 2 1016 +312635444 2 1016 +312635448 2 1016 +312635452 2 1016 +312635456 2 1016 +312635460 2 1016 +312635464 2 1016 +312635468 2 1016 +312635472 2 1016 +312635476 2 1016 +312635480 2 1016 +312635484 2 1016 +312635488 2 1016 +312635492 2 1016 +312635496 2 1016 +312635500 2 1016 +312635504 2 1016 +312635508 2 1016 +312635512 2 1016 +312635516 2 1016 +312635520 2 1016 +312635524 2 1016 +312635528 2 1016 +312635532 2 1016 +312635536 2 1016 +312635540 2 1016 +312635544 2 1016 +312635548 2 1016 +312635552 2 1016 +312635556 2 1016 +312635560 2 1016 +312635564 2 1016 +312635568 2 1016 +312635572 2 1016 +312635576 2 1016 +312635580 2 1016 +312635584 2 1016 +312639492 2 1016 +312639496 2 1016 +312639500 2 1016 +312639504 2 1016 +312639508 2 1016 +312639512 2 1016 +312639516 2 1016 +312639520 2 1016 +312639524 2 1016 +312639528 2 1016 +312639532 2 1016 +312639536 2 1016 +312639540 2 1016 +312639544 2 1016 +312639548 2 1016 +312639552 2 1016 +312639556 2 1016 +312639560 2 1016 +312639564 2 1016 +312639568 2 1016 +312639572 2 1016 +312639576 2 1016 +312639580 2 1016 +312639584 2 1016 +312639588 2 1016 +312639592 2 1016 +312639596 2 1016 +312639600 2 1016 +312639604 2 1016 +312639608 2 1016 +312639612 2 1016 +312639616 2 1016 +312639620 2 1016 +312639624 2 1016 +312639628 2 1016 +312639632 2 1016 +312639636 2 1016 +312639640 2 1016 +312639644 2 1016 +312639648 2 1016 +312639652 2 1016 +312639656 2 1016 +312639660 2 1016 +312639664 2 1016 +312639668 2 1016 +312639672 2 1016 +312639676 2 1016 +312639680 2 1016 +312643588 2 1016 +312643592 2 1016 +312643596 2 1016 +312643600 2 1016 +312643604 2 1016 +312643608 2 1016 +312643612 2 1016 +312643616 2 1016 +312643620 2 1016 +312643624 2 1016 +312643628 2 1016 +312643632 2 1016 +312643636 2 1016 +312643640 2 1016 +312643644 2 1016 +312643648 2 1016 +312643652 2 1016 +312643656 2 1016 +312643660 2 1016 +312643664 2 1016 +312643668 2 1016 +312643672 2 1016 +312643676 2 1016 +312643680 2 1016 +312643684 2 1016 +312643688 2 1016 +312643692 2 1016 +312643696 2 1016 +312643700 2 1016 +312643704 2 1016 +312643708 2 1016 +312643712 2 1016 +312643716 2 1016 +312643720 2 1016 +312643724 2 1016 +312643728 2 1016 +312643732 2 1016 +312643736 2 1016 +312643740 2 1016 +312643744 2 1016 +312643748 2 1016 +312643752 2 1016 +312643756 2 1016 +312643760 2 1016 +312643764 2 1016 +312643768 2 1016 +312643772 2 1016 +312643776 2 1016 +312647684 2 1016 +312647688 2 1016 +312647692 2 1016 +312647696 2 1016 +312647700 2 1016 +312647704 2 1016 +312647708 2 1016 +312647712 2 1016 +312647716 2 1016 +312647720 2 1016 +312647724 2 1016 +312647728 2 1016 +312647732 2 1016 +312647736 2 1016 +312647740 2 1016 +312647744 2 1016 +312647748 2 1016 +312647752 2 1016 +312647756 2 1016 +312647760 2 1016 +312647764 2 1016 +312647768 2 1016 +312647772 2 1016 +312647776 2 1016 +312647780 2 1016 +312647784 2 1016 +312647788 2 1016 +312647792 2 1016 +312647796 2 1016 +312647800 2 1016 +312647804 2 1016 +312647808 2 1016 +312647812 2 1016 +312647816 2 1016 +312647820 2 1016 +312647824 2 1016 +312647828 2 1016 +312647832 2 1016 +312647836 2 1016 +312647840 2 1016 +312647844 2 1016 +312647848 2 1016 +312647852 2 1016 +312647856 2 1016 +312647860 2 1016 +312647864 2 1016 +312647868 2 1016 +312647872 2 1016 +312651780 2 1016 +312651784 2 1016 +312651788 2 1016 +312651792 2 1016 +312651796 2 1016 +312651800 2 1016 +312651804 2 1016 +312651808 2 1016 +312651812 2 1016 +312651816 2 1016 +312651820 2 1016 +312651824 2 1016 +312651828 2 1016 +312651832 2 1016 +312651836 2 1016 +312651840 2 1016 +312651844 2 1016 +312651848 2 1016 +312651852 2 1016 +312651856 2 1016 +312651860 2 1016 +312651864 2 1016 +312651868 2 1016 +312651872 2 1016 +312651876 2 1016 +312651880 2 1016 +312651884 2 1016 +312651888 2 1016 +312651892 2 1016 +312651896 2 1016 +312651900 2 1016 +312651904 2 1016 +312651908 2 1016 +312651912 2 1016 +312651916 2 1016 +312651920 2 1016 +312651924 2 1016 +312651928 2 1016 +312651932 2 1016 +312651936 2 1016 +312651940 2 1016 +312651944 2 1016 +312651948 2 1016 +312651952 2 1016 +312651956 2 1016 +312651960 2 1016 +312651964 2 1016 +312651968 2 1016 +312655876 2 1016 +312655880 2 1016 +312655884 2 1016 +312655888 2 1016 +312655892 2 1016 +312655896 2 1016 +312655900 2 1016 +312655904 2 1016 +312655908 2 1016 +312655912 2 1016 +312655916 2 1016 +312655920 2 1016 +312655924 2 1016 +312655928 2 1016 +312655932 2 1016 +312655936 2 1016 +312655940 2 1016 +312655944 2 1016 +312655948 2 1016 +312655952 2 1016 +312655956 2 1016 +312655960 2 1016 +312655964 2 1016 +312655968 2 1016 +312655972 2 1016 +312655976 2 1016 +312655980 2 1016 +312655984 2 1016 +312655988 2 1016 +312655992 2 1016 +312655996 2 1016 +312656000 2 1016 +312656004 2 1016 +312656008 2 1016 +312656012 2 1016 +312656016 2 1016 +312656020 2 1016 +312656024 2 1016 +312656028 2 1016 +312656032 2 1016 +312656036 2 1016 +312656040 2 1016 +312656044 2 1016 +312656048 2 1016 +312656052 2 1016 +312656056 2 1016 +312656060 2 1016 +312656064 2 1016 +312659972 2 1016 +312659976 2 1016 +312659980 2 1016 +312659984 2 1016 +312659988 2 1016 +312659992 2 1016 +312659996 2 1016 +312660000 2 1016 +312660004 2 1016 +312660008 2 1016 +312660012 2 1016 +312660016 2 1016 +312660020 2 1016 +312660024 2 1016 +312660028 2 1016 +312660032 2 1016 +312660036 2 1016 +312660040 2 1016 +312660044 2 1016 +312660048 2 1016 +312660052 2 1016 +312660056 2 1016 +312660060 2 1016 +312660064 2 1016 +312660068 2 1016 +312660072 2 1016 +312660076 2 1016 +312660080 2 1016 +312660084 2 1016 +312660088 2 1016 +312660092 2 1016 +312660096 2 1016 +312660100 2 1016 +312660104 2 1016 +312660108 2 1016 +312660112 2 1016 +312660116 2 1016 +312660120 2 1016 +312660124 2 1016 +312660128 2 1016 +312660132 2 1016 +312660136 2 1016 +312660140 2 1016 +312660144 2 1016 +312660148 2 1016 +312660152 2 1016 +312660156 2 1016 +312660160 2 1016 +312664068 2 1016 +312664072 2 1016 +312664076 2 1016 +312664080 2 1016 +312664084 2 1016 +312664088 2 1016 +312664092 2 1016 +312664096 2 1016 +312664100 2 1016 +312664104 2 1016 +312664108 2 1016 +312664112 2 1016 +312664116 2 1016 +312664120 2 1016 +312664124 2 1016 +312664128 2 1016 +312664132 2 1016 +312664136 2 1016 +312664140 2 1016 +312664144 2 1016 +312664148 2 1016 +312664152 2 1016 +312664156 2 1016 +312664160 2 1016 +312664164 2 1016 +312664168 2 1016 +312664172 2 1016 +312664176 2 1016 +312664180 2 1016 +312664184 2 1016 +312664188 2 1016 +312664192 2 1016 +312664196 2 1016 +312664200 2 1016 +312664204 2 1016 +312664208 2 1016 +312664212 2 1016 +312664216 2 1016 +312664220 2 1016 +312664224 2 1016 +312664228 2 1016 +312664232 2 1016 +312664236 2 1016 +312664240 2 1016 +312664244 2 1016 +312664248 2 1016 +312664252 2 1016 +312664256 2 1016 +312668164 2 1016 +312668168 2 1016 +312668172 2 1016 +312668176 2 1016 +312668180 2 1016 +312668184 2 1016 +312668188 2 1016 +312668192 2 1016 +312668196 2 1016 +312668200 2 1016 +312668204 2 1016 +312668208 2 1016 +312668212 2 1016 +312668216 2 1016 +312668220 2 1016 +312668224 2 1016 +312668228 2 1016 +312668232 2 1016 +312668236 2 1016 +312668240 2 1016 +312668244 2 1016 +312668248 2 1016 +312668252 2 1016 +312668256 2 1016 +312668260 2 1016 +312668264 2 1016 +312668268 2 1016 +312668272 2 1016 +312668276 2 1016 +312668280 2 1016 +312668284 2 1016 +312668288 2 1016 +312668292 2 1016 +312668296 2 1016 +312668300 2 1016 +312668304 2 1016 +312668308 2 1016 +312668312 2 1016 +312668316 2 1016 +312668320 2 1016 +312668324 2 1016 +312668328 2 1016 +312668332 2 1016 +312668336 2 1016 +312668340 2 1016 +312668344 2 1016 +312668348 2 1016 +312668352 2 1016 +312672260 2 1016 +312672264 2 1016 +312672268 2 1016 +312672272 2 1016 +312672276 2 1016 +312672280 2 1016 +312672284 2 1016 +312672288 2 1016 +312672292 2 1016 +312672296 2 1016 +312672300 2 1016 +312672304 2 1016 +312672308 2 1016 +312672312 2 1016 +312672316 2 1016 +312672320 2 1016 +312672324 2 1016 +312672328 2 1016 +312672332 2 1016 +312672336 2 1016 +312672340 2 1016 +312672344 2 1016 +312672348 2 1016 +312672352 2 1016 +312672356 2 1016 +312672360 2 1016 +312672364 2 1016 +312672368 2 1016 +312672372 2 1016 +312672376 2 1016 +312672380 2 1016 +312672384 2 1016 +312672388 2 1016 +312672392 2 1016 +312672396 2 1016 +312672400 2 1016 +312672404 2 1016 +312672408 2 1016 +312672412 2 1016 +312672416 2 1016 +312672420 2 1016 +312672424 2 1016 +312672428 2 1016 +312672432 2 1016 +312672436 2 1016 +312672440 2 1016 +312672444 2 1016 +312672448 2 1016 +312676356 2 1016 +312676360 2 1016 +312676364 2 1016 +312676368 2 1016 +312676372 2 1016 +312676376 2 1016 +312676380 2 1016 +312676384 2 1016 +312676388 2 1016 +312676392 2 1016 +312676396 2 1016 +312676400 2 1016 +312676404 2 1016 +312676408 2 1016 +312676412 2 1016 +312676416 2 1016 +312676420 2 1016 +312676424 2 1016 +312676428 2 1016 +312676432 2 1016 +312676436 2 1016 +312676440 2 1016 +312676444 2 1016 +312676448 2 1016 +312676452 2 1016 +312676456 2 1016 +312676460 2 1016 +312676464 2 1016 +312676468 2 1016 +312676472 2 1016 +312676476 2 1016 +312676480 2 1016 +312676484 2 1016 +312676488 2 1016 +312676492 2 1016 +312676496 2 1016 +312676500 2 1016 +312676504 2 1016 +312676508 2 1016 +312676512 2 1016 +312676516 2 1016 +312676520 2 1016 +312676524 2 1016 +312676528 2 1016 +312676532 2 1016 +312676536 2 1016 +312676540 2 1016 +312676544 2 1016 +312680452 2 1016 +312680456 2 1016 +312680460 2 1016 +312680464 2 1016 +312680468 2 1016 +312680472 2 1016 +312680476 2 1016 +312680480 2 1016 +312680484 2 1016 +312680488 2 1016 +312680492 2 1016 +312680496 2 1016 +312680500 2 1016 +312680504 2 1016 +312680508 2 1016 +312680512 2 1016 +312680516 2 1016 +312680520 2 1016 +312680524 2 1016 +312680528 2 1016 +312680532 2 1016 +312680536 2 1016 +312680540 2 1016 +312680544 2 1016 +312680548 2 1016 +312680552 2 1016 +312680556 2 1016 +312680560 2 1016 +312680564 2 1016 +312680568 2 1016 +312680572 2 1016 +312680576 2 1016 +312680580 2 1016 +312680584 2 1016 +312680588 2 1016 +312680592 2 1016 +312680596 2 1016 +312680600 2 1016 +312680604 2 1016 +312680608 2 1016 +312680612 2 1016 +312680616 2 1016 +312680620 2 1016 +312680624 2 1016 +312680628 2 1016 +312680632 2 1016 +312680636 2 1016 +312680640 2 1016 +312684548 2 1016 +312684552 2 1016 +312684556 2 1016 +312684560 2 1016 +312684564 2 1016 +312684568 2 1016 +312684572 2 1016 +312684576 2 1016 +312684580 2 1016 +312684584 2 1016 +312684588 2 1016 +312684592 2 1016 +312684596 2 1016 +312684600 2 1016 +312684604 2 1016 +312684608 2 1016 +312684612 2 1016 +312684616 2 1016 +312684620 2 1016 +312684624 2 1016 +312684628 2 1016 +312684632 2 1016 +312684636 2 1016 +312684640 2 1016 +312684644 2 1016 +312684648 2 1016 +312684652 2 1016 +312684656 2 1016 +312684660 2 1016 +312684664 2 1016 +312684668 2 1016 +312684672 2 1016 +312684676 2 1016 +312684680 2 1016 +312684684 2 1016 +312684688 2 1016 +312684692 2 1016 +312684696 2 1016 +312684700 2 1016 +312684704 2 1016 +312684708 2 1016 +312684712 2 1016 +312684716 2 1016 +312684720 2 1016 +312684724 2 1016 +312684728 2 1016 +312684732 2 1016 +312684736 2 1016 +312688644 2 1016 +312688648 2 1016 +312688652 2 1016 +312688656 2 1016 +312688660 2 1016 +312688664 2 1016 +312688668 2 1016 +312688672 2 1016 +312688676 2 1016 +312688680 2 1016 +312688684 2 1016 +312688688 2 1016 +312688692 2 1016 +312688696 2 1016 +312688700 2 1016 +312688704 2 1016 +312688708 2 1016 +312688712 2 1016 +312688716 2 1016 +312688720 2 1016 +312688724 2 1016 +312688728 2 1016 +312688732 2 1016 +312688736 2 1016 +312688740 2 1016 +312688744 2 1016 +312688748 2 1016 +312688752 2 1016 +312688756 2 1016 +312688760 2 1016 +312688764 2 1016 +312688768 2 1016 +312688772 2 1016 +312688776 2 1016 +312688780 2 1016 +312688784 2 1016 +312688788 2 1016 +312688792 2 1016 +312688796 2 1016 +312688800 2 1016 +312688804 2 1016 +312688808 2 1016 +312688812 2 1016 +312688816 2 1016 +312688820 2 1016 +312688824 2 1016 +312688828 2 1016 +312688832 2 1016 +312692740 2 1016 +312692744 2 1016 +312692748 2 1016 +312692752 2 1016 +312692756 2 1016 +312692760 2 1016 +312692764 2 1016 +312692768 2 1016 +312692772 2 1016 +312692776 2 1016 +312692780 2 1016 +312692784 2 1016 +312692788 2 1016 +312692792 2 1016 +312692796 2 1016 +312692800 2 1016 +312692804 2 1016 +312692808 2 1016 +312692812 2 1016 +312692816 2 1016 +312692820 2 1016 +312692824 2 1016 +312692828 2 1016 +312692832 2 1016 +312692836 2 1016 +312692840 2 1016 +312692844 2 1016 +312692848 2 1016 +312692852 2 1016 +312692856 2 1016 +312692860 2 1016 +312692864 2 1016 +312692868 2 1016 +312692872 2 1016 +312692876 2 1016 +312692880 2 1016 +312692884 2 1016 +312692888 2 1016 +312692892 2 1016 +312692896 2 1016 +312692900 2 1016 +312692904 2 1016 +312692908 2 1016 +312692912 2 1016 +312692916 2 1016 +312692920 2 1016 +312692924 2 1016 +312692928 2 1016 +312696836 2 1016 +312696840 2 1016 +312696844 2 1016 +312696848 2 1016 +312696852 2 1016 +312696856 2 1016 +312696860 2 1016 +312696864 2 1016 +312696868 2 1016 +312696872 2 1016 +312696876 2 1016 +312696880 2 1016 +312696884 2 1016 +312696888 2 1016 +312696892 2 1016 +312696896 2 1016 +312696900 2 1016 +312696904 2 1016 +312696908 2 1016 +312696912 2 1016 +312696916 2 1016 +312696920 2 1016 +312696924 2 1016 +312696928 2 1016 +312696932 2 1016 +312696936 2 1016 +312696940 2 1016 +312696944 2 1016 +312696948 2 1016 +312696952 2 1016 +312696956 2 1016 +312696960 2 1016 +312696964 2 1016 +312696968 2 1016 +312696972 2 1016 +312696976 2 1016 +312696980 2 1016 +312696984 2 1016 +312696988 2 1016 +312696992 2 1016 +312696996 2 1016 +312697000 2 1016 +312697004 2 1016 +312697008 2 1016 +312697012 2 1016 +312697016 2 1016 +312697020 2 1016 +312697024 2 1016 +312700932 2 1016 +312700936 2 1016 +312700940 2 1016 +312700944 2 1016 +312700948 2 1016 +312700952 2 1016 +312700956 2 1016 +312700960 2 1016 +312700964 2 1016 +312700968 2 1016 +312700972 2 1016 +312700976 2 1016 +312700980 2 1016 +312700984 2 1016 +312700988 2 1016 +312700992 2 1016 +312700996 2 1016 +312701000 2 1016 +312701004 2 1016 +312701008 2 1016 +312701012 2 1016 +312701016 2 1016 +312701020 2 1016 +312701024 2 1016 +312701028 2 1016 +312701032 2 1016 +312701036 2 1016 +312701040 2 1016 +312701044 2 1016 +312701048 2 1016 +312701052 2 1016 +312701056 2 1016 +312701060 2 1016 +312701064 2 1016 +312701068 2 1016 +312701072 2 1016 +312701076 2 1016 +312701080 2 1016 +312701084 2 1016 +312701088 2 1016 +312701092 2 1016 +312701096 2 1016 +312701100 2 1016 +312701104 2 1016 +312701108 2 1016 +312701112 2 1016 +312701116 2 1016 +312701120 2 1016 +312705028 2 1016 +312705032 2 1016 +312705036 2 1016 +312705040 2 1016 +312705044 2 1016 +312705048 2 1016 +312705052 2 1016 +312705056 2 1016 +312705060 2 1016 +312705064 2 1016 +312705068 2 1016 +312705072 2 1016 +312705076 2 1016 +312705080 2 1016 +312705084 2 1016 +312705088 2 1016 +312705092 2 1016 +312705096 2 1016 +312705100 2 1016 +312705104 2 1016 +312705108 2 1016 +312705112 2 1016 +312705116 2 1016 +312705120 2 1016 +312705124 2 1016 +312705128 2 1016 +312705132 2 1016 +312705136 2 1016 +312705140 2 1016 +312705144 2 1016 +312705148 2 1016 +312705152 2 1016 +312705156 2 1016 +312705160 2 1016 +312705164 2 1016 +312705168 2 1016 +312705172 2 1016 +312705176 2 1016 +312705180 2 1016 +312705184 2 1016 +312705188 2 1016 +312705192 2 1016 +312705196 2 1016 +312705200 2 1016 +312705204 2 1016 +312705208 2 1016 +312705212 2 1016 +312705216 2 1016 +312709124 2 1016 +312709128 2 1016 +312709132 2 1016 +312709136 2 1016 +312709140 2 1016 +312709144 2 1016 +312709148 2 1016 +312709152 2 1016 +312709156 2 1016 +312709160 2 1016 +312709164 2 1016 +312709168 2 1016 +312709172 2 1016 +312709176 2 1016 +312709180 2 1016 +312709184 2 1016 +312709188 2 1016 +312709192 2 1016 +312709196 2 1016 +312709200 2 1016 +312709204 2 1016 +312709208 2 1016 +312709212 2 1016 +312709216 2 1016 +312709220 2 1016 +312709224 2 1016 +312709228 2 1016 +312709232 2 1016 +312709236 2 1016 +312709240 2 1016 +312709244 2 1016 +312709248 2 1016 +312709252 2 1016 +312709256 2 1016 +312709260 2 1016 +312709264 2 1016 +312709268 2 1016 +312709272 2 1016 +312709276 2 1016 +312709280 2 1016 +312709284 2 1016 +312709288 2 1016 +312709292 2 1016 +312709296 2 1016 +312709300 2 1016 +312709304 2 1016 +312709308 2 1016 +312709312 2 1016 +312713220 2 1016 +312713224 2 1016 +312713228 2 1016 +312713232 2 1016 +312713236 2 1016 +312713240 2 1016 +312713244 2 1016 +312713248 2 1016 +312713252 2 1016 +312713256 2 1016 +312713260 2 1016 +312713264 2 1016 +312713268 2 1016 +312713272 2 1016 +312713276 2 1016 +312713280 2 1016 +312713284 2 1016 +312713288 2 1016 +312713292 2 1016 +312713296 2 1016 +312713300 2 1016 +312713304 2 1016 +312713308 2 1016 +312713312 2 1016 +312713316 2 1016 +312713320 2 1016 +312713324 2 1016 +312713328 2 1016 +312713332 2 1016 +312713336 2 1016 +312713340 2 1016 +312713344 2 1016 +312713348 2 1016 +312713352 2 1016 +312713356 2 1016 +312713360 2 1016 +312713364 2 1016 +312713368 2 1016 +312713372 2 1016 +312713376 2 1016 +312713380 2 1016 +312713384 2 1016 +312713388 2 1016 +312713392 2 1016 +312713396 2 1016 +312713400 2 1016 +312713404 2 1016 +312713408 2 1016 +312717316 2 1016 +312717320 2 1016 +312717324 2 1016 +312717328 2 1016 +312717332 2 1016 +312717336 2 1016 +312717340 2 1016 +312717344 2 1016 +312717348 2 1016 +312717352 2 1016 +312717356 2 1016 +312717360 2 1016 +312717364 2 1016 +312717368 2 1016 +312717372 2 1016 +312717376 2 1016 +312717380 2 1016 +312717384 2 1016 +312717388 2 1016 +312717392 2 1016 +312717396 2 1016 +312717400 2 1016 +312717404 2 1016 +312717408 2 1016 +312717412 2 1016 +312717416 2 1016 +312717420 2 1016 +312717424 2 1016 +312717428 2 1016 +312717432 2 1016 +312717436 2 1016 +312717440 2 1016 +312717444 2 1016 +312717448 2 1016 +312717452 2 1016 +312717456 2 1016 +312717460 2 1016 +312717464 2 1016 +312717468 2 1016 +312717472 2 1016 +312717476 2 1016 +312717480 2 1016 +312717484 2 1016 +312717488 2 1016 +312717492 2 1016 +312717496 2 1016 +312717500 2 1016 +312717504 2 1016 +312721412 2 1016 +312721416 2 1016 +312721420 2 1016 +312721424 2 1016 +312721428 2 1016 +312721432 2 1016 +312721436 2 1016 +312721440 2 1016 +312721444 2 1016 +312721448 2 1016 +312721452 2 1016 +312721456 2 1016 +312721460 2 1016 +312721464 2 1016 +312721468 2 1016 +312721472 2 1016 +312721476 2 1016 +312721480 2 1016 +312721484 2 1016 +312721488 2 1016 +312721492 2 1016 +312721496 2 1016 +312721500 2 1016 +312721504 2 1016 +312721508 2 1016 +312721512 2 1016 +312721516 2 1016 +312721520 2 1016 +312721524 2 1016 +312721528 2 1016 +312721532 2 1016 +312721536 2 1016 +312721540 2 1016 +312721544 2 1016 +312721548 2 1016 +312721552 2 1016 +312721556 2 1016 +312721560 2 1016 +312721564 2 1016 +312721568 2 1016 +312721572 2 1016 +312721576 2 1016 +312721580 2 1016 +312721584 2 1016 +312721588 2 1016 +312721592 2 1016 +312721596 2 1016 +312721600 2 1016 +312725508 2 1016 +312725512 2 1016 +312725516 2 1016 +312725520 2 1016 +312725524 2 1016 +312725528 2 1016 +312725532 2 1016 +312725536 2 1016 +312725540 2 1016 +312725544 2 1016 +312725548 2 1016 +312725552 2 1016 +312725556 2 1016 +312725560 2 1016 +312725564 2 1016 +312725568 2 1016 +312725572 2 1016 +312725576 2 1016 +312725580 2 1016 +312725584 2 1016 +312725588 2 1016 +312725592 2 1016 +312725596 2 1016 +312725600 2 1016 +312725604 2 1016 +312725608 2 1016 +312725612 2 1016 +312725616 2 1016 +312725620 2 1016 +312725624 2 1016 +312725628 2 1016 +312725632 2 1016 +312725636 2 1016 +312725640 2 1016 +312725644 2 1016 +312725648 2 1016 +312725652 2 1016 +312725656 2 1016 +312725660 2 1016 +312725664 2 1016 +312725668 2 1016 +312725672 2 1016 +312725676 2 1016 +312725680 2 1016 +312725684 2 1016 +312725688 2 1016 +312725692 2 1016 +312725696 2 1016 +312729604 2 1016 +312729608 2 1016 +312729612 2 1016 +312729616 2 1016 +312729620 2 1016 +312729624 2 1016 +312729628 2 1016 +312729632 2 1016 +312729636 2 1016 +312729640 2 1016 +312729644 2 1016 +312729648 2 1016 +312729652 2 1016 +312729656 2 1016 +312729660 2 1016 +312729664 2 1016 +312729668 2 1016 +312729672 2 1016 +312729676 2 1016 +312729680 2 1016 +312729684 2 1016 +312729688 2 1016 +312729692 2 1016 +312729696 2 1016 +312729700 2 1016 +312729704 2 1016 +312729708 2 1016 +312729712 2 1016 +312729716 2 1016 +312729720 2 1016 +312729724 2 1016 +312729728 2 1016 +312729732 2 1016 +312729736 2 1016 +312729740 2 1016 +312729744 2 1016 +312729748 2 1016 +312729752 2 1016 +312729756 2 1016 +312729760 2 1016 +312729764 2 1016 +312729768 2 1016 +312729772 2 1016 +312729776 2 1016 +312729780 2 1016 +312729784 2 1016 +312729788 2 1016 +312729792 2 1016 +312733700 2 1016 +312733704 2 1016 +312733708 2 1016 +312733712 2 1016 +312733716 2 1016 +312733720 2 1016 +312733724 2 1016 +312733728 2 1016 +312733732 2 1016 +312733736 2 1016 +312733740 2 1016 +312733744 2 1016 +312733748 2 1016 +312733752 2 1016 +312733756 2 1016 +312733760 2 1016 +312733764 2 1016 +312733768 2 1016 +312733772 2 1016 +312733776 2 1016 +312733780 2 1016 +312733784 2 1016 +312733788 2 1016 +312733792 2 1016 +312733796 2 1016 +312733800 2 1016 +312733804 2 1016 +312733808 2 1016 +312733812 2 1016 +312733816 2 1016 +312733820 2 1016 +312733824 2 1016 +312733828 2 1016 +312733832 2 1016 +312733836 2 1016 +312733840 2 1016 +312733844 2 1016 +312733848 2 1016 +312733852 2 1016 +312733856 2 1016 +312733860 2 1016 +312733864 2 1016 +312733868 2 1016 +312733872 2 1016 +312733876 2 1016 +312733880 2 1016 +312733884 2 1016 +312733888 2 1016 +312737796 2 1016 +312737800 2 1016 +312737804 2 1016 +312737808 2 1016 +312737812 2 1016 +312737816 2 1016 +312737820 2 1016 +312737824 2 1016 +312737828 2 1016 +312737832 2 1016 +312737836 2 1016 +312737840 2 1016 +312737844 2 1016 +312737848 2 1016 +312737852 2 1016 +312737856 2 1016 +312737860 2 1016 +312737864 2 1016 +312737868 2 1016 +312737872 2 1016 +312737876 2 1016 +312737880 2 1016 +312737884 2 1016 +312737888 2 1016 +312737892 2 1016 +312737896 2 1016 +312737900 2 1016 +312737904 2 1016 +312737908 2 1016 +312737912 2 1016 +312737916 2 1016 +312737920 2 1016 +312737924 2 1016 +312737928 2 1016 +312737932 2 1016 +312737936 2 1016 +312737940 2 1016 +312737944 2 1016 +312737948 2 1016 +312737952 2 1016 +312737956 2 1016 +312737960 2 1016 +312737964 2 1016 +312737968 2 1016 +312737972 2 1016 +312737976 2 1016 +312737980 2 1016 +312737984 2 1016 +312741892 2 1016 +312741896 2 1016 +312741900 2 1016 +312741904 2 1016 +312741908 2 1016 +312741912 2 1016 +312741916 2 1016 +312741920 2 1016 +312741924 2 1016 +312741928 2 1016 +312741932 2 1016 +312741936 2 1016 +312741940 2 1016 +312741944 2 1016 +312741948 2 1016 +312741952 2 1016 +312741956 2 1016 +312741960 2 1016 +312741964 2 1016 +312741968 2 1016 +312741972 2 1016 +312741976 2 1016 +312741980 2 1016 +312741984 2 1016 +312741988 2 1016 +312741992 2 1016 +312741996 2 1016 +312742000 2 1016 +312742004 2 1016 +312742008 2 1016 +312742012 2 1016 +312742016 2 1016 +312742020 2 1016 +312742024 2 1016 +312742028 2 1016 +312742032 2 1016 +312742036 2 1016 +312742040 2 1016 +312742044 2 1016 +312742048 2 1016 +312742052 2 1016 +312742056 2 1016 +312742060 2 1016 +312742064 2 1016 +312742068 2 1016 +312742072 2 1016 +312742076 2 1016 +312742080 2 1016 +312745988 2 1016 +312745992 2 1016 +312745996 2 1016 +312746000 2 1016 +312746004 2 1016 +312746008 2 1016 +312746012 2 1016 +312746016 2 1016 +312746020 2 1016 +312746024 2 1016 +312746028 2 1016 +312746032 2 1016 +312746036 2 1016 +312746040 2 1016 +312746044 2 1016 +312746048 2 1016 +312746052 2 1016 +312746056 2 1016 +312746060 2 1016 +312746064 2 1016 +312746068 2 1016 +312746072 2 1016 +312746076 2 1016 +312746080 2 1016 +312746084 2 1016 +312746088 2 1016 +312746092 2 1016 +312746096 2 1016 +312746100 2 1016 +312746104 2 1016 +312746108 2 1016 +312746112 2 1016 +312746116 2 1016 +312746120 2 1016 +312746124 2 1016 +312746128 2 1016 +312746132 2 1016 +312746136 2 1016 +312746140 2 1016 +312746144 2 1016 +312746148 2 1016 +312746152 2 1016 +312746156 2 1016 +312746160 2 1016 +312746164 2 1016 +312746168 2 1016 +312746172 2 1016 +312746176 2 1016 +312750084 2 1016 +312750088 2 1016 +312750092 2 1016 +312750096 2 1016 +312750100 2 1016 +312750104 2 1016 +312750108 2 1016 +312750112 2 1016 +312750116 2 1016 +312750120 2 1016 +312750124 2 1016 +312750128 2 1016 +312750132 2 1016 +312750136 2 1016 +312750140 2 1016 +312750144 2 1016 +312750148 2 1016 +312750152 2 1016 +312750156 2 1016 +312750160 2 1016 +312750164 2 1016 +312750168 2 1016 +312750172 2 1016 +312750176 2 1016 +312750180 2 1016 +312750184 2 1016 +312750188 2 1016 +312750192 2 1016 +312750196 2 1016 +312750200 2 1016 +312750204 2 1016 +312750208 2 1016 +312750212 2 1016 +312750216 2 1016 +312750220 2 1016 +312750224 2 1016 +312750228 2 1016 +312750232 2 1016 +312750236 2 1016 +312750240 2 1016 +312750244 2 1016 +312750248 2 1016 +312750252 2 1016 +312750256 2 1016 +312750260 2 1016 +312750264 2 1016 +312750268 2 1016 +312750272 2 1016 +312754180 2 1016 +312754184 2 1016 +312754188 2 1016 +312754192 2 1016 +312754196 2 1016 +312754200 2 1016 +312754204 2 1016 +312754208 2 1016 +312754212 2 1016 +312754216 2 1016 +312754220 2 1016 +312754224 2 1016 +312754228 2 1016 +312754232 2 1016 +312754236 2 1016 +312754240 2 1016 +312754244 2 1016 +312754248 2 1016 +312754252 2 1016 +312754256 2 1016 +312754260 2 1016 +312754264 2 1016 +312754268 2 1016 +312754272 2 1016 +312754276 2 1016 +312754280 2 1016 +312754284 2 1016 +312754288 2 1016 +312754292 2 1016 +312754296 2 1016 +312754300 2 1016 +312754304 2 1016 +312754308 2 1016 +312754312 2 1016 +312754316 2 1016 +312754320 2 1016 +312754324 2 1016 +312754328 2 1016 +312754332 2 1016 +312754336 2 1016 +312754340 2 1016 +312754344 2 1016 +312754348 2 1016 +312754352 2 1016 +312754356 2 1016 +312754360 2 1016 +312754364 2 1016 +312754368 2 1016 +312758276 2 1016 +312758280 2 1016 +312758284 2 1016 +312758288 2 1016 +312758292 2 1016 +312758296 2 1016 +312758300 2 1016 +312758304 2 1016 +312758308 2 1016 +312758312 2 1016 +312758316 2 1016 +312758320 2 1016 +312758324 2 1016 +312758328 2 1016 +312758332 2 1016 +312758336 2 1016 +312758340 2 1016 +312758344 2 1016 +312758348 2 1016 +312758352 2 1016 +312758356 2 1016 +312758360 2 1016 +312758364 2 1016 +312758368 2 1016 +312758372 2 1016 +312758376 2 1016 +312758380 2 1016 +312758384 2 1016 +312758388 2 1016 +312758392 2 1016 +312758396 2 1016 +312758400 2 1016 +312758404 2 1016 +312758408 2 1016 +312758412 2 1016 +312758416 2 1016 +312758420 2 1016 +312758424 2 1016 +312758428 2 1016 +312758432 2 1016 +312758436 2 1016 +312758440 2 1016 +312758444 2 1016 +312758448 2 1016 +312758452 2 1016 +312758456 2 1016 +312758460 2 1016 +312758464 2 1016 +312762372 2 1016 +312762376 2 1016 +312762380 2 1016 +312762384 2 1016 +312762388 2 1016 +312762392 2 1016 +312762396 2 1016 +312762400 2 1016 +312762404 2 1016 +312762408 2 1016 +312762412 2 1016 +312762416 2 1016 +312762420 2 1016 +312762424 2 1016 +312762428 2 1016 +312762432 2 1016 +312762436 2 1016 +312762440 2 1016 +312762444 2 1016 +312762448 2 1016 +312762452 2 1016 +312762456 2 1016 +312762460 2 1016 +312762464 2 1016 +312762468 2 1016 +312762472 2 1016 +312762476 2 1016 +312762480 2 1016 +312762484 2 1016 +312762488 2 1016 +312762492 2 1016 +312762496 2 1016 +312762500 2 1016 +312762504 2 1016 +312762508 2 1016 +312762512 2 1016 +312762516 2 1016 +312762520 2 1016 +312762524 2 1016 +312762528 2 1016 +312762532 2 1016 +312762536 2 1016 +312762540 2 1016 +312762544 2 1016 +312762548 2 1016 +312762552 2 1016 +312762556 2 1016 +312762560 2 1016 +312766468 2 1016 +312766472 2 1016 +312766476 2 1016 +312766480 2 1016 +312766484 2 1016 +312766488 2 1016 +312766492 2 1016 +312766496 2 1016 +312766500 2 1016 +312766504 2 1016 +312766508 2 1016 +312766512 2 1016 +312766516 2 1016 +312766520 2 1016 +312766524 2 1016 +312766528 2 1016 +312766532 2 1016 +312766536 2 1016 +312766540 2 1016 +312766544 2 1016 +312766548 2 1016 +312766552 2 1016 +312766556 2 1016 +312766560 2 1016 +312766564 2 1016 +312766568 2 1016 +312766572 2 1016 +312766576 2 1016 +312766580 2 1016 +312766584 2 1016 +312766588 2 1016 +312766592 2 1016 +312766596 2 1016 +312766600 2 1016 +312766604 2 1016 +312766608 2 1016 +312766612 2 1016 +312766616 2 1016 +312766620 2 1016 +312766624 2 1016 +312766628 2 1016 +312766632 2 1016 +312766636 2 1016 +312766640 2 1016 +312766644 2 1016 +312766648 2 1016 +312766652 2 1016 +312766656 2 1016 +312770564 2 1016 +312770568 2 1016 +312770572 2 1016 +312770576 2 1016 +312770580 2 1016 +312770584 2 1016 +312770588 2 1016 +312770592 2 1016 +312770596 2 1016 +312770600 2 1016 +312770604 2 1016 +312770608 2 1016 +312770612 2 1016 +312770616 2 1016 +312770620 2 1016 +312770624 2 1016 +312770628 2 1016 +312770632 2 1016 +312770636 2 1016 +312770640 2 1016 +312770644 2 1016 +312770648 2 1016 +312770652 2 1016 +312770656 2 1016 +312770660 2 1016 +312770664 2 1016 +312770668 2 1016 +312770672 2 1016 +312770676 2 1016 +312770680 2 1016 +312770684 2 1016 +312770688 2 1016 +312770692 2 1016 +312770696 2 1016 +312770700 2 1016 +312770704 2 1016 +312770708 2 1016 +312770712 2 1016 +312770716 2 1016 +312770720 2 1016 +312770724 2 1016 +312770728 2 1016 +312770732 2 1016 +312770736 2 1016 +312770740 2 1016 +312770744 2 1016 +312770748 2 1016 +312770752 2 1016 +312774660 2 1016 +312774664 2 1016 +312774668 2 1016 +312774672 2 1016 +312774676 2 1016 +312774680 2 1016 +312774684 2 1016 +312774688 2 1016 +312774692 2 1016 +312774696 2 1016 +312774700 2 1016 +312774704 2 1016 +312774708 2 1016 +312774712 2 1016 +312774716 2 1016 +312774720 2 1016 +312774724 2 1016 +312774728 2 1016 +312774732 2 1016 +312774736 2 1016 +312774740 2 1016 +312774744 2 1016 +312774748 2 1016 +312774752 2 1016 +312774756 2 1016 +312774760 2 1016 +312774764 2 1016 +312774768 2 1016 +312774772 2 1016 +312774776 2 1016 +312774780 2 1016 +312774784 2 1016 +312774788 2 1016 +312774792 2 1016 +312774796 2 1016 +312774800 2 1016 +312774804 2 1016 +312774808 2 1016 +312774812 2 1016 +312774816 2 1016 +312774820 2 1016 +312774824 2 1016 +312774828 2 1016 +312774832 2 1016 +312774836 2 1016 +312774840 2 1016 +312774844 2 1016 +312774848 2 1016 +312778756 2 1016 +312778760 2 1016 +312778764 2 1016 +312778768 2 1016 +312778772 2 1016 +312778776 2 1016 +312778780 2 1016 +312778784 2 1016 +312778788 2 1016 +312778792 2 1016 +312778796 2 1016 +312778800 2 1016 +312778804 2 1016 +312778808 2 1016 +312778812 2 1016 +312778816 2 1016 +312778820 2 1016 +312778824 2 1016 +312778828 2 1016 +312778832 2 1016 +312778836 2 1016 +312778840 2 1016 +312778844 2 1016 +312778848 2 1016 +312778852 2 1016 +312778856 2 1016 +312778860 2 1016 +312778864 2 1016 +312778868 2 1016 +312778872 2 1016 +312778876 2 1016 +312778880 2 1016 +312778884 2 1016 +312778888 2 1016 +312778892 2 1016 +312778896 2 1016 +312778900 2 1016 +312778904 2 1016 +312778908 2 1016 +312778912 2 1016 +312778916 2 1016 +312778920 2 1016 +312778924 2 1016 +312778928 2 1016 +312778932 2 1016 +312778936 2 1016 +312778940 2 1016 +312778944 2 1016 +312782852 2 1016 +312782856 2 1016 +312782860 2 1016 +312782864 2 1016 +312782868 2 1016 +312782872 2 1016 +312782876 2 1016 +312782880 2 1016 +312782884 2 1016 +312782888 2 1016 +312782892 2 1016 +312782896 2 1016 +312782900 2 1016 +312782904 2 1016 +312782908 2 1016 +312782912 2 1016 +312782916 2 1016 +312782920 2 1016 +312782924 2 1016 +312782928 2 1016 +312782932 2 1016 +312782936 2 1016 +312782940 2 1016 +312782944 2 1016 +312782948 2 1016 +312782952 2 1016 +312782956 2 1016 +312782960 2 1016 +312782964 2 1016 +312782968 2 1016 +312782972 2 1016 +312782976 2 1016 +312782980 2 1016 +312782984 2 1016 +312782988 2 1016 +312782992 2 1016 +312782996 2 1016 +312783000 2 1016 +312783004 2 1016 +312783008 2 1016 +312783012 2 1016 +312783016 2 1016 +312783020 2 1016 +312783024 2 1016 +312783028 2 1016 +312783032 2 1016 +312783036 2 1016 +312783040 2 1016 +312786948 2 1016 +312786952 2 1016 +312786956 2 1016 +312786960 2 1016 +312786964 2 1016 +312786968 2 1016 +312786972 2 1016 +312786976 2 1016 +312786980 2 1016 +312786984 2 1016 +312786988 2 1016 +312786992 2 1016 +312786996 2 1016 +312787000 2 1016 +312787004 2 1016 +312787008 2 1016 +312787012 2 1016 +312787016 2 1016 +312787020 2 1016 +312787024 2 1016 +312787028 2 1016 +312787032 2 1016 +312787036 2 1016 +312787040 2 1016 +312787044 2 1016 +312787048 2 1016 +312787052 2 1016 +312787056 2 1016 +312787060 2 1016 +312787064 2 1016 +312787068 2 1016 +312787072 2 1016 +312787076 2 1016 +312787080 2 1016 +312787084 2 1016 +312787088 2 1016 +312787092 2 1016 +312787096 2 1016 +312787100 2 1016 +312787104 2 1016 +312787108 2 1016 +312787112 2 1016 +312787116 2 1016 +312787120 2 1016 +312787124 2 1016 +312787128 2 1016 +312787132 2 1016 +312787136 2 1016 352588804 416 160 352592900 416 160 352596996 416 160 @@ -18774,6342 +18774,6806 @@ 353331204 416 160 353335300 416 160 353339396 416 160 -353375236 32 896 -353375240 2 896 -353375244 32 896 -353375248 2 896 -353375252 32 896 -353375256 2 896 -353375260 32 896 -353375264 2 896 -353375268 32 896 -353375272 2 896 -353375276 32 896 -353375280 2 896 -353375284 32 896 -353375288 2 896 -353375292 32 896 -353375296 2 896 -353375300 32 896 -353375304 2 896 -353375308 32 896 -353375312 2 896 -353375316 32 896 -353375320 2 896 -353375324 32 896 -353375328 2 896 -353375332 32 896 -353375336 2 896 -353375340 32 896 -353375344 2 896 -353375348 32 896 -353375352 2 896 -353375356 32 896 -353375360 2 896 -353375364 32 896 -353375368 2 896 -353375372 32 896 -353375376 2 896 -353375380 32 896 -353375384 2 896 -353375388 32 896 -353375392 2 896 -353379332 32 896 -353379336 2 896 -353379340 32 896 -353379344 2 896 -353379348 32 896 -353379352 2 896 -353379356 32 896 -353379360 2 896 -353379364 32 896 -353379368 2 896 -353379372 32 896 -353379376 2 896 -353379380 32 896 -353379384 2 896 -353379388 32 896 -353379392 2 896 -353379396 32 896 -353379400 2 896 -353379404 32 896 -353379408 2 896 -353379412 32 896 -353379416 2 896 -353379420 32 896 -353379424 2 896 -353379428 32 896 -353379432 2 896 -353379436 32 896 -353379440 2 896 -353379444 32 896 -353379448 2 896 -353379452 32 896 -353379456 2 896 -353379460 32 896 -353379464 2 896 -353379468 32 896 -353379472 2 896 -353379476 32 896 -353379480 2 896 -353379484 32 896 -353379488 2 896 -353379492 32 896 -353379496 2 896 -353379500 32 896 -353379504 2 896 -353379508 32 896 -353379512 2 896 -353379516 32 896 -353379520 2 896 -353383428 32 896 -353383432 2 896 -353383436 32 896 -353383440 2 896 -353383444 32 896 -353383448 2 896 -353383452 32 896 -353383456 2 896 -353383460 32 896 -353383464 2 896 -353383468 32 896 -353383472 2 896 -353383476 32 896 -353383480 2 896 -353383484 32 896 -353383488 2 896 -353383492 32 896 -353383496 2 896 -353383500 32 896 -353383504 2 896 -353383508 32 896 -353383512 2 896 -353383516 32 896 -353383520 2 896 -353383524 32 896 -353383528 2 896 -353383532 32 896 -353383536 2 896 -353383540 32 896 -353383544 2 896 -353383548 32 896 -353383552 2 896 -353383556 32 896 -353383560 2 896 -353383564 32 896 -353383568 2 896 -353383572 32 896 -353383576 2 896 -353383580 32 896 -353383584 2 896 -353383588 32 896 -353383592 2 896 -353383596 32 896 -353383600 2 896 -353383604 32 896 -353383608 2 896 -353383612 32 896 -353383616 2 896 -353383620 32 896 -353383624 2 896 -353383628 32 896 -353383632 2 896 -353383636 32 896 -353383640 2 896 -353383644 32 896 -353383648 2 896 -353387524 32 896 -353387528 2 896 -353387532 32 896 -353387536 2 896 -353387540 32 896 -353387544 2 896 -353387548 32 896 -353387552 2 896 -353387556 32 896 -353387560 2 896 -353387564 32 896 -353387568 2 896 -353387572 32 896 -353387576 2 896 -353387580 32 896 -353387584 2 896 -353387588 32 896 -353387592 2 896 -353387596 32 896 -353387600 2 896 -353387604 32 896 -353387608 2 896 -353387612 32 896 -353387616 2 896 -353387620 32 896 -353387624 2 896 -353387628 32 896 -353387632 2 896 -353387636 32 896 -353387640 2 896 -353387644 32 896 -353387648 2 896 -353387652 32 896 -353387656 2 896 -353387660 32 896 -353387664 2 896 -353387668 32 896 -353387672 2 896 -353387676 32 896 -353387680 2 896 -353387684 32 896 -353387688 2 896 -353387692 32 896 -353387696 2 896 -353387700 32 896 -353387704 2 896 -353387708 32 896 -353387712 2 896 -353387716 32 896 -353387720 2 896 -353387724 32 896 -353387728 2 896 -353387732 32 896 -353387736 2 896 -353387740 32 896 -353387744 2 896 -353391620 32 896 -353391624 2 896 -353391628 32 896 -353391632 2 896 -353391636 32 896 -353391640 2 896 -353391644 32 896 -353391648 2 896 -353391652 32 896 -353391656 2 896 -353391660 32 896 -353391664 2 896 -353391668 32 896 -353391672 2 896 -353391676 32 896 -353391680 2 896 -353391684 32 896 -353391688 2 896 -353391692 32 896 -353391696 2 896 -353391700 32 896 -353391704 2 896 -353391708 32 896 -353391712 2 896 -353391716 32 896 -353391720 2 896 -353391724 32 896 -353391728 2 896 -353391732 32 896 -353391736 2 896 -353391740 32 896 -353391744 2 896 -353391748 32 896 -353391752 2 896 -353391756 32 896 -353391760 2 896 -353391764 32 896 -353391768 2 896 -353391772 32 896 -353391776 2 896 -353391780 32 896 -353391784 2 896 -353391788 32 896 -353391792 2 896 -353391796 32 896 -353391800 2 896 -353391804 32 896 -353391808 2 896 -353391812 32 896 -353391816 2 896 -353391820 32 896 -353391824 2 896 -353391828 32 896 -353391832 2 896 -353391836 32 896 -353391840 2 896 -353391844 32 896 -353391848 2 896 -353391852 32 896 -353391856 2 896 -353391860 32 896 -353391864 2 896 -353391868 32 896 -353391872 2 896 -353395716 32 896 -353395720 2 896 -353395724 32 896 -353395728 2 896 -353395732 32 896 -353395736 2 896 -353395740 32 896 -353395744 2 896 -353395748 32 896 -353395752 2 896 -353395756 32 896 -353395760 2 896 -353395764 32 896 -353395768 2 896 -353395772 32 896 -353395776 2 896 -353395780 32 896 -353395784 2 896 -353395788 32 896 -353395792 2 896 -353395796 32 896 -353395800 2 896 -353395804 32 896 -353395808 2 896 -353395812 32 896 -353395816 2 896 -353395820 32 896 -353395824 2 896 -353395828 32 896 -353395832 2 896 -353395836 32 896 -353395840 2 896 -353395844 32 896 -353395848 2 896 -353395852 32 896 -353395856 2 896 -353395860 32 896 -353395864 2 896 -353395868 32 896 -353395872 2 896 -353395876 32 896 -353395880 2 896 -353395884 32 896 -353395888 2 896 -353395892 32 896 -353395896 2 896 -353395900 32 896 -353395904 2 896 -353395908 32 896 -353395912 2 896 -353395916 32 896 -353395920 2 896 -353395924 32 896 -353395928 2 896 -353395932 32 896 -353395936 2 896 -353395940 32 896 -353395944 2 896 -353395948 32 896 -353395952 2 896 -353395956 32 896 -353395960 2 896 -353395964 32 896 -353395968 2 896 -353395972 32 896 -353395976 2 896 -353395980 32 896 -353395984 2 896 -353395988 32 896 -353395992 2 896 -353395996 32 896 -353396000 2 896 -353399812 32 896 -353399816 2 896 -353399820 32 896 -353399824 2 896 -353399828 32 896 -353399832 2 896 -353399836 32 896 -353399840 2 896 -353399844 32 896 -353399848 2 896 -353399852 32 896 -353399856 2 896 -353399860 32 896 -353399864 2 896 -353399868 32 896 -353399872 2 896 -353399876 32 896 -353399880 2 896 -353399884 32 896 -353399888 2 896 -353399892 32 896 -353399896 2 896 -353399900 32 896 -353399904 2 896 -353399908 32 896 -353399912 2 896 -353399916 32 896 -353399920 2 896 -353399924 32 896 -353399928 2 896 -353399932 32 896 -353399936 2 896 -353399940 32 896 -353399944 2 896 -353399948 32 896 -353399952 2 896 -353399956 32 896 -353399960 2 896 -353399964 32 896 -353399968 2 896 -353399972 32 896 -353399976 2 896 -353399980 32 896 -353399984 2 896 -353399988 32 896 -353399992 2 896 -353399996 32 896 -353400000 2 896 -353400004 32 896 -353400008 2 896 -353400012 32 896 -353400016 2 896 -353400020 32 896 -353400024 2 896 -353400028 32 896 -353400032 2 896 -353400036 32 896 -353400040 2 896 -353400044 32 896 -353400048 2 896 -353400052 32 896 -353400056 2 896 -353400060 32 896 -353400064 2 896 -353400068 32 896 -353400072 2 896 -353400076 32 896 -353400080 2 896 -353400084 32 896 -353400088 2 896 -353400092 32 896 -353400096 2 896 -353403908 32 896 -353403912 2 896 -353403916 32 896 -353403920 2 896 -353403924 32 896 -353403928 2 896 -353403932 32 896 -353403936 2 896 -353403940 32 896 -353403944 2 896 -353403948 32 896 -353403952 2 896 -353403956 32 896 -353403960 2 896 -353403964 32 896 -353403968 2 896 -353403972 32 896 -353403976 2 896 -353403980 32 896 -353403984 2 896 -353403988 32 896 -353403992 2 896 -353403996 32 896 -353404000 2 896 -353404004 32 896 -353404008 2 896 -353404012 32 896 -353404016 2 896 -353404020 32 896 -353404024 2 896 -353404028 32 896 -353404032 2 896 -353404036 32 896 -353404040 2 896 -353404044 32 896 -353404048 2 896 -353404052 32 896 -353404056 2 896 -353404060 32 896 -353404064 2 896 -353404068 32 896 -353404072 2 896 -353404076 32 896 -353404080 2 896 -353404084 32 896 -353404088 2 896 -353404092 32 896 -353404096 2 896 -353404100 32 896 -353404104 2 896 -353404108 32 896 -353404112 2 896 -353404116 32 896 -353404120 2 896 -353404124 32 896 -353404128 2 896 -353404132 32 896 -353404136 2 896 -353404140 32 896 -353404144 2 896 -353404148 32 896 -353404152 2 896 -353404156 32 896 -353404160 2 896 -353404164 32 896 -353404168 2 896 -353404172 32 896 -353404176 2 896 -353404180 32 896 -353404184 2 896 -353404188 32 896 -353404192 2 896 -353404196 32 896 -353404200 2 896 -353404204 32 896 -353404208 2 896 -353404212 32 896 -353404216 2 896 -353404220 32 896 -353404224 2 896 -353408004 32 896 -353408008 2 896 -353408012 32 896 -353408016 2 896 -353408020 32 896 -353408024 2 896 -353408028 32 896 -353408032 2 896 -353408036 32 896 -353408040 2 896 -353408044 32 896 -353408048 2 896 -353408052 32 896 -353408056 2 896 -353408060 32 896 -353408064 2 896 -353408068 32 896 -353408072 2 896 -353408076 32 896 -353408080 2 896 -353408084 32 896 -353408088 2 896 -353408092 32 896 -353408096 2 896 -353408100 32 896 -353408104 2 896 -353408108 32 896 -353408112 2 896 -353408116 32 896 -353408120 2 896 -353408124 32 896 -353408128 2 896 -353408132 32 896 -353408136 2 896 -353408140 32 896 -353408144 2 896 -353408148 32 896 -353408152 2 896 -353408156 32 896 -353408160 2 896 -353408164 32 896 -353408168 2 896 -353408172 32 896 -353408176 2 896 -353408180 32 896 -353408184 2 896 -353408188 32 896 -353408192 2 896 -353408196 32 896 -353408200 2 896 -353408204 32 896 -353408208 2 896 -353408212 32 896 -353408216 2 896 -353408220 32 896 -353408224 2 896 -353408228 32 896 -353408232 2 896 -353408236 32 896 -353408240 2 896 -353408244 32 896 -353408248 2 896 -353408252 32 896 -353408256 2 896 -353408260 32 896 -353408264 2 896 -353408268 32 896 -353408272 2 896 -353408276 32 896 -353408280 2 896 -353408284 32 896 -353408288 2 896 -353408292 32 896 -353408296 2 896 -353408300 32 896 -353408304 2 896 -353408308 32 896 -353408312 2 896 -353408316 32 896 -353408320 2 896 -353412100 2 896 -353412104 2 896 -353412108 2 896 -353412112 2 896 -353412116 2 896 -353412120 2 896 -353412124 2 896 -353412128 2 896 -353412132 2 896 -353412136 2 896 -353412140 2 896 -353412144 2 896 -353412148 2 896 -353412152 2 896 -353412156 2 896 -353412160 2 896 -353412164 2 896 -353412168 2 896 -353412172 2 896 -353412176 2 896 -353412180 2 896 -353412184 2 896 -353412188 2 896 -353412192 2 896 -353412196 2 896 -353412200 2 896 -353412204 2 896 -353412208 2 896 -353412212 2 896 -353412216 2 896 -353412220 2 896 -353412224 2 896 -353412228 2 896 -353412232 2 896 -353412236 2 896 -353412240 2 896 -353412244 2 896 -353412248 2 896 -353412252 2 896 -353412256 2 896 -353412260 2 896 -353412264 2 896 -353412268 2 896 -353412272 2 896 -353412276 2 896 -353412280 2 896 -353412284 2 896 -353412288 2 896 -353412292 2 896 -353412296 2 896 -353412300 2 896 -353412304 2 896 -353412308 2 896 -353412312 2 896 -353412316 2 896 -353412320 2 896 -353412324 2 896 -353412328 2 896 -353412332 2 896 -353412336 2 896 -353412340 2 896 -353412344 2 896 -353412348 2 896 -353412352 2 896 -353412356 2 896 -353412360 2 896 -353412364 2 896 -353412368 2 896 -353412372 2 896 -353412376 2 896 -353412380 2 896 -353412384 2 896 -353412388 2 896 -353412392 2 896 -353412396 2 896 -353412400 2 896 -353412404 2 896 -353412408 2 896 -353412412 2 896 -353412416 2 896 -353412420 2 896 -353412424 2 896 -353412428 2 896 -353412432 2 896 -353412436 2 896 -353412440 2 896 -353412444 2 896 -353412448 2 896 -353412452 2 896 -353412456 2 896 -353412460 2 896 -353412464 2 896 -353412468 2 896 -353412472 2 896 -353412476 2 896 -353412480 2 896 -353416196 2 896 -353416200 2 896 -353416204 2 896 -353416208 2 896 -353416212 2 896 -353416216 2 896 -353416220 2 896 -353416224 2 896 -353416228 2 896 -353416232 2 896 -353416236 2 896 -353416240 2 896 -353416244 2 896 -353416248 2 896 -353416252 2 896 -353416256 2 896 -353416260 2 896 -353416264 2 896 -353416268 2 896 -353416272 2 896 -353416276 2 896 -353416280 2 896 -353416284 2 896 -353416288 2 896 -353416292 2 896 -353416296 2 896 -353416300 2 896 -353416304 2 896 -353416308 2 896 -353416312 2 896 -353416316 2 896 -353416320 2 896 -353416324 2 896 -353416328 2 896 -353416332 2 896 -353416336 2 896 -353416340 2 896 -353416344 2 896 -353416348 2 896 -353416352 2 896 -353416356 2 896 -353416360 2 896 -353416364 2 896 -353416368 2 896 -353416372 2 896 -353416376 2 896 -353416380 2 896 -353416384 2 896 -353416388 2 896 -353416392 2 896 -353416396 2 896 -353416400 2 896 -353416404 2 896 -353416408 2 896 -353416412 2 896 -353416416 2 896 -353416420 2 896 -353416424 2 896 -353416428 2 896 -353416432 2 896 -353416436 2 896 -353416440 2 896 -353416444 2 896 -353416448 2 896 -353416452 2 896 -353416456 2 896 -353416460 2 896 -353416464 2 896 -353416468 2 896 -353416472 2 896 -353416476 2 896 -353416480 2 896 -353416484 2 896 -353416488 2 896 -353416492 2 896 -353416496 2 896 -353416500 2 896 -353416504 2 896 -353416508 2 896 -353416512 2 896 -353416516 2 896 -353416520 2 896 -353416524 2 896 -353416528 2 896 -353416532 2 896 -353416536 2 896 -353416540 2 896 -353416544 2 896 -353416548 2 896 -353416552 2 896 -353416556 2 896 -353416560 2 896 -353416564 2 896 -353416568 2 896 -353416572 2 896 -353416576 2 896 -353416580 2 896 -353416584 2 896 -353416588 2 896 -353416592 2 896 -353416596 2 896 -353416600 2 896 -353416604 2 896 -353416608 2 896 -353416612 2 896 -353416616 2 896 -353416620 2 896 -353416624 2 896 -353416628 2 896 -353416632 2 896 -353416636 2 896 -353416640 2 896 -353420292 2 896 -353420296 2 896 -353420300 2 896 -353420304 2 896 -353420308 2 896 -353420312 2 896 -353420316 2 896 -353420320 2 896 -353420324 2 896 -353420328 2 896 -353420332 2 896 -353420336 2 896 -353420340 2 896 -353420344 2 896 -353420348 2 896 -353420352 2 896 -353420356 2 896 -353420360 2 896 -353420364 2 896 -353420368 2 896 -353420372 2 896 -353420376 2 896 -353420380 2 896 -353420384 2 896 -353420388 2 896 -353420392 2 896 -353420396 2 896 -353420400 2 896 -353420404 2 896 -353420408 2 896 -353420412 2 896 -353420416 2 896 -353420420 2 896 -353420424 2 896 -353420428 2 896 -353420432 2 896 -353420436 2 896 -353420440 2 896 -353420444 2 896 -353420448 2 896 -353420452 2 896 -353420456 2 896 -353420460 2 896 -353420464 2 896 -353420468 2 896 -353420472 2 896 -353420476 2 896 -353420480 2 896 -353420484 2 896 -353420488 2 896 -353420492 2 896 -353420496 2 896 -353420500 2 896 -353420504 2 896 -353420508 2 896 -353420512 2 896 -353420516 2 896 -353420520 2 896 -353420524 2 896 -353420528 2 896 -353420532 2 896 -353420536 2 896 -353420540 2 896 -353420544 2 896 -353420548 2 896 -353420552 2 896 -353420556 2 896 -353420560 2 896 -353420564 2 896 -353420568 2 896 -353420572 2 896 -353420576 2 896 -353420580 2 896 -353420584 2 896 -353420588 2 896 -353420592 2 896 -353420596 2 896 -353420600 2 896 -353420604 2 896 -353420608 2 896 -353420612 2 896 -353420616 2 896 -353420620 2 896 -353420624 2 896 -353420628 2 896 -353420632 2 896 -353420636 2 896 -353420640 2 896 -353420644 2 896 -353420648 2 896 -353420652 2 896 -353420656 2 896 -353420660 2 896 -353420664 2 896 -353420668 2 896 -353420672 2 896 -353420676 2 896 -353420680 2 896 -353420684 2 896 -353420688 2 896 -353420692 2 896 -353420696 2 896 -353420700 2 896 -353420704 2 896 -353420708 2 896 -353420712 2 896 -353420716 2 896 -353420720 2 896 -353420724 2 896 -353420728 2 896 -353420732 2 896 -353420736 2 896 -353420740 2 896 -353420744 2 896 -353420748 2 896 -353420752 2 896 -353420756 2 896 -353420760 2 896 -353420764 2 896 -353420768 2 896 -353420772 2 896 -353420776 2 896 -353420780 2 896 -353420784 2 896 -353420788 2 896 -353420792 2 896 -353420796 2 896 -353420800 2 896 -353424388 2 896 -353424392 2 896 -353424396 2 896 -353424400 2 896 -353424404 2 896 -353424408 2 896 -353424412 2 896 -353424416 2 896 -353424420 2 896 -353424424 2 896 -353424428 2 896 -353424432 2 896 -353424436 2 896 -353424440 2 896 -353424444 2 896 -353424448 2 896 -353424452 2 896 -353424456 2 896 -353424460 2 896 -353424464 2 896 -353424468 2 896 -353424472 2 896 -353424476 2 896 -353424480 2 896 -353424484 2 896 -353424488 2 896 -353424492 2 896 -353424496 2 896 -353424500 2 896 -353424504 2 896 -353424508 2 896 -353424512 2 896 -353424516 2 896 -353424520 2 896 -353424524 2 896 -353424528 2 896 -353424532 2 896 -353424536 2 896 -353424540 2 896 -353424544 2 896 -353424548 2 896 -353424552 2 896 -353424556 2 896 -353424560 2 896 -353424564 2 896 -353424568 2 896 -353424572 2 896 -353424576 2 896 -353424580 2 896 -353424584 2 896 -353424588 2 896 -353424592 2 896 -353424596 2 896 -353424600 2 896 -353424604 2 896 -353424608 2 896 -353424612 2 896 -353424616 2 896 -353424620 2 896 -353424624 2 896 -353424628 2 896 -353424632 2 896 -353424636 2 896 -353424640 2 896 -353424644 2 896 -353424648 2 896 -353424652 2 896 -353424656 2 896 -353424660 2 896 -353424664 2 896 -353424668 2 896 -353424672 2 896 -353424676 2 896 -353424680 2 896 -353424684 2 896 -353424688 2 896 -353424692 2 896 -353424696 2 896 -353424700 2 896 -353424704 2 896 -353424708 2 896 -353424712 2 896 -353424716 2 896 -353424720 2 896 -353424724 2 896 -353424728 2 896 -353424732 2 896 -353424736 2 896 -353424740 2 896 -353424744 2 896 -353424748 2 896 -353424752 2 896 -353424756 2 896 -353424760 2 896 -353424764 2 896 -353424768 2 896 -353424772 2 896 -353424776 2 896 -353424780 2 896 -353424784 2 896 -353424788 2 896 -353424792 2 896 -353424796 2 896 -353424800 2 896 -353424804 2 896 -353424808 2 896 -353424812 2 896 -353424816 2 896 -353424820 2 896 -353424824 2 896 -353424828 2 896 -353424832 2 896 -353424836 2 896 -353424840 2 896 -353424844 2 896 -353424848 2 896 -353424852 2 896 -353424856 2 896 -353424860 2 896 -353424864 2 896 -353424868 2 896 -353424872 2 896 -353424876 2 896 -353424880 2 896 -353424884 2 896 -353424888 2 896 -353424892 2 896 -353424896 2 896 -353424900 2 896 -353424904 2 896 -353424908 2 896 -353424912 2 896 -353424916 2 896 -353424920 2 896 -353424924 2 896 -353424928 2 896 -353428484 2 896 -353428488 2 896 -353428492 2 896 -353428496 2 896 -353428500 2 896 -353428504 2 896 -353428508 2 896 -353428512 2 896 -353428516 2 896 -353428520 2 896 -353428524 2 896 -353428528 2 896 -353428532 2 896 -353428536 2 896 -353428540 2 896 -353428544 2 896 -353428548 2 896 -353428552 2 896 -353428556 2 896 -353428560 2 896 -353428564 2 896 -353428568 2 896 -353428572 2 896 -353428576 2 896 -353428580 2 896 -353428584 2 896 -353428588 2 896 -353428592 2 896 -353428596 2 896 -353428600 2 896 -353428604 2 896 -353428608 2 896 -353428612 2 896 -353428616 2 896 -353428620 2 896 -353428624 2 896 -353428628 2 896 -353428632 2 896 -353428636 2 896 -353428640 2 896 -353428644 2 896 -353428648 2 896 -353428652 2 896 -353428656 2 896 -353428660 2 896 -353428664 2 896 -353428668 2 896 -353428672 2 896 -353428676 2 896 -353428680 2 896 -353428684 2 896 -353428688 2 896 -353428692 2 896 -353428696 2 896 -353428700 2 896 -353428704 2 896 -353428708 2 896 -353428712 2 896 -353428716 2 896 -353428720 2 896 -353428724 2 896 -353428728 2 896 -353428732 2 896 -353428736 2 896 -353428740 2 896 -353428744 2 896 -353428748 2 896 -353428752 2 896 -353428756 2 896 -353428760 2 896 -353428764 2 896 -353428768 2 896 -353428772 2 896 -353428776 2 896 -353428780 2 896 -353428784 2 896 -353428788 2 896 -353428792 2 896 -353428796 2 896 -353428800 2 896 -353428804 2 896 -353428808 2 896 -353428812 2 896 -353428816 2 896 -353428820 2 896 -353428824 2 896 -353428828 2 896 -353428832 2 896 -353428836 2 896 -353428840 2 896 -353428844 2 896 -353428848 2 896 -353428852 2 896 -353428856 2 896 -353428860 2 896 -353428864 2 896 -353428868 2 896 -353428872 2 896 -353428876 2 896 -353428880 2 896 -353428884 2 896 -353428888 2 896 -353428892 2 896 -353428896 2 896 -353428900 2 896 -353428904 2 896 -353428908 2 896 -353428912 2 896 -353428916 2 896 -353428920 2 896 -353428924 2 896 -353428928 2 896 -353428932 2 896 -353428936 2 896 -353428940 2 896 -353428944 2 896 -353428948 2 896 -353428952 2 896 -353428956 2 896 -353428960 2 896 -353428964 2 896 -353428968 2 896 -353428972 2 896 -353428976 2 896 -353428980 2 896 -353428984 2 896 -353428988 2 896 -353428992 2 896 -353428996 2 896 -353429000 2 896 -353429004 2 896 -353429008 2 896 -353429012 2 896 -353429016 2 896 -353429020 2 896 -353429024 2 896 -353429028 2 896 -353429032 2 896 -353429036 2 896 -353429040 2 896 -353429044 2 896 -353429048 2 896 -353429052 2 896 -353429056 2 896 -353432580 2 896 -353432584 2 896 -353432588 2 896 -353432592 2 896 -353432596 2 896 -353432600 2 896 -353432604 2 896 -353432608 2 896 -353432612 2 896 -353432616 2 896 -353432620 2 896 -353432624 2 896 -353432628 2 896 -353432632 2 896 -353432636 2 896 -353432640 2 896 -353432644 2 896 -353432648 2 896 -353432652 2 896 -353432656 2 896 -353432660 2 896 -353432664 2 896 -353432668 2 896 -353432672 2 896 -353432676 2 896 -353432680 2 896 -353432684 2 896 -353432688 2 896 -353432692 2 896 -353432696 2 896 -353432700 2 896 -353432704 2 896 -353432708 2 896 -353432712 2 896 -353432716 2 896 -353432720 2 896 -353432724 2 896 -353432728 2 896 -353432732 2 896 -353432736 2 896 -353432740 2 896 -353432744 2 896 -353432748 2 896 -353432752 2 896 -353432756 2 896 -353432760 2 896 -353432764 2 896 -353432768 2 896 -353432772 2 896 -353432776 2 896 -353432780 2 896 -353432784 2 896 -353432788 2 896 -353432792 2 896 -353432796 2 896 -353432800 2 896 -353432804 2 896 -353432808 2 896 -353432812 2 896 -353432816 2 896 -353432820 2 896 -353432824 2 896 -353432828 2 896 -353432832 2 896 -353432836 2 896 -353432840 2 896 -353432844 2 896 -353432848 2 896 -353432852 2 896 -353432856 2 896 -353432860 2 896 -353432864 2 896 -353432868 2 896 -353432872 2 896 -353432876 2 896 -353432880 2 896 -353432884 2 896 -353432888 2 896 -353432892 2 896 -353432896 2 896 -353432900 2 896 -353432904 2 896 -353432908 2 896 -353432912 2 896 -353432916 2 896 -353432920 2 896 -353432924 2 896 -353432928 2 896 -353432932 2 896 -353432936 2 896 -353432940 2 896 -353432944 2 896 -353432948 2 896 -353432952 2 896 -353432956 2 896 -353432960 2 896 -353432964 2 896 -353432968 2 896 -353432972 2 896 -353432976 2 896 -353432980 2 896 -353432984 2 896 -353432988 2 896 -353432992 2 896 -353432996 2 896 -353433000 2 896 -353433004 2 896 -353433008 2 896 -353433012 2 896 -353433016 2 896 -353433020 2 896 -353433024 2 896 -353433028 2 896 -353433032 2 896 -353433036 2 896 -353433040 2 896 -353433044 2 896 -353433048 2 896 -353433052 2 896 -353433056 2 896 -353433060 2 896 -353433064 2 896 -353433068 2 896 -353433072 2 896 -353433076 2 896 -353433080 2 896 -353433084 2 896 -353433088 2 896 -353433092 2 896 -353433096 2 896 -353433100 2 896 -353433104 2 896 -353433108 2 896 -353433112 2 896 -353433116 2 896 -353433120 2 896 -353433124 2 896 -353433128 2 896 -353433132 2 896 -353433136 2 896 -353433140 2 896 -353433144 2 896 -353433148 2 896 -353433152 2 896 -353433156 2 896 -353433160 2 896 -353433164 2 896 -353433168 2 896 -353433172 2 896 -353433176 2 896 -353433180 2 896 -353433184 2 896 -353433188 2 896 -353433192 2 896 -353433196 2 896 -353433200 2 896 -353433204 2 896 -353433208 2 896 -353433212 2 896 -353433216 2 896 -353637380 32 896 -353637384 2 896 -353637388 32 896 -353637392 2 896 -353637396 32 896 -353637400 2 896 -353637404 32 896 -353637408 2 896 -353637412 32 896 -353637416 2 896 -353637420 32 896 -353637424 2 896 -353637428 32 896 -353637432 2 896 -353637436 32 896 -353637440 2 896 -353637444 32 896 -353637448 2 896 -353637452 32 896 -353637456 2 896 -353637460 32 896 -353637464 2 896 -353637468 32 896 -353637472 2 896 -353637476 32 896 -353637480 2 896 -353637484 32 896 -353637488 2 896 -353637492 32 896 -353637496 2 896 -353637500 32 896 -353637504 2 896 -353637508 32 896 -353637512 2 896 -353637516 32 896 -353637520 2 896 -353637524 32 896 -353637528 2 896 -353637532 32 896 -353637536 2 896 -353641476 32 896 -353641480 2 896 -353641484 32 896 -353641488 2 896 -353641492 32 896 -353641496 2 896 -353641500 32 896 -353641504 2 896 -353641508 32 896 -353641512 2 896 -353641516 32 896 -353641520 2 896 -353641524 32 896 -353641528 2 896 -353641532 32 896 -353641536 2 896 -353641540 32 896 -353641544 2 896 -353641548 32 896 -353641552 2 896 -353641556 32 896 -353641560 2 896 -353641564 32 896 -353641568 2 896 -353641572 32 896 -353641576 2 896 -353641580 32 896 -353641584 2 896 -353641588 32 896 -353641592 2 896 -353641596 32 896 -353641600 2 896 -353641604 32 896 -353641608 2 896 -353641612 32 896 -353641616 2 896 -353641620 32 896 -353641624 2 896 -353641628 32 896 -353641632 2 896 -353641636 32 896 -353641640 2 896 -353641644 32 896 -353641648 2 896 -353641652 32 896 -353641656 2 896 -353641660 32 896 -353641664 2 896 -353645572 32 896 -353645576 2 896 -353645580 32 896 -353645584 2 896 -353645588 32 896 -353645592 2 896 -353645596 32 896 -353645600 2 896 -353645604 32 896 -353645608 2 896 -353645612 32 896 -353645616 2 896 -353645620 32 896 -353645624 2 896 -353645628 32 896 -353645632 2 896 -353645636 32 896 -353645640 2 896 -353645644 32 896 -353645648 2 896 -353645652 32 896 -353645656 2 896 -353645660 32 896 -353645664 2 896 -353645668 32 896 -353645672 2 896 -353645676 32 896 -353645680 2 896 -353645684 32 896 -353645688 2 896 -353645692 32 896 -353645696 2 896 -353645700 32 896 -353645704 2 896 -353645708 32 896 -353645712 2 896 -353645716 32 896 -353645720 2 896 -353645724 32 896 -353645728 2 896 -353645732 32 896 -353645736 2 896 -353645740 32 896 -353645744 2 896 -353645748 32 896 -353645752 2 896 -353645756 32 896 -353645760 2 896 -353645764 32 896 -353645768 2 896 -353645772 32 896 -353645776 2 896 -353645780 32 896 -353645784 2 896 -353645788 32 896 -353645792 2 896 -353649668 32 896 -353649672 2 896 -353649676 32 896 -353649680 2 896 -353649684 32 896 -353649688 2 896 -353649692 32 896 -353649696 2 896 -353649700 32 896 -353649704 2 896 -353649708 32 896 -353649712 2 896 -353649716 32 896 -353649720 2 896 -353649724 32 896 -353649728 2 896 -353649732 32 896 -353649736 2 896 -353649740 32 896 -353649744 2 896 -353649748 32 896 -353649752 2 896 -353649756 32 896 -353649760 2 896 -353649764 32 896 -353649768 2 896 -353649772 32 896 -353649776 2 896 -353649780 32 896 -353649784 2 896 -353649788 32 896 -353649792 2 896 -353649796 32 896 -353649800 2 896 -353649804 32 896 -353649808 2 896 -353649812 32 896 -353649816 2 896 -353649820 32 896 -353649824 2 896 -353649828 32 896 -353649832 2 896 -353649836 32 896 -353649840 2 896 -353649844 32 896 -353649848 2 896 -353649852 32 896 -353649856 2 896 -353649860 32 896 -353649864 2 896 -353649868 32 896 -353649872 2 896 -353649876 32 896 -353649880 2 896 -353649884 32 896 -353649888 2 896 -353653764 32 896 -353653768 2 896 -353653772 32 896 -353653776 2 896 -353653780 32 896 -353653784 2 896 -353653788 32 896 -353653792 2 896 -353653796 32 896 -353653800 2 896 -353653804 32 896 -353653808 2 896 -353653812 32 896 -353653816 2 896 -353653820 32 896 -353653824 2 896 -353653828 32 896 -353653832 2 896 -353653836 32 896 -353653840 2 896 -353653844 32 896 -353653848 2 896 -353653852 32 896 -353653856 2 896 -353653860 32 896 -353653864 2 896 -353653868 32 896 -353653872 2 896 -353653876 32 896 -353653880 2 896 -353653884 32 896 -353653888 2 896 -353653892 32 896 -353653896 2 896 -353653900 32 896 -353653904 2 896 -353653908 32 896 -353653912 2 896 -353653916 32 896 -353653920 2 896 -353653924 32 896 -353653928 2 896 -353653932 32 896 -353653936 2 896 -353653940 32 896 -353653944 2 896 -353653948 32 896 -353653952 2 896 -353653956 32 896 -353653960 2 896 -353653964 32 896 -353653968 2 896 -353653972 32 896 -353653976 2 896 -353653980 32 896 -353653984 2 896 -353653988 32 896 -353653992 2 896 -353653996 32 896 -353654000 2 896 -353654004 32 896 -353654008 2 896 -353654012 32 896 -353654016 2 896 -353657860 32 896 -353657864 2 896 -353657868 32 896 -353657872 2 896 -353657876 32 896 -353657880 2 896 -353657884 32 896 -353657888 2 896 -353657892 32 896 -353657896 2 896 -353657900 32 896 -353657904 2 896 -353657908 32 896 -353657912 2 896 -353657916 32 896 -353657920 2 896 -353657924 32 896 -353657928 2 896 -353657932 32 896 -353657936 2 896 -353657940 32 896 -353657944 2 896 -353657948 32 896 -353657952 2 896 -353657956 32 896 -353657960 2 896 -353657964 32 896 -353657968 2 896 -353657972 32 896 -353657976 2 896 -353657980 32 896 -353657984 2 896 -353657988 32 896 -353657992 2 896 -353657996 32 896 -353658000 2 896 -353658004 32 896 -353658008 2 896 -353658012 32 896 -353658016 2 896 -353658020 32 896 -353658024 2 896 -353658028 32 896 -353658032 2 896 -353658036 32 896 -353658040 2 896 -353658044 32 896 -353658048 2 896 -353658052 32 896 -353658056 2 896 -353658060 32 896 -353658064 2 896 -353658068 32 896 -353658072 2 896 -353658076 32 896 -353658080 2 896 -353658084 32 896 -353658088 2 896 -353658092 32 896 -353658096 2 896 -353658100 32 896 -353658104 2 896 -353658108 32 896 -353658112 2 896 -353658116 32 896 -353658120 2 896 -353658124 32 896 -353658128 2 896 -353658132 32 896 -353658136 2 896 -353658140 32 896 -353658144 2 896 -353661956 32 896 -353661960 2 896 -353661964 32 896 -353661968 2 896 -353661972 32 896 -353661976 2 896 -353661980 32 896 -353661984 2 896 -353661988 32 896 -353661992 2 896 -353661996 32 896 -353662000 2 896 -353662004 32 896 -353662008 2 896 -353662012 32 896 -353662016 2 896 -353662020 32 896 -353662024 2 896 -353662028 32 896 -353662032 2 896 -353662036 32 896 -353662040 2 896 -353662044 32 896 -353662048 2 896 -353662052 32 896 -353662056 2 896 -353662060 32 896 -353662064 2 896 -353662068 32 896 -353662072 2 896 -353662076 32 896 -353662080 2 896 -353662084 32 896 -353662088 2 896 -353662092 32 896 -353662096 2 896 -353662100 32 896 -353662104 2 896 -353662108 32 896 -353662112 2 896 -353662116 32 896 -353662120 2 896 -353662124 32 896 -353662128 2 896 -353662132 32 896 -353662136 2 896 -353662140 32 896 -353662144 2 896 -353662148 32 896 -353662152 2 896 -353662156 32 896 -353662160 2 896 -353662164 32 896 -353662168 2 896 -353662172 32 896 -353662176 2 896 -353662180 32 896 -353662184 2 896 -353662188 32 896 -353662192 2 896 -353662196 32 896 -353662200 2 896 -353662204 32 896 -353662208 2 896 -353662212 32 896 -353662216 2 896 -353662220 32 896 -353662224 2 896 -353662228 32 896 -353662232 2 896 -353662236 32 896 -353662240 2 896 -353666052 32 896 -353666056 2 896 -353666060 32 896 -353666064 2 896 -353666068 32 896 -353666072 2 896 -353666076 32 896 -353666080 2 896 -353666084 32 896 -353666088 2 896 -353666092 32 896 -353666096 2 896 -353666100 32 896 -353666104 2 896 -353666108 32 896 -353666112 2 896 -353666116 32 896 -353666120 2 896 -353666124 32 896 -353666128 2 896 -353666132 32 896 -353666136 2 896 -353666140 32 896 -353666144 2 896 -353666148 32 896 -353666152 2 896 -353666156 32 896 -353666160 2 896 -353666164 32 896 -353666168 2 896 -353666172 32 896 -353666176 2 896 -353666180 32 896 -353666184 2 896 -353666188 32 896 -353666192 2 896 -353666196 32 896 -353666200 2 896 -353666204 32 896 -353666208 2 896 -353666212 32 896 -353666216 2 896 -353666220 32 896 -353666224 2 896 -353666228 32 896 -353666232 2 896 -353666236 32 896 -353666240 2 896 -353666244 32 896 -353666248 2 896 -353666252 32 896 -353666256 2 896 -353666260 32 896 -353666264 2 896 -353666268 32 896 -353666272 2 896 -353666276 32 896 -353666280 2 896 -353666284 32 896 -353666288 2 896 -353666292 32 896 -353666296 2 896 -353666300 32 896 -353666304 2 896 -353666308 32 896 -353666312 2 896 -353666316 32 896 -353666320 2 896 -353666324 32 896 -353666328 2 896 -353666332 32 896 -353666336 2 896 -353666340 32 896 -353666344 2 896 -353666348 32 896 -353666352 2 896 -353666356 32 896 -353666360 2 896 -353666364 32 896 -353666368 2 896 -353670148 32 896 -353670152 2 896 -353670156 32 896 -353670160 2 896 -353670164 32 896 -353670168 2 896 -353670172 32 896 -353670176 2 896 -353670180 32 896 -353670184 2 896 -353670188 32 896 -353670192 2 896 -353670196 32 896 -353670200 2 896 -353670204 32 896 -353670208 2 896 -353670212 32 896 -353670216 2 896 -353670220 32 896 -353670224 2 896 -353670228 32 896 -353670232 2 896 -353670236 32 896 -353670240 2 896 -353670244 32 896 -353670248 2 896 -353670252 32 896 -353670256 2 896 -353670260 32 896 -353670264 2 896 -353670268 32 896 -353670272 2 896 -353670276 32 896 -353670280 2 896 -353670284 32 896 -353670288 2 896 -353670292 32 896 -353670296 2 896 -353670300 32 896 -353670304 2 896 -353670308 32 896 -353670312 2 896 -353670316 32 896 -353670320 2 896 -353670324 32 896 -353670328 2 896 -353670332 32 896 -353670336 2 896 -353670340 32 896 -353670344 2 896 -353670348 32 896 -353670352 2 896 -353670356 32 896 -353670360 2 896 -353670364 32 896 -353670368 2 896 -353670372 32 896 -353670376 2 896 -353670380 32 896 -353670384 2 896 -353670388 32 896 -353670392 2 896 -353670396 32 896 -353670400 2 896 -353670404 32 896 -353670408 2 896 -353670412 32 896 -353670416 2 896 -353670420 32 896 -353670424 2 896 -353670428 32 896 -353670432 2 896 -353670436 32 896 -353670440 2 896 -353670444 32 896 -353670448 2 896 -353670452 32 896 -353670456 2 896 -353670460 32 896 -353670464 2 896 -353674244 2 896 -353674248 2 896 -353674252 2 896 -353674256 2 896 -353674260 2 896 -353674264 2 896 -353674268 2 896 -353674272 2 896 -353674276 2 896 -353674280 2 896 -353674284 2 896 -353674288 2 896 -353674292 2 896 -353674296 2 896 -353674300 2 896 -353674304 2 896 -353674308 2 896 -353674312 2 896 -353674316 2 896 -353674320 2 896 -353674324 2 896 -353674328 2 896 -353674332 2 896 -353674336 2 896 -353674340 2 896 -353674344 2 896 -353674348 2 896 -353674352 2 896 -353674356 2 896 -353674360 2 896 -353674364 2 896 -353674368 2 896 -353674372 2 896 -353674376 2 896 -353674380 2 896 -353674384 2 896 -353674388 2 896 -353674392 2 896 -353674396 2 896 -353674400 2 896 -353674404 2 896 -353674408 2 896 -353674412 2 896 -353674416 2 896 -353674420 2 896 -353674424 2 896 -353674428 2 896 -353674432 2 896 -353674436 2 896 -353674440 2 896 -353674444 2 896 -353674448 2 896 -353674452 2 896 -353674456 2 896 -353674460 2 896 -353674464 2 896 -353674468 2 896 -353674472 2 896 -353674476 2 896 -353674480 2 896 -353674484 2 896 -353674488 2 896 -353674492 2 896 -353674496 2 896 -353674500 2 896 -353674504 2 896 -353674508 2 896 -353674512 2 896 -353674516 2 896 -353674520 2 896 -353674524 2 896 -353674528 2 896 -353674532 2 896 -353674536 2 896 -353674540 2 896 -353674544 2 896 -353674548 2 896 -353674552 2 896 -353674556 2 896 -353674560 2 896 -353674564 2 896 -353674568 2 896 -353674572 2 896 -353674576 2 896 -353674580 2 896 -353674584 2 896 -353674588 2 896 -353674592 2 896 -353674596 2 896 -353674600 2 896 -353674604 2 896 -353674608 2 896 -353674612 2 896 -353674616 2 896 -353674620 2 896 -353674624 2 896 -353678340 2 896 -353678344 2 896 -353678348 2 896 -353678352 2 896 -353678356 2 896 -353678360 2 896 -353678364 2 896 -353678368 2 896 -353678372 2 896 -353678376 2 896 -353678380 2 896 -353678384 2 896 -353678388 2 896 -353678392 2 896 -353678396 2 896 -353678400 2 896 -353678404 2 896 -353678408 2 896 -353678412 2 896 -353678416 2 896 -353678420 2 896 -353678424 2 896 -353678428 2 896 -353678432 2 896 -353678436 2 896 -353678440 2 896 -353678444 2 896 -353678448 2 896 -353678452 2 896 -353678456 2 896 -353678460 2 896 -353678464 2 896 -353678468 2 896 -353678472 2 896 -353678476 2 896 -353678480 2 896 -353678484 2 896 -353678488 2 896 -353678492 2 896 -353678496 2 896 -353678500 2 896 -353678504 2 896 -353678508 2 896 -353678512 2 896 -353678516 2 896 -353678520 2 896 -353678524 2 896 -353678528 2 896 -353678532 2 896 -353678536 2 896 -353678540 2 896 -353678544 2 896 -353678548 2 896 -353678552 2 896 -353678556 2 896 -353678560 2 896 -353678564 2 896 -353678568 2 896 -353678572 2 896 -353678576 2 896 -353678580 2 896 -353678584 2 896 -353678588 2 896 -353678592 2 896 -353678596 2 896 -353678600 2 896 -353678604 2 896 -353678608 2 896 -353678612 2 896 -353678616 2 896 -353678620 2 896 -353678624 2 896 -353678628 2 896 -353678632 2 896 -353678636 2 896 -353678640 2 896 -353678644 2 896 -353678648 2 896 -353678652 2 896 -353678656 2 896 -353678660 2 896 -353678664 2 896 -353678668 2 896 -353678672 2 896 -353678676 2 896 -353678680 2 896 -353678684 2 896 -353678688 2 896 -353678692 2 896 -353678696 2 896 -353678700 2 896 -353678704 2 896 -353678708 2 896 -353678712 2 896 -353678716 2 896 -353678720 2 896 -353678724 2 896 -353678728 2 896 -353678732 2 896 -353678736 2 896 -353678740 2 896 -353678744 2 896 -353678748 2 896 -353678752 2 896 -353678756 2 896 -353678760 2 896 -353678764 2 896 -353678768 2 896 -353678772 2 896 -353678776 2 896 -353678780 2 896 -353678784 2 896 -353682436 2 896 -353682440 2 896 -353682444 2 896 -353682448 2 896 -353682452 2 896 -353682456 2 896 -353682460 2 896 -353682464 2 896 -353682468 2 896 -353682472 2 896 -353682476 2 896 -353682480 2 896 -353682484 2 896 -353682488 2 896 -353682492 2 896 -353682496 2 896 -353682500 2 896 -353682504 2 896 -353682508 2 896 -353682512 2 896 -353682516 2 896 -353682520 2 896 -353682524 2 896 -353682528 2 896 -353682532 2 896 -353682536 2 896 -353682540 2 896 -353682544 2 896 -353682548 2 896 -353682552 2 896 -353682556 2 896 -353682560 2 896 -353682564 2 896 -353682568 2 896 -353682572 2 896 -353682576 2 896 -353682580 2 896 -353682584 2 896 -353682588 2 896 -353682592 2 896 -353682596 2 896 -353682600 2 896 -353682604 2 896 -353682608 2 896 -353682612 2 896 -353682616 2 896 -353682620 2 896 -353682624 2 896 -353682628 2 896 -353682632 2 896 -353682636 2 896 -353682640 2 896 -353682644 2 896 -353682648 2 896 -353682652 2 896 -353682656 2 896 -353682660 2 896 -353682664 2 896 -353682668 2 896 -353682672 2 896 -353682676 2 896 -353682680 2 896 -353682684 2 896 -353682688 2 896 -353682692 2 896 -353682696 2 896 -353682700 2 896 -353682704 2 896 -353682708 2 896 -353682712 2 896 -353682716 2 896 -353682720 2 896 -353682724 2 896 -353682728 2 896 -353682732 2 896 -353682736 2 896 -353682740 2 896 -353682744 2 896 -353682748 2 896 -353682752 2 896 -353682756 2 896 -353682760 2 896 -353682764 2 896 -353682768 2 896 -353682772 2 896 -353682776 2 896 -353682780 2 896 -353682784 2 896 -353682788 2 896 -353682792 2 896 -353682796 2 896 -353682800 2 896 -353682804 2 896 -353682808 2 896 -353682812 2 896 -353682816 2 896 -353682820 2 896 -353682824 2 896 -353682828 2 896 -353682832 2 896 -353682836 2 896 -353682840 2 896 -353682844 2 896 -353682848 2 896 -353682852 2 896 -353682856 2 896 -353682860 2 896 -353682864 2 896 -353682868 2 896 -353682872 2 896 -353682876 2 896 -353682880 2 896 -353682884 2 896 -353682888 2 896 -353682892 2 896 -353682896 2 896 -353682900 2 896 -353682904 2 896 -353682908 2 896 -353682912 2 896 -353682916 2 896 -353682920 2 896 -353682924 2 896 -353682928 2 896 -353682932 2 896 -353682936 2 896 -353682940 2 896 -353682944 2 896 -353686532 2 896 -353686536 2 896 -353686540 2 896 -353686544 2 896 -353686548 2 896 -353686552 2 896 -353686556 2 896 -353686560 2 896 -353686564 2 896 -353686568 2 896 -353686572 2 896 -353686576 2 896 -353686580 2 896 -353686584 2 896 -353686588 2 896 -353686592 2 896 -353686596 2 896 -353686600 2 896 -353686604 2 896 -353686608 2 896 -353686612 2 896 -353686616 2 896 -353686620 2 896 -353686624 2 896 -353686628 2 896 -353686632 2 896 -353686636 2 896 -353686640 2 896 -353686644 2 896 -353686648 2 896 -353686652 2 896 -353686656 2 896 -353686660 2 896 -353686664 2 896 -353686668 2 896 -353686672 2 896 -353686676 2 896 -353686680 2 896 -353686684 2 896 -353686688 2 896 -353686692 2 896 -353686696 2 896 -353686700 2 896 -353686704 2 896 -353686708 2 896 -353686712 2 896 -353686716 2 896 -353686720 2 896 -353686724 2 896 -353686728 2 896 -353686732 2 896 -353686736 2 896 -353686740 2 896 -353686744 2 896 -353686748 2 896 -353686752 2 896 -353686756 2 896 -353686760 2 896 -353686764 2 896 -353686768 2 896 -353686772 2 896 -353686776 2 896 -353686780 2 896 -353686784 2 896 -353686788 2 896 -353686792 2 896 -353686796 2 896 -353686800 2 896 -353686804 2 896 -353686808 2 896 -353686812 2 896 -353686816 2 896 -353686820 2 896 -353686824 2 896 -353686828 2 896 -353686832 2 896 -353686836 2 896 -353686840 2 896 -353686844 2 896 -353686848 2 896 -353686852 2 896 -353686856 2 896 -353686860 2 896 -353686864 2 896 -353686868 2 896 -353686872 2 896 -353686876 2 896 -353686880 2 896 -353686884 2 896 -353686888 2 896 -353686892 2 896 -353686896 2 896 -353686900 2 896 -353686904 2 896 -353686908 2 896 -353686912 2 896 -353686916 2 896 -353686920 2 896 -353686924 2 896 -353686928 2 896 -353686932 2 896 -353686936 2 896 -353686940 2 896 -353686944 2 896 -353686948 2 896 -353686952 2 896 -353686956 2 896 -353686960 2 896 -353686964 2 896 -353686968 2 896 -353686972 2 896 -353686976 2 896 -353686980 2 896 -353686984 2 896 -353686988 2 896 -353686992 2 896 -353686996 2 896 -353687000 2 896 -353687004 2 896 -353687008 2 896 -353687012 2 896 -353687016 2 896 -353687020 2 896 -353687024 2 896 -353687028 2 896 -353687032 2 896 -353687036 2 896 -353687040 2 896 -353687044 2 896 -353687048 2 896 -353687052 2 896 -353687056 2 896 -353687060 2 896 -353687064 2 896 -353687068 2 896 -353687072 2 896 -353690628 2 896 -353690632 2 896 -353690636 2 896 -353690640 2 896 -353690644 2 896 -353690648 2 896 -353690652 2 896 -353690656 2 896 -353690660 2 896 -353690664 2 896 -353690668 2 896 -353690672 2 896 -353690676 2 896 -353690680 2 896 -353690684 2 896 -353690688 2 896 -353690692 2 896 -353690696 2 896 -353690700 2 896 -353690704 2 896 -353690708 2 896 -353690712 2 896 -353690716 2 896 -353690720 2 896 -353690724 2 896 -353690728 2 896 -353690732 2 896 -353690736 2 896 -353690740 2 896 -353690744 2 896 -353690748 2 896 -353690752 2 896 -353690756 2 896 -353690760 2 896 -353690764 2 896 -353690768 2 896 -353690772 2 896 -353690776 2 896 -353690780 2 896 -353690784 2 896 -353690788 2 896 -353690792 2 896 -353690796 2 896 -353690800 2 896 -353690804 2 896 -353690808 2 896 -353690812 2 896 -353690816 2 896 -353690820 2 896 -353690824 2 896 -353690828 2 896 -353690832 2 896 -353690836 2 896 -353690840 2 896 -353690844 2 896 -353690848 2 896 -353690852 2 896 -353690856 2 896 -353690860 2 896 -353690864 2 896 -353690868 2 896 -353690872 2 896 -353690876 2 896 -353690880 2 896 -353690884 2 896 -353690888 2 896 -353690892 2 896 -353690896 2 896 -353690900 2 896 -353690904 2 896 -353690908 2 896 -353690912 2 896 -353690916 2 896 -353690920 2 896 -353690924 2 896 -353690928 2 896 -353690932 2 896 -353690936 2 896 -353690940 2 896 -353690944 2 896 -353690948 2 896 -353690952 2 896 -353690956 2 896 -353690960 2 896 -353690964 2 896 -353690968 2 896 -353690972 2 896 -353690976 2 896 -353690980 2 896 -353690984 2 896 -353690988 2 896 -353690992 2 896 -353690996 2 896 -353691000 2 896 -353691004 2 896 -353691008 2 896 -353691012 2 896 -353691016 2 896 -353691020 2 896 -353691024 2 896 -353691028 2 896 -353691032 2 896 -353691036 2 896 -353691040 2 896 -353691044 2 896 -353691048 2 896 -353691052 2 896 -353691056 2 896 -353691060 2 896 -353691064 2 896 -353691068 2 896 -353691072 2 896 -353691076 2 896 -353691080 2 896 -353691084 2 896 -353691088 2 896 -353691092 2 896 -353691096 2 896 -353691100 2 896 -353691104 2 896 -353691108 2 896 -353691112 2 896 -353691116 2 896 -353691120 2 896 -353691124 2 896 -353691128 2 896 -353691132 2 896 -353691136 2 896 -353691140 2 896 -353691144 2 896 -353691148 2 896 -353691152 2 896 -353691156 2 896 -353691160 2 896 -353691164 2 896 -353691168 2 896 -353691172 2 896 -353691176 2 896 -353691180 2 896 -353691184 2 896 -353691188 2 896 -353691192 2 896 -353691196 2 896 -353691200 2 896 -353694724 2 896 -353694728 2 896 -353694732 2 896 -353694736 2 896 -353694740 2 896 -353694744 2 896 -353694748 2 896 -353694752 2 896 -353694756 2 896 -353694760 2 896 -353694764 2 896 -353694768 2 896 -353694772 2 896 -353694776 2 896 -353694780 2 896 -353694784 2 896 -353694788 2 896 -353694792 2 896 -353694796 2 896 -353694800 2 896 -353694804 2 896 -353694808 2 896 -353694812 2 896 -353694816 2 896 -353694820 2 896 -353694824 2 896 -353694828 2 896 -353694832 2 896 -353694836 2 896 -353694840 2 896 -353694844 2 896 -353694848 2 896 -353694852 2 896 -353694856 2 896 -353694860 2 896 -353694864 2 896 -353694868 2 896 -353694872 2 896 -353694876 2 896 -353694880 2 896 -353694884 2 896 -353694888 2 896 -353694892 2 896 -353694896 2 896 -353694900 2 896 -353694904 2 896 -353694908 2 896 -353694912 2 896 -353694916 2 896 -353694920 2 896 -353694924 2 896 -353694928 2 896 -353694932 2 896 -353694936 2 896 -353694940 2 896 -353694944 2 896 -353694948 2 896 -353694952 2 896 -353694956 2 896 -353694960 2 896 -353694964 2 896 -353694968 2 896 -353694972 2 896 -353694976 2 896 -353694980 2 896 -353694984 2 896 -353694988 2 896 -353694992 2 896 -353694996 2 896 -353695000 2 896 -353695004 2 896 -353695008 2 896 -353695012 2 896 -353695016 2 896 -353695020 2 896 -353695024 2 896 -353695028 2 896 -353695032 2 896 -353695036 2 896 -353695040 2 896 -353695044 2 896 -353695048 2 896 -353695052 2 896 -353695056 2 896 -353695060 2 896 -353695064 2 896 -353695068 2 896 -353695072 2 896 -353695076 2 896 -353695080 2 896 -353695084 2 896 -353695088 2 896 -353695092 2 896 -353695096 2 896 -353695100 2 896 -353695104 2 896 -353695108 2 896 -353695112 2 896 -353695116 2 896 -353695120 2 896 -353695124 2 896 -353695128 2 896 -353695132 2 896 -353695136 2 896 -353695140 2 896 -353695144 2 896 -353695148 2 896 -353695152 2 896 -353695156 2 896 -353695160 2 896 -353695164 2 896 -353695168 2 896 -353695172 2 896 -353695176 2 896 -353695180 2 896 -353695184 2 896 -353695188 2 896 -353695192 2 896 -353695196 2 896 -353695200 2 896 -353695204 2 896 -353695208 2 896 -353695212 2 896 -353695216 2 896 -353695220 2 896 -353695224 2 896 -353695228 2 896 -353695232 2 896 -353695236 2 896 -353695240 2 896 -353695244 2 896 -353695248 2 896 -353695252 2 896 -353695256 2 896 -353695260 2 896 -353695264 2 896 -353695268 2 896 -353695272 2 896 -353695276 2 896 -353695280 2 896 -353695284 2 896 -353695288 2 896 -353695292 2 896 -353695296 2 896 -353695300 2 896 -353695304 2 896 -353695308 2 896 -353695312 2 896 -353695316 2 896 -353695320 2 896 -353695324 2 896 -353695328 2 896 -353695332 2 896 -353695336 2 896 -353695340 2 896 -353695344 2 896 -353695348 2 896 -353695352 2 896 -353695356 2 896 -353695360 2 896 -353899524 32 896 -353899528 2 896 -353899532 32 896 -353899536 2 896 -353899540 32 896 -353899544 2 896 -353899548 32 896 -353899552 2 896 -353899556 32 896 -353899560 2 896 -353899564 32 896 -353899568 2 896 -353899572 32 896 -353899576 2 896 -353899580 32 896 -353899584 2 896 -353899588 32 896 -353899592 2 896 -353899596 32 896 -353899600 2 896 -353899604 32 896 -353899608 2 896 -353899612 32 896 -353899616 2 896 -353899620 32 896 -353899624 2 896 -353899628 32 896 -353899632 2 896 -353899636 32 896 -353899640 2 896 -353899644 32 896 -353899648 2 896 -353899652 32 896 -353899656 2 896 -353899660 32 896 -353899664 2 896 -353899668 32 896 -353899672 2 896 -353899676 32 896 -353899680 2 896 -353899684 32 896 -353899688 2 896 -353899692 32 896 -353899696 2 896 -353899700 32 896 -353899704 2 896 -353899708 32 896 -353899712 2 896 -353903620 32 896 -353903624 2 896 -353903628 32 896 -353903632 2 896 -353903636 32 896 -353903640 2 896 -353903644 32 896 -353903648 2 896 -353903652 32 896 -353903656 2 896 -353903660 32 896 -353903664 2 896 -353903668 32 896 -353903672 2 896 -353903676 32 896 -353903680 2 896 -353903684 32 896 -353903688 2 896 -353903692 32 896 -353903696 2 896 -353903700 32 896 -353903704 2 896 -353903708 32 896 -353903712 2 896 -353903716 32 896 -353903720 2 896 -353903724 32 896 -353903728 2 896 -353903732 32 896 -353903736 2 896 -353903740 32 896 -353903744 2 896 -353903748 32 896 -353903752 2 896 -353903756 32 896 -353903760 2 896 -353903764 32 896 -353903768 2 896 -353903772 32 896 -353903776 2 896 -353903780 32 896 -353903784 2 896 -353903788 32 896 -353903792 2 896 -353903796 32 896 -353903800 2 896 -353903804 32 896 -353903808 2 896 -353903812 32 896 -353903816 2 896 -353903820 32 896 -353903824 2 896 -353903828 32 896 -353903832 2 896 -353903836 32 896 -353903840 2 896 -353907716 32 896 -353907720 2 896 -353907724 32 896 -353907728 2 896 -353907732 32 896 -353907736 2 896 -353907740 32 896 -353907744 2 896 -353907748 32 896 -353907752 2 896 -353907756 32 896 -353907760 2 896 -353907764 32 896 -353907768 2 896 -353907772 32 896 -353907776 2 896 -353907780 32 896 -353907784 2 896 -353907788 32 896 -353907792 2 896 -353907796 32 896 -353907800 2 896 -353907804 32 896 -353907808 2 896 -353907812 32 896 -353907816 2 896 -353907820 32 896 -353907824 2 896 -353907828 32 896 -353907832 2 896 -353907836 32 896 -353907840 2 896 -353907844 32 896 -353907848 2 896 -353907852 32 896 -353907856 2 896 -353907860 32 896 -353907864 2 896 -353907868 32 896 -353907872 2 896 -353907876 32 896 -353907880 2 896 -353907884 32 896 -353907888 2 896 -353907892 32 896 -353907896 2 896 -353907900 32 896 -353907904 2 896 -353907908 32 896 -353907912 2 896 -353907916 32 896 -353907920 2 896 -353907924 32 896 -353907928 2 896 -353907932 32 896 -353907936 2 896 -353911812 32 896 -353911816 2 896 -353911820 32 896 -353911824 2 896 -353911828 32 896 -353911832 2 896 -353911836 32 896 -353911840 2 896 -353911844 32 896 -353911848 2 896 -353911852 32 896 -353911856 2 896 -353911860 32 896 -353911864 2 896 -353911868 32 896 -353911872 2 896 -353911876 32 896 -353911880 2 896 -353911884 32 896 -353911888 2 896 -353911892 32 896 -353911896 2 896 -353911900 32 896 -353911904 2 896 -353911908 32 896 -353911912 2 896 -353911916 32 896 -353911920 2 896 -353911924 32 896 -353911928 2 896 -353911932 32 896 -353911936 2 896 -353911940 32 896 -353911944 2 896 -353911948 32 896 -353911952 2 896 -353911956 32 896 -353911960 2 896 -353911964 32 896 -353911968 2 896 -353911972 32 896 -353911976 2 896 -353911980 32 896 -353911984 2 896 -353911988 32 896 -353911992 2 896 -353911996 32 896 -353912000 2 896 -353912004 32 896 -353912008 2 896 -353912012 32 896 -353912016 2 896 -353912020 32 896 -353912024 2 896 -353912028 32 896 -353912032 2 896 -353912036 32 896 -353912040 2 896 -353912044 32 896 -353912048 2 896 -353912052 32 896 -353912056 2 896 -353912060 32 896 -353912064 2 896 -353915908 32 896 -353915912 2 896 -353915916 32 896 -353915920 2 896 -353915924 32 896 -353915928 2 896 -353915932 32 896 -353915936 2 896 -353915940 32 896 -353915944 2 896 -353915948 32 896 -353915952 2 896 -353915956 32 896 -353915960 2 896 -353915964 32 896 -353915968 2 896 -353915972 32 896 -353915976 2 896 -353915980 32 896 -353915984 2 896 -353915988 32 896 -353915992 2 896 -353915996 32 896 -353916000 2 896 -353916004 32 896 -353916008 2 896 -353916012 32 896 -353916016 2 896 -353916020 32 896 -353916024 2 896 -353916028 32 896 -353916032 2 896 -353916036 32 896 -353916040 2 896 -353916044 32 896 -353916048 2 896 -353916052 32 896 -353916056 2 896 -353916060 32 896 -353916064 2 896 -353916068 32 896 -353916072 2 896 -353916076 32 896 -353916080 2 896 -353916084 32 896 -353916088 2 896 -353916092 32 896 -353916096 2 896 -353916100 32 896 -353916104 2 896 -353916108 32 896 -353916112 2 896 -353916116 32 896 -353916120 2 896 -353916124 32 896 -353916128 2 896 -353916132 32 896 -353916136 2 896 -353916140 32 896 -353916144 2 896 -353916148 32 896 -353916152 2 896 -353916156 32 896 -353916160 2 896 -353916164 32 896 -353916168 2 896 -353916172 32 896 -353916176 2 896 -353916180 32 896 -353916184 2 896 -353916188 32 896 -353916192 2 896 -353920004 32 896 -353920008 2 896 -353920012 32 896 -353920016 2 896 -353920020 32 896 -353920024 2 896 -353920028 32 896 -353920032 2 896 -353920036 32 896 -353920040 2 896 -353920044 32 896 -353920048 2 896 -353920052 32 896 -353920056 2 896 -353920060 32 896 -353920064 2 896 -353920068 32 896 -353920072 2 896 -353920076 32 896 -353920080 2 896 -353920084 32 896 -353920088 2 896 -353920092 32 896 -353920096 2 896 -353920100 32 896 -353920104 2 896 -353920108 32 896 -353920112 2 896 -353920116 32 896 -353920120 2 896 -353920124 32 896 -353920128 2 896 -353920132 32 896 -353920136 2 896 -353920140 32 896 -353920144 2 896 -353920148 32 896 -353920152 2 896 -353920156 32 896 -353920160 2 896 -353920164 32 896 -353920168 2 896 -353920172 32 896 -353920176 2 896 -353920180 32 896 -353920184 2 896 -353920188 32 896 -353920192 2 896 -353920196 32 896 -353920200 2 896 -353920204 32 896 -353920208 2 896 -353920212 32 896 -353920216 2 896 -353920220 32 896 -353920224 2 896 -353920228 32 896 -353920232 2 896 -353920236 32 896 -353920240 2 896 -353920244 32 896 -353920248 2 896 -353920252 32 896 -353920256 2 896 -353920260 32 896 -353920264 2 896 -353920268 32 896 -353920272 2 896 -353920276 32 896 -353920280 2 896 -353920284 32 896 -353920288 2 896 -353924100 32 896 -353924104 2 896 -353924108 32 896 -353924112 2 896 -353924116 32 896 -353924120 2 896 -353924124 32 896 -353924128 2 896 -353924132 32 896 -353924136 2 896 -353924140 32 896 -353924144 2 896 -353924148 32 896 -353924152 2 896 -353924156 32 896 -353924160 2 896 -353924164 32 896 -353924168 2 896 -353924172 32 896 -353924176 2 896 -353924180 32 896 -353924184 2 896 -353924188 32 896 -353924192 2 896 -353924196 32 896 -353924200 2 896 -353924204 32 896 -353924208 2 896 -353924212 32 896 -353924216 2 896 -353924220 32 896 -353924224 2 896 -353924228 32 896 -353924232 2 896 -353924236 32 896 -353924240 2 896 -353924244 32 896 -353924248 2 896 -353924252 32 896 -353924256 2 896 -353924260 32 896 -353924264 2 896 -353924268 32 896 -353924272 2 896 -353924276 32 896 -353924280 2 896 -353924284 32 896 -353924288 2 896 -353924292 32 896 -353924296 2 896 -353924300 32 896 -353924304 2 896 -353924308 32 896 -353924312 2 896 -353924316 32 896 -353924320 2 896 -353924324 32 896 -353924328 2 896 -353924332 32 896 -353924336 2 896 -353924340 32 896 -353924344 2 896 -353924348 32 896 -353924352 2 896 -353924356 32 896 -353924360 2 896 -353924364 32 896 -353924368 2 896 -353924372 32 896 -353924376 2 896 -353924380 32 896 -353924384 2 896 -353924388 32 896 -353924392 2 896 -353924396 32 896 -353924400 2 896 -353924404 32 896 -353924408 2 896 -353924412 32 896 -353924416 2 896 -353928196 32 896 -353928200 2 896 -353928204 32 896 -353928208 2 896 -353928212 32 896 -353928216 2 896 -353928220 32 896 -353928224 2 896 -353928228 32 896 -353928232 2 896 -353928236 32 896 -353928240 2 896 -353928244 32 896 -353928248 2 896 -353928252 32 896 -353928256 2 896 -353928260 32 896 -353928264 2 896 -353928268 32 896 -353928272 2 896 -353928276 32 896 -353928280 2 896 -353928284 32 896 -353928288 2 896 -353928292 32 896 -353928296 2 896 -353928300 32 896 -353928304 2 896 -353928308 32 896 -353928312 2 896 -353928316 32 896 -353928320 2 896 -353928324 32 896 -353928328 2 896 -353928332 32 896 -353928336 2 896 -353928340 32 896 -353928344 2 896 -353928348 32 896 -353928352 2 896 -353928356 32 896 -353928360 2 896 -353928364 32 896 -353928368 2 896 -353928372 32 896 -353928376 2 896 -353928380 32 896 -353928384 2 896 -353928388 32 896 -353928392 2 896 -353928396 32 896 -353928400 2 896 -353928404 32 896 -353928408 2 896 -353928412 32 896 -353928416 2 896 -353928420 32 896 -353928424 2 896 -353928428 32 896 -353928432 2 896 -353928436 32 896 -353928440 2 896 -353928444 32 896 -353928448 2 896 -353928452 32 896 -353928456 2 896 -353928460 32 896 -353928464 2 896 -353928468 32 896 -353928472 2 896 -353928476 32 896 -353928480 2 896 -353928484 32 896 -353928488 2 896 -353928492 32 896 -353928496 2 896 -353928500 32 896 -353928504 2 896 -353928508 32 896 -353928512 2 896 -353932292 2 896 -353932296 2 896 -353932300 2 896 -353932304 2 896 -353932308 2 896 -353932312 2 896 -353932316 2 896 -353932320 2 896 -353932324 2 896 -353932328 2 896 -353932332 2 896 -353932336 2 896 -353932340 2 896 -353932344 2 896 -353932348 2 896 -353932352 2 896 -353932356 2 896 -353932360 2 896 -353932364 2 896 -353932368 2 896 -353932372 2 896 -353932376 2 896 -353932380 2 896 -353932384 2 896 -353932388 2 896 -353932392 2 896 -353932396 2 896 -353932400 2 896 -353932404 2 896 -353932408 2 896 -353932412 2 896 -353932416 2 896 -353932420 2 896 -353932424 2 896 -353932428 2 896 -353932432 2 896 -353932436 2 896 -353932440 2 896 -353932444 2 896 -353932448 2 896 -353932452 2 896 -353932456 2 896 -353932460 2 896 -353932464 2 896 -353932468 2 896 -353932472 2 896 -353932476 2 896 -353932480 2 896 -353932484 2 896 -353932488 2 896 -353932492 2 896 -353932496 2 896 -353932500 2 896 -353932504 2 896 -353932508 2 896 -353932512 2 896 -353932516 2 896 -353932520 2 896 -353932524 2 896 -353932528 2 896 -353932532 2 896 -353932536 2 896 -353932540 2 896 -353932544 2 896 -353932548 2 896 -353932552 2 896 -353932556 2 896 -353932560 2 896 -353932564 2 896 -353932568 2 896 -353932572 2 896 -353932576 2 896 -353932580 2 896 -353932584 2 896 -353932588 2 896 -353932592 2 896 -353932596 2 896 -353932600 2 896 -353932604 2 896 -353932608 2 896 -353932612 2 896 -353932616 2 896 -353932620 2 896 -353932624 2 896 -353932628 2 896 -353932632 2 896 -353932636 2 896 -353932640 2 896 -353932644 2 896 -353932648 2 896 -353932652 2 896 -353932656 2 896 -353932660 2 896 -353932664 2 896 -353932668 2 896 -353932672 2 896 -353936388 2 896 -353936392 2 896 -353936396 2 896 -353936400 2 896 -353936404 2 896 -353936408 2 896 -353936412 2 896 -353936416 2 896 -353936420 2 896 -353936424 2 896 -353936428 2 896 -353936432 2 896 -353936436 2 896 -353936440 2 896 -353936444 2 896 -353936448 2 896 -353936452 2 896 -353936456 2 896 -353936460 2 896 -353936464 2 896 -353936468 2 896 -353936472 2 896 -353936476 2 896 -353936480 2 896 -353936484 2 896 -353936488 2 896 -353936492 2 896 -353936496 2 896 -353936500 2 896 -353936504 2 896 -353936508 2 896 -353936512 2 896 -353936516 2 896 -353936520 2 896 -353936524 2 896 -353936528 2 896 -353936532 2 896 -353936536 2 896 -353936540 2 896 -353936544 2 896 -353936548 2 896 -353936552 2 896 -353936556 2 896 -353936560 2 896 -353936564 2 896 -353936568 2 896 -353936572 2 896 -353936576 2 896 -353936580 2 896 -353936584 2 896 -353936588 2 896 -353936592 2 896 -353936596 2 896 -353936600 2 896 -353936604 2 896 -353936608 2 896 -353936612 2 896 -353936616 2 896 -353936620 2 896 -353936624 2 896 -353936628 2 896 -353936632 2 896 -353936636 2 896 -353936640 2 896 -353936644 2 896 -353936648 2 896 -353936652 2 896 -353936656 2 896 -353936660 2 896 -353936664 2 896 -353936668 2 896 -353936672 2 896 -353936676 2 896 -353936680 2 896 -353936684 2 896 -353936688 2 896 -353936692 2 896 -353936696 2 896 -353936700 2 896 -353936704 2 896 -353936708 2 896 -353936712 2 896 -353936716 2 896 -353936720 2 896 -353936724 2 896 -353936728 2 896 -353936732 2 896 -353936736 2 896 -353936740 2 896 -353936744 2 896 -353936748 2 896 -353936752 2 896 -353936756 2 896 -353936760 2 896 -353936764 2 896 -353936768 2 896 -353936772 2 896 -353936776 2 896 -353936780 2 896 -353936784 2 896 -353936788 2 896 -353936792 2 896 -353936796 2 896 -353936800 2 896 -353936804 2 896 -353936808 2 896 -353936812 2 896 -353936816 2 896 -353936820 2 896 -353936824 2 896 -353936828 2 896 -353936832 2 896 -353940484 2 896 -353940488 2 896 -353940492 2 896 -353940496 2 896 -353940500 2 896 -353940504 2 896 -353940508 2 896 -353940512 2 896 -353940516 2 896 -353940520 2 896 -353940524 2 896 -353940528 2 896 -353940532 2 896 -353940536 2 896 -353940540 2 896 -353940544 2 896 -353940548 2 896 -353940552 2 896 -353940556 2 896 -353940560 2 896 -353940564 2 896 -353940568 2 896 -353940572 2 896 -353940576 2 896 -353940580 2 896 -353940584 2 896 -353940588 2 896 -353940592 2 896 -353940596 2 896 -353940600 2 896 -353940604 2 896 -353940608 2 896 -353940612 2 896 -353940616 2 896 -353940620 2 896 -353940624 2 896 -353940628 2 896 -353940632 2 896 -353940636 2 896 -353940640 2 896 -353940644 2 896 -353940648 2 896 -353940652 2 896 -353940656 2 896 -353940660 2 896 -353940664 2 896 -353940668 2 896 -353940672 2 896 -353940676 2 896 -353940680 2 896 -353940684 2 896 -353940688 2 896 -353940692 2 896 -353940696 2 896 -353940700 2 896 -353940704 2 896 -353940708 2 896 -353940712 2 896 -353940716 2 896 -353940720 2 896 -353940724 2 896 -353940728 2 896 -353940732 2 896 -353940736 2 896 -353940740 2 896 -353940744 2 896 -353940748 2 896 -353940752 2 896 -353940756 2 896 -353940760 2 896 -353940764 2 896 -353940768 2 896 -353940772 2 896 -353940776 2 896 -353940780 2 896 -353940784 2 896 -353940788 2 896 -353940792 2 896 -353940796 2 896 -353940800 2 896 -353940804 2 896 -353940808 2 896 -353940812 2 896 -353940816 2 896 -353940820 2 896 -353940824 2 896 -353940828 2 896 -353940832 2 896 -353940836 2 896 -353940840 2 896 -353940844 2 896 -353940848 2 896 -353940852 2 896 -353940856 2 896 -353940860 2 896 -353940864 2 896 -353940868 2 896 -353940872 2 896 -353940876 2 896 -353940880 2 896 -353940884 2 896 -353940888 2 896 -353940892 2 896 -353940896 2 896 -353940900 2 896 -353940904 2 896 -353940908 2 896 -353940912 2 896 -353940916 2 896 -353940920 2 896 -353940924 2 896 -353940928 2 896 -353940932 2 896 -353940936 2 896 -353940940 2 896 -353940944 2 896 -353940948 2 896 -353940952 2 896 -353940956 2 896 -353940960 2 896 -353940964 2 896 -353940968 2 896 -353940972 2 896 -353940976 2 896 -353940980 2 896 -353940984 2 896 -353940988 2 896 -353940992 2 896 -353944580 2 896 -353944584 2 896 -353944588 2 896 -353944592 2 896 -353944596 2 896 -353944600 2 896 -353944604 2 896 -353944608 2 896 -353944612 2 896 -353944616 2 896 -353944620 2 896 -353944624 2 896 -353944628 2 896 -353944632 2 896 -353944636 2 896 -353944640 2 896 -353944644 2 896 -353944648 2 896 -353944652 2 896 -353944656 2 896 -353944660 2 896 -353944664 2 896 -353944668 2 896 -353944672 2 896 -353944676 2 896 -353944680 2 896 -353944684 2 896 -353944688 2 896 -353944692 2 896 -353944696 2 896 -353944700 2 896 -353944704 2 896 -353944708 2 896 -353944712 2 896 -353944716 2 896 -353944720 2 896 -353944724 2 896 -353944728 2 896 -353944732 2 896 -353944736 2 896 -353944740 2 896 -353944744 2 896 -353944748 2 896 -353944752 2 896 -353944756 2 896 -353944760 2 896 -353944764 2 896 -353944768 2 896 -353944772 2 896 -353944776 2 896 -353944780 2 896 -353944784 2 896 -353944788 2 896 -353944792 2 896 -353944796 2 896 -353944800 2 896 -353944804 2 896 -353944808 2 896 -353944812 2 896 -353944816 2 896 -353944820 2 896 -353944824 2 896 -353944828 2 896 -353944832 2 896 -353944836 2 896 -353944840 2 896 -353944844 2 896 -353944848 2 896 -353944852 2 896 -353944856 2 896 -353944860 2 896 -353944864 2 896 -353944868 2 896 -353944872 2 896 -353944876 2 896 -353944880 2 896 -353944884 2 896 -353944888 2 896 -353944892 2 896 -353944896 2 896 -353944900 2 896 -353944904 2 896 -353944908 2 896 -353944912 2 896 -353944916 2 896 -353944920 2 896 -353944924 2 896 -353944928 2 896 -353944932 2 896 -353944936 2 896 -353944940 2 896 -353944944 2 896 -353944948 2 896 -353944952 2 896 -353944956 2 896 -353944960 2 896 -353944964 2 896 -353944968 2 896 -353944972 2 896 -353944976 2 896 -353944980 2 896 -353944984 2 896 -353944988 2 896 -353944992 2 896 -353944996 2 896 -353945000 2 896 -353945004 2 896 -353945008 2 896 -353945012 2 896 -353945016 2 896 -353945020 2 896 -353945024 2 896 -353945028 2 896 -353945032 2 896 -353945036 2 896 -353945040 2 896 -353945044 2 896 -353945048 2 896 -353945052 2 896 -353945056 2 896 -353945060 2 896 -353945064 2 896 -353945068 2 896 -353945072 2 896 -353945076 2 896 -353945080 2 896 -353945084 2 896 -353945088 2 896 -353945092 2 896 -353945096 2 896 -353945100 2 896 -353945104 2 896 -353945108 2 896 -353945112 2 896 -353945116 2 896 -353945120 2 896 -353948676 2 896 -353948680 2 896 -353948684 2 896 -353948688 2 896 -353948692 2 896 -353948696 2 896 -353948700 2 896 -353948704 2 896 -353948708 2 896 -353948712 2 896 -353948716 2 896 -353948720 2 896 -353948724 2 896 -353948728 2 896 -353948732 2 896 -353948736 2 896 -353948740 2 896 -353948744 2 896 -353948748 2 896 -353948752 2 896 -353948756 2 896 -353948760 2 896 -353948764 2 896 -353948768 2 896 -353948772 2 896 -353948776 2 896 -353948780 2 896 -353948784 2 896 -353948788 2 896 -353948792 2 896 -353948796 2 896 -353948800 2 896 -353948804 2 896 -353948808 2 896 -353948812 2 896 -353948816 2 896 -353948820 2 896 -353948824 2 896 -353948828 2 896 -353948832 2 896 -353948836 2 896 -353948840 2 896 -353948844 2 896 -353948848 2 896 -353948852 2 896 -353948856 2 896 -353948860 2 896 -353948864 2 896 -353948868 2 896 -353948872 2 896 -353948876 2 896 -353948880 2 896 -353948884 2 896 -353948888 2 896 -353948892 2 896 -353948896 2 896 -353948900 2 896 -353948904 2 896 -353948908 2 896 -353948912 2 896 -353948916 2 896 -353948920 2 896 -353948924 2 896 -353948928 2 896 -353948932 2 896 -353948936 2 896 -353948940 2 896 -353948944 2 896 -353948948 2 896 -353948952 2 896 -353948956 2 896 -353948960 2 896 -353948964 2 896 -353948968 2 896 -353948972 2 896 -353948976 2 896 -353948980 2 896 -353948984 2 896 -353948988 2 896 -353948992 2 896 -353948996 2 896 -353949000 2 896 -353949004 2 896 -353949008 2 896 -353949012 2 896 -353949016 2 896 -353949020 2 896 -353949024 2 896 -353949028 2 896 -353949032 2 896 -353949036 2 896 -353949040 2 896 -353949044 2 896 -353949048 2 896 -353949052 2 896 -353949056 2 896 -353949060 2 896 -353949064 2 896 -353949068 2 896 -353949072 2 896 -353949076 2 896 -353949080 2 896 -353949084 2 896 -353949088 2 896 -353949092 2 896 -353949096 2 896 -353949100 2 896 -353949104 2 896 -353949108 2 896 -353949112 2 896 -353949116 2 896 -353949120 2 896 -353949124 2 896 -353949128 2 896 -353949132 2 896 -353949136 2 896 -353949140 2 896 -353949144 2 896 -353949148 2 896 -353949152 2 896 -353949156 2 896 -353949160 2 896 -353949164 2 896 -353949168 2 896 -353949172 2 896 -353949176 2 896 -353949180 2 896 -353949184 2 896 -353949188 2 896 -353949192 2 896 -353949196 2 896 -353949200 2 896 -353949204 2 896 -353949208 2 896 -353949212 2 896 -353949216 2 896 -353949220 2 896 -353949224 2 896 -353949228 2 896 -353949232 2 896 -353949236 2 896 -353949240 2 896 -353949244 2 896 -353949248 2 896 -353952772 2 896 -353952776 2 896 -353952780 2 896 -353952784 2 896 -353952788 2 896 -353952792 2 896 -353952796 2 896 -353952800 2 896 -353952804 2 896 -353952808 2 896 -353952812 2 896 -353952816 2 896 -353952820 2 896 -353952824 2 896 -353952828 2 896 -353952832 2 896 -353952836 2 896 -353952840 2 896 -353952844 2 896 -353952848 2 896 -353952852 2 896 -353952856 2 896 -353952860 2 896 -353952864 2 896 -353952868 2 896 -353952872 2 896 -353952876 2 896 -353952880 2 896 -353952884 2 896 -353952888 2 896 -353952892 2 896 -353952896 2 896 -353952900 2 896 -353952904 2 896 -353952908 2 896 -353952912 2 896 -353952916 2 896 -353952920 2 896 -353952924 2 896 -353952928 2 896 -353952932 2 896 -353952936 2 896 -353952940 2 896 -353952944 2 896 -353952948 2 896 -353952952 2 896 -353952956 2 896 -353952960 2 896 -353952964 2 896 -353952968 2 896 -353952972 2 896 -353952976 2 896 -353952980 2 896 -353952984 2 896 -353952988 2 896 -353952992 2 896 -353952996 2 896 -353953000 2 896 -353953004 2 896 -353953008 2 896 -353953012 2 896 -353953016 2 896 -353953020 2 896 -353953024 2 896 -353953028 2 896 -353953032 2 896 -353953036 2 896 -353953040 2 896 -353953044 2 896 -353953048 2 896 -353953052 2 896 -353953056 2 896 -353953060 2 896 -353953064 2 896 -353953068 2 896 -353953072 2 896 -353953076 2 896 -353953080 2 896 -353953084 2 896 -353953088 2 896 -353953092 2 896 -353953096 2 896 -353953100 2 896 -353953104 2 896 -353953108 2 896 -353953112 2 896 -353953116 2 896 -353953120 2 896 -353953124 2 896 -353953128 2 896 -353953132 2 896 -353953136 2 896 -353953140 2 896 -353953144 2 896 -353953148 2 896 -353953152 2 896 -353953156 2 896 -353953160 2 896 -353953164 2 896 -353953168 2 896 -353953172 2 896 -353953176 2 896 -353953180 2 896 -353953184 2 896 -353953188 2 896 -353953192 2 896 -353953196 2 896 -353953200 2 896 -353953204 2 896 -353953208 2 896 -353953212 2 896 -353953216 2 896 -353953220 2 896 -353953224 2 896 -353953228 2 896 -353953232 2 896 -353953236 2 896 -353953240 2 896 -353953244 2 896 -353953248 2 896 -353953252 2 896 -353953256 2 896 -353953260 2 896 -353953264 2 896 -353953268 2 896 -353953272 2 896 -353953276 2 896 -353953280 2 896 -353953284 2 896 -353953288 2 896 -353953292 2 896 -353953296 2 896 -353953300 2 896 -353953304 2 896 -353953308 2 896 -353953312 2 896 -353953316 2 896 -353953320 2 896 -353953324 2 896 -353953328 2 896 -353953332 2 896 -353953336 2 896 -353953340 2 896 -353953344 2 896 -353953348 2 896 -353953352 2 896 -353953356 2 896 -353953360 2 896 -353953364 2 896 -353953368 2 896 -353953372 2 896 -353953376 2 896 -353953380 2 896 -353953384 2 896 -353953388 2 896 -353953392 2 896 -353953396 2 896 -353953400 2 896 -353953404 2 896 -353953408 2 896 -354161668 32 896 -354161672 2 896 -354161676 32 896 -354161680 2 896 -354161684 32 896 -354161688 2 896 -354161692 32 896 -354161696 2 896 -354161700 32 896 -354161704 2 896 -354161708 32 896 -354161712 2 896 -354161716 32 896 -354161720 2 896 -354161724 32 896 -354161728 2 896 -354161732 32 896 -354161736 2 896 -354161740 32 896 -354161744 2 896 -354161748 32 896 -354161752 2 896 -354161756 32 896 -354161760 2 896 -354161764 32 896 -354161768 2 896 -354161772 32 896 -354161776 2 896 -354161780 32 896 -354161784 2 896 -354161788 32 896 -354161792 2 896 -354161796 32 896 -354161800 2 896 -354161804 32 896 -354161808 2 896 -354161812 32 896 -354161816 2 896 -354161820 32 896 -354161824 2 896 -354161828 32 896 -354161832 2 896 -354161836 32 896 -354161840 2 896 -354161844 32 896 -354161848 2 896 -354161852 32 896 -354161856 2 896 -354161860 32 896 -354161864 2 896 -354161868 32 896 -354161872 2 896 -354161876 32 896 -354161880 2 896 -354161884 32 896 -354161888 2 896 -354165764 32 896 -354165768 2 896 -354165772 32 896 -354165776 2 896 -354165780 32 896 -354165784 2 896 -354165788 32 896 -354165792 2 896 -354165796 32 896 -354165800 2 896 -354165804 32 896 -354165808 2 896 -354165812 32 896 -354165816 2 896 -354165820 32 896 -354165824 2 896 -354165828 32 896 -354165832 2 896 -354165836 32 896 -354165840 2 896 -354165844 32 896 -354165848 2 896 -354165852 32 896 -354165856 2 896 -354165860 32 896 -354165864 2 896 -354165868 32 896 -354165872 2 896 -354165876 32 896 -354165880 2 896 -354165884 32 896 -354165888 2 896 -354165892 32 896 -354165896 2 896 -354165900 32 896 -354165904 2 896 -354165908 32 896 -354165912 2 896 -354165916 32 896 -354165920 2 896 -354165924 32 896 -354165928 2 896 -354165932 32 896 -354165936 2 896 -354165940 32 896 -354165944 2 896 -354165948 32 896 -354165952 2 896 -354165956 32 896 -354165960 2 896 -354165964 32 896 -354165968 2 896 -354165972 32 896 -354165976 2 896 -354165980 32 896 -354165984 2 896 -354165988 32 896 -354165992 2 896 -354165996 32 896 -354166000 2 896 -354166004 32 896 -354166008 2 896 -354166012 32 896 -354166016 2 896 -354169860 32 896 -354169864 2 896 -354169868 32 896 -354169872 2 896 -354169876 32 896 -354169880 2 896 -354169884 32 896 -354169888 2 896 -354169892 32 896 -354169896 2 896 -354169900 32 896 -354169904 2 896 -354169908 32 896 -354169912 2 896 -354169916 32 896 -354169920 2 896 -354169924 32 896 -354169928 2 896 -354169932 32 896 -354169936 2 896 -354169940 32 896 -354169944 2 896 -354169948 32 896 -354169952 2 896 -354169956 32 896 -354169960 2 896 -354169964 32 896 -354169968 2 896 -354169972 32 896 -354169976 2 896 -354169980 32 896 -354169984 2 896 -354169988 32 896 -354169992 2 896 -354169996 32 896 -354170000 2 896 -354170004 32 896 -354170008 2 896 -354170012 32 896 -354170016 2 896 -354170020 32 896 -354170024 2 896 -354170028 32 896 -354170032 2 896 -354170036 32 896 -354170040 2 896 -354170044 32 896 -354170048 2 896 -354170052 32 896 -354170056 2 896 -354170060 32 896 -354170064 2 896 -354170068 32 896 -354170072 2 896 -354170076 32 896 -354170080 2 896 -354170084 32 896 -354170088 2 896 -354170092 32 896 -354170096 2 896 -354170100 32 896 -354170104 2 896 -354170108 32 896 -354170112 2 896 -354170116 32 896 -354170120 2 896 -354170124 32 896 -354170128 2 896 -354170132 32 896 -354170136 2 896 -354170140 32 896 -354170144 2 896 -354173956 32 896 -354173960 2 896 -354173964 32 896 -354173968 2 896 -354173972 32 896 -354173976 2 896 -354173980 32 896 -354173984 2 896 -354173988 32 896 -354173992 2 896 -354173996 32 896 -354174000 2 896 -354174004 32 896 -354174008 2 896 -354174012 32 896 -354174016 2 896 -354174020 32 896 -354174024 2 896 -354174028 32 896 -354174032 2 896 -354174036 32 896 -354174040 2 896 -354174044 32 896 -354174048 2 896 -354174052 32 896 -354174056 2 896 -354174060 32 896 -354174064 2 896 -354174068 32 896 -354174072 2 896 -354174076 32 896 -354174080 2 896 -354174084 32 896 -354174088 2 896 -354174092 32 896 -354174096 2 896 -354174100 32 896 -354174104 2 896 -354174108 32 896 -354174112 2 896 -354174116 32 896 -354174120 2 896 -354174124 32 896 -354174128 2 896 -354174132 32 896 -354174136 2 896 -354174140 32 896 -354174144 2 896 -354174148 32 896 -354174152 2 896 -354174156 32 896 -354174160 2 896 -354174164 32 896 -354174168 2 896 -354174172 32 896 -354174176 2 896 -354174180 32 896 -354174184 2 896 -354174188 32 896 -354174192 2 896 -354174196 32 896 -354174200 2 896 -354174204 32 896 -354174208 2 896 -354174212 32 896 -354174216 2 896 -354174220 32 896 -354174224 2 896 -354174228 32 896 -354174232 2 896 -354174236 32 896 -354174240 2 896 -354178052 32 896 -354178056 2 896 -354178060 32 896 -354178064 2 896 -354178068 32 896 -354178072 2 896 -354178076 32 896 -354178080 2 896 -354178084 32 896 -354178088 2 896 -354178092 32 896 -354178096 2 896 -354178100 32 896 -354178104 2 896 -354178108 32 896 -354178112 2 896 -354178116 32 896 -354178120 2 896 -354178124 32 896 -354178128 2 896 -354178132 32 896 -354178136 2 896 -354178140 32 896 -354178144 2 896 -354178148 32 896 -354178152 2 896 -354178156 32 896 -354178160 2 896 -354178164 32 896 -354178168 2 896 -354178172 32 896 -354178176 2 896 -354178180 32 896 -354178184 2 896 -354178188 32 896 -354178192 2 896 -354178196 32 896 -354178200 2 896 -354178204 32 896 -354178208 2 896 -354178212 32 896 -354178216 2 896 -354178220 32 896 -354178224 2 896 -354178228 32 896 -354178232 2 896 -354178236 32 896 -354178240 2 896 -354178244 32 896 -354178248 2 896 -354178252 32 896 -354178256 2 896 -354178260 32 896 -354178264 2 896 -354178268 32 896 -354178272 2 896 -354178276 32 896 -354178280 2 896 -354178284 32 896 -354178288 2 896 -354178292 32 896 -354178296 2 896 -354178300 32 896 -354178304 2 896 -354178308 32 896 -354178312 2 896 -354178316 32 896 -354178320 2 896 -354178324 32 896 -354178328 2 896 -354178332 32 896 -354178336 2 896 -354178340 32 896 -354178344 2 896 -354178348 32 896 -354178352 2 896 -354178356 32 896 -354178360 2 896 -354178364 32 896 -354178368 2 896 -354182148 32 896 -354182152 2 896 -354182156 32 896 -354182160 2 896 -354182164 32 896 -354182168 2 896 -354182172 32 896 -354182176 2 896 -354182180 32 896 -354182184 2 896 -354182188 32 896 -354182192 2 896 -354182196 32 896 -354182200 2 896 -354182204 32 896 -354182208 2 896 -354182212 32 896 -354182216 2 896 -354182220 32 896 -354182224 2 896 -354182228 32 896 -354182232 2 896 -354182236 32 896 -354182240 2 896 -354182244 32 896 -354182248 2 896 -354182252 32 896 -354182256 2 896 -354182260 32 896 -354182264 2 896 -354182268 32 896 -354182272 2 896 -354182276 32 896 -354182280 2 896 -354182284 32 896 -354182288 2 896 -354182292 32 896 -354182296 2 896 -354182300 32 896 -354182304 2 896 -354182308 32 896 -354182312 2 896 -354182316 32 896 -354182320 2 896 -354182324 32 896 -354182328 2 896 -354182332 32 896 -354182336 2 896 -354182340 32 896 -354182344 2 896 -354182348 32 896 -354182352 2 896 -354182356 32 896 -354182360 2 896 -354182364 32 896 -354182368 2 896 -354182372 32 896 -354182376 2 896 -354182380 32 896 -354182384 2 896 -354182388 32 896 -354182392 2 896 -354182396 32 896 -354182400 2 896 -354182404 32 896 -354182408 2 896 -354182412 32 896 -354182416 2 896 -354182420 32 896 -354182424 2 896 -354182428 32 896 -354182432 2 896 -354182436 32 896 -354182440 2 896 -354182444 32 896 -354182448 2 896 -354182452 32 896 -354182456 2 896 -354182460 32 896 -354182464 2 896 -354186244 2 896 -354186248 2 896 -354186252 2 896 -354186256 2 896 -354186260 2 896 -354186264 2 896 -354186268 2 896 -354186272 2 896 -354186276 2 896 -354186280 2 896 -354186284 2 896 -354186288 2 896 -354186292 2 896 -354186296 2 896 -354186300 2 896 -354186304 2 896 -354186308 2 896 -354186312 2 896 -354186316 2 896 -354186320 2 896 -354186324 2 896 -354186328 2 896 -354186332 2 896 -354186336 2 896 -354186340 2 896 -354186344 2 896 -354186348 2 896 -354186352 2 896 -354186356 2 896 -354186360 2 896 -354186364 2 896 -354186368 2 896 -354186372 2 896 -354186376 2 896 -354186380 2 896 -354186384 2 896 -354186388 2 896 -354186392 2 896 -354186396 2 896 -354186400 2 896 -354186404 2 896 -354186408 2 896 -354186412 2 896 -354186416 2 896 -354186420 2 896 -354186424 2 896 -354186428 2 896 -354186432 2 896 -354186436 2 896 -354186440 2 896 -354186444 2 896 -354186448 2 896 -354186452 2 896 -354186456 2 896 -354186460 2 896 -354186464 2 896 -354186468 2 896 -354186472 2 896 -354186476 2 896 -354186480 2 896 -354186484 2 896 -354186488 2 896 -354186492 2 896 -354186496 2 896 -354186500 2 896 -354186504 2 896 -354186508 2 896 -354186512 2 896 -354186516 2 896 -354186520 2 896 -354186524 2 896 -354186528 2 896 -354186532 2 896 -354186536 2 896 -354186540 2 896 -354186544 2 896 -354186548 2 896 -354186552 2 896 -354186556 2 896 -354186560 2 896 -354186564 2 896 -354186568 2 896 -354186572 2 896 -354186576 2 896 -354186580 2 896 -354186584 2 896 -354186588 2 896 -354186592 2 896 -354186596 2 896 -354186600 2 896 -354186604 2 896 -354186608 2 896 -354186612 2 896 -354186616 2 896 -354186620 2 896 -354186624 2 896 -354190340 2 896 -354190344 2 896 -354190348 2 896 -354190352 2 896 -354190356 2 896 -354190360 2 896 -354190364 2 896 -354190368 2 896 -354190372 2 896 -354190376 2 896 -354190380 2 896 -354190384 2 896 -354190388 2 896 -354190392 2 896 -354190396 2 896 -354190400 2 896 -354190404 2 896 -354190408 2 896 -354190412 2 896 -354190416 2 896 -354190420 2 896 -354190424 2 896 -354190428 2 896 -354190432 2 896 -354190436 2 896 -354190440 2 896 -354190444 2 896 -354190448 2 896 -354190452 2 896 -354190456 2 896 -354190460 2 896 -354190464 2 896 -354190468 2 896 -354190472 2 896 -354190476 2 896 -354190480 2 896 -354190484 2 896 -354190488 2 896 -354190492 2 896 -354190496 2 896 -354190500 2 896 -354190504 2 896 -354190508 2 896 -354190512 2 896 -354190516 2 896 -354190520 2 896 -354190524 2 896 -354190528 2 896 -354190532 2 896 -354190536 2 896 -354190540 2 896 -354190544 2 896 -354190548 2 896 -354190552 2 896 -354190556 2 896 -354190560 2 896 -354190564 2 896 -354190568 2 896 -354190572 2 896 -354190576 2 896 -354190580 2 896 -354190584 2 896 -354190588 2 896 -354190592 2 896 -354190596 2 896 -354190600 2 896 -354190604 2 896 -354190608 2 896 -354190612 2 896 -354190616 2 896 -354190620 2 896 -354190624 2 896 -354190628 2 896 -354190632 2 896 -354190636 2 896 -354190640 2 896 -354190644 2 896 -354190648 2 896 -354190652 2 896 -354190656 2 896 -354190660 2 896 -354190664 2 896 -354190668 2 896 -354190672 2 896 -354190676 2 896 -354190680 2 896 -354190684 2 896 -354190688 2 896 -354190692 2 896 -354190696 2 896 -354190700 2 896 -354190704 2 896 -354190708 2 896 -354190712 2 896 -354190716 2 896 -354190720 2 896 -354190724 2 896 -354190728 2 896 -354190732 2 896 -354190736 2 896 -354190740 2 896 -354190744 2 896 -354190748 2 896 -354190752 2 896 -354190756 2 896 -354190760 2 896 -354190764 2 896 -354190768 2 896 -354190772 2 896 -354190776 2 896 -354190780 2 896 -354190784 2 896 -354194436 2 896 -354194440 2 896 -354194444 2 896 -354194448 2 896 -354194452 2 896 -354194456 2 896 -354194460 2 896 -354194464 2 896 -354194468 2 896 -354194472 2 896 -354194476 2 896 -354194480 2 896 -354194484 2 896 -354194488 2 896 -354194492 2 896 -354194496 2 896 -354194500 2 896 -354194504 2 896 -354194508 2 896 -354194512 2 896 -354194516 2 896 -354194520 2 896 -354194524 2 896 -354194528 2 896 -354194532 2 896 -354194536 2 896 -354194540 2 896 -354194544 2 896 -354194548 2 896 -354194552 2 896 -354194556 2 896 -354194560 2 896 -354194564 2 896 -354194568 2 896 -354194572 2 896 -354194576 2 896 -354194580 2 896 -354194584 2 896 -354194588 2 896 -354194592 2 896 -354194596 2 896 -354194600 2 896 -354194604 2 896 -354194608 2 896 -354194612 2 896 -354194616 2 896 -354194620 2 896 -354194624 2 896 -354194628 2 896 -354194632 2 896 -354194636 2 896 -354194640 2 896 -354194644 2 896 -354194648 2 896 -354194652 2 896 -354194656 2 896 -354194660 2 896 -354194664 2 896 -354194668 2 896 -354194672 2 896 -354194676 2 896 -354194680 2 896 -354194684 2 896 -354194688 2 896 -354194692 2 896 -354194696 2 896 -354194700 2 896 -354194704 2 896 -354194708 2 896 -354194712 2 896 -354194716 2 896 -354194720 2 896 -354194724 2 896 -354194728 2 896 -354194732 2 896 -354194736 2 896 -354194740 2 896 -354194744 2 896 -354194748 2 896 -354194752 2 896 -354194756 2 896 -354194760 2 896 -354194764 2 896 -354194768 2 896 -354194772 2 896 -354194776 2 896 -354194780 2 896 -354194784 2 896 -354194788 2 896 -354194792 2 896 -354194796 2 896 -354194800 2 896 -354194804 2 896 -354194808 2 896 -354194812 2 896 -354194816 2 896 -354194820 2 896 -354194824 2 896 -354194828 2 896 -354194832 2 896 -354194836 2 896 -354194840 2 896 -354194844 2 896 -354194848 2 896 -354194852 2 896 -354194856 2 896 -354194860 2 896 -354194864 2 896 -354194868 2 896 -354194872 2 896 -354194876 2 896 -354194880 2 896 -354194884 2 896 -354194888 2 896 -354194892 2 896 -354194896 2 896 -354194900 2 896 -354194904 2 896 -354194908 2 896 -354194912 2 896 -354194916 2 896 -354194920 2 896 -354194924 2 896 -354194928 2 896 -354194932 2 896 -354194936 2 896 -354194940 2 896 -354194944 2 896 -354198532 2 896 -354198536 2 896 -354198540 2 896 -354198544 2 896 -354198548 2 896 -354198552 2 896 -354198556 2 896 -354198560 2 896 -354198564 2 896 -354198568 2 896 -354198572 2 896 -354198576 2 896 -354198580 2 896 -354198584 2 896 -354198588 2 896 -354198592 2 896 -354198596 2 896 -354198600 2 896 -354198604 2 896 -354198608 2 896 -354198612 2 896 -354198616 2 896 -354198620 2 896 -354198624 2 896 -354198628 2 896 -354198632 2 896 -354198636 2 896 -354198640 2 896 -354198644 2 896 -354198648 2 896 -354198652 2 896 -354198656 2 896 -354198660 2 896 -354198664 2 896 -354198668 2 896 -354198672 2 896 -354198676 2 896 -354198680 2 896 -354198684 2 896 -354198688 2 896 -354198692 2 896 -354198696 2 896 -354198700 2 896 -354198704 2 896 -354198708 2 896 -354198712 2 896 -354198716 2 896 -354198720 2 896 -354198724 2 896 -354198728 2 896 -354198732 2 896 -354198736 2 896 -354198740 2 896 -354198744 2 896 -354198748 2 896 -354198752 2 896 -354198756 2 896 -354198760 2 896 -354198764 2 896 -354198768 2 896 -354198772 2 896 -354198776 2 896 -354198780 2 896 -354198784 2 896 -354198788 2 896 -354198792 2 896 -354198796 2 896 -354198800 2 896 -354198804 2 896 -354198808 2 896 -354198812 2 896 -354198816 2 896 -354198820 2 896 -354198824 2 896 -354198828 2 896 -354198832 2 896 -354198836 2 896 -354198840 2 896 -354198844 2 896 -354198848 2 896 -354198852 2 896 -354198856 2 896 -354198860 2 896 -354198864 2 896 -354198868 2 896 -354198872 2 896 -354198876 2 896 -354198880 2 896 -354198884 2 896 -354198888 2 896 -354198892 2 896 -354198896 2 896 -354198900 2 896 -354198904 2 896 -354198908 2 896 -354198912 2 896 -354198916 2 896 -354198920 2 896 -354198924 2 896 -354198928 2 896 -354198932 2 896 -354198936 2 896 -354198940 2 896 -354198944 2 896 -354198948 2 896 -354198952 2 896 -354198956 2 896 -354198960 2 896 -354198964 2 896 -354198968 2 896 -354198972 2 896 -354198976 2 896 -354198980 2 896 -354198984 2 896 -354198988 2 896 -354198992 2 896 -354198996 2 896 -354199000 2 896 -354199004 2 896 -354199008 2 896 -354199012 2 896 -354199016 2 896 -354199020 2 896 -354199024 2 896 -354199028 2 896 -354199032 2 896 -354199036 2 896 -354199040 2 896 -354199044 2 896 -354199048 2 896 -354199052 2 896 -354199056 2 896 -354199060 2 896 -354199064 2 896 -354199068 2 896 -354199072 2 896 -354202628 2 896 -354202632 2 896 -354202636 2 896 -354202640 2 896 -354202644 2 896 -354202648 2 896 -354202652 2 896 -354202656 2 896 -354202660 2 896 -354202664 2 896 -354202668 2 896 -354202672 2 896 -354202676 2 896 -354202680 2 896 -354202684 2 896 -354202688 2 896 -354202692 2 896 -354202696 2 896 -354202700 2 896 -354202704 2 896 -354202708 2 896 -354202712 2 896 -354202716 2 896 -354202720 2 896 -354202724 2 896 -354202728 2 896 -354202732 2 896 -354202736 2 896 -354202740 2 896 -354202744 2 896 -354202748 2 896 -354202752 2 896 -354202756 2 896 -354202760 2 896 -354202764 2 896 -354202768 2 896 -354202772 2 896 -354202776 2 896 -354202780 2 896 -354202784 2 896 -354202788 2 896 -354202792 2 896 -354202796 2 896 -354202800 2 896 -354202804 2 896 -354202808 2 896 -354202812 2 896 -354202816 2 896 -354202820 2 896 -354202824 2 896 -354202828 2 896 -354202832 2 896 -354202836 2 896 -354202840 2 896 -354202844 2 896 -354202848 2 896 -354202852 2 896 -354202856 2 896 -354202860 2 896 -354202864 2 896 -354202868 2 896 -354202872 2 896 -354202876 2 896 -354202880 2 896 -354202884 2 896 -354202888 2 896 -354202892 2 896 -354202896 2 896 -354202900 2 896 -354202904 2 896 -354202908 2 896 -354202912 2 896 -354202916 2 896 -354202920 2 896 -354202924 2 896 -354202928 2 896 -354202932 2 896 -354202936 2 896 -354202940 2 896 -354202944 2 896 -354202948 2 896 -354202952 2 896 -354202956 2 896 -354202960 2 896 -354202964 2 896 -354202968 2 896 -354202972 2 896 -354202976 2 896 -354202980 2 896 -354202984 2 896 -354202988 2 896 -354202992 2 896 -354202996 2 896 -354203000 2 896 -354203004 2 896 -354203008 2 896 -354203012 2 896 -354203016 2 896 -354203020 2 896 -354203024 2 896 -354203028 2 896 -354203032 2 896 -354203036 2 896 -354203040 2 896 -354203044 2 896 -354203048 2 896 -354203052 2 896 -354203056 2 896 -354203060 2 896 -354203064 2 896 -354203068 2 896 -354203072 2 896 -354203076 2 896 -354203080 2 896 -354203084 2 896 -354203088 2 896 -354203092 2 896 -354203096 2 896 -354203100 2 896 -354203104 2 896 -354203108 2 896 -354203112 2 896 -354203116 2 896 -354203120 2 896 -354203124 2 896 -354203128 2 896 -354203132 2 896 -354203136 2 896 -354203140 2 896 -354203144 2 896 -354203148 2 896 -354203152 2 896 -354203156 2 896 -354203160 2 896 -354203164 2 896 -354203168 2 896 -354203172 2 896 -354203176 2 896 -354203180 2 896 -354203184 2 896 -354203188 2 896 -354203192 2 896 -354203196 2 896 -354203200 2 896 -354206724 2 896 -354206728 2 896 -354206732 2 896 -354206736 2 896 -354206740 2 896 -354206744 2 896 -354206748 2 896 -354206752 2 896 -354206756 2 896 -354206760 2 896 -354206764 2 896 -354206768 2 896 -354206772 2 896 -354206776 2 896 -354206780 2 896 -354206784 2 896 -354206788 2 896 -354206792 2 896 -354206796 2 896 -354206800 2 896 -354206804 2 896 -354206808 2 896 -354206812 2 896 -354206816 2 896 -354206820 2 896 -354206824 2 896 -354206828 2 896 -354206832 2 896 -354206836 2 896 -354206840 2 896 -354206844 2 896 -354206848 2 896 -354206852 2 896 -354206856 2 896 -354206860 2 896 -354206864 2 896 -354206868 2 896 -354206872 2 896 -354206876 2 896 -354206880 2 896 -354206884 2 896 -354206888 2 896 -354206892 2 896 -354206896 2 896 -354206900 2 896 -354206904 2 896 -354206908 2 896 -354206912 2 896 -354206916 2 896 -354206920 2 896 -354206924 2 896 -354206928 2 896 -354206932 2 896 -354206936 2 896 -354206940 2 896 -354206944 2 896 -354206948 2 896 -354206952 2 896 -354206956 2 896 -354206960 2 896 -354206964 2 896 -354206968 2 896 -354206972 2 896 -354206976 2 896 -354206980 2 896 -354206984 2 896 -354206988 2 896 -354206992 2 896 -354206996 2 896 -354207000 2 896 -354207004 2 896 -354207008 2 896 -354207012 2 896 -354207016 2 896 -354207020 2 896 -354207024 2 896 -354207028 2 896 -354207032 2 896 -354207036 2 896 -354207040 2 896 -354207044 2 896 -354207048 2 896 -354207052 2 896 -354207056 2 896 -354207060 2 896 -354207064 2 896 -354207068 2 896 -354207072 2 896 -354207076 2 896 -354207080 2 896 -354207084 2 896 -354207088 2 896 -354207092 2 896 -354207096 2 896 -354207100 2 896 -354207104 2 896 -354207108 2 896 -354207112 2 896 -354207116 2 896 -354207120 2 896 -354207124 2 896 -354207128 2 896 -354207132 2 896 -354207136 2 896 -354207140 2 896 -354207144 2 896 -354207148 2 896 -354207152 2 896 -354207156 2 896 -354207160 2 896 -354207164 2 896 -354207168 2 896 -354207172 2 896 -354207176 2 896 -354207180 2 896 -354207184 2 896 -354207188 2 896 -354207192 2 896 -354207196 2 896 -354207200 2 896 -354207204 2 896 -354207208 2 896 -354207212 2 896 -354207216 2 896 -354207220 2 896 -354207224 2 896 -354207228 2 896 -354207232 2 896 -354207236 2 896 -354207240 2 896 -354207244 2 896 -354207248 2 896 -354207252 2 896 -354207256 2 896 -354207260 2 896 -354207264 2 896 -354207268 2 896 -354207272 2 896 -354207276 2 896 -354207280 2 896 -354207284 2 896 -354207288 2 896 -354207292 2 896 -354207296 2 896 -354207300 2 896 -354207304 2 896 -354207308 2 896 -354207312 2 896 -354207316 2 896 -354207320 2 896 -354207324 2 896 -354207328 2 896 -354207332 2 896 -354207336 2 896 -354207340 2 896 -354207344 2 896 -354207348 2 896 -354207352 2 896 -354207356 2 896 -354207360 2 896 -354423812 32 896 -354423816 2 896 -354423820 32 896 -354423824 2 896 -354423828 32 896 -354423832 2 896 -354423836 32 896 -354423840 2 896 -354423844 32 896 -354423848 2 896 -354423852 32 896 -354423856 2 896 -354423860 32 896 -354423864 2 896 -354423868 32 896 -354423872 2 896 -354423876 32 896 -354423880 2 896 -354423884 32 896 -354423888 2 896 -354423892 32 896 -354423896 2 896 -354423900 32 896 -354423904 2 896 -354423908 32 896 -354423912 2 896 -354423916 32 896 -354423920 2 896 -354423924 32 896 -354423928 2 896 -354423932 32 896 -354423936 2 896 -354423940 32 896 -354423944 2 896 -354423948 32 896 -354423952 2 896 -354423956 32 896 -354423960 2 896 -354423964 32 896 -354423968 2 896 -354423972 32 896 -354423976 2 896 -354423980 32 896 -354423984 2 896 -354423988 32 896 -354423992 2 896 -354423996 32 896 -354424000 2 896 -354424004 32 896 -354424008 2 896 -354424012 32 896 -354424016 2 896 -354424020 32 896 -354424024 2 896 -354424028 32 896 -354424032 2 896 -354424036 32 896 -354424040 2 896 -354424044 32 896 -354424048 2 896 -354424052 32 896 -354424056 2 896 -354424060 32 896 -354424064 2 896 -354427908 32 896 -354427912 2 896 -354427916 32 896 -354427920 2 896 -354427924 32 896 -354427928 2 896 -354427932 32 896 -354427936 2 896 -354427940 32 896 -354427944 2 896 -354427948 32 896 -354427952 2 896 -354427956 32 896 -354427960 2 896 -354427964 32 896 -354427968 2 896 -354427972 32 896 -354427976 2 896 -354427980 32 896 -354427984 2 896 -354427988 32 896 -354427992 2 896 -354427996 32 896 -354428000 2 896 -354428004 32 896 -354428008 2 896 -354428012 32 896 -354428016 2 896 -354428020 32 896 -354428024 2 896 -354428028 32 896 -354428032 2 896 -354428036 32 896 -354428040 2 896 -354428044 32 896 -354428048 2 896 -354428052 32 896 -354428056 2 896 -354428060 32 896 -354428064 2 896 -354428068 32 896 -354428072 2 896 -354428076 32 896 -354428080 2 896 -354428084 32 896 -354428088 2 896 -354428092 32 896 -354428096 2 896 -354428100 32 896 -354428104 2 896 -354428108 32 896 -354428112 2 896 -354428116 32 896 -354428120 2 896 -354428124 32 896 -354428128 2 896 -354428132 32 896 -354428136 2 896 -354428140 32 896 -354428144 2 896 -354428148 32 896 -354428152 2 896 -354428156 32 896 -354428160 2 896 -354428164 32 896 -354428168 2 896 -354428172 32 896 -354428176 2 896 -354428180 32 896 -354428184 2 896 -354428188 32 896 -354428192 2 896 -354432004 32 896 -354432008 2 896 -354432012 32 896 -354432016 2 896 -354432020 32 896 -354432024 2 896 -354432028 32 896 -354432032 2 896 -354432036 32 896 -354432040 2 896 -354432044 32 896 -354432048 2 896 -354432052 32 896 -354432056 2 896 -354432060 32 896 -354432064 2 896 -354432068 32 896 -354432072 2 896 -354432076 32 896 -354432080 2 896 -354432084 32 896 -354432088 2 896 -354432092 32 896 -354432096 2 896 -354432100 32 896 -354432104 2 896 -354432108 32 896 -354432112 2 896 -354432116 32 896 -354432120 2 896 -354432124 32 896 -354432128 2 896 -354432132 32 896 -354432136 2 896 -354432140 32 896 -354432144 2 896 -354432148 32 896 -354432152 2 896 -354432156 32 896 -354432160 2 896 -354432164 32 896 -354432168 2 896 -354432172 32 896 -354432176 2 896 -354432180 32 896 -354432184 2 896 -354432188 32 896 -354432192 2 896 -354432196 32 896 -354432200 2 896 -354432204 32 896 -354432208 2 896 -354432212 32 896 -354432216 2 896 -354432220 32 896 -354432224 2 896 -354432228 32 896 -354432232 2 896 -354432236 32 896 -354432240 2 896 -354432244 32 896 -354432248 2 896 -354432252 32 896 -354432256 2 896 -354432260 32 896 -354432264 2 896 -354432268 32 896 -354432272 2 896 -354432276 32 896 -354432280 2 896 -354432284 32 896 -354432288 2 896 -354436100 32 896 -354436104 2 896 -354436108 32 896 -354436112 2 896 -354436116 32 896 -354436120 2 896 -354436124 32 896 -354436128 2 896 -354436132 32 896 -354436136 2 896 -354436140 32 896 -354436144 2 896 -354436148 32 896 -354436152 2 896 -354436156 32 896 -354436160 2 896 -354436164 32 896 -354436168 2 896 -354436172 32 896 -354436176 2 896 -354436180 32 896 -354436184 2 896 -354436188 32 896 -354436192 2 896 -354436196 32 896 -354436200 2 896 -354436204 32 896 -354436208 2 896 -354436212 32 896 -354436216 2 896 -354436220 32 896 -354436224 2 896 -354436228 32 896 -354436232 2 896 -354436236 32 896 -354436240 2 896 -354436244 32 896 -354436248 2 896 -354436252 32 896 -354436256 2 896 -354436260 32 896 -354436264 2 896 -354436268 32 896 -354436272 2 896 -354436276 32 896 -354436280 2 896 -354436284 32 896 -354436288 2 896 -354436292 32 896 -354436296 2 896 -354436300 32 896 -354436304 2 896 -354436308 32 896 -354436312 2 896 -354436316 32 896 -354436320 2 896 -354436324 32 896 -354436328 2 896 -354436332 32 896 -354436336 2 896 -354436340 32 896 -354436344 2 896 -354436348 32 896 -354436352 2 896 -354436356 32 896 -354436360 2 896 -354436364 32 896 -354436368 2 896 -354436372 32 896 -354436376 2 896 -354436380 32 896 -354436384 2 896 -354436388 32 896 -354436392 2 896 -354436396 32 896 -354436400 2 896 -354436404 32 896 -354436408 2 896 -354436412 32 896 -354436416 2 896 -354440196 32 896 -354440200 2 896 -354440204 32 896 -354440208 2 896 -354440212 32 896 -354440216 2 896 -354440220 32 896 -354440224 2 896 -354440228 32 896 -354440232 2 896 -354440236 32 896 -354440240 2 896 -354440244 32 896 -354440248 2 896 -354440252 32 896 -354440256 2 896 -354440260 32 896 -354440264 2 896 -354440268 32 896 -354440272 2 896 -354440276 32 896 -354440280 2 896 -354440284 32 896 -354440288 2 896 -354440292 32 896 -354440296 2 896 -354440300 32 896 -354440304 2 896 -354440308 32 896 -354440312 2 896 -354440316 32 896 -354440320 2 896 -354440324 32 896 -354440328 2 896 -354440332 32 896 -354440336 2 896 -354440340 32 896 -354440344 2 896 -354440348 32 896 -354440352 2 896 -354440356 32 896 -354440360 2 896 -354440364 32 896 -354440368 2 896 -354440372 32 896 -354440376 2 896 -354440380 32 896 -354440384 2 896 -354440388 32 896 -354440392 2 896 -354440396 32 896 -354440400 2 896 -354440404 32 896 -354440408 2 896 -354440412 32 896 -354440416 2 896 -354440420 32 896 -354440424 2 896 -354440428 32 896 -354440432 2 896 -354440436 32 896 -354440440 2 896 -354440444 32 896 -354440448 2 896 -354440452 32 896 -354440456 2 896 -354440460 32 896 -354440464 2 896 -354440468 32 896 -354440472 2 896 -354440476 32 896 -354440480 2 896 -354440484 32 896 -354440488 2 896 -354440492 32 896 -354440496 2 896 -354440500 32 896 -354440504 2 896 -354440508 32 896 -354440512 2 896 -354444292 2 896 -354444296 2 896 -354444300 2 896 -354444304 2 896 -354444308 2 896 -354444312 2 896 -354444316 2 896 -354444320 2 896 -354444324 2 896 -354444328 2 896 -354444332 2 896 -354444336 2 896 -354444340 2 896 -354444344 2 896 -354444348 2 896 -354444352 2 896 -354444356 2 896 -354444360 2 896 -354444364 2 896 -354444368 2 896 -354444372 2 896 -354444376 2 896 -354444380 2 896 -354444384 2 896 -354444388 2 896 -354444392 2 896 -354444396 2 896 -354444400 2 896 -354444404 2 896 -354444408 2 896 -354444412 2 896 -354444416 2 896 -354444420 2 896 -354444424 2 896 -354444428 2 896 -354444432 2 896 -354444436 2 896 -354444440 2 896 -354444444 2 896 -354444448 2 896 -354444452 2 896 -354444456 2 896 -354444460 2 896 -354444464 2 896 -354444468 2 896 -354444472 2 896 -354444476 2 896 -354444480 2 896 -354444484 2 896 -354444488 2 896 -354444492 2 896 -354444496 2 896 -354444500 2 896 -354444504 2 896 -354444508 2 896 -354444512 2 896 -354444516 2 896 -354444520 2 896 -354444524 2 896 -354444528 2 896 -354444532 2 896 -354444536 2 896 -354444540 2 896 -354444544 2 896 -354444548 2 896 -354444552 2 896 -354444556 2 896 -354444560 2 896 -354444564 2 896 -354444568 2 896 -354444572 2 896 -354444576 2 896 -354444580 2 896 -354444584 2 896 -354444588 2 896 -354444592 2 896 -354444596 2 896 -354444600 2 896 -354444604 2 896 -354444608 2 896 -354444612 2 896 -354444616 2 896 -354444620 2 896 -354444624 2 896 -354444628 2 896 -354444632 2 896 -354444636 2 896 -354444640 2 896 -354444644 2 896 -354444648 2 896 -354444652 2 896 -354444656 2 896 -354444660 2 896 -354444664 2 896 -354444668 2 896 -354444672 2 896 -354448388 2 896 -354448392 2 896 -354448396 2 896 -354448400 2 896 -354448404 2 896 -354448408 2 896 -354448412 2 896 -354448416 2 896 -354448420 2 896 -354448424 2 896 -354448428 2 896 -354448432 2 896 -354448436 2 896 -354448440 2 896 -354448444 2 896 -354448448 2 896 -354448452 2 896 -354448456 2 896 -354448460 2 896 -354448464 2 896 -354448468 2 896 -354448472 2 896 -354448476 2 896 -354448480 2 896 -354448484 2 896 -354448488 2 896 -354448492 2 896 -354448496 2 896 -354448500 2 896 -354448504 2 896 -354448508 2 896 -354448512 2 896 -354448516 2 896 -354448520 2 896 -354448524 2 896 -354448528 2 896 -354448532 2 896 -354448536 2 896 -354448540 2 896 -354448544 2 896 -354448548 2 896 -354448552 2 896 -354448556 2 896 -354448560 2 896 -354448564 2 896 -354448568 2 896 -354448572 2 896 -354448576 2 896 -354448580 2 896 -354448584 2 896 -354448588 2 896 -354448592 2 896 -354448596 2 896 -354448600 2 896 -354448604 2 896 -354448608 2 896 -354448612 2 896 -354448616 2 896 -354448620 2 896 -354448624 2 896 -354448628 2 896 -354448632 2 896 -354448636 2 896 -354448640 2 896 -354448644 2 896 -354448648 2 896 -354448652 2 896 -354448656 2 896 -354448660 2 896 -354448664 2 896 -354448668 2 896 -354448672 2 896 -354448676 2 896 -354448680 2 896 -354448684 2 896 -354448688 2 896 -354448692 2 896 -354448696 2 896 -354448700 2 896 -354448704 2 896 -354448708 2 896 -354448712 2 896 -354448716 2 896 -354448720 2 896 -354448724 2 896 -354448728 2 896 -354448732 2 896 -354448736 2 896 -354448740 2 896 -354448744 2 896 -354448748 2 896 -354448752 2 896 -354448756 2 896 -354448760 2 896 -354448764 2 896 -354448768 2 896 -354448772 2 896 -354448776 2 896 -354448780 2 896 -354448784 2 896 -354448788 2 896 -354448792 2 896 -354448796 2 896 -354448800 2 896 -354448804 2 896 -354448808 2 896 -354448812 2 896 -354448816 2 896 -354448820 2 896 -354448824 2 896 -354448828 2 896 -354448832 2 896 -354452484 2 896 -354452488 2 896 -354452492 2 896 -354452496 2 896 -354452500 2 896 -354452504 2 896 -354452508 2 896 -354452512 2 896 -354452516 2 896 -354452520 2 896 -354452524 2 896 -354452528 2 896 -354452532 2 896 -354452536 2 896 -354452540 2 896 -354452544 2 896 -354452548 2 896 -354452552 2 896 -354452556 2 896 -354452560 2 896 -354452564 2 896 -354452568 2 896 -354452572 2 896 -354452576 2 896 -354452580 2 896 -354452584 2 896 -354452588 2 896 -354452592 2 896 -354452596 2 896 -354452600 2 896 -354452604 2 896 -354452608 2 896 -354452612 2 896 -354452616 2 896 -354452620 2 896 -354452624 2 896 -354452628 2 896 -354452632 2 896 -354452636 2 896 -354452640 2 896 -354452644 2 896 -354452648 2 896 -354452652 2 896 -354452656 2 896 -354452660 2 896 -354452664 2 896 -354452668 2 896 -354452672 2 896 -354452676 2 896 -354452680 2 896 -354452684 2 896 -354452688 2 896 -354452692 2 896 -354452696 2 896 -354452700 2 896 -354452704 2 896 -354452708 2 896 -354452712 2 896 -354452716 2 896 -354452720 2 896 -354452724 2 896 -354452728 2 896 -354452732 2 896 -354452736 2 896 -354452740 2 896 -354452744 2 896 -354452748 2 896 -354452752 2 896 -354452756 2 896 -354452760 2 896 -354452764 2 896 -354452768 2 896 -354452772 2 896 -354452776 2 896 -354452780 2 896 -354452784 2 896 -354452788 2 896 -354452792 2 896 -354452796 2 896 -354452800 2 896 -354452804 2 896 -354452808 2 896 -354452812 2 896 -354452816 2 896 -354452820 2 896 -354452824 2 896 -354452828 2 896 -354452832 2 896 -354452836 2 896 -354452840 2 896 -354452844 2 896 -354452848 2 896 -354452852 2 896 -354452856 2 896 -354452860 2 896 -354452864 2 896 -354452868 2 896 -354452872 2 896 -354452876 2 896 -354452880 2 896 -354452884 2 896 -354452888 2 896 -354452892 2 896 -354452896 2 896 -354452900 2 896 -354452904 2 896 -354452908 2 896 -354452912 2 896 -354452916 2 896 -354452920 2 896 -354452924 2 896 -354452928 2 896 -354452932 2 896 -354452936 2 896 -354452940 2 896 -354452944 2 896 -354452948 2 896 -354452952 2 896 -354452956 2 896 -354452960 2 896 -354452964 2 896 -354452968 2 896 -354452972 2 896 -354452976 2 896 -354452980 2 896 -354452984 2 896 -354452988 2 896 -354452992 2 896 -354456580 2 896 -354456584 2 896 -354456588 2 896 -354456592 2 896 -354456596 2 896 -354456600 2 896 -354456604 2 896 -354456608 2 896 -354456612 2 896 -354456616 2 896 -354456620 2 896 -354456624 2 896 -354456628 2 896 -354456632 2 896 -354456636 2 896 -354456640 2 896 -354456644 2 896 -354456648 2 896 -354456652 2 896 -354456656 2 896 -354456660 2 896 -354456664 2 896 -354456668 2 896 -354456672 2 896 -354456676 2 896 -354456680 2 896 -354456684 2 896 -354456688 2 896 -354456692 2 896 -354456696 2 896 -354456700 2 896 -354456704 2 896 -354456708 2 896 -354456712 2 896 -354456716 2 896 -354456720 2 896 -354456724 2 896 -354456728 2 896 -354456732 2 896 -354456736 2 896 -354456740 2 896 -354456744 2 896 -354456748 2 896 -354456752 2 896 -354456756 2 896 -354456760 2 896 -354456764 2 896 -354456768 2 896 -354456772 2 896 -354456776 2 896 -354456780 2 896 -354456784 2 896 -354456788 2 896 -354456792 2 896 -354456796 2 896 -354456800 2 896 -354456804 2 896 -354456808 2 896 -354456812 2 896 -354456816 2 896 -354456820 2 896 -354456824 2 896 -354456828 2 896 -354456832 2 896 -354456836 2 896 -354456840 2 896 -354456844 2 896 -354456848 2 896 -354456852 2 896 -354456856 2 896 -354456860 2 896 -354456864 2 896 -354456868 2 896 -354456872 2 896 -354456876 2 896 -354456880 2 896 -354456884 2 896 -354456888 2 896 -354456892 2 896 -354456896 2 896 -354456900 2 896 -354456904 2 896 -354456908 2 896 -354456912 2 896 -354456916 2 896 -354456920 2 896 -354456924 2 896 -354456928 2 896 -354456932 2 896 -354456936 2 896 -354456940 2 896 -354456944 2 896 -354456948 2 896 -354456952 2 896 -354456956 2 896 -354456960 2 896 -354456964 2 896 -354456968 2 896 -354456972 2 896 -354456976 2 896 -354456980 2 896 -354456984 2 896 -354456988 2 896 -354456992 2 896 -354456996 2 896 -354457000 2 896 -354457004 2 896 -354457008 2 896 -354457012 2 896 -354457016 2 896 -354457020 2 896 -354457024 2 896 -354457028 2 896 -354457032 2 896 -354457036 2 896 -354457040 2 896 -354457044 2 896 -354457048 2 896 -354457052 2 896 -354457056 2 896 -354457060 2 896 -354457064 2 896 -354457068 2 896 -354457072 2 896 -354457076 2 896 -354457080 2 896 -354457084 2 896 -354457088 2 896 -354457092 2 896 -354457096 2 896 -354457100 2 896 -354457104 2 896 -354457108 2 896 -354457112 2 896 -354457116 2 896 -354457120 2 896 -354460676 2 896 -354460680 2 896 -354460684 2 896 -354460688 2 896 -354460692 2 896 -354460696 2 896 -354460700 2 896 -354460704 2 896 -354460708 2 896 -354460712 2 896 -354460716 2 896 -354460720 2 896 -354460724 2 896 -354460728 2 896 -354460732 2 896 -354460736 2 896 -354460740 2 896 -354460744 2 896 -354460748 2 896 -354460752 2 896 -354460756 2 896 -354460760 2 896 -354460764 2 896 -354460768 2 896 -354460772 2 896 -354460776 2 896 -354460780 2 896 -354460784 2 896 -354460788 2 896 -354460792 2 896 -354460796 2 896 -354460800 2 896 -354460804 2 896 -354460808 2 896 -354460812 2 896 -354460816 2 896 -354460820 2 896 -354460824 2 896 -354460828 2 896 -354460832 2 896 -354460836 2 896 -354460840 2 896 -354460844 2 896 -354460848 2 896 -354460852 2 896 -354460856 2 896 -354460860 2 896 -354460864 2 896 -354460868 2 896 -354460872 2 896 -354460876 2 896 -354460880 2 896 -354460884 2 896 -354460888 2 896 -354460892 2 896 -354460896 2 896 -354460900 2 896 -354460904 2 896 -354460908 2 896 -354460912 2 896 -354460916 2 896 -354460920 2 896 -354460924 2 896 -354460928 2 896 -354460932 2 896 -354460936 2 896 -354460940 2 896 -354460944 2 896 -354460948 2 896 -354460952 2 896 -354460956 2 896 -354460960 2 896 -354460964 2 896 -354460968 2 896 -354460972 2 896 -354460976 2 896 -354460980 2 896 -354460984 2 896 -354460988 2 896 -354460992 2 896 -354460996 2 896 -354461000 2 896 -354461004 2 896 -354461008 2 896 -354461012 2 896 -354461016 2 896 -354461020 2 896 -354461024 2 896 -354461028 2 896 -354461032 2 896 -354461036 2 896 -354461040 2 896 -354461044 2 896 -354461048 2 896 -354461052 2 896 -354461056 2 896 -354461060 2 896 -354461064 2 896 -354461068 2 896 -354461072 2 896 -354461076 2 896 -354461080 2 896 -354461084 2 896 -354461088 2 896 -354461092 2 896 -354461096 2 896 -354461100 2 896 -354461104 2 896 -354461108 2 896 -354461112 2 896 -354461116 2 896 -354461120 2 896 -354461124 2 896 -354461128 2 896 -354461132 2 896 -354461136 2 896 -354461140 2 896 -354461144 2 896 -354461148 2 896 -354461152 2 896 -354461156 2 896 -354461160 2 896 -354461164 2 896 -354461168 2 896 -354461172 2 896 -354461176 2 896 -354461180 2 896 -354461184 2 896 -354461188 2 896 -354461192 2 896 -354461196 2 896 -354461200 2 896 -354461204 2 896 -354461208 2 896 -354461212 2 896 -354461216 2 896 -354461220 2 896 -354461224 2 896 -354461228 2 896 -354461232 2 896 -354461236 2 896 -354461240 2 896 -354461244 2 896 -354461248 2 896 -354464772 2 896 -354464776 2 896 -354464780 2 896 -354464784 2 896 -354464788 2 896 -354464792 2 896 -354464796 2 896 -354464800 2 896 -354464804 2 896 -354464808 2 896 -354464812 2 896 -354464816 2 896 -354464820 2 896 -354464824 2 896 -354464828 2 896 -354464832 2 896 -354464836 2 896 -354464840 2 896 -354464844 2 896 -354464848 2 896 -354464852 2 896 -354464856 2 896 -354464860 2 896 -354464864 2 896 -354464868 2 896 -354464872 2 896 -354464876 2 896 -354464880 2 896 -354464884 2 896 -354464888 2 896 -354464892 2 896 -354464896 2 896 -354464900 2 896 -354464904 2 896 -354464908 2 896 -354464912 2 896 -354464916 2 896 -354464920 2 896 -354464924 2 896 -354464928 2 896 -354464932 2 896 -354464936 2 896 -354464940 2 896 -354464944 2 896 -354464948 2 896 -354464952 2 896 -354464956 2 896 -354464960 2 896 -354464964 2 896 -354464968 2 896 -354464972 2 896 -354464976 2 896 -354464980 2 896 -354464984 2 896 -354464988 2 896 -354464992 2 896 -354464996 2 896 -354465000 2 896 -354465004 2 896 -354465008 2 896 -354465012 2 896 -354465016 2 896 -354465020 2 896 -354465024 2 896 -354465028 2 896 -354465032 2 896 -354465036 2 896 -354465040 2 896 -354465044 2 896 -354465048 2 896 -354465052 2 896 -354465056 2 896 -354465060 2 896 -354465064 2 896 -354465068 2 896 -354465072 2 896 -354465076 2 896 -354465080 2 896 -354465084 2 896 -354465088 2 896 -354465092 2 896 -354465096 2 896 -354465100 2 896 -354465104 2 896 -354465108 2 896 -354465112 2 896 -354465116 2 896 -354465120 2 896 -354465124 2 896 -354465128 2 896 -354465132 2 896 -354465136 2 896 -354465140 2 896 -354465144 2 896 -354465148 2 896 -354465152 2 896 -354465156 2 896 -354465160 2 896 -354465164 2 896 -354465168 2 896 -354465172 2 896 -354465176 2 896 -354465180 2 896 -354465184 2 896 -354465188 2 896 -354465192 2 896 -354465196 2 896 -354465200 2 896 -354465204 2 896 -354465208 2 896 -354465212 2 896 -354465216 2 896 -354465220 2 896 -354465224 2 896 -354465228 2 896 -354465232 2 896 -354465236 2 896 -354465240 2 896 -354465244 2 896 -354465248 2 896 -354465252 2 896 -354465256 2 896 -354465260 2 896 -354465264 2 896 -354465268 2 896 -354465272 2 896 -354465276 2 896 -354465280 2 896 -354465284 2 896 -354465288 2 896 -354465292 2 896 -354465296 2 896 -354465300 2 896 -354465304 2 896 -354465308 2 896 -354465312 2 896 -354465316 2 896 -354465320 2 896 -354465324 2 896 -354465328 2 896 -354465332 2 896 -354465336 2 896 -354465340 2 896 -354465344 2 896 -354465348 2 896 -354465352 2 896 -354465356 2 896 -354465360 2 896 -354465364 2 896 -354465368 2 896 -354465372 2 896 -354465376 2 896 -354465380 2 896 -354465384 2 896 -354465388 2 896 -354465392 2 896 -354465396 2 896 -354465400 2 896 -354465404 2 896 -354465408 2 896 +353375236 32 960 +353375240 2 960 +353375244 32 960 +353375248 2 960 +353375252 32 960 +353375256 2 960 +353375260 32 960 +353375264 2 960 +353375268 32 960 +353375272 2 960 +353375276 32 960 +353375280 2 960 +353375284 32 960 +353375288 2 960 +353375292 32 960 +353375296 2 960 +353375300 32 960 +353375304 2 960 +353375308 32 960 +353375312 2 960 +353375316 32 960 +353375320 2 960 +353375324 32 960 +353375328 2 960 +353375332 32 960 +353375336 2 960 +353375340 32 960 +353375344 2 960 +353375348 32 960 +353375352 2 960 +353375356 32 960 +353375360 2 960 +353375364 32 960 +353375368 2 960 +353375372 32 960 +353375376 2 960 +353375380 32 960 +353375384 2 960 +353375388 32 960 +353375392 2 960 +353379332 32 960 +353379336 2 960 +353379340 32 960 +353379344 2 960 +353379348 32 960 +353379352 2 960 +353379356 32 960 +353379360 2 960 +353379364 32 960 +353379368 2 960 +353379372 32 960 +353379376 2 960 +353379380 32 960 +353379384 2 960 +353379388 32 960 +353379392 2 960 +353379396 32 960 +353379400 2 960 +353379404 32 960 +353379408 2 960 +353379412 32 960 +353379416 2 960 +353379420 32 960 +353379424 2 960 +353379428 32 960 +353379432 2 960 +353379436 32 960 +353379440 2 960 +353379444 32 960 +353379448 2 960 +353379452 32 960 +353379456 2 960 +353379460 32 960 +353379464 2 960 +353379468 32 960 +353379472 2 960 +353379476 32 960 +353379480 2 960 +353379484 32 960 +353379488 2 960 +353379492 32 960 +353379496 2 960 +353379500 32 960 +353379504 2 960 +353379508 32 960 +353379512 2 960 +353379516 32 960 +353379520 2 960 +353383428 32 960 +353383432 2 960 +353383436 32 960 +353383440 2 960 +353383444 32 960 +353383448 2 960 +353383452 32 960 +353383456 2 960 +353383460 32 960 +353383464 2 960 +353383468 32 960 +353383472 2 960 +353383476 32 960 +353383480 2 960 +353383484 32 960 +353383488 2 960 +353383492 32 960 +353383496 2 960 +353383500 32 960 +353383504 2 960 +353383508 32 960 +353383512 2 960 +353383516 32 960 +353383520 2 960 +353383524 32 960 +353383528 2 960 +353383532 32 960 +353383536 2 960 +353383540 32 960 +353383544 2 960 +353383548 32 960 +353383552 2 960 +353383556 32 960 +353383560 2 960 +353383564 32 960 +353383568 2 960 +353383572 32 960 +353383576 2 960 +353383580 32 960 +353383584 2 960 +353383588 32 960 +353383592 2 960 +353383596 32 960 +353383600 2 960 +353383604 32 960 +353383608 2 960 +353383612 32 960 +353383616 2 960 +353383620 32 960 +353383624 2 960 +353383628 32 960 +353383632 2 960 +353383636 32 960 +353383640 2 960 +353383644 32 960 +353383648 2 960 +353387524 32 960 +353387528 2 960 +353387532 32 960 +353387536 2 960 +353387540 32 960 +353387544 2 960 +353387548 32 960 +353387552 2 960 +353387556 32 960 +353387560 2 960 +353387564 32 960 +353387568 2 960 +353387572 32 960 +353387576 2 960 +353387580 32 960 +353387584 2 960 +353387588 32 960 +353387592 2 960 +353387596 32 960 +353387600 2 960 +353387604 32 960 +353387608 2 960 +353387612 32 960 +353387616 2 960 +353387620 32 960 +353387624 2 960 +353387628 32 960 +353387632 2 960 +353387636 32 960 +353387640 2 960 +353387644 32 960 +353387648 2 960 +353387652 32 960 +353387656 2 960 +353387660 32 960 +353387664 2 960 +353387668 32 960 +353387672 2 960 +353387676 32 960 +353387680 2 960 +353387684 32 960 +353387688 2 960 +353387692 32 960 +353387696 2 960 +353387700 32 960 +353387704 2 960 +353387708 32 960 +353387712 2 960 +353387716 32 960 +353387720 2 960 +353387724 32 960 +353387728 2 960 +353387732 32 960 +353387736 2 960 +353387740 32 960 +353387744 2 960 +353391620 32 960 +353391624 2 960 +353391628 32 960 +353391632 2 960 +353391636 32 960 +353391640 2 960 +353391644 32 960 +353391648 2 960 +353391652 32 960 +353391656 2 960 +353391660 32 960 +353391664 2 960 +353391668 32 960 +353391672 2 960 +353391676 32 960 +353391680 2 960 +353391684 32 960 +353391688 2 960 +353391692 32 960 +353391696 2 960 +353391700 32 960 +353391704 2 960 +353391708 32 960 +353391712 2 960 +353391716 32 960 +353391720 2 960 +353391724 32 960 +353391728 2 960 +353391732 32 960 +353391736 2 960 +353391740 32 960 +353391744 2 960 +353391748 32 960 +353391752 2 960 +353391756 32 960 +353391760 2 960 +353391764 32 960 +353391768 2 960 +353391772 32 960 +353391776 2 960 +353391780 32 960 +353391784 2 960 +353391788 32 960 +353391792 2 960 +353391796 32 960 +353391800 2 960 +353391804 32 960 +353391808 2 960 +353391812 32 960 +353391816 2 960 +353391820 32 960 +353391824 2 960 +353391828 32 960 +353391832 2 960 +353391836 32 960 +353391840 2 960 +353391844 32 960 +353391848 2 960 +353391852 32 960 +353391856 2 960 +353391860 32 960 +353391864 2 960 +353391868 32 960 +353391872 2 960 +353395716 32 960 +353395720 2 960 +353395724 32 960 +353395728 2 960 +353395732 32 960 +353395736 2 960 +353395740 32 960 +353395744 2 960 +353395748 32 960 +353395752 2 960 +353395756 32 960 +353395760 2 960 +353395764 32 960 +353395768 2 960 +353395772 32 960 +353395776 2 960 +353395780 32 960 +353395784 2 960 +353395788 32 960 +353395792 2 960 +353395796 32 960 +353395800 2 960 +353395804 32 960 +353395808 2 960 +353395812 32 960 +353395816 2 960 +353395820 32 960 +353395824 2 960 +353395828 32 960 +353395832 2 960 +353395836 32 960 +353395840 2 960 +353395844 32 960 +353395848 2 960 +353395852 32 960 +353395856 2 960 +353395860 32 960 +353395864 2 960 +353395868 32 960 +353395872 2 960 +353395876 32 960 +353395880 2 960 +353395884 32 960 +353395888 2 960 +353395892 32 960 +353395896 2 960 +353395900 32 960 +353395904 2 960 +353395908 32 960 +353395912 2 960 +353395916 32 960 +353395920 2 960 +353395924 32 960 +353395928 2 960 +353395932 32 960 +353395936 2 960 +353395940 32 960 +353395944 2 960 +353395948 32 960 +353395952 2 960 +353395956 32 960 +353395960 2 960 +353395964 32 960 +353395968 2 960 +353395972 32 960 +353395976 2 960 +353395980 32 960 +353395984 2 960 +353395988 32 960 +353395992 2 960 +353395996 32 960 +353396000 2 960 +353399812 32 960 +353399816 2 960 +353399820 32 960 +353399824 2 960 +353399828 32 960 +353399832 2 960 +353399836 32 960 +353399840 2 960 +353399844 32 960 +353399848 2 960 +353399852 32 960 +353399856 2 960 +353399860 32 960 +353399864 2 960 +353399868 32 960 +353399872 2 960 +353399876 32 960 +353399880 2 960 +353399884 32 960 +353399888 2 960 +353399892 32 960 +353399896 2 960 +353399900 32 960 +353399904 2 960 +353399908 32 960 +353399912 2 960 +353399916 32 960 +353399920 2 960 +353399924 32 960 +353399928 2 960 +353399932 32 960 +353399936 2 960 +353399940 32 960 +353399944 2 960 +353399948 32 960 +353399952 2 960 +353399956 32 960 +353399960 2 960 +353399964 32 960 +353399968 2 960 +353399972 32 960 +353399976 2 960 +353399980 32 960 +353399984 2 960 +353399988 32 960 +353399992 2 960 +353399996 32 960 +353400000 2 960 +353400004 32 960 +353400008 2 960 +353400012 32 960 +353400016 2 960 +353400020 32 960 +353400024 2 960 +353400028 32 960 +353400032 2 960 +353400036 32 960 +353400040 2 960 +353400044 32 960 +353400048 2 960 +353400052 32 960 +353400056 2 960 +353400060 32 960 +353400064 2 960 +353400068 32 960 +353400072 2 960 +353400076 32 960 +353400080 2 960 +353400084 32 960 +353400088 2 960 +353400092 32 960 +353400096 2 960 +353403908 32 960 +353403912 2 960 +353403916 32 960 +353403920 2 960 +353403924 32 960 +353403928 2 960 +353403932 32 960 +353403936 2 960 +353403940 32 960 +353403944 2 960 +353403948 32 960 +353403952 2 960 +353403956 32 960 +353403960 2 960 +353403964 32 960 +353403968 2 960 +353403972 32 960 +353403976 2 960 +353403980 32 960 +353403984 2 960 +353403988 32 960 +353403992 2 960 +353403996 32 960 +353404000 2 960 +353404004 32 960 +353404008 2 960 +353404012 32 960 +353404016 2 960 +353404020 32 960 +353404024 2 960 +353404028 32 960 +353404032 2 960 +353404036 32 960 +353404040 2 960 +353404044 32 960 +353404048 2 960 +353404052 32 960 +353404056 2 960 +353404060 32 960 +353404064 2 960 +353404068 32 960 +353404072 2 960 +353404076 32 960 +353404080 2 960 +353404084 32 960 +353404088 2 960 +353404092 32 960 +353404096 2 960 +353404100 32 960 +353404104 2 960 +353404108 32 960 +353404112 2 960 +353404116 32 960 +353404120 2 960 +353404124 32 960 +353404128 2 960 +353404132 32 960 +353404136 2 960 +353404140 32 960 +353404144 2 960 +353404148 32 960 +353404152 2 960 +353404156 32 960 +353404160 2 960 +353404164 32 960 +353404168 2 960 +353404172 32 960 +353404176 2 960 +353404180 32 960 +353404184 2 960 +353404188 32 960 +353404192 2 960 +353404196 32 960 +353404200 2 960 +353404204 32 960 +353404208 2 960 +353404212 32 960 +353404216 2 960 +353404220 32 960 +353404224 2 960 +353408004 32 960 +353408008 2 960 +353408012 32 960 +353408016 2 960 +353408020 32 960 +353408024 2 960 +353408028 32 960 +353408032 2 960 +353408036 32 960 +353408040 2 960 +353408044 32 960 +353408048 2 960 +353408052 32 960 +353408056 2 960 +353408060 32 960 +353408064 2 960 +353408068 32 960 +353408072 2 960 +353408076 32 960 +353408080 2 960 +353408084 32 960 +353408088 2 960 +353408092 32 960 +353408096 2 960 +353408100 32 960 +353408104 2 960 +353408108 32 960 +353408112 2 960 +353408116 32 960 +353408120 2 960 +353408124 32 960 +353408128 2 960 +353408132 32 960 +353408136 2 960 +353408140 32 960 +353408144 2 960 +353408148 32 960 +353408152 2 960 +353408156 32 960 +353408160 2 960 +353408164 32 960 +353408168 2 960 +353408172 32 960 +353408176 2 960 +353408180 32 960 +353408184 2 960 +353408188 32 960 +353408192 2 960 +353408196 32 960 +353408200 2 960 +353408204 32 960 +353408208 2 960 +353408212 32 960 +353408216 2 960 +353408220 32 960 +353408224 2 960 +353408228 32 960 +353408232 2 960 +353408236 32 960 +353408240 2 960 +353408244 32 960 +353408248 2 960 +353408252 32 960 +353408256 2 960 +353408260 32 960 +353408264 2 960 +353408268 32 960 +353408272 2 960 +353408276 32 960 +353408280 2 960 +353408284 32 960 +353408288 2 960 +353408292 32 960 +353408296 2 960 +353408300 32 960 +353408304 2 960 +353408308 32 960 +353408312 2 960 +353408316 32 960 +353408320 2 960 +353412100 2 1016 +353412104 2 1016 +353412108 2 1016 +353412112 2 1016 +353412116 2 1016 +353412120 2 1016 +353412124 2 1016 +353412128 2 1016 +353412132 2 1016 +353412136 2 1016 +353412140 2 1016 +353412144 2 1016 +353412148 2 1016 +353412152 2 1016 +353412156 2 1016 +353412160 2 1016 +353412164 2 1016 +353412168 2 1016 +353412172 2 1016 +353412176 2 1016 +353412180 2 1016 +353412184 2 1016 +353412188 2 1016 +353412192 2 1016 +353412196 2 1016 +353412200 2 1016 +353412204 2 1016 +353412208 2 1016 +353412212 2 1016 +353412216 2 1016 +353412220 2 1016 +353412224 2 1016 +353412228 2 1016 +353412232 2 1016 +353412236 2 1016 +353412240 2 1016 +353412244 2 1016 +353412248 2 1016 +353412252 2 1016 +353412256 2 1016 +353412260 2 1016 +353412264 2 1016 +353412268 2 1016 +353412272 2 1016 +353412276 2 1016 +353412280 2 1016 +353412284 2 1016 +353412288 2 1016 +353412292 2 1016 +353412296 2 1016 +353412300 2 1016 +353412304 2 1016 +353412308 2 1016 +353412312 2 1016 +353412316 2 1016 +353412320 2 1016 +353412324 2 1016 +353412328 2 1016 +353412332 2 1016 +353412336 2 1016 +353412340 2 1016 +353412344 2 1016 +353412348 2 1016 +353412352 2 1016 +353412356 2 1016 +353412360 2 1016 +353412364 2 1016 +353412368 2 1016 +353412372 2 1016 +353412376 2 1016 +353412380 2 1016 +353412384 2 1016 +353412388 2 1016 +353412392 2 1016 +353412396 2 1016 +353412400 2 1016 +353412404 2 1016 +353412408 2 1016 +353412412 2 1016 +353412416 2 1016 +353412420 2 1016 +353412424 2 1016 +353412428 2 1016 +353412432 2 1016 +353412436 2 1016 +353412440 2 1016 +353412444 2 1016 +353412448 2 1016 +353412452 2 1016 +353412456 2 1016 +353412460 2 1016 +353412464 2 1016 +353412468 2 1016 +353412472 2 1016 +353412476 2 1016 +353412480 2 1016 +353412484 2 1016 +353412488 2 1016 +353412492 2 1016 +353412496 2 1016 +353412500 2 1016 +353412504 2 1016 +353412508 2 1016 +353412512 2 1016 +353416196 2 1016 +353416200 2 1016 +353416204 2 1016 +353416208 2 1016 +353416212 2 1016 +353416216 2 1016 +353416220 2 1016 +353416224 2 1016 +353416228 2 1016 +353416232 2 1016 +353416236 2 1016 +353416240 2 1016 +353416244 2 1016 +353416248 2 1016 +353416252 2 1016 +353416256 2 1016 +353416260 2 1016 +353416264 2 1016 +353416268 2 1016 +353416272 2 1016 +353416276 2 1016 +353416280 2 1016 +353416284 2 1016 +353416288 2 1016 +353416292 2 1016 +353416296 2 1016 +353416300 2 1016 +353416304 2 1016 +353416308 2 1016 +353416312 2 1016 +353416316 2 1016 +353416320 2 1016 +353416324 2 1016 +353416328 2 1016 +353416332 2 1016 +353416336 2 1016 +353416340 2 1016 +353416344 2 1016 +353416348 2 1016 +353416352 2 1016 +353416356 2 1016 +353416360 2 1016 +353416364 2 1016 +353416368 2 1016 +353416372 2 1016 +353416376 2 1016 +353416380 2 1016 +353416384 2 1016 +353416388 2 1016 +353416392 2 1016 +353416396 2 1016 +353416400 2 1016 +353416404 2 1016 +353416408 2 1016 +353416412 2 1016 +353416416 2 1016 +353416420 2 1016 +353416424 2 1016 +353416428 2 1016 +353416432 2 1016 +353416436 2 1016 +353416440 2 1016 +353416444 2 1016 +353416448 2 1016 +353416452 2 1016 +353416456 2 1016 +353416460 2 1016 +353416464 2 1016 +353416468 2 1016 +353416472 2 1016 +353416476 2 1016 +353416480 2 1016 +353416484 2 1016 +353416488 2 1016 +353416492 2 1016 +353416496 2 1016 +353416500 2 1016 +353416504 2 1016 +353416508 2 1016 +353416512 2 1016 +353416516 2 1016 +353416520 2 1016 +353416524 2 1016 +353416528 2 1016 +353416532 2 1016 +353416536 2 1016 +353416540 2 1016 +353416544 2 1016 +353416548 2 1016 +353416552 2 1016 +353416556 2 1016 +353416560 2 1016 +353416564 2 1016 +353416568 2 1016 +353416572 2 1016 +353416576 2 1016 +353416580 2 1016 +353416584 2 1016 +353416588 2 1016 +353416592 2 1016 +353416596 2 1016 +353416600 2 1016 +353416604 2 1016 +353416608 2 1016 +353416612 2 1016 +353416616 2 1016 +353416620 2 1016 +353416624 2 1016 +353416628 2 1016 +353416632 2 1016 +353416636 2 1016 +353416640 2 1016 +353420292 2 1016 +353420296 2 1016 +353420300 2 1016 +353420304 2 1016 +353420308 2 1016 +353420312 2 1016 +353420316 2 1016 +353420320 2 1016 +353420324 2 1016 +353420328 2 1016 +353420332 2 1016 +353420336 2 1016 +353420340 2 1016 +353420344 2 1016 +353420348 2 1016 +353420352 2 1016 +353420356 2 1016 +353420360 2 1016 +353420364 2 1016 +353420368 2 1016 +353420372 2 1016 +353420376 2 1016 +353420380 2 1016 +353420384 2 1016 +353420388 2 1016 +353420392 2 1016 +353420396 2 1016 +353420400 2 1016 +353420404 2 1016 +353420408 2 1016 +353420412 2 1016 +353420416 2 1016 +353420420 2 1016 +353420424 2 1016 +353420428 2 1016 +353420432 2 1016 +353420436 2 1016 +353420440 2 1016 +353420444 2 1016 +353420448 2 1016 +353420452 2 1016 +353420456 2 1016 +353420460 2 1016 +353420464 2 1016 +353420468 2 1016 +353420472 2 1016 +353420476 2 1016 +353420480 2 1016 +353420484 2 1016 +353420488 2 1016 +353420492 2 1016 +353420496 2 1016 +353420500 2 1016 +353420504 2 1016 +353420508 2 1016 +353420512 2 1016 +353420516 2 1016 +353420520 2 1016 +353420524 2 1016 +353420528 2 1016 +353420532 2 1016 +353420536 2 1016 +353420540 2 1016 +353420544 2 1016 +353420548 2 1016 +353420552 2 1016 +353420556 2 1016 +353420560 2 1016 +353420564 2 1016 +353420568 2 1016 +353420572 2 1016 +353420576 2 1016 +353420580 2 1016 +353420584 2 1016 +353420588 2 1016 +353420592 2 1016 +353420596 2 1016 +353420600 2 1016 +353420604 2 1016 +353420608 2 1016 +353420612 2 1016 +353420616 2 1016 +353420620 2 1016 +353420624 2 1016 +353420628 2 1016 +353420632 2 1016 +353420636 2 1016 +353420640 2 1016 +353420644 2 1016 +353420648 2 1016 +353420652 2 1016 +353420656 2 1016 +353420660 2 1016 +353420664 2 1016 +353420668 2 1016 +353420672 2 1016 +353420676 2 1016 +353420680 2 1016 +353420684 2 1016 +353420688 2 1016 +353420692 2 1016 +353420696 2 1016 +353420700 2 1016 +353420704 2 1016 +353420708 2 1016 +353420712 2 1016 +353420716 2 1016 +353420720 2 1016 +353420724 2 1016 +353420728 2 1016 +353420732 2 1016 +353420736 2 1016 +353420740 2 1016 +353420744 2 1016 +353420748 2 1016 +353420752 2 1016 +353420756 2 1016 +353420760 2 1016 +353420764 2 1016 +353420768 2 1016 +353420772 2 1016 +353420776 2 1016 +353420780 2 1016 +353420784 2 1016 +353420788 2 1016 +353420792 2 1016 +353420796 2 1016 +353420800 2 1016 +353424388 2 1016 +353424392 2 1016 +353424396 2 1016 +353424400 2 1016 +353424404 2 1016 +353424408 2 1016 +353424412 2 1016 +353424416 2 1016 +353424420 2 1016 +353424424 2 1016 +353424428 2 1016 +353424432 2 1016 +353424436 2 1016 +353424440 2 1016 +353424444 2 1016 +353424448 2 1016 +353424452 2 1016 +353424456 2 1016 +353424460 2 1016 +353424464 2 1016 +353424468 2 1016 +353424472 2 1016 +353424476 2 1016 +353424480 2 1016 +353424484 2 1016 +353424488 2 1016 +353424492 2 1016 +353424496 2 1016 +353424500 2 1016 +353424504 2 1016 +353424508 2 1016 +353424512 2 1016 +353424516 2 1016 +353424520 2 1016 +353424524 2 1016 +353424528 2 1016 +353424532 2 1016 +353424536 2 1016 +353424540 2 1016 +353424544 2 1016 +353424548 2 1016 +353424552 2 1016 +353424556 2 1016 +353424560 2 1016 +353424564 2 1016 +353424568 2 1016 +353424572 2 1016 +353424576 2 1016 +353424580 2 1016 +353424584 2 1016 +353424588 2 1016 +353424592 2 1016 +353424596 2 1016 +353424600 2 1016 +353424604 2 1016 +353424608 2 1016 +353424612 2 1016 +353424616 2 1016 +353424620 2 1016 +353424624 2 1016 +353424628 2 1016 +353424632 2 1016 +353424636 2 1016 +353424640 2 1016 +353424644 2 1016 +353424648 2 1016 +353424652 2 1016 +353424656 2 1016 +353424660 2 1016 +353424664 2 1016 +353424668 2 1016 +353424672 2 1016 +353424676 2 1016 +353424680 2 1016 +353424684 2 1016 +353424688 2 1016 +353424692 2 1016 +353424696 2 1016 +353424700 2 1016 +353424704 2 1016 +353424708 2 1016 +353424712 2 1016 +353424716 2 1016 +353424720 2 1016 +353424724 2 1016 +353424728 2 1016 +353424732 2 1016 +353424736 2 1016 +353424740 2 1016 +353424744 2 1016 +353424748 2 1016 +353424752 2 1016 +353424756 2 1016 +353424760 2 1016 +353424764 2 1016 +353424768 2 1016 +353424772 2 1016 +353424776 2 1016 +353424780 2 1016 +353424784 2 1016 +353424788 2 1016 +353424792 2 1016 +353424796 2 1016 +353424800 2 1016 +353424804 2 1016 +353424808 2 1016 +353424812 2 1016 +353424816 2 1016 +353424820 2 1016 +353424824 2 1016 +353424828 2 1016 +353424832 2 1016 +353424836 2 1016 +353424840 2 1016 +353424844 2 1016 +353424848 2 1016 +353424852 2 1016 +353424856 2 1016 +353424860 2 1016 +353424864 2 1016 +353424868 2 1016 +353424872 2 1016 +353424876 2 1016 +353424880 2 1016 +353424884 2 1016 +353424888 2 1016 +353424892 2 1016 +353424896 2 1016 +353424900 2 1016 +353424904 2 1016 +353424908 2 1016 +353424912 2 1016 +353424916 2 1016 +353424920 2 1016 +353424924 2 1016 +353424928 2 1016 +353428484 2 1016 +353428488 2 1016 +353428492 2 1016 +353428496 2 1016 +353428500 2 1016 +353428504 2 1016 +353428508 2 1016 +353428512 2 1016 +353428516 2 1016 +353428520 2 1016 +353428524 2 1016 +353428528 2 1016 +353428532 2 1016 +353428536 2 1016 +353428540 2 1016 +353428544 2 1016 +353428548 2 1016 +353428552 2 1016 +353428556 2 1016 +353428560 2 1016 +353428564 2 1016 +353428568 2 1016 +353428572 2 1016 +353428576 2 1016 +353428580 2 1016 +353428584 2 1016 +353428588 2 1016 +353428592 2 1016 +353428596 2 1016 +353428600 2 1016 +353428604 2 1016 +353428608 2 1016 +353428612 2 1016 +353428616 2 1016 +353428620 2 1016 +353428624 2 1016 +353428628 2 1016 +353428632 2 1016 +353428636 2 1016 +353428640 2 1016 +353428644 2 1016 +353428648 2 1016 +353428652 2 1016 +353428656 2 1016 +353428660 2 1016 +353428664 2 1016 +353428668 2 1016 +353428672 2 1016 +353428676 2 1016 +353428680 2 1016 +353428684 2 1016 +353428688 2 1016 +353428692 2 1016 +353428696 2 1016 +353428700 2 1016 +353428704 2 1016 +353428708 2 1016 +353428712 2 1016 +353428716 2 1016 +353428720 2 1016 +353428724 2 1016 +353428728 2 1016 +353428732 2 1016 +353428736 2 1016 +353428740 2 1016 +353428744 2 1016 +353428748 2 1016 +353428752 2 1016 +353428756 2 1016 +353428760 2 1016 +353428764 2 1016 +353428768 2 1016 +353428772 2 1016 +353428776 2 1016 +353428780 2 1016 +353428784 2 1016 +353428788 2 1016 +353428792 2 1016 +353428796 2 1016 +353428800 2 1016 +353428804 2 1016 +353428808 2 1016 +353428812 2 1016 +353428816 2 1016 +353428820 2 1016 +353428824 2 1016 +353428828 2 1016 +353428832 2 1016 +353428836 2 1016 +353428840 2 1016 +353428844 2 1016 +353428848 2 1016 +353428852 2 1016 +353428856 2 1016 +353428860 2 1016 +353428864 2 1016 +353428868 2 1016 +353428872 2 1016 +353428876 2 1016 +353428880 2 1016 +353428884 2 1016 +353428888 2 1016 +353428892 2 1016 +353428896 2 1016 +353428900 2 1016 +353428904 2 1016 +353428908 2 1016 +353428912 2 1016 +353428916 2 1016 +353428920 2 1016 +353428924 2 1016 +353428928 2 1016 +353428932 2 1016 +353428936 2 1016 +353428940 2 1016 +353428944 2 1016 +353428948 2 1016 +353428952 2 1016 +353428956 2 1016 +353428960 2 1016 +353428964 2 1016 +353428968 2 1016 +353428972 2 1016 +353428976 2 1016 +353428980 2 1016 +353428984 2 1016 +353428988 2 1016 +353428992 2 1016 +353428996 2 1016 +353429000 2 1016 +353429004 2 1016 +353429008 2 1016 +353429012 2 1016 +353429016 2 1016 +353429020 2 1016 +353429024 2 1016 +353429028 2 1016 +353429032 2 1016 +353429036 2 1016 +353429040 2 1016 +353429044 2 1016 +353429048 2 1016 +353429052 2 1016 +353429056 2 1016 +353429060 2 1016 +353429064 2 1016 +353429068 2 1016 +353429072 2 1016 +353429076 2 1016 +353429080 2 1016 +353429084 2 1016 +353429088 2 1016 +353432580 2 1016 +353432584 2 1016 +353432588 2 1016 +353432592 2 1016 +353432596 2 1016 +353432600 2 1016 +353432604 2 1016 +353432608 2 1016 +353432612 2 1016 +353432616 2 1016 +353432620 2 1016 +353432624 2 1016 +353432628 2 1016 +353432632 2 1016 +353432636 2 1016 +353432640 2 1016 +353432644 2 1016 +353432648 2 1016 +353432652 2 1016 +353432656 2 1016 +353432660 2 1016 +353432664 2 1016 +353432668 2 1016 +353432672 2 1016 +353432676 2 1016 +353432680 2 1016 +353432684 2 1016 +353432688 2 1016 +353432692 2 1016 +353432696 2 1016 +353432700 2 1016 +353432704 2 1016 +353432708 2 1016 +353432712 2 1016 +353432716 2 1016 +353432720 2 1016 +353432724 2 1016 +353432728 2 1016 +353432732 2 1016 +353432736 2 1016 +353432740 2 1016 +353432744 2 1016 +353432748 2 1016 +353432752 2 1016 +353432756 2 1016 +353432760 2 1016 +353432764 2 1016 +353432768 2 1016 +353432772 2 1016 +353432776 2 1016 +353432780 2 1016 +353432784 2 1016 +353432788 2 1016 +353432792 2 1016 +353432796 2 1016 +353432800 2 1016 +353432804 2 1016 +353432808 2 1016 +353432812 2 1016 +353432816 2 1016 +353432820 2 1016 +353432824 2 1016 +353432828 2 1016 +353432832 2 1016 +353432836 2 1016 +353432840 2 1016 +353432844 2 1016 +353432848 2 1016 +353432852 2 1016 +353432856 2 1016 +353432860 2 1016 +353432864 2 1016 +353432868 2 1016 +353432872 2 1016 +353432876 2 1016 +353432880 2 1016 +353432884 2 1016 +353432888 2 1016 +353432892 2 1016 +353432896 2 1016 +353432900 2 1016 +353432904 2 1016 +353432908 2 1016 +353432912 2 1016 +353432916 2 1016 +353432920 2 1016 +353432924 2 1016 +353432928 2 1016 +353432932 2 1016 +353432936 2 1016 +353432940 2 1016 +353432944 2 1016 +353432948 2 1016 +353432952 2 1016 +353432956 2 1016 +353432960 2 1016 +353432964 2 1016 +353432968 2 1016 +353432972 2 1016 +353432976 2 1016 +353432980 2 1016 +353432984 2 1016 +353432988 2 1016 +353432992 2 1016 +353432996 2 1016 +353433000 2 1016 +353433004 2 1016 +353433008 2 1016 +353433012 2 1016 +353433016 2 1016 +353433020 2 1016 +353433024 2 1016 +353433028 2 1016 +353433032 2 1016 +353433036 2 1016 +353433040 2 1016 +353433044 2 1016 +353433048 2 1016 +353433052 2 1016 +353433056 2 1016 +353433060 2 1016 +353433064 2 1016 +353433068 2 1016 +353433072 2 1016 +353433076 2 1016 +353433080 2 1016 +353433084 2 1016 +353433088 2 1016 +353433092 2 1016 +353433096 2 1016 +353433100 2 1016 +353433104 2 1016 +353433108 2 1016 +353433112 2 1016 +353433116 2 1016 +353433120 2 1016 +353433124 2 1016 +353433128 2 1016 +353433132 2 1016 +353433136 2 1016 +353433140 2 1016 +353433144 2 1016 +353433148 2 1016 +353433152 2 1016 +353433156 2 1016 +353433160 2 1016 +353433164 2 1016 +353433168 2 1016 +353433172 2 1016 +353433176 2 1016 +353433180 2 1016 +353433184 2 1016 +353433188 2 1016 +353433192 2 1016 +353433196 2 1016 +353433200 2 1016 +353433204 2 1016 +353433208 2 1016 +353433212 2 1016 +353433216 2 1016 +353637380 32 960 +353637384 2 960 +353637388 32 960 +353637392 2 960 +353637396 32 960 +353637400 2 960 +353637404 32 960 +353637408 2 960 +353637412 32 960 +353637416 2 960 +353637420 32 960 +353637424 2 960 +353637428 32 960 +353637432 2 960 +353637436 32 960 +353637440 2 960 +353637444 32 960 +353637448 2 960 +353637452 32 960 +353637456 2 960 +353637460 32 960 +353637464 2 960 +353637468 32 960 +353637472 2 960 +353637476 32 960 +353637480 2 960 +353637484 32 960 +353637488 2 960 +353637492 32 960 +353637496 2 960 +353637500 32 960 +353637504 2 960 +353637508 32 960 +353637512 2 960 +353637516 32 960 +353637520 2 960 +353637524 32 960 +353637528 2 960 +353637532 32 960 +353637536 2 960 +353641476 32 960 +353641480 2 960 +353641484 32 960 +353641488 2 960 +353641492 32 960 +353641496 2 960 +353641500 32 960 +353641504 2 960 +353641508 32 960 +353641512 2 960 +353641516 32 960 +353641520 2 960 +353641524 32 960 +353641528 2 960 +353641532 32 960 +353641536 2 960 +353641540 32 960 +353641544 2 960 +353641548 32 960 +353641552 2 960 +353641556 32 960 +353641560 2 960 +353641564 32 960 +353641568 2 960 +353641572 32 960 +353641576 2 960 +353641580 32 960 +353641584 2 960 +353641588 32 960 +353641592 2 960 +353641596 32 960 +353641600 2 960 +353641604 32 960 +353641608 2 960 +353641612 32 960 +353641616 2 960 +353641620 32 960 +353641624 2 960 +353641628 32 960 +353641632 2 960 +353641636 32 960 +353641640 2 960 +353641644 32 960 +353641648 2 960 +353641652 32 960 +353641656 2 960 +353641660 32 960 +353641664 2 960 +353645572 32 960 +353645576 2 960 +353645580 32 960 +353645584 2 960 +353645588 32 960 +353645592 2 960 +353645596 32 960 +353645600 2 960 +353645604 32 960 +353645608 2 960 +353645612 32 960 +353645616 2 960 +353645620 32 960 +353645624 2 960 +353645628 32 960 +353645632 2 960 +353645636 32 960 +353645640 2 960 +353645644 32 960 +353645648 2 960 +353645652 32 960 +353645656 2 960 +353645660 32 960 +353645664 2 960 +353645668 32 960 +353645672 2 960 +353645676 32 960 +353645680 2 960 +353645684 32 960 +353645688 2 960 +353645692 32 960 +353645696 2 960 +353645700 32 960 +353645704 2 960 +353645708 32 960 +353645712 2 960 +353645716 32 960 +353645720 2 960 +353645724 32 960 +353645728 2 960 +353645732 32 960 +353645736 2 960 +353645740 32 960 +353645744 2 960 +353645748 32 960 +353645752 2 960 +353645756 32 960 +353645760 2 960 +353645764 32 960 +353645768 2 960 +353645772 32 960 +353645776 2 960 +353645780 32 960 +353645784 2 960 +353645788 32 960 +353645792 2 960 +353649668 32 960 +353649672 2 960 +353649676 32 960 +353649680 2 960 +353649684 32 960 +353649688 2 960 +353649692 32 960 +353649696 2 960 +353649700 32 960 +353649704 2 960 +353649708 32 960 +353649712 2 960 +353649716 32 960 +353649720 2 960 +353649724 32 960 +353649728 2 960 +353649732 32 960 +353649736 2 960 +353649740 32 960 +353649744 2 960 +353649748 32 960 +353649752 2 960 +353649756 32 960 +353649760 2 960 +353649764 32 960 +353649768 2 960 +353649772 32 960 +353649776 2 960 +353649780 32 960 +353649784 2 960 +353649788 32 960 +353649792 2 960 +353649796 32 960 +353649800 2 960 +353649804 32 960 +353649808 2 960 +353649812 32 960 +353649816 2 960 +353649820 32 960 +353649824 2 960 +353649828 32 960 +353649832 2 960 +353649836 32 960 +353649840 2 960 +353649844 32 960 +353649848 2 960 +353649852 32 960 +353649856 2 960 +353649860 32 960 +353649864 2 960 +353649868 32 960 +353649872 2 960 +353649876 32 960 +353649880 2 960 +353649884 32 960 +353649888 2 960 +353653764 32 960 +353653768 2 960 +353653772 32 960 +353653776 2 960 +353653780 32 960 +353653784 2 960 +353653788 32 960 +353653792 2 960 +353653796 32 960 +353653800 2 960 +353653804 32 960 +353653808 2 960 +353653812 32 960 +353653816 2 960 +353653820 32 960 +353653824 2 960 +353653828 32 960 +353653832 2 960 +353653836 32 960 +353653840 2 960 +353653844 32 960 +353653848 2 960 +353653852 32 960 +353653856 2 960 +353653860 32 960 +353653864 2 960 +353653868 32 960 +353653872 2 960 +353653876 32 960 +353653880 2 960 +353653884 32 960 +353653888 2 960 +353653892 32 960 +353653896 2 960 +353653900 32 960 +353653904 2 960 +353653908 32 960 +353653912 2 960 +353653916 32 960 +353653920 2 960 +353653924 32 960 +353653928 2 960 +353653932 32 960 +353653936 2 960 +353653940 32 960 +353653944 2 960 +353653948 32 960 +353653952 2 960 +353653956 32 960 +353653960 2 960 +353653964 32 960 +353653968 2 960 +353653972 32 960 +353653976 2 960 +353653980 32 960 +353653984 2 960 +353653988 32 960 +353653992 2 960 +353653996 32 960 +353654000 2 960 +353654004 32 960 +353654008 2 960 +353654012 32 960 +353654016 2 960 +353657860 32 960 +353657864 2 960 +353657868 32 960 +353657872 2 960 +353657876 32 960 +353657880 2 960 +353657884 32 960 +353657888 2 960 +353657892 32 960 +353657896 2 960 +353657900 32 960 +353657904 2 960 +353657908 32 960 +353657912 2 960 +353657916 32 960 +353657920 2 960 +353657924 32 960 +353657928 2 960 +353657932 32 960 +353657936 2 960 +353657940 32 960 +353657944 2 960 +353657948 32 960 +353657952 2 960 +353657956 32 960 +353657960 2 960 +353657964 32 960 +353657968 2 960 +353657972 32 960 +353657976 2 960 +353657980 32 960 +353657984 2 960 +353657988 32 960 +353657992 2 960 +353657996 32 960 +353658000 2 960 +353658004 32 960 +353658008 2 960 +353658012 32 960 +353658016 2 960 +353658020 32 960 +353658024 2 960 +353658028 32 960 +353658032 2 960 +353658036 32 960 +353658040 2 960 +353658044 32 960 +353658048 2 960 +353658052 32 960 +353658056 2 960 +353658060 32 960 +353658064 2 960 +353658068 32 960 +353658072 2 960 +353658076 32 960 +353658080 2 960 +353658084 32 960 +353658088 2 960 +353658092 32 960 +353658096 2 960 +353658100 32 960 +353658104 2 960 +353658108 32 960 +353658112 2 960 +353658116 32 960 +353658120 2 960 +353658124 32 960 +353658128 2 960 +353658132 32 960 +353658136 2 960 +353658140 32 960 +353658144 2 960 +353661956 32 960 +353661960 2 960 +353661964 32 960 +353661968 2 960 +353661972 32 960 +353661976 2 960 +353661980 32 960 +353661984 2 960 +353661988 32 960 +353661992 2 960 +353661996 32 960 +353662000 2 960 +353662004 32 960 +353662008 2 960 +353662012 32 960 +353662016 2 960 +353662020 32 960 +353662024 2 960 +353662028 32 960 +353662032 2 960 +353662036 32 960 +353662040 2 960 +353662044 32 960 +353662048 2 960 +353662052 32 960 +353662056 2 960 +353662060 32 960 +353662064 2 960 +353662068 32 960 +353662072 2 960 +353662076 32 960 +353662080 2 960 +353662084 32 960 +353662088 2 960 +353662092 32 960 +353662096 2 960 +353662100 32 960 +353662104 2 960 +353662108 32 960 +353662112 2 960 +353662116 32 960 +353662120 2 960 +353662124 32 960 +353662128 2 960 +353662132 32 960 +353662136 2 960 +353662140 32 960 +353662144 2 960 +353662148 32 960 +353662152 2 960 +353662156 32 960 +353662160 2 960 +353662164 32 960 +353662168 2 960 +353662172 32 960 +353662176 2 960 +353662180 32 960 +353662184 2 960 +353662188 32 960 +353662192 2 960 +353662196 32 960 +353662200 2 960 +353662204 32 960 +353662208 2 960 +353662212 32 960 +353662216 2 960 +353662220 32 960 +353662224 2 960 +353662228 32 960 +353662232 2 960 +353662236 32 960 +353662240 2 960 +353666052 32 960 +353666056 2 960 +353666060 32 960 +353666064 2 960 +353666068 32 960 +353666072 2 960 +353666076 32 960 +353666080 2 960 +353666084 32 960 +353666088 2 960 +353666092 32 960 +353666096 2 960 +353666100 32 960 +353666104 2 960 +353666108 32 960 +353666112 2 960 +353666116 32 960 +353666120 2 960 +353666124 32 960 +353666128 2 960 +353666132 32 960 +353666136 2 960 +353666140 32 960 +353666144 2 960 +353666148 32 960 +353666152 2 960 +353666156 32 960 +353666160 2 960 +353666164 32 960 +353666168 2 960 +353666172 32 960 +353666176 2 960 +353666180 32 960 +353666184 2 960 +353666188 32 960 +353666192 2 960 +353666196 32 960 +353666200 2 960 +353666204 32 960 +353666208 2 960 +353666212 32 960 +353666216 2 960 +353666220 32 960 +353666224 2 960 +353666228 32 960 +353666232 2 960 +353666236 32 960 +353666240 2 960 +353666244 32 960 +353666248 2 960 +353666252 32 960 +353666256 2 960 +353666260 32 960 +353666264 2 960 +353666268 32 960 +353666272 2 960 +353666276 32 960 +353666280 2 960 +353666284 32 960 +353666288 2 960 +353666292 32 960 +353666296 2 960 +353666300 32 960 +353666304 2 960 +353666308 32 960 +353666312 2 960 +353666316 32 960 +353666320 2 960 +353666324 32 960 +353666328 2 960 +353666332 32 960 +353666336 2 960 +353666340 32 960 +353666344 2 960 +353666348 32 960 +353666352 2 960 +353666356 32 960 +353666360 2 960 +353666364 32 960 +353666368 2 960 +353670148 32 960 +353670152 2 960 +353670156 32 960 +353670160 2 960 +353670164 32 960 +353670168 2 960 +353670172 32 960 +353670176 2 960 +353670180 32 960 +353670184 2 960 +353670188 32 960 +353670192 2 960 +353670196 32 960 +353670200 2 960 +353670204 32 960 +353670208 2 960 +353670212 32 960 +353670216 2 960 +353670220 32 960 +353670224 2 960 +353670228 32 960 +353670232 2 960 +353670236 32 960 +353670240 2 960 +353670244 32 960 +353670248 2 960 +353670252 32 960 +353670256 2 960 +353670260 32 960 +353670264 2 960 +353670268 32 960 +353670272 2 960 +353670276 32 960 +353670280 2 960 +353670284 32 960 +353670288 2 960 +353670292 32 960 +353670296 2 960 +353670300 32 960 +353670304 2 960 +353670308 32 960 +353670312 2 960 +353670316 32 960 +353670320 2 960 +353670324 32 960 +353670328 2 960 +353670332 32 960 +353670336 2 960 +353670340 32 960 +353670344 2 960 +353670348 32 960 +353670352 2 960 +353670356 32 960 +353670360 2 960 +353670364 32 960 +353670368 2 960 +353670372 32 960 +353670376 2 960 +353670380 32 960 +353670384 2 960 +353670388 32 960 +353670392 2 960 +353670396 32 960 +353670400 2 960 +353670404 32 960 +353670408 2 960 +353670412 32 960 +353670416 2 960 +353670420 32 960 +353670424 2 960 +353670428 32 960 +353670432 2 960 +353670436 32 960 +353670440 2 960 +353670444 32 960 +353670448 2 960 +353670452 32 960 +353670456 2 960 +353670460 32 960 +353670464 2 960 +353674244 2 1016 +353674248 2 1016 +353674252 2 1016 +353674256 2 1016 +353674260 2 1016 +353674264 2 1016 +353674268 2 1016 +353674272 2 1016 +353674276 2 1016 +353674280 2 1016 +353674284 2 1016 +353674288 2 1016 +353674292 2 1016 +353674296 2 1016 +353674300 2 1016 +353674304 2 1016 +353674308 2 1016 +353674312 2 1016 +353674316 2 1016 +353674320 2 1016 +353674324 2 1016 +353674328 2 1016 +353674332 2 1016 +353674336 2 1016 +353674340 2 1016 +353674344 2 1016 +353674348 2 1016 +353674352 2 1016 +353674356 2 1016 +353674360 2 1016 +353674364 2 1016 +353674368 2 1016 +353674372 2 1016 +353674376 2 1016 +353674380 2 1016 +353674384 2 1016 +353674388 2 1016 +353674392 2 1016 +353674396 2 1016 +353674400 2 1016 +353674404 2 1016 +353674408 2 1016 +353674412 2 1016 +353674416 2 1016 +353674420 2 1016 +353674424 2 1016 +353674428 2 1016 +353674432 2 1016 +353674436 2 1016 +353674440 2 1016 +353674444 2 1016 +353674448 2 1016 +353674452 2 1016 +353674456 2 1016 +353674460 2 1016 +353674464 2 1016 +353674468 2 1016 +353674472 2 1016 +353674476 2 1016 +353674480 2 1016 +353674484 2 1016 +353674488 2 1016 +353674492 2 1016 +353674496 2 1016 +353674500 2 1016 +353674504 2 1016 +353674508 2 1016 +353674512 2 1016 +353674516 2 1016 +353674520 2 1016 +353674524 2 1016 +353674528 2 1016 +353674532 2 1016 +353674536 2 1016 +353674540 2 1016 +353674544 2 1016 +353674548 2 1016 +353674552 2 1016 +353674556 2 1016 +353674560 2 1016 +353674564 2 1016 +353674568 2 1016 +353674572 2 1016 +353674576 2 1016 +353674580 2 1016 +353674584 2 1016 +353674588 2 1016 +353674592 2 1016 +353674596 2 1016 +353674600 2 1016 +353674604 2 1016 +353674608 2 1016 +353674612 2 1016 +353674616 2 1016 +353674620 2 1016 +353674624 2 1016 +353674628 2 1016 +353674632 2 1016 +353674636 2 1016 +353674640 2 1016 +353674644 2 1016 +353674648 2 1016 +353674652 2 1016 +353674656 2 1016 +353678340 2 1016 +353678344 2 1016 +353678348 2 1016 +353678352 2 1016 +353678356 2 1016 +353678360 2 1016 +353678364 2 1016 +353678368 2 1016 +353678372 2 1016 +353678376 2 1016 +353678380 2 1016 +353678384 2 1016 +353678388 2 1016 +353678392 2 1016 +353678396 2 1016 +353678400 2 1016 +353678404 2 1016 +353678408 2 1016 +353678412 2 1016 +353678416 2 1016 +353678420 2 1016 +353678424 2 1016 +353678428 2 1016 +353678432 2 1016 +353678436 2 1016 +353678440 2 1016 +353678444 2 1016 +353678448 2 1016 +353678452 2 1016 +353678456 2 1016 +353678460 2 1016 +353678464 2 1016 +353678468 2 1016 +353678472 2 1016 +353678476 2 1016 +353678480 2 1016 +353678484 2 1016 +353678488 2 1016 +353678492 2 1016 +353678496 2 1016 +353678500 2 1016 +353678504 2 1016 +353678508 2 1016 +353678512 2 1016 +353678516 2 1016 +353678520 2 1016 +353678524 2 1016 +353678528 2 1016 +353678532 2 1016 +353678536 2 1016 +353678540 2 1016 +353678544 2 1016 +353678548 2 1016 +353678552 2 1016 +353678556 2 1016 +353678560 2 1016 +353678564 2 1016 +353678568 2 1016 +353678572 2 1016 +353678576 2 1016 +353678580 2 1016 +353678584 2 1016 +353678588 2 1016 +353678592 2 1016 +353678596 2 1016 +353678600 2 1016 +353678604 2 1016 +353678608 2 1016 +353678612 2 1016 +353678616 2 1016 +353678620 2 1016 +353678624 2 1016 +353678628 2 1016 +353678632 2 1016 +353678636 2 1016 +353678640 2 1016 +353678644 2 1016 +353678648 2 1016 +353678652 2 1016 +353678656 2 1016 +353678660 2 1016 +353678664 2 1016 +353678668 2 1016 +353678672 2 1016 +353678676 2 1016 +353678680 2 1016 +353678684 2 1016 +353678688 2 1016 +353678692 2 1016 +353678696 2 1016 +353678700 2 1016 +353678704 2 1016 +353678708 2 1016 +353678712 2 1016 +353678716 2 1016 +353678720 2 1016 +353678724 2 1016 +353678728 2 1016 +353678732 2 1016 +353678736 2 1016 +353678740 2 1016 +353678744 2 1016 +353678748 2 1016 +353678752 2 1016 +353678756 2 1016 +353678760 2 1016 +353678764 2 1016 +353678768 2 1016 +353678772 2 1016 +353678776 2 1016 +353678780 2 1016 +353678784 2 1016 +353682436 2 1016 +353682440 2 1016 +353682444 2 1016 +353682448 2 1016 +353682452 2 1016 +353682456 2 1016 +353682460 2 1016 +353682464 2 1016 +353682468 2 1016 +353682472 2 1016 +353682476 2 1016 +353682480 2 1016 +353682484 2 1016 +353682488 2 1016 +353682492 2 1016 +353682496 2 1016 +353682500 2 1016 +353682504 2 1016 +353682508 2 1016 +353682512 2 1016 +353682516 2 1016 +353682520 2 1016 +353682524 2 1016 +353682528 2 1016 +353682532 2 1016 +353682536 2 1016 +353682540 2 1016 +353682544 2 1016 +353682548 2 1016 +353682552 2 1016 +353682556 2 1016 +353682560 2 1016 +353682564 2 1016 +353682568 2 1016 +353682572 2 1016 +353682576 2 1016 +353682580 2 1016 +353682584 2 1016 +353682588 2 1016 +353682592 2 1016 +353682596 2 1016 +353682600 2 1016 +353682604 2 1016 +353682608 2 1016 +353682612 2 1016 +353682616 2 1016 +353682620 2 1016 +353682624 2 1016 +353682628 2 1016 +353682632 2 1016 +353682636 2 1016 +353682640 2 1016 +353682644 2 1016 +353682648 2 1016 +353682652 2 1016 +353682656 2 1016 +353682660 2 1016 +353682664 2 1016 +353682668 2 1016 +353682672 2 1016 +353682676 2 1016 +353682680 2 1016 +353682684 2 1016 +353682688 2 1016 +353682692 2 1016 +353682696 2 1016 +353682700 2 1016 +353682704 2 1016 +353682708 2 1016 +353682712 2 1016 +353682716 2 1016 +353682720 2 1016 +353682724 2 1016 +353682728 2 1016 +353682732 2 1016 +353682736 2 1016 +353682740 2 1016 +353682744 2 1016 +353682748 2 1016 +353682752 2 1016 +353682756 2 1016 +353682760 2 1016 +353682764 2 1016 +353682768 2 1016 +353682772 2 1016 +353682776 2 1016 +353682780 2 1016 +353682784 2 1016 +353682788 2 1016 +353682792 2 1016 +353682796 2 1016 +353682800 2 1016 +353682804 2 1016 +353682808 2 1016 +353682812 2 1016 +353682816 2 1016 +353682820 2 1016 +353682824 2 1016 +353682828 2 1016 +353682832 2 1016 +353682836 2 1016 +353682840 2 1016 +353682844 2 1016 +353682848 2 1016 +353682852 2 1016 +353682856 2 1016 +353682860 2 1016 +353682864 2 1016 +353682868 2 1016 +353682872 2 1016 +353682876 2 1016 +353682880 2 1016 +353682884 2 1016 +353682888 2 1016 +353682892 2 1016 +353682896 2 1016 +353682900 2 1016 +353682904 2 1016 +353682908 2 1016 +353682912 2 1016 +353682916 2 1016 +353682920 2 1016 +353682924 2 1016 +353682928 2 1016 +353682932 2 1016 +353682936 2 1016 +353682940 2 1016 +353682944 2 1016 +353686532 2 1016 +353686536 2 1016 +353686540 2 1016 +353686544 2 1016 +353686548 2 1016 +353686552 2 1016 +353686556 2 1016 +353686560 2 1016 +353686564 2 1016 +353686568 2 1016 +353686572 2 1016 +353686576 2 1016 +353686580 2 1016 +353686584 2 1016 +353686588 2 1016 +353686592 2 1016 +353686596 2 1016 +353686600 2 1016 +353686604 2 1016 +353686608 2 1016 +353686612 2 1016 +353686616 2 1016 +353686620 2 1016 +353686624 2 1016 +353686628 2 1016 +353686632 2 1016 +353686636 2 1016 +353686640 2 1016 +353686644 2 1016 +353686648 2 1016 +353686652 2 1016 +353686656 2 1016 +353686660 2 1016 +353686664 2 1016 +353686668 2 1016 +353686672 2 1016 +353686676 2 1016 +353686680 2 1016 +353686684 2 1016 +353686688 2 1016 +353686692 2 1016 +353686696 2 1016 +353686700 2 1016 +353686704 2 1016 +353686708 2 1016 +353686712 2 1016 +353686716 2 1016 +353686720 2 1016 +353686724 2 1016 +353686728 2 1016 +353686732 2 1016 +353686736 2 1016 +353686740 2 1016 +353686744 2 1016 +353686748 2 1016 +353686752 2 1016 +353686756 2 1016 +353686760 2 1016 +353686764 2 1016 +353686768 2 1016 +353686772 2 1016 +353686776 2 1016 +353686780 2 1016 +353686784 2 1016 +353686788 2 1016 +353686792 2 1016 +353686796 2 1016 +353686800 2 1016 +353686804 2 1016 +353686808 2 1016 +353686812 2 1016 +353686816 2 1016 +353686820 2 1016 +353686824 2 1016 +353686828 2 1016 +353686832 2 1016 +353686836 2 1016 +353686840 2 1016 +353686844 2 1016 +353686848 2 1016 +353686852 2 1016 +353686856 2 1016 +353686860 2 1016 +353686864 2 1016 +353686868 2 1016 +353686872 2 1016 +353686876 2 1016 +353686880 2 1016 +353686884 2 1016 +353686888 2 1016 +353686892 2 1016 +353686896 2 1016 +353686900 2 1016 +353686904 2 1016 +353686908 2 1016 +353686912 2 1016 +353686916 2 1016 +353686920 2 1016 +353686924 2 1016 +353686928 2 1016 +353686932 2 1016 +353686936 2 1016 +353686940 2 1016 +353686944 2 1016 +353686948 2 1016 +353686952 2 1016 +353686956 2 1016 +353686960 2 1016 +353686964 2 1016 +353686968 2 1016 +353686972 2 1016 +353686976 2 1016 +353686980 2 1016 +353686984 2 1016 +353686988 2 1016 +353686992 2 1016 +353686996 2 1016 +353687000 2 1016 +353687004 2 1016 +353687008 2 1016 +353687012 2 1016 +353687016 2 1016 +353687020 2 1016 +353687024 2 1016 +353687028 2 1016 +353687032 2 1016 +353687036 2 1016 +353687040 2 1016 +353687044 2 1016 +353687048 2 1016 +353687052 2 1016 +353687056 2 1016 +353687060 2 1016 +353687064 2 1016 +353687068 2 1016 +353687072 2 1016 +353690628 2 1016 +353690632 2 1016 +353690636 2 1016 +353690640 2 1016 +353690644 2 1016 +353690648 2 1016 +353690652 2 1016 +353690656 2 1016 +353690660 2 1016 +353690664 2 1016 +353690668 2 1016 +353690672 2 1016 +353690676 2 1016 +353690680 2 1016 +353690684 2 1016 +353690688 2 1016 +353690692 2 1016 +353690696 2 1016 +353690700 2 1016 +353690704 2 1016 +353690708 2 1016 +353690712 2 1016 +353690716 2 1016 +353690720 2 1016 +353690724 2 1016 +353690728 2 1016 +353690732 2 1016 +353690736 2 1016 +353690740 2 1016 +353690744 2 1016 +353690748 2 1016 +353690752 2 1016 +353690756 2 1016 +353690760 2 1016 +353690764 2 1016 +353690768 2 1016 +353690772 2 1016 +353690776 2 1016 +353690780 2 1016 +353690784 2 1016 +353690788 2 1016 +353690792 2 1016 +353690796 2 1016 +353690800 2 1016 +353690804 2 1016 +353690808 2 1016 +353690812 2 1016 +353690816 2 1016 +353690820 2 1016 +353690824 2 1016 +353690828 2 1016 +353690832 2 1016 +353690836 2 1016 +353690840 2 1016 +353690844 2 1016 +353690848 2 1016 +353690852 2 1016 +353690856 2 1016 +353690860 2 1016 +353690864 2 1016 +353690868 2 1016 +353690872 2 1016 +353690876 2 1016 +353690880 2 1016 +353690884 2 1016 +353690888 2 1016 +353690892 2 1016 +353690896 2 1016 +353690900 2 1016 +353690904 2 1016 +353690908 2 1016 +353690912 2 1016 +353690916 2 1016 +353690920 2 1016 +353690924 2 1016 +353690928 2 1016 +353690932 2 1016 +353690936 2 1016 +353690940 2 1016 +353690944 2 1016 +353690948 2 1016 +353690952 2 1016 +353690956 2 1016 +353690960 2 1016 +353690964 2 1016 +353690968 2 1016 +353690972 2 1016 +353690976 2 1016 +353690980 2 1016 +353690984 2 1016 +353690988 2 1016 +353690992 2 1016 +353690996 2 1016 +353691000 2 1016 +353691004 2 1016 +353691008 2 1016 +353691012 2 1016 +353691016 2 1016 +353691020 2 1016 +353691024 2 1016 +353691028 2 1016 +353691032 2 1016 +353691036 2 1016 +353691040 2 1016 +353691044 2 1016 +353691048 2 1016 +353691052 2 1016 +353691056 2 1016 +353691060 2 1016 +353691064 2 1016 +353691068 2 1016 +353691072 2 1016 +353691076 2 1016 +353691080 2 1016 +353691084 2 1016 +353691088 2 1016 +353691092 2 1016 +353691096 2 1016 +353691100 2 1016 +353691104 2 1016 +353691108 2 1016 +353691112 2 1016 +353691116 2 1016 +353691120 2 1016 +353691124 2 1016 +353691128 2 1016 +353691132 2 1016 +353691136 2 1016 +353691140 2 1016 +353691144 2 1016 +353691148 2 1016 +353691152 2 1016 +353691156 2 1016 +353691160 2 1016 +353691164 2 1016 +353691168 2 1016 +353691172 2 1016 +353691176 2 1016 +353691180 2 1016 +353691184 2 1016 +353691188 2 1016 +353691192 2 1016 +353691196 2 1016 +353691200 2 1016 +353691204 2 1016 +353691208 2 1016 +353691212 2 1016 +353691216 2 1016 +353691220 2 1016 +353691224 2 1016 +353691228 2 1016 +353691232 2 1016 +353694724 2 1016 +353694728 2 1016 +353694732 2 1016 +353694736 2 1016 +353694740 2 1016 +353694744 2 1016 +353694748 2 1016 +353694752 2 1016 +353694756 2 1016 +353694760 2 1016 +353694764 2 1016 +353694768 2 1016 +353694772 2 1016 +353694776 2 1016 +353694780 2 1016 +353694784 2 1016 +353694788 2 1016 +353694792 2 1016 +353694796 2 1016 +353694800 2 1016 +353694804 2 1016 +353694808 2 1016 +353694812 2 1016 +353694816 2 1016 +353694820 2 1016 +353694824 2 1016 +353694828 2 1016 +353694832 2 1016 +353694836 2 1016 +353694840 2 1016 +353694844 2 1016 +353694848 2 1016 +353694852 2 1016 +353694856 2 1016 +353694860 2 1016 +353694864 2 1016 +353694868 2 1016 +353694872 2 1016 +353694876 2 1016 +353694880 2 1016 +353694884 2 1016 +353694888 2 1016 +353694892 2 1016 +353694896 2 1016 +353694900 2 1016 +353694904 2 1016 +353694908 2 1016 +353694912 2 1016 +353694916 2 1016 +353694920 2 1016 +353694924 2 1016 +353694928 2 1016 +353694932 2 1016 +353694936 2 1016 +353694940 2 1016 +353694944 2 1016 +353694948 2 1016 +353694952 2 1016 +353694956 2 1016 +353694960 2 1016 +353694964 2 1016 +353694968 2 1016 +353694972 2 1016 +353694976 2 1016 +353694980 2 1016 +353694984 2 1016 +353694988 2 1016 +353694992 2 1016 +353694996 2 1016 +353695000 2 1016 +353695004 2 1016 +353695008 2 1016 +353695012 2 1016 +353695016 2 1016 +353695020 2 1016 +353695024 2 1016 +353695028 2 1016 +353695032 2 1016 +353695036 2 1016 +353695040 2 1016 +353695044 2 1016 +353695048 2 1016 +353695052 2 1016 +353695056 2 1016 +353695060 2 1016 +353695064 2 1016 +353695068 2 1016 +353695072 2 1016 +353695076 2 1016 +353695080 2 1016 +353695084 2 1016 +353695088 2 1016 +353695092 2 1016 +353695096 2 1016 +353695100 2 1016 +353695104 2 1016 +353695108 2 1016 +353695112 2 1016 +353695116 2 1016 +353695120 2 1016 +353695124 2 1016 +353695128 2 1016 +353695132 2 1016 +353695136 2 1016 +353695140 2 1016 +353695144 2 1016 +353695148 2 1016 +353695152 2 1016 +353695156 2 1016 +353695160 2 1016 +353695164 2 1016 +353695168 2 1016 +353695172 2 1016 +353695176 2 1016 +353695180 2 1016 +353695184 2 1016 +353695188 2 1016 +353695192 2 1016 +353695196 2 1016 +353695200 2 1016 +353695204 2 1016 +353695208 2 1016 +353695212 2 1016 +353695216 2 1016 +353695220 2 1016 +353695224 2 1016 +353695228 2 1016 +353695232 2 1016 +353695236 2 1016 +353695240 2 1016 +353695244 2 1016 +353695248 2 1016 +353695252 2 1016 +353695256 2 1016 +353695260 2 1016 +353695264 2 1016 +353695268 2 1016 +353695272 2 1016 +353695276 2 1016 +353695280 2 1016 +353695284 2 1016 +353695288 2 1016 +353695292 2 1016 +353695296 2 1016 +353695300 2 1016 +353695304 2 1016 +353695308 2 1016 +353695312 2 1016 +353695316 2 1016 +353695320 2 1016 +353695324 2 1016 +353695328 2 1016 +353695332 2 1016 +353695336 2 1016 +353695340 2 1016 +353695344 2 1016 +353695348 2 1016 +353695352 2 1016 +353695356 2 1016 +353695360 2 1016 +353899524 32 960 +353899528 2 960 +353899532 32 960 +353899536 2 960 +353899540 32 960 +353899544 2 960 +353899548 32 960 +353899552 2 960 +353899556 32 960 +353899560 2 960 +353899564 32 960 +353899568 2 960 +353899572 32 960 +353899576 2 960 +353899580 32 960 +353899584 2 960 +353899588 32 960 +353899592 2 960 +353899596 32 960 +353899600 2 960 +353899604 32 960 +353899608 2 960 +353899612 32 960 +353899616 2 960 +353899620 32 960 +353899624 2 960 +353899628 32 960 +353899632 2 960 +353899636 32 960 +353899640 2 960 +353899644 32 960 +353899648 2 960 +353899652 32 960 +353899656 2 960 +353899660 32 960 +353899664 2 960 +353899668 32 960 +353899672 2 960 +353899676 32 960 +353899680 2 960 +353903620 32 960 +353903624 2 960 +353903628 32 960 +353903632 2 960 +353903636 32 960 +353903640 2 960 +353903644 32 960 +353903648 2 960 +353903652 32 960 +353903656 2 960 +353903660 32 960 +353903664 2 960 +353903668 32 960 +353903672 2 960 +353903676 32 960 +353903680 2 960 +353903684 32 960 +353903688 2 960 +353903692 32 960 +353903696 2 960 +353903700 32 960 +353903704 2 960 +353903708 32 960 +353903712 2 960 +353903716 32 960 +353903720 2 960 +353903724 32 960 +353903728 2 960 +353903732 32 960 +353903736 2 960 +353903740 32 960 +353903744 2 960 +353903748 32 960 +353903752 2 960 +353903756 32 960 +353903760 2 960 +353903764 32 960 +353903768 2 960 +353903772 32 960 +353903776 2 960 +353903780 32 960 +353903784 2 960 +353903788 32 960 +353903792 2 960 +353903796 32 960 +353903800 2 960 +353903804 32 960 +353903808 2 960 +353907716 32 960 +353907720 2 960 +353907724 32 960 +353907728 2 960 +353907732 32 960 +353907736 2 960 +353907740 32 960 +353907744 2 960 +353907748 32 960 +353907752 2 960 +353907756 32 960 +353907760 2 960 +353907764 32 960 +353907768 2 960 +353907772 32 960 +353907776 2 960 +353907780 32 960 +353907784 2 960 +353907788 32 960 +353907792 2 960 +353907796 32 960 +353907800 2 960 +353907804 32 960 +353907808 2 960 +353907812 32 960 +353907816 2 960 +353907820 32 960 +353907824 2 960 +353907828 32 960 +353907832 2 960 +353907836 32 960 +353907840 2 960 +353907844 32 960 +353907848 2 960 +353907852 32 960 +353907856 2 960 +353907860 32 960 +353907864 2 960 +353907868 32 960 +353907872 2 960 +353907876 32 960 +353907880 2 960 +353907884 32 960 +353907888 2 960 +353907892 32 960 +353907896 2 960 +353907900 32 960 +353907904 2 960 +353907908 32 960 +353907912 2 960 +353907916 32 960 +353907920 2 960 +353907924 32 960 +353907928 2 960 +353907932 32 960 +353907936 2 960 +353911812 32 960 +353911816 2 960 +353911820 32 960 +353911824 2 960 +353911828 32 960 +353911832 2 960 +353911836 32 960 +353911840 2 960 +353911844 32 960 +353911848 2 960 +353911852 32 960 +353911856 2 960 +353911860 32 960 +353911864 2 960 +353911868 32 960 +353911872 2 960 +353911876 32 960 +353911880 2 960 +353911884 32 960 +353911888 2 960 +353911892 32 960 +353911896 2 960 +353911900 32 960 +353911904 2 960 +353911908 32 960 +353911912 2 960 +353911916 32 960 +353911920 2 960 +353911924 32 960 +353911928 2 960 +353911932 32 960 +353911936 2 960 +353911940 32 960 +353911944 2 960 +353911948 32 960 +353911952 2 960 +353911956 32 960 +353911960 2 960 +353911964 32 960 +353911968 2 960 +353911972 32 960 +353911976 2 960 +353911980 32 960 +353911984 2 960 +353911988 32 960 +353911992 2 960 +353911996 32 960 +353912000 2 960 +353912004 32 960 +353912008 2 960 +353912012 32 960 +353912016 2 960 +353912020 32 960 +353912024 2 960 +353912028 32 960 +353912032 2 960 +353915908 32 960 +353915912 2 960 +353915916 32 960 +353915920 2 960 +353915924 32 960 +353915928 2 960 +353915932 32 960 +353915936 2 960 +353915940 32 960 +353915944 2 960 +353915948 32 960 +353915952 2 960 +353915956 32 960 +353915960 2 960 +353915964 32 960 +353915968 2 960 +353915972 32 960 +353915976 2 960 +353915980 32 960 +353915984 2 960 +353915988 32 960 +353915992 2 960 +353915996 32 960 +353916000 2 960 +353916004 32 960 +353916008 2 960 +353916012 32 960 +353916016 2 960 +353916020 32 960 +353916024 2 960 +353916028 32 960 +353916032 2 960 +353916036 32 960 +353916040 2 960 +353916044 32 960 +353916048 2 960 +353916052 32 960 +353916056 2 960 +353916060 32 960 +353916064 2 960 +353916068 32 960 +353916072 2 960 +353916076 32 960 +353916080 2 960 +353916084 32 960 +353916088 2 960 +353916092 32 960 +353916096 2 960 +353916100 32 960 +353916104 2 960 +353916108 32 960 +353916112 2 960 +353916116 32 960 +353916120 2 960 +353916124 32 960 +353916128 2 960 +353916132 32 960 +353916136 2 960 +353916140 32 960 +353916144 2 960 +353916148 32 960 +353916152 2 960 +353916156 32 960 +353916160 2 960 +353920004 32 960 +353920008 2 960 +353920012 32 960 +353920016 2 960 +353920020 32 960 +353920024 2 960 +353920028 32 960 +353920032 2 960 +353920036 32 960 +353920040 2 960 +353920044 32 960 +353920048 2 960 +353920052 32 960 +353920056 2 960 +353920060 32 960 +353920064 2 960 +353920068 32 960 +353920072 2 960 +353920076 32 960 +353920080 2 960 +353920084 32 960 +353920088 2 960 +353920092 32 960 +353920096 2 960 +353920100 32 960 +353920104 2 960 +353920108 32 960 +353920112 2 960 +353920116 32 960 +353920120 2 960 +353920124 32 960 +353920128 2 960 +353920132 32 960 +353920136 2 960 +353920140 32 960 +353920144 2 960 +353920148 32 960 +353920152 2 960 +353920156 32 960 +353920160 2 960 +353920164 32 960 +353920168 2 960 +353920172 32 960 +353920176 2 960 +353920180 32 960 +353920184 2 960 +353920188 32 960 +353920192 2 960 +353920196 32 960 +353920200 2 960 +353920204 32 960 +353920208 2 960 +353920212 32 960 +353920216 2 960 +353920220 32 960 +353920224 2 960 +353920228 32 960 +353920232 2 960 +353920236 32 960 +353920240 2 960 +353920244 32 960 +353920248 2 960 +353920252 32 960 +353920256 2 960 +353920260 32 960 +353920264 2 960 +353920268 32 960 +353920272 2 960 +353920276 32 960 +353920280 2 960 +353920284 32 960 +353920288 2 960 +353924100 32 960 +353924104 2 960 +353924108 32 960 +353924112 2 960 +353924116 32 960 +353924120 2 960 +353924124 32 960 +353924128 2 960 +353924132 32 960 +353924136 2 960 +353924140 32 960 +353924144 2 960 +353924148 32 960 +353924152 2 960 +353924156 32 960 +353924160 2 960 +353924164 32 960 +353924168 2 960 +353924172 32 960 +353924176 2 960 +353924180 32 960 +353924184 2 960 +353924188 32 960 +353924192 2 960 +353924196 32 960 +353924200 2 960 +353924204 32 960 +353924208 2 960 +353924212 32 960 +353924216 2 960 +353924220 32 960 +353924224 2 960 +353924228 32 960 +353924232 2 960 +353924236 32 960 +353924240 2 960 +353924244 32 960 +353924248 2 960 +353924252 32 960 +353924256 2 960 +353924260 32 960 +353924264 2 960 +353924268 32 960 +353924272 2 960 +353924276 32 960 +353924280 2 960 +353924284 32 960 +353924288 2 960 +353924292 32 960 +353924296 2 960 +353924300 32 960 +353924304 2 960 +353924308 32 960 +353924312 2 960 +353924316 32 960 +353924320 2 960 +353924324 32 960 +353924328 2 960 +353924332 32 960 +353924336 2 960 +353924340 32 960 +353924344 2 960 +353924348 32 960 +353924352 2 960 +353924356 32 960 +353924360 2 960 +353924364 32 960 +353924368 2 960 +353924372 32 960 +353924376 2 960 +353924380 32 960 +353924384 2 960 +353928196 32 960 +353928200 2 960 +353928204 32 960 +353928208 2 960 +353928212 32 960 +353928216 2 960 +353928220 32 960 +353928224 2 960 +353928228 32 960 +353928232 2 960 +353928236 32 960 +353928240 2 960 +353928244 32 960 +353928248 2 960 +353928252 32 960 +353928256 2 960 +353928260 32 960 +353928264 2 960 +353928268 32 960 +353928272 2 960 +353928276 32 960 +353928280 2 960 +353928284 32 960 +353928288 2 960 +353928292 32 960 +353928296 2 960 +353928300 32 960 +353928304 2 960 +353928308 32 960 +353928312 2 960 +353928316 32 960 +353928320 2 960 +353928324 32 960 +353928328 2 960 +353928332 32 960 +353928336 2 960 +353928340 32 960 +353928344 2 960 +353928348 32 960 +353928352 2 960 +353928356 32 960 +353928360 2 960 +353928364 32 960 +353928368 2 960 +353928372 32 960 +353928376 2 960 +353928380 32 960 +353928384 2 960 +353928388 32 960 +353928392 2 960 +353928396 32 960 +353928400 2 960 +353928404 32 960 +353928408 2 960 +353928412 32 960 +353928416 2 960 +353928420 32 960 +353928424 2 960 +353928428 32 960 +353928432 2 960 +353928436 32 960 +353928440 2 960 +353928444 32 960 +353928448 2 960 +353928452 32 960 +353928456 2 960 +353928460 32 960 +353928464 2 960 +353928468 32 960 +353928472 2 960 +353928476 32 960 +353928480 2 960 +353928484 32 960 +353928488 2 960 +353928492 32 960 +353928496 2 960 +353928500 32 960 +353928504 2 960 +353928508 32 960 +353928512 2 960 +353932292 32 960 +353932296 2 960 +353932300 32 960 +353932304 2 960 +353932308 32 960 +353932312 2 960 +353932316 32 960 +353932320 2 960 +353932324 32 960 +353932328 2 960 +353932332 32 960 +353932336 2 960 +353932340 32 960 +353932344 2 960 +353932348 32 960 +353932352 2 960 +353932356 32 960 +353932360 2 960 +353932364 32 960 +353932368 2 960 +353932372 32 960 +353932376 2 960 +353932380 32 960 +353932384 2 960 +353932388 32 960 +353932392 2 960 +353932396 32 960 +353932400 2 960 +353932404 32 960 +353932408 2 960 +353932412 32 960 +353932416 2 960 +353932420 32 960 +353932424 2 960 +353932428 32 960 +353932432 2 960 +353932436 32 960 +353932440 2 960 +353932444 32 960 +353932448 2 960 +353932452 32 960 +353932456 2 960 +353932460 32 960 +353932464 2 960 +353932468 32 960 +353932472 2 960 +353932476 32 960 +353932480 2 960 +353932484 32 960 +353932488 2 960 +353932492 32 960 +353932496 2 960 +353932500 32 960 +353932504 2 960 +353932508 32 960 +353932512 2 960 +353932516 32 960 +353932520 2 960 +353932524 32 960 +353932528 2 960 +353932532 32 960 +353932536 2 960 +353932540 32 960 +353932544 2 960 +353932548 32 960 +353932552 2 960 +353932556 32 960 +353932560 2 960 +353932564 32 960 +353932568 2 960 +353932572 32 960 +353932576 2 960 +353932580 32 960 +353932584 2 960 +353932588 32 960 +353932592 2 960 +353932596 32 960 +353932600 2 960 +353932604 32 960 +353932608 2 960 +353936388 2 1016 +353936392 2 1016 +353936396 2 1016 +353936400 2 1016 +353936404 2 1016 +353936408 2 1016 +353936412 2 1016 +353936416 2 1016 +353936420 2 1016 +353936424 2 1016 +353936428 2 1016 +353936432 2 1016 +353936436 2 1016 +353936440 2 1016 +353936444 2 1016 +353936448 2 1016 +353936452 2 1016 +353936456 2 1016 +353936460 2 1016 +353936464 2 1016 +353936468 2 1016 +353936472 2 1016 +353936476 2 1016 +353936480 2 1016 +353936484 2 1016 +353936488 2 1016 +353936492 2 1016 +353936496 2 1016 +353936500 2 1016 +353936504 2 1016 +353936508 2 1016 +353936512 2 1016 +353936516 2 1016 +353936520 2 1016 +353936524 2 1016 +353936528 2 1016 +353936532 2 1016 +353936536 2 1016 +353936540 2 1016 +353936544 2 1016 +353936548 2 1016 +353936552 2 1016 +353936556 2 1016 +353936560 2 1016 +353936564 2 1016 +353936568 2 1016 +353936572 2 1016 +353936576 2 1016 +353936580 2 1016 +353936584 2 1016 +353936588 2 1016 +353936592 2 1016 +353936596 2 1016 +353936600 2 1016 +353936604 2 1016 +353936608 2 1016 +353936612 2 1016 +353936616 2 1016 +353936620 2 1016 +353936624 2 1016 +353936628 2 1016 +353936632 2 1016 +353936636 2 1016 +353936640 2 1016 +353936644 2 1016 +353936648 2 1016 +353936652 2 1016 +353936656 2 1016 +353936660 2 1016 +353936664 2 1016 +353936668 2 1016 +353936672 2 1016 +353936676 2 1016 +353936680 2 1016 +353936684 2 1016 +353936688 2 1016 +353936692 2 1016 +353936696 2 1016 +353936700 2 1016 +353936704 2 1016 +353936708 2 1016 +353936712 2 1016 +353936716 2 1016 +353936720 2 1016 +353936724 2 1016 +353936728 2 1016 +353936732 2 1016 +353936736 2 1016 +353936740 2 1016 +353936744 2 1016 +353936748 2 1016 +353936752 2 1016 +353936756 2 1016 +353936760 2 1016 +353936764 2 1016 +353936768 2 1016 +353936772 2 1016 +353936776 2 1016 +353936780 2 1016 +353936784 2 1016 +353936788 2 1016 +353936792 2 1016 +353936796 2 1016 +353936800 2 1016 +353940484 2 1016 +353940488 2 1016 +353940492 2 1016 +353940496 2 1016 +353940500 2 1016 +353940504 2 1016 +353940508 2 1016 +353940512 2 1016 +353940516 2 1016 +353940520 2 1016 +353940524 2 1016 +353940528 2 1016 +353940532 2 1016 +353940536 2 1016 +353940540 2 1016 +353940544 2 1016 +353940548 2 1016 +353940552 2 1016 +353940556 2 1016 +353940560 2 1016 +353940564 2 1016 +353940568 2 1016 +353940572 2 1016 +353940576 2 1016 +353940580 2 1016 +353940584 2 1016 +353940588 2 1016 +353940592 2 1016 +353940596 2 1016 +353940600 2 1016 +353940604 2 1016 +353940608 2 1016 +353940612 2 1016 +353940616 2 1016 +353940620 2 1016 +353940624 2 1016 +353940628 2 1016 +353940632 2 1016 +353940636 2 1016 +353940640 2 1016 +353940644 2 1016 +353940648 2 1016 +353940652 2 1016 +353940656 2 1016 +353940660 2 1016 +353940664 2 1016 +353940668 2 1016 +353940672 2 1016 +353940676 2 1016 +353940680 2 1016 +353940684 2 1016 +353940688 2 1016 +353940692 2 1016 +353940696 2 1016 +353940700 2 1016 +353940704 2 1016 +353940708 2 1016 +353940712 2 1016 +353940716 2 1016 +353940720 2 1016 +353940724 2 1016 +353940728 2 1016 +353940732 2 1016 +353940736 2 1016 +353940740 2 1016 +353940744 2 1016 +353940748 2 1016 +353940752 2 1016 +353940756 2 1016 +353940760 2 1016 +353940764 2 1016 +353940768 2 1016 +353940772 2 1016 +353940776 2 1016 +353940780 2 1016 +353940784 2 1016 +353940788 2 1016 +353940792 2 1016 +353940796 2 1016 +353940800 2 1016 +353940804 2 1016 +353940808 2 1016 +353940812 2 1016 +353940816 2 1016 +353940820 2 1016 +353940824 2 1016 +353940828 2 1016 +353940832 2 1016 +353940836 2 1016 +353940840 2 1016 +353940844 2 1016 +353940848 2 1016 +353940852 2 1016 +353940856 2 1016 +353940860 2 1016 +353940864 2 1016 +353940868 2 1016 +353940872 2 1016 +353940876 2 1016 +353940880 2 1016 +353940884 2 1016 +353940888 2 1016 +353940892 2 1016 +353940896 2 1016 +353940900 2 1016 +353940904 2 1016 +353940908 2 1016 +353940912 2 1016 +353940916 2 1016 +353940920 2 1016 +353940924 2 1016 +353940928 2 1016 +353944580 2 1016 +353944584 2 1016 +353944588 2 1016 +353944592 2 1016 +353944596 2 1016 +353944600 2 1016 +353944604 2 1016 +353944608 2 1016 +353944612 2 1016 +353944616 2 1016 +353944620 2 1016 +353944624 2 1016 +353944628 2 1016 +353944632 2 1016 +353944636 2 1016 +353944640 2 1016 +353944644 2 1016 +353944648 2 1016 +353944652 2 1016 +353944656 2 1016 +353944660 2 1016 +353944664 2 1016 +353944668 2 1016 +353944672 2 1016 +353944676 2 1016 +353944680 2 1016 +353944684 2 1016 +353944688 2 1016 +353944692 2 1016 +353944696 2 1016 +353944700 2 1016 +353944704 2 1016 +353944708 2 1016 +353944712 2 1016 +353944716 2 1016 +353944720 2 1016 +353944724 2 1016 +353944728 2 1016 +353944732 2 1016 +353944736 2 1016 +353944740 2 1016 +353944744 2 1016 +353944748 2 1016 +353944752 2 1016 +353944756 2 1016 +353944760 2 1016 +353944764 2 1016 +353944768 2 1016 +353944772 2 1016 +353944776 2 1016 +353944780 2 1016 +353944784 2 1016 +353944788 2 1016 +353944792 2 1016 +353944796 2 1016 +353944800 2 1016 +353944804 2 1016 +353944808 2 1016 +353944812 2 1016 +353944816 2 1016 +353944820 2 1016 +353944824 2 1016 +353944828 2 1016 +353944832 2 1016 +353944836 2 1016 +353944840 2 1016 +353944844 2 1016 +353944848 2 1016 +353944852 2 1016 +353944856 2 1016 +353944860 2 1016 +353944864 2 1016 +353944868 2 1016 +353944872 2 1016 +353944876 2 1016 +353944880 2 1016 +353944884 2 1016 +353944888 2 1016 +353944892 2 1016 +353944896 2 1016 +353944900 2 1016 +353944904 2 1016 +353944908 2 1016 +353944912 2 1016 +353944916 2 1016 +353944920 2 1016 +353944924 2 1016 +353944928 2 1016 +353944932 2 1016 +353944936 2 1016 +353944940 2 1016 +353944944 2 1016 +353944948 2 1016 +353944952 2 1016 +353944956 2 1016 +353944960 2 1016 +353944964 2 1016 +353944968 2 1016 +353944972 2 1016 +353944976 2 1016 +353944980 2 1016 +353944984 2 1016 +353944988 2 1016 +353944992 2 1016 +353944996 2 1016 +353945000 2 1016 +353945004 2 1016 +353945008 2 1016 +353945012 2 1016 +353945016 2 1016 +353945020 2 1016 +353945024 2 1016 +353945028 2 1016 +353945032 2 1016 +353945036 2 1016 +353945040 2 1016 +353945044 2 1016 +353945048 2 1016 +353945052 2 1016 +353945056 2 1016 +353945060 2 1016 +353945064 2 1016 +353945068 2 1016 +353945072 2 1016 +353945076 2 1016 +353945080 2 1016 +353945084 2 1016 +353945088 2 1016 +353948676 2 1016 +353948680 2 1016 +353948684 2 1016 +353948688 2 1016 +353948692 2 1016 +353948696 2 1016 +353948700 2 1016 +353948704 2 1016 +353948708 2 1016 +353948712 2 1016 +353948716 2 1016 +353948720 2 1016 +353948724 2 1016 +353948728 2 1016 +353948732 2 1016 +353948736 2 1016 +353948740 2 1016 +353948744 2 1016 +353948748 2 1016 +353948752 2 1016 +353948756 2 1016 +353948760 2 1016 +353948764 2 1016 +353948768 2 1016 +353948772 2 1016 +353948776 2 1016 +353948780 2 1016 +353948784 2 1016 +353948788 2 1016 +353948792 2 1016 +353948796 2 1016 +353948800 2 1016 +353948804 2 1016 +353948808 2 1016 +353948812 2 1016 +353948816 2 1016 +353948820 2 1016 +353948824 2 1016 +353948828 2 1016 +353948832 2 1016 +353948836 2 1016 +353948840 2 1016 +353948844 2 1016 +353948848 2 1016 +353948852 2 1016 +353948856 2 1016 +353948860 2 1016 +353948864 2 1016 +353948868 2 1016 +353948872 2 1016 +353948876 2 1016 +353948880 2 1016 +353948884 2 1016 +353948888 2 1016 +353948892 2 1016 +353948896 2 1016 +353948900 2 1016 +353948904 2 1016 +353948908 2 1016 +353948912 2 1016 +353948916 2 1016 +353948920 2 1016 +353948924 2 1016 +353948928 2 1016 +353948932 2 1016 +353948936 2 1016 +353948940 2 1016 +353948944 2 1016 +353948948 2 1016 +353948952 2 1016 +353948956 2 1016 +353948960 2 1016 +353948964 2 1016 +353948968 2 1016 +353948972 2 1016 +353948976 2 1016 +353948980 2 1016 +353948984 2 1016 +353948988 2 1016 +353948992 2 1016 +353948996 2 1016 +353949000 2 1016 +353949004 2 1016 +353949008 2 1016 +353949012 2 1016 +353949016 2 1016 +353949020 2 1016 +353949024 2 1016 +353949028 2 1016 +353949032 2 1016 +353949036 2 1016 +353949040 2 1016 +353949044 2 1016 +353949048 2 1016 +353949052 2 1016 +353949056 2 1016 +353949060 2 1016 +353949064 2 1016 +353949068 2 1016 +353949072 2 1016 +353949076 2 1016 +353949080 2 1016 +353949084 2 1016 +353949088 2 1016 +353949092 2 1016 +353949096 2 1016 +353949100 2 1016 +353949104 2 1016 +353949108 2 1016 +353949112 2 1016 +353949116 2 1016 +353949120 2 1016 +353949124 2 1016 +353949128 2 1016 +353949132 2 1016 +353949136 2 1016 +353949140 2 1016 +353949144 2 1016 +353949148 2 1016 +353949152 2 1016 +353949156 2 1016 +353949160 2 1016 +353949164 2 1016 +353949168 2 1016 +353949172 2 1016 +353949176 2 1016 +353949180 2 1016 +353949184 2 1016 +353949188 2 1016 +353949192 2 1016 +353949196 2 1016 +353949200 2 1016 +353949204 2 1016 +353949208 2 1016 +353949212 2 1016 +353949216 2 1016 +353952772 2 1016 +353952776 2 1016 +353952780 2 1016 +353952784 2 1016 +353952788 2 1016 +353952792 2 1016 +353952796 2 1016 +353952800 2 1016 +353952804 2 1016 +353952808 2 1016 +353952812 2 1016 +353952816 2 1016 +353952820 2 1016 +353952824 2 1016 +353952828 2 1016 +353952832 2 1016 +353952836 2 1016 +353952840 2 1016 +353952844 2 1016 +353952848 2 1016 +353952852 2 1016 +353952856 2 1016 +353952860 2 1016 +353952864 2 1016 +353952868 2 1016 +353952872 2 1016 +353952876 2 1016 +353952880 2 1016 +353952884 2 1016 +353952888 2 1016 +353952892 2 1016 +353952896 2 1016 +353952900 2 1016 +353952904 2 1016 +353952908 2 1016 +353952912 2 1016 +353952916 2 1016 +353952920 2 1016 +353952924 2 1016 +353952928 2 1016 +353952932 2 1016 +353952936 2 1016 +353952940 2 1016 +353952944 2 1016 +353952948 2 1016 +353952952 2 1016 +353952956 2 1016 +353952960 2 1016 +353952964 2 1016 +353952968 2 1016 +353952972 2 1016 +353952976 2 1016 +353952980 2 1016 +353952984 2 1016 +353952988 2 1016 +353952992 2 1016 +353952996 2 1016 +353953000 2 1016 +353953004 2 1016 +353953008 2 1016 +353953012 2 1016 +353953016 2 1016 +353953020 2 1016 +353953024 2 1016 +353953028 2 1016 +353953032 2 1016 +353953036 2 1016 +353953040 2 1016 +353953044 2 1016 +353953048 2 1016 +353953052 2 1016 +353953056 2 1016 +353953060 2 1016 +353953064 2 1016 +353953068 2 1016 +353953072 2 1016 +353953076 2 1016 +353953080 2 1016 +353953084 2 1016 +353953088 2 1016 +353953092 2 1016 +353953096 2 1016 +353953100 2 1016 +353953104 2 1016 +353953108 2 1016 +353953112 2 1016 +353953116 2 1016 +353953120 2 1016 +353953124 2 1016 +353953128 2 1016 +353953132 2 1016 +353953136 2 1016 +353953140 2 1016 +353953144 2 1016 +353953148 2 1016 +353953152 2 1016 +353953156 2 1016 +353953160 2 1016 +353953164 2 1016 +353953168 2 1016 +353953172 2 1016 +353953176 2 1016 +353953180 2 1016 +353953184 2 1016 +353953188 2 1016 +353953192 2 1016 +353953196 2 1016 +353953200 2 1016 +353953204 2 1016 +353953208 2 1016 +353953212 2 1016 +353953216 2 1016 +353953220 2 1016 +353953224 2 1016 +353953228 2 1016 +353953232 2 1016 +353953236 2 1016 +353953240 2 1016 +353953244 2 1016 +353953248 2 1016 +353953252 2 1016 +353953256 2 1016 +353953260 2 1016 +353953264 2 1016 +353953268 2 1016 +353953272 2 1016 +353953276 2 1016 +353953280 2 1016 +353953284 2 1016 +353953288 2 1016 +353953292 2 1016 +353953296 2 1016 +353953300 2 1016 +353953304 2 1016 +353953308 2 1016 +353953312 2 1016 +353953316 2 1016 +353953320 2 1016 +353953324 2 1016 +353953328 2 1016 +353953332 2 1016 +353953336 2 1016 +353953340 2 1016 +353953344 2 1016 +353953348 2 1016 +353953352 2 1016 +353953356 2 1016 +353953360 2 1016 +353953364 2 1016 +353953368 2 1016 +353953372 2 1016 +353953376 2 1016 +353956868 2 1016 +353956872 2 1016 +353956876 2 1016 +353956880 2 1016 +353956884 2 1016 +353956888 2 1016 +353956892 2 1016 +353956896 2 1016 +353956900 2 1016 +353956904 2 1016 +353956908 2 1016 +353956912 2 1016 +353956916 2 1016 +353956920 2 1016 +353956924 2 1016 +353956928 2 1016 +353956932 2 1016 +353956936 2 1016 +353956940 2 1016 +353956944 2 1016 +353956948 2 1016 +353956952 2 1016 +353956956 2 1016 +353956960 2 1016 +353956964 2 1016 +353956968 2 1016 +353956972 2 1016 +353956976 2 1016 +353956980 2 1016 +353956984 2 1016 +353956988 2 1016 +353956992 2 1016 +353956996 2 1016 +353957000 2 1016 +353957004 2 1016 +353957008 2 1016 +353957012 2 1016 +353957016 2 1016 +353957020 2 1016 +353957024 2 1016 +353957028 2 1016 +353957032 2 1016 +353957036 2 1016 +353957040 2 1016 +353957044 2 1016 +353957048 2 1016 +353957052 2 1016 +353957056 2 1016 +353957060 2 1016 +353957064 2 1016 +353957068 2 1016 +353957072 2 1016 +353957076 2 1016 +353957080 2 1016 +353957084 2 1016 +353957088 2 1016 +353957092 2 1016 +353957096 2 1016 +353957100 2 1016 +353957104 2 1016 +353957108 2 1016 +353957112 2 1016 +353957116 2 1016 +353957120 2 1016 +353957124 2 1016 +353957128 2 1016 +353957132 2 1016 +353957136 2 1016 +353957140 2 1016 +353957144 2 1016 +353957148 2 1016 +353957152 2 1016 +353957156 2 1016 +353957160 2 1016 +353957164 2 1016 +353957168 2 1016 +353957172 2 1016 +353957176 2 1016 +353957180 2 1016 +353957184 2 1016 +353957188 2 1016 +353957192 2 1016 +353957196 2 1016 +353957200 2 1016 +353957204 2 1016 +353957208 2 1016 +353957212 2 1016 +353957216 2 1016 +353957220 2 1016 +353957224 2 1016 +353957228 2 1016 +353957232 2 1016 +353957236 2 1016 +353957240 2 1016 +353957244 2 1016 +353957248 2 1016 +353957252 2 1016 +353957256 2 1016 +353957260 2 1016 +353957264 2 1016 +353957268 2 1016 +353957272 2 1016 +353957276 2 1016 +353957280 2 1016 +353957284 2 1016 +353957288 2 1016 +353957292 2 1016 +353957296 2 1016 +353957300 2 1016 +353957304 2 1016 +353957308 2 1016 +353957312 2 1016 +353957316 2 1016 +353957320 2 1016 +353957324 2 1016 +353957328 2 1016 +353957332 2 1016 +353957336 2 1016 +353957340 2 1016 +353957344 2 1016 +353957348 2 1016 +353957352 2 1016 +353957356 2 1016 +353957360 2 1016 +353957364 2 1016 +353957368 2 1016 +353957372 2 1016 +353957376 2 1016 +353957380 2 1016 +353957384 2 1016 +353957388 2 1016 +353957392 2 1016 +353957396 2 1016 +353957400 2 1016 +353957404 2 1016 +353957408 2 1016 +353957412 2 1016 +353957416 2 1016 +353957420 2 1016 +353957424 2 1016 +353957428 2 1016 +353957432 2 1016 +353957436 2 1016 +353957440 2 1016 +353957444 2 1016 +353957448 2 1016 +353957452 2 1016 +353957456 2 1016 +353957460 2 1016 +353957464 2 1016 +353957468 2 1016 +353957472 2 1016 +353957476 2 1016 +353957480 2 1016 +353957484 2 1016 +353957488 2 1016 +353957492 2 1016 +353957496 2 1016 +353957500 2 1016 +353957504 2 1016 +354161668 32 960 +354161672 2 960 +354161676 32 960 +354161680 2 960 +354161684 32 960 +354161688 2 960 +354161692 32 960 +354161696 2 960 +354161700 32 960 +354161704 2 960 +354161708 32 960 +354161712 2 960 +354161716 32 960 +354161720 2 960 +354161724 32 960 +354161728 2 960 +354161732 32 960 +354161736 2 960 +354161740 32 960 +354161744 2 960 +354161748 32 960 +354161752 2 960 +354161756 32 960 +354161760 2 960 +354161764 32 960 +354161768 2 960 +354161772 32 960 +354161776 2 960 +354161780 32 960 +354161784 2 960 +354161788 32 960 +354161792 2 960 +354161796 32 960 +354161800 2 960 +354161804 32 960 +354161808 2 960 +354161812 32 960 +354161816 2 960 +354161820 32 960 +354161824 2 960 +354165764 32 960 +354165768 2 960 +354165772 32 960 +354165776 2 960 +354165780 32 960 +354165784 2 960 +354165788 32 960 +354165792 2 960 +354165796 32 960 +354165800 2 960 +354165804 32 960 +354165808 2 960 +354165812 32 960 +354165816 2 960 +354165820 32 960 +354165824 2 960 +354165828 32 960 +354165832 2 960 +354165836 32 960 +354165840 2 960 +354165844 32 960 +354165848 2 960 +354165852 32 960 +354165856 2 960 +354165860 32 960 +354165864 2 960 +354165868 32 960 +354165872 2 960 +354165876 32 960 +354165880 2 960 +354165884 32 960 +354165888 2 960 +354165892 32 960 +354165896 2 960 +354165900 32 960 +354165904 2 960 +354165908 32 960 +354165912 2 960 +354165916 32 960 +354165920 2 960 +354165924 32 960 +354165928 2 960 +354165932 32 960 +354165936 2 960 +354165940 32 960 +354165944 2 960 +354165948 32 960 +354165952 2 960 +354169860 32 960 +354169864 2 960 +354169868 32 960 +354169872 2 960 +354169876 32 960 +354169880 2 960 +354169884 32 960 +354169888 2 960 +354169892 32 960 +354169896 2 960 +354169900 32 960 +354169904 2 960 +354169908 32 960 +354169912 2 960 +354169916 32 960 +354169920 2 960 +354169924 32 960 +354169928 2 960 +354169932 32 960 +354169936 2 960 +354169940 32 960 +354169944 2 960 +354169948 32 960 +354169952 2 960 +354169956 32 960 +354169960 2 960 +354169964 32 960 +354169968 2 960 +354169972 32 960 +354169976 2 960 +354169980 32 960 +354169984 2 960 +354169988 32 960 +354169992 2 960 +354169996 32 960 +354170000 2 960 +354170004 32 960 +354170008 2 960 +354170012 32 960 +354170016 2 960 +354170020 32 960 +354170024 2 960 +354170028 32 960 +354170032 2 960 +354170036 32 960 +354170040 2 960 +354170044 32 960 +354170048 2 960 +354170052 32 960 +354170056 2 960 +354170060 32 960 +354170064 2 960 +354170068 32 960 +354170072 2 960 +354170076 32 960 +354170080 2 960 +354173956 32 960 +354173960 2 960 +354173964 32 960 +354173968 2 960 +354173972 32 960 +354173976 2 960 +354173980 32 960 +354173984 2 960 +354173988 32 960 +354173992 2 960 +354173996 32 960 +354174000 2 960 +354174004 32 960 +354174008 2 960 +354174012 32 960 +354174016 2 960 +354174020 32 960 +354174024 2 960 +354174028 32 960 +354174032 2 960 +354174036 32 960 +354174040 2 960 +354174044 32 960 +354174048 2 960 +354174052 32 960 +354174056 2 960 +354174060 32 960 +354174064 2 960 +354174068 32 960 +354174072 2 960 +354174076 32 960 +354174080 2 960 +354174084 32 960 +354174088 2 960 +354174092 32 960 +354174096 2 960 +354174100 32 960 +354174104 2 960 +354174108 32 960 +354174112 2 960 +354174116 32 960 +354174120 2 960 +354174124 32 960 +354174128 2 960 +354174132 32 960 +354174136 2 960 +354174140 32 960 +354174144 2 960 +354174148 32 960 +354174152 2 960 +354174156 32 960 +354174160 2 960 +354174164 32 960 +354174168 2 960 +354174172 32 960 +354174176 2 960 +354178052 32 960 +354178056 2 960 +354178060 32 960 +354178064 2 960 +354178068 32 960 +354178072 2 960 +354178076 32 960 +354178080 2 960 +354178084 32 960 +354178088 2 960 +354178092 32 960 +354178096 2 960 +354178100 32 960 +354178104 2 960 +354178108 32 960 +354178112 2 960 +354178116 32 960 +354178120 2 960 +354178124 32 960 +354178128 2 960 +354178132 32 960 +354178136 2 960 +354178140 32 960 +354178144 2 960 +354178148 32 960 +354178152 2 960 +354178156 32 960 +354178160 2 960 +354178164 32 960 +354178168 2 960 +354178172 32 960 +354178176 2 960 +354178180 32 960 +354178184 2 960 +354178188 32 960 +354178192 2 960 +354178196 32 960 +354178200 2 960 +354178204 32 960 +354178208 2 960 +354178212 32 960 +354178216 2 960 +354178220 32 960 +354178224 2 960 +354178228 32 960 +354178232 2 960 +354178236 32 960 +354178240 2 960 +354178244 32 960 +354178248 2 960 +354178252 32 960 +354178256 2 960 +354178260 32 960 +354178264 2 960 +354178268 32 960 +354178272 2 960 +354178276 32 960 +354178280 2 960 +354178284 32 960 +354178288 2 960 +354178292 32 960 +354178296 2 960 +354178300 32 960 +354178304 2 960 +354182148 32 960 +354182152 2 960 +354182156 32 960 +354182160 2 960 +354182164 32 960 +354182168 2 960 +354182172 32 960 +354182176 2 960 +354182180 32 960 +354182184 2 960 +354182188 32 960 +354182192 2 960 +354182196 32 960 +354182200 2 960 +354182204 32 960 +354182208 2 960 +354182212 32 960 +354182216 2 960 +354182220 32 960 +354182224 2 960 +354182228 32 960 +354182232 2 960 +354182236 32 960 +354182240 2 960 +354182244 32 960 +354182248 2 960 +354182252 32 960 +354182256 2 960 +354182260 32 960 +354182264 2 960 +354182268 32 960 +354182272 2 960 +354182276 32 960 +354182280 2 960 +354182284 32 960 +354182288 2 960 +354182292 32 960 +354182296 2 960 +354182300 32 960 +354182304 2 960 +354182308 32 960 +354182312 2 960 +354182316 32 960 +354182320 2 960 +354182324 32 960 +354182328 2 960 +354182332 32 960 +354182336 2 960 +354182340 32 960 +354182344 2 960 +354182348 32 960 +354182352 2 960 +354182356 32 960 +354182360 2 960 +354182364 32 960 +354182368 2 960 +354182372 32 960 +354182376 2 960 +354182380 32 960 +354182384 2 960 +354182388 32 960 +354182392 2 960 +354182396 32 960 +354182400 2 960 +354182404 32 960 +354182408 2 960 +354182412 32 960 +354182416 2 960 +354182420 32 960 +354182424 2 960 +354182428 32 960 +354182432 2 960 +354186244 32 960 +354186248 2 960 +354186252 32 960 +354186256 2 960 +354186260 32 960 +354186264 2 960 +354186268 32 960 +354186272 2 960 +354186276 32 960 +354186280 2 960 +354186284 32 960 +354186288 2 960 +354186292 32 960 +354186296 2 960 +354186300 32 960 +354186304 2 960 +354186308 32 960 +354186312 2 960 +354186316 32 960 +354186320 2 960 +354186324 32 960 +354186328 2 960 +354186332 32 960 +354186336 2 960 +354186340 32 960 +354186344 2 960 +354186348 32 960 +354186352 2 960 +354186356 32 960 +354186360 2 960 +354186364 32 960 +354186368 2 960 +354186372 32 960 +354186376 2 960 +354186380 32 960 +354186384 2 960 +354186388 32 960 +354186392 2 960 +354186396 32 960 +354186400 2 960 +354186404 32 960 +354186408 2 960 +354186412 32 960 +354186416 2 960 +354186420 32 960 +354186424 2 960 +354186428 32 960 +354186432 2 960 +354186436 32 960 +354186440 2 960 +354186444 32 960 +354186448 2 960 +354186452 32 960 +354186456 2 960 +354186460 32 960 +354186464 2 960 +354186468 32 960 +354186472 2 960 +354186476 32 960 +354186480 2 960 +354186484 32 960 +354186488 2 960 +354186492 32 960 +354186496 2 960 +354186500 32 960 +354186504 2 960 +354186508 32 960 +354186512 2 960 +354186516 32 960 +354186520 2 960 +354186524 32 960 +354186528 2 960 +354190340 32 960 +354190344 2 960 +354190348 32 960 +354190352 2 960 +354190356 32 960 +354190360 2 960 +354190364 32 960 +354190368 2 960 +354190372 32 960 +354190376 2 960 +354190380 32 960 +354190384 2 960 +354190388 32 960 +354190392 2 960 +354190396 32 960 +354190400 2 960 +354190404 32 960 +354190408 2 960 +354190412 32 960 +354190416 2 960 +354190420 32 960 +354190424 2 960 +354190428 32 960 +354190432 2 960 +354190436 32 960 +354190440 2 960 +354190444 32 960 +354190448 2 960 +354190452 32 960 +354190456 2 960 +354190460 32 960 +354190464 2 960 +354190468 32 960 +354190472 2 960 +354190476 32 960 +354190480 2 960 +354190484 32 960 +354190488 2 960 +354190492 32 960 +354190496 2 960 +354190500 32 960 +354190504 2 960 +354190508 32 960 +354190512 2 960 +354190516 32 960 +354190520 2 960 +354190524 32 960 +354190528 2 960 +354190532 32 960 +354190536 2 960 +354190540 32 960 +354190544 2 960 +354190548 32 960 +354190552 2 960 +354190556 32 960 +354190560 2 960 +354190564 32 960 +354190568 2 960 +354190572 32 960 +354190576 2 960 +354190580 32 960 +354190584 2 960 +354190588 32 960 +354190592 2 960 +354190596 32 960 +354190600 2 960 +354190604 32 960 +354190608 2 960 +354190612 32 960 +354190616 2 960 +354190620 32 960 +354190624 2 960 +354190628 32 960 +354190632 2 960 +354190636 32 960 +354190640 2 960 +354190644 32 960 +354190648 2 960 +354190652 32 960 +354190656 2 960 +354194436 32 960 +354194440 2 960 +354194444 32 960 +354194448 2 960 +354194452 32 960 +354194456 2 960 +354194460 32 960 +354194464 2 960 +354194468 32 960 +354194472 2 960 +354194476 32 960 +354194480 2 960 +354194484 32 960 +354194488 2 960 +354194492 32 960 +354194496 2 960 +354194500 32 960 +354194504 2 960 +354194508 32 960 +354194512 2 960 +354194516 32 960 +354194520 2 960 +354194524 32 960 +354194528 2 960 +354194532 32 960 +354194536 2 960 +354194540 32 960 +354194544 2 960 +354194548 32 960 +354194552 2 960 +354194556 32 960 +354194560 2 960 +354194564 32 960 +354194568 2 960 +354194572 32 960 +354194576 2 960 +354194580 32 960 +354194584 2 960 +354194588 32 960 +354194592 2 960 +354194596 32 960 +354194600 2 960 +354194604 32 960 +354194608 2 960 +354194612 32 960 +354194616 2 960 +354194620 32 960 +354194624 2 960 +354194628 32 960 +354194632 2 960 +354194636 32 960 +354194640 2 960 +354194644 32 960 +354194648 2 960 +354194652 32 960 +354194656 2 960 +354194660 32 960 +354194664 2 960 +354194668 32 960 +354194672 2 960 +354194676 32 960 +354194680 2 960 +354194684 32 960 +354194688 2 960 +354194692 32 960 +354194696 2 960 +354194700 32 960 +354194704 2 960 +354194708 32 960 +354194712 2 960 +354194716 32 960 +354194720 2 960 +354194724 32 960 +354194728 2 960 +354194732 32 960 +354194736 2 960 +354194740 32 960 +354194744 2 960 +354194748 32 960 +354194752 2 960 +354198532 2 1016 +354198536 2 1016 +354198540 2 1016 +354198544 2 1016 +354198548 2 1016 +354198552 2 1016 +354198556 2 1016 +354198560 2 1016 +354198564 2 1016 +354198568 2 1016 +354198572 2 1016 +354198576 2 1016 +354198580 2 1016 +354198584 2 1016 +354198588 2 1016 +354198592 2 1016 +354198596 2 1016 +354198600 2 1016 +354198604 2 1016 +354198608 2 1016 +354198612 2 1016 +354198616 2 1016 +354198620 2 1016 +354198624 2 1016 +354198628 2 1016 +354198632 2 1016 +354198636 2 1016 +354198640 2 1016 +354198644 2 1016 +354198648 2 1016 +354198652 2 1016 +354198656 2 1016 +354198660 2 1016 +354198664 2 1016 +354198668 2 1016 +354198672 2 1016 +354198676 2 1016 +354198680 2 1016 +354198684 2 1016 +354198688 2 1016 +354198692 2 1016 +354198696 2 1016 +354198700 2 1016 +354198704 2 1016 +354198708 2 1016 +354198712 2 1016 +354198716 2 1016 +354198720 2 1016 +354198724 2 1016 +354198728 2 1016 +354198732 2 1016 +354198736 2 1016 +354198740 2 1016 +354198744 2 1016 +354198748 2 1016 +354198752 2 1016 +354198756 2 1016 +354198760 2 1016 +354198764 2 1016 +354198768 2 1016 +354198772 2 1016 +354198776 2 1016 +354198780 2 1016 +354198784 2 1016 +354198788 2 1016 +354198792 2 1016 +354198796 2 1016 +354198800 2 1016 +354198804 2 1016 +354198808 2 1016 +354198812 2 1016 +354198816 2 1016 +354198820 2 1016 +354198824 2 1016 +354198828 2 1016 +354198832 2 1016 +354198836 2 1016 +354198840 2 1016 +354198844 2 1016 +354198848 2 1016 +354198852 2 1016 +354198856 2 1016 +354198860 2 1016 +354198864 2 1016 +354198868 2 1016 +354198872 2 1016 +354198876 2 1016 +354198880 2 1016 +354198884 2 1016 +354198888 2 1016 +354198892 2 1016 +354198896 2 1016 +354198900 2 1016 +354198904 2 1016 +354198908 2 1016 +354198912 2 1016 +354198916 2 1016 +354198920 2 1016 +354198924 2 1016 +354198928 2 1016 +354198932 2 1016 +354198936 2 1016 +354198940 2 1016 +354198944 2 1016 +354202628 2 1016 +354202632 2 1016 +354202636 2 1016 +354202640 2 1016 +354202644 2 1016 +354202648 2 1016 +354202652 2 1016 +354202656 2 1016 +354202660 2 1016 +354202664 2 1016 +354202668 2 1016 +354202672 2 1016 +354202676 2 1016 +354202680 2 1016 +354202684 2 1016 +354202688 2 1016 +354202692 2 1016 +354202696 2 1016 +354202700 2 1016 +354202704 2 1016 +354202708 2 1016 +354202712 2 1016 +354202716 2 1016 +354202720 2 1016 +354202724 2 1016 +354202728 2 1016 +354202732 2 1016 +354202736 2 1016 +354202740 2 1016 +354202744 2 1016 +354202748 2 1016 +354202752 2 1016 +354202756 2 1016 +354202760 2 1016 +354202764 2 1016 +354202768 2 1016 +354202772 2 1016 +354202776 2 1016 +354202780 2 1016 +354202784 2 1016 +354202788 2 1016 +354202792 2 1016 +354202796 2 1016 +354202800 2 1016 +354202804 2 1016 +354202808 2 1016 +354202812 2 1016 +354202816 2 1016 +354202820 2 1016 +354202824 2 1016 +354202828 2 1016 +354202832 2 1016 +354202836 2 1016 +354202840 2 1016 +354202844 2 1016 +354202848 2 1016 +354202852 2 1016 +354202856 2 1016 +354202860 2 1016 +354202864 2 1016 +354202868 2 1016 +354202872 2 1016 +354202876 2 1016 +354202880 2 1016 +354202884 2 1016 +354202888 2 1016 +354202892 2 1016 +354202896 2 1016 +354202900 2 1016 +354202904 2 1016 +354202908 2 1016 +354202912 2 1016 +354202916 2 1016 +354202920 2 1016 +354202924 2 1016 +354202928 2 1016 +354202932 2 1016 +354202936 2 1016 +354202940 2 1016 +354202944 2 1016 +354202948 2 1016 +354202952 2 1016 +354202956 2 1016 +354202960 2 1016 +354202964 2 1016 +354202968 2 1016 +354202972 2 1016 +354202976 2 1016 +354202980 2 1016 +354202984 2 1016 +354202988 2 1016 +354202992 2 1016 +354202996 2 1016 +354203000 2 1016 +354203004 2 1016 +354203008 2 1016 +354203012 2 1016 +354203016 2 1016 +354203020 2 1016 +354203024 2 1016 +354203028 2 1016 +354203032 2 1016 +354203036 2 1016 +354203040 2 1016 +354203044 2 1016 +354203048 2 1016 +354203052 2 1016 +354203056 2 1016 +354203060 2 1016 +354203064 2 1016 +354203068 2 1016 +354203072 2 1016 +354206724 2 1016 +354206728 2 1016 +354206732 2 1016 +354206736 2 1016 +354206740 2 1016 +354206744 2 1016 +354206748 2 1016 +354206752 2 1016 +354206756 2 1016 +354206760 2 1016 +354206764 2 1016 +354206768 2 1016 +354206772 2 1016 +354206776 2 1016 +354206780 2 1016 +354206784 2 1016 +354206788 2 1016 +354206792 2 1016 +354206796 2 1016 +354206800 2 1016 +354206804 2 1016 +354206808 2 1016 +354206812 2 1016 +354206816 2 1016 +354206820 2 1016 +354206824 2 1016 +354206828 2 1016 +354206832 2 1016 +354206836 2 1016 +354206840 2 1016 +354206844 2 1016 +354206848 2 1016 +354206852 2 1016 +354206856 2 1016 +354206860 2 1016 +354206864 2 1016 +354206868 2 1016 +354206872 2 1016 +354206876 2 1016 +354206880 2 1016 +354206884 2 1016 +354206888 2 1016 +354206892 2 1016 +354206896 2 1016 +354206900 2 1016 +354206904 2 1016 +354206908 2 1016 +354206912 2 1016 +354206916 2 1016 +354206920 2 1016 +354206924 2 1016 +354206928 2 1016 +354206932 2 1016 +354206936 2 1016 +354206940 2 1016 +354206944 2 1016 +354206948 2 1016 +354206952 2 1016 +354206956 2 1016 +354206960 2 1016 +354206964 2 1016 +354206968 2 1016 +354206972 2 1016 +354206976 2 1016 +354206980 2 1016 +354206984 2 1016 +354206988 2 1016 +354206992 2 1016 +354206996 2 1016 +354207000 2 1016 +354207004 2 1016 +354207008 2 1016 +354207012 2 1016 +354207016 2 1016 +354207020 2 1016 +354207024 2 1016 +354207028 2 1016 +354207032 2 1016 +354207036 2 1016 +354207040 2 1016 +354207044 2 1016 +354207048 2 1016 +354207052 2 1016 +354207056 2 1016 +354207060 2 1016 +354207064 2 1016 +354207068 2 1016 +354207072 2 1016 +354207076 2 1016 +354207080 2 1016 +354207084 2 1016 +354207088 2 1016 +354207092 2 1016 +354207096 2 1016 +354207100 2 1016 +354207104 2 1016 +354207108 2 1016 +354207112 2 1016 +354207116 2 1016 +354207120 2 1016 +354207124 2 1016 +354207128 2 1016 +354207132 2 1016 +354207136 2 1016 +354207140 2 1016 +354207144 2 1016 +354207148 2 1016 +354207152 2 1016 +354207156 2 1016 +354207160 2 1016 +354207164 2 1016 +354207168 2 1016 +354207172 2 1016 +354207176 2 1016 +354207180 2 1016 +354207184 2 1016 +354207188 2 1016 +354207192 2 1016 +354207196 2 1016 +354207200 2 1016 +354207204 2 1016 +354207208 2 1016 +354207212 2 1016 +354207216 2 1016 +354207220 2 1016 +354207224 2 1016 +354207228 2 1016 +354207232 2 1016 +354210820 2 1016 +354210824 2 1016 +354210828 2 1016 +354210832 2 1016 +354210836 2 1016 +354210840 2 1016 +354210844 2 1016 +354210848 2 1016 +354210852 2 1016 +354210856 2 1016 +354210860 2 1016 +354210864 2 1016 +354210868 2 1016 +354210872 2 1016 +354210876 2 1016 +354210880 2 1016 +354210884 2 1016 +354210888 2 1016 +354210892 2 1016 +354210896 2 1016 +354210900 2 1016 +354210904 2 1016 +354210908 2 1016 +354210912 2 1016 +354210916 2 1016 +354210920 2 1016 +354210924 2 1016 +354210928 2 1016 +354210932 2 1016 +354210936 2 1016 +354210940 2 1016 +354210944 2 1016 +354210948 2 1016 +354210952 2 1016 +354210956 2 1016 +354210960 2 1016 +354210964 2 1016 +354210968 2 1016 +354210972 2 1016 +354210976 2 1016 +354210980 2 1016 +354210984 2 1016 +354210988 2 1016 +354210992 2 1016 +354210996 2 1016 +354211000 2 1016 +354211004 2 1016 +354211008 2 1016 +354211012 2 1016 +354211016 2 1016 +354211020 2 1016 +354211024 2 1016 +354211028 2 1016 +354211032 2 1016 +354211036 2 1016 +354211040 2 1016 +354211044 2 1016 +354211048 2 1016 +354211052 2 1016 +354211056 2 1016 +354211060 2 1016 +354211064 2 1016 +354211068 2 1016 +354211072 2 1016 +354211076 2 1016 +354211080 2 1016 +354211084 2 1016 +354211088 2 1016 +354211092 2 1016 +354211096 2 1016 +354211100 2 1016 +354211104 2 1016 +354211108 2 1016 +354211112 2 1016 +354211116 2 1016 +354211120 2 1016 +354211124 2 1016 +354211128 2 1016 +354211132 2 1016 +354211136 2 1016 +354211140 2 1016 +354211144 2 1016 +354211148 2 1016 +354211152 2 1016 +354211156 2 1016 +354211160 2 1016 +354211164 2 1016 +354211168 2 1016 +354211172 2 1016 +354211176 2 1016 +354211180 2 1016 +354211184 2 1016 +354211188 2 1016 +354211192 2 1016 +354211196 2 1016 +354211200 2 1016 +354211204 2 1016 +354211208 2 1016 +354211212 2 1016 +354211216 2 1016 +354211220 2 1016 +354211224 2 1016 +354211228 2 1016 +354211232 2 1016 +354211236 2 1016 +354211240 2 1016 +354211244 2 1016 +354211248 2 1016 +354211252 2 1016 +354211256 2 1016 +354211260 2 1016 +354211264 2 1016 +354211268 2 1016 +354211272 2 1016 +354211276 2 1016 +354211280 2 1016 +354211284 2 1016 +354211288 2 1016 +354211292 2 1016 +354211296 2 1016 +354211300 2 1016 +354211304 2 1016 +354211308 2 1016 +354211312 2 1016 +354211316 2 1016 +354211320 2 1016 +354211324 2 1016 +354211328 2 1016 +354211332 2 1016 +354211336 2 1016 +354211340 2 1016 +354211344 2 1016 +354211348 2 1016 +354211352 2 1016 +354211356 2 1016 +354211360 2 1016 +354214916 2 1016 +354214920 2 1016 +354214924 2 1016 +354214928 2 1016 +354214932 2 1016 +354214936 2 1016 +354214940 2 1016 +354214944 2 1016 +354214948 2 1016 +354214952 2 1016 +354214956 2 1016 +354214960 2 1016 +354214964 2 1016 +354214968 2 1016 +354214972 2 1016 +354214976 2 1016 +354214980 2 1016 +354214984 2 1016 +354214988 2 1016 +354214992 2 1016 +354214996 2 1016 +354215000 2 1016 +354215004 2 1016 +354215008 2 1016 +354215012 2 1016 +354215016 2 1016 +354215020 2 1016 +354215024 2 1016 +354215028 2 1016 +354215032 2 1016 +354215036 2 1016 +354215040 2 1016 +354215044 2 1016 +354215048 2 1016 +354215052 2 1016 +354215056 2 1016 +354215060 2 1016 +354215064 2 1016 +354215068 2 1016 +354215072 2 1016 +354215076 2 1016 +354215080 2 1016 +354215084 2 1016 +354215088 2 1016 +354215092 2 1016 +354215096 2 1016 +354215100 2 1016 +354215104 2 1016 +354215108 2 1016 +354215112 2 1016 +354215116 2 1016 +354215120 2 1016 +354215124 2 1016 +354215128 2 1016 +354215132 2 1016 +354215136 2 1016 +354215140 2 1016 +354215144 2 1016 +354215148 2 1016 +354215152 2 1016 +354215156 2 1016 +354215160 2 1016 +354215164 2 1016 +354215168 2 1016 +354215172 2 1016 +354215176 2 1016 +354215180 2 1016 +354215184 2 1016 +354215188 2 1016 +354215192 2 1016 +354215196 2 1016 +354215200 2 1016 +354215204 2 1016 +354215208 2 1016 +354215212 2 1016 +354215216 2 1016 +354215220 2 1016 +354215224 2 1016 +354215228 2 1016 +354215232 2 1016 +354215236 2 1016 +354215240 2 1016 +354215244 2 1016 +354215248 2 1016 +354215252 2 1016 +354215256 2 1016 +354215260 2 1016 +354215264 2 1016 +354215268 2 1016 +354215272 2 1016 +354215276 2 1016 +354215280 2 1016 +354215284 2 1016 +354215288 2 1016 +354215292 2 1016 +354215296 2 1016 +354215300 2 1016 +354215304 2 1016 +354215308 2 1016 +354215312 2 1016 +354215316 2 1016 +354215320 2 1016 +354215324 2 1016 +354215328 2 1016 +354215332 2 1016 +354215336 2 1016 +354215340 2 1016 +354215344 2 1016 +354215348 2 1016 +354215352 2 1016 +354215356 2 1016 +354215360 2 1016 +354215364 2 1016 +354215368 2 1016 +354215372 2 1016 +354215376 2 1016 +354215380 2 1016 +354215384 2 1016 +354215388 2 1016 +354215392 2 1016 +354215396 2 1016 +354215400 2 1016 +354215404 2 1016 +354215408 2 1016 +354215412 2 1016 +354215416 2 1016 +354215420 2 1016 +354215424 2 1016 +354215428 2 1016 +354215432 2 1016 +354215436 2 1016 +354215440 2 1016 +354215444 2 1016 +354215448 2 1016 +354215452 2 1016 +354215456 2 1016 +354215460 2 1016 +354215464 2 1016 +354215468 2 1016 +354215472 2 1016 +354215476 2 1016 +354215480 2 1016 +354215484 2 1016 +354215488 2 1016 +354215492 2 1016 +354215496 2 1016 +354215500 2 1016 +354215504 2 1016 +354215508 2 1016 +354215512 2 1016 +354215516 2 1016 +354215520 2 1016 +354219012 2 1016 +354219016 2 1016 +354219020 2 1016 +354219024 2 1016 +354219028 2 1016 +354219032 2 1016 +354219036 2 1016 +354219040 2 1016 +354219044 2 1016 +354219048 2 1016 +354219052 2 1016 +354219056 2 1016 +354219060 2 1016 +354219064 2 1016 +354219068 2 1016 +354219072 2 1016 +354219076 2 1016 +354219080 2 1016 +354219084 2 1016 +354219088 2 1016 +354219092 2 1016 +354219096 2 1016 +354219100 2 1016 +354219104 2 1016 +354219108 2 1016 +354219112 2 1016 +354219116 2 1016 +354219120 2 1016 +354219124 2 1016 +354219128 2 1016 +354219132 2 1016 +354219136 2 1016 +354219140 2 1016 +354219144 2 1016 +354219148 2 1016 +354219152 2 1016 +354219156 2 1016 +354219160 2 1016 +354219164 2 1016 +354219168 2 1016 +354219172 2 1016 +354219176 2 1016 +354219180 2 1016 +354219184 2 1016 +354219188 2 1016 +354219192 2 1016 +354219196 2 1016 +354219200 2 1016 +354219204 2 1016 +354219208 2 1016 +354219212 2 1016 +354219216 2 1016 +354219220 2 1016 +354219224 2 1016 +354219228 2 1016 +354219232 2 1016 +354219236 2 1016 +354219240 2 1016 +354219244 2 1016 +354219248 2 1016 +354219252 2 1016 +354219256 2 1016 +354219260 2 1016 +354219264 2 1016 +354219268 2 1016 +354219272 2 1016 +354219276 2 1016 +354219280 2 1016 +354219284 2 1016 +354219288 2 1016 +354219292 2 1016 +354219296 2 1016 +354219300 2 1016 +354219304 2 1016 +354219308 2 1016 +354219312 2 1016 +354219316 2 1016 +354219320 2 1016 +354219324 2 1016 +354219328 2 1016 +354219332 2 1016 +354219336 2 1016 +354219340 2 1016 +354219344 2 1016 +354219348 2 1016 +354219352 2 1016 +354219356 2 1016 +354219360 2 1016 +354219364 2 1016 +354219368 2 1016 +354219372 2 1016 +354219376 2 1016 +354219380 2 1016 +354219384 2 1016 +354219388 2 1016 +354219392 2 1016 +354219396 2 1016 +354219400 2 1016 +354219404 2 1016 +354219408 2 1016 +354219412 2 1016 +354219416 2 1016 +354219420 2 1016 +354219424 2 1016 +354219428 2 1016 +354219432 2 1016 +354219436 2 1016 +354219440 2 1016 +354219444 2 1016 +354219448 2 1016 +354219452 2 1016 +354219456 2 1016 +354219460 2 1016 +354219464 2 1016 +354219468 2 1016 +354219472 2 1016 +354219476 2 1016 +354219480 2 1016 +354219484 2 1016 +354219488 2 1016 +354219492 2 1016 +354219496 2 1016 +354219500 2 1016 +354219504 2 1016 +354219508 2 1016 +354219512 2 1016 +354219516 2 1016 +354219520 2 1016 +354219524 2 1016 +354219528 2 1016 +354219532 2 1016 +354219536 2 1016 +354219540 2 1016 +354219544 2 1016 +354219548 2 1016 +354219552 2 1016 +354219556 2 1016 +354219560 2 1016 +354219564 2 1016 +354219568 2 1016 +354219572 2 1016 +354219576 2 1016 +354219580 2 1016 +354219584 2 1016 +354219588 2 1016 +354219592 2 1016 +354219596 2 1016 +354219600 2 1016 +354219604 2 1016 +354219608 2 1016 +354219612 2 1016 +354219616 2 1016 +354219620 2 1016 +354219624 2 1016 +354219628 2 1016 +354219632 2 1016 +354219636 2 1016 +354219640 2 1016 +354219644 2 1016 +354219648 2 1016 +354423812 32 960 +354423816 2 960 +354423820 32 960 +354423824 2 960 +354423828 32 960 +354423832 2 960 +354423836 32 960 +354423840 2 960 +354423844 32 960 +354423848 2 960 +354423852 32 960 +354423856 2 960 +354423860 32 960 +354423864 2 960 +354423868 32 960 +354423872 2 960 +354423876 32 960 +354423880 2 960 +354423884 32 960 +354423888 2 960 +354423892 32 960 +354423896 2 960 +354423900 32 960 +354423904 2 960 +354423908 32 960 +354423912 2 960 +354423916 32 960 +354423920 2 960 +354423924 32 960 +354423928 2 960 +354423932 32 960 +354423936 2 960 +354423940 32 960 +354423944 2 960 +354423948 32 960 +354423952 2 960 +354423956 32 960 +354423960 2 960 +354423964 32 960 +354423968 2 960 +354427908 32 960 +354427912 2 960 +354427916 32 960 +354427920 2 960 +354427924 32 960 +354427928 2 960 +354427932 32 960 +354427936 2 960 +354427940 32 960 +354427944 2 960 +354427948 32 960 +354427952 2 960 +354427956 32 960 +354427960 2 960 +354427964 32 960 +354427968 2 960 +354427972 32 960 +354427976 2 960 +354427980 32 960 +354427984 2 960 +354427988 32 960 +354427992 2 960 +354427996 32 960 +354428000 2 960 +354428004 32 960 +354428008 2 960 +354428012 32 960 +354428016 2 960 +354428020 32 960 +354428024 2 960 +354428028 32 960 +354428032 2 960 +354428036 32 960 +354428040 2 960 +354428044 32 960 +354428048 2 960 +354428052 32 960 +354428056 2 960 +354428060 32 960 +354428064 2 960 +354428068 32 960 +354428072 2 960 +354428076 32 960 +354428080 2 960 +354428084 32 960 +354428088 2 960 +354428092 32 960 +354428096 2 960 +354432004 32 960 +354432008 2 960 +354432012 32 960 +354432016 2 960 +354432020 32 960 +354432024 2 960 +354432028 32 960 +354432032 2 960 +354432036 32 960 +354432040 2 960 +354432044 32 960 +354432048 2 960 +354432052 32 960 +354432056 2 960 +354432060 32 960 +354432064 2 960 +354432068 32 960 +354432072 2 960 +354432076 32 960 +354432080 2 960 +354432084 32 960 +354432088 2 960 +354432092 32 960 +354432096 2 960 +354432100 32 960 +354432104 2 960 +354432108 32 960 +354432112 2 960 +354432116 32 960 +354432120 2 960 +354432124 32 960 +354432128 2 960 +354432132 32 960 +354432136 2 960 +354432140 32 960 +354432144 2 960 +354432148 32 960 +354432152 2 960 +354432156 32 960 +354432160 2 960 +354432164 32 960 +354432168 2 960 +354432172 32 960 +354432176 2 960 +354432180 32 960 +354432184 2 960 +354432188 32 960 +354432192 2 960 +354432196 32 960 +354432200 2 960 +354432204 32 960 +354432208 2 960 +354432212 32 960 +354432216 2 960 +354432220 32 960 +354432224 2 960 +354436100 32 960 +354436104 2 960 +354436108 32 960 +354436112 2 960 +354436116 32 960 +354436120 2 960 +354436124 32 960 +354436128 2 960 +354436132 32 960 +354436136 2 960 +354436140 32 960 +354436144 2 960 +354436148 32 960 +354436152 2 960 +354436156 32 960 +354436160 2 960 +354436164 32 960 +354436168 2 960 +354436172 32 960 +354436176 2 960 +354436180 32 960 +354436184 2 960 +354436188 32 960 +354436192 2 960 +354436196 32 960 +354436200 2 960 +354436204 32 960 +354436208 2 960 +354436212 32 960 +354436216 2 960 +354436220 32 960 +354436224 2 960 +354436228 32 960 +354436232 2 960 +354436236 32 960 +354436240 2 960 +354436244 32 960 +354436248 2 960 +354436252 32 960 +354436256 2 960 +354436260 32 960 +354436264 2 960 +354436268 32 960 +354436272 2 960 +354436276 32 960 +354436280 2 960 +354436284 32 960 +354436288 2 960 +354436292 32 960 +354436296 2 960 +354436300 32 960 +354436304 2 960 +354436308 32 960 +354436312 2 960 +354436316 32 960 +354436320 2 960 +354440196 32 960 +354440200 2 960 +354440204 32 960 +354440208 2 960 +354440212 32 960 +354440216 2 960 +354440220 32 960 +354440224 2 960 +354440228 32 960 +354440232 2 960 +354440236 32 960 +354440240 2 960 +354440244 32 960 +354440248 2 960 +354440252 32 960 +354440256 2 960 +354440260 32 960 +354440264 2 960 +354440268 32 960 +354440272 2 960 +354440276 32 960 +354440280 2 960 +354440284 32 960 +354440288 2 960 +354440292 32 960 +354440296 2 960 +354440300 32 960 +354440304 2 960 +354440308 32 960 +354440312 2 960 +354440316 32 960 +354440320 2 960 +354440324 32 960 +354440328 2 960 +354440332 32 960 +354440336 2 960 +354440340 32 960 +354440344 2 960 +354440348 32 960 +354440352 2 960 +354440356 32 960 +354440360 2 960 +354440364 32 960 +354440368 2 960 +354440372 32 960 +354440376 2 960 +354440380 32 960 +354440384 2 960 +354440388 32 960 +354440392 2 960 +354440396 32 960 +354440400 2 960 +354440404 32 960 +354440408 2 960 +354440412 32 960 +354440416 2 960 +354440420 32 960 +354440424 2 960 +354440428 32 960 +354440432 2 960 +354440436 32 960 +354440440 2 960 +354440444 32 960 +354440448 2 960 +354444292 32 960 +354444296 2 960 +354444300 32 960 +354444304 2 960 +354444308 32 960 +354444312 2 960 +354444316 32 960 +354444320 2 960 +354444324 32 960 +354444328 2 960 +354444332 32 960 +354444336 2 960 +354444340 32 960 +354444344 2 960 +354444348 32 960 +354444352 2 960 +354444356 32 960 +354444360 2 960 +354444364 32 960 +354444368 2 960 +354444372 32 960 +354444376 2 960 +354444380 32 960 +354444384 2 960 +354444388 32 960 +354444392 2 960 +354444396 32 960 +354444400 2 960 +354444404 32 960 +354444408 2 960 +354444412 32 960 +354444416 2 960 +354444420 32 960 +354444424 2 960 +354444428 32 960 +354444432 2 960 +354444436 32 960 +354444440 2 960 +354444444 32 960 +354444448 2 960 +354444452 32 960 +354444456 2 960 +354444460 32 960 +354444464 2 960 +354444468 32 960 +354444472 2 960 +354444476 32 960 +354444480 2 960 +354444484 32 960 +354444488 2 960 +354444492 32 960 +354444496 2 960 +354444500 32 960 +354444504 2 960 +354444508 32 960 +354444512 2 960 +354444516 32 960 +354444520 2 960 +354444524 32 960 +354444528 2 960 +354444532 32 960 +354444536 2 960 +354444540 32 960 +354444544 2 960 +354444548 32 960 +354444552 2 960 +354444556 32 960 +354444560 2 960 +354444564 32 960 +354444568 2 960 +354444572 32 960 +354444576 2 960 +354448388 32 960 +354448392 2 960 +354448396 32 960 +354448400 2 960 +354448404 32 960 +354448408 2 960 +354448412 32 960 +354448416 2 960 +354448420 32 960 +354448424 2 960 +354448428 32 960 +354448432 2 960 +354448436 32 960 +354448440 2 960 +354448444 32 960 +354448448 2 960 +354448452 32 960 +354448456 2 960 +354448460 32 960 +354448464 2 960 +354448468 32 960 +354448472 2 960 +354448476 32 960 +354448480 2 960 +354448484 32 960 +354448488 2 960 +354448492 32 960 +354448496 2 960 +354448500 32 960 +354448504 2 960 +354448508 32 960 +354448512 2 960 +354448516 32 960 +354448520 2 960 +354448524 32 960 +354448528 2 960 +354448532 32 960 +354448536 2 960 +354448540 32 960 +354448544 2 960 +354448548 32 960 +354448552 2 960 +354448556 32 960 +354448560 2 960 +354448564 32 960 +354448568 2 960 +354448572 32 960 +354448576 2 960 +354448580 32 960 +354448584 2 960 +354448588 32 960 +354448592 2 960 +354448596 32 960 +354448600 2 960 +354448604 32 960 +354448608 2 960 +354448612 32 960 +354448616 2 960 +354448620 32 960 +354448624 2 960 +354448628 32 960 +354448632 2 960 +354448636 32 960 +354448640 2 960 +354448644 32 960 +354448648 2 960 +354448652 32 960 +354448656 2 960 +354448660 32 960 +354448664 2 960 +354448668 32 960 +354448672 2 960 +354452484 32 960 +354452488 2 960 +354452492 32 960 +354452496 2 960 +354452500 32 960 +354452504 2 960 +354452508 32 960 +354452512 2 960 +354452516 32 960 +354452520 2 960 +354452524 32 960 +354452528 2 960 +354452532 32 960 +354452536 2 960 +354452540 32 960 +354452544 2 960 +354452548 32 960 +354452552 2 960 +354452556 32 960 +354452560 2 960 +354452564 32 960 +354452568 2 960 +354452572 32 960 +354452576 2 960 +354452580 32 960 +354452584 2 960 +354452588 32 960 +354452592 2 960 +354452596 32 960 +354452600 2 960 +354452604 32 960 +354452608 2 960 +354452612 32 960 +354452616 2 960 +354452620 32 960 +354452624 2 960 +354452628 32 960 +354452632 2 960 +354452636 32 960 +354452640 2 960 +354452644 32 960 +354452648 2 960 +354452652 32 960 +354452656 2 960 +354452660 32 960 +354452664 2 960 +354452668 32 960 +354452672 2 960 +354452676 32 960 +354452680 2 960 +354452684 32 960 +354452688 2 960 +354452692 32 960 +354452696 2 960 +354452700 32 960 +354452704 2 960 +354452708 32 960 +354452712 2 960 +354452716 32 960 +354452720 2 960 +354452724 32 960 +354452728 2 960 +354452732 32 960 +354452736 2 960 +354452740 32 960 +354452744 2 960 +354452748 32 960 +354452752 2 960 +354452756 32 960 +354452760 2 960 +354452764 32 960 +354452768 2 960 +354452772 32 960 +354452776 2 960 +354452780 32 960 +354452784 2 960 +354452788 32 960 +354452792 2 960 +354452796 32 960 +354452800 2 960 +354456580 32 960 +354456584 2 960 +354456588 32 960 +354456592 2 960 +354456596 32 960 +354456600 2 960 +354456604 32 960 +354456608 2 960 +354456612 32 960 +354456616 2 960 +354456620 32 960 +354456624 2 960 +354456628 32 960 +354456632 2 960 +354456636 32 960 +354456640 2 960 +354456644 32 960 +354456648 2 960 +354456652 32 960 +354456656 2 960 +354456660 32 960 +354456664 2 960 +354456668 32 960 +354456672 2 960 +354456676 32 960 +354456680 2 960 +354456684 32 960 +354456688 2 960 +354456692 32 960 +354456696 2 960 +354456700 32 960 +354456704 2 960 +354456708 32 960 +354456712 2 960 +354456716 32 960 +354456720 2 960 +354456724 32 960 +354456728 2 960 +354456732 32 960 +354456736 2 960 +354456740 32 960 +354456744 2 960 +354456748 32 960 +354456752 2 960 +354456756 32 960 +354456760 2 960 +354456764 32 960 +354456768 2 960 +354456772 32 960 +354456776 2 960 +354456780 32 960 +354456784 2 960 +354456788 32 960 +354456792 2 960 +354456796 32 960 +354456800 2 960 +354456804 32 960 +354456808 2 960 +354456812 32 960 +354456816 2 960 +354456820 32 960 +354456824 2 960 +354456828 32 960 +354456832 2 960 +354456836 32 960 +354456840 2 960 +354456844 32 960 +354456848 2 960 +354456852 32 960 +354456856 2 960 +354456860 32 960 +354456864 2 960 +354456868 32 960 +354456872 2 960 +354456876 32 960 +354456880 2 960 +354456884 32 960 +354456888 2 960 +354456892 32 960 +354456896 2 960 +354460676 2 1016 +354460680 2 1016 +354460684 2 1016 +354460688 2 1016 +354460692 2 1016 +354460696 2 1016 +354460700 2 1016 +354460704 2 1016 +354460708 2 1016 +354460712 2 1016 +354460716 2 1016 +354460720 2 1016 +354460724 2 1016 +354460728 2 1016 +354460732 2 1016 +354460736 2 1016 +354460740 2 1016 +354460744 2 1016 +354460748 2 1016 +354460752 2 1016 +354460756 2 1016 +354460760 2 1016 +354460764 2 1016 +354460768 2 1016 +354460772 2 1016 +354460776 2 1016 +354460780 2 1016 +354460784 2 1016 +354460788 2 1016 +354460792 2 1016 +354460796 2 1016 +354460800 2 1016 +354460804 2 1016 +354460808 2 1016 +354460812 2 1016 +354460816 2 1016 +354460820 2 1016 +354460824 2 1016 +354460828 2 1016 +354460832 2 1016 +354460836 2 1016 +354460840 2 1016 +354460844 2 1016 +354460848 2 1016 +354460852 2 1016 +354460856 2 1016 +354460860 2 1016 +354460864 2 1016 +354460868 2 1016 +354460872 2 1016 +354460876 2 1016 +354460880 2 1016 +354460884 2 1016 +354460888 2 1016 +354460892 2 1016 +354460896 2 1016 +354460900 2 1016 +354460904 2 1016 +354460908 2 1016 +354460912 2 1016 +354460916 2 1016 +354460920 2 1016 +354460924 2 1016 +354460928 2 1016 +354460932 2 1016 +354460936 2 1016 +354460940 2 1016 +354460944 2 1016 +354460948 2 1016 +354460952 2 1016 +354460956 2 1016 +354460960 2 1016 +354460964 2 1016 +354460968 2 1016 +354460972 2 1016 +354460976 2 1016 +354460980 2 1016 +354460984 2 1016 +354460988 2 1016 +354460992 2 1016 +354460996 2 1016 +354461000 2 1016 +354461004 2 1016 +354461008 2 1016 +354461012 2 1016 +354461016 2 1016 +354461020 2 1016 +354461024 2 1016 +354461028 2 1016 +354461032 2 1016 +354461036 2 1016 +354461040 2 1016 +354461044 2 1016 +354461048 2 1016 +354461052 2 1016 +354461056 2 1016 +354461060 2 1016 +354461064 2 1016 +354461068 2 1016 +354461072 2 1016 +354461076 2 1016 +354461080 2 1016 +354461084 2 1016 +354461088 2 1016 +354464772 2 1016 +354464776 2 1016 +354464780 2 1016 +354464784 2 1016 +354464788 2 1016 +354464792 2 1016 +354464796 2 1016 +354464800 2 1016 +354464804 2 1016 +354464808 2 1016 +354464812 2 1016 +354464816 2 1016 +354464820 2 1016 +354464824 2 1016 +354464828 2 1016 +354464832 2 1016 +354464836 2 1016 +354464840 2 1016 +354464844 2 1016 +354464848 2 1016 +354464852 2 1016 +354464856 2 1016 +354464860 2 1016 +354464864 2 1016 +354464868 2 1016 +354464872 2 1016 +354464876 2 1016 +354464880 2 1016 +354464884 2 1016 +354464888 2 1016 +354464892 2 1016 +354464896 2 1016 +354464900 2 1016 +354464904 2 1016 +354464908 2 1016 +354464912 2 1016 +354464916 2 1016 +354464920 2 1016 +354464924 2 1016 +354464928 2 1016 +354464932 2 1016 +354464936 2 1016 +354464940 2 1016 +354464944 2 1016 +354464948 2 1016 +354464952 2 1016 +354464956 2 1016 +354464960 2 1016 +354464964 2 1016 +354464968 2 1016 +354464972 2 1016 +354464976 2 1016 +354464980 2 1016 +354464984 2 1016 +354464988 2 1016 +354464992 2 1016 +354464996 2 1016 +354465000 2 1016 +354465004 2 1016 +354465008 2 1016 +354465012 2 1016 +354465016 2 1016 +354465020 2 1016 +354465024 2 1016 +354465028 2 1016 +354465032 2 1016 +354465036 2 1016 +354465040 2 1016 +354465044 2 1016 +354465048 2 1016 +354465052 2 1016 +354465056 2 1016 +354465060 2 1016 +354465064 2 1016 +354465068 2 1016 +354465072 2 1016 +354465076 2 1016 +354465080 2 1016 +354465084 2 1016 +354465088 2 1016 +354465092 2 1016 +354465096 2 1016 +354465100 2 1016 +354465104 2 1016 +354465108 2 1016 +354465112 2 1016 +354465116 2 1016 +354465120 2 1016 +354465124 2 1016 +354465128 2 1016 +354465132 2 1016 +354465136 2 1016 +354465140 2 1016 +354465144 2 1016 +354465148 2 1016 +354465152 2 1016 +354465156 2 1016 +354465160 2 1016 +354465164 2 1016 +354465168 2 1016 +354465172 2 1016 +354465176 2 1016 +354465180 2 1016 +354465184 2 1016 +354465188 2 1016 +354465192 2 1016 +354465196 2 1016 +354465200 2 1016 +354465204 2 1016 +354465208 2 1016 +354465212 2 1016 +354465216 2 1016 +354468868 2 1016 +354468872 2 1016 +354468876 2 1016 +354468880 2 1016 +354468884 2 1016 +354468888 2 1016 +354468892 2 1016 +354468896 2 1016 +354468900 2 1016 +354468904 2 1016 +354468908 2 1016 +354468912 2 1016 +354468916 2 1016 +354468920 2 1016 +354468924 2 1016 +354468928 2 1016 +354468932 2 1016 +354468936 2 1016 +354468940 2 1016 +354468944 2 1016 +354468948 2 1016 +354468952 2 1016 +354468956 2 1016 +354468960 2 1016 +354468964 2 1016 +354468968 2 1016 +354468972 2 1016 +354468976 2 1016 +354468980 2 1016 +354468984 2 1016 +354468988 2 1016 +354468992 2 1016 +354468996 2 1016 +354469000 2 1016 +354469004 2 1016 +354469008 2 1016 +354469012 2 1016 +354469016 2 1016 +354469020 2 1016 +354469024 2 1016 +354469028 2 1016 +354469032 2 1016 +354469036 2 1016 +354469040 2 1016 +354469044 2 1016 +354469048 2 1016 +354469052 2 1016 +354469056 2 1016 +354469060 2 1016 +354469064 2 1016 +354469068 2 1016 +354469072 2 1016 +354469076 2 1016 +354469080 2 1016 +354469084 2 1016 +354469088 2 1016 +354469092 2 1016 +354469096 2 1016 +354469100 2 1016 +354469104 2 1016 +354469108 2 1016 +354469112 2 1016 +354469116 2 1016 +354469120 2 1016 +354469124 2 1016 +354469128 2 1016 +354469132 2 1016 +354469136 2 1016 +354469140 2 1016 +354469144 2 1016 +354469148 2 1016 +354469152 2 1016 +354469156 2 1016 +354469160 2 1016 +354469164 2 1016 +354469168 2 1016 +354469172 2 1016 +354469176 2 1016 +354469180 2 1016 +354469184 2 1016 +354469188 2 1016 +354469192 2 1016 +354469196 2 1016 +354469200 2 1016 +354469204 2 1016 +354469208 2 1016 +354469212 2 1016 +354469216 2 1016 +354469220 2 1016 +354469224 2 1016 +354469228 2 1016 +354469232 2 1016 +354469236 2 1016 +354469240 2 1016 +354469244 2 1016 +354469248 2 1016 +354469252 2 1016 +354469256 2 1016 +354469260 2 1016 +354469264 2 1016 +354469268 2 1016 +354469272 2 1016 +354469276 2 1016 +354469280 2 1016 +354469284 2 1016 +354469288 2 1016 +354469292 2 1016 +354469296 2 1016 +354469300 2 1016 +354469304 2 1016 +354469308 2 1016 +354469312 2 1016 +354469316 2 1016 +354469320 2 1016 +354469324 2 1016 +354469328 2 1016 +354469332 2 1016 +354469336 2 1016 +354469340 2 1016 +354469344 2 1016 +354469348 2 1016 +354469352 2 1016 +354469356 2 1016 +354469360 2 1016 +354469364 2 1016 +354469368 2 1016 +354469372 2 1016 +354469376 2 1016 +354472964 2 1016 +354472968 2 1016 +354472972 2 1016 +354472976 2 1016 +354472980 2 1016 +354472984 2 1016 +354472988 2 1016 +354472992 2 1016 +354472996 2 1016 +354473000 2 1016 +354473004 2 1016 +354473008 2 1016 +354473012 2 1016 +354473016 2 1016 +354473020 2 1016 +354473024 2 1016 +354473028 2 1016 +354473032 2 1016 +354473036 2 1016 +354473040 2 1016 +354473044 2 1016 +354473048 2 1016 +354473052 2 1016 +354473056 2 1016 +354473060 2 1016 +354473064 2 1016 +354473068 2 1016 +354473072 2 1016 +354473076 2 1016 +354473080 2 1016 +354473084 2 1016 +354473088 2 1016 +354473092 2 1016 +354473096 2 1016 +354473100 2 1016 +354473104 2 1016 +354473108 2 1016 +354473112 2 1016 +354473116 2 1016 +354473120 2 1016 +354473124 2 1016 +354473128 2 1016 +354473132 2 1016 +354473136 2 1016 +354473140 2 1016 +354473144 2 1016 +354473148 2 1016 +354473152 2 1016 +354473156 2 1016 +354473160 2 1016 +354473164 2 1016 +354473168 2 1016 +354473172 2 1016 +354473176 2 1016 +354473180 2 1016 +354473184 2 1016 +354473188 2 1016 +354473192 2 1016 +354473196 2 1016 +354473200 2 1016 +354473204 2 1016 +354473208 2 1016 +354473212 2 1016 +354473216 2 1016 +354473220 2 1016 +354473224 2 1016 +354473228 2 1016 +354473232 2 1016 +354473236 2 1016 +354473240 2 1016 +354473244 2 1016 +354473248 2 1016 +354473252 2 1016 +354473256 2 1016 +354473260 2 1016 +354473264 2 1016 +354473268 2 1016 +354473272 2 1016 +354473276 2 1016 +354473280 2 1016 +354473284 2 1016 +354473288 2 1016 +354473292 2 1016 +354473296 2 1016 +354473300 2 1016 +354473304 2 1016 +354473308 2 1016 +354473312 2 1016 +354473316 2 1016 +354473320 2 1016 +354473324 2 1016 +354473328 2 1016 +354473332 2 1016 +354473336 2 1016 +354473340 2 1016 +354473344 2 1016 +354473348 2 1016 +354473352 2 1016 +354473356 2 1016 +354473360 2 1016 +354473364 2 1016 +354473368 2 1016 +354473372 2 1016 +354473376 2 1016 +354473380 2 1016 +354473384 2 1016 +354473388 2 1016 +354473392 2 1016 +354473396 2 1016 +354473400 2 1016 +354473404 2 1016 +354473408 2 1016 +354473412 2 1016 +354473416 2 1016 +354473420 2 1016 +354473424 2 1016 +354473428 2 1016 +354473432 2 1016 +354473436 2 1016 +354473440 2 1016 +354473444 2 1016 +354473448 2 1016 +354473452 2 1016 +354473456 2 1016 +354473460 2 1016 +354473464 2 1016 +354473468 2 1016 +354473472 2 1016 +354473476 2 1016 +354473480 2 1016 +354473484 2 1016 +354473488 2 1016 +354473492 2 1016 +354473496 2 1016 +354473500 2 1016 +354473504 2 1016 +354477060 2 1016 +354477064 2 1016 +354477068 2 1016 +354477072 2 1016 +354477076 2 1016 +354477080 2 1016 +354477084 2 1016 +354477088 2 1016 +354477092 2 1016 +354477096 2 1016 +354477100 2 1016 +354477104 2 1016 +354477108 2 1016 +354477112 2 1016 +354477116 2 1016 +354477120 2 1016 +354477124 2 1016 +354477128 2 1016 +354477132 2 1016 +354477136 2 1016 +354477140 2 1016 +354477144 2 1016 +354477148 2 1016 +354477152 2 1016 +354477156 2 1016 +354477160 2 1016 +354477164 2 1016 +354477168 2 1016 +354477172 2 1016 +354477176 2 1016 +354477180 2 1016 +354477184 2 1016 +354477188 2 1016 +354477192 2 1016 +354477196 2 1016 +354477200 2 1016 +354477204 2 1016 +354477208 2 1016 +354477212 2 1016 +354477216 2 1016 +354477220 2 1016 +354477224 2 1016 +354477228 2 1016 +354477232 2 1016 +354477236 2 1016 +354477240 2 1016 +354477244 2 1016 +354477248 2 1016 +354477252 2 1016 +354477256 2 1016 +354477260 2 1016 +354477264 2 1016 +354477268 2 1016 +354477272 2 1016 +354477276 2 1016 +354477280 2 1016 +354477284 2 1016 +354477288 2 1016 +354477292 2 1016 +354477296 2 1016 +354477300 2 1016 +354477304 2 1016 +354477308 2 1016 +354477312 2 1016 +354477316 2 1016 +354477320 2 1016 +354477324 2 1016 +354477328 2 1016 +354477332 2 1016 +354477336 2 1016 +354477340 2 1016 +354477344 2 1016 +354477348 2 1016 +354477352 2 1016 +354477356 2 1016 +354477360 2 1016 +354477364 2 1016 +354477368 2 1016 +354477372 2 1016 +354477376 2 1016 +354477380 2 1016 +354477384 2 1016 +354477388 2 1016 +354477392 2 1016 +354477396 2 1016 +354477400 2 1016 +354477404 2 1016 +354477408 2 1016 +354477412 2 1016 +354477416 2 1016 +354477420 2 1016 +354477424 2 1016 +354477428 2 1016 +354477432 2 1016 +354477436 2 1016 +354477440 2 1016 +354477444 2 1016 +354477448 2 1016 +354477452 2 1016 +354477456 2 1016 +354477460 2 1016 +354477464 2 1016 +354477468 2 1016 +354477472 2 1016 +354477476 2 1016 +354477480 2 1016 +354477484 2 1016 +354477488 2 1016 +354477492 2 1016 +354477496 2 1016 +354477500 2 1016 +354477504 2 1016 +354477508 2 1016 +354477512 2 1016 +354477516 2 1016 +354477520 2 1016 +354477524 2 1016 +354477528 2 1016 +354477532 2 1016 +354477536 2 1016 +354477540 2 1016 +354477544 2 1016 +354477548 2 1016 +354477552 2 1016 +354477556 2 1016 +354477560 2 1016 +354477564 2 1016 +354477568 2 1016 +354477572 2 1016 +354477576 2 1016 +354477580 2 1016 +354477584 2 1016 +354477588 2 1016 +354477592 2 1016 +354477596 2 1016 +354477600 2 1016 +354477604 2 1016 +354477608 2 1016 +354477612 2 1016 +354477616 2 1016 +354477620 2 1016 +354477624 2 1016 +354477628 2 1016 +354477632 2 1016 +354477636 2 1016 +354477640 2 1016 +354477644 2 1016 +354477648 2 1016 +354477652 2 1016 +354477656 2 1016 +354477660 2 1016 +354477664 2 1016 +354481156 2 1016 +354481160 2 1016 +354481164 2 1016 +354481168 2 1016 +354481172 2 1016 +354481176 2 1016 +354481180 2 1016 +354481184 2 1016 +354481188 2 1016 +354481192 2 1016 +354481196 2 1016 +354481200 2 1016 +354481204 2 1016 +354481208 2 1016 +354481212 2 1016 +354481216 2 1016 +354481220 2 1016 +354481224 2 1016 +354481228 2 1016 +354481232 2 1016 +354481236 2 1016 +354481240 2 1016 +354481244 2 1016 +354481248 2 1016 +354481252 2 1016 +354481256 2 1016 +354481260 2 1016 +354481264 2 1016 +354481268 2 1016 +354481272 2 1016 +354481276 2 1016 +354481280 2 1016 +354481284 2 1016 +354481288 2 1016 +354481292 2 1016 +354481296 2 1016 +354481300 2 1016 +354481304 2 1016 +354481308 2 1016 +354481312 2 1016 +354481316 2 1016 +354481320 2 1016 +354481324 2 1016 +354481328 2 1016 +354481332 2 1016 +354481336 2 1016 +354481340 2 1016 +354481344 2 1016 +354481348 2 1016 +354481352 2 1016 +354481356 2 1016 +354481360 2 1016 +354481364 2 1016 +354481368 2 1016 +354481372 2 1016 +354481376 2 1016 +354481380 2 1016 +354481384 2 1016 +354481388 2 1016 +354481392 2 1016 +354481396 2 1016 +354481400 2 1016 +354481404 2 1016 +354481408 2 1016 +354481412 2 1016 +354481416 2 1016 +354481420 2 1016 +354481424 2 1016 +354481428 2 1016 +354481432 2 1016 +354481436 2 1016 +354481440 2 1016 +354481444 2 1016 +354481448 2 1016 +354481452 2 1016 +354481456 2 1016 +354481460 2 1016 +354481464 2 1016 +354481468 2 1016 +354481472 2 1016 +354481476 2 1016 +354481480 2 1016 +354481484 2 1016 +354481488 2 1016 +354481492 2 1016 +354481496 2 1016 +354481500 2 1016 +354481504 2 1016 +354481508 2 1016 +354481512 2 1016 +354481516 2 1016 +354481520 2 1016 +354481524 2 1016 +354481528 2 1016 +354481532 2 1016 +354481536 2 1016 +354481540 2 1016 +354481544 2 1016 +354481548 2 1016 +354481552 2 1016 +354481556 2 1016 +354481560 2 1016 +354481564 2 1016 +354481568 2 1016 +354481572 2 1016 +354481576 2 1016 +354481580 2 1016 +354481584 2 1016 +354481588 2 1016 +354481592 2 1016 +354481596 2 1016 +354481600 2 1016 +354481604 2 1016 +354481608 2 1016 +354481612 2 1016 +354481616 2 1016 +354481620 2 1016 +354481624 2 1016 +354481628 2 1016 +354481632 2 1016 +354481636 2 1016 +354481640 2 1016 +354481644 2 1016 +354481648 2 1016 +354481652 2 1016 +354481656 2 1016 +354481660 2 1016 +354481664 2 1016 +354481668 2 1016 +354481672 2 1016 +354481676 2 1016 +354481680 2 1016 +354481684 2 1016 +354481688 2 1016 +354481692 2 1016 +354481696 2 1016 +354481700 2 1016 +354481704 2 1016 +354481708 2 1016 +354481712 2 1016 +354481716 2 1016 +354481720 2 1016 +354481724 2 1016 +354481728 2 1016 +354481732 2 1016 +354481736 2 1016 +354481740 2 1016 +354481744 2 1016 +354481748 2 1016 +354481752 2 1016 +354481756 2 1016 +354481760 2 1016 +354481764 2 1016 +354481768 2 1016 +354481772 2 1016 +354481776 2 1016 +354481780 2 1016 +354481784 2 1016 +354481788 2 1016 +354481792 2 1016 344200196 416 160 344204292 416 160 344208388 416 160 @@ -25446,6339 +25910,6803 @@ 344942596 416 160 344946692 416 160 344950788 416 160 -344986628 32 896 -344986632 2 896 -344986636 32 896 -344986640 2 896 -344986644 32 896 -344986648 2 896 -344986652 32 896 -344986656 2 896 -344986660 32 896 -344986664 2 896 -344986668 32 896 -344986672 2 896 -344986676 32 896 -344986680 2 896 -344986684 32 896 -344986688 2 896 -344986692 32 896 -344986696 2 896 -344986700 32 896 -344986704 2 896 -344986708 32 896 -344986712 2 896 -344986716 32 896 -344986720 2 896 -344986724 32 896 -344986728 2 896 -344986732 32 896 -344986736 2 896 -344986740 32 896 -344986744 2 896 -344986748 32 896 -344986752 2 896 -344986756 32 896 -344986760 2 896 -344986764 32 896 -344986768 2 896 -344986772 32 896 -344986776 2 896 -344986780 32 896 -344986784 2 896 -344990724 32 896 -344990728 2 896 -344990732 32 896 -344990736 2 896 -344990740 32 896 -344990744 2 896 -344990748 32 896 -344990752 2 896 -344990756 32 896 -344990760 2 896 -344990764 32 896 -344990768 2 896 -344990772 32 896 -344990776 2 896 -344990780 32 896 -344990784 2 896 -344990788 32 896 -344990792 2 896 -344990796 32 896 -344990800 2 896 -344990804 32 896 -344990808 2 896 -344990812 32 896 -344990816 2 896 -344990820 32 896 -344990824 2 896 -344990828 32 896 -344990832 2 896 -344990836 32 896 -344990840 2 896 -344990844 32 896 -344990848 2 896 -344990852 32 896 -344990856 2 896 -344990860 32 896 -344990864 2 896 -344990868 32 896 -344990872 2 896 -344990876 32 896 -344990880 2 896 -344990884 32 896 -344990888 2 896 -344990892 32 896 -344990896 2 896 -344990900 32 896 -344990904 2 896 -344990908 32 896 -344990912 2 896 -344994820 32 896 -344994824 2 896 -344994828 32 896 -344994832 2 896 -344994836 32 896 -344994840 2 896 -344994844 32 896 -344994848 2 896 -344994852 32 896 -344994856 2 896 -344994860 32 896 -344994864 2 896 -344994868 32 896 -344994872 2 896 -344994876 32 896 -344994880 2 896 -344994884 32 896 -344994888 2 896 -344994892 32 896 -344994896 2 896 -344994900 32 896 -344994904 2 896 -344994908 32 896 -344994912 2 896 -344994916 32 896 -344994920 2 896 -344994924 32 896 -344994928 2 896 -344994932 32 896 -344994936 2 896 -344994940 32 896 -344994944 2 896 -344994948 32 896 -344994952 2 896 -344994956 32 896 -344994960 2 896 -344994964 32 896 -344994968 2 896 -344994972 32 896 -344994976 2 896 -344994980 32 896 -344994984 2 896 -344994988 32 896 -344994992 2 896 -344994996 32 896 -344995000 2 896 -344995004 32 896 -344995008 2 896 -344995012 32 896 -344995016 2 896 -344995020 32 896 -344995024 2 896 -344995028 32 896 -344995032 2 896 -344995036 32 896 -344995040 2 896 -344998916 32 896 -344998920 2 896 -344998924 32 896 -344998928 2 896 -344998932 32 896 -344998936 2 896 -344998940 32 896 -344998944 2 896 -344998948 32 896 -344998952 2 896 -344998956 32 896 -344998960 2 896 -344998964 32 896 -344998968 2 896 -344998972 32 896 -344998976 2 896 -344998980 32 896 -344998984 2 896 -344998988 32 896 -344998992 2 896 -344998996 32 896 -344999000 2 896 -344999004 32 896 -344999008 2 896 -344999012 32 896 -344999016 2 896 -344999020 32 896 -344999024 2 896 -344999028 32 896 -344999032 2 896 -344999036 32 896 -344999040 2 896 -344999044 32 896 -344999048 2 896 -344999052 32 896 -344999056 2 896 -344999060 32 896 -344999064 2 896 -344999068 32 896 -344999072 2 896 -344999076 32 896 -344999080 2 896 -344999084 32 896 -344999088 2 896 -344999092 32 896 -344999096 2 896 -344999100 32 896 -344999104 2 896 -344999108 32 896 -344999112 2 896 -344999116 32 896 -344999120 2 896 -344999124 32 896 -344999128 2 896 -344999132 32 896 -344999136 2 896 -345003012 32 896 -345003016 2 896 -345003020 32 896 -345003024 2 896 -345003028 32 896 -345003032 2 896 -345003036 32 896 -345003040 2 896 -345003044 32 896 -345003048 2 896 -345003052 32 896 -345003056 2 896 -345003060 32 896 -345003064 2 896 -345003068 32 896 -345003072 2 896 -345003076 32 896 -345003080 2 896 -345003084 32 896 -345003088 2 896 -345003092 32 896 -345003096 2 896 -345003100 32 896 -345003104 2 896 -345003108 32 896 -345003112 2 896 -345003116 32 896 -345003120 2 896 -345003124 32 896 -345003128 2 896 -345003132 32 896 -345003136 2 896 -345003140 32 896 -345003144 2 896 -345003148 32 896 -345003152 2 896 -345003156 32 896 -345003160 2 896 -345003164 32 896 -345003168 2 896 -345003172 32 896 -345003176 2 896 -345003180 32 896 -345003184 2 896 -345003188 32 896 -345003192 2 896 -345003196 32 896 -345003200 2 896 -345003204 32 896 -345003208 2 896 -345003212 32 896 -345003216 2 896 -345003220 32 896 -345003224 2 896 -345003228 32 896 -345003232 2 896 -345003236 32 896 -345003240 2 896 -345003244 32 896 -345003248 2 896 -345003252 32 896 -345003256 2 896 -345003260 32 896 -345003264 2 896 -345007108 32 896 -345007112 2 896 -345007116 32 896 -345007120 2 896 -345007124 32 896 -345007128 2 896 -345007132 32 896 -345007136 2 896 -345007140 32 896 -345007144 2 896 -345007148 32 896 -345007152 2 896 -345007156 32 896 -345007160 2 896 -345007164 32 896 -345007168 2 896 -345007172 32 896 -345007176 2 896 -345007180 32 896 -345007184 2 896 -345007188 32 896 -345007192 2 896 -345007196 32 896 -345007200 2 896 -345007204 32 896 -345007208 2 896 -345007212 32 896 -345007216 2 896 -345007220 32 896 -345007224 2 896 -345007228 32 896 -345007232 2 896 -345007236 32 896 -345007240 2 896 -345007244 32 896 -345007248 2 896 -345007252 32 896 -345007256 2 896 -345007260 32 896 -345007264 2 896 -345007268 32 896 -345007272 2 896 -345007276 32 896 -345007280 2 896 -345007284 32 896 -345007288 2 896 -345007292 32 896 -345007296 2 896 -345007300 32 896 -345007304 2 896 -345007308 32 896 -345007312 2 896 -345007316 32 896 -345007320 2 896 -345007324 32 896 -345007328 2 896 -345007332 32 896 -345007336 2 896 -345007340 32 896 -345007344 2 896 -345007348 32 896 -345007352 2 896 -345007356 32 896 -345007360 2 896 -345007364 32 896 -345007368 2 896 -345007372 32 896 -345007376 2 896 -345007380 32 896 -345007384 2 896 -345007388 32 896 -345007392 2 896 -345011204 32 896 -345011208 2 896 -345011212 32 896 -345011216 2 896 -345011220 32 896 -345011224 2 896 -345011228 32 896 -345011232 2 896 -345011236 32 896 -345011240 2 896 -345011244 32 896 -345011248 2 896 -345011252 32 896 -345011256 2 896 -345011260 32 896 -345011264 2 896 -345011268 32 896 -345011272 2 896 -345011276 32 896 -345011280 2 896 -345011284 32 896 -345011288 2 896 -345011292 32 896 -345011296 2 896 -345011300 32 896 -345011304 2 896 -345011308 32 896 -345011312 2 896 -345011316 32 896 -345011320 2 896 -345011324 32 896 -345011328 2 896 -345011332 32 896 -345011336 2 896 -345011340 32 896 -345011344 2 896 -345011348 32 896 -345011352 2 896 -345011356 32 896 -345011360 2 896 -345011364 32 896 -345011368 2 896 -345011372 32 896 -345011376 2 896 -345011380 32 896 -345011384 2 896 -345011388 32 896 -345011392 2 896 -345011396 32 896 -345011400 2 896 -345011404 32 896 -345011408 2 896 -345011412 32 896 -345011416 2 896 -345011420 32 896 -345011424 2 896 -345011428 32 896 -345011432 2 896 -345011436 32 896 -345011440 2 896 -345011444 32 896 -345011448 2 896 -345011452 32 896 -345011456 2 896 -345011460 32 896 -345011464 2 896 -345011468 32 896 -345011472 2 896 -345011476 32 896 -345011480 2 896 -345011484 32 896 -345011488 2 896 -345015300 32 896 -345015304 2 896 -345015308 32 896 -345015312 2 896 -345015316 32 896 -345015320 2 896 -345015324 32 896 -345015328 2 896 -345015332 32 896 -345015336 2 896 -345015340 32 896 -345015344 2 896 -345015348 32 896 -345015352 2 896 -345015356 32 896 -345015360 2 896 -345015364 32 896 -345015368 2 896 -345015372 32 896 -345015376 2 896 -345015380 32 896 -345015384 2 896 -345015388 32 896 -345015392 2 896 -345015396 32 896 -345015400 2 896 -345015404 32 896 -345015408 2 896 -345015412 32 896 -345015416 2 896 -345015420 32 896 -345015424 2 896 -345015428 32 896 -345015432 2 896 -345015436 32 896 -345015440 2 896 -345015444 32 896 -345015448 2 896 -345015452 32 896 -345015456 2 896 -345015460 32 896 -345015464 2 896 -345015468 32 896 -345015472 2 896 -345015476 32 896 -345015480 2 896 -345015484 32 896 -345015488 2 896 -345015492 32 896 -345015496 2 896 -345015500 32 896 -345015504 2 896 -345015508 32 896 -345015512 2 896 -345015516 32 896 -345015520 2 896 -345015524 32 896 -345015528 2 896 -345015532 32 896 -345015536 2 896 -345015540 32 896 -345015544 2 896 -345015548 32 896 -345015552 2 896 -345015556 32 896 -345015560 2 896 -345015564 32 896 -345015568 2 896 -345015572 32 896 -345015576 2 896 -345015580 32 896 -345015584 2 896 -345015588 32 896 -345015592 2 896 -345015596 32 896 -345015600 2 896 -345015604 32 896 -345015608 2 896 -345015612 32 896 -345015616 2 896 -345019396 32 896 -345019400 2 896 -345019404 32 896 -345019408 2 896 -345019412 32 896 -345019416 2 896 -345019420 32 896 -345019424 2 896 -345019428 32 896 -345019432 2 896 -345019436 32 896 -345019440 2 896 -345019444 32 896 -345019448 2 896 -345019452 32 896 -345019456 2 896 -345019460 32 896 -345019464 2 896 -345019468 32 896 -345019472 2 896 -345019476 32 896 -345019480 2 896 -345019484 32 896 -345019488 2 896 -345019492 32 896 -345019496 2 896 -345019500 32 896 -345019504 2 896 -345019508 32 896 -345019512 2 896 -345019516 32 896 -345019520 2 896 -345019524 32 896 -345019528 2 896 -345019532 32 896 -345019536 2 896 -345019540 32 896 -345019544 2 896 -345019548 32 896 -345019552 2 896 -345019556 32 896 -345019560 2 896 -345019564 32 896 -345019568 2 896 -345019572 32 896 -345019576 2 896 -345019580 32 896 -345019584 2 896 -345019588 32 896 -345019592 2 896 -345019596 32 896 -345019600 2 896 -345019604 32 896 -345019608 2 896 -345019612 32 896 -345019616 2 896 -345019620 32 896 -345019624 2 896 -345019628 32 896 -345019632 2 896 -345019636 32 896 -345019640 2 896 -345019644 32 896 -345019648 2 896 -345019652 32 896 -345019656 2 896 -345019660 32 896 -345019664 2 896 -345019668 32 896 -345019672 2 896 -345019676 32 896 -345019680 2 896 -345019684 32 896 -345019688 2 896 -345019692 32 896 -345019696 2 896 -345019700 32 896 -345019704 2 896 -345019708 32 896 -345019712 2 896 -345023492 2 896 -345023496 2 896 -345023500 2 896 -345023504 2 896 -345023508 2 896 -345023512 2 896 -345023516 2 896 -345023520 2 896 -345023524 2 896 -345023528 2 896 -345023532 2 896 -345023536 2 896 -345023540 2 896 -345023544 2 896 -345023548 2 896 -345023552 2 896 -345023556 2 896 -345023560 2 896 -345023564 2 896 -345023568 2 896 -345023572 2 896 -345023576 2 896 -345023580 2 896 -345023584 2 896 -345023588 2 896 -345023592 2 896 -345023596 2 896 -345023600 2 896 -345023604 2 896 -345023608 2 896 -345023612 2 896 -345023616 2 896 -345023620 2 896 -345023624 2 896 -345023628 2 896 -345023632 2 896 -345023636 2 896 -345023640 2 896 -345023644 2 896 -345023648 2 896 -345023652 2 896 -345023656 2 896 -345023660 2 896 -345023664 2 896 -345023668 2 896 -345023672 2 896 -345023676 2 896 -345023680 2 896 -345023684 2 896 -345023688 2 896 -345023692 2 896 -345023696 2 896 -345023700 2 896 -345023704 2 896 -345023708 2 896 -345023712 2 896 -345023716 2 896 -345023720 2 896 -345023724 2 896 -345023728 2 896 -345023732 2 896 -345023736 2 896 -345023740 2 896 -345023744 2 896 -345023748 2 896 -345023752 2 896 -345023756 2 896 -345023760 2 896 -345023764 2 896 -345023768 2 896 -345023772 2 896 -345023776 2 896 -345023780 2 896 -345023784 2 896 -345023788 2 896 -345023792 2 896 -345023796 2 896 -345023800 2 896 -345023804 2 896 -345023808 2 896 -345023812 2 896 -345023816 2 896 -345023820 2 896 -345023824 2 896 -345023828 2 896 -345023832 2 896 -345023836 2 896 -345023840 2 896 -345023844 2 896 -345023848 2 896 -345023852 2 896 -345023856 2 896 -345023860 2 896 -345023864 2 896 -345023868 2 896 -345023872 2 896 -345027588 2 896 -345027592 2 896 -345027596 2 896 -345027600 2 896 -345027604 2 896 -345027608 2 896 -345027612 2 896 -345027616 2 896 -345027620 2 896 -345027624 2 896 -345027628 2 896 -345027632 2 896 -345027636 2 896 -345027640 2 896 -345027644 2 896 -345027648 2 896 -345027652 2 896 -345027656 2 896 -345027660 2 896 -345027664 2 896 -345027668 2 896 -345027672 2 896 -345027676 2 896 -345027680 2 896 -345027684 2 896 -345027688 2 896 -345027692 2 896 -345027696 2 896 -345027700 2 896 -345027704 2 896 -345027708 2 896 -345027712 2 896 -345027716 2 896 -345027720 2 896 -345027724 2 896 -345027728 2 896 -345027732 2 896 -345027736 2 896 -345027740 2 896 -345027744 2 896 -345027748 2 896 -345027752 2 896 -345027756 2 896 -345027760 2 896 -345027764 2 896 -345027768 2 896 -345027772 2 896 -345027776 2 896 -345027780 2 896 -345027784 2 896 -345027788 2 896 -345027792 2 896 -345027796 2 896 -345027800 2 896 -345027804 2 896 -345027808 2 896 -345027812 2 896 -345027816 2 896 -345027820 2 896 -345027824 2 896 -345027828 2 896 -345027832 2 896 -345027836 2 896 -345027840 2 896 -345027844 2 896 -345027848 2 896 -345027852 2 896 -345027856 2 896 -345027860 2 896 -345027864 2 896 -345027868 2 896 -345027872 2 896 -345027876 2 896 -345027880 2 896 -345027884 2 896 -345027888 2 896 -345027892 2 896 -345027896 2 896 -345027900 2 896 -345027904 2 896 -345027908 2 896 -345027912 2 896 -345027916 2 896 -345027920 2 896 -345027924 2 896 -345027928 2 896 -345027932 2 896 -345027936 2 896 -345027940 2 896 -345027944 2 896 -345027948 2 896 -345027952 2 896 -345027956 2 896 -345027960 2 896 -345027964 2 896 -345027968 2 896 -345027972 2 896 -345027976 2 896 -345027980 2 896 -345027984 2 896 -345027988 2 896 -345027992 2 896 -345027996 2 896 -345028000 2 896 -345028004 2 896 -345028008 2 896 -345028012 2 896 -345028016 2 896 -345028020 2 896 -345028024 2 896 -345028028 2 896 -345028032 2 896 -345031684 2 896 -345031688 2 896 -345031692 2 896 -345031696 2 896 -345031700 2 896 -345031704 2 896 -345031708 2 896 -345031712 2 896 -345031716 2 896 -345031720 2 896 -345031724 2 896 -345031728 2 896 -345031732 2 896 -345031736 2 896 -345031740 2 896 -345031744 2 896 -345031748 2 896 -345031752 2 896 -345031756 2 896 -345031760 2 896 -345031764 2 896 -345031768 2 896 -345031772 2 896 -345031776 2 896 -345031780 2 896 -345031784 2 896 -345031788 2 896 -345031792 2 896 -345031796 2 896 -345031800 2 896 -345031804 2 896 -345031808 2 896 -345031812 2 896 -345031816 2 896 -345031820 2 896 -345031824 2 896 -345031828 2 896 -345031832 2 896 -345031836 2 896 -345031840 2 896 -345031844 2 896 -345031848 2 896 -345031852 2 896 -345031856 2 896 -345031860 2 896 -345031864 2 896 -345031868 2 896 -345031872 2 896 -345031876 2 896 -345031880 2 896 -345031884 2 896 -345031888 2 896 -345031892 2 896 -345031896 2 896 -345031900 2 896 -345031904 2 896 -345031908 2 896 -345031912 2 896 -345031916 2 896 -345031920 2 896 -345031924 2 896 -345031928 2 896 -345031932 2 896 -345031936 2 896 -345031940 2 896 -345031944 2 896 -345031948 2 896 -345031952 2 896 -345031956 2 896 -345031960 2 896 -345031964 2 896 -345031968 2 896 -345031972 2 896 -345031976 2 896 -345031980 2 896 -345031984 2 896 -345031988 2 896 -345031992 2 896 -345031996 2 896 -345032000 2 896 -345032004 2 896 -345032008 2 896 -345032012 2 896 -345032016 2 896 -345032020 2 896 -345032024 2 896 -345032028 2 896 -345032032 2 896 -345032036 2 896 -345032040 2 896 -345032044 2 896 -345032048 2 896 -345032052 2 896 -345032056 2 896 -345032060 2 896 -345032064 2 896 -345032068 2 896 -345032072 2 896 -345032076 2 896 -345032080 2 896 -345032084 2 896 -345032088 2 896 -345032092 2 896 -345032096 2 896 -345032100 2 896 -345032104 2 896 -345032108 2 896 -345032112 2 896 -345032116 2 896 -345032120 2 896 -345032124 2 896 -345032128 2 896 -345032132 2 896 -345032136 2 896 -345032140 2 896 -345032144 2 896 -345032148 2 896 -345032152 2 896 -345032156 2 896 -345032160 2 896 -345032164 2 896 -345032168 2 896 -345032172 2 896 -345032176 2 896 -345032180 2 896 -345032184 2 896 -345032188 2 896 -345032192 2 896 -345035780 2 896 -345035784 2 896 -345035788 2 896 -345035792 2 896 -345035796 2 896 -345035800 2 896 -345035804 2 896 -345035808 2 896 -345035812 2 896 -345035816 2 896 -345035820 2 896 -345035824 2 896 -345035828 2 896 -345035832 2 896 -345035836 2 896 -345035840 2 896 -345035844 2 896 -345035848 2 896 -345035852 2 896 -345035856 2 896 -345035860 2 896 -345035864 2 896 -345035868 2 896 -345035872 2 896 -345035876 2 896 -345035880 2 896 -345035884 2 896 -345035888 2 896 -345035892 2 896 -345035896 2 896 -345035900 2 896 -345035904 2 896 -345035908 2 896 -345035912 2 896 -345035916 2 896 -345035920 2 896 -345035924 2 896 -345035928 2 896 -345035932 2 896 -345035936 2 896 -345035940 2 896 -345035944 2 896 -345035948 2 896 -345035952 2 896 -345035956 2 896 -345035960 2 896 -345035964 2 896 -345035968 2 896 -345035972 2 896 -345035976 2 896 -345035980 2 896 -345035984 2 896 -345035988 2 896 -345035992 2 896 -345035996 2 896 -345036000 2 896 -345036004 2 896 -345036008 2 896 -345036012 2 896 -345036016 2 896 -345036020 2 896 -345036024 2 896 -345036028 2 896 -345036032 2 896 -345036036 2 896 -345036040 2 896 -345036044 2 896 -345036048 2 896 -345036052 2 896 -345036056 2 896 -345036060 2 896 -345036064 2 896 -345036068 2 896 -345036072 2 896 -345036076 2 896 -345036080 2 896 -345036084 2 896 -345036088 2 896 -345036092 2 896 -345036096 2 896 -345036100 2 896 -345036104 2 896 -345036108 2 896 -345036112 2 896 -345036116 2 896 -345036120 2 896 -345036124 2 896 -345036128 2 896 -345036132 2 896 -345036136 2 896 -345036140 2 896 -345036144 2 896 -345036148 2 896 -345036152 2 896 -345036156 2 896 -345036160 2 896 -345036164 2 896 -345036168 2 896 -345036172 2 896 -345036176 2 896 -345036180 2 896 -345036184 2 896 -345036188 2 896 -345036192 2 896 -345036196 2 896 -345036200 2 896 -345036204 2 896 -345036208 2 896 -345036212 2 896 -345036216 2 896 -345036220 2 896 -345036224 2 896 -345036228 2 896 -345036232 2 896 -345036236 2 896 -345036240 2 896 -345036244 2 896 -345036248 2 896 -345036252 2 896 -345036256 2 896 -345036260 2 896 -345036264 2 896 -345036268 2 896 -345036272 2 896 -345036276 2 896 -345036280 2 896 -345036284 2 896 -345036288 2 896 -345036292 2 896 -345036296 2 896 -345036300 2 896 -345036304 2 896 -345036308 2 896 -345036312 2 896 -345036316 2 896 -345036320 2 896 -345039876 2 896 -345039880 2 896 -345039884 2 896 -345039888 2 896 -345039892 2 896 -345039896 2 896 -345039900 2 896 -345039904 2 896 -345039908 2 896 -345039912 2 896 -345039916 2 896 -345039920 2 896 -345039924 2 896 -345039928 2 896 -345039932 2 896 -345039936 2 896 -345039940 2 896 -345039944 2 896 -345039948 2 896 -345039952 2 896 -345039956 2 896 -345039960 2 896 -345039964 2 896 -345039968 2 896 -345039972 2 896 -345039976 2 896 -345039980 2 896 -345039984 2 896 -345039988 2 896 -345039992 2 896 -345039996 2 896 -345040000 2 896 -345040004 2 896 -345040008 2 896 -345040012 2 896 -345040016 2 896 -345040020 2 896 -345040024 2 896 -345040028 2 896 -345040032 2 896 -345040036 2 896 -345040040 2 896 -345040044 2 896 -345040048 2 896 -345040052 2 896 -345040056 2 896 -345040060 2 896 -345040064 2 896 -345040068 2 896 -345040072 2 896 -345040076 2 896 -345040080 2 896 -345040084 2 896 -345040088 2 896 -345040092 2 896 -345040096 2 896 -345040100 2 896 -345040104 2 896 -345040108 2 896 -345040112 2 896 -345040116 2 896 -345040120 2 896 -345040124 2 896 -345040128 2 896 -345040132 2 896 -345040136 2 896 -345040140 2 896 -345040144 2 896 -345040148 2 896 -345040152 2 896 -345040156 2 896 -345040160 2 896 -345040164 2 896 -345040168 2 896 -345040172 2 896 -345040176 2 896 -345040180 2 896 -345040184 2 896 -345040188 2 896 -345040192 2 896 -345040196 2 896 -345040200 2 896 -345040204 2 896 -345040208 2 896 -345040212 2 896 -345040216 2 896 -345040220 2 896 -345040224 2 896 -345040228 2 896 -345040232 2 896 -345040236 2 896 -345040240 2 896 -345040244 2 896 -345040248 2 896 -345040252 2 896 -345040256 2 896 -345040260 2 896 -345040264 2 896 -345040268 2 896 -345040272 2 896 -345040276 2 896 -345040280 2 896 -345040284 2 896 -345040288 2 896 -345040292 2 896 -345040296 2 896 -345040300 2 896 -345040304 2 896 -345040308 2 896 -345040312 2 896 -345040316 2 896 -345040320 2 896 -345040324 2 896 -345040328 2 896 -345040332 2 896 -345040336 2 896 -345040340 2 896 -345040344 2 896 -345040348 2 896 -345040352 2 896 -345040356 2 896 -345040360 2 896 -345040364 2 896 -345040368 2 896 -345040372 2 896 -345040376 2 896 -345040380 2 896 -345040384 2 896 -345040388 2 896 -345040392 2 896 -345040396 2 896 -345040400 2 896 -345040404 2 896 -345040408 2 896 -345040412 2 896 -345040416 2 896 -345040420 2 896 -345040424 2 896 -345040428 2 896 -345040432 2 896 -345040436 2 896 -345040440 2 896 -345040444 2 896 -345040448 2 896 -345043972 2 896 -345043976 2 896 -345043980 2 896 -345043984 2 896 -345043988 2 896 -345043992 2 896 -345043996 2 896 -345044000 2 896 -345044004 2 896 -345044008 2 896 -345044012 2 896 -345044016 2 896 -345044020 2 896 -345044024 2 896 -345044028 2 896 -345044032 2 896 -345044036 2 896 -345044040 2 896 -345044044 2 896 -345044048 2 896 -345044052 2 896 -345044056 2 896 -345044060 2 896 -345044064 2 896 -345044068 2 896 -345044072 2 896 -345044076 2 896 -345044080 2 896 -345044084 2 896 -345044088 2 896 -345044092 2 896 -345044096 2 896 -345044100 2 896 -345044104 2 896 -345044108 2 896 -345044112 2 896 -345044116 2 896 -345044120 2 896 -345044124 2 896 -345044128 2 896 -345044132 2 896 -345044136 2 896 -345044140 2 896 -345044144 2 896 -345044148 2 896 -345044152 2 896 -345044156 2 896 -345044160 2 896 -345044164 2 896 -345044168 2 896 -345044172 2 896 -345044176 2 896 -345044180 2 896 -345044184 2 896 -345044188 2 896 -345044192 2 896 -345044196 2 896 -345044200 2 896 -345044204 2 896 -345044208 2 896 -345044212 2 896 -345044216 2 896 -345044220 2 896 -345044224 2 896 -345044228 2 896 -345044232 2 896 -345044236 2 896 -345044240 2 896 -345044244 2 896 -345044248 2 896 -345044252 2 896 -345044256 2 896 -345044260 2 896 -345044264 2 896 -345044268 2 896 -345044272 2 896 -345044276 2 896 -345044280 2 896 -345044284 2 896 -345044288 2 896 -345044292 2 896 -345044296 2 896 -345044300 2 896 -345044304 2 896 -345044308 2 896 -345044312 2 896 -345044316 2 896 -345044320 2 896 -345044324 2 896 -345044328 2 896 -345044332 2 896 -345044336 2 896 -345044340 2 896 -345044344 2 896 -345044348 2 896 -345044352 2 896 -345044356 2 896 -345044360 2 896 -345044364 2 896 -345044368 2 896 -345044372 2 896 -345044376 2 896 -345044380 2 896 -345044384 2 896 -345044388 2 896 -345044392 2 896 -345044396 2 896 -345044400 2 896 -345044404 2 896 -345044408 2 896 -345044412 2 896 -345044416 2 896 -345044420 2 896 -345044424 2 896 -345044428 2 896 -345044432 2 896 -345044436 2 896 -345044440 2 896 -345044444 2 896 -345044448 2 896 -345044452 2 896 -345044456 2 896 -345044460 2 896 -345044464 2 896 -345044468 2 896 -345044472 2 896 -345044476 2 896 -345044480 2 896 -345044484 2 896 -345044488 2 896 -345044492 2 896 -345044496 2 896 -345044500 2 896 -345044504 2 896 -345044508 2 896 -345044512 2 896 -345044516 2 896 -345044520 2 896 -345044524 2 896 -345044528 2 896 -345044532 2 896 -345044536 2 896 -345044540 2 896 -345044544 2 896 -345044548 2 896 -345044552 2 896 -345044556 2 896 -345044560 2 896 -345044564 2 896 -345044568 2 896 -345044572 2 896 -345044576 2 896 -345044580 2 896 -345044584 2 896 -345044588 2 896 -345044592 2 896 -345044596 2 896 -345044600 2 896 -345044604 2 896 -345044608 2 896 -345248772 32 896 -345248776 2 896 -345248780 32 896 -345248784 2 896 -345248788 32 896 -345248792 2 896 -345248796 32 896 -345248800 2 896 -345248804 32 896 -345248808 2 896 -345248812 32 896 -345248816 2 896 -345248820 32 896 -345248824 2 896 -345248828 32 896 -345248832 2 896 -345248836 32 896 -345248840 2 896 -345248844 32 896 -345248848 2 896 -345248852 32 896 -345248856 2 896 -345248860 32 896 -345248864 2 896 -345248868 32 896 -345248872 2 896 -345248876 32 896 -345248880 2 896 -345248884 32 896 -345248888 2 896 -345248892 32 896 -345248896 2 896 -345248900 32 896 -345248904 2 896 -345248908 32 896 -345248912 2 896 -345248916 32 896 -345248920 2 896 -345248924 32 896 -345248928 2 896 -345252868 32 896 -345252872 2 896 -345252876 32 896 -345252880 2 896 -345252884 32 896 -345252888 2 896 -345252892 32 896 -345252896 2 896 -345252900 32 896 -345252904 2 896 -345252908 32 896 -345252912 2 896 -345252916 32 896 -345252920 2 896 -345252924 32 896 -345252928 2 896 -345252932 32 896 -345252936 2 896 -345252940 32 896 -345252944 2 896 -345252948 32 896 -345252952 2 896 -345252956 32 896 -345252960 2 896 -345252964 32 896 -345252968 2 896 -345252972 32 896 -345252976 2 896 -345252980 32 896 -345252984 2 896 -345252988 32 896 -345252992 2 896 -345252996 32 896 -345253000 2 896 -345253004 32 896 -345253008 2 896 -345253012 32 896 -345253016 2 896 -345253020 32 896 -345253024 2 896 -345253028 32 896 -345253032 2 896 -345253036 32 896 -345253040 2 896 -345253044 32 896 -345253048 2 896 -345253052 32 896 -345253056 2 896 -345256964 32 896 -345256968 2 896 -345256972 32 896 -345256976 2 896 -345256980 32 896 -345256984 2 896 -345256988 32 896 -345256992 2 896 -345256996 32 896 -345257000 2 896 -345257004 32 896 -345257008 2 896 -345257012 32 896 -345257016 2 896 -345257020 32 896 -345257024 2 896 -345257028 32 896 -345257032 2 896 -345257036 32 896 -345257040 2 896 -345257044 32 896 -345257048 2 896 -345257052 32 896 -345257056 2 896 -345257060 32 896 -345257064 2 896 -345257068 32 896 -345257072 2 896 -345257076 32 896 -345257080 2 896 -345257084 32 896 -345257088 2 896 -345257092 32 896 -345257096 2 896 -345257100 32 896 -345257104 2 896 -345257108 32 896 -345257112 2 896 -345257116 32 896 -345257120 2 896 -345257124 32 896 -345257128 2 896 -345257132 32 896 -345257136 2 896 -345257140 32 896 -345257144 2 896 -345257148 32 896 -345257152 2 896 -345257156 32 896 -345257160 2 896 -345257164 32 896 -345257168 2 896 -345257172 32 896 -345257176 2 896 -345257180 32 896 -345257184 2 896 -345261060 32 896 -345261064 2 896 -345261068 32 896 -345261072 2 896 -345261076 32 896 -345261080 2 896 -345261084 32 896 -345261088 2 896 -345261092 32 896 -345261096 2 896 -345261100 32 896 -345261104 2 896 -345261108 32 896 -345261112 2 896 -345261116 32 896 -345261120 2 896 -345261124 32 896 -345261128 2 896 -345261132 32 896 -345261136 2 896 -345261140 32 896 -345261144 2 896 -345261148 32 896 -345261152 2 896 -345261156 32 896 -345261160 2 896 -345261164 32 896 -345261168 2 896 -345261172 32 896 -345261176 2 896 -345261180 32 896 -345261184 2 896 -345261188 32 896 -345261192 2 896 -345261196 32 896 -345261200 2 896 -345261204 32 896 -345261208 2 896 -345261212 32 896 -345261216 2 896 -345261220 32 896 -345261224 2 896 -345261228 32 896 -345261232 2 896 -345261236 32 896 -345261240 2 896 -345261244 32 896 -345261248 2 896 -345261252 32 896 -345261256 2 896 -345261260 32 896 -345261264 2 896 -345261268 32 896 -345261272 2 896 -345261276 32 896 -345261280 2 896 -345265156 32 896 -345265160 2 896 -345265164 32 896 -345265168 2 896 -345265172 32 896 -345265176 2 896 -345265180 32 896 -345265184 2 896 -345265188 32 896 -345265192 2 896 -345265196 32 896 -345265200 2 896 -345265204 32 896 -345265208 2 896 -345265212 32 896 -345265216 2 896 -345265220 32 896 -345265224 2 896 -345265228 32 896 -345265232 2 896 -345265236 32 896 -345265240 2 896 -345265244 32 896 -345265248 2 896 -345265252 32 896 -345265256 2 896 -345265260 32 896 -345265264 2 896 -345265268 32 896 -345265272 2 896 -345265276 32 896 -345265280 2 896 -345265284 32 896 -345265288 2 896 -345265292 32 896 -345265296 2 896 -345265300 32 896 -345265304 2 896 -345265308 32 896 -345265312 2 896 -345265316 32 896 -345265320 2 896 -345265324 32 896 -345265328 2 896 -345265332 32 896 -345265336 2 896 -345265340 32 896 -345265344 2 896 -345265348 32 896 -345265352 2 896 -345265356 32 896 -345265360 2 896 -345265364 32 896 -345265368 2 896 -345265372 32 896 -345265376 2 896 -345265380 32 896 -345265384 2 896 -345265388 32 896 -345265392 2 896 -345265396 32 896 -345265400 2 896 -345265404 32 896 -345265408 2 896 -345269252 32 896 -345269256 2 896 -345269260 32 896 -345269264 2 896 -345269268 32 896 -345269272 2 896 -345269276 32 896 -345269280 2 896 -345269284 32 896 -345269288 2 896 -345269292 32 896 -345269296 2 896 -345269300 32 896 -345269304 2 896 -345269308 32 896 -345269312 2 896 -345269316 32 896 -345269320 2 896 -345269324 32 896 -345269328 2 896 -345269332 32 896 -345269336 2 896 -345269340 32 896 -345269344 2 896 -345269348 32 896 -345269352 2 896 -345269356 32 896 -345269360 2 896 -345269364 32 896 -345269368 2 896 -345269372 32 896 -345269376 2 896 -345269380 32 896 -345269384 2 896 -345269388 32 896 -345269392 2 896 -345269396 32 896 -345269400 2 896 -345269404 32 896 -345269408 2 896 -345269412 32 896 -345269416 2 896 -345269420 32 896 -345269424 2 896 -345269428 32 896 -345269432 2 896 -345269436 32 896 -345269440 2 896 -345269444 32 896 -345269448 2 896 -345269452 32 896 -345269456 2 896 -345269460 32 896 -345269464 2 896 -345269468 32 896 -345269472 2 896 -345269476 32 896 -345269480 2 896 -345269484 32 896 -345269488 2 896 -345269492 32 896 -345269496 2 896 -345269500 32 896 -345269504 2 896 -345269508 32 896 -345269512 2 896 -345269516 32 896 -345269520 2 896 -345269524 32 896 -345269528 2 896 -345269532 32 896 -345269536 2 896 -345273348 32 896 -345273352 2 896 -345273356 32 896 -345273360 2 896 -345273364 32 896 -345273368 2 896 -345273372 32 896 -345273376 2 896 -345273380 32 896 -345273384 2 896 -345273388 32 896 -345273392 2 896 -345273396 32 896 -345273400 2 896 -345273404 32 896 -345273408 2 896 -345273412 32 896 -345273416 2 896 -345273420 32 896 -345273424 2 896 -345273428 32 896 -345273432 2 896 -345273436 32 896 -345273440 2 896 -345273444 32 896 -345273448 2 896 -345273452 32 896 -345273456 2 896 -345273460 32 896 -345273464 2 896 -345273468 32 896 -345273472 2 896 -345273476 32 896 -345273480 2 896 -345273484 32 896 -345273488 2 896 -345273492 32 896 -345273496 2 896 -345273500 32 896 -345273504 2 896 -345273508 32 896 -345273512 2 896 -345273516 32 896 -345273520 2 896 -345273524 32 896 -345273528 2 896 -345273532 32 896 -345273536 2 896 -345273540 32 896 -345273544 2 896 -345273548 32 896 -345273552 2 896 -345273556 32 896 -345273560 2 896 -345273564 32 896 -345273568 2 896 -345273572 32 896 -345273576 2 896 -345273580 32 896 -345273584 2 896 -345273588 32 896 -345273592 2 896 -345273596 32 896 -345273600 2 896 -345273604 32 896 -345273608 2 896 -345273612 32 896 -345273616 2 896 -345273620 32 896 -345273624 2 896 -345273628 32 896 -345273632 2 896 -345277444 32 896 -345277448 2 896 -345277452 32 896 -345277456 2 896 -345277460 32 896 -345277464 2 896 -345277468 32 896 -345277472 2 896 -345277476 32 896 -345277480 2 896 -345277484 32 896 -345277488 2 896 -345277492 32 896 -345277496 2 896 -345277500 32 896 -345277504 2 896 -345277508 32 896 -345277512 2 896 -345277516 32 896 -345277520 2 896 -345277524 32 896 -345277528 2 896 -345277532 32 896 -345277536 2 896 -345277540 32 896 -345277544 2 896 -345277548 32 896 -345277552 2 896 -345277556 32 896 -345277560 2 896 -345277564 32 896 -345277568 2 896 -345277572 32 896 -345277576 2 896 -345277580 32 896 -345277584 2 896 -345277588 32 896 -345277592 2 896 -345277596 32 896 -345277600 2 896 -345277604 32 896 -345277608 2 896 -345277612 32 896 -345277616 2 896 -345277620 32 896 -345277624 2 896 -345277628 32 896 -345277632 2 896 -345277636 32 896 -345277640 2 896 -345277644 32 896 -345277648 2 896 -345277652 32 896 -345277656 2 896 -345277660 32 896 -345277664 2 896 -345277668 32 896 -345277672 2 896 -345277676 32 896 -345277680 2 896 -345277684 32 896 -345277688 2 896 -345277692 32 896 -345277696 2 896 -345277700 32 896 -345277704 2 896 -345277708 32 896 -345277712 2 896 -345277716 32 896 -345277720 2 896 -345277724 32 896 -345277728 2 896 -345277732 32 896 -345277736 2 896 -345277740 32 896 -345277744 2 896 -345277748 32 896 -345277752 2 896 -345277756 32 896 -345277760 2 896 -345281540 32 896 -345281544 2 896 -345281548 32 896 -345281552 2 896 -345281556 32 896 -345281560 2 896 -345281564 32 896 -345281568 2 896 -345281572 32 896 -345281576 2 896 -345281580 32 896 -345281584 2 896 -345281588 32 896 -345281592 2 896 -345281596 32 896 -345281600 2 896 -345281604 32 896 -345281608 2 896 -345281612 32 896 -345281616 2 896 -345281620 32 896 -345281624 2 896 -345281628 32 896 -345281632 2 896 -345281636 32 896 -345281640 2 896 -345281644 32 896 -345281648 2 896 -345281652 32 896 -345281656 2 896 -345281660 32 896 -345281664 2 896 -345281668 32 896 -345281672 2 896 -345281676 32 896 -345281680 2 896 -345281684 32 896 -345281688 2 896 -345281692 32 896 -345281696 2 896 -345281700 32 896 -345281704 2 896 -345281708 32 896 -345281712 2 896 -345281716 32 896 -345281720 2 896 -345281724 32 896 -345281728 2 896 -345281732 32 896 -345281736 2 896 -345281740 32 896 -345281744 2 896 -345281748 32 896 -345281752 2 896 -345281756 32 896 -345281760 2 896 -345281764 32 896 -345281768 2 896 -345281772 32 896 -345281776 2 896 -345281780 32 896 -345281784 2 896 -345281788 32 896 -345281792 2 896 -345281796 32 896 -345281800 2 896 -345281804 32 896 -345281808 2 896 -345281812 32 896 -345281816 2 896 -345281820 32 896 -345281824 2 896 -345281828 32 896 -345281832 2 896 -345281836 32 896 -345281840 2 896 -345281844 32 896 -345281848 2 896 -345281852 32 896 -345281856 2 896 -345285636 2 896 -345285640 2 896 -345285644 2 896 -345285648 2 896 -345285652 2 896 -345285656 2 896 -345285660 2 896 -345285664 2 896 -345285668 2 896 -345285672 2 896 -345285676 2 896 -345285680 2 896 -345285684 2 896 -345285688 2 896 -345285692 2 896 -345285696 2 896 -345285700 2 896 -345285704 2 896 -345285708 2 896 -345285712 2 896 -345285716 2 896 -345285720 2 896 -345285724 2 896 -345285728 2 896 -345285732 2 896 -345285736 2 896 -345285740 2 896 -345285744 2 896 -345285748 2 896 -345285752 2 896 -345285756 2 896 -345285760 2 896 -345285764 2 896 -345285768 2 896 -345285772 2 896 -345285776 2 896 -345285780 2 896 -345285784 2 896 -345285788 2 896 -345285792 2 896 -345285796 2 896 -345285800 2 896 -345285804 2 896 -345285808 2 896 -345285812 2 896 -345285816 2 896 -345285820 2 896 -345285824 2 896 -345285828 2 896 -345285832 2 896 -345285836 2 896 -345285840 2 896 -345285844 2 896 -345285848 2 896 -345285852 2 896 -345285856 2 896 -345285860 2 896 -345285864 2 896 -345285868 2 896 -345285872 2 896 -345285876 2 896 -345285880 2 896 -345285884 2 896 -345285888 2 896 -345285892 2 896 -345285896 2 896 -345285900 2 896 -345285904 2 896 -345285908 2 896 -345285912 2 896 -345285916 2 896 -345285920 2 896 -345285924 2 896 -345285928 2 896 -345285932 2 896 -345285936 2 896 -345285940 2 896 -345285944 2 896 -345285948 2 896 -345285952 2 896 -345285956 2 896 -345285960 2 896 -345285964 2 896 -345285968 2 896 -345285972 2 896 -345285976 2 896 -345285980 2 896 -345285984 2 896 -345285988 2 896 -345285992 2 896 -345285996 2 896 -345286000 2 896 -345286004 2 896 -345286008 2 896 -345286012 2 896 -345286016 2 896 -345289732 2 896 -345289736 2 896 -345289740 2 896 -345289744 2 896 -345289748 2 896 -345289752 2 896 -345289756 2 896 -345289760 2 896 -345289764 2 896 -345289768 2 896 -345289772 2 896 -345289776 2 896 -345289780 2 896 -345289784 2 896 -345289788 2 896 -345289792 2 896 -345289796 2 896 -345289800 2 896 -345289804 2 896 -345289808 2 896 -345289812 2 896 -345289816 2 896 -345289820 2 896 -345289824 2 896 -345289828 2 896 -345289832 2 896 -345289836 2 896 -345289840 2 896 -345289844 2 896 -345289848 2 896 -345289852 2 896 -345289856 2 896 -345289860 2 896 -345289864 2 896 -345289868 2 896 -345289872 2 896 -345289876 2 896 -345289880 2 896 -345289884 2 896 -345289888 2 896 -345289892 2 896 -345289896 2 896 -345289900 2 896 -345289904 2 896 -345289908 2 896 -345289912 2 896 -345289916 2 896 -345289920 2 896 -345289924 2 896 -345289928 2 896 -345289932 2 896 -345289936 2 896 -345289940 2 896 -345289944 2 896 -345289948 2 896 -345289952 2 896 -345289956 2 896 -345289960 2 896 -345289964 2 896 -345289968 2 896 -345289972 2 896 -345289976 2 896 -345289980 2 896 -345289984 2 896 -345289988 2 896 -345289992 2 896 -345289996 2 896 -345290000 2 896 -345290004 2 896 -345290008 2 896 -345290012 2 896 -345290016 2 896 -345290020 2 896 -345290024 2 896 -345290028 2 896 -345290032 2 896 -345290036 2 896 -345290040 2 896 -345290044 2 896 -345290048 2 896 -345290052 2 896 -345290056 2 896 -345290060 2 896 -345290064 2 896 -345290068 2 896 -345290072 2 896 -345290076 2 896 -345290080 2 896 -345290084 2 896 -345290088 2 896 -345290092 2 896 -345290096 2 896 -345290100 2 896 -345290104 2 896 -345290108 2 896 -345290112 2 896 -345290116 2 896 -345290120 2 896 -345290124 2 896 -345290128 2 896 -345290132 2 896 -345290136 2 896 -345290140 2 896 -345290144 2 896 -345290148 2 896 -345290152 2 896 -345290156 2 896 -345290160 2 896 -345290164 2 896 -345290168 2 896 -345290172 2 896 -345290176 2 896 -345293828 2 896 -345293832 2 896 -345293836 2 896 -345293840 2 896 -345293844 2 896 -345293848 2 896 -345293852 2 896 -345293856 2 896 -345293860 2 896 -345293864 2 896 -345293868 2 896 -345293872 2 896 -345293876 2 896 -345293880 2 896 -345293884 2 896 -345293888 2 896 -345293892 2 896 -345293896 2 896 -345293900 2 896 -345293904 2 896 -345293908 2 896 -345293912 2 896 -345293916 2 896 -345293920 2 896 -345293924 2 896 -345293928 2 896 -345293932 2 896 -345293936 2 896 -345293940 2 896 -345293944 2 896 -345293948 2 896 -345293952 2 896 -345293956 2 896 -345293960 2 896 -345293964 2 896 -345293968 2 896 -345293972 2 896 -345293976 2 896 -345293980 2 896 -345293984 2 896 -345293988 2 896 -345293992 2 896 -345293996 2 896 -345294000 2 896 -345294004 2 896 -345294008 2 896 -345294012 2 896 -345294016 2 896 -345294020 2 896 -345294024 2 896 -345294028 2 896 -345294032 2 896 -345294036 2 896 -345294040 2 896 -345294044 2 896 -345294048 2 896 -345294052 2 896 -345294056 2 896 -345294060 2 896 -345294064 2 896 -345294068 2 896 -345294072 2 896 -345294076 2 896 -345294080 2 896 -345294084 2 896 -345294088 2 896 -345294092 2 896 -345294096 2 896 -345294100 2 896 -345294104 2 896 -345294108 2 896 -345294112 2 896 -345294116 2 896 -345294120 2 896 -345294124 2 896 -345294128 2 896 -345294132 2 896 -345294136 2 896 -345294140 2 896 -345294144 2 896 -345294148 2 896 -345294152 2 896 -345294156 2 896 -345294160 2 896 -345294164 2 896 -345294168 2 896 -345294172 2 896 -345294176 2 896 -345294180 2 896 -345294184 2 896 -345294188 2 896 -345294192 2 896 -345294196 2 896 -345294200 2 896 -345294204 2 896 -345294208 2 896 -345294212 2 896 -345294216 2 896 -345294220 2 896 -345294224 2 896 -345294228 2 896 -345294232 2 896 -345294236 2 896 -345294240 2 896 -345294244 2 896 -345294248 2 896 -345294252 2 896 -345294256 2 896 -345294260 2 896 -345294264 2 896 -345294268 2 896 -345294272 2 896 -345294276 2 896 -345294280 2 896 -345294284 2 896 -345294288 2 896 -345294292 2 896 -345294296 2 896 -345294300 2 896 -345294304 2 896 -345294308 2 896 -345294312 2 896 -345294316 2 896 -345294320 2 896 -345294324 2 896 -345294328 2 896 -345294332 2 896 -345294336 2 896 -345297924 2 896 -345297928 2 896 -345297932 2 896 -345297936 2 896 -345297940 2 896 -345297944 2 896 -345297948 2 896 -345297952 2 896 -345297956 2 896 -345297960 2 896 -345297964 2 896 -345297968 2 896 -345297972 2 896 -345297976 2 896 -345297980 2 896 -345297984 2 896 -345297988 2 896 -345297992 2 896 -345297996 2 896 -345298000 2 896 -345298004 2 896 -345298008 2 896 -345298012 2 896 -345298016 2 896 -345298020 2 896 -345298024 2 896 -345298028 2 896 -345298032 2 896 -345298036 2 896 -345298040 2 896 -345298044 2 896 -345298048 2 896 -345298052 2 896 -345298056 2 896 -345298060 2 896 -345298064 2 896 -345298068 2 896 -345298072 2 896 -345298076 2 896 -345298080 2 896 -345298084 2 896 -345298088 2 896 -345298092 2 896 -345298096 2 896 -345298100 2 896 -345298104 2 896 -345298108 2 896 -345298112 2 896 -345298116 2 896 -345298120 2 896 -345298124 2 896 -345298128 2 896 -345298132 2 896 -345298136 2 896 -345298140 2 896 -345298144 2 896 -345298148 2 896 -345298152 2 896 -345298156 2 896 -345298160 2 896 -345298164 2 896 -345298168 2 896 -345298172 2 896 -345298176 2 896 -345298180 2 896 -345298184 2 896 -345298188 2 896 -345298192 2 896 -345298196 2 896 -345298200 2 896 -345298204 2 896 -345298208 2 896 -345298212 2 896 -345298216 2 896 -345298220 2 896 -345298224 2 896 -345298228 2 896 -345298232 2 896 -345298236 2 896 -345298240 2 896 -345298244 2 896 -345298248 2 896 -345298252 2 896 -345298256 2 896 -345298260 2 896 -345298264 2 896 -345298268 2 896 -345298272 2 896 -345298276 2 896 -345298280 2 896 -345298284 2 896 -345298288 2 896 -345298292 2 896 -345298296 2 896 -345298300 2 896 -345298304 2 896 -345298308 2 896 -345298312 2 896 -345298316 2 896 -345298320 2 896 -345298324 2 896 -345298328 2 896 -345298332 2 896 -345298336 2 896 -345298340 2 896 -345298344 2 896 -345298348 2 896 -345298352 2 896 -345298356 2 896 -345298360 2 896 -345298364 2 896 -345298368 2 896 -345298372 2 896 -345298376 2 896 -345298380 2 896 -345298384 2 896 -345298388 2 896 -345298392 2 896 -345298396 2 896 -345298400 2 896 -345298404 2 896 -345298408 2 896 -345298412 2 896 -345298416 2 896 -345298420 2 896 -345298424 2 896 -345298428 2 896 -345298432 2 896 -345298436 2 896 -345298440 2 896 -345298444 2 896 -345298448 2 896 -345298452 2 896 -345298456 2 896 -345298460 2 896 -345298464 2 896 -345302020 2 896 -345302024 2 896 -345302028 2 896 -345302032 2 896 -345302036 2 896 -345302040 2 896 -345302044 2 896 -345302048 2 896 -345302052 2 896 -345302056 2 896 -345302060 2 896 -345302064 2 896 -345302068 2 896 -345302072 2 896 -345302076 2 896 -345302080 2 896 -345302084 2 896 -345302088 2 896 -345302092 2 896 -345302096 2 896 -345302100 2 896 -345302104 2 896 -345302108 2 896 -345302112 2 896 -345302116 2 896 -345302120 2 896 -345302124 2 896 -345302128 2 896 -345302132 2 896 -345302136 2 896 -345302140 2 896 -345302144 2 896 -345302148 2 896 -345302152 2 896 -345302156 2 896 -345302160 2 896 -345302164 2 896 -345302168 2 896 -345302172 2 896 -345302176 2 896 -345302180 2 896 -345302184 2 896 -345302188 2 896 -345302192 2 896 -345302196 2 896 -345302200 2 896 -345302204 2 896 -345302208 2 896 -345302212 2 896 -345302216 2 896 -345302220 2 896 -345302224 2 896 -345302228 2 896 -345302232 2 896 -345302236 2 896 -345302240 2 896 -345302244 2 896 -345302248 2 896 -345302252 2 896 -345302256 2 896 -345302260 2 896 -345302264 2 896 -345302268 2 896 -345302272 2 896 -345302276 2 896 -345302280 2 896 -345302284 2 896 -345302288 2 896 -345302292 2 896 -345302296 2 896 -345302300 2 896 -345302304 2 896 -345302308 2 896 -345302312 2 896 -345302316 2 896 -345302320 2 896 -345302324 2 896 -345302328 2 896 -345302332 2 896 -345302336 2 896 -345302340 2 896 -345302344 2 896 -345302348 2 896 -345302352 2 896 -345302356 2 896 -345302360 2 896 -345302364 2 896 -345302368 2 896 -345302372 2 896 -345302376 2 896 -345302380 2 896 -345302384 2 896 -345302388 2 896 -345302392 2 896 -345302396 2 896 -345302400 2 896 -345302404 2 896 -345302408 2 896 -345302412 2 896 -345302416 2 896 -345302420 2 896 -345302424 2 896 -345302428 2 896 -345302432 2 896 -345302436 2 896 -345302440 2 896 -345302444 2 896 -345302448 2 896 -345302452 2 896 -345302456 2 896 -345302460 2 896 -345302464 2 896 -345302468 2 896 -345302472 2 896 -345302476 2 896 -345302480 2 896 -345302484 2 896 -345302488 2 896 -345302492 2 896 -345302496 2 896 -345302500 2 896 -345302504 2 896 -345302508 2 896 -345302512 2 896 -345302516 2 896 -345302520 2 896 -345302524 2 896 -345302528 2 896 -345302532 2 896 -345302536 2 896 -345302540 2 896 -345302544 2 896 -345302548 2 896 -345302552 2 896 -345302556 2 896 -345302560 2 896 -345302564 2 896 -345302568 2 896 -345302572 2 896 -345302576 2 896 -345302580 2 896 -345302584 2 896 -345302588 2 896 -345302592 2 896 -345306116 2 896 -345306120 2 896 -345306124 2 896 -345306128 2 896 -345306132 2 896 -345306136 2 896 -345306140 2 896 -345306144 2 896 -345306148 2 896 -345306152 2 896 -345306156 2 896 -345306160 2 896 -345306164 2 896 -345306168 2 896 -345306172 2 896 -345306176 2 896 -345306180 2 896 -345306184 2 896 -345306188 2 896 -345306192 2 896 -345306196 2 896 -345306200 2 896 -345306204 2 896 -345306208 2 896 -345306212 2 896 -345306216 2 896 -345306220 2 896 -345306224 2 896 -345306228 2 896 -345306232 2 896 -345306236 2 896 -345306240 2 896 -345306244 2 896 -345306248 2 896 -345306252 2 896 -345306256 2 896 -345306260 2 896 -345306264 2 896 -345306268 2 896 -345306272 2 896 -345306276 2 896 -345306280 2 896 -345306284 2 896 -345306288 2 896 -345306292 2 896 -345306296 2 896 -345306300 2 896 -345306304 2 896 -345306308 2 896 -345306312 2 896 -345306316 2 896 -345306320 2 896 -345306324 2 896 -345306328 2 896 -345306332 2 896 -345306336 2 896 -345306340 2 896 -345306344 2 896 -345306348 2 896 -345306352 2 896 -345306356 2 896 -345306360 2 896 -345306364 2 896 -345306368 2 896 -345306372 2 896 -345306376 2 896 -345306380 2 896 -345306384 2 896 -345306388 2 896 -345306392 2 896 -345306396 2 896 -345306400 2 896 -345306404 2 896 -345306408 2 896 -345306412 2 896 -345306416 2 896 -345306420 2 896 -345306424 2 896 -345306428 2 896 -345306432 2 896 -345306436 2 896 -345306440 2 896 -345306444 2 896 -345306448 2 896 -345306452 2 896 -345306456 2 896 -345306460 2 896 -345306464 2 896 -345306468 2 896 -345306472 2 896 -345306476 2 896 -345306480 2 896 -345306484 2 896 -345306488 2 896 -345306492 2 896 -345306496 2 896 -345306500 2 896 -345306504 2 896 -345306508 2 896 -345306512 2 896 -345306516 2 896 -345306520 2 896 -345306524 2 896 -345306528 2 896 -345306532 2 896 -345306536 2 896 -345306540 2 896 -345306544 2 896 -345306548 2 896 -345306552 2 896 -345306556 2 896 -345306560 2 896 -345306564 2 896 -345306568 2 896 -345306572 2 896 -345306576 2 896 -345306580 2 896 -345306584 2 896 -345306588 2 896 -345306592 2 896 -345306596 2 896 -345306600 2 896 -345306604 2 896 -345306608 2 896 -345306612 2 896 -345306616 2 896 -345306620 2 896 -345306624 2 896 -345306628 2 896 -345306632 2 896 -345306636 2 896 -345306640 2 896 -345306644 2 896 -345306648 2 896 -345306652 2 896 -345306656 2 896 -345306660 2 896 -345306664 2 896 -345306668 2 896 -345306672 2 896 -345306676 2 896 -345306680 2 896 -345306684 2 896 -345306688 2 896 -345306692 2 896 -345306696 2 896 -345306700 2 896 -345306704 2 896 -345306708 2 896 -345306712 2 896 -345306716 2 896 -345306720 2 896 -345306724 2 896 -345306728 2 896 -345306732 2 896 -345306736 2 896 -345306740 2 896 -345306744 2 896 -345306748 2 896 -345306752 2 896 -345510916 32 896 -345510920 2 896 -345510924 32 896 -345510928 2 896 -345510932 32 896 -345510936 2 896 -345510940 32 896 -345510944 2 896 -345510948 32 896 -345510952 2 896 -345510956 32 896 -345510960 2 896 -345510964 32 896 -345510968 2 896 -345510972 32 896 -345510976 2 896 -345510980 32 896 -345510984 2 896 -345510988 32 896 -345510992 2 896 -345510996 32 896 -345511000 2 896 -345511004 32 896 -345511008 2 896 -345511012 32 896 -345511016 2 896 -345511020 32 896 -345511024 2 896 -345511028 32 896 -345511032 2 896 -345511036 32 896 -345511040 2 896 -345511044 32 896 -345511048 2 896 -345511052 32 896 -345511056 2 896 -345511060 32 896 -345511064 2 896 -345511068 32 896 -345511072 2 896 -345511076 32 896 -345511080 2 896 -345511084 32 896 -345511088 2 896 -345511092 32 896 -345511096 2 896 -345511100 32 896 -345511104 2 896 -345515012 32 896 -345515016 2 896 -345515020 32 896 -345515024 2 896 -345515028 32 896 -345515032 2 896 -345515036 32 896 -345515040 2 896 -345515044 32 896 -345515048 2 896 -345515052 32 896 -345515056 2 896 -345515060 32 896 -345515064 2 896 -345515068 32 896 -345515072 2 896 -345515076 32 896 -345515080 2 896 -345515084 32 896 -345515088 2 896 -345515092 32 896 -345515096 2 896 -345515100 32 896 -345515104 2 896 -345515108 32 896 -345515112 2 896 -345515116 32 896 -345515120 2 896 -345515124 32 896 -345515128 2 896 -345515132 32 896 -345515136 2 896 -345515140 32 896 -345515144 2 896 -345515148 32 896 -345515152 2 896 -345515156 32 896 -345515160 2 896 -345515164 32 896 -345515168 2 896 -345515172 32 896 -345515176 2 896 -345515180 32 896 -345515184 2 896 -345515188 32 896 -345515192 2 896 -345515196 32 896 -345515200 2 896 -345515204 32 896 -345515208 2 896 -345515212 32 896 -345515216 2 896 -345515220 32 896 -345515224 2 896 -345515228 32 896 -345515232 2 896 -345519108 32 896 -345519112 2 896 -345519116 32 896 -345519120 2 896 -345519124 32 896 -345519128 2 896 -345519132 32 896 -345519136 2 896 -345519140 32 896 -345519144 2 896 -345519148 32 896 -345519152 2 896 -345519156 32 896 -345519160 2 896 -345519164 32 896 -345519168 2 896 -345519172 32 896 -345519176 2 896 -345519180 32 896 -345519184 2 896 -345519188 32 896 -345519192 2 896 -345519196 32 896 -345519200 2 896 -345519204 32 896 -345519208 2 896 -345519212 32 896 -345519216 2 896 -345519220 32 896 -345519224 2 896 -345519228 32 896 -345519232 2 896 -345519236 32 896 -345519240 2 896 -345519244 32 896 -345519248 2 896 -345519252 32 896 -345519256 2 896 -345519260 32 896 -345519264 2 896 -345519268 32 896 -345519272 2 896 -345519276 32 896 -345519280 2 896 -345519284 32 896 -345519288 2 896 -345519292 32 896 -345519296 2 896 -345519300 32 896 -345519304 2 896 -345519308 32 896 -345519312 2 896 -345519316 32 896 -345519320 2 896 -345519324 32 896 -345519328 2 896 -345523204 32 896 -345523208 2 896 -345523212 32 896 -345523216 2 896 -345523220 32 896 -345523224 2 896 -345523228 32 896 -345523232 2 896 -345523236 32 896 -345523240 2 896 -345523244 32 896 -345523248 2 896 -345523252 32 896 -345523256 2 896 -345523260 32 896 -345523264 2 896 -345523268 32 896 -345523272 2 896 -345523276 32 896 -345523280 2 896 -345523284 32 896 -345523288 2 896 -345523292 32 896 -345523296 2 896 -345523300 32 896 -345523304 2 896 -345523308 32 896 -345523312 2 896 -345523316 32 896 -345523320 2 896 -345523324 32 896 -345523328 2 896 -345523332 32 896 -345523336 2 896 -345523340 32 896 -345523344 2 896 -345523348 32 896 -345523352 2 896 -345523356 32 896 -345523360 2 896 -345523364 32 896 -345523368 2 896 -345523372 32 896 -345523376 2 896 -345523380 32 896 -345523384 2 896 -345523388 32 896 -345523392 2 896 -345523396 32 896 -345523400 2 896 -345523404 32 896 -345523408 2 896 -345523412 32 896 -345523416 2 896 -345523420 32 896 -345523424 2 896 -345523428 32 896 -345523432 2 896 -345523436 32 896 -345523440 2 896 -345523444 32 896 -345523448 2 896 -345523452 32 896 -345523456 2 896 -345527300 32 896 -345527304 2 896 -345527308 32 896 -345527312 2 896 -345527316 32 896 -345527320 2 896 -345527324 32 896 -345527328 2 896 -345527332 32 896 -345527336 2 896 -345527340 32 896 -345527344 2 896 -345527348 32 896 -345527352 2 896 -345527356 32 896 -345527360 2 896 -345527364 32 896 -345527368 2 896 -345527372 32 896 -345527376 2 896 -345527380 32 896 -345527384 2 896 -345527388 32 896 -345527392 2 896 -345527396 32 896 -345527400 2 896 -345527404 32 896 -345527408 2 896 -345527412 32 896 -345527416 2 896 -345527420 32 896 -345527424 2 896 -345527428 32 896 -345527432 2 896 -345527436 32 896 -345527440 2 896 -345527444 32 896 -345527448 2 896 -345527452 32 896 -345527456 2 896 -345527460 32 896 -345527464 2 896 -345527468 32 896 -345527472 2 896 -345527476 32 896 -345527480 2 896 -345527484 32 896 -345527488 2 896 -345527492 32 896 -345527496 2 896 -345527500 32 896 -345527504 2 896 -345527508 32 896 -345527512 2 896 -345527516 32 896 -345527520 2 896 -345527524 32 896 -345527528 2 896 -345527532 32 896 -345527536 2 896 -345527540 32 896 -345527544 2 896 -345527548 32 896 -345527552 2 896 -345527556 32 896 -345527560 2 896 -345527564 32 896 -345527568 2 896 -345527572 32 896 -345527576 2 896 -345527580 32 896 -345527584 2 896 -345531396 32 896 -345531400 2 896 -345531404 32 896 -345531408 2 896 -345531412 32 896 -345531416 2 896 -345531420 32 896 -345531424 2 896 -345531428 32 896 -345531432 2 896 -345531436 32 896 -345531440 2 896 -345531444 32 896 -345531448 2 896 -345531452 32 896 -345531456 2 896 -345531460 32 896 -345531464 2 896 -345531468 32 896 -345531472 2 896 -345531476 32 896 -345531480 2 896 -345531484 32 896 -345531488 2 896 -345531492 32 896 -345531496 2 896 -345531500 32 896 -345531504 2 896 -345531508 32 896 -345531512 2 896 -345531516 32 896 -345531520 2 896 -345531524 32 896 -345531528 2 896 -345531532 32 896 -345531536 2 896 -345531540 32 896 -345531544 2 896 -345531548 32 896 -345531552 2 896 -345531556 32 896 -345531560 2 896 -345531564 32 896 -345531568 2 896 -345531572 32 896 -345531576 2 896 -345531580 32 896 -345531584 2 896 -345531588 32 896 -345531592 2 896 -345531596 32 896 -345531600 2 896 -345531604 32 896 -345531608 2 896 -345531612 32 896 -345531616 2 896 -345531620 32 896 -345531624 2 896 -345531628 32 896 -345531632 2 896 -345531636 32 896 -345531640 2 896 -345531644 32 896 -345531648 2 896 -345531652 32 896 -345531656 2 896 -345531660 32 896 -345531664 2 896 -345531668 32 896 -345531672 2 896 -345531676 32 896 -345531680 2 896 -345535492 32 896 -345535496 2 896 -345535500 32 896 -345535504 2 896 -345535508 32 896 -345535512 2 896 -345535516 32 896 -345535520 2 896 -345535524 32 896 -345535528 2 896 -345535532 32 896 -345535536 2 896 -345535540 32 896 -345535544 2 896 -345535548 32 896 -345535552 2 896 -345535556 32 896 -345535560 2 896 -345535564 32 896 -345535568 2 896 -345535572 32 896 -345535576 2 896 -345535580 32 896 -345535584 2 896 -345535588 32 896 -345535592 2 896 -345535596 32 896 -345535600 2 896 -345535604 32 896 -345535608 2 896 -345535612 32 896 -345535616 2 896 -345535620 32 896 -345535624 2 896 -345535628 32 896 -345535632 2 896 -345535636 32 896 -345535640 2 896 -345535644 32 896 -345535648 2 896 -345535652 32 896 -345535656 2 896 -345535660 32 896 -345535664 2 896 -345535668 32 896 -345535672 2 896 -345535676 32 896 -345535680 2 896 -345535684 32 896 -345535688 2 896 -345535692 32 896 -345535696 2 896 -345535700 32 896 -345535704 2 896 -345535708 32 896 -345535712 2 896 -345535716 32 896 -345535720 2 896 -345535724 32 896 -345535728 2 896 -345535732 32 896 -345535736 2 896 -345535740 32 896 -345535744 2 896 -345535748 32 896 -345535752 2 896 -345535756 32 896 -345535760 2 896 -345535764 32 896 -345535768 2 896 -345535772 32 896 -345535776 2 896 -345535780 32 896 -345535784 2 896 -345535788 32 896 -345535792 2 896 -345535796 32 896 -345535800 2 896 -345535804 32 896 -345535808 2 896 -345539588 32 896 -345539592 2 896 -345539596 32 896 -345539600 2 896 -345539604 32 896 -345539608 2 896 -345539612 32 896 -345539616 2 896 -345539620 32 896 -345539624 2 896 -345539628 32 896 -345539632 2 896 -345539636 32 896 -345539640 2 896 -345539644 32 896 -345539648 2 896 -345539652 32 896 -345539656 2 896 -345539660 32 896 -345539664 2 896 -345539668 32 896 -345539672 2 896 -345539676 32 896 -345539680 2 896 -345539684 32 896 -345539688 2 896 -345539692 32 896 -345539696 2 896 -345539700 32 896 -345539704 2 896 -345539708 32 896 -345539712 2 896 -345539716 32 896 -345539720 2 896 -345539724 32 896 -345539728 2 896 -345539732 32 896 -345539736 2 896 -345539740 32 896 -345539744 2 896 -345539748 32 896 -345539752 2 896 -345539756 32 896 -345539760 2 896 -345539764 32 896 -345539768 2 896 -345539772 32 896 -345539776 2 896 -345539780 32 896 -345539784 2 896 -345539788 32 896 -345539792 2 896 -345539796 32 896 -345539800 2 896 -345539804 32 896 -345539808 2 896 -345539812 32 896 -345539816 2 896 -345539820 32 896 -345539824 2 896 -345539828 32 896 -345539832 2 896 -345539836 32 896 -345539840 2 896 -345539844 32 896 -345539848 2 896 -345539852 32 896 -345539856 2 896 -345539860 32 896 -345539864 2 896 -345539868 32 896 -345539872 2 896 -345539876 32 896 -345539880 2 896 -345539884 32 896 -345539888 2 896 -345539892 32 896 -345539896 2 896 -345539900 32 896 -345539904 2 896 -345543684 2 896 -345543688 2 896 -345543692 2 896 -345543696 2 896 -345543700 2 896 -345543704 2 896 -345543708 2 896 -345543712 2 896 -345543716 2 896 -345543720 2 896 -345543724 2 896 -345543728 2 896 -345543732 2 896 -345543736 2 896 -345543740 2 896 -345543744 2 896 -345543748 2 896 -345543752 2 896 -345543756 2 896 -345543760 2 896 -345543764 2 896 -345543768 2 896 -345543772 2 896 -345543776 2 896 -345543780 2 896 -345543784 2 896 -345543788 2 896 -345543792 2 896 -345543796 2 896 -345543800 2 896 -345543804 2 896 -345543808 2 896 -345543812 2 896 -345543816 2 896 -345543820 2 896 -345543824 2 896 -345543828 2 896 -345543832 2 896 -345543836 2 896 -345543840 2 896 -345543844 2 896 -345543848 2 896 -345543852 2 896 -345543856 2 896 -345543860 2 896 -345543864 2 896 -345543868 2 896 -345543872 2 896 -345543876 2 896 -345543880 2 896 -345543884 2 896 -345543888 2 896 -345543892 2 896 -345543896 2 896 -345543900 2 896 -345543904 2 896 -345543908 2 896 -345543912 2 896 -345543916 2 896 -345543920 2 896 -345543924 2 896 -345543928 2 896 -345543932 2 896 -345543936 2 896 -345543940 2 896 -345543944 2 896 -345543948 2 896 -345543952 2 896 -345543956 2 896 -345543960 2 896 -345543964 2 896 -345543968 2 896 -345543972 2 896 -345543976 2 896 -345543980 2 896 -345543984 2 896 -345543988 2 896 -345543992 2 896 -345543996 2 896 -345544000 2 896 -345544004 2 896 -345544008 2 896 -345544012 2 896 -345544016 2 896 -345544020 2 896 -345544024 2 896 -345544028 2 896 -345544032 2 896 -345544036 2 896 -345544040 2 896 -345544044 2 896 -345544048 2 896 -345544052 2 896 -345544056 2 896 -345544060 2 896 -345544064 2 896 -345547780 2 896 -345547784 2 896 -345547788 2 896 -345547792 2 896 -345547796 2 896 -345547800 2 896 -345547804 2 896 -345547808 2 896 -345547812 2 896 -345547816 2 896 -345547820 2 896 -345547824 2 896 -345547828 2 896 -345547832 2 896 -345547836 2 896 -345547840 2 896 -345547844 2 896 -345547848 2 896 -345547852 2 896 -345547856 2 896 -345547860 2 896 -345547864 2 896 -345547868 2 896 -345547872 2 896 -345547876 2 896 -345547880 2 896 -345547884 2 896 -345547888 2 896 -345547892 2 896 -345547896 2 896 -345547900 2 896 -345547904 2 896 -345547908 2 896 -345547912 2 896 -345547916 2 896 -345547920 2 896 -345547924 2 896 -345547928 2 896 -345547932 2 896 -345547936 2 896 -345547940 2 896 -345547944 2 896 -345547948 2 896 -345547952 2 896 -345547956 2 896 -345547960 2 896 -345547964 2 896 -345547968 2 896 -345547972 2 896 -345547976 2 896 -345547980 2 896 -345547984 2 896 -345547988 2 896 -345547992 2 896 -345547996 2 896 -345548000 2 896 -345548004 2 896 -345548008 2 896 -345548012 2 896 -345548016 2 896 -345548020 2 896 -345548024 2 896 -345548028 2 896 -345548032 2 896 -345548036 2 896 -345548040 2 896 -345548044 2 896 -345548048 2 896 -345548052 2 896 -345548056 2 896 -345548060 2 896 -345548064 2 896 -345548068 2 896 -345548072 2 896 -345548076 2 896 -345548080 2 896 -345548084 2 896 -345548088 2 896 -345548092 2 896 -345548096 2 896 -345548100 2 896 -345548104 2 896 -345548108 2 896 -345548112 2 896 -345548116 2 896 -345548120 2 896 -345548124 2 896 -345548128 2 896 -345548132 2 896 -345548136 2 896 -345548140 2 896 -345548144 2 896 -345548148 2 896 -345548152 2 896 -345548156 2 896 -345548160 2 896 -345548164 2 896 -345548168 2 896 -345548172 2 896 -345548176 2 896 -345548180 2 896 -345548184 2 896 -345548188 2 896 -345548192 2 896 -345548196 2 896 -345548200 2 896 -345548204 2 896 -345548208 2 896 -345548212 2 896 -345548216 2 896 -345548220 2 896 -345548224 2 896 -345551876 2 896 -345551880 2 896 -345551884 2 896 -345551888 2 896 -345551892 2 896 -345551896 2 896 -345551900 2 896 -345551904 2 896 -345551908 2 896 -345551912 2 896 -345551916 2 896 -345551920 2 896 -345551924 2 896 -345551928 2 896 -345551932 2 896 -345551936 2 896 -345551940 2 896 -345551944 2 896 -345551948 2 896 -345551952 2 896 -345551956 2 896 -345551960 2 896 -345551964 2 896 -345551968 2 896 -345551972 2 896 -345551976 2 896 -345551980 2 896 -345551984 2 896 -345551988 2 896 -345551992 2 896 -345551996 2 896 -345552000 2 896 -345552004 2 896 -345552008 2 896 -345552012 2 896 -345552016 2 896 -345552020 2 896 -345552024 2 896 -345552028 2 896 -345552032 2 896 -345552036 2 896 -345552040 2 896 -345552044 2 896 -345552048 2 896 -345552052 2 896 -345552056 2 896 -345552060 2 896 -345552064 2 896 -345552068 2 896 -345552072 2 896 -345552076 2 896 -345552080 2 896 -345552084 2 896 -345552088 2 896 -345552092 2 896 -345552096 2 896 -345552100 2 896 -345552104 2 896 -345552108 2 896 -345552112 2 896 -345552116 2 896 -345552120 2 896 -345552124 2 896 -345552128 2 896 -345552132 2 896 -345552136 2 896 -345552140 2 896 -345552144 2 896 -345552148 2 896 -345552152 2 896 -345552156 2 896 -345552160 2 896 -345552164 2 896 -345552168 2 896 -345552172 2 896 -345552176 2 896 -345552180 2 896 -345552184 2 896 -345552188 2 896 -345552192 2 896 -345552196 2 896 -345552200 2 896 -345552204 2 896 -345552208 2 896 -345552212 2 896 -345552216 2 896 -345552220 2 896 -345552224 2 896 -345552228 2 896 -345552232 2 896 -345552236 2 896 -345552240 2 896 -345552244 2 896 -345552248 2 896 -345552252 2 896 -345552256 2 896 -345552260 2 896 -345552264 2 896 -345552268 2 896 -345552272 2 896 -345552276 2 896 -345552280 2 896 -345552284 2 896 -345552288 2 896 -345552292 2 896 -345552296 2 896 -345552300 2 896 -345552304 2 896 -345552308 2 896 -345552312 2 896 -345552316 2 896 -345552320 2 896 -345552324 2 896 -345552328 2 896 -345552332 2 896 -345552336 2 896 -345552340 2 896 -345552344 2 896 -345552348 2 896 -345552352 2 896 -345552356 2 896 -345552360 2 896 -345552364 2 896 -345552368 2 896 -345552372 2 896 -345552376 2 896 -345552380 2 896 -345552384 2 896 -345555972 2 896 -345555976 2 896 -345555980 2 896 -345555984 2 896 -345555988 2 896 -345555992 2 896 -345555996 2 896 -345556000 2 896 -345556004 2 896 -345556008 2 896 -345556012 2 896 -345556016 2 896 -345556020 2 896 -345556024 2 896 -345556028 2 896 -345556032 2 896 -345556036 2 896 -345556040 2 896 -345556044 2 896 -345556048 2 896 -345556052 2 896 -345556056 2 896 -345556060 2 896 -345556064 2 896 -345556068 2 896 -345556072 2 896 -345556076 2 896 -345556080 2 896 -345556084 2 896 -345556088 2 896 -345556092 2 896 -345556096 2 896 -345556100 2 896 -345556104 2 896 -345556108 2 896 -345556112 2 896 -345556116 2 896 -345556120 2 896 -345556124 2 896 -345556128 2 896 -345556132 2 896 -345556136 2 896 -345556140 2 896 -345556144 2 896 -345556148 2 896 -345556152 2 896 -345556156 2 896 -345556160 2 896 -345556164 2 896 -345556168 2 896 -345556172 2 896 -345556176 2 896 -345556180 2 896 -345556184 2 896 -345556188 2 896 -345556192 2 896 -345556196 2 896 -345556200 2 896 -345556204 2 896 -345556208 2 896 -345556212 2 896 -345556216 2 896 -345556220 2 896 -345556224 2 896 -345556228 2 896 -345556232 2 896 -345556236 2 896 -345556240 2 896 -345556244 2 896 -345556248 2 896 -345556252 2 896 -345556256 2 896 -345556260 2 896 -345556264 2 896 -345556268 2 896 -345556272 2 896 -345556276 2 896 -345556280 2 896 -345556284 2 896 -345556288 2 896 -345556292 2 896 -345556296 2 896 -345556300 2 896 -345556304 2 896 -345556308 2 896 -345556312 2 896 -345556316 2 896 -345556320 2 896 -345556324 2 896 -345556328 2 896 -345556332 2 896 -345556336 2 896 -345556340 2 896 -345556344 2 896 -345556348 2 896 -345556352 2 896 -345556356 2 896 -345556360 2 896 -345556364 2 896 -345556368 2 896 -345556372 2 896 -345556376 2 896 -345556380 2 896 -345556384 2 896 -345556388 2 896 -345556392 2 896 -345556396 2 896 -345556400 2 896 -345556404 2 896 -345556408 2 896 -345556412 2 896 -345556416 2 896 -345556420 2 896 -345556424 2 896 -345556428 2 896 -345556432 2 896 -345556436 2 896 -345556440 2 896 -345556444 2 896 -345556448 2 896 -345556452 2 896 -345556456 2 896 -345556460 2 896 -345556464 2 896 -345556468 2 896 -345556472 2 896 -345556476 2 896 -345556480 2 896 -345556484 2 896 -345556488 2 896 -345556492 2 896 -345556496 2 896 -345556500 2 896 -345556504 2 896 -345556508 2 896 -345556512 2 896 -345560068 2 896 -345560072 2 896 -345560076 2 896 -345560080 2 896 -345560084 2 896 -345560088 2 896 -345560092 2 896 -345560096 2 896 -345560100 2 896 -345560104 2 896 -345560108 2 896 -345560112 2 896 -345560116 2 896 -345560120 2 896 -345560124 2 896 -345560128 2 896 -345560132 2 896 -345560136 2 896 -345560140 2 896 -345560144 2 896 -345560148 2 896 -345560152 2 896 -345560156 2 896 -345560160 2 896 -345560164 2 896 -345560168 2 896 -345560172 2 896 -345560176 2 896 -345560180 2 896 -345560184 2 896 -345560188 2 896 -345560192 2 896 -345560196 2 896 -345560200 2 896 -345560204 2 896 -345560208 2 896 -345560212 2 896 -345560216 2 896 -345560220 2 896 -345560224 2 896 -345560228 2 896 -345560232 2 896 -345560236 2 896 -345560240 2 896 -345560244 2 896 -345560248 2 896 -345560252 2 896 -345560256 2 896 -345560260 2 896 -345560264 2 896 -345560268 2 896 -345560272 2 896 -345560276 2 896 -345560280 2 896 -345560284 2 896 -345560288 2 896 -345560292 2 896 -345560296 2 896 -345560300 2 896 -345560304 2 896 -345560308 2 896 -345560312 2 896 -345560316 2 896 -345560320 2 896 -345560324 2 896 -345560328 2 896 -345560332 2 896 -345560336 2 896 -345560340 2 896 -345560344 2 896 -345560348 2 896 -345560352 2 896 -345560356 2 896 -345560360 2 896 -345560364 2 896 -345560368 2 896 -345560372 2 896 -345560376 2 896 -345560380 2 896 -345560384 2 896 -345560388 2 896 -345560392 2 896 -345560396 2 896 -345560400 2 896 -345560404 2 896 -345560408 2 896 -345560412 2 896 -345560416 2 896 -345560420 2 896 -345560424 2 896 -345560428 2 896 -345560432 2 896 -345560436 2 896 -345560440 2 896 -345560444 2 896 -345560448 2 896 -345560452 2 896 -345560456 2 896 -345560460 2 896 -345560464 2 896 -345560468 2 896 -345560472 2 896 -345560476 2 896 -345560480 2 896 -345560484 2 896 -345560488 2 896 -345560492 2 896 -345560496 2 896 -345560500 2 896 -345560504 2 896 -345560508 2 896 -345560512 2 896 -345560516 2 896 -345560520 2 896 -345560524 2 896 -345560528 2 896 -345560532 2 896 -345560536 2 896 -345560540 2 896 -345560544 2 896 -345560548 2 896 -345560552 2 896 -345560556 2 896 -345560560 2 896 -345560564 2 896 -345560568 2 896 -345560572 2 896 -345560576 2 896 -345560580 2 896 -345560584 2 896 -345560588 2 896 -345560592 2 896 -345560596 2 896 -345560600 2 896 -345560604 2 896 -345560608 2 896 -345560612 2 896 -345560616 2 896 -345560620 2 896 -345560624 2 896 -345560628 2 896 -345560632 2 896 -345560636 2 896 -345560640 2 896 -345564164 2 896 -345564168 2 896 -345564172 2 896 -345564176 2 896 -345564180 2 896 -345564184 2 896 -345564188 2 896 -345564192 2 896 -345564196 2 896 -345564200 2 896 -345564204 2 896 -345564208 2 896 -345564212 2 896 -345564216 2 896 -345564220 2 896 -345564224 2 896 -345564228 2 896 -345564232 2 896 -345564236 2 896 -345564240 2 896 -345564244 2 896 -345564248 2 896 -345564252 2 896 -345564256 2 896 -345564260 2 896 -345564264 2 896 -345564268 2 896 -345564272 2 896 -345564276 2 896 -345564280 2 896 -345564284 2 896 -345564288 2 896 -345564292 2 896 -345564296 2 896 -345564300 2 896 -345564304 2 896 -345564308 2 896 -345564312 2 896 -345564316 2 896 -345564320 2 896 -345564324 2 896 -345564328 2 896 -345564332 2 896 -345564336 2 896 -345564340 2 896 -345564344 2 896 -345564348 2 896 -345564352 2 896 -345564356 2 896 -345564360 2 896 -345564364 2 896 -345564368 2 896 -345564372 2 896 -345564376 2 896 -345564380 2 896 -345564384 2 896 -345564388 2 896 -345564392 2 896 -345564396 2 896 -345564400 2 896 -345564404 2 896 -345564408 2 896 -345564412 2 896 -345564416 2 896 -345564420 2 896 -345564424 2 896 -345564428 2 896 -345564432 2 896 -345564436 2 896 -345564440 2 896 -345564444 2 896 -345564448 2 896 -345564452 2 896 -345564456 2 896 -345564460 2 896 -345564464 2 896 -345564468 2 896 -345564472 2 896 -345564476 2 896 -345564480 2 896 -345564484 2 896 -345564488 2 896 -345564492 2 896 -345564496 2 896 -345564500 2 896 -345564504 2 896 -345564508 2 896 -345564512 2 896 -345564516 2 896 -345564520 2 896 -345564524 2 896 -345564528 2 896 -345564532 2 896 -345564536 2 896 -345564540 2 896 -345564544 2 896 -345564548 2 896 -345564552 2 896 -345564556 2 896 -345564560 2 896 -345564564 2 896 -345564568 2 896 -345564572 2 896 -345564576 2 896 -345564580 2 896 -345564584 2 896 -345564588 2 896 -345564592 2 896 -345564596 2 896 -345564600 2 896 -345564604 2 896 -345564608 2 896 -345564612 2 896 -345564616 2 896 -345564620 2 896 -345564624 2 896 -345564628 2 896 -345564632 2 896 -345564636 2 896 -345564640 2 896 -345564644 2 896 -345564648 2 896 -345564652 2 896 -345564656 2 896 -345564660 2 896 -345564664 2 896 -345564668 2 896 -345564672 2 896 -345564676 2 896 -345564680 2 896 -345564684 2 896 -345564688 2 896 -345564692 2 896 -345564696 2 896 -345564700 2 896 -345564704 2 896 -345564708 2 896 -345564712 2 896 -345564716 2 896 -345564720 2 896 -345564724 2 896 -345564728 2 896 -345564732 2 896 -345564736 2 896 -345564740 2 896 -345564744 2 896 -345564748 2 896 -345564752 2 896 -345564756 2 896 -345564760 2 896 -345564764 2 896 -345564768 2 896 -345564772 2 896 -345564776 2 896 -345564780 2 896 -345564784 2 896 -345564788 2 896 -345564792 2 896 -345564796 2 896 -345564800 2 896 -345773060 32 896 -345773064 2 896 -345773068 32 896 -345773072 2 896 -345773076 32 896 -345773080 2 896 -345773084 32 896 -345773088 2 896 -345773092 32 896 -345773096 2 896 -345773100 32 896 -345773104 2 896 -345773108 32 896 -345773112 2 896 -345773116 32 896 -345773120 2 896 -345773124 32 896 -345773128 2 896 -345773132 32 896 -345773136 2 896 -345773140 32 896 -345773144 2 896 -345773148 32 896 -345773152 2 896 -345773156 32 896 -345773160 2 896 -345773164 32 896 -345773168 2 896 -345773172 32 896 -345773176 2 896 -345773180 32 896 -345773184 2 896 -345773188 32 896 -345773192 2 896 -345773196 32 896 -345773200 2 896 -345773204 32 896 -345773208 2 896 -345773212 32 896 -345773216 2 896 -345773220 32 896 -345773224 2 896 -345773228 32 896 -345773232 2 896 -345773236 32 896 -345773240 2 896 -345773244 32 896 -345773248 2 896 -345773252 32 896 -345773256 2 896 -345773260 32 896 -345773264 2 896 -345773268 32 896 -345773272 2 896 -345773276 32 896 -345773280 2 896 -345777156 32 896 -345777160 2 896 -345777164 32 896 -345777168 2 896 -345777172 32 896 -345777176 2 896 -345777180 32 896 -345777184 2 896 -345777188 32 896 -345777192 2 896 -345777196 32 896 -345777200 2 896 -345777204 32 896 -345777208 2 896 -345777212 32 896 -345777216 2 896 -345777220 32 896 -345777224 2 896 -345777228 32 896 -345777232 2 896 -345777236 32 896 -345777240 2 896 -345777244 32 896 -345777248 2 896 -345777252 32 896 -345777256 2 896 -345777260 32 896 -345777264 2 896 -345777268 32 896 -345777272 2 896 -345777276 32 896 -345777280 2 896 -345777284 32 896 -345777288 2 896 -345777292 32 896 -345777296 2 896 -345777300 32 896 -345777304 2 896 -345777308 32 896 -345777312 2 896 -345777316 32 896 -345777320 2 896 -345777324 32 896 -345777328 2 896 -345777332 32 896 -345777336 2 896 -345777340 32 896 -345777344 2 896 -345777348 32 896 -345777352 2 896 -345777356 32 896 -345777360 2 896 -345777364 32 896 -345777368 2 896 -345777372 32 896 -345777376 2 896 -345777380 32 896 -345777384 2 896 -345777388 32 896 -345777392 2 896 -345777396 32 896 -345777400 2 896 -345777404 32 896 -345777408 2 896 -345781252 32 896 -345781256 2 896 -345781260 32 896 -345781264 2 896 -345781268 32 896 -345781272 2 896 -345781276 32 896 -345781280 2 896 -345781284 32 896 -345781288 2 896 -345781292 32 896 -345781296 2 896 -345781300 32 896 -345781304 2 896 -345781308 32 896 -345781312 2 896 -345781316 32 896 -345781320 2 896 -345781324 32 896 -345781328 2 896 -345781332 32 896 -345781336 2 896 -345781340 32 896 -345781344 2 896 -345781348 32 896 -345781352 2 896 -345781356 32 896 -345781360 2 896 -345781364 32 896 -345781368 2 896 -345781372 32 896 -345781376 2 896 -345781380 32 896 -345781384 2 896 -345781388 32 896 -345781392 2 896 -345781396 32 896 -345781400 2 896 -345781404 32 896 -345781408 2 896 -345781412 32 896 -345781416 2 896 -345781420 32 896 -345781424 2 896 -345781428 32 896 -345781432 2 896 -345781436 32 896 -345781440 2 896 -345781444 32 896 -345781448 2 896 -345781452 32 896 -345781456 2 896 -345781460 32 896 -345781464 2 896 -345781468 32 896 -345781472 2 896 -345781476 32 896 -345781480 2 896 -345781484 32 896 -345781488 2 896 -345781492 32 896 -345781496 2 896 -345781500 32 896 -345781504 2 896 -345781508 32 896 -345781512 2 896 -345781516 32 896 -345781520 2 896 -345781524 32 896 -345781528 2 896 -345781532 32 896 -345781536 2 896 -345785348 32 896 -345785352 2 896 -345785356 32 896 -345785360 2 896 -345785364 32 896 -345785368 2 896 -345785372 32 896 -345785376 2 896 -345785380 32 896 -345785384 2 896 -345785388 32 896 -345785392 2 896 -345785396 32 896 -345785400 2 896 -345785404 32 896 -345785408 2 896 -345785412 32 896 -345785416 2 896 -345785420 32 896 -345785424 2 896 -345785428 32 896 -345785432 2 896 -345785436 32 896 -345785440 2 896 -345785444 32 896 -345785448 2 896 -345785452 32 896 -345785456 2 896 -345785460 32 896 -345785464 2 896 -345785468 32 896 -345785472 2 896 -345785476 32 896 -345785480 2 896 -345785484 32 896 -345785488 2 896 -345785492 32 896 -345785496 2 896 -345785500 32 896 -345785504 2 896 -345785508 32 896 -345785512 2 896 -345785516 32 896 -345785520 2 896 -345785524 32 896 -345785528 2 896 -345785532 32 896 -345785536 2 896 -345785540 32 896 -345785544 2 896 -345785548 32 896 -345785552 2 896 -345785556 32 896 -345785560 2 896 -345785564 32 896 -345785568 2 896 -345785572 32 896 -345785576 2 896 -345785580 32 896 -345785584 2 896 -345785588 32 896 -345785592 2 896 -345785596 32 896 -345785600 2 896 -345785604 32 896 -345785608 2 896 -345785612 32 896 -345785616 2 896 -345785620 32 896 -345785624 2 896 -345785628 32 896 -345785632 2 896 -345789444 32 896 -345789448 2 896 -345789452 32 896 -345789456 2 896 -345789460 32 896 -345789464 2 896 -345789468 32 896 -345789472 2 896 -345789476 32 896 -345789480 2 896 -345789484 32 896 -345789488 2 896 -345789492 32 896 -345789496 2 896 -345789500 32 896 -345789504 2 896 -345789508 32 896 -345789512 2 896 -345789516 32 896 -345789520 2 896 -345789524 32 896 -345789528 2 896 -345789532 32 896 -345789536 2 896 -345789540 32 896 -345789544 2 896 -345789548 32 896 -345789552 2 896 -345789556 32 896 -345789560 2 896 -345789564 32 896 -345789568 2 896 -345789572 32 896 -345789576 2 896 -345789580 32 896 -345789584 2 896 -345789588 32 896 -345789592 2 896 -345789596 32 896 -345789600 2 896 -345789604 32 896 -345789608 2 896 -345789612 32 896 -345789616 2 896 -345789620 32 896 -345789624 2 896 -345789628 32 896 -345789632 2 896 -345789636 32 896 -345789640 2 896 -345789644 32 896 -345789648 2 896 -345789652 32 896 -345789656 2 896 -345789660 32 896 -345789664 2 896 -345789668 32 896 -345789672 2 896 -345789676 32 896 -345789680 2 896 -345789684 32 896 -345789688 2 896 -345789692 32 896 -345789696 2 896 -345789700 32 896 -345789704 2 896 -345789708 32 896 -345789712 2 896 -345789716 32 896 -345789720 2 896 -345789724 32 896 -345789728 2 896 -345789732 32 896 -345789736 2 896 -345789740 32 896 -345789744 2 896 -345789748 32 896 -345789752 2 896 -345789756 32 896 -345789760 2 896 -345793540 32 896 -345793544 2 896 -345793548 32 896 -345793552 2 896 -345793556 32 896 -345793560 2 896 -345793564 32 896 -345793568 2 896 -345793572 32 896 -345793576 2 896 -345793580 32 896 -345793584 2 896 -345793588 32 896 -345793592 2 896 -345793596 32 896 -345793600 2 896 -345793604 32 896 -345793608 2 896 -345793612 32 896 -345793616 2 896 -345793620 32 896 -345793624 2 896 -345793628 32 896 -345793632 2 896 -345793636 32 896 -345793640 2 896 -345793644 32 896 -345793648 2 896 -345793652 32 896 -345793656 2 896 -345793660 32 896 -345793664 2 896 -345793668 32 896 -345793672 2 896 -345793676 32 896 -345793680 2 896 -345793684 32 896 -345793688 2 896 -345793692 32 896 -345793696 2 896 -345793700 32 896 -345793704 2 896 -345793708 32 896 -345793712 2 896 -345793716 32 896 -345793720 2 896 -345793724 32 896 -345793728 2 896 -345793732 32 896 -345793736 2 896 -345793740 32 896 -345793744 2 896 -345793748 32 896 -345793752 2 896 -345793756 32 896 -345793760 2 896 -345793764 32 896 -345793768 2 896 -345793772 32 896 -345793776 2 896 -345793780 32 896 -345793784 2 896 -345793788 32 896 -345793792 2 896 -345793796 32 896 -345793800 2 896 -345793804 32 896 -345793808 2 896 -345793812 32 896 -345793816 2 896 -345793820 32 896 -345793824 2 896 -345793828 32 896 -345793832 2 896 -345793836 32 896 -345793840 2 896 -345793844 32 896 -345793848 2 896 -345793852 32 896 -345793856 2 896 -345797636 2 896 -345797640 2 896 -345797644 2 896 -345797648 2 896 -345797652 2 896 -345797656 2 896 -345797660 2 896 -345797664 2 896 -345797668 2 896 -345797672 2 896 -345797676 2 896 -345797680 2 896 -345797684 2 896 -345797688 2 896 -345797692 2 896 -345797696 2 896 -345797700 2 896 -345797704 2 896 -345797708 2 896 -345797712 2 896 -345797716 2 896 -345797720 2 896 -345797724 2 896 -345797728 2 896 -345797732 2 896 -345797736 2 896 -345797740 2 896 -345797744 2 896 -345797748 2 896 -345797752 2 896 -345797756 2 896 -345797760 2 896 -345797764 2 896 -345797768 2 896 -345797772 2 896 -345797776 2 896 -345797780 2 896 -345797784 2 896 -345797788 2 896 -345797792 2 896 -345797796 2 896 -345797800 2 896 -345797804 2 896 -345797808 2 896 -345797812 2 896 -345797816 2 896 -345797820 2 896 -345797824 2 896 -345797828 2 896 -345797832 2 896 -345797836 2 896 -345797840 2 896 -345797844 2 896 -345797848 2 896 -345797852 2 896 -345797856 2 896 -345797860 2 896 -345797864 2 896 -345797868 2 896 -345797872 2 896 -345797876 2 896 -345797880 2 896 -345797884 2 896 -345797888 2 896 -345797892 2 896 -345797896 2 896 -345797900 2 896 -345797904 2 896 -345797908 2 896 -345797912 2 896 -345797916 2 896 -345797920 2 896 -345797924 2 896 -345797928 2 896 -345797932 2 896 -345797936 2 896 -345797940 2 896 -345797944 2 896 -345797948 2 896 -345797952 2 896 -345797956 2 896 -345797960 2 896 -345797964 2 896 -345797968 2 896 -345797972 2 896 -345797976 2 896 -345797980 2 896 -345797984 2 896 -345797988 2 896 -345797992 2 896 -345797996 2 896 -345798000 2 896 -345798004 2 896 -345798008 2 896 -345798012 2 896 -345798016 2 896 -345801732 2 896 -345801736 2 896 -345801740 2 896 -345801744 2 896 -345801748 2 896 -345801752 2 896 -345801756 2 896 -345801760 2 896 -345801764 2 896 -345801768 2 896 -345801772 2 896 -345801776 2 896 -345801780 2 896 -345801784 2 896 -345801788 2 896 -345801792 2 896 -345801796 2 896 -345801800 2 896 -345801804 2 896 -345801808 2 896 -345801812 2 896 -345801816 2 896 -345801820 2 896 -345801824 2 896 -345801828 2 896 -345801832 2 896 -345801836 2 896 -345801840 2 896 -345801844 2 896 -345801848 2 896 -345801852 2 896 -345801856 2 896 -345801860 2 896 -345801864 2 896 -345801868 2 896 -345801872 2 896 -345801876 2 896 -345801880 2 896 -345801884 2 896 -345801888 2 896 -345801892 2 896 -345801896 2 896 -345801900 2 896 -345801904 2 896 -345801908 2 896 -345801912 2 896 -345801916 2 896 -345801920 2 896 -345801924 2 896 -345801928 2 896 -345801932 2 896 -345801936 2 896 -345801940 2 896 -345801944 2 896 -345801948 2 896 -345801952 2 896 -345801956 2 896 -345801960 2 896 -345801964 2 896 -345801968 2 896 -345801972 2 896 -345801976 2 896 -345801980 2 896 -345801984 2 896 -345801988 2 896 -345801992 2 896 -345801996 2 896 -345802000 2 896 -345802004 2 896 -345802008 2 896 -345802012 2 896 -345802016 2 896 -345802020 2 896 -345802024 2 896 -345802028 2 896 -345802032 2 896 -345802036 2 896 -345802040 2 896 -345802044 2 896 -345802048 2 896 -345802052 2 896 -345802056 2 896 -345802060 2 896 -345802064 2 896 -345802068 2 896 -345802072 2 896 -345802076 2 896 -345802080 2 896 -345802084 2 896 -345802088 2 896 -345802092 2 896 -345802096 2 896 -345802100 2 896 -345802104 2 896 -345802108 2 896 -345802112 2 896 -345802116 2 896 -345802120 2 896 -345802124 2 896 -345802128 2 896 -345802132 2 896 -345802136 2 896 -345802140 2 896 -345802144 2 896 -345802148 2 896 -345802152 2 896 -345802156 2 896 -345802160 2 896 -345802164 2 896 -345802168 2 896 -345802172 2 896 -345802176 2 896 -345805828 2 896 -345805832 2 896 -345805836 2 896 -345805840 2 896 -345805844 2 896 -345805848 2 896 -345805852 2 896 -345805856 2 896 -345805860 2 896 -345805864 2 896 -345805868 2 896 -345805872 2 896 -345805876 2 896 -345805880 2 896 -345805884 2 896 -345805888 2 896 -345805892 2 896 -345805896 2 896 -345805900 2 896 -345805904 2 896 -345805908 2 896 -345805912 2 896 -345805916 2 896 -345805920 2 896 -345805924 2 896 -345805928 2 896 -345805932 2 896 -345805936 2 896 -345805940 2 896 -345805944 2 896 -345805948 2 896 -345805952 2 896 -345805956 2 896 -345805960 2 896 -345805964 2 896 -345805968 2 896 -345805972 2 896 -345805976 2 896 -345805980 2 896 -345805984 2 896 -345805988 2 896 -345805992 2 896 -345805996 2 896 -345806000 2 896 -345806004 2 896 -345806008 2 896 -345806012 2 896 -345806016 2 896 -345806020 2 896 -345806024 2 896 -345806028 2 896 -345806032 2 896 -345806036 2 896 -345806040 2 896 -345806044 2 896 -345806048 2 896 -345806052 2 896 -345806056 2 896 -345806060 2 896 -345806064 2 896 -345806068 2 896 -345806072 2 896 -345806076 2 896 -345806080 2 896 -345806084 2 896 -345806088 2 896 -345806092 2 896 -345806096 2 896 -345806100 2 896 -345806104 2 896 -345806108 2 896 -345806112 2 896 -345806116 2 896 -345806120 2 896 -345806124 2 896 -345806128 2 896 -345806132 2 896 -345806136 2 896 -345806140 2 896 -345806144 2 896 -345806148 2 896 -345806152 2 896 -345806156 2 896 -345806160 2 896 -345806164 2 896 -345806168 2 896 -345806172 2 896 -345806176 2 896 -345806180 2 896 -345806184 2 896 -345806188 2 896 -345806192 2 896 -345806196 2 896 -345806200 2 896 -345806204 2 896 -345806208 2 896 -345806212 2 896 -345806216 2 896 -345806220 2 896 -345806224 2 896 -345806228 2 896 -345806232 2 896 -345806236 2 896 -345806240 2 896 -345806244 2 896 -345806248 2 896 -345806252 2 896 -345806256 2 896 -345806260 2 896 -345806264 2 896 -345806268 2 896 -345806272 2 896 -345806276 2 896 -345806280 2 896 -345806284 2 896 -345806288 2 896 -345806292 2 896 -345806296 2 896 -345806300 2 896 -345806304 2 896 -345806308 2 896 -345806312 2 896 -345806316 2 896 -345806320 2 896 -345806324 2 896 -345806328 2 896 -345806332 2 896 -345806336 2 896 -345809924 2 896 -345809928 2 896 -345809932 2 896 -345809936 2 896 -345809940 2 896 -345809944 2 896 -345809948 2 896 -345809952 2 896 -345809956 2 896 -345809960 2 896 -345809964 2 896 -345809968 2 896 -345809972 2 896 -345809976 2 896 -345809980 2 896 -345809984 2 896 -345809988 2 896 -345809992 2 896 -345809996 2 896 -345810000 2 896 -345810004 2 896 -345810008 2 896 -345810012 2 896 -345810016 2 896 -345810020 2 896 -345810024 2 896 -345810028 2 896 -345810032 2 896 -345810036 2 896 -345810040 2 896 -345810044 2 896 -345810048 2 896 -345810052 2 896 -345810056 2 896 -345810060 2 896 -345810064 2 896 -345810068 2 896 -345810072 2 896 -345810076 2 896 -345810080 2 896 -345810084 2 896 -345810088 2 896 -345810092 2 896 -345810096 2 896 -345810100 2 896 -345810104 2 896 -345810108 2 896 -345810112 2 896 -345810116 2 896 -345810120 2 896 -345810124 2 896 -345810128 2 896 -345810132 2 896 -345810136 2 896 -345810140 2 896 -345810144 2 896 -345810148 2 896 -345810152 2 896 -345810156 2 896 -345810160 2 896 -345810164 2 896 -345810168 2 896 -345810172 2 896 -345810176 2 896 -345810180 2 896 -345810184 2 896 -345810188 2 896 -345810192 2 896 -345810196 2 896 -345810200 2 896 -345810204 2 896 -345810208 2 896 -345810212 2 896 -345810216 2 896 -345810220 2 896 -345810224 2 896 -345810228 2 896 -345810232 2 896 -345810236 2 896 -345810240 2 896 -345810244 2 896 -345810248 2 896 -345810252 2 896 -345810256 2 896 -345810260 2 896 -345810264 2 896 -345810268 2 896 -345810272 2 896 -345810276 2 896 -345810280 2 896 -345810284 2 896 -345810288 2 896 -345810292 2 896 -345810296 2 896 -345810300 2 896 -345810304 2 896 -345810308 2 896 -345810312 2 896 -345810316 2 896 -345810320 2 896 -345810324 2 896 -345810328 2 896 -345810332 2 896 -345810336 2 896 -345810340 2 896 -345810344 2 896 -345810348 2 896 -345810352 2 896 -345810356 2 896 -345810360 2 896 -345810364 2 896 -345810368 2 896 -345810372 2 896 -345810376 2 896 -345810380 2 896 -345810384 2 896 -345810388 2 896 -345810392 2 896 -345810396 2 896 -345810400 2 896 -345810404 2 896 -345810408 2 896 -345810412 2 896 -345810416 2 896 -345810420 2 896 -345810424 2 896 -345810428 2 896 -345810432 2 896 -345810436 2 896 -345810440 2 896 -345810444 2 896 -345810448 2 896 -345810452 2 896 -345810456 2 896 -345810460 2 896 -345810464 2 896 -345814020 2 896 -345814024 2 896 -345814028 2 896 -345814032 2 896 -345814036 2 896 -345814040 2 896 -345814044 2 896 -345814048 2 896 -345814052 2 896 -345814056 2 896 -345814060 2 896 -345814064 2 896 -345814068 2 896 -345814072 2 896 -345814076 2 896 -345814080 2 896 -345814084 2 896 -345814088 2 896 -345814092 2 896 -345814096 2 896 -345814100 2 896 -345814104 2 896 -345814108 2 896 -345814112 2 896 -345814116 2 896 -345814120 2 896 -345814124 2 896 -345814128 2 896 -345814132 2 896 -345814136 2 896 -345814140 2 896 -345814144 2 896 -345814148 2 896 -345814152 2 896 -345814156 2 896 -345814160 2 896 -345814164 2 896 -345814168 2 896 -345814172 2 896 -345814176 2 896 -345814180 2 896 -345814184 2 896 -345814188 2 896 -345814192 2 896 -345814196 2 896 -345814200 2 896 -345814204 2 896 -345814208 2 896 -345814212 2 896 -345814216 2 896 -345814220 2 896 -345814224 2 896 -345814228 2 896 -345814232 2 896 -345814236 2 896 -345814240 2 896 -345814244 2 896 -345814248 2 896 -345814252 2 896 -345814256 2 896 -345814260 2 896 -345814264 2 896 -345814268 2 896 -345814272 2 896 -345814276 2 896 -345814280 2 896 -345814284 2 896 -345814288 2 896 -345814292 2 896 -345814296 2 896 -345814300 2 896 -345814304 2 896 -345814308 2 896 -345814312 2 896 -345814316 2 896 -345814320 2 896 -345814324 2 896 -345814328 2 896 -345814332 2 896 -345814336 2 896 -345814340 2 896 -345814344 2 896 -345814348 2 896 -345814352 2 896 -345814356 2 896 -345814360 2 896 -345814364 2 896 -345814368 2 896 -345814372 2 896 -345814376 2 896 -345814380 2 896 -345814384 2 896 -345814388 2 896 -345814392 2 896 -345814396 2 896 -345814400 2 896 -345814404 2 896 -345814408 2 896 -345814412 2 896 -345814416 2 896 -345814420 2 896 -345814424 2 896 -345814428 2 896 -345814432 2 896 -345814436 2 896 -345814440 2 896 -345814444 2 896 -345814448 2 896 -345814452 2 896 -345814456 2 896 -345814460 2 896 -345814464 2 896 -345814468 2 896 -345814472 2 896 -345814476 2 896 -345814480 2 896 -345814484 2 896 -345814488 2 896 -345814492 2 896 -345814496 2 896 -345814500 2 896 -345814504 2 896 -345814508 2 896 -345814512 2 896 -345814516 2 896 -345814520 2 896 -345814524 2 896 -345814528 2 896 -345814532 2 896 -345814536 2 896 -345814540 2 896 -345814544 2 896 -345814548 2 896 -345814552 2 896 -345814556 2 896 -345814560 2 896 -345814564 2 896 -345814568 2 896 -345814572 2 896 -345814576 2 896 -345814580 2 896 -345814584 2 896 -345814588 2 896 -345814592 2 896 -345818116 2 896 -345818120 2 896 -345818124 2 896 -345818128 2 896 -345818132 2 896 -345818136 2 896 -345818140 2 896 -345818144 2 896 -345818148 2 896 -345818152 2 896 -345818156 2 896 -345818160 2 896 -345818164 2 896 -345818168 2 896 -345818172 2 896 -345818176 2 896 -345818180 2 896 -345818184 2 896 -345818188 2 896 -345818192 2 896 -345818196 2 896 -345818200 2 896 -345818204 2 896 -345818208 2 896 -345818212 2 896 -345818216 2 896 -345818220 2 896 -345818224 2 896 -345818228 2 896 -345818232 2 896 -345818236 2 896 -345818240 2 896 -345818244 2 896 -345818248 2 896 -345818252 2 896 -345818256 2 896 -345818260 2 896 -345818264 2 896 -345818268 2 896 -345818272 2 896 -345818276 2 896 -345818280 2 896 -345818284 2 896 -345818288 2 896 -345818292 2 896 -345818296 2 896 -345818300 2 896 -345818304 2 896 -345818308 2 896 -345818312 2 896 -345818316 2 896 -345818320 2 896 -345818324 2 896 -345818328 2 896 -345818332 2 896 -345818336 2 896 -345818340 2 896 -345818344 2 896 -345818348 2 896 -345818352 2 896 -345818356 2 896 -345818360 2 896 -345818364 2 896 -345818368 2 896 -345818372 2 896 -345818376 2 896 -345818380 2 896 -345818384 2 896 -345818388 2 896 -345818392 2 896 -345818396 2 896 -345818400 2 896 -345818404 2 896 -345818408 2 896 -345818412 2 896 -345818416 2 896 -345818420 2 896 -345818424 2 896 -345818428 2 896 -345818432 2 896 -345818436 2 896 -345818440 2 896 -345818444 2 896 -345818448 2 896 -345818452 2 896 -345818456 2 896 -345818460 2 896 -345818464 2 896 -345818468 2 896 -345818472 2 896 -345818476 2 896 -345818480 2 896 -345818484 2 896 -345818488 2 896 -345818492 2 896 -345818496 2 896 -345818500 2 896 -345818504 2 896 -345818508 2 896 -345818512 2 896 -345818516 2 896 -345818520 2 896 -345818524 2 896 -345818528 2 896 -345818532 2 896 -345818536 2 896 -345818540 2 896 -345818544 2 896 -345818548 2 896 -345818552 2 896 -345818556 2 896 -345818560 2 896 -345818564 2 896 -345818568 2 896 -345818572 2 896 -345818576 2 896 -345818580 2 896 -345818584 2 896 -345818588 2 896 -345818592 2 896 -345818596 2 896 -345818600 2 896 -345818604 2 896 -345818608 2 896 -345818612 2 896 -345818616 2 896 -345818620 2 896 -345818624 2 896 -345818628 2 896 -345818632 2 896 -345818636 2 896 -345818640 2 896 -345818644 2 896 -345818648 2 896 -345818652 2 896 -345818656 2 896 -345818660 2 896 -345818664 2 896 -345818668 2 896 -345818672 2 896 -345818676 2 896 -345818680 2 896 -345818684 2 896 -345818688 2 896 -345818692 2 896 -345818696 2 896 -345818700 2 896 -345818704 2 896 -345818708 2 896 -345818712 2 896 -345818716 2 896 -345818720 2 896 -345818724 2 896 -345818728 2 896 -345818732 2 896 -345818736 2 896 -345818740 2 896 -345818744 2 896 -345818748 2 896 -345818752 2 896 -346035204 32 896 -346035208 2 896 -346035212 32 896 -346035216 2 896 -346035220 32 896 -346035224 2 896 -346035228 32 896 -346035232 2 896 -346035236 32 896 -346035240 2 896 -346035244 32 896 -346035248 2 896 -346035252 32 896 -346035256 2 896 -346035260 32 896 -346035264 2 896 -346035268 32 896 -346035272 2 896 -346035276 32 896 -346035280 2 896 -346035284 32 896 -346035288 2 896 -346035292 32 896 -346035296 2 896 -346035300 32 896 -346035304 2 896 -346035308 32 896 -346035312 2 896 -346035316 32 896 -346035320 2 896 -346035324 32 896 -346035328 2 896 -346035332 32 896 -346035336 2 896 -346035340 32 896 -346035344 2 896 -346035348 32 896 -346035352 2 896 -346035356 32 896 -346035360 2 896 -346035364 32 896 -346035368 2 896 -346035372 32 896 -346035376 2 896 -346035380 32 896 -346035384 2 896 -346035388 32 896 -346035392 2 896 -346035396 32 896 -346035400 2 896 -346035404 32 896 -346035408 2 896 -346035412 32 896 -346035416 2 896 -346035420 32 896 -346035424 2 896 -346035428 32 896 -346035432 2 896 -346035436 32 896 -346035440 2 896 -346035444 32 896 -346035448 2 896 -346035452 32 896 -346035456 2 896 -346039300 32 896 -346039304 2 896 -346039308 32 896 -346039312 2 896 -346039316 32 896 -346039320 2 896 -346039324 32 896 -346039328 2 896 -346039332 32 896 -346039336 2 896 -346039340 32 896 -346039344 2 896 -346039348 32 896 -346039352 2 896 -346039356 32 896 -346039360 2 896 -346039364 32 896 -346039368 2 896 -346039372 32 896 -346039376 2 896 -346039380 32 896 -346039384 2 896 -346039388 32 896 -346039392 2 896 -346039396 32 896 -346039400 2 896 -346039404 32 896 -346039408 2 896 -346039412 32 896 -346039416 2 896 -346039420 32 896 -346039424 2 896 -346039428 32 896 -346039432 2 896 -346039436 32 896 -346039440 2 896 -346039444 32 896 -346039448 2 896 -346039452 32 896 -346039456 2 896 -346039460 32 896 -346039464 2 896 -346039468 32 896 -346039472 2 896 -346039476 32 896 -346039480 2 896 -346039484 32 896 -346039488 2 896 -346039492 32 896 -346039496 2 896 -346039500 32 896 -346039504 2 896 -346039508 32 896 -346039512 2 896 -346039516 32 896 -346039520 2 896 -346039524 32 896 -346039528 2 896 -346039532 32 896 -346039536 2 896 -346039540 32 896 -346039544 2 896 -346039548 32 896 -346039552 2 896 -346039556 32 896 -346039560 2 896 -346039564 32 896 -346039568 2 896 -346039572 32 896 -346039576 2 896 -346039580 32 896 -346039584 2 896 -346043396 32 896 -346043400 2 896 -346043404 32 896 -346043408 2 896 -346043412 32 896 -346043416 2 896 -346043420 32 896 -346043424 2 896 -346043428 32 896 -346043432 2 896 -346043436 32 896 -346043440 2 896 -346043444 32 896 -346043448 2 896 -346043452 32 896 -346043456 2 896 -346043460 32 896 -346043464 2 896 -346043468 32 896 -346043472 2 896 -346043476 32 896 -346043480 2 896 -346043484 32 896 -346043488 2 896 -346043492 32 896 -346043496 2 896 -346043500 32 896 -346043504 2 896 -346043508 32 896 -346043512 2 896 -346043516 32 896 -346043520 2 896 -346043524 32 896 -346043528 2 896 -346043532 32 896 -346043536 2 896 -346043540 32 896 -346043544 2 896 -346043548 32 896 -346043552 2 896 -346043556 32 896 -346043560 2 896 -346043564 32 896 -346043568 2 896 -346043572 32 896 -346043576 2 896 -346043580 32 896 -346043584 2 896 -346043588 32 896 -346043592 2 896 -346043596 32 896 -346043600 2 896 -346043604 32 896 -346043608 2 896 -346043612 32 896 -346043616 2 896 -346043620 32 896 -346043624 2 896 -346043628 32 896 -346043632 2 896 -346043636 32 896 -346043640 2 896 -346043644 32 896 -346043648 2 896 -346043652 32 896 -346043656 2 896 -346043660 32 896 -346043664 2 896 -346043668 32 896 -346043672 2 896 -346043676 32 896 -346043680 2 896 -346047492 32 896 -346047496 2 896 -346047500 32 896 -346047504 2 896 -346047508 32 896 -346047512 2 896 -346047516 32 896 -346047520 2 896 -346047524 32 896 -346047528 2 896 -346047532 32 896 -346047536 2 896 -346047540 32 896 -346047544 2 896 -346047548 32 896 -346047552 2 896 -346047556 32 896 -346047560 2 896 -346047564 32 896 -346047568 2 896 -346047572 32 896 -346047576 2 896 -346047580 32 896 -346047584 2 896 -346047588 32 896 -346047592 2 896 -346047596 32 896 -346047600 2 896 -346047604 32 896 -346047608 2 896 -346047612 32 896 -346047616 2 896 -346047620 32 896 -346047624 2 896 -346047628 32 896 -346047632 2 896 -346047636 32 896 -346047640 2 896 -346047644 32 896 -346047648 2 896 -346047652 32 896 -346047656 2 896 -346047660 32 896 -346047664 2 896 -346047668 32 896 -346047672 2 896 -346047676 32 896 -346047680 2 896 -346047684 32 896 -346047688 2 896 -346047692 32 896 -346047696 2 896 -346047700 32 896 -346047704 2 896 -346047708 32 896 -346047712 2 896 -346047716 32 896 -346047720 2 896 -346047724 32 896 -346047728 2 896 -346047732 32 896 -346047736 2 896 -346047740 32 896 -346047744 2 896 -346047748 32 896 -346047752 2 896 -346047756 32 896 -346047760 2 896 -346047764 32 896 -346047768 2 896 -346047772 32 896 -346047776 2 896 -346047780 32 896 -346047784 2 896 -346047788 32 896 -346047792 2 896 -346047796 32 896 -346047800 2 896 -346047804 32 896 -346047808 2 896 -346051588 32 896 -346051592 2 896 -346051596 32 896 -346051600 2 896 -346051604 32 896 -346051608 2 896 -346051612 32 896 -346051616 2 896 -346051620 32 896 -346051624 2 896 -346051628 32 896 -346051632 2 896 -346051636 32 896 -346051640 2 896 -346051644 32 896 -346051648 2 896 -346051652 32 896 -346051656 2 896 -346051660 32 896 -346051664 2 896 -346051668 32 896 -346051672 2 896 -346051676 32 896 -346051680 2 896 -346051684 32 896 -346051688 2 896 -346051692 32 896 -346051696 2 896 -346051700 32 896 -346051704 2 896 -346051708 32 896 -346051712 2 896 -346051716 32 896 -346051720 2 896 -346051724 32 896 -346051728 2 896 -346051732 32 896 -346051736 2 896 -346051740 32 896 -346051744 2 896 -346051748 32 896 -346051752 2 896 -346051756 32 896 -346051760 2 896 -346051764 32 896 -346051768 2 896 -346051772 32 896 -346051776 2 896 -346051780 32 896 -346051784 2 896 -346051788 32 896 -346051792 2 896 -346051796 32 896 -346051800 2 896 -346051804 32 896 -346051808 2 896 -346051812 32 896 -346051816 2 896 -346051820 32 896 -346051824 2 896 -346051828 32 896 -346051832 2 896 -346051836 32 896 -346051840 2 896 -346051844 32 896 -346051848 2 896 -346051852 32 896 -346051856 2 896 -346051860 32 896 -346051864 2 896 -346051868 32 896 -346051872 2 896 -346051876 32 896 -346051880 2 896 -346051884 32 896 -346051888 2 896 -346051892 32 896 -346051896 2 896 -346051900 32 896 -346051904 2 896 -346055684 2 896 -346055688 2 896 -346055692 2 896 -346055696 2 896 -346055700 2 896 -346055704 2 896 -346055708 2 896 -346055712 2 896 -346055716 2 896 -346055720 2 896 -346055724 2 896 -346055728 2 896 -346055732 2 896 -346055736 2 896 -346055740 2 896 -346055744 2 896 -346055748 2 896 -346055752 2 896 -346055756 2 896 -346055760 2 896 -346055764 2 896 -346055768 2 896 -346055772 2 896 -346055776 2 896 -346055780 2 896 -346055784 2 896 -346055788 2 896 -346055792 2 896 -346055796 2 896 -346055800 2 896 -346055804 2 896 -346055808 2 896 -346055812 2 896 -346055816 2 896 -346055820 2 896 -346055824 2 896 -346055828 2 896 -346055832 2 896 -346055836 2 896 -346055840 2 896 -346055844 2 896 -346055848 2 896 -346055852 2 896 -346055856 2 896 -346055860 2 896 -346055864 2 896 -346055868 2 896 -346055872 2 896 -346055876 2 896 -346055880 2 896 -346055884 2 896 -346055888 2 896 -346055892 2 896 -346055896 2 896 -346055900 2 896 -346055904 2 896 -346055908 2 896 -346055912 2 896 -346055916 2 896 -346055920 2 896 -346055924 2 896 -346055928 2 896 -346055932 2 896 -346055936 2 896 -346055940 2 896 -346055944 2 896 -346055948 2 896 -346055952 2 896 -346055956 2 896 -346055960 2 896 -346055964 2 896 -346055968 2 896 -346055972 2 896 -346055976 2 896 -346055980 2 896 -346055984 2 896 -346055988 2 896 -346055992 2 896 -346055996 2 896 -346056000 2 896 -346056004 2 896 -346056008 2 896 -346056012 2 896 -346056016 2 896 -346056020 2 896 -346056024 2 896 -346056028 2 896 -346056032 2 896 -346056036 2 896 -346056040 2 896 -346056044 2 896 -346056048 2 896 -346056052 2 896 -346056056 2 896 -346056060 2 896 -346056064 2 896 -346059780 2 896 -346059784 2 896 -346059788 2 896 -346059792 2 896 -346059796 2 896 -346059800 2 896 -346059804 2 896 -346059808 2 896 -346059812 2 896 -346059816 2 896 -346059820 2 896 -346059824 2 896 -346059828 2 896 -346059832 2 896 -346059836 2 896 -346059840 2 896 -346059844 2 896 -346059848 2 896 -346059852 2 896 -346059856 2 896 -346059860 2 896 -346059864 2 896 -346059868 2 896 -346059872 2 896 -346059876 2 896 -346059880 2 896 -346059884 2 896 -346059888 2 896 -346059892 2 896 -346059896 2 896 -346059900 2 896 -346059904 2 896 -346059908 2 896 -346059912 2 896 -346059916 2 896 -346059920 2 896 -346059924 2 896 -346059928 2 896 -346059932 2 896 -346059936 2 896 -346059940 2 896 -346059944 2 896 -346059948 2 896 -346059952 2 896 -346059956 2 896 -346059960 2 896 -346059964 2 896 -346059968 2 896 -346059972 2 896 -346059976 2 896 -346059980 2 896 -346059984 2 896 -346059988 2 896 -346059992 2 896 -346059996 2 896 -346060000 2 896 -346060004 2 896 -346060008 2 896 -346060012 2 896 -346060016 2 896 -346060020 2 896 -346060024 2 896 -346060028 2 896 -346060032 2 896 -346060036 2 896 -346060040 2 896 -346060044 2 896 -346060048 2 896 -346060052 2 896 -346060056 2 896 -346060060 2 896 -346060064 2 896 -346060068 2 896 -346060072 2 896 -346060076 2 896 -346060080 2 896 -346060084 2 896 -346060088 2 896 -346060092 2 896 -346060096 2 896 -346060100 2 896 -346060104 2 896 -346060108 2 896 -346060112 2 896 -346060116 2 896 -346060120 2 896 -346060124 2 896 -346060128 2 896 -346060132 2 896 -346060136 2 896 -346060140 2 896 -346060144 2 896 -346060148 2 896 -346060152 2 896 -346060156 2 896 -346060160 2 896 -346060164 2 896 -346060168 2 896 -346060172 2 896 -346060176 2 896 -346060180 2 896 -346060184 2 896 -346060188 2 896 -346060192 2 896 -346060196 2 896 -346060200 2 896 -346060204 2 896 -346060208 2 896 -346060212 2 896 -346060216 2 896 -346060220 2 896 -346060224 2 896 -346063876 2 896 -346063880 2 896 -346063884 2 896 -346063888 2 896 -346063892 2 896 -346063896 2 896 -346063900 2 896 -346063904 2 896 -346063908 2 896 -346063912 2 896 -346063916 2 896 -346063920 2 896 -346063924 2 896 -346063928 2 896 -346063932 2 896 -346063936 2 896 -346063940 2 896 -346063944 2 896 -346063948 2 896 -346063952 2 896 -346063956 2 896 -346063960 2 896 -346063964 2 896 -346063968 2 896 -346063972 2 896 -346063976 2 896 -346063980 2 896 -346063984 2 896 -346063988 2 896 -346063992 2 896 -346063996 2 896 -346064000 2 896 -346064004 2 896 -346064008 2 896 -346064012 2 896 -346064016 2 896 -346064020 2 896 -346064024 2 896 -346064028 2 896 -346064032 2 896 -346064036 2 896 -346064040 2 896 -346064044 2 896 -346064048 2 896 -346064052 2 896 -346064056 2 896 -346064060 2 896 -346064064 2 896 -346064068 2 896 -346064072 2 896 -346064076 2 896 -346064080 2 896 -346064084 2 896 -346064088 2 896 -346064092 2 896 -346064096 2 896 -346064100 2 896 -346064104 2 896 -346064108 2 896 -346064112 2 896 -346064116 2 896 -346064120 2 896 -346064124 2 896 -346064128 2 896 -346064132 2 896 -346064136 2 896 -346064140 2 896 -346064144 2 896 -346064148 2 896 -346064152 2 896 -346064156 2 896 -346064160 2 896 -346064164 2 896 -346064168 2 896 -346064172 2 896 -346064176 2 896 -346064180 2 896 -346064184 2 896 -346064188 2 896 -346064192 2 896 -346064196 2 896 -346064200 2 896 -346064204 2 896 -346064208 2 896 -346064212 2 896 -346064216 2 896 -346064220 2 896 -346064224 2 896 -346064228 2 896 -346064232 2 896 -346064236 2 896 -346064240 2 896 -346064244 2 896 -346064248 2 896 -346064252 2 896 -346064256 2 896 -346064260 2 896 -346064264 2 896 -346064268 2 896 -346064272 2 896 -346064276 2 896 -346064280 2 896 -346064284 2 896 -346064288 2 896 -346064292 2 896 -346064296 2 896 -346064300 2 896 -346064304 2 896 -346064308 2 896 -346064312 2 896 -346064316 2 896 -346064320 2 896 -346064324 2 896 -346064328 2 896 -346064332 2 896 -346064336 2 896 -346064340 2 896 -346064344 2 896 -346064348 2 896 -346064352 2 896 -346064356 2 896 -346064360 2 896 -346064364 2 896 -346064368 2 896 -346064372 2 896 -346064376 2 896 -346064380 2 896 -346064384 2 896 -346067972 2 896 -346067976 2 896 -346067980 2 896 -346067984 2 896 -346067988 2 896 -346067992 2 896 -346067996 2 896 -346068000 2 896 -346068004 2 896 -346068008 2 896 -346068012 2 896 -346068016 2 896 -346068020 2 896 -346068024 2 896 -346068028 2 896 -346068032 2 896 -346068036 2 896 -346068040 2 896 -346068044 2 896 -346068048 2 896 -346068052 2 896 -346068056 2 896 -346068060 2 896 -346068064 2 896 -346068068 2 896 -346068072 2 896 -346068076 2 896 -346068080 2 896 -346068084 2 896 -346068088 2 896 -346068092 2 896 -346068096 2 896 -346068100 2 896 -346068104 2 896 -346068108 2 896 -346068112 2 896 -346068116 2 896 -346068120 2 896 -346068124 2 896 -346068128 2 896 -346068132 2 896 -346068136 2 896 -346068140 2 896 -346068144 2 896 -346068148 2 896 -346068152 2 896 -346068156 2 896 -346068160 2 896 -346068164 2 896 -346068168 2 896 -346068172 2 896 -346068176 2 896 -346068180 2 896 -346068184 2 896 -346068188 2 896 -346068192 2 896 -346068196 2 896 -346068200 2 896 -346068204 2 896 -346068208 2 896 -346068212 2 896 -346068216 2 896 -346068220 2 896 -346068224 2 896 -346068228 2 896 -346068232 2 896 -346068236 2 896 -346068240 2 896 -346068244 2 896 -346068248 2 896 -346068252 2 896 -346068256 2 896 -346068260 2 896 -346068264 2 896 -346068268 2 896 -346068272 2 896 -346068276 2 896 -346068280 2 896 -346068284 2 896 -346068288 2 896 -346068292 2 896 -346068296 2 896 -346068300 2 896 -346068304 2 896 -346068308 2 896 -346068312 2 896 -346068316 2 896 -346068320 2 896 -346068324 2 896 -346068328 2 896 -346068332 2 896 -346068336 2 896 -346068340 2 896 -346068344 2 896 -346068348 2 896 -346068352 2 896 -346068356 2 896 -346068360 2 896 -346068364 2 896 -346068368 2 896 -346068372 2 896 -346068376 2 896 -346068380 2 896 -346068384 2 896 -346068388 2 896 -346068392 2 896 -346068396 2 896 -346068400 2 896 -346068404 2 896 -346068408 2 896 -346068412 2 896 -346068416 2 896 -346068420 2 896 -346068424 2 896 -346068428 2 896 -346068432 2 896 -346068436 2 896 -346068440 2 896 -346068444 2 896 -346068448 2 896 -346068452 2 896 -346068456 2 896 -346068460 2 896 -346068464 2 896 -346068468 2 896 -346068472 2 896 -346068476 2 896 -346068480 2 896 -346068484 2 896 -346068488 2 896 -346068492 2 896 -346068496 2 896 -346068500 2 896 -346068504 2 896 -346068508 2 896 -346068512 2 896 -346072068 2 896 -346072072 2 896 -346072076 2 896 -346072080 2 896 -346072084 2 896 -346072088 2 896 -346072092 2 896 -346072096 2 896 -346072100 2 896 -346072104 2 896 -346072108 2 896 -346072112 2 896 -346072116 2 896 -346072120 2 896 -346072124 2 896 -346072128 2 896 -346072132 2 896 -346072136 2 896 -346072140 2 896 -346072144 2 896 -346072148 2 896 -346072152 2 896 -346072156 2 896 -346072160 2 896 -346072164 2 896 -346072168 2 896 -346072172 2 896 -346072176 2 896 -346072180 2 896 -346072184 2 896 -346072188 2 896 -346072192 2 896 -346072196 2 896 -346072200 2 896 -346072204 2 896 -346072208 2 896 -346072212 2 896 -346072216 2 896 -346072220 2 896 -346072224 2 896 -346072228 2 896 -346072232 2 896 -346072236 2 896 -346072240 2 896 -346072244 2 896 -346072248 2 896 -346072252 2 896 -346072256 2 896 -346072260 2 896 -346072264 2 896 -346072268 2 896 -346072272 2 896 -346072276 2 896 -346072280 2 896 -346072284 2 896 -346072288 2 896 -346072292 2 896 -346072296 2 896 -346072300 2 896 -346072304 2 896 -346072308 2 896 -346072312 2 896 -346072316 2 896 -346072320 2 896 -346072324 2 896 -346072328 2 896 -346072332 2 896 -346072336 2 896 -346072340 2 896 -346072344 2 896 -346072348 2 896 -346072352 2 896 -346072356 2 896 -346072360 2 896 -346072364 2 896 -346072368 2 896 -346072372 2 896 -346072376 2 896 -346072380 2 896 -346072384 2 896 -346072388 2 896 -346072392 2 896 -346072396 2 896 -346072400 2 896 -346072404 2 896 -346072408 2 896 -346072412 2 896 -346072416 2 896 -346072420 2 896 -346072424 2 896 -346072428 2 896 -346072432 2 896 -346072436 2 896 -346072440 2 896 -346072444 2 896 -346072448 2 896 -346072452 2 896 -346072456 2 896 -346072460 2 896 -346072464 2 896 -346072468 2 896 -346072472 2 896 -346072476 2 896 -346072480 2 896 -346072484 2 896 -346072488 2 896 -346072492 2 896 -346072496 2 896 -346072500 2 896 -346072504 2 896 -346072508 2 896 -346072512 2 896 -346072516 2 896 -346072520 2 896 -346072524 2 896 -346072528 2 896 -346072532 2 896 -346072536 2 896 -346072540 2 896 -346072544 2 896 -346072548 2 896 -346072552 2 896 -346072556 2 896 -346072560 2 896 -346072564 2 896 -346072568 2 896 -346072572 2 896 -346072576 2 896 -346072580 2 896 -346072584 2 896 -346072588 2 896 -346072592 2 896 -346072596 2 896 -346072600 2 896 -346072604 2 896 -346072608 2 896 -346072612 2 896 -346072616 2 896 -346072620 2 896 -346072624 2 896 -346072628 2 896 -346072632 2 896 -346072636 2 896 -346072640 2 896 -346076164 2 896 -346076168 2 896 -346076172 2 896 -346076176 2 896 -346076180 2 896 -346076184 2 896 -346076188 2 896 -346076192 2 896 -346076196 2 896 -346076200 2 896 -346076204 2 896 -346076208 2 896 -346076212 2 896 -346076216 2 896 -346076220 2 896 -346076224 2 896 -346076228 2 896 -346076232 2 896 -346076236 2 896 -346076240 2 896 -346076244 2 896 -346076248 2 896 -346076252 2 896 -346076256 2 896 -346076260 2 896 -346076264 2 896 -346076268 2 896 -346076272 2 896 -346076276 2 896 -346076280 2 896 -346076284 2 896 -346076288 2 896 -346076292 2 896 -346076296 2 896 -346076300 2 896 -346076304 2 896 -346076308 2 896 -346076312 2 896 -346076316 2 896 -346076320 2 896 -346076324 2 896 -346076328 2 896 -346076332 2 896 -346076336 2 896 -346076340 2 896 -346076344 2 896 -346076348 2 896 -346076352 2 896 -346076356 2 896 -346076360 2 896 -346076364 2 896 -346076368 2 896 -346076372 2 896 -346076376 2 896 -346076380 2 896 -346076384 2 896 -346076388 2 896 -346076392 2 896 -346076396 2 896 -346076400 2 896 -346076404 2 896 -346076408 2 896 -346076412 2 896 -346076416 2 896 -346076420 2 896 -346076424 2 896 -346076428 2 896 -346076432 2 896 -346076436 2 896 -346076440 2 896 -346076444 2 896 -346076448 2 896 -346076452 2 896 -346076456 2 896 -346076460 2 896 -346076464 2 896 -346076468 2 896 -346076472 2 896 -346076476 2 896 -346076480 2 896 -346076484 2 896 -346076488 2 896 -346076492 2 896 -346076496 2 896 -346076500 2 896 -346076504 2 896 -346076508 2 896 -346076512 2 896 -346076516 2 896 -346076520 2 896 -346076524 2 896 -346076528 2 896 -346076532 2 896 -346076536 2 896 -346076540 2 896 -346076544 2 896 -346076548 2 896 -346076552 2 896 -346076556 2 896 -346076560 2 896 -346076564 2 896 -346076568 2 896 -346076572 2 896 -346076576 2 896 -346076580 2 896 -346076584 2 896 -346076588 2 896 -346076592 2 896 -346076596 2 896 -346076600 2 896 -346076604 2 896 -346076608 2 896 -346076612 2 896 -346076616 2 896 -346076620 2 896 -346076624 2 896 -346076628 2 896 -346076632 2 896 -346076636 2 896 -346076640 2 896 -346076644 2 896 -346076648 2 896 -346076652 2 896 -346076656 2 896 -346076660 2 896 -346076664 2 896 -346076668 2 896 -346076672 2 896 -346076676 2 896 -346076680 2 896 -346076684 2 896 -346076688 2 896 -346076692 2 896 -346076696 2 896 -346076700 2 896 -346076704 2 896 -346076708 2 896 -346076712 2 896 -346076716 2 896 -346076720 2 896 -346076724 2 896 -346076728 2 896 -346076732 2 896 -346076736 2 896 -346076740 2 896 -346076744 2 896 -346076748 2 896 -346076752 2 896 -346076756 2 896 -346076760 2 896 -346076764 2 896 -346076768 2 896 -346076772 2 896 -346076776 2 896 -346076780 2 896 -346076784 2 896 -346076788 2 896 -346076792 2 896 -346076796 2 896 -346076800 2 896 +344986628 32 960 +344986632 2 960 +344986636 32 960 +344986640 2 960 +344986644 32 960 +344986648 2 960 +344986652 32 960 +344986656 2 960 +344986660 32 960 +344986664 2 960 +344986668 32 960 +344986672 2 960 +344986676 32 960 +344986680 2 960 +344986684 32 960 +344986688 2 960 +344986692 32 960 +344986696 2 960 +344986700 32 960 +344986704 2 960 +344986708 32 960 +344986712 2 960 +344986716 32 960 +344986720 2 960 +344986724 32 960 +344986728 2 960 +344986732 32 960 +344986736 2 960 +344986740 32 960 +344986744 2 960 +344986748 32 960 +344986752 2 960 +344986756 32 960 +344986760 2 960 +344986764 32 960 +344986768 2 960 +344986772 32 960 +344986776 2 960 +344986780 32 960 +344986784 2 960 +344990724 32 960 +344990728 2 960 +344990732 32 960 +344990736 2 960 +344990740 32 960 +344990744 2 960 +344990748 32 960 +344990752 2 960 +344990756 32 960 +344990760 2 960 +344990764 32 960 +344990768 2 960 +344990772 32 960 +344990776 2 960 +344990780 32 960 +344990784 2 960 +344990788 32 960 +344990792 2 960 +344990796 32 960 +344990800 2 960 +344990804 32 960 +344990808 2 960 +344990812 32 960 +344990816 2 960 +344990820 32 960 +344990824 2 960 +344990828 32 960 +344990832 2 960 +344990836 32 960 +344990840 2 960 +344990844 32 960 +344990848 2 960 +344990852 32 960 +344990856 2 960 +344990860 32 960 +344990864 2 960 +344990868 32 960 +344990872 2 960 +344990876 32 960 +344990880 2 960 +344990884 32 960 +344990888 2 960 +344990892 32 960 +344990896 2 960 +344990900 32 960 +344990904 2 960 +344990908 32 960 +344990912 2 960 +344994820 32 960 +344994824 2 960 +344994828 32 960 +344994832 2 960 +344994836 32 960 +344994840 2 960 +344994844 32 960 +344994848 2 960 +344994852 32 960 +344994856 2 960 +344994860 32 960 +344994864 2 960 +344994868 32 960 +344994872 2 960 +344994876 32 960 +344994880 2 960 +344994884 32 960 +344994888 2 960 +344994892 32 960 +344994896 2 960 +344994900 32 960 +344994904 2 960 +344994908 32 960 +344994912 2 960 +344994916 32 960 +344994920 2 960 +344994924 32 960 +344994928 2 960 +344994932 32 960 +344994936 2 960 +344994940 32 960 +344994944 2 960 +344994948 32 960 +344994952 2 960 +344994956 32 960 +344994960 2 960 +344994964 32 960 +344994968 2 960 +344994972 32 960 +344994976 2 960 +344994980 32 960 +344994984 2 960 +344994988 32 960 +344994992 2 960 +344994996 32 960 +344995000 2 960 +344995004 32 960 +344995008 2 960 +344995012 32 960 +344995016 2 960 +344995020 32 960 +344995024 2 960 +344995028 32 960 +344995032 2 960 +344995036 32 960 +344995040 2 960 +344998916 32 960 +344998920 2 960 +344998924 32 960 +344998928 2 960 +344998932 32 960 +344998936 2 960 +344998940 32 960 +344998944 2 960 +344998948 32 960 +344998952 2 960 +344998956 32 960 +344998960 2 960 +344998964 32 960 +344998968 2 960 +344998972 32 960 +344998976 2 960 +344998980 32 960 +344998984 2 960 +344998988 32 960 +344998992 2 960 +344998996 32 960 +344999000 2 960 +344999004 32 960 +344999008 2 960 +344999012 32 960 +344999016 2 960 +344999020 32 960 +344999024 2 960 +344999028 32 960 +344999032 2 960 +344999036 32 960 +344999040 2 960 +344999044 32 960 +344999048 2 960 +344999052 32 960 +344999056 2 960 +344999060 32 960 +344999064 2 960 +344999068 32 960 +344999072 2 960 +344999076 32 960 +344999080 2 960 +344999084 32 960 +344999088 2 960 +344999092 32 960 +344999096 2 960 +344999100 32 960 +344999104 2 960 +344999108 32 960 +344999112 2 960 +344999116 32 960 +344999120 2 960 +344999124 32 960 +344999128 2 960 +344999132 32 960 +344999136 2 960 +345003012 32 960 +345003016 2 960 +345003020 32 960 +345003024 2 960 +345003028 32 960 +345003032 2 960 +345003036 32 960 +345003040 2 960 +345003044 32 960 +345003048 2 960 +345003052 32 960 +345003056 2 960 +345003060 32 960 +345003064 2 960 +345003068 32 960 +345003072 2 960 +345003076 32 960 +345003080 2 960 +345003084 32 960 +345003088 2 960 +345003092 32 960 +345003096 2 960 +345003100 32 960 +345003104 2 960 +345003108 32 960 +345003112 2 960 +345003116 32 960 +345003120 2 960 +345003124 32 960 +345003128 2 960 +345003132 32 960 +345003136 2 960 +345003140 32 960 +345003144 2 960 +345003148 32 960 +345003152 2 960 +345003156 32 960 +345003160 2 960 +345003164 32 960 +345003168 2 960 +345003172 32 960 +345003176 2 960 +345003180 32 960 +345003184 2 960 +345003188 32 960 +345003192 2 960 +345003196 32 960 +345003200 2 960 +345003204 32 960 +345003208 2 960 +345003212 32 960 +345003216 2 960 +345003220 32 960 +345003224 2 960 +345003228 32 960 +345003232 2 960 +345003236 32 960 +345003240 2 960 +345003244 32 960 +345003248 2 960 +345003252 32 960 +345003256 2 960 +345003260 32 960 +345003264 2 960 +345007108 32 960 +345007112 2 960 +345007116 32 960 +345007120 2 960 +345007124 32 960 +345007128 2 960 +345007132 32 960 +345007136 2 960 +345007140 32 960 +345007144 2 960 +345007148 32 960 +345007152 2 960 +345007156 32 960 +345007160 2 960 +345007164 32 960 +345007168 2 960 +345007172 32 960 +345007176 2 960 +345007180 32 960 +345007184 2 960 +345007188 32 960 +345007192 2 960 +345007196 32 960 +345007200 2 960 +345007204 32 960 +345007208 2 960 +345007212 32 960 +345007216 2 960 +345007220 32 960 +345007224 2 960 +345007228 32 960 +345007232 2 960 +345007236 32 960 +345007240 2 960 +345007244 32 960 +345007248 2 960 +345007252 32 960 +345007256 2 960 +345007260 32 960 +345007264 2 960 +345007268 32 960 +345007272 2 960 +345007276 32 960 +345007280 2 960 +345007284 32 960 +345007288 2 960 +345007292 32 960 +345007296 2 960 +345007300 32 960 +345007304 2 960 +345007308 32 960 +345007312 2 960 +345007316 32 960 +345007320 2 960 +345007324 32 960 +345007328 2 960 +345007332 32 960 +345007336 2 960 +345007340 32 960 +345007344 2 960 +345007348 32 960 +345007352 2 960 +345007356 32 960 +345007360 2 960 +345007364 32 960 +345007368 2 960 +345007372 32 960 +345007376 2 960 +345007380 32 960 +345007384 2 960 +345007388 32 960 +345007392 2 960 +345011204 32 960 +345011208 2 960 +345011212 32 960 +345011216 2 960 +345011220 32 960 +345011224 2 960 +345011228 32 960 +345011232 2 960 +345011236 32 960 +345011240 2 960 +345011244 32 960 +345011248 2 960 +345011252 32 960 +345011256 2 960 +345011260 32 960 +345011264 2 960 +345011268 32 960 +345011272 2 960 +345011276 32 960 +345011280 2 960 +345011284 32 960 +345011288 2 960 +345011292 32 960 +345011296 2 960 +345011300 32 960 +345011304 2 960 +345011308 32 960 +345011312 2 960 +345011316 32 960 +345011320 2 960 +345011324 32 960 +345011328 2 960 +345011332 32 960 +345011336 2 960 +345011340 32 960 +345011344 2 960 +345011348 32 960 +345011352 2 960 +345011356 32 960 +345011360 2 960 +345011364 32 960 +345011368 2 960 +345011372 32 960 +345011376 2 960 +345011380 32 960 +345011384 2 960 +345011388 32 960 +345011392 2 960 +345011396 32 960 +345011400 2 960 +345011404 32 960 +345011408 2 960 +345011412 32 960 +345011416 2 960 +345011420 32 960 +345011424 2 960 +345011428 32 960 +345011432 2 960 +345011436 32 960 +345011440 2 960 +345011444 32 960 +345011448 2 960 +345011452 32 960 +345011456 2 960 +345011460 32 960 +345011464 2 960 +345011468 32 960 +345011472 2 960 +345011476 32 960 +345011480 2 960 +345011484 32 960 +345011488 2 960 +345015300 32 960 +345015304 2 960 +345015308 32 960 +345015312 2 960 +345015316 32 960 +345015320 2 960 +345015324 32 960 +345015328 2 960 +345015332 32 960 +345015336 2 960 +345015340 32 960 +345015344 2 960 +345015348 32 960 +345015352 2 960 +345015356 32 960 +345015360 2 960 +345015364 32 960 +345015368 2 960 +345015372 32 960 +345015376 2 960 +345015380 32 960 +345015384 2 960 +345015388 32 960 +345015392 2 960 +345015396 32 960 +345015400 2 960 +345015404 32 960 +345015408 2 960 +345015412 32 960 +345015416 2 960 +345015420 32 960 +345015424 2 960 +345015428 32 960 +345015432 2 960 +345015436 32 960 +345015440 2 960 +345015444 32 960 +345015448 2 960 +345015452 32 960 +345015456 2 960 +345015460 32 960 +345015464 2 960 +345015468 32 960 +345015472 2 960 +345015476 32 960 +345015480 2 960 +345015484 32 960 +345015488 2 960 +345015492 32 960 +345015496 2 960 +345015500 32 960 +345015504 2 960 +345015508 32 960 +345015512 2 960 +345015516 32 960 +345015520 2 960 +345015524 32 960 +345015528 2 960 +345015532 32 960 +345015536 2 960 +345015540 32 960 +345015544 2 960 +345015548 32 960 +345015552 2 960 +345015556 32 960 +345015560 2 960 +345015564 32 960 +345015568 2 960 +345015572 32 960 +345015576 2 960 +345015580 32 960 +345015584 2 960 +345015588 32 960 +345015592 2 960 +345015596 32 960 +345015600 2 960 +345015604 32 960 +345015608 2 960 +345015612 32 960 +345015616 2 960 +345019396 32 960 +345019400 2 960 +345019404 32 960 +345019408 2 960 +345019412 32 960 +345019416 2 960 +345019420 32 960 +345019424 2 960 +345019428 32 960 +345019432 2 960 +345019436 32 960 +345019440 2 960 +345019444 32 960 +345019448 2 960 +345019452 32 960 +345019456 2 960 +345019460 32 960 +345019464 2 960 +345019468 32 960 +345019472 2 960 +345019476 32 960 +345019480 2 960 +345019484 32 960 +345019488 2 960 +345019492 32 960 +345019496 2 960 +345019500 32 960 +345019504 2 960 +345019508 32 960 +345019512 2 960 +345019516 32 960 +345019520 2 960 +345019524 32 960 +345019528 2 960 +345019532 32 960 +345019536 2 960 +345019540 32 960 +345019544 2 960 +345019548 32 960 +345019552 2 960 +345019556 32 960 +345019560 2 960 +345019564 32 960 +345019568 2 960 +345019572 32 960 +345019576 2 960 +345019580 32 960 +345019584 2 960 +345019588 32 960 +345019592 2 960 +345019596 32 960 +345019600 2 960 +345019604 32 960 +345019608 2 960 +345019612 32 960 +345019616 2 960 +345019620 32 960 +345019624 2 960 +345019628 32 960 +345019632 2 960 +345019636 32 960 +345019640 2 960 +345019644 32 960 +345019648 2 960 +345019652 32 960 +345019656 2 960 +345019660 32 960 +345019664 2 960 +345019668 32 960 +345019672 2 960 +345019676 32 960 +345019680 2 960 +345019684 32 960 +345019688 2 960 +345019692 32 960 +345019696 2 960 +345019700 32 960 +345019704 2 960 +345019708 32 960 +345019712 2 960 +345023492 2 1016 +345023496 2 1016 +345023500 2 1016 +345023504 2 1016 +345023508 2 1016 +345023512 2 1016 +345023516 2 1016 +345023520 2 1016 +345023524 2 1016 +345023528 2 1016 +345023532 2 1016 +345023536 2 1016 +345023540 2 1016 +345023544 2 1016 +345023548 2 1016 +345023552 2 1016 +345023556 2 1016 +345023560 2 1016 +345023564 2 1016 +345023568 2 1016 +345023572 2 1016 +345023576 2 1016 +345023580 2 1016 +345023584 2 1016 +345023588 2 1016 +345023592 2 1016 +345023596 2 1016 +345023600 2 1016 +345023604 2 1016 +345023608 2 1016 +345023612 2 1016 +345023616 2 1016 +345023620 2 1016 +345023624 2 1016 +345023628 2 1016 +345023632 2 1016 +345023636 2 1016 +345023640 2 1016 +345023644 2 1016 +345023648 2 1016 +345023652 2 1016 +345023656 2 1016 +345023660 2 1016 +345023664 2 1016 +345023668 2 1016 +345023672 2 1016 +345023676 2 1016 +345023680 2 1016 +345023684 2 1016 +345023688 2 1016 +345023692 2 1016 +345023696 2 1016 +345023700 2 1016 +345023704 2 1016 +345023708 2 1016 +345023712 2 1016 +345023716 2 1016 +345023720 2 1016 +345023724 2 1016 +345023728 2 1016 +345023732 2 1016 +345023736 2 1016 +345023740 2 1016 +345023744 2 1016 +345023748 2 1016 +345023752 2 1016 +345023756 2 1016 +345023760 2 1016 +345023764 2 1016 +345023768 2 1016 +345023772 2 1016 +345023776 2 1016 +345023780 2 1016 +345023784 2 1016 +345023788 2 1016 +345023792 2 1016 +345023796 2 1016 +345023800 2 1016 +345023804 2 1016 +345023808 2 1016 +345023812 2 1016 +345023816 2 1016 +345023820 2 1016 +345023824 2 1016 +345023828 2 1016 +345023832 2 1016 +345023836 2 1016 +345023840 2 1016 +345023844 2 1016 +345023848 2 1016 +345023852 2 1016 +345023856 2 1016 +345023860 2 1016 +345023864 2 1016 +345023868 2 1016 +345023872 2 1016 +345023876 2 1016 +345023880 2 1016 +345023884 2 1016 +345023888 2 1016 +345023892 2 1016 +345023896 2 1016 +345023900 2 1016 +345023904 2 1016 +345027588 2 1016 +345027592 2 1016 +345027596 2 1016 +345027600 2 1016 +345027604 2 1016 +345027608 2 1016 +345027612 2 1016 +345027616 2 1016 +345027620 2 1016 +345027624 2 1016 +345027628 2 1016 +345027632 2 1016 +345027636 2 1016 +345027640 2 1016 +345027644 2 1016 +345027648 2 1016 +345027652 2 1016 +345027656 2 1016 +345027660 2 1016 +345027664 2 1016 +345027668 2 1016 +345027672 2 1016 +345027676 2 1016 +345027680 2 1016 +345027684 2 1016 +345027688 2 1016 +345027692 2 1016 +345027696 2 1016 +345027700 2 1016 +345027704 2 1016 +345027708 2 1016 +345027712 2 1016 +345027716 2 1016 +345027720 2 1016 +345027724 2 1016 +345027728 2 1016 +345027732 2 1016 +345027736 2 1016 +345027740 2 1016 +345027744 2 1016 +345027748 2 1016 +345027752 2 1016 +345027756 2 1016 +345027760 2 1016 +345027764 2 1016 +345027768 2 1016 +345027772 2 1016 +345027776 2 1016 +345027780 2 1016 +345027784 2 1016 +345027788 2 1016 +345027792 2 1016 +345027796 2 1016 +345027800 2 1016 +345027804 2 1016 +345027808 2 1016 +345027812 2 1016 +345027816 2 1016 +345027820 2 1016 +345027824 2 1016 +345027828 2 1016 +345027832 2 1016 +345027836 2 1016 +345027840 2 1016 +345027844 2 1016 +345027848 2 1016 +345027852 2 1016 +345027856 2 1016 +345027860 2 1016 +345027864 2 1016 +345027868 2 1016 +345027872 2 1016 +345027876 2 1016 +345027880 2 1016 +345027884 2 1016 +345027888 2 1016 +345027892 2 1016 +345027896 2 1016 +345027900 2 1016 +345027904 2 1016 +345027908 2 1016 +345027912 2 1016 +345027916 2 1016 +345027920 2 1016 +345027924 2 1016 +345027928 2 1016 +345027932 2 1016 +345027936 2 1016 +345027940 2 1016 +345027944 2 1016 +345027948 2 1016 +345027952 2 1016 +345027956 2 1016 +345027960 2 1016 +345027964 2 1016 +345027968 2 1016 +345027972 2 1016 +345027976 2 1016 +345027980 2 1016 +345027984 2 1016 +345027988 2 1016 +345027992 2 1016 +345027996 2 1016 +345028000 2 1016 +345028004 2 1016 +345028008 2 1016 +345028012 2 1016 +345028016 2 1016 +345028020 2 1016 +345028024 2 1016 +345028028 2 1016 +345028032 2 1016 +345031684 2 1016 +345031688 2 1016 +345031692 2 1016 +345031696 2 1016 +345031700 2 1016 +345031704 2 1016 +345031708 2 1016 +345031712 2 1016 +345031716 2 1016 +345031720 2 1016 +345031724 2 1016 +345031728 2 1016 +345031732 2 1016 +345031736 2 1016 +345031740 2 1016 +345031744 2 1016 +345031748 2 1016 +345031752 2 1016 +345031756 2 1016 +345031760 2 1016 +345031764 2 1016 +345031768 2 1016 +345031772 2 1016 +345031776 2 1016 +345031780 2 1016 +345031784 2 1016 +345031788 2 1016 +345031792 2 1016 +345031796 2 1016 +345031800 2 1016 +345031804 2 1016 +345031808 2 1016 +345031812 2 1016 +345031816 2 1016 +345031820 2 1016 +345031824 2 1016 +345031828 2 1016 +345031832 2 1016 +345031836 2 1016 +345031840 2 1016 +345031844 2 1016 +345031848 2 1016 +345031852 2 1016 +345031856 2 1016 +345031860 2 1016 +345031864 2 1016 +345031868 2 1016 +345031872 2 1016 +345031876 2 1016 +345031880 2 1016 +345031884 2 1016 +345031888 2 1016 +345031892 2 1016 +345031896 2 1016 +345031900 2 1016 +345031904 2 1016 +345031908 2 1016 +345031912 2 1016 +345031916 2 1016 +345031920 2 1016 +345031924 2 1016 +345031928 2 1016 +345031932 2 1016 +345031936 2 1016 +345031940 2 1016 +345031944 2 1016 +345031948 2 1016 +345031952 2 1016 +345031956 2 1016 +345031960 2 1016 +345031964 2 1016 +345031968 2 1016 +345031972 2 1016 +345031976 2 1016 +345031980 2 1016 +345031984 2 1016 +345031988 2 1016 +345031992 2 1016 +345031996 2 1016 +345032000 2 1016 +345032004 2 1016 +345032008 2 1016 +345032012 2 1016 +345032016 2 1016 +345032020 2 1016 +345032024 2 1016 +345032028 2 1016 +345032032 2 1016 +345032036 2 1016 +345032040 2 1016 +345032044 2 1016 +345032048 2 1016 +345032052 2 1016 +345032056 2 1016 +345032060 2 1016 +345032064 2 1016 +345032068 2 1016 +345032072 2 1016 +345032076 2 1016 +345032080 2 1016 +345032084 2 1016 +345032088 2 1016 +345032092 2 1016 +345032096 2 1016 +345032100 2 1016 +345032104 2 1016 +345032108 2 1016 +345032112 2 1016 +345032116 2 1016 +345032120 2 1016 +345032124 2 1016 +345032128 2 1016 +345032132 2 1016 +345032136 2 1016 +345032140 2 1016 +345032144 2 1016 +345032148 2 1016 +345032152 2 1016 +345032156 2 1016 +345032160 2 1016 +345032164 2 1016 +345032168 2 1016 +345032172 2 1016 +345032176 2 1016 +345032180 2 1016 +345032184 2 1016 +345032188 2 1016 +345032192 2 1016 +345035780 2 1016 +345035784 2 1016 +345035788 2 1016 +345035792 2 1016 +345035796 2 1016 +345035800 2 1016 +345035804 2 1016 +345035808 2 1016 +345035812 2 1016 +345035816 2 1016 +345035820 2 1016 +345035824 2 1016 +345035828 2 1016 +345035832 2 1016 +345035836 2 1016 +345035840 2 1016 +345035844 2 1016 +345035848 2 1016 +345035852 2 1016 +345035856 2 1016 +345035860 2 1016 +345035864 2 1016 +345035868 2 1016 +345035872 2 1016 +345035876 2 1016 +345035880 2 1016 +345035884 2 1016 +345035888 2 1016 +345035892 2 1016 +345035896 2 1016 +345035900 2 1016 +345035904 2 1016 +345035908 2 1016 +345035912 2 1016 +345035916 2 1016 +345035920 2 1016 +345035924 2 1016 +345035928 2 1016 +345035932 2 1016 +345035936 2 1016 +345035940 2 1016 +345035944 2 1016 +345035948 2 1016 +345035952 2 1016 +345035956 2 1016 +345035960 2 1016 +345035964 2 1016 +345035968 2 1016 +345035972 2 1016 +345035976 2 1016 +345035980 2 1016 +345035984 2 1016 +345035988 2 1016 +345035992 2 1016 +345035996 2 1016 +345036000 2 1016 +345036004 2 1016 +345036008 2 1016 +345036012 2 1016 +345036016 2 1016 +345036020 2 1016 +345036024 2 1016 +345036028 2 1016 +345036032 2 1016 +345036036 2 1016 +345036040 2 1016 +345036044 2 1016 +345036048 2 1016 +345036052 2 1016 +345036056 2 1016 +345036060 2 1016 +345036064 2 1016 +345036068 2 1016 +345036072 2 1016 +345036076 2 1016 +345036080 2 1016 +345036084 2 1016 +345036088 2 1016 +345036092 2 1016 +345036096 2 1016 +345036100 2 1016 +345036104 2 1016 +345036108 2 1016 +345036112 2 1016 +345036116 2 1016 +345036120 2 1016 +345036124 2 1016 +345036128 2 1016 +345036132 2 1016 +345036136 2 1016 +345036140 2 1016 +345036144 2 1016 +345036148 2 1016 +345036152 2 1016 +345036156 2 1016 +345036160 2 1016 +345036164 2 1016 +345036168 2 1016 +345036172 2 1016 +345036176 2 1016 +345036180 2 1016 +345036184 2 1016 +345036188 2 1016 +345036192 2 1016 +345036196 2 1016 +345036200 2 1016 +345036204 2 1016 +345036208 2 1016 +345036212 2 1016 +345036216 2 1016 +345036220 2 1016 +345036224 2 1016 +345036228 2 1016 +345036232 2 1016 +345036236 2 1016 +345036240 2 1016 +345036244 2 1016 +345036248 2 1016 +345036252 2 1016 +345036256 2 1016 +345036260 2 1016 +345036264 2 1016 +345036268 2 1016 +345036272 2 1016 +345036276 2 1016 +345036280 2 1016 +345036284 2 1016 +345036288 2 1016 +345036292 2 1016 +345036296 2 1016 +345036300 2 1016 +345036304 2 1016 +345036308 2 1016 +345036312 2 1016 +345036316 2 1016 +345036320 2 1016 +345039876 2 1016 +345039880 2 1016 +345039884 2 1016 +345039888 2 1016 +345039892 2 1016 +345039896 2 1016 +345039900 2 1016 +345039904 2 1016 +345039908 2 1016 +345039912 2 1016 +345039916 2 1016 +345039920 2 1016 +345039924 2 1016 +345039928 2 1016 +345039932 2 1016 +345039936 2 1016 +345039940 2 1016 +345039944 2 1016 +345039948 2 1016 +345039952 2 1016 +345039956 2 1016 +345039960 2 1016 +345039964 2 1016 +345039968 2 1016 +345039972 2 1016 +345039976 2 1016 +345039980 2 1016 +345039984 2 1016 +345039988 2 1016 +345039992 2 1016 +345039996 2 1016 +345040000 2 1016 +345040004 2 1016 +345040008 2 1016 +345040012 2 1016 +345040016 2 1016 +345040020 2 1016 +345040024 2 1016 +345040028 2 1016 +345040032 2 1016 +345040036 2 1016 +345040040 2 1016 +345040044 2 1016 +345040048 2 1016 +345040052 2 1016 +345040056 2 1016 +345040060 2 1016 +345040064 2 1016 +345040068 2 1016 +345040072 2 1016 +345040076 2 1016 +345040080 2 1016 +345040084 2 1016 +345040088 2 1016 +345040092 2 1016 +345040096 2 1016 +345040100 2 1016 +345040104 2 1016 +345040108 2 1016 +345040112 2 1016 +345040116 2 1016 +345040120 2 1016 +345040124 2 1016 +345040128 2 1016 +345040132 2 1016 +345040136 2 1016 +345040140 2 1016 +345040144 2 1016 +345040148 2 1016 +345040152 2 1016 +345040156 2 1016 +345040160 2 1016 +345040164 2 1016 +345040168 2 1016 +345040172 2 1016 +345040176 2 1016 +345040180 2 1016 +345040184 2 1016 +345040188 2 1016 +345040192 2 1016 +345040196 2 1016 +345040200 2 1016 +345040204 2 1016 +345040208 2 1016 +345040212 2 1016 +345040216 2 1016 +345040220 2 1016 +345040224 2 1016 +345040228 2 1016 +345040232 2 1016 +345040236 2 1016 +345040240 2 1016 +345040244 2 1016 +345040248 2 1016 +345040252 2 1016 +345040256 2 1016 +345040260 2 1016 +345040264 2 1016 +345040268 2 1016 +345040272 2 1016 +345040276 2 1016 +345040280 2 1016 +345040284 2 1016 +345040288 2 1016 +345040292 2 1016 +345040296 2 1016 +345040300 2 1016 +345040304 2 1016 +345040308 2 1016 +345040312 2 1016 +345040316 2 1016 +345040320 2 1016 +345040324 2 1016 +345040328 2 1016 +345040332 2 1016 +345040336 2 1016 +345040340 2 1016 +345040344 2 1016 +345040348 2 1016 +345040352 2 1016 +345040356 2 1016 +345040360 2 1016 +345040364 2 1016 +345040368 2 1016 +345040372 2 1016 +345040376 2 1016 +345040380 2 1016 +345040384 2 1016 +345040388 2 1016 +345040392 2 1016 +345040396 2 1016 +345040400 2 1016 +345040404 2 1016 +345040408 2 1016 +345040412 2 1016 +345040416 2 1016 +345040420 2 1016 +345040424 2 1016 +345040428 2 1016 +345040432 2 1016 +345040436 2 1016 +345040440 2 1016 +345040444 2 1016 +345040448 2 1016 +345040452 2 1016 +345040456 2 1016 +345040460 2 1016 +345040464 2 1016 +345040468 2 1016 +345040472 2 1016 +345040476 2 1016 +345040480 2 1016 +345043972 2 1016 +345043976 2 1016 +345043980 2 1016 +345043984 2 1016 +345043988 2 1016 +345043992 2 1016 +345043996 2 1016 +345044000 2 1016 +345044004 2 1016 +345044008 2 1016 +345044012 2 1016 +345044016 2 1016 +345044020 2 1016 +345044024 2 1016 +345044028 2 1016 +345044032 2 1016 +345044036 2 1016 +345044040 2 1016 +345044044 2 1016 +345044048 2 1016 +345044052 2 1016 +345044056 2 1016 +345044060 2 1016 +345044064 2 1016 +345044068 2 1016 +345044072 2 1016 +345044076 2 1016 +345044080 2 1016 +345044084 2 1016 +345044088 2 1016 +345044092 2 1016 +345044096 2 1016 +345044100 2 1016 +345044104 2 1016 +345044108 2 1016 +345044112 2 1016 +345044116 2 1016 +345044120 2 1016 +345044124 2 1016 +345044128 2 1016 +345044132 2 1016 +345044136 2 1016 +345044140 2 1016 +345044144 2 1016 +345044148 2 1016 +345044152 2 1016 +345044156 2 1016 +345044160 2 1016 +345044164 2 1016 +345044168 2 1016 +345044172 2 1016 +345044176 2 1016 +345044180 2 1016 +345044184 2 1016 +345044188 2 1016 +345044192 2 1016 +345044196 2 1016 +345044200 2 1016 +345044204 2 1016 +345044208 2 1016 +345044212 2 1016 +345044216 2 1016 +345044220 2 1016 +345044224 2 1016 +345044228 2 1016 +345044232 2 1016 +345044236 2 1016 +345044240 2 1016 +345044244 2 1016 +345044248 2 1016 +345044252 2 1016 +345044256 2 1016 +345044260 2 1016 +345044264 2 1016 +345044268 2 1016 +345044272 2 1016 +345044276 2 1016 +345044280 2 1016 +345044284 2 1016 +345044288 2 1016 +345044292 2 1016 +345044296 2 1016 +345044300 2 1016 +345044304 2 1016 +345044308 2 1016 +345044312 2 1016 +345044316 2 1016 +345044320 2 1016 +345044324 2 1016 +345044328 2 1016 +345044332 2 1016 +345044336 2 1016 +345044340 2 1016 +345044344 2 1016 +345044348 2 1016 +345044352 2 1016 +345044356 2 1016 +345044360 2 1016 +345044364 2 1016 +345044368 2 1016 +345044372 2 1016 +345044376 2 1016 +345044380 2 1016 +345044384 2 1016 +345044388 2 1016 +345044392 2 1016 +345044396 2 1016 +345044400 2 1016 +345044404 2 1016 +345044408 2 1016 +345044412 2 1016 +345044416 2 1016 +345044420 2 1016 +345044424 2 1016 +345044428 2 1016 +345044432 2 1016 +345044436 2 1016 +345044440 2 1016 +345044444 2 1016 +345044448 2 1016 +345044452 2 1016 +345044456 2 1016 +345044460 2 1016 +345044464 2 1016 +345044468 2 1016 +345044472 2 1016 +345044476 2 1016 +345044480 2 1016 +345044484 2 1016 +345044488 2 1016 +345044492 2 1016 +345044496 2 1016 +345044500 2 1016 +345044504 2 1016 +345044508 2 1016 +345044512 2 1016 +345044516 2 1016 +345044520 2 1016 +345044524 2 1016 +345044528 2 1016 +345044532 2 1016 +345044536 2 1016 +345044540 2 1016 +345044544 2 1016 +345044548 2 1016 +345044552 2 1016 +345044556 2 1016 +345044560 2 1016 +345044564 2 1016 +345044568 2 1016 +345044572 2 1016 +345044576 2 1016 +345044580 2 1016 +345044584 2 1016 +345044588 2 1016 +345044592 2 1016 +345044596 2 1016 +345044600 2 1016 +345044604 2 1016 +345044608 2 1016 +345248772 32 960 +345248776 2 960 +345248780 32 960 +345248784 2 960 +345248788 32 960 +345248792 2 960 +345248796 32 960 +345248800 2 960 +345248804 32 960 +345248808 2 960 +345248812 32 960 +345248816 2 960 +345248820 32 960 +345248824 2 960 +345248828 32 960 +345248832 2 960 +345248836 32 960 +345248840 2 960 +345248844 32 960 +345248848 2 960 +345248852 32 960 +345248856 2 960 +345248860 32 960 +345248864 2 960 +345248868 32 960 +345248872 2 960 +345248876 32 960 +345248880 2 960 +345248884 32 960 +345248888 2 960 +345248892 32 960 +345248896 2 960 +345248900 32 960 +345248904 2 960 +345248908 32 960 +345248912 2 960 +345248916 32 960 +345248920 2 960 +345248924 32 960 +345248928 2 960 +345252868 32 960 +345252872 2 960 +345252876 32 960 +345252880 2 960 +345252884 32 960 +345252888 2 960 +345252892 32 960 +345252896 2 960 +345252900 32 960 +345252904 2 960 +345252908 32 960 +345252912 2 960 +345252916 32 960 +345252920 2 960 +345252924 32 960 +345252928 2 960 +345252932 32 960 +345252936 2 960 +345252940 32 960 +345252944 2 960 +345252948 32 960 +345252952 2 960 +345252956 32 960 +345252960 2 960 +345252964 32 960 +345252968 2 960 +345252972 32 960 +345252976 2 960 +345252980 32 960 +345252984 2 960 +345252988 32 960 +345252992 2 960 +345252996 32 960 +345253000 2 960 +345253004 32 960 +345253008 2 960 +345253012 32 960 +345253016 2 960 +345253020 32 960 +345253024 2 960 +345253028 32 960 +345253032 2 960 +345253036 32 960 +345253040 2 960 +345253044 32 960 +345253048 2 960 +345253052 32 960 +345253056 2 960 +345256964 32 960 +345256968 2 960 +345256972 32 960 +345256976 2 960 +345256980 32 960 +345256984 2 960 +345256988 32 960 +345256992 2 960 +345256996 32 960 +345257000 2 960 +345257004 32 960 +345257008 2 960 +345257012 32 960 +345257016 2 960 +345257020 32 960 +345257024 2 960 +345257028 32 960 +345257032 2 960 +345257036 32 960 +345257040 2 960 +345257044 32 960 +345257048 2 960 +345257052 32 960 +345257056 2 960 +345257060 32 960 +345257064 2 960 +345257068 32 960 +345257072 2 960 +345257076 32 960 +345257080 2 960 +345257084 32 960 +345257088 2 960 +345257092 32 960 +345257096 2 960 +345257100 32 960 +345257104 2 960 +345257108 32 960 +345257112 2 960 +345257116 32 960 +345257120 2 960 +345257124 32 960 +345257128 2 960 +345257132 32 960 +345257136 2 960 +345257140 32 960 +345257144 2 960 +345257148 32 960 +345257152 2 960 +345257156 32 960 +345257160 2 960 +345257164 32 960 +345257168 2 960 +345257172 32 960 +345257176 2 960 +345257180 32 960 +345257184 2 960 +345261060 32 960 +345261064 2 960 +345261068 32 960 +345261072 2 960 +345261076 32 960 +345261080 2 960 +345261084 32 960 +345261088 2 960 +345261092 32 960 +345261096 2 960 +345261100 32 960 +345261104 2 960 +345261108 32 960 +345261112 2 960 +345261116 32 960 +345261120 2 960 +345261124 32 960 +345261128 2 960 +345261132 32 960 +345261136 2 960 +345261140 32 960 +345261144 2 960 +345261148 32 960 +345261152 2 960 +345261156 32 960 +345261160 2 960 +345261164 32 960 +345261168 2 960 +345261172 32 960 +345261176 2 960 +345261180 32 960 +345261184 2 960 +345261188 32 960 +345261192 2 960 +345261196 32 960 +345261200 2 960 +345261204 32 960 +345261208 2 960 +345261212 32 960 +345261216 2 960 +345261220 32 960 +345261224 2 960 +345261228 32 960 +345261232 2 960 +345261236 32 960 +345261240 2 960 +345261244 32 960 +345261248 2 960 +345261252 32 960 +345261256 2 960 +345261260 32 960 +345261264 2 960 +345261268 32 960 +345261272 2 960 +345261276 32 960 +345261280 2 960 +345265156 32 960 +345265160 2 960 +345265164 32 960 +345265168 2 960 +345265172 32 960 +345265176 2 960 +345265180 32 960 +345265184 2 960 +345265188 32 960 +345265192 2 960 +345265196 32 960 +345265200 2 960 +345265204 32 960 +345265208 2 960 +345265212 32 960 +345265216 2 960 +345265220 32 960 +345265224 2 960 +345265228 32 960 +345265232 2 960 +345265236 32 960 +345265240 2 960 +345265244 32 960 +345265248 2 960 +345265252 32 960 +345265256 2 960 +345265260 32 960 +345265264 2 960 +345265268 32 960 +345265272 2 960 +345265276 32 960 +345265280 2 960 +345265284 32 960 +345265288 2 960 +345265292 32 960 +345265296 2 960 +345265300 32 960 +345265304 2 960 +345265308 32 960 +345265312 2 960 +345265316 32 960 +345265320 2 960 +345265324 32 960 +345265328 2 960 +345265332 32 960 +345265336 2 960 +345265340 32 960 +345265344 2 960 +345265348 32 960 +345265352 2 960 +345265356 32 960 +345265360 2 960 +345265364 32 960 +345265368 2 960 +345265372 32 960 +345265376 2 960 +345265380 32 960 +345265384 2 960 +345265388 32 960 +345265392 2 960 +345265396 32 960 +345265400 2 960 +345265404 32 960 +345265408 2 960 +345269252 32 960 +345269256 2 960 +345269260 32 960 +345269264 2 960 +345269268 32 960 +345269272 2 960 +345269276 32 960 +345269280 2 960 +345269284 32 960 +345269288 2 960 +345269292 32 960 +345269296 2 960 +345269300 32 960 +345269304 2 960 +345269308 32 960 +345269312 2 960 +345269316 32 960 +345269320 2 960 +345269324 32 960 +345269328 2 960 +345269332 32 960 +345269336 2 960 +345269340 32 960 +345269344 2 960 +345269348 32 960 +345269352 2 960 +345269356 32 960 +345269360 2 960 +345269364 32 960 +345269368 2 960 +345269372 32 960 +345269376 2 960 +345269380 32 960 +345269384 2 960 +345269388 32 960 +345269392 2 960 +345269396 32 960 +345269400 2 960 +345269404 32 960 +345269408 2 960 +345269412 32 960 +345269416 2 960 +345269420 32 960 +345269424 2 960 +345269428 32 960 +345269432 2 960 +345269436 32 960 +345269440 2 960 +345269444 32 960 +345269448 2 960 +345269452 32 960 +345269456 2 960 +345269460 32 960 +345269464 2 960 +345269468 32 960 +345269472 2 960 +345269476 32 960 +345269480 2 960 +345269484 32 960 +345269488 2 960 +345269492 32 960 +345269496 2 960 +345269500 32 960 +345269504 2 960 +345269508 32 960 +345269512 2 960 +345269516 32 960 +345269520 2 960 +345269524 32 960 +345269528 2 960 +345269532 32 960 +345269536 2 960 +345273348 32 960 +345273352 2 960 +345273356 32 960 +345273360 2 960 +345273364 32 960 +345273368 2 960 +345273372 32 960 +345273376 2 960 +345273380 32 960 +345273384 2 960 +345273388 32 960 +345273392 2 960 +345273396 32 960 +345273400 2 960 +345273404 32 960 +345273408 2 960 +345273412 32 960 +345273416 2 960 +345273420 32 960 +345273424 2 960 +345273428 32 960 +345273432 2 960 +345273436 32 960 +345273440 2 960 +345273444 32 960 +345273448 2 960 +345273452 32 960 +345273456 2 960 +345273460 32 960 +345273464 2 960 +345273468 32 960 +345273472 2 960 +345273476 32 960 +345273480 2 960 +345273484 32 960 +345273488 2 960 +345273492 32 960 +345273496 2 960 +345273500 32 960 +345273504 2 960 +345273508 32 960 +345273512 2 960 +345273516 32 960 +345273520 2 960 +345273524 32 960 +345273528 2 960 +345273532 32 960 +345273536 2 960 +345273540 32 960 +345273544 2 960 +345273548 32 960 +345273552 2 960 +345273556 32 960 +345273560 2 960 +345273564 32 960 +345273568 2 960 +345273572 32 960 +345273576 2 960 +345273580 32 960 +345273584 2 960 +345273588 32 960 +345273592 2 960 +345273596 32 960 +345273600 2 960 +345273604 32 960 +345273608 2 960 +345273612 32 960 +345273616 2 960 +345273620 32 960 +345273624 2 960 +345273628 32 960 +345273632 2 960 +345277444 32 960 +345277448 2 960 +345277452 32 960 +345277456 2 960 +345277460 32 960 +345277464 2 960 +345277468 32 960 +345277472 2 960 +345277476 32 960 +345277480 2 960 +345277484 32 960 +345277488 2 960 +345277492 32 960 +345277496 2 960 +345277500 32 960 +345277504 2 960 +345277508 32 960 +345277512 2 960 +345277516 32 960 +345277520 2 960 +345277524 32 960 +345277528 2 960 +345277532 32 960 +345277536 2 960 +345277540 32 960 +345277544 2 960 +345277548 32 960 +345277552 2 960 +345277556 32 960 +345277560 2 960 +345277564 32 960 +345277568 2 960 +345277572 32 960 +345277576 2 960 +345277580 32 960 +345277584 2 960 +345277588 32 960 +345277592 2 960 +345277596 32 960 +345277600 2 960 +345277604 32 960 +345277608 2 960 +345277612 32 960 +345277616 2 960 +345277620 32 960 +345277624 2 960 +345277628 32 960 +345277632 2 960 +345277636 32 960 +345277640 2 960 +345277644 32 960 +345277648 2 960 +345277652 32 960 +345277656 2 960 +345277660 32 960 +345277664 2 960 +345277668 32 960 +345277672 2 960 +345277676 32 960 +345277680 2 960 +345277684 32 960 +345277688 2 960 +345277692 32 960 +345277696 2 960 +345277700 32 960 +345277704 2 960 +345277708 32 960 +345277712 2 960 +345277716 32 960 +345277720 2 960 +345277724 32 960 +345277728 2 960 +345277732 32 960 +345277736 2 960 +345277740 32 960 +345277744 2 960 +345277748 32 960 +345277752 2 960 +345277756 32 960 +345277760 2 960 +345281540 32 960 +345281544 2 960 +345281548 32 960 +345281552 2 960 +345281556 32 960 +345281560 2 960 +345281564 32 960 +345281568 2 960 +345281572 32 960 +345281576 2 960 +345281580 32 960 +345281584 2 960 +345281588 32 960 +345281592 2 960 +345281596 32 960 +345281600 2 960 +345281604 32 960 +345281608 2 960 +345281612 32 960 +345281616 2 960 +345281620 32 960 +345281624 2 960 +345281628 32 960 +345281632 2 960 +345281636 32 960 +345281640 2 960 +345281644 32 960 +345281648 2 960 +345281652 32 960 +345281656 2 960 +345281660 32 960 +345281664 2 960 +345281668 32 960 +345281672 2 960 +345281676 32 960 +345281680 2 960 +345281684 32 960 +345281688 2 960 +345281692 32 960 +345281696 2 960 +345281700 32 960 +345281704 2 960 +345281708 32 960 +345281712 2 960 +345281716 32 960 +345281720 2 960 +345281724 32 960 +345281728 2 960 +345281732 32 960 +345281736 2 960 +345281740 32 960 +345281744 2 960 +345281748 32 960 +345281752 2 960 +345281756 32 960 +345281760 2 960 +345281764 32 960 +345281768 2 960 +345281772 32 960 +345281776 2 960 +345281780 32 960 +345281784 2 960 +345281788 32 960 +345281792 2 960 +345281796 32 960 +345281800 2 960 +345281804 32 960 +345281808 2 960 +345281812 32 960 +345281816 2 960 +345281820 32 960 +345281824 2 960 +345281828 32 960 +345281832 2 960 +345281836 32 960 +345281840 2 960 +345281844 32 960 +345281848 2 960 +345281852 32 960 +345281856 2 960 +345285636 2 1016 +345285640 2 1016 +345285644 2 1016 +345285648 2 1016 +345285652 2 1016 +345285656 2 1016 +345285660 2 1016 +345285664 2 1016 +345285668 2 1016 +345285672 2 1016 +345285676 2 1016 +345285680 2 1016 +345285684 2 1016 +345285688 2 1016 +345285692 2 1016 +345285696 2 1016 +345285700 2 1016 +345285704 2 1016 +345285708 2 1016 +345285712 2 1016 +345285716 2 1016 +345285720 2 1016 +345285724 2 1016 +345285728 2 1016 +345285732 2 1016 +345285736 2 1016 +345285740 2 1016 +345285744 2 1016 +345285748 2 1016 +345285752 2 1016 +345285756 2 1016 +345285760 2 1016 +345285764 2 1016 +345285768 2 1016 +345285772 2 1016 +345285776 2 1016 +345285780 2 1016 +345285784 2 1016 +345285788 2 1016 +345285792 2 1016 +345285796 2 1016 +345285800 2 1016 +345285804 2 1016 +345285808 2 1016 +345285812 2 1016 +345285816 2 1016 +345285820 2 1016 +345285824 2 1016 +345285828 2 1016 +345285832 2 1016 +345285836 2 1016 +345285840 2 1016 +345285844 2 1016 +345285848 2 1016 +345285852 2 1016 +345285856 2 1016 +345285860 2 1016 +345285864 2 1016 +345285868 2 1016 +345285872 2 1016 +345285876 2 1016 +345285880 2 1016 +345285884 2 1016 +345285888 2 1016 +345285892 2 1016 +345285896 2 1016 +345285900 2 1016 +345285904 2 1016 +345285908 2 1016 +345285912 2 1016 +345285916 2 1016 +345285920 2 1016 +345285924 2 1016 +345285928 2 1016 +345285932 2 1016 +345285936 2 1016 +345285940 2 1016 +345285944 2 1016 +345285948 2 1016 +345285952 2 1016 +345285956 2 1016 +345285960 2 1016 +345285964 2 1016 +345285968 2 1016 +345285972 2 1016 +345285976 2 1016 +345285980 2 1016 +345285984 2 1016 +345285988 2 1016 +345285992 2 1016 +345285996 2 1016 +345286000 2 1016 +345286004 2 1016 +345286008 2 1016 +345286012 2 1016 +345286016 2 1016 +345286020 2 1016 +345286024 2 1016 +345286028 2 1016 +345286032 2 1016 +345286036 2 1016 +345286040 2 1016 +345286044 2 1016 +345286048 2 1016 +345289732 2 1016 +345289736 2 1016 +345289740 2 1016 +345289744 2 1016 +345289748 2 1016 +345289752 2 1016 +345289756 2 1016 +345289760 2 1016 +345289764 2 1016 +345289768 2 1016 +345289772 2 1016 +345289776 2 1016 +345289780 2 1016 +345289784 2 1016 +345289788 2 1016 +345289792 2 1016 +345289796 2 1016 +345289800 2 1016 +345289804 2 1016 +345289808 2 1016 +345289812 2 1016 +345289816 2 1016 +345289820 2 1016 +345289824 2 1016 +345289828 2 1016 +345289832 2 1016 +345289836 2 1016 +345289840 2 1016 +345289844 2 1016 +345289848 2 1016 +345289852 2 1016 +345289856 2 1016 +345289860 2 1016 +345289864 2 1016 +345289868 2 1016 +345289872 2 1016 +345289876 2 1016 +345289880 2 1016 +345289884 2 1016 +345289888 2 1016 +345289892 2 1016 +345289896 2 1016 +345289900 2 1016 +345289904 2 1016 +345289908 2 1016 +345289912 2 1016 +345289916 2 1016 +345289920 2 1016 +345289924 2 1016 +345289928 2 1016 +345289932 2 1016 +345289936 2 1016 +345289940 2 1016 +345289944 2 1016 +345289948 2 1016 +345289952 2 1016 +345289956 2 1016 +345289960 2 1016 +345289964 2 1016 +345289968 2 1016 +345289972 2 1016 +345289976 2 1016 +345289980 2 1016 +345289984 2 1016 +345289988 2 1016 +345289992 2 1016 +345289996 2 1016 +345290000 2 1016 +345290004 2 1016 +345290008 2 1016 +345290012 2 1016 +345290016 2 1016 +345290020 2 1016 +345290024 2 1016 +345290028 2 1016 +345290032 2 1016 +345290036 2 1016 +345290040 2 1016 +345290044 2 1016 +345290048 2 1016 +345290052 2 1016 +345290056 2 1016 +345290060 2 1016 +345290064 2 1016 +345290068 2 1016 +345290072 2 1016 +345290076 2 1016 +345290080 2 1016 +345290084 2 1016 +345290088 2 1016 +345290092 2 1016 +345290096 2 1016 +345290100 2 1016 +345290104 2 1016 +345290108 2 1016 +345290112 2 1016 +345290116 2 1016 +345290120 2 1016 +345290124 2 1016 +345290128 2 1016 +345290132 2 1016 +345290136 2 1016 +345290140 2 1016 +345290144 2 1016 +345290148 2 1016 +345290152 2 1016 +345290156 2 1016 +345290160 2 1016 +345290164 2 1016 +345290168 2 1016 +345290172 2 1016 +345290176 2 1016 +345293828 2 1016 +345293832 2 1016 +345293836 2 1016 +345293840 2 1016 +345293844 2 1016 +345293848 2 1016 +345293852 2 1016 +345293856 2 1016 +345293860 2 1016 +345293864 2 1016 +345293868 2 1016 +345293872 2 1016 +345293876 2 1016 +345293880 2 1016 +345293884 2 1016 +345293888 2 1016 +345293892 2 1016 +345293896 2 1016 +345293900 2 1016 +345293904 2 1016 +345293908 2 1016 +345293912 2 1016 +345293916 2 1016 +345293920 2 1016 +345293924 2 1016 +345293928 2 1016 +345293932 2 1016 +345293936 2 1016 +345293940 2 1016 +345293944 2 1016 +345293948 2 1016 +345293952 2 1016 +345293956 2 1016 +345293960 2 1016 +345293964 2 1016 +345293968 2 1016 +345293972 2 1016 +345293976 2 1016 +345293980 2 1016 +345293984 2 1016 +345293988 2 1016 +345293992 2 1016 +345293996 2 1016 +345294000 2 1016 +345294004 2 1016 +345294008 2 1016 +345294012 2 1016 +345294016 2 1016 +345294020 2 1016 +345294024 2 1016 +345294028 2 1016 +345294032 2 1016 +345294036 2 1016 +345294040 2 1016 +345294044 2 1016 +345294048 2 1016 +345294052 2 1016 +345294056 2 1016 +345294060 2 1016 +345294064 2 1016 +345294068 2 1016 +345294072 2 1016 +345294076 2 1016 +345294080 2 1016 +345294084 2 1016 +345294088 2 1016 +345294092 2 1016 +345294096 2 1016 +345294100 2 1016 +345294104 2 1016 +345294108 2 1016 +345294112 2 1016 +345294116 2 1016 +345294120 2 1016 +345294124 2 1016 +345294128 2 1016 +345294132 2 1016 +345294136 2 1016 +345294140 2 1016 +345294144 2 1016 +345294148 2 1016 +345294152 2 1016 +345294156 2 1016 +345294160 2 1016 +345294164 2 1016 +345294168 2 1016 +345294172 2 1016 +345294176 2 1016 +345294180 2 1016 +345294184 2 1016 +345294188 2 1016 +345294192 2 1016 +345294196 2 1016 +345294200 2 1016 +345294204 2 1016 +345294208 2 1016 +345294212 2 1016 +345294216 2 1016 +345294220 2 1016 +345294224 2 1016 +345294228 2 1016 +345294232 2 1016 +345294236 2 1016 +345294240 2 1016 +345294244 2 1016 +345294248 2 1016 +345294252 2 1016 +345294256 2 1016 +345294260 2 1016 +345294264 2 1016 +345294268 2 1016 +345294272 2 1016 +345294276 2 1016 +345294280 2 1016 +345294284 2 1016 +345294288 2 1016 +345294292 2 1016 +345294296 2 1016 +345294300 2 1016 +345294304 2 1016 +345294308 2 1016 +345294312 2 1016 +345294316 2 1016 +345294320 2 1016 +345294324 2 1016 +345294328 2 1016 +345294332 2 1016 +345294336 2 1016 +345297924 2 1016 +345297928 2 1016 +345297932 2 1016 +345297936 2 1016 +345297940 2 1016 +345297944 2 1016 +345297948 2 1016 +345297952 2 1016 +345297956 2 1016 +345297960 2 1016 +345297964 2 1016 +345297968 2 1016 +345297972 2 1016 +345297976 2 1016 +345297980 2 1016 +345297984 2 1016 +345297988 2 1016 +345297992 2 1016 +345297996 2 1016 +345298000 2 1016 +345298004 2 1016 +345298008 2 1016 +345298012 2 1016 +345298016 2 1016 +345298020 2 1016 +345298024 2 1016 +345298028 2 1016 +345298032 2 1016 +345298036 2 1016 +345298040 2 1016 +345298044 2 1016 +345298048 2 1016 +345298052 2 1016 +345298056 2 1016 +345298060 2 1016 +345298064 2 1016 +345298068 2 1016 +345298072 2 1016 +345298076 2 1016 +345298080 2 1016 +345298084 2 1016 +345298088 2 1016 +345298092 2 1016 +345298096 2 1016 +345298100 2 1016 +345298104 2 1016 +345298108 2 1016 +345298112 2 1016 +345298116 2 1016 +345298120 2 1016 +345298124 2 1016 +345298128 2 1016 +345298132 2 1016 +345298136 2 1016 +345298140 2 1016 +345298144 2 1016 +345298148 2 1016 +345298152 2 1016 +345298156 2 1016 +345298160 2 1016 +345298164 2 1016 +345298168 2 1016 +345298172 2 1016 +345298176 2 1016 +345298180 2 1016 +345298184 2 1016 +345298188 2 1016 +345298192 2 1016 +345298196 2 1016 +345298200 2 1016 +345298204 2 1016 +345298208 2 1016 +345298212 2 1016 +345298216 2 1016 +345298220 2 1016 +345298224 2 1016 +345298228 2 1016 +345298232 2 1016 +345298236 2 1016 +345298240 2 1016 +345298244 2 1016 +345298248 2 1016 +345298252 2 1016 +345298256 2 1016 +345298260 2 1016 +345298264 2 1016 +345298268 2 1016 +345298272 2 1016 +345298276 2 1016 +345298280 2 1016 +345298284 2 1016 +345298288 2 1016 +345298292 2 1016 +345298296 2 1016 +345298300 2 1016 +345298304 2 1016 +345298308 2 1016 +345298312 2 1016 +345298316 2 1016 +345298320 2 1016 +345298324 2 1016 +345298328 2 1016 +345298332 2 1016 +345298336 2 1016 +345298340 2 1016 +345298344 2 1016 +345298348 2 1016 +345298352 2 1016 +345298356 2 1016 +345298360 2 1016 +345298364 2 1016 +345298368 2 1016 +345298372 2 1016 +345298376 2 1016 +345298380 2 1016 +345298384 2 1016 +345298388 2 1016 +345298392 2 1016 +345298396 2 1016 +345298400 2 1016 +345298404 2 1016 +345298408 2 1016 +345298412 2 1016 +345298416 2 1016 +345298420 2 1016 +345298424 2 1016 +345298428 2 1016 +345298432 2 1016 +345298436 2 1016 +345298440 2 1016 +345298444 2 1016 +345298448 2 1016 +345298452 2 1016 +345298456 2 1016 +345298460 2 1016 +345298464 2 1016 +345302020 2 1016 +345302024 2 1016 +345302028 2 1016 +345302032 2 1016 +345302036 2 1016 +345302040 2 1016 +345302044 2 1016 +345302048 2 1016 +345302052 2 1016 +345302056 2 1016 +345302060 2 1016 +345302064 2 1016 +345302068 2 1016 +345302072 2 1016 +345302076 2 1016 +345302080 2 1016 +345302084 2 1016 +345302088 2 1016 +345302092 2 1016 +345302096 2 1016 +345302100 2 1016 +345302104 2 1016 +345302108 2 1016 +345302112 2 1016 +345302116 2 1016 +345302120 2 1016 +345302124 2 1016 +345302128 2 1016 +345302132 2 1016 +345302136 2 1016 +345302140 2 1016 +345302144 2 1016 +345302148 2 1016 +345302152 2 1016 +345302156 2 1016 +345302160 2 1016 +345302164 2 1016 +345302168 2 1016 +345302172 2 1016 +345302176 2 1016 +345302180 2 1016 +345302184 2 1016 +345302188 2 1016 +345302192 2 1016 +345302196 2 1016 +345302200 2 1016 +345302204 2 1016 +345302208 2 1016 +345302212 2 1016 +345302216 2 1016 +345302220 2 1016 +345302224 2 1016 +345302228 2 1016 +345302232 2 1016 +345302236 2 1016 +345302240 2 1016 +345302244 2 1016 +345302248 2 1016 +345302252 2 1016 +345302256 2 1016 +345302260 2 1016 +345302264 2 1016 +345302268 2 1016 +345302272 2 1016 +345302276 2 1016 +345302280 2 1016 +345302284 2 1016 +345302288 2 1016 +345302292 2 1016 +345302296 2 1016 +345302300 2 1016 +345302304 2 1016 +345302308 2 1016 +345302312 2 1016 +345302316 2 1016 +345302320 2 1016 +345302324 2 1016 +345302328 2 1016 +345302332 2 1016 +345302336 2 1016 +345302340 2 1016 +345302344 2 1016 +345302348 2 1016 +345302352 2 1016 +345302356 2 1016 +345302360 2 1016 +345302364 2 1016 +345302368 2 1016 +345302372 2 1016 +345302376 2 1016 +345302380 2 1016 +345302384 2 1016 +345302388 2 1016 +345302392 2 1016 +345302396 2 1016 +345302400 2 1016 +345302404 2 1016 +345302408 2 1016 +345302412 2 1016 +345302416 2 1016 +345302420 2 1016 +345302424 2 1016 +345302428 2 1016 +345302432 2 1016 +345302436 2 1016 +345302440 2 1016 +345302444 2 1016 +345302448 2 1016 +345302452 2 1016 +345302456 2 1016 +345302460 2 1016 +345302464 2 1016 +345302468 2 1016 +345302472 2 1016 +345302476 2 1016 +345302480 2 1016 +345302484 2 1016 +345302488 2 1016 +345302492 2 1016 +345302496 2 1016 +345302500 2 1016 +345302504 2 1016 +345302508 2 1016 +345302512 2 1016 +345302516 2 1016 +345302520 2 1016 +345302524 2 1016 +345302528 2 1016 +345302532 2 1016 +345302536 2 1016 +345302540 2 1016 +345302544 2 1016 +345302548 2 1016 +345302552 2 1016 +345302556 2 1016 +345302560 2 1016 +345302564 2 1016 +345302568 2 1016 +345302572 2 1016 +345302576 2 1016 +345302580 2 1016 +345302584 2 1016 +345302588 2 1016 +345302592 2 1016 +345302596 2 1016 +345302600 2 1016 +345302604 2 1016 +345302608 2 1016 +345302612 2 1016 +345302616 2 1016 +345302620 2 1016 +345302624 2 1016 +345306116 2 1016 +345306120 2 1016 +345306124 2 1016 +345306128 2 1016 +345306132 2 1016 +345306136 2 1016 +345306140 2 1016 +345306144 2 1016 +345306148 2 1016 +345306152 2 1016 +345306156 2 1016 +345306160 2 1016 +345306164 2 1016 +345306168 2 1016 +345306172 2 1016 +345306176 2 1016 +345306180 2 1016 +345306184 2 1016 +345306188 2 1016 +345306192 2 1016 +345306196 2 1016 +345306200 2 1016 +345306204 2 1016 +345306208 2 1016 +345306212 2 1016 +345306216 2 1016 +345306220 2 1016 +345306224 2 1016 +345306228 2 1016 +345306232 2 1016 +345306236 2 1016 +345306240 2 1016 +345306244 2 1016 +345306248 2 1016 +345306252 2 1016 +345306256 2 1016 +345306260 2 1016 +345306264 2 1016 +345306268 2 1016 +345306272 2 1016 +345306276 2 1016 +345306280 2 1016 +345306284 2 1016 +345306288 2 1016 +345306292 2 1016 +345306296 2 1016 +345306300 2 1016 +345306304 2 1016 +345306308 2 1016 +345306312 2 1016 +345306316 2 1016 +345306320 2 1016 +345306324 2 1016 +345306328 2 1016 +345306332 2 1016 +345306336 2 1016 +345306340 2 1016 +345306344 2 1016 +345306348 2 1016 +345306352 2 1016 +345306356 2 1016 +345306360 2 1016 +345306364 2 1016 +345306368 2 1016 +345306372 2 1016 +345306376 2 1016 +345306380 2 1016 +345306384 2 1016 +345306388 2 1016 +345306392 2 1016 +345306396 2 1016 +345306400 2 1016 +345306404 2 1016 +345306408 2 1016 +345306412 2 1016 +345306416 2 1016 +345306420 2 1016 +345306424 2 1016 +345306428 2 1016 +345306432 2 1016 +345306436 2 1016 +345306440 2 1016 +345306444 2 1016 +345306448 2 1016 +345306452 2 1016 +345306456 2 1016 +345306460 2 1016 +345306464 2 1016 +345306468 2 1016 +345306472 2 1016 +345306476 2 1016 +345306480 2 1016 +345306484 2 1016 +345306488 2 1016 +345306492 2 1016 +345306496 2 1016 +345306500 2 1016 +345306504 2 1016 +345306508 2 1016 +345306512 2 1016 +345306516 2 1016 +345306520 2 1016 +345306524 2 1016 +345306528 2 1016 +345306532 2 1016 +345306536 2 1016 +345306540 2 1016 +345306544 2 1016 +345306548 2 1016 +345306552 2 1016 +345306556 2 1016 +345306560 2 1016 +345306564 2 1016 +345306568 2 1016 +345306572 2 1016 +345306576 2 1016 +345306580 2 1016 +345306584 2 1016 +345306588 2 1016 +345306592 2 1016 +345306596 2 1016 +345306600 2 1016 +345306604 2 1016 +345306608 2 1016 +345306612 2 1016 +345306616 2 1016 +345306620 2 1016 +345306624 2 1016 +345306628 2 1016 +345306632 2 1016 +345306636 2 1016 +345306640 2 1016 +345306644 2 1016 +345306648 2 1016 +345306652 2 1016 +345306656 2 1016 +345306660 2 1016 +345306664 2 1016 +345306668 2 1016 +345306672 2 1016 +345306676 2 1016 +345306680 2 1016 +345306684 2 1016 +345306688 2 1016 +345306692 2 1016 +345306696 2 1016 +345306700 2 1016 +345306704 2 1016 +345306708 2 1016 +345306712 2 1016 +345306716 2 1016 +345306720 2 1016 +345306724 2 1016 +345306728 2 1016 +345306732 2 1016 +345306736 2 1016 +345306740 2 1016 +345306744 2 1016 +345306748 2 1016 +345306752 2 1016 +345510916 32 960 +345510920 2 960 +345510924 32 960 +345510928 2 960 +345510932 32 960 +345510936 2 960 +345510940 32 960 +345510944 2 960 +345510948 32 960 +345510952 2 960 +345510956 32 960 +345510960 2 960 +345510964 32 960 +345510968 2 960 +345510972 32 960 +345510976 2 960 +345510980 32 960 +345510984 2 960 +345510988 32 960 +345510992 2 960 +345510996 32 960 +345511000 2 960 +345511004 32 960 +345511008 2 960 +345511012 32 960 +345511016 2 960 +345511020 32 960 +345511024 2 960 +345511028 32 960 +345511032 2 960 +345511036 32 960 +345511040 2 960 +345511044 32 960 +345511048 2 960 +345511052 32 960 +345511056 2 960 +345511060 32 960 +345511064 2 960 +345511068 32 960 +345511072 2 960 +345515012 32 960 +345515016 2 960 +345515020 32 960 +345515024 2 960 +345515028 32 960 +345515032 2 960 +345515036 32 960 +345515040 2 960 +345515044 32 960 +345515048 2 960 +345515052 32 960 +345515056 2 960 +345515060 32 960 +345515064 2 960 +345515068 32 960 +345515072 2 960 +345515076 32 960 +345515080 2 960 +345515084 32 960 +345515088 2 960 +345515092 32 960 +345515096 2 960 +345515100 32 960 +345515104 2 960 +345515108 32 960 +345515112 2 960 +345515116 32 960 +345515120 2 960 +345515124 32 960 +345515128 2 960 +345515132 32 960 +345515136 2 960 +345515140 32 960 +345515144 2 960 +345515148 32 960 +345515152 2 960 +345515156 32 960 +345515160 2 960 +345515164 32 960 +345515168 2 960 +345515172 32 960 +345515176 2 960 +345515180 32 960 +345515184 2 960 +345515188 32 960 +345515192 2 960 +345515196 32 960 +345515200 2 960 +345519108 32 960 +345519112 2 960 +345519116 32 960 +345519120 2 960 +345519124 32 960 +345519128 2 960 +345519132 32 960 +345519136 2 960 +345519140 32 960 +345519144 2 960 +345519148 32 960 +345519152 2 960 +345519156 32 960 +345519160 2 960 +345519164 32 960 +345519168 2 960 +345519172 32 960 +345519176 2 960 +345519180 32 960 +345519184 2 960 +345519188 32 960 +345519192 2 960 +345519196 32 960 +345519200 2 960 +345519204 32 960 +345519208 2 960 +345519212 32 960 +345519216 2 960 +345519220 32 960 +345519224 2 960 +345519228 32 960 +345519232 2 960 +345519236 32 960 +345519240 2 960 +345519244 32 960 +345519248 2 960 +345519252 32 960 +345519256 2 960 +345519260 32 960 +345519264 2 960 +345519268 32 960 +345519272 2 960 +345519276 32 960 +345519280 2 960 +345519284 32 960 +345519288 2 960 +345519292 32 960 +345519296 2 960 +345519300 32 960 +345519304 2 960 +345519308 32 960 +345519312 2 960 +345519316 32 960 +345519320 2 960 +345519324 32 960 +345519328 2 960 +345523204 32 960 +345523208 2 960 +345523212 32 960 +345523216 2 960 +345523220 32 960 +345523224 2 960 +345523228 32 960 +345523232 2 960 +345523236 32 960 +345523240 2 960 +345523244 32 960 +345523248 2 960 +345523252 32 960 +345523256 2 960 +345523260 32 960 +345523264 2 960 +345523268 32 960 +345523272 2 960 +345523276 32 960 +345523280 2 960 +345523284 32 960 +345523288 2 960 +345523292 32 960 +345523296 2 960 +345523300 32 960 +345523304 2 960 +345523308 32 960 +345523312 2 960 +345523316 32 960 +345523320 2 960 +345523324 32 960 +345523328 2 960 +345523332 32 960 +345523336 2 960 +345523340 32 960 +345523344 2 960 +345523348 32 960 +345523352 2 960 +345523356 32 960 +345523360 2 960 +345523364 32 960 +345523368 2 960 +345523372 32 960 +345523376 2 960 +345523380 32 960 +345523384 2 960 +345523388 32 960 +345523392 2 960 +345523396 32 960 +345523400 2 960 +345523404 32 960 +345523408 2 960 +345523412 32 960 +345523416 2 960 +345523420 32 960 +345523424 2 960 +345527300 32 960 +345527304 2 960 +345527308 32 960 +345527312 2 960 +345527316 32 960 +345527320 2 960 +345527324 32 960 +345527328 2 960 +345527332 32 960 +345527336 2 960 +345527340 32 960 +345527344 2 960 +345527348 32 960 +345527352 2 960 +345527356 32 960 +345527360 2 960 +345527364 32 960 +345527368 2 960 +345527372 32 960 +345527376 2 960 +345527380 32 960 +345527384 2 960 +345527388 32 960 +345527392 2 960 +345527396 32 960 +345527400 2 960 +345527404 32 960 +345527408 2 960 +345527412 32 960 +345527416 2 960 +345527420 32 960 +345527424 2 960 +345527428 32 960 +345527432 2 960 +345527436 32 960 +345527440 2 960 +345527444 32 960 +345527448 2 960 +345527452 32 960 +345527456 2 960 +345527460 32 960 +345527464 2 960 +345527468 32 960 +345527472 2 960 +345527476 32 960 +345527480 2 960 +345527484 32 960 +345527488 2 960 +345527492 32 960 +345527496 2 960 +345527500 32 960 +345527504 2 960 +345527508 32 960 +345527512 2 960 +345527516 32 960 +345527520 2 960 +345527524 32 960 +345527528 2 960 +345527532 32 960 +345527536 2 960 +345527540 32 960 +345527544 2 960 +345527548 32 960 +345527552 2 960 +345531396 32 960 +345531400 2 960 +345531404 32 960 +345531408 2 960 +345531412 32 960 +345531416 2 960 +345531420 32 960 +345531424 2 960 +345531428 32 960 +345531432 2 960 +345531436 32 960 +345531440 2 960 +345531444 32 960 +345531448 2 960 +345531452 32 960 +345531456 2 960 +345531460 32 960 +345531464 2 960 +345531468 32 960 +345531472 2 960 +345531476 32 960 +345531480 2 960 +345531484 32 960 +345531488 2 960 +345531492 32 960 +345531496 2 960 +345531500 32 960 +345531504 2 960 +345531508 32 960 +345531512 2 960 +345531516 32 960 +345531520 2 960 +345531524 32 960 +345531528 2 960 +345531532 32 960 +345531536 2 960 +345531540 32 960 +345531544 2 960 +345531548 32 960 +345531552 2 960 +345531556 32 960 +345531560 2 960 +345531564 32 960 +345531568 2 960 +345531572 32 960 +345531576 2 960 +345531580 32 960 +345531584 2 960 +345531588 32 960 +345531592 2 960 +345531596 32 960 +345531600 2 960 +345531604 32 960 +345531608 2 960 +345531612 32 960 +345531616 2 960 +345531620 32 960 +345531624 2 960 +345531628 32 960 +345531632 2 960 +345531636 32 960 +345531640 2 960 +345531644 32 960 +345531648 2 960 +345531652 32 960 +345531656 2 960 +345531660 32 960 +345531664 2 960 +345531668 32 960 +345531672 2 960 +345531676 32 960 +345531680 2 960 +345535492 32 960 +345535496 2 960 +345535500 32 960 +345535504 2 960 +345535508 32 960 +345535512 2 960 +345535516 32 960 +345535520 2 960 +345535524 32 960 +345535528 2 960 +345535532 32 960 +345535536 2 960 +345535540 32 960 +345535544 2 960 +345535548 32 960 +345535552 2 960 +345535556 32 960 +345535560 2 960 +345535564 32 960 +345535568 2 960 +345535572 32 960 +345535576 2 960 +345535580 32 960 +345535584 2 960 +345535588 32 960 +345535592 2 960 +345535596 32 960 +345535600 2 960 +345535604 32 960 +345535608 2 960 +345535612 32 960 +345535616 2 960 +345535620 32 960 +345535624 2 960 +345535628 32 960 +345535632 2 960 +345535636 32 960 +345535640 2 960 +345535644 32 960 +345535648 2 960 +345535652 32 960 +345535656 2 960 +345535660 32 960 +345535664 2 960 +345535668 32 960 +345535672 2 960 +345535676 32 960 +345535680 2 960 +345535684 32 960 +345535688 2 960 +345535692 32 960 +345535696 2 960 +345535700 32 960 +345535704 2 960 +345535708 32 960 +345535712 2 960 +345535716 32 960 +345535720 2 960 +345535724 32 960 +345535728 2 960 +345535732 32 960 +345535736 2 960 +345535740 32 960 +345535744 2 960 +345535748 32 960 +345535752 2 960 +345535756 32 960 +345535760 2 960 +345535764 32 960 +345535768 2 960 +345535772 32 960 +345535776 2 960 +345539588 32 960 +345539592 2 960 +345539596 32 960 +345539600 2 960 +345539604 32 960 +345539608 2 960 +345539612 32 960 +345539616 2 960 +345539620 32 960 +345539624 2 960 +345539628 32 960 +345539632 2 960 +345539636 32 960 +345539640 2 960 +345539644 32 960 +345539648 2 960 +345539652 32 960 +345539656 2 960 +345539660 32 960 +345539664 2 960 +345539668 32 960 +345539672 2 960 +345539676 32 960 +345539680 2 960 +345539684 32 960 +345539688 2 960 +345539692 32 960 +345539696 2 960 +345539700 32 960 +345539704 2 960 +345539708 32 960 +345539712 2 960 +345539716 32 960 +345539720 2 960 +345539724 32 960 +345539728 2 960 +345539732 32 960 +345539736 2 960 +345539740 32 960 +345539744 2 960 +345539748 32 960 +345539752 2 960 +345539756 32 960 +345539760 2 960 +345539764 32 960 +345539768 2 960 +345539772 32 960 +345539776 2 960 +345539780 32 960 +345539784 2 960 +345539788 32 960 +345539792 2 960 +345539796 32 960 +345539800 2 960 +345539804 32 960 +345539808 2 960 +345539812 32 960 +345539816 2 960 +345539820 32 960 +345539824 2 960 +345539828 32 960 +345539832 2 960 +345539836 32 960 +345539840 2 960 +345539844 32 960 +345539848 2 960 +345539852 32 960 +345539856 2 960 +345539860 32 960 +345539864 2 960 +345539868 32 960 +345539872 2 960 +345539876 32 960 +345539880 2 960 +345539884 32 960 +345539888 2 960 +345539892 32 960 +345539896 2 960 +345539900 32 960 +345539904 2 960 +345543684 32 960 +345543688 2 960 +345543692 32 960 +345543696 2 960 +345543700 32 960 +345543704 2 960 +345543708 32 960 +345543712 2 960 +345543716 32 960 +345543720 2 960 +345543724 32 960 +345543728 2 960 +345543732 32 960 +345543736 2 960 +345543740 32 960 +345543744 2 960 +345543748 32 960 +345543752 2 960 +345543756 32 960 +345543760 2 960 +345543764 32 960 +345543768 2 960 +345543772 32 960 +345543776 2 960 +345543780 32 960 +345543784 2 960 +345543788 32 960 +345543792 2 960 +345543796 32 960 +345543800 2 960 +345543804 32 960 +345543808 2 960 +345543812 32 960 +345543816 2 960 +345543820 32 960 +345543824 2 960 +345543828 32 960 +345543832 2 960 +345543836 32 960 +345543840 2 960 +345543844 32 960 +345543848 2 960 +345543852 32 960 +345543856 2 960 +345543860 32 960 +345543864 2 960 +345543868 32 960 +345543872 2 960 +345543876 32 960 +345543880 2 960 +345543884 32 960 +345543888 2 960 +345543892 32 960 +345543896 2 960 +345543900 32 960 +345543904 2 960 +345543908 32 960 +345543912 2 960 +345543916 32 960 +345543920 2 960 +345543924 32 960 +345543928 2 960 +345543932 32 960 +345543936 2 960 +345543940 32 960 +345543944 2 960 +345543948 32 960 +345543952 2 960 +345543956 32 960 +345543960 2 960 +345543964 32 960 +345543968 2 960 +345543972 32 960 +345543976 2 960 +345543980 32 960 +345543984 2 960 +345543988 32 960 +345543992 2 960 +345543996 32 960 +345544000 2 960 +345547780 2 1016 +345547784 2 1016 +345547788 2 1016 +345547792 2 1016 +345547796 2 1016 +345547800 2 1016 +345547804 2 1016 +345547808 2 1016 +345547812 2 1016 +345547816 2 1016 +345547820 2 1016 +345547824 2 1016 +345547828 2 1016 +345547832 2 1016 +345547836 2 1016 +345547840 2 1016 +345547844 2 1016 +345547848 2 1016 +345547852 2 1016 +345547856 2 1016 +345547860 2 1016 +345547864 2 1016 +345547868 2 1016 +345547872 2 1016 +345547876 2 1016 +345547880 2 1016 +345547884 2 1016 +345547888 2 1016 +345547892 2 1016 +345547896 2 1016 +345547900 2 1016 +345547904 2 1016 +345547908 2 1016 +345547912 2 1016 +345547916 2 1016 +345547920 2 1016 +345547924 2 1016 +345547928 2 1016 +345547932 2 1016 +345547936 2 1016 +345547940 2 1016 +345547944 2 1016 +345547948 2 1016 +345547952 2 1016 +345547956 2 1016 +345547960 2 1016 +345547964 2 1016 +345547968 2 1016 +345547972 2 1016 +345547976 2 1016 +345547980 2 1016 +345547984 2 1016 +345547988 2 1016 +345547992 2 1016 +345547996 2 1016 +345548000 2 1016 +345548004 2 1016 +345548008 2 1016 +345548012 2 1016 +345548016 2 1016 +345548020 2 1016 +345548024 2 1016 +345548028 2 1016 +345548032 2 1016 +345548036 2 1016 +345548040 2 1016 +345548044 2 1016 +345548048 2 1016 +345548052 2 1016 +345548056 2 1016 +345548060 2 1016 +345548064 2 1016 +345548068 2 1016 +345548072 2 1016 +345548076 2 1016 +345548080 2 1016 +345548084 2 1016 +345548088 2 1016 +345548092 2 1016 +345548096 2 1016 +345548100 2 1016 +345548104 2 1016 +345548108 2 1016 +345548112 2 1016 +345548116 2 1016 +345548120 2 1016 +345548124 2 1016 +345548128 2 1016 +345548132 2 1016 +345548136 2 1016 +345548140 2 1016 +345548144 2 1016 +345548148 2 1016 +345548152 2 1016 +345548156 2 1016 +345548160 2 1016 +345548164 2 1016 +345548168 2 1016 +345548172 2 1016 +345548176 2 1016 +345548180 2 1016 +345548184 2 1016 +345548188 2 1016 +345548192 2 1016 +345551876 2 1016 +345551880 2 1016 +345551884 2 1016 +345551888 2 1016 +345551892 2 1016 +345551896 2 1016 +345551900 2 1016 +345551904 2 1016 +345551908 2 1016 +345551912 2 1016 +345551916 2 1016 +345551920 2 1016 +345551924 2 1016 +345551928 2 1016 +345551932 2 1016 +345551936 2 1016 +345551940 2 1016 +345551944 2 1016 +345551948 2 1016 +345551952 2 1016 +345551956 2 1016 +345551960 2 1016 +345551964 2 1016 +345551968 2 1016 +345551972 2 1016 +345551976 2 1016 +345551980 2 1016 +345551984 2 1016 +345551988 2 1016 +345551992 2 1016 +345551996 2 1016 +345552000 2 1016 +345552004 2 1016 +345552008 2 1016 +345552012 2 1016 +345552016 2 1016 +345552020 2 1016 +345552024 2 1016 +345552028 2 1016 +345552032 2 1016 +345552036 2 1016 +345552040 2 1016 +345552044 2 1016 +345552048 2 1016 +345552052 2 1016 +345552056 2 1016 +345552060 2 1016 +345552064 2 1016 +345552068 2 1016 +345552072 2 1016 +345552076 2 1016 +345552080 2 1016 +345552084 2 1016 +345552088 2 1016 +345552092 2 1016 +345552096 2 1016 +345552100 2 1016 +345552104 2 1016 +345552108 2 1016 +345552112 2 1016 +345552116 2 1016 +345552120 2 1016 +345552124 2 1016 +345552128 2 1016 +345552132 2 1016 +345552136 2 1016 +345552140 2 1016 +345552144 2 1016 +345552148 2 1016 +345552152 2 1016 +345552156 2 1016 +345552160 2 1016 +345552164 2 1016 +345552168 2 1016 +345552172 2 1016 +345552176 2 1016 +345552180 2 1016 +345552184 2 1016 +345552188 2 1016 +345552192 2 1016 +345552196 2 1016 +345552200 2 1016 +345552204 2 1016 +345552208 2 1016 +345552212 2 1016 +345552216 2 1016 +345552220 2 1016 +345552224 2 1016 +345552228 2 1016 +345552232 2 1016 +345552236 2 1016 +345552240 2 1016 +345552244 2 1016 +345552248 2 1016 +345552252 2 1016 +345552256 2 1016 +345552260 2 1016 +345552264 2 1016 +345552268 2 1016 +345552272 2 1016 +345552276 2 1016 +345552280 2 1016 +345552284 2 1016 +345552288 2 1016 +345552292 2 1016 +345552296 2 1016 +345552300 2 1016 +345552304 2 1016 +345552308 2 1016 +345552312 2 1016 +345552316 2 1016 +345552320 2 1016 +345555972 2 1016 +345555976 2 1016 +345555980 2 1016 +345555984 2 1016 +345555988 2 1016 +345555992 2 1016 +345555996 2 1016 +345556000 2 1016 +345556004 2 1016 +345556008 2 1016 +345556012 2 1016 +345556016 2 1016 +345556020 2 1016 +345556024 2 1016 +345556028 2 1016 +345556032 2 1016 +345556036 2 1016 +345556040 2 1016 +345556044 2 1016 +345556048 2 1016 +345556052 2 1016 +345556056 2 1016 +345556060 2 1016 +345556064 2 1016 +345556068 2 1016 +345556072 2 1016 +345556076 2 1016 +345556080 2 1016 +345556084 2 1016 +345556088 2 1016 +345556092 2 1016 +345556096 2 1016 +345556100 2 1016 +345556104 2 1016 +345556108 2 1016 +345556112 2 1016 +345556116 2 1016 +345556120 2 1016 +345556124 2 1016 +345556128 2 1016 +345556132 2 1016 +345556136 2 1016 +345556140 2 1016 +345556144 2 1016 +345556148 2 1016 +345556152 2 1016 +345556156 2 1016 +345556160 2 1016 +345556164 2 1016 +345556168 2 1016 +345556172 2 1016 +345556176 2 1016 +345556180 2 1016 +345556184 2 1016 +345556188 2 1016 +345556192 2 1016 +345556196 2 1016 +345556200 2 1016 +345556204 2 1016 +345556208 2 1016 +345556212 2 1016 +345556216 2 1016 +345556220 2 1016 +345556224 2 1016 +345556228 2 1016 +345556232 2 1016 +345556236 2 1016 +345556240 2 1016 +345556244 2 1016 +345556248 2 1016 +345556252 2 1016 +345556256 2 1016 +345556260 2 1016 +345556264 2 1016 +345556268 2 1016 +345556272 2 1016 +345556276 2 1016 +345556280 2 1016 +345556284 2 1016 +345556288 2 1016 +345556292 2 1016 +345556296 2 1016 +345556300 2 1016 +345556304 2 1016 +345556308 2 1016 +345556312 2 1016 +345556316 2 1016 +345556320 2 1016 +345556324 2 1016 +345556328 2 1016 +345556332 2 1016 +345556336 2 1016 +345556340 2 1016 +345556344 2 1016 +345556348 2 1016 +345556352 2 1016 +345556356 2 1016 +345556360 2 1016 +345556364 2 1016 +345556368 2 1016 +345556372 2 1016 +345556376 2 1016 +345556380 2 1016 +345556384 2 1016 +345556388 2 1016 +345556392 2 1016 +345556396 2 1016 +345556400 2 1016 +345556404 2 1016 +345556408 2 1016 +345556412 2 1016 +345556416 2 1016 +345556420 2 1016 +345556424 2 1016 +345556428 2 1016 +345556432 2 1016 +345556436 2 1016 +345556440 2 1016 +345556444 2 1016 +345556448 2 1016 +345556452 2 1016 +345556456 2 1016 +345556460 2 1016 +345556464 2 1016 +345556468 2 1016 +345556472 2 1016 +345556476 2 1016 +345556480 2 1016 +345560068 2 1016 +345560072 2 1016 +345560076 2 1016 +345560080 2 1016 +345560084 2 1016 +345560088 2 1016 +345560092 2 1016 +345560096 2 1016 +345560100 2 1016 +345560104 2 1016 +345560108 2 1016 +345560112 2 1016 +345560116 2 1016 +345560120 2 1016 +345560124 2 1016 +345560128 2 1016 +345560132 2 1016 +345560136 2 1016 +345560140 2 1016 +345560144 2 1016 +345560148 2 1016 +345560152 2 1016 +345560156 2 1016 +345560160 2 1016 +345560164 2 1016 +345560168 2 1016 +345560172 2 1016 +345560176 2 1016 +345560180 2 1016 +345560184 2 1016 +345560188 2 1016 +345560192 2 1016 +345560196 2 1016 +345560200 2 1016 +345560204 2 1016 +345560208 2 1016 +345560212 2 1016 +345560216 2 1016 +345560220 2 1016 +345560224 2 1016 +345560228 2 1016 +345560232 2 1016 +345560236 2 1016 +345560240 2 1016 +345560244 2 1016 +345560248 2 1016 +345560252 2 1016 +345560256 2 1016 +345560260 2 1016 +345560264 2 1016 +345560268 2 1016 +345560272 2 1016 +345560276 2 1016 +345560280 2 1016 +345560284 2 1016 +345560288 2 1016 +345560292 2 1016 +345560296 2 1016 +345560300 2 1016 +345560304 2 1016 +345560308 2 1016 +345560312 2 1016 +345560316 2 1016 +345560320 2 1016 +345560324 2 1016 +345560328 2 1016 +345560332 2 1016 +345560336 2 1016 +345560340 2 1016 +345560344 2 1016 +345560348 2 1016 +345560352 2 1016 +345560356 2 1016 +345560360 2 1016 +345560364 2 1016 +345560368 2 1016 +345560372 2 1016 +345560376 2 1016 +345560380 2 1016 +345560384 2 1016 +345560388 2 1016 +345560392 2 1016 +345560396 2 1016 +345560400 2 1016 +345560404 2 1016 +345560408 2 1016 +345560412 2 1016 +345560416 2 1016 +345560420 2 1016 +345560424 2 1016 +345560428 2 1016 +345560432 2 1016 +345560436 2 1016 +345560440 2 1016 +345560444 2 1016 +345560448 2 1016 +345560452 2 1016 +345560456 2 1016 +345560460 2 1016 +345560464 2 1016 +345560468 2 1016 +345560472 2 1016 +345560476 2 1016 +345560480 2 1016 +345560484 2 1016 +345560488 2 1016 +345560492 2 1016 +345560496 2 1016 +345560500 2 1016 +345560504 2 1016 +345560508 2 1016 +345560512 2 1016 +345560516 2 1016 +345560520 2 1016 +345560524 2 1016 +345560528 2 1016 +345560532 2 1016 +345560536 2 1016 +345560540 2 1016 +345560544 2 1016 +345560548 2 1016 +345560552 2 1016 +345560556 2 1016 +345560560 2 1016 +345560564 2 1016 +345560568 2 1016 +345560572 2 1016 +345560576 2 1016 +345560580 2 1016 +345560584 2 1016 +345560588 2 1016 +345560592 2 1016 +345560596 2 1016 +345560600 2 1016 +345560604 2 1016 +345560608 2 1016 +345564164 2 1016 +345564168 2 1016 +345564172 2 1016 +345564176 2 1016 +345564180 2 1016 +345564184 2 1016 +345564188 2 1016 +345564192 2 1016 +345564196 2 1016 +345564200 2 1016 +345564204 2 1016 +345564208 2 1016 +345564212 2 1016 +345564216 2 1016 +345564220 2 1016 +345564224 2 1016 +345564228 2 1016 +345564232 2 1016 +345564236 2 1016 +345564240 2 1016 +345564244 2 1016 +345564248 2 1016 +345564252 2 1016 +345564256 2 1016 +345564260 2 1016 +345564264 2 1016 +345564268 2 1016 +345564272 2 1016 +345564276 2 1016 +345564280 2 1016 +345564284 2 1016 +345564288 2 1016 +345564292 2 1016 +345564296 2 1016 +345564300 2 1016 +345564304 2 1016 +345564308 2 1016 +345564312 2 1016 +345564316 2 1016 +345564320 2 1016 +345564324 2 1016 +345564328 2 1016 +345564332 2 1016 +345564336 2 1016 +345564340 2 1016 +345564344 2 1016 +345564348 2 1016 +345564352 2 1016 +345564356 2 1016 +345564360 2 1016 +345564364 2 1016 +345564368 2 1016 +345564372 2 1016 +345564376 2 1016 +345564380 2 1016 +345564384 2 1016 +345564388 2 1016 +345564392 2 1016 +345564396 2 1016 +345564400 2 1016 +345564404 2 1016 +345564408 2 1016 +345564412 2 1016 +345564416 2 1016 +345564420 2 1016 +345564424 2 1016 +345564428 2 1016 +345564432 2 1016 +345564436 2 1016 +345564440 2 1016 +345564444 2 1016 +345564448 2 1016 +345564452 2 1016 +345564456 2 1016 +345564460 2 1016 +345564464 2 1016 +345564468 2 1016 +345564472 2 1016 +345564476 2 1016 +345564480 2 1016 +345564484 2 1016 +345564488 2 1016 +345564492 2 1016 +345564496 2 1016 +345564500 2 1016 +345564504 2 1016 +345564508 2 1016 +345564512 2 1016 +345564516 2 1016 +345564520 2 1016 +345564524 2 1016 +345564528 2 1016 +345564532 2 1016 +345564536 2 1016 +345564540 2 1016 +345564544 2 1016 +345564548 2 1016 +345564552 2 1016 +345564556 2 1016 +345564560 2 1016 +345564564 2 1016 +345564568 2 1016 +345564572 2 1016 +345564576 2 1016 +345564580 2 1016 +345564584 2 1016 +345564588 2 1016 +345564592 2 1016 +345564596 2 1016 +345564600 2 1016 +345564604 2 1016 +345564608 2 1016 +345564612 2 1016 +345564616 2 1016 +345564620 2 1016 +345564624 2 1016 +345564628 2 1016 +345564632 2 1016 +345564636 2 1016 +345564640 2 1016 +345564644 2 1016 +345564648 2 1016 +345564652 2 1016 +345564656 2 1016 +345564660 2 1016 +345564664 2 1016 +345564668 2 1016 +345564672 2 1016 +345564676 2 1016 +345564680 2 1016 +345564684 2 1016 +345564688 2 1016 +345564692 2 1016 +345564696 2 1016 +345564700 2 1016 +345564704 2 1016 +345564708 2 1016 +345564712 2 1016 +345564716 2 1016 +345564720 2 1016 +345564724 2 1016 +345564728 2 1016 +345564732 2 1016 +345564736 2 1016 +345564740 2 1016 +345564744 2 1016 +345564748 2 1016 +345564752 2 1016 +345564756 2 1016 +345564760 2 1016 +345564764 2 1016 +345564768 2 1016 +345568260 2 1016 +345568264 2 1016 +345568268 2 1016 +345568272 2 1016 +345568276 2 1016 +345568280 2 1016 +345568284 2 1016 +345568288 2 1016 +345568292 2 1016 +345568296 2 1016 +345568300 2 1016 +345568304 2 1016 +345568308 2 1016 +345568312 2 1016 +345568316 2 1016 +345568320 2 1016 +345568324 2 1016 +345568328 2 1016 +345568332 2 1016 +345568336 2 1016 +345568340 2 1016 +345568344 2 1016 +345568348 2 1016 +345568352 2 1016 +345568356 2 1016 +345568360 2 1016 +345568364 2 1016 +345568368 2 1016 +345568372 2 1016 +345568376 2 1016 +345568380 2 1016 +345568384 2 1016 +345568388 2 1016 +345568392 2 1016 +345568396 2 1016 +345568400 2 1016 +345568404 2 1016 +345568408 2 1016 +345568412 2 1016 +345568416 2 1016 +345568420 2 1016 +345568424 2 1016 +345568428 2 1016 +345568432 2 1016 +345568436 2 1016 +345568440 2 1016 +345568444 2 1016 +345568448 2 1016 +345568452 2 1016 +345568456 2 1016 +345568460 2 1016 +345568464 2 1016 +345568468 2 1016 +345568472 2 1016 +345568476 2 1016 +345568480 2 1016 +345568484 2 1016 +345568488 2 1016 +345568492 2 1016 +345568496 2 1016 +345568500 2 1016 +345568504 2 1016 +345568508 2 1016 +345568512 2 1016 +345568516 2 1016 +345568520 2 1016 +345568524 2 1016 +345568528 2 1016 +345568532 2 1016 +345568536 2 1016 +345568540 2 1016 +345568544 2 1016 +345568548 2 1016 +345568552 2 1016 +345568556 2 1016 +345568560 2 1016 +345568564 2 1016 +345568568 2 1016 +345568572 2 1016 +345568576 2 1016 +345568580 2 1016 +345568584 2 1016 +345568588 2 1016 +345568592 2 1016 +345568596 2 1016 +345568600 2 1016 +345568604 2 1016 +345568608 2 1016 +345568612 2 1016 +345568616 2 1016 +345568620 2 1016 +345568624 2 1016 +345568628 2 1016 +345568632 2 1016 +345568636 2 1016 +345568640 2 1016 +345568644 2 1016 +345568648 2 1016 +345568652 2 1016 +345568656 2 1016 +345568660 2 1016 +345568664 2 1016 +345568668 2 1016 +345568672 2 1016 +345568676 2 1016 +345568680 2 1016 +345568684 2 1016 +345568688 2 1016 +345568692 2 1016 +345568696 2 1016 +345568700 2 1016 +345568704 2 1016 +345568708 2 1016 +345568712 2 1016 +345568716 2 1016 +345568720 2 1016 +345568724 2 1016 +345568728 2 1016 +345568732 2 1016 +345568736 2 1016 +345568740 2 1016 +345568744 2 1016 +345568748 2 1016 +345568752 2 1016 +345568756 2 1016 +345568760 2 1016 +345568764 2 1016 +345568768 2 1016 +345568772 2 1016 +345568776 2 1016 +345568780 2 1016 +345568784 2 1016 +345568788 2 1016 +345568792 2 1016 +345568796 2 1016 +345568800 2 1016 +345568804 2 1016 +345568808 2 1016 +345568812 2 1016 +345568816 2 1016 +345568820 2 1016 +345568824 2 1016 +345568828 2 1016 +345568832 2 1016 +345568836 2 1016 +345568840 2 1016 +345568844 2 1016 +345568848 2 1016 +345568852 2 1016 +345568856 2 1016 +345568860 2 1016 +345568864 2 1016 +345568868 2 1016 +345568872 2 1016 +345568876 2 1016 +345568880 2 1016 +345568884 2 1016 +345568888 2 1016 +345568892 2 1016 +345568896 2 1016 +345773060 32 960 +345773064 2 960 +345773068 32 960 +345773072 2 960 +345773076 32 960 +345773080 2 960 +345773084 32 960 +345773088 2 960 +345773092 32 960 +345773096 2 960 +345773100 32 960 +345773104 2 960 +345773108 32 960 +345773112 2 960 +345773116 32 960 +345773120 2 960 +345773124 32 960 +345773128 2 960 +345773132 32 960 +345773136 2 960 +345773140 32 960 +345773144 2 960 +345773148 32 960 +345773152 2 960 +345773156 32 960 +345773160 2 960 +345773164 32 960 +345773168 2 960 +345773172 32 960 +345773176 2 960 +345773180 32 960 +345773184 2 960 +345773188 32 960 +345773192 2 960 +345773196 32 960 +345773200 2 960 +345773204 32 960 +345773208 2 960 +345773212 32 960 +345773216 2 960 +345777156 32 960 +345777160 2 960 +345777164 32 960 +345777168 2 960 +345777172 32 960 +345777176 2 960 +345777180 32 960 +345777184 2 960 +345777188 32 960 +345777192 2 960 +345777196 32 960 +345777200 2 960 +345777204 32 960 +345777208 2 960 +345777212 32 960 +345777216 2 960 +345777220 32 960 +345777224 2 960 +345777228 32 960 +345777232 2 960 +345777236 32 960 +345777240 2 960 +345777244 32 960 +345777248 2 960 +345777252 32 960 +345777256 2 960 +345777260 32 960 +345777264 2 960 +345777268 32 960 +345777272 2 960 +345777276 32 960 +345777280 2 960 +345777284 32 960 +345777288 2 960 +345777292 32 960 +345777296 2 960 +345777300 32 960 +345777304 2 960 +345777308 32 960 +345777312 2 960 +345777316 32 960 +345777320 2 960 +345777324 32 960 +345777328 2 960 +345777332 32 960 +345777336 2 960 +345777340 32 960 +345777344 2 960 +345781252 32 960 +345781256 2 960 +345781260 32 960 +345781264 2 960 +345781268 32 960 +345781272 2 960 +345781276 32 960 +345781280 2 960 +345781284 32 960 +345781288 2 960 +345781292 32 960 +345781296 2 960 +345781300 32 960 +345781304 2 960 +345781308 32 960 +345781312 2 960 +345781316 32 960 +345781320 2 960 +345781324 32 960 +345781328 2 960 +345781332 32 960 +345781336 2 960 +345781340 32 960 +345781344 2 960 +345781348 32 960 +345781352 2 960 +345781356 32 960 +345781360 2 960 +345781364 32 960 +345781368 2 960 +345781372 32 960 +345781376 2 960 +345781380 32 960 +345781384 2 960 +345781388 32 960 +345781392 2 960 +345781396 32 960 +345781400 2 960 +345781404 32 960 +345781408 2 960 +345781412 32 960 +345781416 2 960 +345781420 32 960 +345781424 2 960 +345781428 32 960 +345781432 2 960 +345781436 32 960 +345781440 2 960 +345781444 32 960 +345781448 2 960 +345781452 32 960 +345781456 2 960 +345781460 32 960 +345781464 2 960 +345781468 32 960 +345781472 2 960 +345785348 32 960 +345785352 2 960 +345785356 32 960 +345785360 2 960 +345785364 32 960 +345785368 2 960 +345785372 32 960 +345785376 2 960 +345785380 32 960 +345785384 2 960 +345785388 32 960 +345785392 2 960 +345785396 32 960 +345785400 2 960 +345785404 32 960 +345785408 2 960 +345785412 32 960 +345785416 2 960 +345785420 32 960 +345785424 2 960 +345785428 32 960 +345785432 2 960 +345785436 32 960 +345785440 2 960 +345785444 32 960 +345785448 2 960 +345785452 32 960 +345785456 2 960 +345785460 32 960 +345785464 2 960 +345785468 32 960 +345785472 2 960 +345785476 32 960 +345785480 2 960 +345785484 32 960 +345785488 2 960 +345785492 32 960 +345785496 2 960 +345785500 32 960 +345785504 2 960 +345785508 32 960 +345785512 2 960 +345785516 32 960 +345785520 2 960 +345785524 32 960 +345785528 2 960 +345785532 32 960 +345785536 2 960 +345785540 32 960 +345785544 2 960 +345785548 32 960 +345785552 2 960 +345785556 32 960 +345785560 2 960 +345785564 32 960 +345785568 2 960 +345789444 32 960 +345789448 2 960 +345789452 32 960 +345789456 2 960 +345789460 32 960 +345789464 2 960 +345789468 32 960 +345789472 2 960 +345789476 32 960 +345789480 2 960 +345789484 32 960 +345789488 2 960 +345789492 32 960 +345789496 2 960 +345789500 32 960 +345789504 2 960 +345789508 32 960 +345789512 2 960 +345789516 32 960 +345789520 2 960 +345789524 32 960 +345789528 2 960 +345789532 32 960 +345789536 2 960 +345789540 32 960 +345789544 2 960 +345789548 32 960 +345789552 2 960 +345789556 32 960 +345789560 2 960 +345789564 32 960 +345789568 2 960 +345789572 32 960 +345789576 2 960 +345789580 32 960 +345789584 2 960 +345789588 32 960 +345789592 2 960 +345789596 32 960 +345789600 2 960 +345789604 32 960 +345789608 2 960 +345789612 32 960 +345789616 2 960 +345789620 32 960 +345789624 2 960 +345789628 32 960 +345789632 2 960 +345789636 32 960 +345789640 2 960 +345789644 32 960 +345789648 2 960 +345789652 32 960 +345789656 2 960 +345789660 32 960 +345789664 2 960 +345789668 32 960 +345789672 2 960 +345789676 32 960 +345789680 2 960 +345789684 32 960 +345789688 2 960 +345789692 32 960 +345789696 2 960 +345793540 32 960 +345793544 2 960 +345793548 32 960 +345793552 2 960 +345793556 32 960 +345793560 2 960 +345793564 32 960 +345793568 2 960 +345793572 32 960 +345793576 2 960 +345793580 32 960 +345793584 2 960 +345793588 32 960 +345793592 2 960 +345793596 32 960 +345793600 2 960 +345793604 32 960 +345793608 2 960 +345793612 32 960 +345793616 2 960 +345793620 32 960 +345793624 2 960 +345793628 32 960 +345793632 2 960 +345793636 32 960 +345793640 2 960 +345793644 32 960 +345793648 2 960 +345793652 32 960 +345793656 2 960 +345793660 32 960 +345793664 2 960 +345793668 32 960 +345793672 2 960 +345793676 32 960 +345793680 2 960 +345793684 32 960 +345793688 2 960 +345793692 32 960 +345793696 2 960 +345793700 32 960 +345793704 2 960 +345793708 32 960 +345793712 2 960 +345793716 32 960 +345793720 2 960 +345793724 32 960 +345793728 2 960 +345793732 32 960 +345793736 2 960 +345793740 32 960 +345793744 2 960 +345793748 32 960 +345793752 2 960 +345793756 32 960 +345793760 2 960 +345793764 32 960 +345793768 2 960 +345793772 32 960 +345793776 2 960 +345793780 32 960 +345793784 2 960 +345793788 32 960 +345793792 2 960 +345793796 32 960 +345793800 2 960 +345793804 32 960 +345793808 2 960 +345793812 32 960 +345793816 2 960 +345793820 32 960 +345793824 2 960 +345797636 32 960 +345797640 2 960 +345797644 32 960 +345797648 2 960 +345797652 32 960 +345797656 2 960 +345797660 32 960 +345797664 2 960 +345797668 32 960 +345797672 2 960 +345797676 32 960 +345797680 2 960 +345797684 32 960 +345797688 2 960 +345797692 32 960 +345797696 2 960 +345797700 32 960 +345797704 2 960 +345797708 32 960 +345797712 2 960 +345797716 32 960 +345797720 2 960 +345797724 32 960 +345797728 2 960 +345797732 32 960 +345797736 2 960 +345797740 32 960 +345797744 2 960 +345797748 32 960 +345797752 2 960 +345797756 32 960 +345797760 2 960 +345797764 32 960 +345797768 2 960 +345797772 32 960 +345797776 2 960 +345797780 32 960 +345797784 2 960 +345797788 32 960 +345797792 2 960 +345797796 32 960 +345797800 2 960 +345797804 32 960 +345797808 2 960 +345797812 32 960 +345797816 2 960 +345797820 32 960 +345797824 2 960 +345797828 32 960 +345797832 2 960 +345797836 32 960 +345797840 2 960 +345797844 32 960 +345797848 2 960 +345797852 32 960 +345797856 2 960 +345797860 32 960 +345797864 2 960 +345797868 32 960 +345797872 2 960 +345797876 32 960 +345797880 2 960 +345797884 32 960 +345797888 2 960 +345797892 32 960 +345797896 2 960 +345797900 32 960 +345797904 2 960 +345797908 32 960 +345797912 2 960 +345797916 32 960 +345797920 2 960 +345801732 32 960 +345801736 2 960 +345801740 32 960 +345801744 2 960 +345801748 32 960 +345801752 2 960 +345801756 32 960 +345801760 2 960 +345801764 32 960 +345801768 2 960 +345801772 32 960 +345801776 2 960 +345801780 32 960 +345801784 2 960 +345801788 32 960 +345801792 2 960 +345801796 32 960 +345801800 2 960 +345801804 32 960 +345801808 2 960 +345801812 32 960 +345801816 2 960 +345801820 32 960 +345801824 2 960 +345801828 32 960 +345801832 2 960 +345801836 32 960 +345801840 2 960 +345801844 32 960 +345801848 2 960 +345801852 32 960 +345801856 2 960 +345801860 32 960 +345801864 2 960 +345801868 32 960 +345801872 2 960 +345801876 32 960 +345801880 2 960 +345801884 32 960 +345801888 2 960 +345801892 32 960 +345801896 2 960 +345801900 32 960 +345801904 2 960 +345801908 32 960 +345801912 2 960 +345801916 32 960 +345801920 2 960 +345801924 32 960 +345801928 2 960 +345801932 32 960 +345801936 2 960 +345801940 32 960 +345801944 2 960 +345801948 32 960 +345801952 2 960 +345801956 32 960 +345801960 2 960 +345801964 32 960 +345801968 2 960 +345801972 32 960 +345801976 2 960 +345801980 32 960 +345801984 2 960 +345801988 32 960 +345801992 2 960 +345801996 32 960 +345802000 2 960 +345802004 32 960 +345802008 2 960 +345802012 32 960 +345802016 2 960 +345802020 32 960 +345802024 2 960 +345802028 32 960 +345802032 2 960 +345802036 32 960 +345802040 2 960 +345802044 32 960 +345802048 2 960 +345805828 32 960 +345805832 2 960 +345805836 32 960 +345805840 2 960 +345805844 32 960 +345805848 2 960 +345805852 32 960 +345805856 2 960 +345805860 32 960 +345805864 2 960 +345805868 32 960 +345805872 2 960 +345805876 32 960 +345805880 2 960 +345805884 32 960 +345805888 2 960 +345805892 32 960 +345805896 2 960 +345805900 32 960 +345805904 2 960 +345805908 32 960 +345805912 2 960 +345805916 32 960 +345805920 2 960 +345805924 32 960 +345805928 2 960 +345805932 32 960 +345805936 2 960 +345805940 32 960 +345805944 2 960 +345805948 32 960 +345805952 2 960 +345805956 32 960 +345805960 2 960 +345805964 32 960 +345805968 2 960 +345805972 32 960 +345805976 2 960 +345805980 32 960 +345805984 2 960 +345805988 32 960 +345805992 2 960 +345805996 32 960 +345806000 2 960 +345806004 32 960 +345806008 2 960 +345806012 32 960 +345806016 2 960 +345806020 32 960 +345806024 2 960 +345806028 32 960 +345806032 2 960 +345806036 32 960 +345806040 2 960 +345806044 32 960 +345806048 2 960 +345806052 32 960 +345806056 2 960 +345806060 32 960 +345806064 2 960 +345806068 32 960 +345806072 2 960 +345806076 32 960 +345806080 2 960 +345806084 32 960 +345806088 2 960 +345806092 32 960 +345806096 2 960 +345806100 32 960 +345806104 2 960 +345806108 32 960 +345806112 2 960 +345806116 32 960 +345806120 2 960 +345806124 32 960 +345806128 2 960 +345806132 32 960 +345806136 2 960 +345806140 32 960 +345806144 2 960 +345809924 2 1016 +345809928 2 1016 +345809932 2 1016 +345809936 2 1016 +345809940 2 1016 +345809944 2 1016 +345809948 2 1016 +345809952 2 1016 +345809956 2 1016 +345809960 2 1016 +345809964 2 1016 +345809968 2 1016 +345809972 2 1016 +345809976 2 1016 +345809980 2 1016 +345809984 2 1016 +345809988 2 1016 +345809992 2 1016 +345809996 2 1016 +345810000 2 1016 +345810004 2 1016 +345810008 2 1016 +345810012 2 1016 +345810016 2 1016 +345810020 2 1016 +345810024 2 1016 +345810028 2 1016 +345810032 2 1016 +345810036 2 1016 +345810040 2 1016 +345810044 2 1016 +345810048 2 1016 +345810052 2 1016 +345810056 2 1016 +345810060 2 1016 +345810064 2 1016 +345810068 2 1016 +345810072 2 1016 +345810076 2 1016 +345810080 2 1016 +345810084 2 1016 +345810088 2 1016 +345810092 2 1016 +345810096 2 1016 +345810100 2 1016 +345810104 2 1016 +345810108 2 1016 +345810112 2 1016 +345810116 2 1016 +345810120 2 1016 +345810124 2 1016 +345810128 2 1016 +345810132 2 1016 +345810136 2 1016 +345810140 2 1016 +345810144 2 1016 +345810148 2 1016 +345810152 2 1016 +345810156 2 1016 +345810160 2 1016 +345810164 2 1016 +345810168 2 1016 +345810172 2 1016 +345810176 2 1016 +345810180 2 1016 +345810184 2 1016 +345810188 2 1016 +345810192 2 1016 +345810196 2 1016 +345810200 2 1016 +345810204 2 1016 +345810208 2 1016 +345810212 2 1016 +345810216 2 1016 +345810220 2 1016 +345810224 2 1016 +345810228 2 1016 +345810232 2 1016 +345810236 2 1016 +345810240 2 1016 +345810244 2 1016 +345810248 2 1016 +345810252 2 1016 +345810256 2 1016 +345810260 2 1016 +345810264 2 1016 +345810268 2 1016 +345810272 2 1016 +345810276 2 1016 +345810280 2 1016 +345810284 2 1016 +345810288 2 1016 +345810292 2 1016 +345810296 2 1016 +345810300 2 1016 +345810304 2 1016 +345810308 2 1016 +345810312 2 1016 +345810316 2 1016 +345810320 2 1016 +345810324 2 1016 +345810328 2 1016 +345810332 2 1016 +345810336 2 1016 +345814020 2 1016 +345814024 2 1016 +345814028 2 1016 +345814032 2 1016 +345814036 2 1016 +345814040 2 1016 +345814044 2 1016 +345814048 2 1016 +345814052 2 1016 +345814056 2 1016 +345814060 2 1016 +345814064 2 1016 +345814068 2 1016 +345814072 2 1016 +345814076 2 1016 +345814080 2 1016 +345814084 2 1016 +345814088 2 1016 +345814092 2 1016 +345814096 2 1016 +345814100 2 1016 +345814104 2 1016 +345814108 2 1016 +345814112 2 1016 +345814116 2 1016 +345814120 2 1016 +345814124 2 1016 +345814128 2 1016 +345814132 2 1016 +345814136 2 1016 +345814140 2 1016 +345814144 2 1016 +345814148 2 1016 +345814152 2 1016 +345814156 2 1016 +345814160 2 1016 +345814164 2 1016 +345814168 2 1016 +345814172 2 1016 +345814176 2 1016 +345814180 2 1016 +345814184 2 1016 +345814188 2 1016 +345814192 2 1016 +345814196 2 1016 +345814200 2 1016 +345814204 2 1016 +345814208 2 1016 +345814212 2 1016 +345814216 2 1016 +345814220 2 1016 +345814224 2 1016 +345814228 2 1016 +345814232 2 1016 +345814236 2 1016 +345814240 2 1016 +345814244 2 1016 +345814248 2 1016 +345814252 2 1016 +345814256 2 1016 +345814260 2 1016 +345814264 2 1016 +345814268 2 1016 +345814272 2 1016 +345814276 2 1016 +345814280 2 1016 +345814284 2 1016 +345814288 2 1016 +345814292 2 1016 +345814296 2 1016 +345814300 2 1016 +345814304 2 1016 +345814308 2 1016 +345814312 2 1016 +345814316 2 1016 +345814320 2 1016 +345814324 2 1016 +345814328 2 1016 +345814332 2 1016 +345814336 2 1016 +345814340 2 1016 +345814344 2 1016 +345814348 2 1016 +345814352 2 1016 +345814356 2 1016 +345814360 2 1016 +345814364 2 1016 +345814368 2 1016 +345814372 2 1016 +345814376 2 1016 +345814380 2 1016 +345814384 2 1016 +345814388 2 1016 +345814392 2 1016 +345814396 2 1016 +345814400 2 1016 +345814404 2 1016 +345814408 2 1016 +345814412 2 1016 +345814416 2 1016 +345814420 2 1016 +345814424 2 1016 +345814428 2 1016 +345814432 2 1016 +345814436 2 1016 +345814440 2 1016 +345814444 2 1016 +345814448 2 1016 +345814452 2 1016 +345814456 2 1016 +345814460 2 1016 +345814464 2 1016 +345818116 2 1016 +345818120 2 1016 +345818124 2 1016 +345818128 2 1016 +345818132 2 1016 +345818136 2 1016 +345818140 2 1016 +345818144 2 1016 +345818148 2 1016 +345818152 2 1016 +345818156 2 1016 +345818160 2 1016 +345818164 2 1016 +345818168 2 1016 +345818172 2 1016 +345818176 2 1016 +345818180 2 1016 +345818184 2 1016 +345818188 2 1016 +345818192 2 1016 +345818196 2 1016 +345818200 2 1016 +345818204 2 1016 +345818208 2 1016 +345818212 2 1016 +345818216 2 1016 +345818220 2 1016 +345818224 2 1016 +345818228 2 1016 +345818232 2 1016 +345818236 2 1016 +345818240 2 1016 +345818244 2 1016 +345818248 2 1016 +345818252 2 1016 +345818256 2 1016 +345818260 2 1016 +345818264 2 1016 +345818268 2 1016 +345818272 2 1016 +345818276 2 1016 +345818280 2 1016 +345818284 2 1016 +345818288 2 1016 +345818292 2 1016 +345818296 2 1016 +345818300 2 1016 +345818304 2 1016 +345818308 2 1016 +345818312 2 1016 +345818316 2 1016 +345818320 2 1016 +345818324 2 1016 +345818328 2 1016 +345818332 2 1016 +345818336 2 1016 +345818340 2 1016 +345818344 2 1016 +345818348 2 1016 +345818352 2 1016 +345818356 2 1016 +345818360 2 1016 +345818364 2 1016 +345818368 2 1016 +345818372 2 1016 +345818376 2 1016 +345818380 2 1016 +345818384 2 1016 +345818388 2 1016 +345818392 2 1016 +345818396 2 1016 +345818400 2 1016 +345818404 2 1016 +345818408 2 1016 +345818412 2 1016 +345818416 2 1016 +345818420 2 1016 +345818424 2 1016 +345818428 2 1016 +345818432 2 1016 +345818436 2 1016 +345818440 2 1016 +345818444 2 1016 +345818448 2 1016 +345818452 2 1016 +345818456 2 1016 +345818460 2 1016 +345818464 2 1016 +345818468 2 1016 +345818472 2 1016 +345818476 2 1016 +345818480 2 1016 +345818484 2 1016 +345818488 2 1016 +345818492 2 1016 +345818496 2 1016 +345818500 2 1016 +345818504 2 1016 +345818508 2 1016 +345818512 2 1016 +345818516 2 1016 +345818520 2 1016 +345818524 2 1016 +345818528 2 1016 +345818532 2 1016 +345818536 2 1016 +345818540 2 1016 +345818544 2 1016 +345818548 2 1016 +345818552 2 1016 +345818556 2 1016 +345818560 2 1016 +345818564 2 1016 +345818568 2 1016 +345818572 2 1016 +345818576 2 1016 +345818580 2 1016 +345818584 2 1016 +345818588 2 1016 +345818592 2 1016 +345818596 2 1016 +345818600 2 1016 +345818604 2 1016 +345818608 2 1016 +345818612 2 1016 +345818616 2 1016 +345818620 2 1016 +345818624 2 1016 +345822212 2 1016 +345822216 2 1016 +345822220 2 1016 +345822224 2 1016 +345822228 2 1016 +345822232 2 1016 +345822236 2 1016 +345822240 2 1016 +345822244 2 1016 +345822248 2 1016 +345822252 2 1016 +345822256 2 1016 +345822260 2 1016 +345822264 2 1016 +345822268 2 1016 +345822272 2 1016 +345822276 2 1016 +345822280 2 1016 +345822284 2 1016 +345822288 2 1016 +345822292 2 1016 +345822296 2 1016 +345822300 2 1016 +345822304 2 1016 +345822308 2 1016 +345822312 2 1016 +345822316 2 1016 +345822320 2 1016 +345822324 2 1016 +345822328 2 1016 +345822332 2 1016 +345822336 2 1016 +345822340 2 1016 +345822344 2 1016 +345822348 2 1016 +345822352 2 1016 +345822356 2 1016 +345822360 2 1016 +345822364 2 1016 +345822368 2 1016 +345822372 2 1016 +345822376 2 1016 +345822380 2 1016 +345822384 2 1016 +345822388 2 1016 +345822392 2 1016 +345822396 2 1016 +345822400 2 1016 +345822404 2 1016 +345822408 2 1016 +345822412 2 1016 +345822416 2 1016 +345822420 2 1016 +345822424 2 1016 +345822428 2 1016 +345822432 2 1016 +345822436 2 1016 +345822440 2 1016 +345822444 2 1016 +345822448 2 1016 +345822452 2 1016 +345822456 2 1016 +345822460 2 1016 +345822464 2 1016 +345822468 2 1016 +345822472 2 1016 +345822476 2 1016 +345822480 2 1016 +345822484 2 1016 +345822488 2 1016 +345822492 2 1016 +345822496 2 1016 +345822500 2 1016 +345822504 2 1016 +345822508 2 1016 +345822512 2 1016 +345822516 2 1016 +345822520 2 1016 +345822524 2 1016 +345822528 2 1016 +345822532 2 1016 +345822536 2 1016 +345822540 2 1016 +345822544 2 1016 +345822548 2 1016 +345822552 2 1016 +345822556 2 1016 +345822560 2 1016 +345822564 2 1016 +345822568 2 1016 +345822572 2 1016 +345822576 2 1016 +345822580 2 1016 +345822584 2 1016 +345822588 2 1016 +345822592 2 1016 +345822596 2 1016 +345822600 2 1016 +345822604 2 1016 +345822608 2 1016 +345822612 2 1016 +345822616 2 1016 +345822620 2 1016 +345822624 2 1016 +345822628 2 1016 +345822632 2 1016 +345822636 2 1016 +345822640 2 1016 +345822644 2 1016 +345822648 2 1016 +345822652 2 1016 +345822656 2 1016 +345822660 2 1016 +345822664 2 1016 +345822668 2 1016 +345822672 2 1016 +345822676 2 1016 +345822680 2 1016 +345822684 2 1016 +345822688 2 1016 +345822692 2 1016 +345822696 2 1016 +345822700 2 1016 +345822704 2 1016 +345822708 2 1016 +345822712 2 1016 +345822716 2 1016 +345822720 2 1016 +345822724 2 1016 +345822728 2 1016 +345822732 2 1016 +345822736 2 1016 +345822740 2 1016 +345822744 2 1016 +345822748 2 1016 +345822752 2 1016 +345826308 2 1016 +345826312 2 1016 +345826316 2 1016 +345826320 2 1016 +345826324 2 1016 +345826328 2 1016 +345826332 2 1016 +345826336 2 1016 +345826340 2 1016 +345826344 2 1016 +345826348 2 1016 +345826352 2 1016 +345826356 2 1016 +345826360 2 1016 +345826364 2 1016 +345826368 2 1016 +345826372 2 1016 +345826376 2 1016 +345826380 2 1016 +345826384 2 1016 +345826388 2 1016 +345826392 2 1016 +345826396 2 1016 +345826400 2 1016 +345826404 2 1016 +345826408 2 1016 +345826412 2 1016 +345826416 2 1016 +345826420 2 1016 +345826424 2 1016 +345826428 2 1016 +345826432 2 1016 +345826436 2 1016 +345826440 2 1016 +345826444 2 1016 +345826448 2 1016 +345826452 2 1016 +345826456 2 1016 +345826460 2 1016 +345826464 2 1016 +345826468 2 1016 +345826472 2 1016 +345826476 2 1016 +345826480 2 1016 +345826484 2 1016 +345826488 2 1016 +345826492 2 1016 +345826496 2 1016 +345826500 2 1016 +345826504 2 1016 +345826508 2 1016 +345826512 2 1016 +345826516 2 1016 +345826520 2 1016 +345826524 2 1016 +345826528 2 1016 +345826532 2 1016 +345826536 2 1016 +345826540 2 1016 +345826544 2 1016 +345826548 2 1016 +345826552 2 1016 +345826556 2 1016 +345826560 2 1016 +345826564 2 1016 +345826568 2 1016 +345826572 2 1016 +345826576 2 1016 +345826580 2 1016 +345826584 2 1016 +345826588 2 1016 +345826592 2 1016 +345826596 2 1016 +345826600 2 1016 +345826604 2 1016 +345826608 2 1016 +345826612 2 1016 +345826616 2 1016 +345826620 2 1016 +345826624 2 1016 +345826628 2 1016 +345826632 2 1016 +345826636 2 1016 +345826640 2 1016 +345826644 2 1016 +345826648 2 1016 +345826652 2 1016 +345826656 2 1016 +345826660 2 1016 +345826664 2 1016 +345826668 2 1016 +345826672 2 1016 +345826676 2 1016 +345826680 2 1016 +345826684 2 1016 +345826688 2 1016 +345826692 2 1016 +345826696 2 1016 +345826700 2 1016 +345826704 2 1016 +345826708 2 1016 +345826712 2 1016 +345826716 2 1016 +345826720 2 1016 +345826724 2 1016 +345826728 2 1016 +345826732 2 1016 +345826736 2 1016 +345826740 2 1016 +345826744 2 1016 +345826748 2 1016 +345826752 2 1016 +345826756 2 1016 +345826760 2 1016 +345826764 2 1016 +345826768 2 1016 +345826772 2 1016 +345826776 2 1016 +345826780 2 1016 +345826784 2 1016 +345826788 2 1016 +345826792 2 1016 +345826796 2 1016 +345826800 2 1016 +345826804 2 1016 +345826808 2 1016 +345826812 2 1016 +345826816 2 1016 +345826820 2 1016 +345826824 2 1016 +345826828 2 1016 +345826832 2 1016 +345826836 2 1016 +345826840 2 1016 +345826844 2 1016 +345826848 2 1016 +345826852 2 1016 +345826856 2 1016 +345826860 2 1016 +345826864 2 1016 +345826868 2 1016 +345826872 2 1016 +345826876 2 1016 +345826880 2 1016 +345826884 2 1016 +345826888 2 1016 +345826892 2 1016 +345826896 2 1016 +345826900 2 1016 +345826904 2 1016 +345826908 2 1016 +345826912 2 1016 +345830404 2 1016 +345830408 2 1016 +345830412 2 1016 +345830416 2 1016 +345830420 2 1016 +345830424 2 1016 +345830428 2 1016 +345830432 2 1016 +345830436 2 1016 +345830440 2 1016 +345830444 2 1016 +345830448 2 1016 +345830452 2 1016 +345830456 2 1016 +345830460 2 1016 +345830464 2 1016 +345830468 2 1016 +345830472 2 1016 +345830476 2 1016 +345830480 2 1016 +345830484 2 1016 +345830488 2 1016 +345830492 2 1016 +345830496 2 1016 +345830500 2 1016 +345830504 2 1016 +345830508 2 1016 +345830512 2 1016 +345830516 2 1016 +345830520 2 1016 +345830524 2 1016 +345830528 2 1016 +345830532 2 1016 +345830536 2 1016 +345830540 2 1016 +345830544 2 1016 +345830548 2 1016 +345830552 2 1016 +345830556 2 1016 +345830560 2 1016 +345830564 2 1016 +345830568 2 1016 +345830572 2 1016 +345830576 2 1016 +345830580 2 1016 +345830584 2 1016 +345830588 2 1016 +345830592 2 1016 +345830596 2 1016 +345830600 2 1016 +345830604 2 1016 +345830608 2 1016 +345830612 2 1016 +345830616 2 1016 +345830620 2 1016 +345830624 2 1016 +345830628 2 1016 +345830632 2 1016 +345830636 2 1016 +345830640 2 1016 +345830644 2 1016 +345830648 2 1016 +345830652 2 1016 +345830656 2 1016 +345830660 2 1016 +345830664 2 1016 +345830668 2 1016 +345830672 2 1016 +345830676 2 1016 +345830680 2 1016 +345830684 2 1016 +345830688 2 1016 +345830692 2 1016 +345830696 2 1016 +345830700 2 1016 +345830704 2 1016 +345830708 2 1016 +345830712 2 1016 +345830716 2 1016 +345830720 2 1016 +345830724 2 1016 +345830728 2 1016 +345830732 2 1016 +345830736 2 1016 +345830740 2 1016 +345830744 2 1016 +345830748 2 1016 +345830752 2 1016 +345830756 2 1016 +345830760 2 1016 +345830764 2 1016 +345830768 2 1016 +345830772 2 1016 +345830776 2 1016 +345830780 2 1016 +345830784 2 1016 +345830788 2 1016 +345830792 2 1016 +345830796 2 1016 +345830800 2 1016 +345830804 2 1016 +345830808 2 1016 +345830812 2 1016 +345830816 2 1016 +345830820 2 1016 +345830824 2 1016 +345830828 2 1016 +345830832 2 1016 +345830836 2 1016 +345830840 2 1016 +345830844 2 1016 +345830848 2 1016 +345830852 2 1016 +345830856 2 1016 +345830860 2 1016 +345830864 2 1016 +345830868 2 1016 +345830872 2 1016 +345830876 2 1016 +345830880 2 1016 +345830884 2 1016 +345830888 2 1016 +345830892 2 1016 +345830896 2 1016 +345830900 2 1016 +345830904 2 1016 +345830908 2 1016 +345830912 2 1016 +345830916 2 1016 +345830920 2 1016 +345830924 2 1016 +345830928 2 1016 +345830932 2 1016 +345830936 2 1016 +345830940 2 1016 +345830944 2 1016 +345830948 2 1016 +345830952 2 1016 +345830956 2 1016 +345830960 2 1016 +345830964 2 1016 +345830968 2 1016 +345830972 2 1016 +345830976 2 1016 +345830980 2 1016 +345830984 2 1016 +345830988 2 1016 +345830992 2 1016 +345830996 2 1016 +345831000 2 1016 +345831004 2 1016 +345831008 2 1016 +345831012 2 1016 +345831016 2 1016 +345831020 2 1016 +345831024 2 1016 +345831028 2 1016 +345831032 2 1016 +345831036 2 1016 +345831040 2 1016 +346035204 32 960 +346035208 2 960 +346035212 32 960 +346035216 2 960 +346035220 32 960 +346035224 2 960 +346035228 32 960 +346035232 2 960 +346035236 32 960 +346035240 2 960 +346035244 32 960 +346035248 2 960 +346035252 32 960 +346035256 2 960 +346035260 32 960 +346035264 2 960 +346035268 32 960 +346035272 2 960 +346035276 32 960 +346035280 2 960 +346035284 32 960 +346035288 2 960 +346035292 32 960 +346035296 2 960 +346035300 32 960 +346035304 2 960 +346035308 32 960 +346035312 2 960 +346035316 32 960 +346035320 2 960 +346035324 32 960 +346035328 2 960 +346035332 32 960 +346035336 2 960 +346035340 32 960 +346035344 2 960 +346035348 32 960 +346035352 2 960 +346035356 32 960 +346035360 2 960 +346039300 32 960 +346039304 2 960 +346039308 32 960 +346039312 2 960 +346039316 32 960 +346039320 2 960 +346039324 32 960 +346039328 2 960 +346039332 32 960 +346039336 2 960 +346039340 32 960 +346039344 2 960 +346039348 32 960 +346039352 2 960 +346039356 32 960 +346039360 2 960 +346039364 32 960 +346039368 2 960 +346039372 32 960 +346039376 2 960 +346039380 32 960 +346039384 2 960 +346039388 32 960 +346039392 2 960 +346039396 32 960 +346039400 2 960 +346039404 32 960 +346039408 2 960 +346039412 32 960 +346039416 2 960 +346039420 32 960 +346039424 2 960 +346039428 32 960 +346039432 2 960 +346039436 32 960 +346039440 2 960 +346039444 32 960 +346039448 2 960 +346039452 32 960 +346039456 2 960 +346039460 32 960 +346039464 2 960 +346039468 32 960 +346039472 2 960 +346039476 32 960 +346039480 2 960 +346039484 32 960 +346039488 2 960 +346043396 32 960 +346043400 2 960 +346043404 32 960 +346043408 2 960 +346043412 32 960 +346043416 2 960 +346043420 32 960 +346043424 2 960 +346043428 32 960 +346043432 2 960 +346043436 32 960 +346043440 2 960 +346043444 32 960 +346043448 2 960 +346043452 32 960 +346043456 2 960 +346043460 32 960 +346043464 2 960 +346043468 32 960 +346043472 2 960 +346043476 32 960 +346043480 2 960 +346043484 32 960 +346043488 2 960 +346043492 32 960 +346043496 2 960 +346043500 32 960 +346043504 2 960 +346043508 32 960 +346043512 2 960 +346043516 32 960 +346043520 2 960 +346043524 32 960 +346043528 2 960 +346043532 32 960 +346043536 2 960 +346043540 32 960 +346043544 2 960 +346043548 32 960 +346043552 2 960 +346043556 32 960 +346043560 2 960 +346043564 32 960 +346043568 2 960 +346043572 32 960 +346043576 2 960 +346043580 32 960 +346043584 2 960 +346043588 32 960 +346043592 2 960 +346043596 32 960 +346043600 2 960 +346043604 32 960 +346043608 2 960 +346043612 32 960 +346043616 2 960 +346047492 32 960 +346047496 2 960 +346047500 32 960 +346047504 2 960 +346047508 32 960 +346047512 2 960 +346047516 32 960 +346047520 2 960 +346047524 32 960 +346047528 2 960 +346047532 32 960 +346047536 2 960 +346047540 32 960 +346047544 2 960 +346047548 32 960 +346047552 2 960 +346047556 32 960 +346047560 2 960 +346047564 32 960 +346047568 2 960 +346047572 32 960 +346047576 2 960 +346047580 32 960 +346047584 2 960 +346047588 32 960 +346047592 2 960 +346047596 32 960 +346047600 2 960 +346047604 32 960 +346047608 2 960 +346047612 32 960 +346047616 2 960 +346047620 32 960 +346047624 2 960 +346047628 32 960 +346047632 2 960 +346047636 32 960 +346047640 2 960 +346047644 32 960 +346047648 2 960 +346047652 32 960 +346047656 2 960 +346047660 32 960 +346047664 2 960 +346047668 32 960 +346047672 2 960 +346047676 32 960 +346047680 2 960 +346047684 32 960 +346047688 2 960 +346047692 32 960 +346047696 2 960 +346047700 32 960 +346047704 2 960 +346047708 32 960 +346047712 2 960 +346051588 32 960 +346051592 2 960 +346051596 32 960 +346051600 2 960 +346051604 32 960 +346051608 2 960 +346051612 32 960 +346051616 2 960 +346051620 32 960 +346051624 2 960 +346051628 32 960 +346051632 2 960 +346051636 32 960 +346051640 2 960 +346051644 32 960 +346051648 2 960 +346051652 32 960 +346051656 2 960 +346051660 32 960 +346051664 2 960 +346051668 32 960 +346051672 2 960 +346051676 32 960 +346051680 2 960 +346051684 32 960 +346051688 2 960 +346051692 32 960 +346051696 2 960 +346051700 32 960 +346051704 2 960 +346051708 32 960 +346051712 2 960 +346051716 32 960 +346051720 2 960 +346051724 32 960 +346051728 2 960 +346051732 32 960 +346051736 2 960 +346051740 32 960 +346051744 2 960 +346051748 32 960 +346051752 2 960 +346051756 32 960 +346051760 2 960 +346051764 32 960 +346051768 2 960 +346051772 32 960 +346051776 2 960 +346051780 32 960 +346051784 2 960 +346051788 32 960 +346051792 2 960 +346051796 32 960 +346051800 2 960 +346051804 32 960 +346051808 2 960 +346051812 32 960 +346051816 2 960 +346051820 32 960 +346051824 2 960 +346051828 32 960 +346051832 2 960 +346051836 32 960 +346051840 2 960 +346055684 32 960 +346055688 2 960 +346055692 32 960 +346055696 2 960 +346055700 32 960 +346055704 2 960 +346055708 32 960 +346055712 2 960 +346055716 32 960 +346055720 2 960 +346055724 32 960 +346055728 2 960 +346055732 32 960 +346055736 2 960 +346055740 32 960 +346055744 2 960 +346055748 32 960 +346055752 2 960 +346055756 32 960 +346055760 2 960 +346055764 32 960 +346055768 2 960 +346055772 32 960 +346055776 2 960 +346055780 32 960 +346055784 2 960 +346055788 32 960 +346055792 2 960 +346055796 32 960 +346055800 2 960 +346055804 32 960 +346055808 2 960 +346055812 32 960 +346055816 2 960 +346055820 32 960 +346055824 2 960 +346055828 32 960 +346055832 2 960 +346055836 32 960 +346055840 2 960 +346055844 32 960 +346055848 2 960 +346055852 32 960 +346055856 2 960 +346055860 32 960 +346055864 2 960 +346055868 32 960 +346055872 2 960 +346055876 32 960 +346055880 2 960 +346055884 32 960 +346055888 2 960 +346055892 32 960 +346055896 2 960 +346055900 32 960 +346055904 2 960 +346055908 32 960 +346055912 2 960 +346055916 32 960 +346055920 2 960 +346055924 32 960 +346055928 2 960 +346055932 32 960 +346055936 2 960 +346055940 32 960 +346055944 2 960 +346055948 32 960 +346055952 2 960 +346055956 32 960 +346055960 2 960 +346055964 32 960 +346055968 2 960 +346059780 32 960 +346059784 2 960 +346059788 32 960 +346059792 2 960 +346059796 32 960 +346059800 2 960 +346059804 32 960 +346059808 2 960 +346059812 32 960 +346059816 2 960 +346059820 32 960 +346059824 2 960 +346059828 32 960 +346059832 2 960 +346059836 32 960 +346059840 2 960 +346059844 32 960 +346059848 2 960 +346059852 32 960 +346059856 2 960 +346059860 32 960 +346059864 2 960 +346059868 32 960 +346059872 2 960 +346059876 32 960 +346059880 2 960 +346059884 32 960 +346059888 2 960 +346059892 32 960 +346059896 2 960 +346059900 32 960 +346059904 2 960 +346059908 32 960 +346059912 2 960 +346059916 32 960 +346059920 2 960 +346059924 32 960 +346059928 2 960 +346059932 32 960 +346059936 2 960 +346059940 32 960 +346059944 2 960 +346059948 32 960 +346059952 2 960 +346059956 32 960 +346059960 2 960 +346059964 32 960 +346059968 2 960 +346059972 32 960 +346059976 2 960 +346059980 32 960 +346059984 2 960 +346059988 32 960 +346059992 2 960 +346059996 32 960 +346060000 2 960 +346060004 32 960 +346060008 2 960 +346060012 32 960 +346060016 2 960 +346060020 32 960 +346060024 2 960 +346060028 32 960 +346060032 2 960 +346060036 32 960 +346060040 2 960 +346060044 32 960 +346060048 2 960 +346060052 32 960 +346060056 2 960 +346060060 32 960 +346060064 2 960 +346063876 32 960 +346063880 2 960 +346063884 32 960 +346063888 2 960 +346063892 32 960 +346063896 2 960 +346063900 32 960 +346063904 2 960 +346063908 32 960 +346063912 2 960 +346063916 32 960 +346063920 2 960 +346063924 32 960 +346063928 2 960 +346063932 32 960 +346063936 2 960 +346063940 32 960 +346063944 2 960 +346063948 32 960 +346063952 2 960 +346063956 32 960 +346063960 2 960 +346063964 32 960 +346063968 2 960 +346063972 32 960 +346063976 2 960 +346063980 32 960 +346063984 2 960 +346063988 32 960 +346063992 2 960 +346063996 32 960 +346064000 2 960 +346064004 32 960 +346064008 2 960 +346064012 32 960 +346064016 2 960 +346064020 32 960 +346064024 2 960 +346064028 32 960 +346064032 2 960 +346064036 32 960 +346064040 2 960 +346064044 32 960 +346064048 2 960 +346064052 32 960 +346064056 2 960 +346064060 32 960 +346064064 2 960 +346064068 32 960 +346064072 2 960 +346064076 32 960 +346064080 2 960 +346064084 32 960 +346064088 2 960 +346064092 32 960 +346064096 2 960 +346064100 32 960 +346064104 2 960 +346064108 32 960 +346064112 2 960 +346064116 32 960 +346064120 2 960 +346064124 32 960 +346064128 2 960 +346064132 32 960 +346064136 2 960 +346064140 32 960 +346064144 2 960 +346064148 32 960 +346064152 2 960 +346064156 32 960 +346064160 2 960 +346064164 32 960 +346064168 2 960 +346064172 32 960 +346064176 2 960 +346064180 32 960 +346064184 2 960 +346064188 32 960 +346064192 2 960 +346067972 32 960 +346067976 2 960 +346067980 32 960 +346067984 2 960 +346067988 32 960 +346067992 2 960 +346067996 32 960 +346068000 2 960 +346068004 32 960 +346068008 2 960 +346068012 32 960 +346068016 2 960 +346068020 32 960 +346068024 2 960 +346068028 32 960 +346068032 2 960 +346068036 32 960 +346068040 2 960 +346068044 32 960 +346068048 2 960 +346068052 32 960 +346068056 2 960 +346068060 32 960 +346068064 2 960 +346068068 32 960 +346068072 2 960 +346068076 32 960 +346068080 2 960 +346068084 32 960 +346068088 2 960 +346068092 32 960 +346068096 2 960 +346068100 32 960 +346068104 2 960 +346068108 32 960 +346068112 2 960 +346068116 32 960 +346068120 2 960 +346068124 32 960 +346068128 2 960 +346068132 32 960 +346068136 2 960 +346068140 32 960 +346068144 2 960 +346068148 32 960 +346068152 2 960 +346068156 32 960 +346068160 2 960 +346068164 32 960 +346068168 2 960 +346068172 32 960 +346068176 2 960 +346068180 32 960 +346068184 2 960 +346068188 32 960 +346068192 2 960 +346068196 32 960 +346068200 2 960 +346068204 32 960 +346068208 2 960 +346068212 32 960 +346068216 2 960 +346068220 32 960 +346068224 2 960 +346068228 32 960 +346068232 2 960 +346068236 32 960 +346068240 2 960 +346068244 32 960 +346068248 2 960 +346068252 32 960 +346068256 2 960 +346068260 32 960 +346068264 2 960 +346068268 32 960 +346068272 2 960 +346068276 32 960 +346068280 2 960 +346068284 32 960 +346068288 2 960 +346072068 2 1016 +346072072 2 1016 +346072076 2 1016 +346072080 2 1016 +346072084 2 1016 +346072088 2 1016 +346072092 2 1016 +346072096 2 1016 +346072100 2 1016 +346072104 2 1016 +346072108 2 1016 +346072112 2 1016 +346072116 2 1016 +346072120 2 1016 +346072124 2 1016 +346072128 2 1016 +346072132 2 1016 +346072136 2 1016 +346072140 2 1016 +346072144 2 1016 +346072148 2 1016 +346072152 2 1016 +346072156 2 1016 +346072160 2 1016 +346072164 2 1016 +346072168 2 1016 +346072172 2 1016 +346072176 2 1016 +346072180 2 1016 +346072184 2 1016 +346072188 2 1016 +346072192 2 1016 +346072196 2 1016 +346072200 2 1016 +346072204 2 1016 +346072208 2 1016 +346072212 2 1016 +346072216 2 1016 +346072220 2 1016 +346072224 2 1016 +346072228 2 1016 +346072232 2 1016 +346072236 2 1016 +346072240 2 1016 +346072244 2 1016 +346072248 2 1016 +346072252 2 1016 +346072256 2 1016 +346072260 2 1016 +346072264 2 1016 +346072268 2 1016 +346072272 2 1016 +346072276 2 1016 +346072280 2 1016 +346072284 2 1016 +346072288 2 1016 +346072292 2 1016 +346072296 2 1016 +346072300 2 1016 +346072304 2 1016 +346072308 2 1016 +346072312 2 1016 +346072316 2 1016 +346072320 2 1016 +346072324 2 1016 +346072328 2 1016 +346072332 2 1016 +346072336 2 1016 +346072340 2 1016 +346072344 2 1016 +346072348 2 1016 +346072352 2 1016 +346072356 2 1016 +346072360 2 1016 +346072364 2 1016 +346072368 2 1016 +346072372 2 1016 +346072376 2 1016 +346072380 2 1016 +346072384 2 1016 +346072388 2 1016 +346072392 2 1016 +346072396 2 1016 +346072400 2 1016 +346072404 2 1016 +346072408 2 1016 +346072412 2 1016 +346072416 2 1016 +346072420 2 1016 +346072424 2 1016 +346072428 2 1016 +346072432 2 1016 +346072436 2 1016 +346072440 2 1016 +346072444 2 1016 +346072448 2 1016 +346072452 2 1016 +346072456 2 1016 +346072460 2 1016 +346072464 2 1016 +346072468 2 1016 +346072472 2 1016 +346072476 2 1016 +346072480 2 1016 +346076164 2 1016 +346076168 2 1016 +346076172 2 1016 +346076176 2 1016 +346076180 2 1016 +346076184 2 1016 +346076188 2 1016 +346076192 2 1016 +346076196 2 1016 +346076200 2 1016 +346076204 2 1016 +346076208 2 1016 +346076212 2 1016 +346076216 2 1016 +346076220 2 1016 +346076224 2 1016 +346076228 2 1016 +346076232 2 1016 +346076236 2 1016 +346076240 2 1016 +346076244 2 1016 +346076248 2 1016 +346076252 2 1016 +346076256 2 1016 +346076260 2 1016 +346076264 2 1016 +346076268 2 1016 +346076272 2 1016 +346076276 2 1016 +346076280 2 1016 +346076284 2 1016 +346076288 2 1016 +346076292 2 1016 +346076296 2 1016 +346076300 2 1016 +346076304 2 1016 +346076308 2 1016 +346076312 2 1016 +346076316 2 1016 +346076320 2 1016 +346076324 2 1016 +346076328 2 1016 +346076332 2 1016 +346076336 2 1016 +346076340 2 1016 +346076344 2 1016 +346076348 2 1016 +346076352 2 1016 +346076356 2 1016 +346076360 2 1016 +346076364 2 1016 +346076368 2 1016 +346076372 2 1016 +346076376 2 1016 +346076380 2 1016 +346076384 2 1016 +346076388 2 1016 +346076392 2 1016 +346076396 2 1016 +346076400 2 1016 +346076404 2 1016 +346076408 2 1016 +346076412 2 1016 +346076416 2 1016 +346076420 2 1016 +346076424 2 1016 +346076428 2 1016 +346076432 2 1016 +346076436 2 1016 +346076440 2 1016 +346076444 2 1016 +346076448 2 1016 +346076452 2 1016 +346076456 2 1016 +346076460 2 1016 +346076464 2 1016 +346076468 2 1016 +346076472 2 1016 +346076476 2 1016 +346076480 2 1016 +346076484 2 1016 +346076488 2 1016 +346076492 2 1016 +346076496 2 1016 +346076500 2 1016 +346076504 2 1016 +346076508 2 1016 +346076512 2 1016 +346076516 2 1016 +346076520 2 1016 +346076524 2 1016 +346076528 2 1016 +346076532 2 1016 +346076536 2 1016 +346076540 2 1016 +346076544 2 1016 +346076548 2 1016 +346076552 2 1016 +346076556 2 1016 +346076560 2 1016 +346076564 2 1016 +346076568 2 1016 +346076572 2 1016 +346076576 2 1016 +346076580 2 1016 +346076584 2 1016 +346076588 2 1016 +346076592 2 1016 +346076596 2 1016 +346076600 2 1016 +346076604 2 1016 +346076608 2 1016 +346080260 2 1016 +346080264 2 1016 +346080268 2 1016 +346080272 2 1016 +346080276 2 1016 +346080280 2 1016 +346080284 2 1016 +346080288 2 1016 +346080292 2 1016 +346080296 2 1016 +346080300 2 1016 +346080304 2 1016 +346080308 2 1016 +346080312 2 1016 +346080316 2 1016 +346080320 2 1016 +346080324 2 1016 +346080328 2 1016 +346080332 2 1016 +346080336 2 1016 +346080340 2 1016 +346080344 2 1016 +346080348 2 1016 +346080352 2 1016 +346080356 2 1016 +346080360 2 1016 +346080364 2 1016 +346080368 2 1016 +346080372 2 1016 +346080376 2 1016 +346080380 2 1016 +346080384 2 1016 +346080388 2 1016 +346080392 2 1016 +346080396 2 1016 +346080400 2 1016 +346080404 2 1016 +346080408 2 1016 +346080412 2 1016 +346080416 2 1016 +346080420 2 1016 +346080424 2 1016 +346080428 2 1016 +346080432 2 1016 +346080436 2 1016 +346080440 2 1016 +346080444 2 1016 +346080448 2 1016 +346080452 2 1016 +346080456 2 1016 +346080460 2 1016 +346080464 2 1016 +346080468 2 1016 +346080472 2 1016 +346080476 2 1016 +346080480 2 1016 +346080484 2 1016 +346080488 2 1016 +346080492 2 1016 +346080496 2 1016 +346080500 2 1016 +346080504 2 1016 +346080508 2 1016 +346080512 2 1016 +346080516 2 1016 +346080520 2 1016 +346080524 2 1016 +346080528 2 1016 +346080532 2 1016 +346080536 2 1016 +346080540 2 1016 +346080544 2 1016 +346080548 2 1016 +346080552 2 1016 +346080556 2 1016 +346080560 2 1016 +346080564 2 1016 +346080568 2 1016 +346080572 2 1016 +346080576 2 1016 +346080580 2 1016 +346080584 2 1016 +346080588 2 1016 +346080592 2 1016 +346080596 2 1016 +346080600 2 1016 +346080604 2 1016 +346080608 2 1016 +346080612 2 1016 +346080616 2 1016 +346080620 2 1016 +346080624 2 1016 +346080628 2 1016 +346080632 2 1016 +346080636 2 1016 +346080640 2 1016 +346080644 2 1016 +346080648 2 1016 +346080652 2 1016 +346080656 2 1016 +346080660 2 1016 +346080664 2 1016 +346080668 2 1016 +346080672 2 1016 +346080676 2 1016 +346080680 2 1016 +346080684 2 1016 +346080688 2 1016 +346080692 2 1016 +346080696 2 1016 +346080700 2 1016 +346080704 2 1016 +346080708 2 1016 +346080712 2 1016 +346080716 2 1016 +346080720 2 1016 +346080724 2 1016 +346080728 2 1016 +346080732 2 1016 +346080736 2 1016 +346080740 2 1016 +346080744 2 1016 +346080748 2 1016 +346080752 2 1016 +346080756 2 1016 +346080760 2 1016 +346080764 2 1016 +346080768 2 1016 +346084356 2 1016 +346084360 2 1016 +346084364 2 1016 +346084368 2 1016 +346084372 2 1016 +346084376 2 1016 +346084380 2 1016 +346084384 2 1016 +346084388 2 1016 +346084392 2 1016 +346084396 2 1016 +346084400 2 1016 +346084404 2 1016 +346084408 2 1016 +346084412 2 1016 +346084416 2 1016 +346084420 2 1016 +346084424 2 1016 +346084428 2 1016 +346084432 2 1016 +346084436 2 1016 +346084440 2 1016 +346084444 2 1016 +346084448 2 1016 +346084452 2 1016 +346084456 2 1016 +346084460 2 1016 +346084464 2 1016 +346084468 2 1016 +346084472 2 1016 +346084476 2 1016 +346084480 2 1016 +346084484 2 1016 +346084488 2 1016 +346084492 2 1016 +346084496 2 1016 +346084500 2 1016 +346084504 2 1016 +346084508 2 1016 +346084512 2 1016 +346084516 2 1016 +346084520 2 1016 +346084524 2 1016 +346084528 2 1016 +346084532 2 1016 +346084536 2 1016 +346084540 2 1016 +346084544 2 1016 +346084548 2 1016 +346084552 2 1016 +346084556 2 1016 +346084560 2 1016 +346084564 2 1016 +346084568 2 1016 +346084572 2 1016 +346084576 2 1016 +346084580 2 1016 +346084584 2 1016 +346084588 2 1016 +346084592 2 1016 +346084596 2 1016 +346084600 2 1016 +346084604 2 1016 +346084608 2 1016 +346084612 2 1016 +346084616 2 1016 +346084620 2 1016 +346084624 2 1016 +346084628 2 1016 +346084632 2 1016 +346084636 2 1016 +346084640 2 1016 +346084644 2 1016 +346084648 2 1016 +346084652 2 1016 +346084656 2 1016 +346084660 2 1016 +346084664 2 1016 +346084668 2 1016 +346084672 2 1016 +346084676 2 1016 +346084680 2 1016 +346084684 2 1016 +346084688 2 1016 +346084692 2 1016 +346084696 2 1016 +346084700 2 1016 +346084704 2 1016 +346084708 2 1016 +346084712 2 1016 +346084716 2 1016 +346084720 2 1016 +346084724 2 1016 +346084728 2 1016 +346084732 2 1016 +346084736 2 1016 +346084740 2 1016 +346084744 2 1016 +346084748 2 1016 +346084752 2 1016 +346084756 2 1016 +346084760 2 1016 +346084764 2 1016 +346084768 2 1016 +346084772 2 1016 +346084776 2 1016 +346084780 2 1016 +346084784 2 1016 +346084788 2 1016 +346084792 2 1016 +346084796 2 1016 +346084800 2 1016 +346084804 2 1016 +346084808 2 1016 +346084812 2 1016 +346084816 2 1016 +346084820 2 1016 +346084824 2 1016 +346084828 2 1016 +346084832 2 1016 +346084836 2 1016 +346084840 2 1016 +346084844 2 1016 +346084848 2 1016 +346084852 2 1016 +346084856 2 1016 +346084860 2 1016 +346084864 2 1016 +346084868 2 1016 +346084872 2 1016 +346084876 2 1016 +346084880 2 1016 +346084884 2 1016 +346084888 2 1016 +346084892 2 1016 +346084896 2 1016 +346088452 2 1016 +346088456 2 1016 +346088460 2 1016 +346088464 2 1016 +346088468 2 1016 +346088472 2 1016 +346088476 2 1016 +346088480 2 1016 +346088484 2 1016 +346088488 2 1016 +346088492 2 1016 +346088496 2 1016 +346088500 2 1016 +346088504 2 1016 +346088508 2 1016 +346088512 2 1016 +346088516 2 1016 +346088520 2 1016 +346088524 2 1016 +346088528 2 1016 +346088532 2 1016 +346088536 2 1016 +346088540 2 1016 +346088544 2 1016 +346088548 2 1016 +346088552 2 1016 +346088556 2 1016 +346088560 2 1016 +346088564 2 1016 +346088568 2 1016 +346088572 2 1016 +346088576 2 1016 +346088580 2 1016 +346088584 2 1016 +346088588 2 1016 +346088592 2 1016 +346088596 2 1016 +346088600 2 1016 +346088604 2 1016 +346088608 2 1016 +346088612 2 1016 +346088616 2 1016 +346088620 2 1016 +346088624 2 1016 +346088628 2 1016 +346088632 2 1016 +346088636 2 1016 +346088640 2 1016 +346088644 2 1016 +346088648 2 1016 +346088652 2 1016 +346088656 2 1016 +346088660 2 1016 +346088664 2 1016 +346088668 2 1016 +346088672 2 1016 +346088676 2 1016 +346088680 2 1016 +346088684 2 1016 +346088688 2 1016 +346088692 2 1016 +346088696 2 1016 +346088700 2 1016 +346088704 2 1016 +346088708 2 1016 +346088712 2 1016 +346088716 2 1016 +346088720 2 1016 +346088724 2 1016 +346088728 2 1016 +346088732 2 1016 +346088736 2 1016 +346088740 2 1016 +346088744 2 1016 +346088748 2 1016 +346088752 2 1016 +346088756 2 1016 +346088760 2 1016 +346088764 2 1016 +346088768 2 1016 +346088772 2 1016 +346088776 2 1016 +346088780 2 1016 +346088784 2 1016 +346088788 2 1016 +346088792 2 1016 +346088796 2 1016 +346088800 2 1016 +346088804 2 1016 +346088808 2 1016 +346088812 2 1016 +346088816 2 1016 +346088820 2 1016 +346088824 2 1016 +346088828 2 1016 +346088832 2 1016 +346088836 2 1016 +346088840 2 1016 +346088844 2 1016 +346088848 2 1016 +346088852 2 1016 +346088856 2 1016 +346088860 2 1016 +346088864 2 1016 +346088868 2 1016 +346088872 2 1016 +346088876 2 1016 +346088880 2 1016 +346088884 2 1016 +346088888 2 1016 +346088892 2 1016 +346088896 2 1016 +346088900 2 1016 +346088904 2 1016 +346088908 2 1016 +346088912 2 1016 +346088916 2 1016 +346088920 2 1016 +346088924 2 1016 +346088928 2 1016 +346088932 2 1016 +346088936 2 1016 +346088940 2 1016 +346088944 2 1016 +346088948 2 1016 +346088952 2 1016 +346088956 2 1016 +346088960 2 1016 +346088964 2 1016 +346088968 2 1016 +346088972 2 1016 +346088976 2 1016 +346088980 2 1016 +346088984 2 1016 +346088988 2 1016 +346088992 2 1016 +346088996 2 1016 +346089000 2 1016 +346089004 2 1016 +346089008 2 1016 +346089012 2 1016 +346089016 2 1016 +346089020 2 1016 +346089024 2 1016 +346089028 2 1016 +346089032 2 1016 +346089036 2 1016 +346089040 2 1016 +346089044 2 1016 +346089048 2 1016 +346089052 2 1016 +346089056 2 1016 +346092548 2 1016 +346092552 2 1016 +346092556 2 1016 +346092560 2 1016 +346092564 2 1016 +346092568 2 1016 +346092572 2 1016 +346092576 2 1016 +346092580 2 1016 +346092584 2 1016 +346092588 2 1016 +346092592 2 1016 +346092596 2 1016 +346092600 2 1016 +346092604 2 1016 +346092608 2 1016 +346092612 2 1016 +346092616 2 1016 +346092620 2 1016 +346092624 2 1016 +346092628 2 1016 +346092632 2 1016 +346092636 2 1016 +346092640 2 1016 +346092644 2 1016 +346092648 2 1016 +346092652 2 1016 +346092656 2 1016 +346092660 2 1016 +346092664 2 1016 +346092668 2 1016 +346092672 2 1016 +346092676 2 1016 +346092680 2 1016 +346092684 2 1016 +346092688 2 1016 +346092692 2 1016 +346092696 2 1016 +346092700 2 1016 +346092704 2 1016 +346092708 2 1016 +346092712 2 1016 +346092716 2 1016 +346092720 2 1016 +346092724 2 1016 +346092728 2 1016 +346092732 2 1016 +346092736 2 1016 +346092740 2 1016 +346092744 2 1016 +346092748 2 1016 +346092752 2 1016 +346092756 2 1016 +346092760 2 1016 +346092764 2 1016 +346092768 2 1016 +346092772 2 1016 +346092776 2 1016 +346092780 2 1016 +346092784 2 1016 +346092788 2 1016 +346092792 2 1016 +346092796 2 1016 +346092800 2 1016 +346092804 2 1016 +346092808 2 1016 +346092812 2 1016 +346092816 2 1016 +346092820 2 1016 +346092824 2 1016 +346092828 2 1016 +346092832 2 1016 +346092836 2 1016 +346092840 2 1016 +346092844 2 1016 +346092848 2 1016 +346092852 2 1016 +346092856 2 1016 +346092860 2 1016 +346092864 2 1016 +346092868 2 1016 +346092872 2 1016 +346092876 2 1016 +346092880 2 1016 +346092884 2 1016 +346092888 2 1016 +346092892 2 1016 +346092896 2 1016 +346092900 2 1016 +346092904 2 1016 +346092908 2 1016 +346092912 2 1016 +346092916 2 1016 +346092920 2 1016 +346092924 2 1016 +346092928 2 1016 +346092932 2 1016 +346092936 2 1016 +346092940 2 1016 +346092944 2 1016 +346092948 2 1016 +346092952 2 1016 +346092956 2 1016 +346092960 2 1016 +346092964 2 1016 +346092968 2 1016 +346092972 2 1016 +346092976 2 1016 +346092980 2 1016 +346092984 2 1016 +346092988 2 1016 +346092992 2 1016 +346092996 2 1016 +346093000 2 1016 +346093004 2 1016 +346093008 2 1016 +346093012 2 1016 +346093016 2 1016 +346093020 2 1016 +346093024 2 1016 +346093028 2 1016 +346093032 2 1016 +346093036 2 1016 +346093040 2 1016 +346093044 2 1016 +346093048 2 1016 +346093052 2 1016 +346093056 2 1016 +346093060 2 1016 +346093064 2 1016 +346093068 2 1016 +346093072 2 1016 +346093076 2 1016 +346093080 2 1016 +346093084 2 1016 +346093088 2 1016 +346093092 2 1016 +346093096 2 1016 +346093100 2 1016 +346093104 2 1016 +346093108 2 1016 +346093112 2 1016 +346093116 2 1016 +346093120 2 1016 +346093124 2 1016 +346093128 2 1016 +346093132 2 1016 +346093136 2 1016 +346093140 2 1016 +346093144 2 1016 +346093148 2 1016 +346093152 2 1016 +346093156 2 1016 +346093160 2 1016 +346093164 2 1016 +346093168 2 1016 +346093172 2 1016 +346093176 2 1016 +346093180 2 1016 +346093184 2 1016 diff --git a/SLHCUpgradeSimulations/Geometry/test/NeutRadtuple.h b/SLHCUpgradeSimulations/Geometry/test/NeutRadtuple.h index 5b09d86a48cdd..18fc458637e55 100644 --- a/SLHCUpgradeSimulations/Geometry/test/NeutRadtuple.h +++ b/SLHCUpgradeSimulations/Geometry/test/NeutRadtuple.h @@ -17,7 +17,7 @@ #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "SimTracker/TrackAssociation/interface/TrackAssociatorBase.h" class TTree; diff --git a/SLHCUpgradeSimulations/Geometry/test/TPNtuplizer.h b/SLHCUpgradeSimulations/Geometry/test/TPNtuplizer.h index 7c9a07c479e41..51f56f3447b8a 100644 --- a/SLHCUpgradeSimulations/Geometry/test/TPNtuplizer.h +++ b/SLHCUpgradeSimulations/Geometry/test/TPNtuplizer.h @@ -18,7 +18,7 @@ #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "SimTracker/TrackAssociation/interface/TrackAssociatorBase.h" class TTree; diff --git a/SimDataFormats/CrossingFrame/interface/CrossingFrame.h b/SimDataFormats/CrossingFrame/interface/CrossingFrame.h index 488f192c48c09..787d6d8121b84 100644 --- a/SimDataFormats/CrossingFrame/interface/CrossingFrame.h +++ b/SimDataFormats/CrossingFrame/interface/CrossingFrame.h @@ -58,9 +58,9 @@ class CrossingFrame void addSignals(const T * vec,edm::EventID id); // standard version - void addPileups(const int bcr, std::vector * vec, unsigned int evtId,int vertexoffset=0); + void addPileups(std::vector const& vec); // version for HepMCProduct - void addPileups(const int bcr, T * product, unsigned int evtId,int vertexoffset=0); + void addPileups(T const& product); void setTof( ); @@ -281,31 +281,20 @@ template void CrossingFrame::setPileupPtr(boost::shared_ptr > const> shPtr) {shPtrPileupsPCF_=shPtr;} -//==================== template specializations =========================================== template -void CrossingFrame::addPileups(const int bcr, T * product, unsigned int evtId,int vertexoffset) { +void CrossingFrame::addPileups(T const& product) { // default, valid for HepMCProduct - pileups_.push_back(product); + pileups_.push_back(&product); } +#ifndef __GCCXML__ template -void CrossingFrame::addPileups(const int bcr, std::vector * product, unsigned int evtId,int vertexoffset){ - // default, in fact never called since special implementations exist for all possible types - // of this signature, i.e. PSimHit, PCaloHit, SimTrack, SimVertex - // But needs to be present for HepMCProduct +void CrossingFrame::addPileups(std::vector const& product){ + for (auto const& item : product) { + pileups_.push_back(&item); + } } - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *, unsigned int evtId,int vertexoffset); - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *, unsigned int evtId,int vertexoffset); - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *, unsigned int evtId,int vertexoffset); - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *, unsigned int evtId,int vertexoffset); +#endif template void CrossingFrame::addSignals(const std::vector * vec,edm::EventID id){ diff --git a/SimDataFormats/CrossingFrame/src/CrossingFrame.cc b/SimDataFormats/CrossingFrame/src/CrossingFrame.cc deleted file mode 100644 index 398591f484240..0000000000000 --- a/SimDataFormats/CrossingFrame/src/CrossingFrame.cc +++ /dev/null @@ -1,52 +0,0 @@ -#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" -#include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" -#include "DataFormats/Math/interface/Vector3D.h" - -using namespace edm; - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *simtracks, unsigned int evtNr, int vertexoffset) { - - EncodedEventId id(bcr,evtNr); - for (unsigned int i=0;isize();++i){ - (*simtracks)[i].setEventId(id); - if (!(*simtracks)[i].noVertex()) - (*simtracks)[i].setVertexIndex((*simtracks)[i].vertIndex()+vertexoffset); - pileups_.push_back(&((*simtracks)[i])); - } -} - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *simvertices, unsigned int evtNr, int vertexoffset) { - - EncodedEventId id(bcr,evtNr); - for (unsigned int i=0;isize();++i) { - (*simvertices)[i].setEventId(id); - (*simvertices)[i].setTof((*simvertices)[i].position().t()+bcr*bunchSpace_); - pileups_.push_back(&((*simvertices)[i])); - } -} - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *simhits, unsigned int evtNr, int vertexoffset) { - - EncodedEventId id(bcr,evtNr); - - for (unsigned int i=0;isize();++i) { - (*simhits)[i].setEventId(id); - (*simhits)[i].setTof((*simhits)[i].timeOfFlight() + bcr*bunchSpace_); - pileups_.push_back(&((*simhits)[i])); - } -} - -template <> -void CrossingFrame::addPileups(const int bcr, std::vector *calohits, unsigned int evtNr, int vertexoffset) { - - EncodedEventId id(bcr,evtNr); - for (unsigned int i=0;isize();++i) { - PCaloHit hit((*calohits)[i].id(),(*calohits)[i].energyEM(),(*calohits)[i].energyHad(),(*calohits)[i].time()+bcr*bunchSpace_,(*calohits)[i].geantTrackId()); - (*calohits)[i].setEventId(id); - (*calohits)[i].setTime((*calohits)[i].time()+bcr*bunchSpace_); - pileups_.push_back(&((*calohits)[i])); - } -} diff --git a/SimGeneral/MixingModule/interface/PileUpEventPrincipal.h b/SimGeneral/MixingModule/interface/PileUpEventPrincipal.h index 91e2c3f903031..817a1d1fd2b6e 100644 --- a/SimGeneral/MixingModule/interface/PileUpEventPrincipal.h +++ b/SimGeneral/MixingModule/interface/PileUpEventPrincipal.h @@ -11,22 +11,12 @@ #include "DataFormats/Common/interface/BasicHandle.h" #include "DataFormats/Common/interface/ConvertHandle.h" #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" -class PCaloHit; -class PSimHit; -class SimTrack; -class SimVertex; class PileUpEventPrincipal { public: - PileUpEventPrincipal(edm::EventPrincipal const& ep, int bcr, int bsp, int eventId, int vtxOffset) : - principal_(ep), bunchCrossing_(bcr), bunchCrossingXbunchSpace_(bcr*bsp), id_(bcr, eventId), vertexOffset_(vtxOffset), labels_() {} - - bool - addLabel(edm::TypeID const& type, std::string const& label) const { - return true; - //return labels_.insert(std::make_pair(type, label)).second; - } + PileUpEventPrincipal(edm::EventPrincipal const& ep, int bcr) : + principal_(ep), bunchCrossing_(bcr) {} edm::EventPrincipal const& principal() { return principal_; @@ -40,10 +30,6 @@ class PileUpEventPrincipal { return bunchCrossing_; } - template - void - adjust(T& item) const { - } template bool @@ -52,33 +38,13 @@ class PileUpEventPrincipal { typedef typename T::iterator iterator; edm::BasicHandle bh = principal_.getByLabel(edm::PRODUCT_TYPE, edm::TypeID(typeid(T)), tag); convert_handle(bh, result); - if(result.isValid() && addLabel(edm::TypeID(typeid(T)), tag.label())) { - T& product = const_cast(*result.product()); - for(iterator i = product.begin(), iEnd = product.end(); i != iEnd; ++i) { - adjust(*i); - } - } return result.isValid(); } private: edm::EventPrincipal const& principal_; int bunchCrossing_; - int bunchCrossingXbunchSpace_; - EncodedEventId id_; - int vertexOffset_; - mutable std::set > labels_; }; -template<> -void PileUpEventPrincipal::adjust(PCaloHit& item) const; - -template<> -void PileUpEventPrincipal::adjust(PSimHit& item) const; - -template<> -void PileUpEventPrincipal::adjust(SimTrack& item) const; - -template<> -void PileUpEventPrincipal::adjust(SimVertex& item) const; #endif + diff --git a/SimGeneral/MixingModule/plugins/Adjuster.cc b/SimGeneral/MixingModule/plugins/Adjuster.cc new file mode 100644 index 0000000000000..ff1a42002b23e --- /dev/null +++ b/SimGeneral/MixingModule/plugins/Adjuster.cc @@ -0,0 +1,47 @@ +#include "Adjuster.h" +#include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" + +namespace edm { +namespace detail { +void doTheOffset(int bunchSpace, int bcr, std::vector& simtracks, unsigned int evtNr, int vertexOffset) { + + EncodedEventId id(bcr,evtNr); + for (auto& item : simtracks) { + item.setEventId(id); + if (!item.noVertex()) { + item.setVertexIndex(item.vertIndex() + vertexOffset); + } + } +} + +void doTheOffset(int bunchSpace, int bcr, std::vector& simvertices, unsigned int evtNr, int vertexOffset) { + + int timeOffset = bcr * bunchSpace; + EncodedEventId id(bcr,evtNr); + for (auto& item : simvertices) { + item.setEventId(id); + item.setTof(item.position().t() + timeOffset); + } +} + +void doTheOffset(int bunchSpace, int bcr, std::vector& simhits, unsigned int evtNr, int vertexOffset) { + + int timeOffset = bcr * bunchSpace; + EncodedEventId id(bcr,evtNr); + for (auto& item : simhits) { + item.setEventId(id); + item.setTof(item.timeOfFlight() + timeOffset); + } +} + +void doTheOffset(int bunchSpace, int bcr, std::vector& calohits, unsigned int evtNr, int vertexOffset) { + + int timeOffset = bcr * bunchSpace; + EncodedEventId id(bcr,evtNr); + for (auto& item : calohits) { + item.setEventId(id); + item.setTime(item.time() + timeOffset); + } +} +} +} diff --git a/SimGeneral/MixingModule/plugins/Adjuster.h b/SimGeneral/MixingModule/plugins/Adjuster.h new file mode 100644 index 0000000000000..facd1182b46b2 --- /dev/null +++ b/SimGeneral/MixingModule/plugins/Adjuster.h @@ -0,0 +1,71 @@ +#ifndef SimGeneral_MixingModule_Adjuster_h +#define SimGeneral_MixingModule_Adjuster_h + +#include "DataFormats/Common/interface/Wrapper.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventPrincipal.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" +#include "SimDataFormats/Track/interface/SimTrackContainer.h" +#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" +#include "SimDataFormats/Vertex/interface/SimVertexContainer.h" + +#include "boost/shared_ptr.hpp" + +#include + +namespace edm { + class AdjusterBase { + public: + virtual ~AdjusterBase() {} + virtual void doOffset(int bunchspace, int bcr, const edm::EventPrincipal&, unsigned int EventNr, int vertexOffset) = 0; + virtual bool checkSignal(edm::Event const& event) = 0; + }; + + template + class Adjuster : public AdjusterBase { + + public: + Adjuster(InputTag const& tag); + + virtual ~Adjuster() {} + + virtual void doOffset(int bunchspace, int bcr, const edm::EventPrincipal&, unsigned int EventNr, int vertexOffset); + + virtual bool checkSignal(edm::Event const& event) { + bool got = false; + edm::Handle > result_t; + got = event.getByLabel(tag_, result_t); + return got; + } + + private: + InputTag tag_; + }; + + //============================================================================== + // implementations + //============================================================================== + + namespace detail { + void doTheOffset(int bunchspace, int bcr, std::vector& product, unsigned int eventNr, int vertexOffset); + void doTheOffset(int bunchspace, int bcr, std::vector& product, unsigned int eventNr, int vertexOffset); + void doTheOffset(int bunchspace, int bcr, std::vector& product, unsigned int eventNr, int vertexOffset); + void doTheOffset(int bunchspace, int bcr, std::vector& product, unsigned int eventNr, int vertexOffset); + } + + template + void Adjuster::doOffset(int bunchspace, int bcr, const EventPrincipal &ep, unsigned int eventNr, int vertexOffset) { + boost::shared_ptr > const> shPtr = getProductByTag >(ep, tag_); + if (shPtr) { + std::vector& product = const_cast&>(*shPtr->product()); + detail::doTheOffset(bunchspace, bcr, product, eventNr, vertexOffset); + } + } + + template + Adjuster::Adjuster(InputTag const& tag) : tag_(tag) { + } +} + +#endif diff --git a/SimGeneral/MixingModule/plugins/HiMixingModule.cc b/SimGeneral/MixingModule/plugins/HiMixingModule.cc index ae88878e09798..636348600e01c 100644 --- a/SimGeneral/MixingModule/plugins/HiMixingModule.cc +++ b/SimGeneral/MixingModule/plugins/HiMixingModule.cc @@ -112,7 +112,12 @@ namespace edm{ std::auto_ptr > crFrame(new CrossingFrame() ); crFrame->addSignals(handles[0].product(),e.id()); for(size_t itag = 1; itag < tags_.size(); ++itag){ - crFrame->addPileups(0,const_cast< std::vector * >(handles[itag].product()),itag); + std::vector* product = const_cast*>(handles[itag].product()); + EncodedEventId id(0,itag); + for(auto& item : *product) { + item.setEventId(id); + } + crFrame->addPileups(*product); } e.put(crFrame,label_); } @@ -139,7 +144,8 @@ void HiMixingWorker::addSignals(edm::Event &e){ std::auto_ptr > crFrame(new CrossingFrame() ); crFrame->addSignals(handles[0].product(),e.id()); for(size_t itag = 1; itag < tags_.size(); ++itag){ - crFrame->addPileups(0, const_cast(handles[itag].product()),itag); + HepMCProduct* product = const_cast(handles[itag].product()); + crFrame->addPileups(*product); } e.put(crFrame,label_); } @@ -306,3 +312,4 @@ bool HiMixingModule::verifyRegistry(std::string object, std::string subdet, Inpu DEFINE_FWK_MODULE(HiMixingModule); } + diff --git a/SimGeneral/MixingModule/plugins/MixingModule.cc b/SimGeneral/MixingModule/plugins/MixingModule.cc index 2fd656d16e2ec..4c6533f958d83 100644 --- a/SimGeneral/MixingModule/plugins/MixingModule.cc +++ b/SimGeneral/MixingModule/plugins/MixingModule.cc @@ -6,6 +6,7 @@ #include "MixingModule.h" #include "MixingWorker.h" +#include "Adjuster.h" #include "CondFormats/RunInfo/interface/MixingModuleConfig.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -71,6 +72,7 @@ namespace edm { std::string label; branchesActivate(TypeID(typeid(std::vector)).friendlyClassName(),std::string(""),tag,label); + adjustersObjects_.push_back(new Adjuster(tag)); bool makeCrossingFrame = pset.getUntrackedParameter("makeCrossingFrame", false); if(makeCrossingFrame) { workersObjects_.push_back(new MixingWorker(minBunch_,maxBunch_,bunchSpace_,std::string(""),label,labelCF,maxNbSources_,tag,tagCF)); @@ -97,6 +99,7 @@ namespace edm { std::string label; branchesActivate(TypeID(typeid(std::vector)).friendlyClassName(),std::string(""),tag,label); + adjustersObjects_.push_back(new Adjuster(tag)); bool makeCrossingFrame = pset.getUntrackedParameter("makeCrossingFrame", false); if(makeCrossingFrame) { workersObjects_.push_back(new MixingWorker(minBunch_,maxBunch_,bunchSpace_,std::string(""),label,labelCF,maxNbSources_,tag,tagCF)); @@ -132,6 +135,7 @@ namespace edm { std::string label; branchesActivate(TypeID(typeid(std::vector)).friendlyClassName(),subdets[ii],tag,label); + adjustersObjects_.push_back(new Adjuster(tag)); if(binary_search_all(crossingFrames, tag.instance())) { workersObjects_.push_back(new MixingWorker(minBunch_,maxBunch_,bunchSpace_,subdets[ii],label,labelCF,maxNbSources_,tag,tagCF)); produces >(label); @@ -153,6 +157,7 @@ namespace edm { std::string label; branchesActivate(TypeID(typeid(std::vector)).friendlyClassName(),subdets[ii],tag,label); + adjustersObjects_.push_back(new Adjuster(tag)); if(binary_search_all(crossingFrames, tag.instance())) { workersObjects_.push_back(new MixingWorker(minBunch_,maxBunch_,bunchSpace_,subdets[ii],label,labelCF,maxNbSources_,tag,tagCF)); produces >(label); @@ -221,10 +226,18 @@ dropUnwantedBranches(wantedBranches_); } void MixingModule::checkSignal(const edm::Event &e){ + if (adjusters_.empty()){ + for (auto const& adjuster : adjustersObjects_) { + if (adjuster->checkSignal(e)){ + adjusters_.push_back(adjuster); + } + } + } + if (workers_.empty()){ - for (unsigned int ii=0;iicheckSignal(e)){ - workers_.push_back(workersObjects_[ii]); + for (auto const& worker : workersObjects_) { + if (worker->checkSignal(e)){ + workers_.push_back(worker); } } } @@ -241,14 +254,16 @@ dropUnwantedBranches(wantedBranches_); // Virtual destructor needed. MixingModule::~MixingModule() { - for (unsigned int ii=0;ii::const_iterator accItr = digiAccumulators_.begin(); - std::vector::const_iterator accEnd = digiAccumulators_.end(); - for (; accItr != accEnd; ++accItr) { - delete *accItr; + for (auto& adjuster : adjustersObjects_) { + delete adjuster; + } + + for (auto& digiAccumulator : digiAccumulators_) { + delete digiAccumulator; } } @@ -267,14 +282,17 @@ dropUnwantedBranches(wantedBranches_); int bunchCrossing, int eventId, int& vertexOffset, const edm::EventSetup& setup) { - PileUpEventPrincipal pep(eventPrincipal, bunchCrossing, bunchSpace_, eventId, vertexOffset); + for (auto const& adjuster : adjusters_) { + adjuster->doOffset(bunchSpace_, bunchCrossing, eventPrincipal, eventId, vertexOffset); + } + PileUpEventPrincipal pep(eventPrincipal, bunchCrossing); accumulateEvent(pep, setup); - for (unsigned int ii=0;iiaddPileups(bunchCrossing,eventPrincipal, eventId, vertexoffset); + worker->addPileups(eventPrincipal, eventId); } } @@ -467,3 +485,4 @@ dropUnwantedBranches(wantedBranches_); } } }//edm + diff --git a/SimGeneral/MixingModule/plugins/MixingModule.h b/SimGeneral/MixingModule/plugins/MixingModule.h index 9804ab283c680..c5f5762d22e12 100644 --- a/SimGeneral/MixingModule/plugins/MixingModule.h +++ b/SimGeneral/MixingModule/plugins/MixingModule.h @@ -40,6 +40,7 @@ class DigiAccumulatorMixMod; class PileUpEventPrincipal; namespace edm { + class AdjusterBase; class MixingWorkerBase; class MixingModule : public BMixingModule { @@ -88,6 +89,8 @@ namespace edm { bool mixProdStep1_; CrossingFramePlaybackInfoExtended *playbackInfo_; + std::vector adjusters_; + std::vector adjustersObjects_; std::vector workers_; std::vector workersObjects_; std::vector wantedBranches_; diff --git a/SimGeneral/MixingModule/plugins/MixingWorker.cc b/SimGeneral/MixingModule/plugins/MixingWorker.cc index aba96c5860e79..b8c82e4dcb6ed 100644 --- a/SimGeneral/MixingModule/plugins/MixingWorker.cc +++ b/SimGeneral/MixingModule/plugins/MixingWorker.cc @@ -9,62 +9,13 @@ namespace edm { template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset) { - - boost::shared_ptr > const> shPtr = edm::getProductByTag >(ep, tag_); - - if (shPtr) { - LogDebug("MixingModule") <product()->size()<<" pileup objects added, eventNr "<setPileupPtr(shPtr); - crFrame_->addPileups(bcr,const_cast< std::vector * >(shPtr->product()),eventNr); - } - } - - template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep,unsigned int eventNr,int vertexoffset) { - // changed for high/low treatment - boost::shared_ptr > const> shPtr = getProductByTag >(ep, tag_); - if (shPtr) { - LogDebug("MixingModule") <product()->size()<<" pileup objects added, eventNr "<setPileupPtr(shPtr); - crFrame_->addPileups(bcr,const_cast< std::vector * > (shPtr->product()),eventNr); - } - } - - template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep,unsigned int eventNr,int vertexoffset) { - // changed to transmit vertexoffset - boost::shared_ptr > const> shPtr = getProductByTag >(ep, tag_); - - if (shPtr) { - LogDebug("MixingModule") <product()->size()<<" pileup objects added, eventNr "<setPileupPtr(shPtr); - crFrame_->addPileups(bcr,const_cast< std::vector * > (shPtr->product()),eventNr,vertexoffset); - } - } - - template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep,unsigned int eventNr,int vertexoffset) { - - // changed to take care of vertexoffset - boost::shared_ptr > const> shPtr = getProductByTag >(ep, tag_); - - if (shPtr) { - LogDebug("MixingModule") <product()->size()<<" pileup objects added, eventNr "<product()->size(); - crFrame_->setPileupPtr(shPtr); - crFrame_->addPileups(bcr,const_cast< std::vector * > (shPtr->product()),eventNr); - } - } - - template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal& ep,unsigned int eventNr,int vertexoffset) { + void MixingWorker::addPileups(const EventPrincipal& ep,unsigned int eventNr) { // HepMCProduct does not come as a vector.... boost::shared_ptr const> shPtr = getProductByTag(ep, tag_); if (shPtr) { LogDebug("MixingModule") <<"HepMC pileup objects added, eventNr "<setPileupPtr(shPtr); - crFrame_->addPileups(bcr,const_cast (shPtr->product()),eventNr); + crFrame_->addPileups(*shPtr->product()); } } diff --git a/SimGeneral/MixingModule/plugins/MixingWorker.h b/SimGeneral/MixingModule/plugins/MixingWorker.h index f355864d160b9..77378baf1abe9 100644 --- a/SimGeneral/MixingModule/plugins/MixingWorker.h +++ b/SimGeneral/MixingModule/plugins/MixingWorker.h @@ -117,8 +117,7 @@ namespace edm } } - - virtual void addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset); + virtual void addPileups(const EventPrincipal &ep, unsigned int eventNr); virtual void setBcrOffset() {crFrame_->setBcrOffset();} virtual void setSourceOffset(const unsigned int s) {crFrame_->setSourceOffset(s);} @@ -151,23 +150,20 @@ namespace edm PCrossingFrame * secSourceCF_; }; -//=============== template specializations ==================================================================================== - -template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset); - -template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset); - -template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset); - -template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal& ep, unsigned int eventNr,int vertexoffset); + template + void MixingWorker::addPileups(const EventPrincipal &ep, unsigned int eventNr) { + boost::shared_ptr > const> shPtr = getProductByTag >(ep, tag_); + if (shPtr) { + LogDebug("MixingModule") << shPtr->product()->size() << " pileup objects added, eventNr " << eventNr; + crFrame_->setPileupPtr(shPtr); + crFrame_->addPileups(*shPtr->product()); + } + } +//=============== template specializations ==================================================================================== template <> - void MixingWorker::addPileups(const int bcr, const EventPrincipal &ep, unsigned int eventNr,int vertexoffset); - + void MixingWorker::addPileups(const EventPrincipal &ep, unsigned int eventNr); + template void MixingWorker::setTof() {;} diff --git a/SimGeneral/MixingModule/plugins/MixingWorkerBase.h b/SimGeneral/MixingModule/plugins/MixingWorkerBase.h index 99856154f7347..1f03dce2a1f94 100644 --- a/SimGeneral/MixingModule/plugins/MixingWorkerBase.h +++ b/SimGeneral/MixingModule/plugins/MixingWorkerBase.h @@ -39,8 +39,8 @@ namespace edm virtual bool checkSignal(const edm::Event &e)=0; virtual void createnewEDProduct()=0; virtual void addSignals(const edm::Event &e) =0; - virtual void addPileups(const int bcr, const edm::EventPrincipal&, - unsigned int EventNr, int vertexOffset=0)=0; + virtual void addPileups(const edm::EventPrincipal&, + unsigned int EventNr)=0; virtual void setBcrOffset()=0; virtual void setSourceOffset(const unsigned int s)=0; virtual void setTof()=0; diff --git a/SimGeneral/MixingModule/python/digitizers_cfi.py b/SimGeneral/MixingModule/python/digitizers_cfi.py new file mode 100644 index 0000000000000..15d413729c64c --- /dev/null +++ b/SimGeneral/MixingModule/python/digitizers_cfi.py @@ -0,0 +1,54 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.aliases_cfi import * +from SimGeneral.MixingModule.pixelDigitizer_cfi import * +from SimGeneral.MixingModule.stripDigitizer_cfi import * +from SimGeneral.MixingModule.ecalDigitizer_cfi import * +from SimGeneral.MixingModule.hcalDigitizer_cfi import * +from SimGeneral.MixingModule.castorDigitizer_cfi import * +from SimGeneral.MixingModule.trackingTruthProducer_cfi import * + +theDigitizers = cms.PSet( + pixel = cms.PSet( + pixelDigitizer + ), + strip = cms.PSet( + stripDigitizer + ), + ecal = cms.PSet( + ecalDigitizer + ), + hcal = cms.PSet( + hcalDigitizer + ), + castor = cms.PSet( + castorDigitizer + ) +) + +theDigitizersValid = cms.PSet( + pixel = cms.PSet( + pixelDigitizer + ), + strip = cms.PSet( + stripDigitizer + ), + ecal = cms.PSet( + ecalDigitizer + ), + hcal = cms.PSet( + hcalDigitizer + ), + castor = cms.PSet( + castorDigitizer + ), + mergedtruth = cms.PSet( + trackingParticles + ) +) + + + + + diff --git a/SimGeneral/MixingModule/python/fullMixCustomize_cff.py b/SimGeneral/MixingModule/python/fullMixCustomize_cff.py new file mode 100644 index 0000000000000..e32f609875110 --- /dev/null +++ b/SimGeneral/MixingModule/python/fullMixCustomize_cff.py @@ -0,0 +1,45 @@ +import FWCore.ParameterSet.Config as cms + +def setCrossingFrameOn(process): + + process.mix.mixObjects.mixCH.crossingFrames = cms.untracked.vstring( + 'CaloHitsTk', + 'CastorBU', + 'CastorFI', + 'CastorPL', + 'CastorTU', + 'EcalHitsEB', + 'EcalHitsEE', + 'EcalHitsES', + 'EcalTBH4BeamHits', + 'HcalHits', + 'HcalTB06BeamHits', + 'ZDCHITS') + + process.mix.mixObjects.mixTracks.makeCrossingFrame = cms.untracked.bool(True) + process.mix.mixObjects.mixVertices.makeCrossingFrame = cms.untracked.bool(True) + process.mix.mixObjects.mixHepMC.makeCrossingFrame = cms.untracked.bool(True) + + process.mix.mixObjects.mixSH.crossingFrames = cms.untracked.vstring( + 'BSCHits', + 'FP420SI', + 'MuonCSCHits', + 'MuonDTHits', + 'MuonRPCHits', + 'TotemHitsRP', + 'TotemHitsT1', + 'TotemHitsT2Gem', + 'TrackerHitsPixelBarrelHighTof', + 'TrackerHitsPixelBarrelLowTof', + 'TrackerHitsPixelEndcapHighTof', + 'TrackerHitsPixelEndcapLowTof', + 'TrackerHitsTECHighTof', + 'TrackerHitsTECLowTof', + 'TrackerHitsTIBHighTof', + 'TrackerHitsTIBLowTof', + 'TrackerHitsTIDHighTof', + 'TrackerHitsTIDLowTof', + 'TrackerHitsTOBHighTof', + 'TrackerHitsTOBLowTof') + + return(process) diff --git a/SimGeneral/MixingModule/python/mixHighLumPU_4sources_cfi.py b/SimGeneral/MixingModule/python/mixHighLumPU_4sources_cfi.py index c5423d7b1fced..45b20eb47d267 100644 --- a/SimGeneral/MixingModule/python/mixHighLumPU_4sources_cfi.py +++ b/SimGeneral/MixingModule/python/mixHighLumPU_4sources_cfi.py @@ -12,37 +12,12 @@ # # we have put minbias files for all the sources, just as an example # -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in units of 25 nsec @@ -110,23 +85,7 @@ '/store/relval/CMSSW_2_1_10/RelValMinBias/GEN-SIM-DIGI-RAW-HLTDEBUG/STARTUP_V7_v2/0000/8802D325-5E99-DD11-B858-000423D98A44.root') ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixHighLumPU_cfi.py b/SimGeneral/MixingModule/python/mixHighLumPU_cfi.py index 736a384bf9856..df5c90602eb23 100644 --- a/SimGeneral/MixingModule/python/mixHighLumPU_cfi.py +++ b/SimGeneral/MixingModule/python/mixHighLumPU_cfi.py @@ -5,37 +5,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -56,23 +31,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixInitialLumPU_4sources_cfi.py b/SimGeneral/MixingModule/python/mixInitialLumPU_4sources_cfi.py index fb5158176a2ee..0995f338e3583 100644 --- a/SimGeneral/MixingModule/python/mixInitialLumPU_4sources_cfi.py +++ b/SimGeneral/MixingModule/python/mixInitialLumPU_4sources_cfi.py @@ -10,30 +10,11 @@ # or you can replace the type by "none" for a source you dont want # please note that the names of the input sources are fixed: 'input', 'cosmics', 'beamhalo_minus', 'beamhalo_plus' # -from SimGeneral.MixingModule.aliases_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * + mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in units of 25 nsec @@ -103,23 +84,7 @@ '/store/relval/CMSSW_2_1_10/RelValMinBias/GEN-SIM-DIGI-RAW-HLTDEBUG/STARTUP_V7_v2/0000/8802D325-5E99-DD11-B858-000423D98A44.root') ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixInitialLumPU_cfi.py b/SimGeneral/MixingModule/python/mixInitialLumPU_cfi.py index 9f26b462269be..deb1ed28adc4b 100644 --- a/SimGeneral/MixingModule/python/mixInitialLumPU_cfi.py +++ b/SimGeneral/MixingModule/python/mixInitialLumPU_cfi.py @@ -5,37 +5,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 nsec @@ -56,23 +31,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixLowLumPU_4sources_cfi.py b/SimGeneral/MixingModule/python/mixLowLumPU_4sources_cfi.py index 7a191805a8311..e928d5e09aa7f 100644 --- a/SimGeneral/MixingModule/python/mixLowLumPU_4sources_cfi.py +++ b/SimGeneral/MixingModule/python/mixLowLumPU_4sources_cfi.py @@ -10,30 +10,11 @@ # or you can replace the type by "none" for a source you dont want # please note that the names of the input sources are fixed: 'input', 'cosmics', 'beamhalo_minus', 'beamhalo_plus' # -from SimGeneral.MixingModule.aliases_cfi import * from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in units of 25 nsec @@ -100,23 +81,7 @@ '/store/relval/CMSSW_2_1_10/RelValMinBias/GEN-SIM-DIGI-RAW-HLTDEBUG/STARTUP_V7_v2/0000/68ECAE92-5F99-DD11-ACAB-000423D98E6C.root', '/store/relval/CMSSW_2_1_10/RelValMinBias/GEN-SIM-DIGI-RAW-HLTDEBUG/STARTUP_V7_v2/0000/8802D325-5E99-DD11-B858-000423D98A44.root') ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixLowLumPU_cfi.py b/SimGeneral/MixingModule/python/mixLowLumPU_cfi.py index a618d7c404c0b..df70737352de0 100644 --- a/SimGeneral/MixingModule/python/mixLowLumPU_cfi.py +++ b/SimGeneral/MixingModule/python/mixLowLumPU_cfi.py @@ -5,37 +5,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup in the low-luminosity phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -56,23 +31,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixNoPU_cfi.py b/SimGeneral/MixingModule/python/mixNoPU_cfi.py index 20b9a52dda091..66cac8f790fdf 100644 --- a/SimGeneral/MixingModule/python/mixNoPU_cfi.py +++ b/SimGeneral/MixingModule/python/mixNoPU_cfi.py @@ -3,37 +3,12 @@ # this is a minimum configuration of the Mixing module, # to run it in the zero-pileup mode # -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -44,23 +19,7 @@ playback = cms.untracked.bool(False), useCurrentProcessOnly = cms.bool(False), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mixObjects_cfi.py b/SimGeneral/MixingModule/python/mixObjects_cfi.py index 6c756d81b95ca..653c07a76a86d 100644 --- a/SimGeneral/MixingModule/python/mixObjects_cfi.py +++ b/SimGeneral/MixingModule/python/mixObjects_cfi.py @@ -28,26 +28,9 @@ 'TrackerHitsTOBHighTof', 'TrackerHitsTOBLowTof'), crossingFrames = cms.untracked.vstring( - 'BSCHits', - 'FP420SI', 'MuonCSCHits', 'MuonDTHits', - 'MuonRPCHits', - 'TotemHitsRP', - 'TotemHitsT1', - 'TotemHitsT2Gem', - 'TrackerHitsPixelBarrelHighTof', - 'TrackerHitsPixelBarrelLowTof', - 'TrackerHitsPixelEndcapHighTof', - 'TrackerHitsPixelEndcapLowTof', - 'TrackerHitsTECHighTof', - 'TrackerHitsTECLowTof', - 'TrackerHitsTIBHighTof', - 'TrackerHitsTIBLowTof', - 'TrackerHitsTIDHighTof', - 'TrackerHitsTIDLowTof', - 'TrackerHitsTOBHighTof', - 'TrackerHitsTOBLowTof'), + 'MuonRPCHits'), #crossingFrames = cms.untracked.vstring( # 'BSCHits', # 'FP420SI', @@ -76,39 +59,43 @@ 'HcalHits', 'HcalTB06BeamHits', 'ZDCHITS'), - crossingFrames = cms.untracked.vstring( - 'CaloHitsTk', - 'CastorBU', - 'CastorFI', - 'CastorPL', - 'CastorTU', - 'EcalHitsEB', - 'EcalHitsEE', - 'EcalHitsES', - 'EcalTBH4BeamHits', - 'HcalHits', - 'HcalTB06BeamHits', - 'ZDCHITS') + crossingFrames = cms.untracked.vstring() ) mixSimTracks = cms.PSet( - #makeCrossingFrame = cms.untracked.bool(False), - makeCrossingFrame = cms.untracked.bool(True), + makeCrossingFrame = cms.untracked.bool(False), input = cms.VInputTag(cms.InputTag("g4SimHits")), type = cms.string('SimTrack') ) mixSimVertices = cms.PSet( - #makeCrossingFrame = cms.untracked.bool(False), - makeCrossingFrame = cms.untracked.bool(True), + makeCrossingFrame = cms.untracked.bool(False), input = cms.VInputTag(cms.InputTag("g4SimHits")), type = cms.string('SimVertex') ) mixHepMCProducts = cms.PSet( - #makeCrossingFrame = cms.untracked.bool(False), - makeCrossingFrame = cms.untracked.bool(True), + makeCrossingFrame = cms.untracked.bool(False), input = cms.VInputTag(cms.InputTag("generator")), type = cms.string('HepMCProduct') ) +theMixObjects = cms.PSet( + mixCH = cms.PSet( + mixCaloHits + ), + mixTracks = cms.PSet( + mixSimTracks + ), + mixVertices = cms.PSet( + mixSimVertices + ), + mixSH = cms.PSet( + mixSimHits + ), + mixHepMC = cms.PSet( + mixHepMCProducts + ) +) + + mixPCFSimHits = cms.PSet( input = cms.VInputTag(cms.InputTag("CFWriter","g4SimHitsBSCHits"), cms.InputTag("CFWriter","g4SimHitsFP420SI"), cms.InputTag("CFWriter","g4SimHitsMuonCSCHits"), cms.InputTag("CFWriter","g4SimHitsMuonDTHits"), cms.InputTag("CFWriter","g4SimHitsMuonRPCHits"), cms.InputTag("CFWriter","g4SimHitsTotemHitsRP"), cms.InputTag("CFWriter","g4SimHitsTotemHitsT1"), cms.InputTag("CFWriter","g4SimHitsTotemHitsT2Gem"), cms.InputTag("CFWriter","g4SimHitsTrackerHitsPixelBarrelHighTof"), cms.InputTag("CFWriter","g4SimHitsTrackerHitsPixelBarrelLowTof"), diff --git a/SimGeneral/MixingModule/python/mix_2012_Startup_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_2012_Startup_50ns_PoissonOOTPU_cfi.py index aa5c2b272a930..b0fd564feb461 100644 --- a/SimGeneral/MixingModule/python/mix_2012_Startup_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_2012_Startup_50ns_PoissonOOTPU_cfi.py @@ -1,38 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -121,23 +95,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_2012_Summer_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_2012_Summer_50ns_PoissonOOTPU_cfi.py index 017c2d71e2d76..9256cab498813 100644 --- a/SimGeneral/MixingModule/python/mix_2012_Summer_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_2012_Summer_50ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -120,23 +95,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_2012_lumiLevel_15_20_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_2012_lumiLevel_15_20_50ns_PoissonOOTPU_cfi.py index e3e0bfa59591a..cf7a4dc0ee9ea 100644 --- a/SimGeneral/MixingModule/python/mix_2012_lumiLevel_15_20_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_2012_lumiLevel_15_20_50ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -86,23 +61,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_2012_peak11_25ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_2012_peak11_25ns_PoissonOOTPU_cfi.py index a310d69c0f39c..a1b0678b37efe 100644 --- a/SimGeneral/MixingModule/python/mix_2012_peak11_25ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_2012_peak11_25ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(4), minBunch = cms.int32(-4), ## in terms of 25 nsec @@ -82,23 +57,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_2012_peak26_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_2012_peak26_50ns_PoissonOOTPU_cfi.py index 573877eec7bae..dad6f78c4c378 100644 --- a/SimGeneral/MixingModule/python/mix_2012_peak26_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_2012_peak26_50ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -97,23 +72,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_1_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_FIX_1_BX432_cfi.py deleted file mode 100644 index 875055048a5f6..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_1_BX432_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 ns - - bunchspace = cms.int32(50), ## ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(1.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_2_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_FIX_2_BX432_cfi.py deleted file mode 100644 index 45e5fdbd830e2..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_2_BX432_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 ns - - bunchspace = cms.int32(50), ## ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_3_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_FIX_3_BX432_cfi.py deleted file mode 100644 index a2891db463f4b..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_3_BX432_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 ns - - bunchspace = cms.int32(50), ## ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(3.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_5_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_FIX_5_BX432_cfi.py deleted file mode 100644 index 66e97934ea9d1..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E10TeV_FIX_5_BX432_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 ns - - bunchspace = cms.int32(50), ## ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(5.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_L13E31_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_L13E31_BX432_cfi.py index 7c5cf52f5d0e3..95d86274802f7 100644 --- a/SimGeneral/MixingModule/python/mix_E10TeV_L13E31_BX432_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E10TeV_L13E31_BX432_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E10TeV_L21E31_BX432_cfi.py b/SimGeneral/MixingModule/python/mix_E10TeV_L21E31_BX432_cfi.py index 3cc2b7880ce73..eaaca8f37c2b4 100644 --- a/SimGeneral/MixingModule/python/mix_E10TeV_L21E31_BX432_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E10TeV_L21E31_BX432_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E14TeV_L10E33_BX2808_cfi.py b/SimGeneral/MixingModule/python/mix_E14TeV_L10E33_BX2808_cfi.py index 209eaaaf74993..bebfc016f8783 100644 --- a/SimGeneral/MixingModule/python/mix_E14TeV_L10E33_BX2808_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E14TeV_L10E33_BX2808_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E14TeV_L28E32_BX2808_cfi.py b/SimGeneral/MixingModule/python/mix_E14TeV_L28E32_BX2808_cfi.py index 23e2be69e6cd9..f77080f264329 100644 --- a/SimGeneral/MixingModule/python/mix_E14TeV_L28E32_BX2808_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E14TeV_L28E32_BX2808_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # this is the configuration to model pileup for final scheme -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_1_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_1_BX156_cfi.py deleted file mode 100644 index 3436109dea5a8..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_1_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(1.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BX_50ns_cfi.py deleted file mode 100644 index ea43dce0320f5..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BX_50ns_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(2), - minBunch = cms.int32(-3), ## in 50ns spacing, go 150ns into past - - bunchspace = cms.int32(50), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.8) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BXgt50ns_intime_only_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BXgt50ns_intime_only_cfi.py deleted file mode 100644 index 0f49433a7266a..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_8_BXgt50ns_intime_only_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(0), ## only look in-time, at bunch 0 - minBunch = cms.int32(0), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.8) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX156_cfi.py deleted file mode 100644 index e253a999baa12..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX2808_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX2808_cfi.py deleted file mode 100644 index 86b4e0748a466..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_2_BX2808_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(25), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_3_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_3_BX156_cfi.py deleted file mode 100644 index 77c25b5928da9..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_3_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(3.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_5_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_AVE_5_BX156_cfi.py deleted file mode 100644 index 1ab5852498ccb..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_AVE_5_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(5.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Ave18p4_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Ave18p4_50ns_cfi.py deleted file mode 100644 index db29ef1a9df7a..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Ave18p4_50ns_cfi.py +++ /dev/null @@ -1,71 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-2), # in terms of 25 nsec - - bunchspace = cms.int32(50), # ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - type = cms.string('poisson'), - nbPileupEvents = cms.PSet( - averageNumber = cms.double(18.4) # corresponding to 4e33 luminosity - ), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_25ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_25ns_PoissonOOTPU_cfi.py index 84e30e09bacbc..2b6c2b49c5816 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_25ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_25ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(5), minBunch = cms.int32(-3), ## in terms of 25 nsec @@ -111,23 +86,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_50ns_PoissonOOTPU_cfi.py index c01565f1f759c..95bbee9f37b61 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Ave25_50ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -111,23 +86,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Chamonix2012_50ns_PoissonOOT_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Chamonix2012_50ns_PoissonOOT_cfi.py index c40a809f5fc51..815b737af829a 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Chamonix2012_50ns_PoissonOOT_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Chamonix2012_50ns_PoissonOOT_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for Chamonix 2012 studies -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -62,23 +37,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_1_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FIX_1_BX156_cfi.py deleted file mode 100644 index df10e903e9187..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_1_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(1.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_2_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FIX_2_BX156_cfi.py deleted file mode 100644 index 50e6a21a71f2c..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_2_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(2.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_3_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FIX_3_BX156_cfi.py deleted file mode 100644 index 7691036895e4a..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_3_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(3.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_5_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FIX_5_BX156_cfi.py deleted file mode 100644 index d23efba3330fb..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FIX_5_BX156_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(450), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(5.0) - ), - type = cms.string('fixed'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Fall2011_Reprocess_50ns_PoissonOOTPU_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Fall2011_Reprocess_50ns_PoissonOOTPU_cfi.py index faf5d5ef644e6..b8f6bb9df6ea5 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Fall2011_Reprocess_50ns_PoissonOOTPU_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Fall2011_Reprocess_50ns_PoissonOOTPU_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -111,23 +86,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_50ns_cfi.py index 713564fb9ba8c..2f06d5b9a6390 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_50ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_50ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(-2), ## all bunches come 75 ns early minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_75ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_75ns_cfi.py index ad21ce5595d68..abca32b0ede23 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_75ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllEarly_75ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(-3), ## all bunches come 75 ns early minBunch = cms.int32(-3), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_50ns_cfi.py index 2ff7d629c874a..80ff986f52e8b 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_50ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_50ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(2), ## all bunches come 75 ns late minBunch = cms.int32(2), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_75ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_75ns_cfi.py index 0ac6afc34154d..c8ac2eda7744f 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_75ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Flat20_AllLate_75ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), ## all bunches come 75 ns late minBunch = cms.int32(3), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT_cfi.py index 45697e9dec2cb..b830016964146 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_25ns_PoissonOOT_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(5), minBunch = cms.int32(-3), ## in terms of 25 nsec @@ -60,23 +35,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT.py b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT.py index f20ad8ec9f089..f24d94cbe8a0e 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_PoissonOOT.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -60,23 +35,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_cfi.py index d44e93782b350..8393d78c6c009 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_50ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_75ns_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_75ns_cfi.py index d15e3241bec08..a144540206b00 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_75ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_75ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -53,23 +28,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_inTimeOnly_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_inTimeOnly_cfi.py index 91c831eed4a15..d92344e72836d 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_inTimeOnly_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_FlatDist10_2011EarlyData_inTimeOnly_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(0), minBunch = cms.int32(0), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_L34E30_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_L34E30_BX156_cfi.py index a76a5a384072a..33519e1a91940 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_L34E30_BX156_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_L34E30_BX156_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 nsec @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_L69E30_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_L69E30_BX156_cfi.py index 70dfa5c25e11e..8214a4efe18cf 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_L69E30_BX156_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_L69E30_BX156_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-5), ## in terms of 25 nsec @@ -52,23 +27,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_ProbDist_2010Data_BX156_cfi.py b/SimGeneral/MixingModule/python/mix_E7TeV_ProbDist_2010Data_BX156_cfi.py index 5a6bf72e61117..c4a7635d9046c 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_ProbDist_2010Data_BX156_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_ProbDist_2010Data_BX156_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(0), minBunch = cms.int32(0), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E7TeV_Summer_2011_50ns_PoissonOOT.py b/SimGeneral/MixingModule/python/mix_E7TeV_Summer_2011_50ns_PoissonOOT.py index b7c475d7b693c..9c7eb143db4c3 100644 --- a/SimGeneral/MixingModule/python/mix_E7TeV_Summer_2011_50ns_PoissonOOT.py +++ b/SimGeneral/MixingModule/python/mix_E7TeV_Summer_2011_50ns_PoissonOOT.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -61,23 +36,7 @@ #intFixed_OOT = cms.untracked.int32(2), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_10_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_AVE_10_BX_50ns_cfi.py deleted file mode 100644 index f242e2449d69d..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_10_BX_50ns_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(2), - minBunch = cms.int32(-3), ## in 50ns spacing, go 150ns into past - - bunchspace = cms.int32(50), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(10.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_25ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_25ns_cfi.py deleted file mode 100644 index 814c759d2b4f7..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_25ns_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(3), - minBunch = cms.int32(-5), ## in terms of 25 nsec - - bunchspace = cms.int32(25), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(16.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_50ns_cfi.py deleted file mode 100644 index 0b1e3068112e9..0000000000000 --- a/SimGeneral/MixingModule/python/mix_E8TeV_AVE_16_BX_50ns_cfi.py +++ /dev/null @@ -1,73 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -# configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * -from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * - -mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), - LabelPlayback = cms.string(''), - maxBunch = cms.int32(2), - minBunch = cms.int32(-3), ## in 50ns spacing, go 150ns into past - - bunchspace = cms.int32(50), ##ns - mixProdStep1 = cms.bool(False), - mixProdStep2 = cms.bool(False), - - playback = cms.untracked.bool(False), - useCurrentProcessOnly = cms.bool(False), - - input = cms.SecSource("PoolSource", - nbPileupEvents = cms.PSet( - averageNumber = cms.double(16.0) - ), - type = cms.string('poisson'), - sequential = cms.untracked.bool(False), - fileNames = FileNames - ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) -) - - diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_FlatDist_2011EarlyData_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_FlatDist_2011EarlyData_50ns_cfi.py index a8f4827f8b5aa..395a75100ca0c 100644 --- a/SimGeneral/MixingModule/python/mix_E8TeV_FlatDist_2011EarlyData_50ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E8TeV_FlatDist_2011EarlyData_50ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_ProbDist_2011EarlyData_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_ProbDist_2011EarlyData_50ns_cfi.py index b6c03bbf5a97b..29e4b6560957b 100644 --- a/SimGeneral/MixingModule/python/mix_E8TeV_ProbDist_2011EarlyData_50ns_cfi.py +++ b/SimGeneral/MixingModule/python/mix_E8TeV_ProbDist_2011EarlyData_50ns_cfi.py @@ -1,37 +1,12 @@ import FWCore.ParameterSet.Config as cms # configuration to model pileup for initial physics phase -from SimGeneral.MixingModule.aliases_cfi import * -from SimGeneral.MixingModule.mixObjects_cfi import * +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects from SimGeneral.MixingModule.mixPoolSource_cfi import * -from SimGeneral.MixingModule.pixelDigitizer_cfi import * -from SimGeneral.MixingModule.stripDigitizer_cfi import * -from SimGeneral.MixingModule.ecalDigitizer_cfi import * -from SimGeneral.MixingModule.hcalDigitizer_cfi import * -from SimGeneral.MixingModule.castorDigitizer_cfi import * -from SimGeneral.MixingModule.trackingTruthProducer_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * mix = cms.EDProducer("MixingModule", - digitizers = cms.PSet( - pixel = cms.PSet( - pixelDigitizer - ), - strip = cms.PSet( - stripDigitizer - ), - ecal = cms.PSet( - ecalDigitizer - ), - hcal = cms.PSet( - hcalDigitizer - ), - castor = cms.PSet( - castorDigitizer - ), - mergedtruth = cms.PSet( - trackingParticles - ) - ), + digitizers = cms.PSet(theDigitizers), LabelPlayback = cms.string(''), maxBunch = cms.int32(3), minBunch = cms.int32(-2), ## in terms of 25 nsec @@ -54,23 +29,7 @@ sequential = cms.untracked.bool(False), fileNames = FileNames ), - mixObjects = cms.PSet( - mixCH = cms.PSet( - mixCaloHits - ), - mixTracks = cms.PSet( - mixSimTracks - ), - mixVertices = cms.PSet( - mixSimVertices - ), - mixSH = cms.PSet( - mixSimHits - ), - mixHepMC = cms.PSet( - mixHepMCProducts - ) - ) + mixObjects = cms.PSet(theMixObjects) ) diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_run198588_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_run198588_BX_50ns_cfi.py new file mode 100644 index 0000000000000..9676eed63f957 --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_E8TeV_run198588_BX_50ns_cfi.py @@ -0,0 +1,87 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(0), + minBunch = cms.int32(0), ## in 50ns spacing, go 150ns into past + + bunchspace = cms.int32(50), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + type = cms.string('probFunction'), + nbPileupEvents = cms.PSet( + probFunctionVariable = cms.vint32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45), + probValue = cms.vdouble( + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.0397281, + 0.294024, + 0.301409, + 0.226158, + 0.138681, + 0), + histoFileName = cms.untracked.string('histProbFunction.root'), + ), + sequential = cms.untracked.bool(False), + manage_OOT = cms.untracked.bool(True), ## manage out-of-time pileup + ## setting this to True means that the out-of-time pileup + ## will have a different distribution than in-time, given + ## by what is described on the next line: + OOT_type = cms.untracked.string('Poisson'), ## generate OOT with a Poisson matching the number chosen for in-time + #OOT_type = cms.untracked.string('fixed'), ## generate OOT with a fixed distribution + #intFixed_OOT = cms.untracked.int32(2), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_run203002_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_run203002_BX_50ns_cfi.py new file mode 100644 index 0000000000000..869052a1b29a0 --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_E8TeV_run203002_BX_50ns_cfi.py @@ -0,0 +1,87 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(3), + minBunch = cms.int32(-12), ## in 50ns spacing, go 150ns into past + + bunchspace = cms.int32(50), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + type = cms.string('probFunction'), + nbPileupEvents = cms.PSet( + probFunctionVariable = cms.vint32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45), + probValue = cms.vdouble( + 0, + 0, + 0, + 0, + 0, + 9.66474e-17, + 1.21114e-12, + 2.94126e-09, + 1.44281e-06, + 0.000151792, + 0.00376088, + 0.0254935, + 0.0610745, + 0.0769054, + 0.076596, + 0.0737104, + 0.0720484, + 0.0702428, + 0.065689, + 0.0601684, + 0.05682, + 0.0557221, + 0.0551615, + 0.0541009, + 0.051686, + 0.0460924, + 0.0368461, + 0.0261355, + 0.0164099, + 0.0089456, + 0.00410306, + 0.00153858, + 0.000462258, + 0.000109812, + 2.04474e-05, + 2.96742e-06, + 3.34444e-07, + 2.9214e-08, + 1.97586e-09, + 1.03436e-10, + 4.19123e-12, + 1.31456e-13, + 3.19116e-15, + 5.99601e-17, + 8.75296e-19, + 0), + histoFileName = cms.untracked.string('histProbFunction.root'), + ), + sequential = cms.untracked.bool(False), + manage_OOT = cms.untracked.bool(True), ## manage out-of-time pileup + ## setting this to True means that the out-of-time pileup + ## will have a different distribution than in-time, given + ## by what is described on the next line: + OOT_type = cms.untracked.string('Poisson'), ## generate OOT with a Poisson matching the number chosen for in-time + #OOT_type = cms.untracked.string('fixed'), ## generate OOT with a fixed distribution + #intFixed_OOT = cms.untracked.int32(2), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_run209148_BX_25ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_run209148_BX_25ns_cfi.py new file mode 100644 index 0000000000000..29f6176575853 --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_E8TeV_run209148_BX_25ns_cfi.py @@ -0,0 +1,62 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(3), + minBunch = cms.int32(-12), ## in terms of 25 nsec + + bunchspace = cms.int32(25), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + type = cms.string('probFunction'), + nbPileupEvents = cms.PSet( + probFunctionVariable = cms.vint32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20), + probValue = cms.vdouble( + 1.92747e-08, + 1.62702e-06, + 7.42292e-05, + 0.0017137, + 0.0191414, + 0.101638, + 0.258023, + 0.322184, + 0.207559, + 0.0730289, + 0.0147525, + 0.0017561, + 0.000123411, + 5.07434e-06, + 1.20848e-07, + 1.6531e-09, + 1.29003e-11, + 5.7105e-14, + 1.42153e-16, + 0, + 0), + histoFileName = cms.untracked.string('histProbFunction.root'), + ), + sequential = cms.untracked.bool(False), + manage_OOT = cms.untracked.bool(True), ## manage out-of-time pileup + ## setting this to True means that the out-of-time pileup + ## will have a different distribution than in-time, given + ## by what is described on the next line: + OOT_type = cms.untracked.string('Poisson'), ## generate OOT with a Poisson matching the number chosen for in-time + #OOT_type = cms.untracked.string('fixed'), ## generate OOT with a fixed distribution + #intFixed_OOT = cms.untracked.int32(2), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/mix_E8TeV_zmmg_skim_BX_50ns_cfi.py b/SimGeneral/MixingModule/python/mix_E8TeV_zmmg_skim_BX_50ns_cfi.py new file mode 100644 index 0000000000000..4d6f941838e02 --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_E8TeV_zmmg_skim_BX_50ns_cfi.py @@ -0,0 +1,97 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(3), + minBunch = cms.int32(-12), ## in 50ns spacing, go 150ns into past + + bunchspace = cms.int32(50), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + type = cms.string('probFunction'), + nbPileupEvents = cms.PSet( + probFunctionVariable = cms.vint32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55), + probValue = cms.vdouble( + 2.22595e-08, + 2.00205e-07, + 1.64416e-06, + 1.14116e-05, + 6.40739e-05, + 0.000284833, + 0.000994025, + 0.00272863, + 0.00613133, + 0.0135242, + 0.0322459, + 0.0601265, + 0.0778966, + 0.0818541, + 0.0798978, + 0.0752475, + 0.0687418, + 0.0636304, + 0.0604193, + 0.0571488, + 0.0537445, + 0.050468, + 0.0470076, + 0.04297, + 0.0377791, + 0.0310346, + 0.0231801, + 0.0154523, + 0.00910777, + 0.00473839, + 0.00218447, + 0.000898356, + 0.000331497, + 0.000110006, + 3.27802e-05, + 8.75341e-06, + 2.1002e-06, + 4.58968e-07, + 9.41886e-08, + 1.90252e-08, + 3.95869e-09, + 8.60669e-10, + 1.91046e-10, + 4.18017e-11, + 8.78577e-12, + 1.74995e-12, + 3.28416e-13, + 5.79467e-14, + 9.60488e-15, + 1.49505e-15, + 2.18539e-16, + 2.99303e-17, + 3.87579e-18, + 4.53878e-19, + 3.6847e-20, + 0), + histoFileName = cms.untracked.string('histProbFunction.root'), + ), + sequential = cms.untracked.bool(False), + manage_OOT = cms.untracked.bool(True), ## manage out-of-time pileup + ## setting this to True means that the out-of-time pileup + ## will have a different distribution than in-time, given + ## by what is described on the next line: + OOT_type = cms.untracked.string('Poisson'), ## generate OOT with a Poisson matching the number chosen for in-time + #OOT_type = cms.untracked.string('fixed'), ## generate OOT with a fixed distribution + #intFixed_OOT = cms.untracked.int32(2), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/mix_FIX_average_cfi.py b/SimGeneral/MixingModule/python/mix_FIX_average_cfi.py new file mode 100644 index 0000000000000..8c1c4d798dacd --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_FIX_average_cfi.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(3), + minBunch = cms.int32(-5), ## in terms of 25 nsec + + bunchspace = cms.int32(450), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + nbPileupEvents = cms.PSet( + averageNumber = cms.double(1.0) + ), + type = cms.string('fixed'), + sequential = cms.untracked.bool(False), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/mix_POISSON_average_cfi.py b/SimGeneral/MixingModule/python/mix_POISSON_average_cfi.py new file mode 100644 index 0000000000000..82b7400c3bfb8 --- /dev/null +++ b/SimGeneral/MixingModule/python/mix_POISSON_average_cfi.py @@ -0,0 +1,32 @@ +import FWCore.ParameterSet.Config as cms + +# configuration to model pileup for initial physics phase +from SimGeneral.MixingModule.mixObjects_cfi import theMixObjects +from SimGeneral.MixingModule.mixPoolSource_cfi import * +from SimGeneral.MixingModule.digitizers_cfi import * + +mix = cms.EDProducer("MixingModule", + digitizers = cms.PSet(theDigitizers), + LabelPlayback = cms.string(''), + maxBunch = cms.int32(3), + minBunch = cms.int32(-5), ## in terms of 25 nsec + + bunchspace = cms.int32(450), ##ns + mixProdStep1 = cms.bool(False), + mixProdStep2 = cms.bool(False), + + playback = cms.untracked.bool(False), + useCurrentProcessOnly = cms.bool(False), + + input = cms.SecSource("PoolSource", + nbPileupEvents = cms.PSet( + averageNumber = cms.double(1.0) + ), + type = cms.string('poisson'), + sequential = cms.untracked.bool(False), + fileNames = FileNames + ), + mixObjects = cms.PSet(theMixObjects) +) + + diff --git a/SimGeneral/MixingModule/python/trackingTruthProducer_cfi.py b/SimGeneral/MixingModule/python/trackingTruthProducer_cfi.py index f5fe1efbc1a1d..eb53674f292c8 100644 --- a/SimGeneral/MixingModule/python/trackingTruthProducer_cfi.py +++ b/SimGeneral/MixingModule/python/trackingTruthProducer_cfi.py @@ -1,11 +1,12 @@ import FWCore.ParameterSet.Config as cms + trackingParticles = cms.PSet( accumulatorType = cms.string('TrackingTruthAccumulator'), - createUnmergedCollection = cms.bool(True), + createUnmergedCollection = cms.bool(False), createMergedBremsstrahlung = cms.bool(True), alwaysAddAncestors = cms.bool(True), - maximumPreviousBunchCrossing = cms.uint32(9999), + maximumPreviousBunchCrossing = cms.uint32(5), maximumSubsequentBunchCrossing = cms.uint32(9999), simHitCollections = cms.PSet( muon = cms.VInputTag( cms.InputTag('g4SimHits','MuonDTHits'), diff --git a/SimGeneral/MixingModule/src/PileUpEventPrincipal.cc b/SimGeneral/MixingModule/src/PileUpEventPrincipal.cc deleted file mode 100644 index 84f4c5916b8fe..0000000000000 --- a/SimGeneral/MixingModule/src/PileUpEventPrincipal.cc +++ /dev/null @@ -1,32 +0,0 @@ -#include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h" - -#include "SimDataFormats/CaloHit/interface/PCaloHit.h" -#include "SimDataFormats/TrackingHit/interface/PSimHit.h" -#include "SimDataFormats/Track/interface/SimTrack.h" -#include "SimDataFormats/Vertex/interface/SimVertex.h" - -template <> -void PileUpEventPrincipal::adjust(SimTrack& item) const { - item.setEventId(id_); - if(!item.noVertex()) { - item.setVertexIndex(item.vertIndex() + vertexOffset_); - } -} - -template <> -void PileUpEventPrincipal::adjust(SimVertex& item) const { - item.setEventId(id_); - item.setTof(item.position().t() + bunchCrossingXbunchSpace_); -} - -template <> -void PileUpEventPrincipal::adjust(PSimHit& item) const { - item.setEventId(id_); - item.setTof(item.timeOfFlight() + bunchCrossingXbunchSpace_); -} - -template <> -void PileUpEventPrincipal::adjust(PCaloHit& item) const { - item.setEventId(id_); - item.setTime(item.time() + bunchCrossingXbunchSpace_); -} diff --git a/SimGeneral/PileupInformation/interface/PileupInformation.h b/SimGeneral/PileupInformation/interface/PileupInformation.h index 23e50a650669b..a22f52951bc7b 100755 --- a/SimGeneral/PileupInformation/interface/PileupInformation.h +++ b/SimGeneral/PileupInformation/interface/PileupInformation.h @@ -9,7 +9,7 @@ #include "FWCore/Framework/interface/Event.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" diff --git a/SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h b/SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h new file mode 100644 index 0000000000000..2a80d676b1d52 --- /dev/null +++ b/SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h @@ -0,0 +1,34 @@ +#ifndef SimGeneral_TrackingAnalysis_SimHitTPAssociationProducer_h +#define SimGeneral_TrackingAnalysis_SimHitTPAssociationProducer_h + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetfwd.h" + +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" +#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" + +class SimHitTPAssociationProducer : public edm::EDProducer +{ +public: + + typedef std::pair SimHitTPPair; + typedef std::vector SimHitTPAssociationList; + + explicit SimHitTPAssociationProducer(const edm::ParameterSet&); + ~SimHitTPAssociationProducer(); + + static bool simHitTPAssociationListGreater(SimHitTPPair i,SimHitTPPair j) { return (i.first.key()>j.first.key()); } + +private: + virtual void beginJob() {} + virtual void produce(edm::Event&, const edm::EventSetup&); + virtual void endJob() {} + + std::vector _simHitSrc; + edm::InputTag _trackingParticleSrc; +}; +#endif diff --git a/SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h b/SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h new file mode 100755 index 0000000000000..7b3fefa9eb769 --- /dev/null +++ b/SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h @@ -0,0 +1,104 @@ +#ifndef RecoSelectors_TrackingParticleSelector_h +#define RecoSelectors_TrackingParticleSelector_h +/* \class TrackingParticleSelector + * + * \author Giuseppe Cerati, INFN + * + * $Date: 2013/06/24 12:25:14 $ + * $Revision: 1.7 $ + * + */ +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" + +class TrackingParticleSelector { + +public: + TrackingParticleSelector(){} + TrackingParticleSelector ( double ptMin,double minRapidity,double maxRapidity, + double tip,double lip,int minHit, bool signalOnly, bool chargedOnly, bool stableOnly, + std::vector pdgId = std::vector()) : + ptMin_( ptMin ), minRapidity_( minRapidity ), maxRapidity_( maxRapidity ), + tip_( tip ), lip_( lip ), minHit_( minHit ), signalOnly_(signalOnly), chargedOnly_(chargedOnly), stableOnly_(stableOnly), pdgId_( pdgId ) { } + + /// Operator() performs the selection: e.g. if (tPSelector(tp)) {...} + bool operator()( const TrackingParticle & tp ) const { + if (chargedOnly_ && tp.charge()==0) return false;//select only if charge!=0 + bool testId = false; + unsigned int idSize = pdgId_.size(); + if (idSize==0) testId = true; + else for (unsigned int it=0;it!=idSize;++it){ + if (tp.pdgId()==pdgId_[it]) testId = true; + } + bool signal = true; + if (signalOnly_) signal = (tp.eventId().bunchCrossing()== 0 && tp.eventId().event() == 0); // signal only means no PU particles + // select only stable particles + bool stable = true; + if (stableOnly_) { + if (!signal) { + stable = false; // we are not interested into PU particles among the stable ones + } else { + for( TrackingParticle::genp_iterator j = tp.genParticle_begin(); j != tp.genParticle_end(); ++ j ) { + if (j->get()==0 || j->get()->status() != 1) { + stable = 0; break; + } + } + // test for remaining unstabled due to lack of genparticle pointer + if(stable == 1 && tp.status() == -99 && + (fabs(tp.pdgId()) != 11 && fabs(tp.pdgId()) != 13 && fabs(tp.pdgId()) != 211 && + fabs(tp.pdgId()) != 321 && fabs(tp.pdgId()) != 2212 && fabs(tp.pdgId()) != 3112 && + fabs(tp.pdgId()) != 3222 && fabs(tp.pdgId()) != 3312 && fabs(tp.pdgId()) != 3334)) stable = 0; + } + } + return ( + tp.numberOfTrackerLayers() >= minHit_ && + sqrt(tp.momentum().perp2()) >= ptMin_ && + tp.momentum().eta() >= minRapidity_ && tp.momentum().eta() <= maxRapidity_ && + sqrt(tp.vertex().perp2()) <= tip_ && + fabs(tp.vertex().z()) <= lip_ && + testId && + signal && + stable + ); + } + +private: + double ptMin_; + double minRapidity_; + double maxRapidity_; + double tip_; + double lip_; + int minHit_; + bool signalOnly_; + bool chargedOnly_; + bool stableOnly_; + std::vector pdgId_; + +}; + +#include "CommonTools/UtilAlgos/interface/ParameterAdapter.h" + +namespace reco { + namespace modules { + + template<> + struct ParameterAdapter { + static TrackingParticleSelector make( const edm::ParameterSet & cfg ) { + return TrackingParticleSelector( + cfg.getParameter( "ptMin" ), + cfg.getParameter( "minRapidity" ), + cfg.getParameter( "maxRapidity" ), + cfg.getParameter( "tip" ), + cfg.getParameter( "lip" ), + cfg.getParameter( "minHit" ), + cfg.getParameter( "signalOnly" ), + cfg.getParameter( "chargedOnly" ), + cfg.getParameter( "stableOnly" ), + cfg.getParameter >( "pdgId" )); + } + }; + + } +} + +#endif diff --git a/SimGeneral/TrackingAnalysis/interface/TrackingTruthAccumulator.h b/SimGeneral/TrackingAnalysis/interface/TrackingTruthAccumulator.h index d86059c6851e8..d7916c9a1b9d6 100644 --- a/SimGeneral/TrackingAnalysis/interface/TrackingTruthAccumulator.h +++ b/SimGeneral/TrackingAnalysis/interface/TrackingTruthAccumulator.h @@ -2,7 +2,7 @@ #define TrackingAnalysis_TrackingTruthAccumulator_h #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include // required for std::auto_ptr #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" diff --git a/SimGeneral/TrackingAnalysis/plugins/SimHitTPAssociationProducer.cc b/SimGeneral/TrackingAnalysis/plugins/SimHitTPAssociationProducer.cc new file mode 100644 index 0000000000000..6066f090203e4 --- /dev/null +++ b/SimGeneral/TrackingAnalysis/plugins/SimHitTPAssociationProducer.cc @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DataFormats/Common/interface/Handle.h" + +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" + +SimHitTPAssociationProducer::SimHitTPAssociationProducer(const edm::ParameterSet & cfg) + : _simHitSrc(cfg.getParameter >("simHitSrc")), + _trackingParticleSrc(cfg.getParameter("trackingParticleSrc")) +{ + produces(); +} + +SimHitTPAssociationProducer::~SimHitTPAssociationProducer() { +} + +void SimHitTPAssociationProducer::produce(edm::Event& iEvent, const edm::EventSetup& es) { + std::auto_ptr simHitTPList(new SimHitTPAssociationList); + + // TrackingParticle + edm::Handle TPCollectionH; + iEvent.getByLabel(_trackingParticleSrc, TPCollectionH); + + // prepare temporary map between SimTrackId and TrackingParticle index + std::map, TrackingParticleRef> mapping; + for (TrackingParticleCollection::size_type itp = 0; itp < TPCollectionH.product()->size(); ++itp) { + TrackingParticleRef trackingParticle(TPCollectionH, itp); + // SimTracks inside TrackingParticle + EncodedEventId eid(trackingParticle->eventId()); + for (auto itrk = trackingParticle->g4Track_begin(); itrk != trackingParticle->g4Track_end(); ++itrk) { + std::pair trkid(itrk->trackId(), eid); + mapping.insert(std::make_pair(trkid, trackingParticle)); + } + } + + // PSimHits + for (auto psit=_simHitSrc.begin();psit<_simHitSrc.end();++psit) { + edm::Handle PSimHitCollectionH; + iEvent.getByLabel(*psit, PSimHitCollectionH); + for (unsigned int psimHit = 0;psimHit != PSimHitCollectionH->size();++psimHit) { + TrackPSimHitRef pSimHitRef(PSimHitCollectionH,psimHit); + std::pair simTkIds(pSimHitRef->trackId(),pSimHitRef->eventId()); + auto ipos = mapping.find(simTkIds); + if (ipos != mapping.end()) { + simHitTPList->push_back(std::make_pair(ipos->second,pSimHitRef)); + } + } + } + + std::sort(simHitTPList->begin(),simHitTPList->end(),simHitTPAssociationListGreater); + iEvent.put(simHitTPList); + +} + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +DEFINE_FWK_MODULE(SimHitTPAssociationProducer); diff --git a/SimGeneral/TrackingAnalysis/python/simHitTPAssociation_cfi.py b/SimGeneral/TrackingAnalysis/python/simHitTPAssociation_cfi.py new file mode 100644 index 0000000000000..52748f85826e8 --- /dev/null +++ b/SimGeneral/TrackingAnalysis/python/simHitTPAssociation_cfi.py @@ -0,0 +1,20 @@ +import FWCore.ParameterSet.Config as cms + +simHitTPAssocProducer = cms.EDProducer("SimHitTPAssociationProducer", + simHitSrc = cms.VInputTag(cms.InputTag('g4SimHits','MuonDTHits'), + cms.InputTag('g4SimHits','MuonCSCHits'), + cms.InputTag('g4SimHits','MuonRPCHits'), + cms.InputTag('g4SimHits','TrackerHitsTIBLowTof'), + cms.InputTag('g4SimHits','TrackerHitsTIBHighTof'), + cms.InputTag('g4SimHits','TrackerHitsTIDLowTof'), + cms.InputTag('g4SimHits','TrackerHitsTIDHighTof'), + cms.InputTag('g4SimHits','TrackerHitsTOBLowTof'), + cms.InputTag('g4SimHits','TrackerHitsTOBHighTof'), + cms.InputTag('g4SimHits','TrackerHitsTECLowTof'), + cms.InputTag('g4SimHits','TrackerHitsTECHighTof'), + cms.InputTag( 'g4SimHits','TrackerHitsPixelBarrelLowTof'), + cms.InputTag('g4SimHits','TrackerHitsPixelBarrelHighTof'), + cms.InputTag('g4SimHits','TrackerHitsPixelEndcapLowTof'), + cms.InputTag('g4SimHits','TrackerHitsPixelEndcapHighTof') ), + trackingParticleSrc = cms.InputTag('mix', 'MergedTrackTruth') +) diff --git a/SimGeneral/TrackingAnalysis/src/classes.h b/SimGeneral/TrackingAnalysis/src/classes.h new file mode 100644 index 0000000000000..5cb3e4eda4d7f --- /dev/null +++ b/SimGeneral/TrackingAnalysis/src/classes.h @@ -0,0 +1,13 @@ +#include "DataFormats/Common/interface/Wrapper.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" +#include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" +#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" + +namespace { + struct dictionary { + std::pair dummy13; + edm::Wrapper > dummy14; + std::vector > dummy07; + edm::Wrapper > > dummy08; + }; +} diff --git a/SimGeneral/TrackingAnalysis/src/classes_def.xml b/SimGeneral/TrackingAnalysis/src/classes_def.xml new file mode 100644 index 0000000000000..93921d5404bcb --- /dev/null +++ b/SimGeneral/TrackingAnalysis/src/classes_def.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/SimMuon/GEMDigitizer/interface/GEMSimpleModel.h b/SimMuon/GEMDigitizer/interface/GEMSimpleModel.h index ff78eb60611b4..da58076f2a63f 100644 --- a/SimMuon/GEMDigitizer/interface/GEMSimpleModel.h +++ b/SimMuon/GEMDigitizer/interface/GEMSimpleModel.h @@ -8,7 +8,7 @@ * * \author Sven Dildick * \modified by Roumyana Hadjiiska -*/ + */ #include "SimMuon/GEMDigitizer/interface/GEMDigiModel.h" @@ -62,6 +62,8 @@ class GEMSimpleModel: public GEMDigiModel std::vector neutronGammaRoll_; bool doNoiseCLS_; double minPabsNoiseCLS_; + bool simulateIntrinsicNoise_; + double scaleLumi_; CLHEP::RandFlat* flat1_; CLHEP::RandFlat* flat2_; @@ -73,3 +75,5 @@ class GEMSimpleModel: public GEMDigiModel }; #endif + + diff --git a/SimMuon/GEMDigitizer/python/muonGEMDigis_cfi.py b/SimMuon/GEMDigitizer/python/muonGEMDigis_cfi.py index 81a0f0bfc4de5..add1975c06ce8 100644 --- a/SimMuon/GEMDigitizer/python/muonGEMDigis_cfi.py +++ b/SimMuon/GEMDigitizer/python/muonGEMDigis_cfi.py @@ -10,7 +10,7 @@ timeCalibrationOffset = cms.double(19.9), averageClusterSize = cms.double(1.5), averageEfficiency = cms.double(0.98), - averageNoiseRate = cms.double(0.0), #intrinsic noise + averageNoiseRate = cms.double(0.001), #intrinsic noise numberOfStripsPerPartition = cms.int32(384), bxwidth = cms.int32(25), minBunch = cms.int32(-5), ## in terms of 25 ns @@ -21,6 +21,8 @@ # neutronGammaRoll = cms.vdouble(18., 23., 30., 39., 45., 52., 62., 76)#, #n and gamma bkg per roll neutronGammaRoll = cms.vdouble(69.3, 74.0, 101.7, 121.1, 145.5, 143.8, 199.1, 314.1), #n, gamma and charged prtcls bkg per roll doNoiseCLS = cms.bool(True), - minPabsNoiseCLS = cms.double(0.) + minPabsNoiseCLS = cms.double(0.), #do cls>=1 for the particles with |p|> minPabsNoiseCLS + simulateIntrinsicNoise = cms.bool(False), + scaleLumi = cms.double(1.) ) diff --git a/SimMuon/GEMDigitizer/src/GEMSimpleModel.cc b/SimMuon/GEMDigitizer/src/GEMSimpleModel.cc index 55fb47305468b..45b0d16407271 100644 --- a/SimMuon/GEMDigitizer/src/GEMSimpleModel.cc +++ b/SimMuon/GEMDigitizer/src/GEMSimpleModel.cc @@ -1,18 +1,14 @@ #include "SimMuon/GEMDigitizer/interface/GEMSimpleModel.h" - #include "Geometry/GEMGeometry/interface/GEMEtaPartitionSpecs.h" #include "Geometry/CommonTopologies/interface/TrapezoidalStripTopology.h" #include "Geometry/GEMGeometry/interface/GEMGeometry.h" - #include "FWCore/Utilities/interface/RandomNumberGenerator.h" #include "FWCore/Utilities/interface/Exception.h" - #include "CLHEP/Random/RandomEngine.h" #include "CLHEP/Random/RandFlat.h" #include "CLHEP/Random/RandPoissonQ.h" #include "CLHEP/Random/RandGaussQ.h" #include "CLHEP/Random/RandGamma.h" - #include #include #include @@ -24,24 +20,23 @@ namespace } GEMSimpleModel::GEMSimpleModel(const edm::ParameterSet& config) : -GEMDigiModel(config)// -, averageEfficiency_(config.getParameter ("averageEfficiency"))// -, averageShapingTime_(config.getParameter ("averageShapingTime"))// -, timeResolution_(config.getParameter ("timeResolution"))// -, timeJitter_(config.getParameter ("timeJitter"))// -, timeCalibrationOffset_(config.getParameter ("timeCalibrationOffset"))// -, averageNoiseRate_(config.getParameter ("averageNoiseRate"))// -, averageClusterSize_(config.getParameter ("averageClusterSize"))// -, signalPropagationSpeed_(config.getParameter ("signalPropagationSpeed"))// -, cosmics_(config.getParameter ("cosmics"))// -, bxwidth_(config.getParameter ("bxwidth"))// -, minBunch_(config.getParameter ("minBunch"))// -, maxBunch_(config.getParameter ("maxBunch"))// -, digitizeOnlyMuons_(config.getParameter ("digitizeOnlyMuons"))// +GEMDigiModel(config) +, averageEfficiency_(config.getParameter ("averageEfficiency")) +, averageShapingTime_(config.getParameter ("averageShapingTime")) +, timeResolution_(config.getParameter ("timeResolution")) +, timeJitter_(config.getParameter ("timeJitter")) +, timeCalibrationOffset_(config.getParameter ("timeCalibrationOffset")) +, averageNoiseRate_(config.getParameter ("averageNoiseRate")) +, averageClusterSize_(config.getParameter ("averageClusterSize")) +, signalPropagationSpeed_(config.getParameter ("signalPropagationSpeed")) +, cosmics_(config.getParameter ("cosmics")) +, bxwidth_(config.getParameter ("bxwidth")) +, minBunch_(config.getParameter ("minBunch")) +, maxBunch_(config.getParameter ("maxBunch")) +, digitizeOnlyMuons_(config.getParameter ("digitizeOnlyMuons")) , neutronGammaRoll_(config.getParameter>("neutronGammaRoll")) -, doNoiseCLS_(config.getParameter ("doNoiseCLS"))// -, minPabsNoiseCLS_(config.getParameter ("minPabsNoiseCLS"))// - +, doNoiseCLS_(config.getParameter ("doNoiseCLS")) +, scaleLumi_(config.getParameter ("scaleLumi")) { } @@ -69,7 +64,6 @@ void GEMSimpleModel::setRandomEngine(CLHEP::HepRandomEngine& eng) gauss1_ = new CLHEP::RandGaussQ(eng); gauss2_ = new CLHEP::RandGaussQ(eng); gamma1_ = new CLHEP::RandGamma(eng); - // gamma1_ = new CLHEP::RandGamma(eng); } void GEMSimpleModel::setup() @@ -88,8 +82,6 @@ void GEMSimpleModel::simulateSignal(const GEMEtaPartition* roll, const edm::PSim if (std::abs(hit->particleType()) != 13 && digitizeOnlyMuons_) continue; - if (std::abs(hit->particleType()) != 13 && digitizeOnlyMuons_) - continue; // Check GEM efficiency if (flat1_->fire(1) > averageEfficiency_) continue; @@ -133,24 +125,30 @@ int GEMSimpleModel::getSimHitBx(const PSimHit* simhit) const float halfStripLength(0.5 * top->stripLength()); const float distanceFromEdge(halfStripLength - simHitPos.y()); + // signal propagation speed in vacuum in [m/s] + const double cspeed = 299792458; + // signal propagation speed in material in [cm/ns] + double signalPropagationSpeedTrue = signalPropagationSpeed_ * cspeed * 1e+2 * 1e-9; + // average time for the signal to propagate from the SimHit to the top of a strip - const float averagePropagationTime(distanceFromEdge / signalPropagationSpeed_); + const float averagePropagationTime(distanceFromEdge / signalPropagationSpeedTrue); // random Gaussian time correction due to the finite timing resolution of the detector const float randomResolutionTime(gauss2_->fire(0., timeResolution_)); const float simhitTime(tof + averageShapingTime_ + randomResolutionTime + averagePropagationTime + randomJitterTime); - const float referenceTime(timeCalibrationOffset_ + halfStripLength / signalPropagationSpeed_ + averageShapingTime_); + const float referenceTime(timeCalibrationOffset_ + halfStripLength / signalPropagationSpeedTrue + averageShapingTime_); const float timeDifference(cosmics_ ? (simhitTime - referenceTime) / COSMIC_PAR : simhitTime - referenceTime); // assign the bunch crossing bx = static_cast (std::round((timeDifference) / bxwidth_)); + // check time const bool debug(false); if (debug) { std::cout << "checktime " << "bx = " << bx << "\tdeltaT = " << timeDifference << "\tsimT = " << simhitTime << "\trefT = " << referenceTime << "\ttof = " << tof << "\tavePropT = " << averagePropagationTime - << "\taveRefPropT = " << halfStripLength / signalPropagationSpeed_ << std::endl; + << "\taveRefPropT = " << halfStripLength / signalPropagationSpeedTrue << std::endl; } return bx; } @@ -175,11 +173,26 @@ void GEMSimpleModel::simulateNoise(const GEMEtaPartition* roll) const int nBxing(maxBunch_ - minBunch_ + 1); double averageNoiseRatePerRoll = neutronGammaRoll_[rollNumb - 1]; - double averageNoiseRatePerStrip = averageNoiseRatePerRoll / (roll->nstrips()) + averageNoiseRate_; - const double averageNoise(averageNoiseRatePerStrip * nBxing * bxwidth_ * trArea * 1.0e-9); - const int n_hits(poisson_->fire(averageNoise)); + //simulate intrinsic noise + if(simulateIntrinsicNoise_) + { + double aveIntrinsicNoisPerStrip = averageNoiseRate_ * nBxing * bxwidth_ * trStripArea * 1.0e-9; + for(int j = 0; j < nstrips; ++j) + { + const int n_intrHits = poisson_->fire(aveIntrinsicNoisPerStrip); + for (int k = 0; k < n_intrHits; k++ ) + { + const int time_hit(static_cast (flat2_->fire(nBxing)) + minBunch_); + std::pair digi(k+1,time_hit); + strips_.insert(digi); + } + } + }//end simulate intrinsic noise + //simulate bkg contribution + const double averageNoise(averageNoiseRatePerRoll * nBxing * bxwidth_ * trArea * 1.0e-9 * scaleLumi_); + const int n_hits(poisson_->fire(averageNoise)); for (int i = 0; i < n_hits; ++i) { const int centralStrip(static_cast (flat1_->fire(1, nstrips))); @@ -252,7 +265,7 @@ std::vector > GEMSimpleModel::simulateClustering(const GEMEt centralStrip = topology.channel(hit_position) + 1; else centralStrip = topology.channel(hit_position); - //get delta Phi differences + GlobalPoint pointSimHit = roll->toGlobal(hit_position); GlobalPoint pointDigiHit = roll->toGlobal(roll->centreOfStrip(centralStrip)); double deltaphi = pointSimHit.phi() - pointDigiHit.phi(); @@ -317,4 +330,3 @@ std::vector > GEMSimpleModel::simulateClustering(const GEMEt return cluster_; } - diff --git a/SimTracker/TrackAssociation/interface/CosmicParametersDefinerForTP.h b/SimTracker/TrackAssociation/interface/CosmicParametersDefinerForTP.h index a709f21d22278..7d37cf635a555 100644 --- a/SimTracker/TrackAssociation/interface/CosmicParametersDefinerForTP.h +++ b/SimTracker/TrackAssociation/interface/CosmicParametersDefinerForTP.h @@ -16,8 +16,8 @@ class CosmicParametersDefinerForTP : public ParametersDefinerForTP { CosmicParametersDefinerForTP(){}; virtual ~CosmicParametersDefinerForTP() {}; - virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const; - virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const; + virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef tpr) const; + virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef tpr) const; virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const Charge ch, const Point & vertex, const LorentzVector& lv) const { @@ -29,7 +29,12 @@ class CosmicParametersDefinerForTP : public ParametersDefinerForTP { return TrackingParticle::Point(); } + void initEvent(edm::Handle simHitsTPAssocToSet) const { + simHitsTPAssoc = simHitsTPAssocToSet; + } + private: + mutable edm::Handle simHitsTPAssoc; }; diff --git a/SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h b/SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h index 54c467297a614..517cc078b3d28 100644 --- a/SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h +++ b/SimTracker/TrackAssociation/interface/ParametersDefinerForTP.h @@ -8,6 +8,7 @@ */ #include +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/ESHandle.h" @@ -23,12 +24,11 @@ class ParametersDefinerForTP { typedef math::XYZPointD Point; ///< point in the space typedef math::XYZTLorentzVectorD LorentzVector; ///< Lorentz vector - virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const Charge ch, const Point & vtx, const LorentzVector& lv) const; - virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const{ - return momentum(iEvent, iSetup, tp.charge(),tp.vertex(),tp.p4()); + virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef tpr) const{ + return momentum(iEvent, iSetup, tpr->charge(),tpr->vertex(),tpr->p4()); } virtual TrackingParticle::Vector momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Candidate& tp) const { @@ -37,15 +37,17 @@ class ParametersDefinerForTP { virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const Charge ch, const Point & vtx, const LorentzVector& lv) const; - - virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const{ - return vertex(iEvent, iSetup, tp.charge(),tp.vertex(),tp.p4()); + + virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef& tpr) const{ + return vertex(iEvent, iSetup, tpr->charge(),tpr->vertex(),tpr->p4()); } virtual TrackingParticle::Point vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Candidate& tp) const { return vertex(iEvent, iSetup, tp.charge(),tp.vertex(),tp.p4()); } + virtual void initEvent(edm::Handle simHitsTPAssocToSet) const { } + }; diff --git a/SimTracker/TrackAssociation/interface/QuickTrackAssociatorByHits.h b/SimTracker/TrackAssociation/interface/QuickTrackAssociatorByHits.h index 8b868c4203a9d..bf60783abcc92 100644 --- a/SimTracker/TrackAssociation/interface/QuickTrackAssociatorByHits.h +++ b/SimTracker/TrackAssociation/interface/QuickTrackAssociatorByHits.h @@ -123,7 +123,7 @@ class QuickTrackAssociatorByHits : public TrackAssociatorBase bool trackingParticleContainsIdentifier( const TrackingParticle* pTrackingParticle, const SimTrackIdentifiers& identifier ) const; /** @brief This method was copied almost verbatim from the standard TrackAssociatorByHits. */ - template int getDoubleCount( iter begin, iter end, const TrackingParticle& associatedTrackingParticle ) const; + template int getDoubleCount( iter begin, iter end, TrackingParticleRef associatedTrackingParticle ) const; /** @brief Returns a vector of pairs where first is a SimTrackIdentifiers (see typedef above) and second is the number of hits that came from that sim track. * diff --git a/SimTracker/TrackAssociation/interface/TrackAssociatorByHits.h b/SimTracker/TrackAssociation/interface/TrackAssociatorByHits.h index f9da0ba38c52a..b63c2f18b00f3 100644 --- a/SimTracker/TrackAssociation/interface/TrackAssociatorByHits.h +++ b/SimTracker/TrackAssociation/interface/TrackAssociatorByHits.h @@ -96,6 +96,8 @@ class TrackAssociatorByHits : public TrackAssociatorBase { const TrackingRecHit* getHitPtr(edm::OwnVector::const_iterator iter) const {return &*iter;} const TrackingRecHit* getHitPtr(trackingRecHit_iterator iter) const {return &**iter;} + + edm::InputTag _simHitTpMapTag; }; #endif diff --git a/SimTracker/TrackAssociation/interface/TrackAssociatorByPosition.h b/SimTracker/TrackAssociation/interface/TrackAssociatorByPosition.h index 917dc06281ee7..32905bd05b75c 100644 --- a/SimTracker/TrackAssociation/interface/TrackAssociatorByPosition.h +++ b/SimTracker/TrackAssociation/interface/TrackAssociatorByPosition.h @@ -22,6 +22,8 @@ #include +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" + #include //Note that the Association Map is filled with -ch2 and not chi2 because it is ordered using std::greater: @@ -50,6 +52,7 @@ class TrackAssociatorByPosition : public TrackAssociatorBase { edm::LogError("TrackAssociatorByPosition")<("ConsiderAllSimHits"); + _simHitTpMapTag = iConfig.getParameter("simHitTpMapTag"); }; @@ -84,8 +87,9 @@ class TrackAssociatorByPosition : public TrackAssociatorBase { bool theConsiderAllSimHits; FreeTrajectoryState getState(const reco::Track &) const; - TrajectoryStateOnSurface getState(const TrackingParticle &)const; - + TrajectoryStateOnSurface getState(const TrackingParticleRef)const; + mutable edm::Handle simHitsTPAssoc; + edm::InputTag _simHitTpMapTag; }; #endif diff --git a/SimTracker/TrackAssociation/plugins/MCTrackMatcher.cc b/SimTracker/TrackAssociation/plugins/MCTrackMatcher.cc index 07315d1d40820..fa64def8954a0 100644 --- a/SimTracker/TrackAssociation/plugins/MCTrackMatcher.cc +++ b/SimTracker/TrackAssociation/plugins/MCTrackMatcher.cc @@ -66,25 +66,13 @@ void MCTrackMatcher::produce(Event& evt, const EventSetup& es) { RecoToSimCollection::const_iterator f = associations.find(track); if ( f != associations.end() ) { TrackingParticleRef tp = f->val.front().first; - const HepMC::GenParticle * particle = 0; TrackingParticle::genp_iterator j, b = tp->genParticle_begin(), e = tp->genParticle_end(); for( j = b; j != e; ++ j ) { -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - const HepMC::GenParticle * p = j->get(); + const reco::GenParticle * p = j->get(); if (p->status() == 1) { - particle = p; break; + indices[i] = j->key(); + break; } -#endif - } - if( particle != 0 ) { - int barCode = particle->barcode(); - vector::const_iterator - b = barCodes->begin(), e = barCodes->end(), f = find( b, e, barCode ); - if(f == e) throw edm::Exception(errors::InvalidReference) - << "found matching particle with barcode" << *f - << " which has not been found in " << genParticles_; - indices[i] = *f; } } } diff --git a/SimTracker/TrackAssociation/python/TrackAssociatorByHits_cfi.py b/SimTracker/TrackAssociation/python/TrackAssociatorByHits_cfi.py index 87fb1afa8e5a8..075158f9f9eba 100644 --- a/SimTracker/TrackAssociation/python/TrackAssociatorByHits_cfi.py +++ b/SimTracker/TrackAssociation/python/TrackAssociatorByHits_cfi.py @@ -25,8 +25,8 @@ associateStrip = cms.bool(True), Purity_SimToReco = cms.double(0.75), Cut_RecoToSim = cms.double(0.75), - SimToRecoDenominator = cms.string('sim') ##"reco" - -) + SimToRecoDenominator = cms.string('sim'), ##"reco" + simHitTpMapTag = cms.InputTag("simHitTPAssocProducer") + ) diff --git a/SimTracker/TrackAssociation/python/TrackAssociatorByPosition_cfi.py b/SimTracker/TrackAssociation/python/TrackAssociatorByPosition_cfi.py index d411640d2b3c8..079b9c692a280 100644 --- a/SimTracker/TrackAssociation/python/TrackAssociatorByPosition_cfi.py +++ b/SimTracker/TrackAssociation/python/TrackAssociatorByPosition_cfi.py @@ -17,7 +17,8 @@ method = cms.string('dist'), QCut = cms.double(10.0), # False is the old behavior, True will use also the muon simhits to do the matching. - ConsiderAllSimHits = cms.bool(False) + ConsiderAllSimHits = cms.bool(False), + simHitTpMapTag = cms.InputTag("simHitTPAssocProducer") ) diff --git a/SimTracker/TrackAssociation/src/CosmicParametersDefinerForTP.cc b/SimTracker/TrackAssociation/src/CosmicParametersDefinerForTP.cc index 48762accee9bd..7cf86928fb5c8 100644 --- a/SimTracker/TrackAssociation/src/CosmicParametersDefinerForTP.cc +++ b/SimTracker/TrackAssociation/src/CosmicParametersDefinerForTP.cc @@ -14,12 +14,13 @@ #include #include "FWCore/Framework/interface/Event.h" #include +#include "FWCore/MessageLogger/interface/MessageLogger.h" class TrajectoryStateClosestToBeamLineBuilder; TrackingParticle::Vector - CosmicParametersDefinerForTP::momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const{ + CosmicParametersDefinerForTP::momentum(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef tpr) const{ // to add a new implementation for cosmic. For the moment, it is just as for the base class: using namespace edm; using namespace std; @@ -34,23 +35,26 @@ TrackingParticle::Vector edm::Handle bs; iEvent.getByLabel(InputTag("offlineBeamSpot"),bs); - // cout<<"TrackingParticle pdgId = "<vertex(): ("<vertex().x()<<", "<vertex().y()<<", "<vertex().z()<<")"<momentum(): ("<momentum().x()<<", "<momentum().y()<<", "<momentum().z()<<")"< & simHits = tp.trackPSimHit(DetId::Tracker); - for(vector::const_iterator it=simHits.begin(); it!=simHits.end(); ++it){ + + if (simHitsTPAssoc.isValid()==0) { + LogError("TrackAssociation") << "Invalid handle!"; + return momentum; + } + std::pair clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater + // sorting only the cluster is needed + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater); + for(auto ip = range.first; ip != range.second; ++ip) { + TrackPSimHitRef it = ip->second; const GeomDet* tmpDet = tracker->idToDet( DetId(it->detUnitId()) ) ; LocalVector lv = it->momentumAtEntry(); Local3DPoint lp = it->localPosition (); @@ -63,7 +67,6 @@ TrackingParticle::Vector finalGP = gp; } } -#endif //cout<<"found = "<charge()),theMF.product()); TSCBLBuilderNoMaterial tscblBuilder; TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm if(tsAtClosestApproach.isValid()){ @@ -83,7 +86,7 @@ TrackingParticle::Vector return momentum; } -TrackingParticle::Point CosmicParametersDefinerForTP::vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticle& tp) const{ +TrackingParticle::Point CosmicParametersDefinerForTP::vertex(const edm::Event& iEvent, const edm::EventSetup& iSetup, const TrackingParticleRef tpr) const{ using namespace edm; using namespace std; @@ -100,17 +103,20 @@ TrackingParticle::Point CosmicParametersDefinerForTP::vertex(const edm::Event& i GlobalVector finalGV; GlobalPoint finalGP; -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED double radius(9999); -#endif bool found(0); TrackingParticle::Point vertex(0,0,0); -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - const vector & simHits = tp.trackPSimHit(DetId::Tracker); - for(vector::const_iterator it=simHits.begin(); it!=simHits.end(); ++it){ + if (simHitsTPAssoc.isValid()==0) { + LogError("TrackAssociation") << "Invalid handle!"; + return vertex; + } + std::pair clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater + // sorting only the cluster is needed + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater); + for(auto ip = range.first; ip != range.second; ++ip) { + TrackPSimHitRef it = ip->second; const GeomDet* tmpDet = tracker->idToDet( DetId(it->detUnitId()) ) ; LocalVector lv = it->momentumAtEntry(); Local3DPoint lp = it->localPosition (); @@ -123,10 +129,9 @@ TrackingParticle::Point CosmicParametersDefinerForTP::vertex(const edm::Event& i finalGP = gp; } } -#endif if(found) { - FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tp.charge()),theMF.product()); + FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tpr->charge()),theMF.product()); TSCBLBuilderNoMaterial tscblBuilder; TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm if(tsAtClosestApproach.isValid()){ diff --git a/SimTracker/TrackAssociation/src/QuickTrackAssociatorByHits.cc b/SimTracker/TrackAssociation/src/QuickTrackAssociatorByHits.cc index 2add928ab5df9..6b09c46fe81d5 100644 --- a/SimTracker/TrackAssociation/src/QuickTrackAssociatorByHits.cc +++ b/SimTracker/TrackAssociation/src/QuickTrackAssociatorByHits.cc @@ -235,7 +235,7 @@ reco::RecoToSimCollection QuickTrackAssociatorByHits::associateRecoToSimImplemen //if electron subtract double counting if (abs(trackingParticleRef->pdgId())==11 && (trackingParticleRef->g4Track_end() - trackingParticleRef->g4Track_begin()) > 1 ) { - numberOfSharedHits -= getDoubleCount( pTrack->recHitsBegin(), pTrack->recHitsEnd(), *trackingParticleRef ); + numberOfSharedHits -= getDoubleCount( pTrack->recHitsBegin(), pTrack->recHitsEnd(), trackingParticleRef ); } double quality; @@ -296,6 +296,14 @@ reco::SimToRecoCollection QuickTrackAssociatorByHits::associateSimToRecoImplemen numberOfSimulatedHits=trackingParticleRef->numberOfTrackerHits(); } + + //if electron subtract double counting + if (abs(trackingParticleRef->pdgId())==11 && (trackingParticleRef->g4Track_end() - trackingParticleRef->g4Track_begin()) > 1 ) + { + numberOfSharedHits -= getDoubleCount( pTrack->recHitsBegin(), pTrack->recHitsEnd(), trackingParticleRef ); + } + + double purity=static_cast(numberOfSharedHits)/static_cast(numberOfValidTrackHits); double quality; if( absoluteNumberOfHits_ ) quality=static_cast(numberOfSharedHits); @@ -392,6 +400,7 @@ template std::vector< std::pairsecond); // Ignore TrackingParticles with no hits @@ -411,7 +420,7 @@ template std::vector< std::pairsecond; else lmap.insert(std::make_pair(trackingParticle, 1)); @@ -528,34 +537,47 @@ bool QuickTrackAssociatorByHits::trackingParticleContainsIdentifier( const Track return false; } -template int QuickTrackAssociatorByHits::getDoubleCount( iter startIterator, iter endIterator, const TrackingParticle& associatedTrackingParticle ) const +template int QuickTrackAssociatorByHits::getDoubleCount( iter startIterator, iter endIterator, TrackingParticleRef associatedTrackingParticle ) const { // This method is largely copied from the standard TrackAssociatorByHits. Once I've tested how much difference // it makes I'll go through and comment it properly. - //fixme: check indeed this is not needed in case of cluster-tp map - if (useClusterTPAssociation_) return 0; - int doubleCount=0; std::vector SimTrackIdsDC; for( iter iHit=startIterator; iHit != endIterator; iHit++ ) { int idcount=0; - SimTrackIdsDC.clear(); - pHitAssociator_->associateHitId( *(getHitFromIter(iHit)), SimTrackIdsDC ); - - if( SimTrackIdsDC.size() > 1 ) - { - for( TrackingParticle::g4t_iterator g4T=associatedTrackingParticle.g4Track_begin(); g4T != associatedTrackingParticle.g4Track_end(); ++g4T ) - { - if( find( SimTrackIdsDC.begin(), SimTrackIdsDC.end(), SimHitIdpr( ( *g4T).trackId(), SimTrackIdsDC.begin()->second ) ) - != SimTrackIdsDC.end() ) - { - idcount++; - } + + if (useClusterTPAssociation_) { + std::vector oClusters = getMatchedClusters(iHit, iHit+1);//only for the cluster being checked + for (std::vector::const_iterator it = oClusters.begin(); it != oClusters.end(); ++it) { + std::pair clusterTPpairWithDummyTP(*it,TrackingParticleRef());//TP is dummy: for clusterTPAssociationListGreater sorting only the cluster is needed + auto range = std::equal_range(pCluster2TPList_.begin(), pCluster2TPList_.end(), clusterTPpairWithDummyTP, clusterTPAssociationListGreater); + if(range.first != range.second) { + for(auto ip = range.first; ip != range.second; ++ip) { + const TrackingParticleRef trackingParticle = (ip->second); + if (associatedTrackingParticle==trackingParticle) { + idcount++; + } } + } } + } else { + SimTrackIdsDC.clear(); + pHitAssociator_->associateHitId( *(getHitFromIter(iHit)), SimTrackIdsDC ); + if( SimTrackIdsDC.size() > 1 ) + { + for( TrackingParticle::g4t_iterator g4T=associatedTrackingParticle->g4Track_begin(); g4T != associatedTrackingParticle->g4Track_end(); ++g4T ) + { + if( find( SimTrackIdsDC.begin(), SimTrackIdsDC.end(), SimHitIdpr( ( *g4T).trackId(), SimTrackIdsDC.begin()->second ) ) + != SimTrackIdsDC.end() ) + { + idcount++; + } + } + } + } if( idcount > 1 ) doubleCount+=(idcount - 1); } @@ -621,7 +643,7 @@ QuickTrackAssociatorByHits::associateRecoToSim(edm::HandlepdgId())==11 && (trackingParticleRef->g4Track_end() - trackingParticleRef->g4Track_begin()) > 1 ) { - numberOfSharedHits-=getDoubleCount( pSeed->recHits().first, pSeed->recHits().second, *trackingParticleRef ); + numberOfSharedHits-=getDoubleCount( pSeed->recHits().first, pSeed->recHits().second, trackingParticleRef ); } double quality; @@ -679,6 +701,12 @@ QuickTrackAssociatorByHits::associateSimToReco(edm::HandlepdgId())==11 && (trackingParticleRef->g4Track_end() - trackingParticleRef->g4Track_begin()) > 1 ) + { + numberOfSharedHits-=getDoubleCount( pSeed->recHits().first, pSeed->recHits().second, trackingParticleRef ); + } if( simToRecoDenominator_==denomsim || (numberOfSharedHits<3 && threeHitTracksAreSpecial_) ) // the numberOfSimulatedHits is not always required, so can skip counting in some circumstances { diff --git a/SimTracker/TrackAssociation/src/TrackAssociatorByHits.cc b/SimTracker/TrackAssociation/src/TrackAssociatorByHits.cc index 22c6e884aa1e9..144ec6c2ded89 100644 --- a/SimTracker/TrackAssociation/src/TrackAssociatorByHits.cc +++ b/SimTracker/TrackAssociation/src/TrackAssociatorByHits.cc @@ -18,6 +18,7 @@ //TrackingParticle #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h" //##---new stuff #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" @@ -41,7 +42,8 @@ TrackAssociatorByHits::TrackAssociatorByHits (const edm::ParameterSet& conf) : UsePixels(conf_.getParameter("UsePixels")), UseGrouped(conf_.getParameter("UseGrouped")), UseSplitting(conf_.getParameter("UseSplitting")), - ThreeHitTracksAreSpecial(conf_.getParameter("ThreeHitTracksAreSpecial")) + ThreeHitTracksAreSpecial(conf_.getParameter("ThreeHitTracksAreSpecial")), + _simHitTpMapTag(conf_.getParameter("simHitTpMapTag")) { std::string tmp = conf_.getParameter("SimToRecoDenominator"); if (tmp=="sim") { @@ -172,6 +174,10 @@ TrackAssociatorByHits::associateSimToReco(const edm::RefToBaseVector trackerPSimHit( t->trackPSimHit(DetId::Tracker) ); + const TrackerTopology *tTopo=tTopoHand.product(); + //int nsimhit = trackerPSimHit.size(); std::vector tphits; //LogTrace("TrackAssociator") << "TP number " << tpindex << " pdgId=" << t->pdgId() << " with number of PSimHits: " << nsimhit; @@ -209,7 +213,14 @@ TrackAssociatorByHits::associateSimToReco(const edm::RefToBaseVector::const_iterator TPhit = trackerPSimHit.begin(); TPhit != trackerPSimHit.end(); TPhit++){ + + std::pair + clusterTPpairWithDummyTP(TrackingParticleRef(TPCollectionH,t-tPC.begin()),TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater + // sorting only the cluster is needed + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater); + for(auto ip = range.first; ip != range.second; ++ip) { + TrackPSimHitRef TPhit = ip->second; DetId dId = DetId(TPhit->detUnitId()); unsigned int subdetId = static_cast(dId.subdetId()); @@ -260,9 +271,6 @@ TrackAssociatorByHits::associateSimToReco(const edm::RefToBaseVectornumberOfTrackerLayers(); -#endif if (AbsoluteNumberOfHits) quality = static_cast(nshared); else if(SimToRecoDenominator == denomsim && totsimhit!=0) quality = ((double) nshared)/((double)totsimhit); diff --git a/SimTracker/TrackAssociation/src/TrackAssociatorByPosition.cc b/SimTracker/TrackAssociation/src/TrackAssociatorByPosition.cc index 6f045b30b94d2..0e66f9e670ab9 100644 --- a/SimTracker/TrackAssociation/src/TrackAssociatorByPosition.cc +++ b/SimTracker/TrackAssociation/src/TrackAssociatorByPosition.cc @@ -10,9 +10,13 @@ using namespace edm; using namespace reco; -TrajectoryStateOnSurface TrackAssociatorByPosition::getState(const TrackingParticle & st)const{ -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED +TrajectoryStateOnSurface TrackAssociatorByPosition::getState(const TrackingParticleRef st)const{ + + std::pair clusterTPpairWithDummyTP(st,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater + // sorting only the cluster is needed + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater); + // TrackingParticle* simtrack = const_cast(&st); //loop over PSimHits const PSimHit * psimhit=0; @@ -20,16 +24,20 @@ TrajectoryStateOnSurface TrackAssociatorByPosition::getState(const TrackingParti double dLim=thePositionMinimumDistance; // look for the further most hit beyond a certain limit - std::vector pSimHit = st.trackPSimHit(); - if (!theConsiderAllSimHits) pSimHit=st.trackPSimHit(DetId::Tracker); - std::vector ::const_iterator start=pSimHit.begin(); - std::vector ::const_iterator end=pSimHit.end(); - LogDebug("TrackAssociatorByPosition")< ::const_iterator psit=start;psit!=end;++psit){ + for (auto ip=start;ip!=end;++ip){ + + TrackPSimHitRef psit = ip->second; + //get the detid DetId dd(psit->detUnitId()); + + if (!theConsiderAllSimHits && dd.det()!=DetId::Tracker) continue; + LogDebug("TrackAssociatorByPosition")<idToDet(dd); @@ -55,9 +63,6 @@ TrajectoryStateOnSurface TrackAssociatorByPosition::getState(const TrackingParti else{ // edm::LogError("TrackAssociatorByPosition")<<"no corresponding PSimHit for a tracking particle. will fail."; return TrajectoryStateOnSurface();} -#else - return TrajectoryStateOnSurface(); -#endif } FreeTrajectoryState TrackAssociatorByPosition::getState(const reco::Track & track)const{ @@ -110,6 +115,10 @@ RecoToSimCollection TrackAssociatorByPosition::associateRecoToSim(const edm::Ref std::pair minPair; const double dQmin_default=1542543; double dQmin=dQmin_default; + + //warning: make sure the TP collection used in the map is the same used in the associator! + e->getByLabel(_simHitTpMapTag,simHitsTPAssoc); + for (unsigned int Ti=0; Ti!=tCH.size();++Ti){ //initial state (initial OR inner OR outter) FreeTrajectoryState iState = getState(*(tCH)[Ti]); @@ -118,7 +127,7 @@ RecoToSimCollection TrackAssociatorByPosition::associateRecoToSim(const edm::Ref // for each tracking particle, find a state position and the plane to propagate the track to. for (unsigned int TPi=0;TPi!=tPCH.size();++TPi) { //get a state in the muon system - TrajectoryStateOnSurface simReferenceState = getState(*(tPCH)[TPi]); + TrajectoryStateOnSurface simReferenceState = getState((tPCH)[TPi]); if (!simReferenceState.isValid()) continue; //propagate the TRACK to the surface @@ -158,9 +167,13 @@ SimToRecoCollection TrackAssociatorByPosition::associateSimToReco(const edm::Ref std::pair minPair; const double dQmin_default=1542543; double dQmin=dQmin_default; + + //warning: make sure the TP collection used in the map is the same used in the associator! + e->getByLabel(_simHitTpMapTag,simHitsTPAssoc); + for (unsigned int TPi=0;TPi!=tPCH.size();++TPi){ //get a state in the muon system - TrajectoryStateOnSurface simReferenceState= getState(*(tPCH)[TPi]); + TrajectoryStateOnSurface simReferenceState= getState((tPCH)[TPi]); if (!simReferenceState.isValid()) continue; bool atLeastOne=false; diff --git a/SimTracker/TrackerHitAssociation/interface/ClusterTPAssociationProducer.h b/SimTracker/TrackerHitAssociation/interface/ClusterTPAssociationProducer.h index 9d0955e611cc1..5da89ff4b4e50 100644 --- a/SimTracker/TrackerHitAssociation/interface/ClusterTPAssociationProducer.h +++ b/SimTracker/TrackerHitAssociation/interface/ClusterTPAssociationProducer.h @@ -32,7 +32,7 @@ class ClusterTPAssociationProducer : public edm::EDProducer virtual void endJob() {} template - std::pair + std::vector > getSimTrackId(const edm::Handle >& simLinks, const DetId& detId, uint32_t channel) const; bool _verbose; diff --git a/SimTracker/TrackerHitAssociation/plugins/ClusterTPAssociationProducer.cc b/SimTracker/TrackerHitAssociation/plugins/ClusterTPAssociationProducer.cc index 92d52e8dfc5f9..48c47d0ef8410 100644 --- a/SimTracker/TrackerHitAssociation/plugins/ClusterTPAssociationProducer.cc +++ b/SimTracker/TrackerHitAssociation/plugins/ClusterTPAssociationProducer.cc @@ -74,6 +74,7 @@ void ClusterTPAssociationProducer::produce(edm::Event& iEvent, const edm::EventS for (std::vector::const_iterator itrk = trackingParticle->g4Track_begin(); itrk != trackingParticle->g4Track_end(); ++itrk) { std::pair trkid(itrk->trackId(), eid); + //std::cout << "creating map for id: " << trkid.first << " with tp: " << trackingParticle.key() << std::endl; mapping.insert(std::make_pair(trkid, trackingParticle)); } } @@ -96,15 +97,16 @@ void ClusterTPAssociationProducer::produce(edm::Event& iEvent, const edm::EventS for (int irow = cluster.minPixelRow(); irow <= cluster.maxPixelRow(); ++irow) { for (int icol = cluster.minPixelCol(); icol <= cluster.maxPixelCol(); ++icol) { uint32_t channel = PixelChannelIdentifier::pixelToChannel(irow, icol); - std::pair trkid(getSimTrackId(sipixelSimLinks, detId, channel)); - if (!trkid.first) continue; - simTkIds.insert(trkid); + std::vector > trkid(getSimTrackId(sipixelSimLinks, detId, channel)); + if (trkid.size()==0) continue; + simTkIds.insert(trkid.begin(),trkid.end()); } } for (std::set >::const_iterator iset = simTkIds.begin(); iset != simTkIds.end(); iset++) { auto ipos = mapping.find(*iset); if (ipos != mapping.end()) { + //std::cout << "cluster in detid: " << detid << " from tp: " << ipos->second.key() << " " << iset->first << std::endl; clusterTPList->push_back(std::make_pair(OmniClusterRef(c_ref), ipos->second)); } } @@ -127,15 +129,16 @@ void ClusterTPAssociationProducer::produce(edm::Event& iEvent, const edm::EventS int first = cluster.firstStrip(); int last = first + cluster.amplitudes().size(); - for (int istr = first; istr <= last; ++istr) { - std::pair trkid(getSimTrackId(sistripSimLinks, detId, istr)); - if (!trkid.first) continue; - simTkIds.insert(trkid); + for (int istr = first; istr < last; ++istr) { + std::vector > trkid(getSimTrackId(sistripSimLinks, detId, istr)); + if (trkid.size()==0) continue; + simTkIds.insert(trkid.begin(),trkid.end()); } for (std::set >::const_iterator iset = simTkIds.begin(); iset != simTkIds.end(); iset++) { auto ipos = mapping.find(*iset); if (ipos != mapping.end()) { + //std::cout << "cluster in detid: " << detid << " from tp: " << ipos->second.key() << " " << iset->first << std::endl; clusterTPList->push_back(std::make_pair(OmniClusterRef(c_ref), ipos->second)); } } @@ -144,11 +147,13 @@ void ClusterTPAssociationProducer::produce(edm::Event& iEvent, const edm::EventS iEvent.put(clusterTPList); } template -std::pair +std::vector > +//std::pair ClusterTPAssociationProducer::getSimTrackId(const edm::Handle >& simLinks, const DetId& detId, uint32_t channel) const { - std::pair simTrkId; + //std::pair simTrkId; + std::vector > simTrkId; auto isearch = simLinks->find(detId); if (isearch != simLinks->end()) { // Loop over DigiSimLink in this det unit @@ -156,8 +161,7 @@ ClusterTPAssociationProducer::getSimTrackId(const edm::Handle::const_iterator it = link_detset.data.begin(); it != link_detset.data.end(); ++it) { if (channel == it->channel()) { - simTrkId = std::make_pair(it->SimTrackId(), it->eventId()); - break; + simTrkId.push_back(std::make_pair(it->SimTrackId(), it->eventId())); } } } diff --git a/SimTracker/VertexAssociation/interface/VertexAssociatorByTracks.h b/SimTracker/VertexAssociation/interface/VertexAssociatorByTracks.h index ca7d19e46c0f7..b6db2ed60fccf 100644 --- a/SimTracker/VertexAssociation/interface/VertexAssociatorByTracks.h +++ b/SimTracker/VertexAssociation/interface/VertexAssociatorByTracks.h @@ -1,7 +1,7 @@ #ifndef VertexAssociatorByTracks_h #define VertexAssociatorByTracks_h -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "DataFormats/TrackReco/interface/Track.h" diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py index 1eb47d91fef0c..769807d7dd12a 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopElectron_cfg.py @@ -20,20 +20,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.Examples.TopElecAnalyzer_cfi") @@ -42,7 +42,6 @@ fileName = cms.string('analyzeTopElec.root') ) -## end path -process.p1 = cms.Path(process.patDefaultSequence * - process.analyzeElec) +## end path +process.p1 = cms.Path(process.analyzeElec) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py index cd48c56f593ae..7f0b401fcd330 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopGenEvent_cfg.py @@ -21,7 +21,8 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## load modules to produce the TtGenEvent @@ -35,7 +36,6 @@ fileName = cms.string('analyzeTopGenEvent.root') ) -## end path -process.p1 = cms.Path(process.makeGenEvt * - process.analyzeTopGenEvent) +## end path +process.p1 = cms.Path(process.analyzeTopGenEvent) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py index 62121a106e158..77923bd4a09d7 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopHypotheses_cfg.py @@ -27,24 +27,25 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## use genParticles to select only muon+jets events process.load("TopQuarkAnalysis.TopSkimming.ttDecayChannelFilters_cff") process.ttSemiLeptonicFilter.allowedTopDecays.decayBranchA.electron = False -## standard PAT sequence -process.load("PhysicsTools.PatAlgos.patSequences_cff") - ## sequences for ttGenEvent and TtSemiLeptonicEvent process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff") @@ -76,9 +77,5 @@ fileName = cms.string('analyzeTopHypothesis.root') ) -## end path -process.path = cms.Path(#process.ttSemiLeptonicFilter * - process.patDefaultSequence * - process.makeGenEvt * - process.makeTtSemiLepEvent * - process.analyzeHypotheses) +## end path +process.path = cms.Path(process.analyzeHypotheses) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py index e1198928a4022..0ddf2b0abf371 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopJet_cfg.py @@ -20,20 +20,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.Examples.TopJetAnalyzer_cfi") @@ -42,7 +42,6 @@ fileName = cms.string('analyzeTopJet.root') ) -## end path -process.p1 = cms.Path(process.patDefaultSequence * - process.analyzeJet) +## end path +process.p1 = cms.Path(process.analyzeJet) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py index 6831376fc8b5e..1e5b40ac084cc 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopMuon_cfg.py @@ -20,20 +20,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.Examples.TopMuonAnalyzer_cfi") @@ -42,7 +42,6 @@ fileName = cms.string('analyzeTopMuon.root') ) -## end path -process.p1 = cms.Path(process.patDefaultSequence * - process.analyzeMuon) +## end path +process.p1 = cms.Path(process.analyzeMuon) diff --git a/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py b/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py index 42b9b8750f639..57521d72115b2 100644 --- a/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py +++ b/TopQuarkAnalysis/Examples/test/analyzeTopTau_cfg.py @@ -20,20 +20,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.Examples.TopTauAnalyzer_cfi") @@ -42,7 +42,6 @@ fileName = cms.string('analyzeTopTau.root') ) -## end path -process.p1 = cms.Path(process.patDefaultSequence * - process.analyzeTau) +## end path +process.p1 = cms.Path(process.analyzeTau) diff --git a/TopQuarkAnalysis/TopEventProducers/interface/TtEvtBuilder.h b/TopQuarkAnalysis/TopEventProducers/interface/TtEvtBuilder.h index 88573d99b5d4c..e298ca702b54b 100644 --- a/TopQuarkAnalysis/TopEventProducers/interface/TtEvtBuilder.h +++ b/TopQuarkAnalysis/TopEventProducers/interface/TtEvtBuilder.h @@ -15,13 +15,13 @@ \brief Template class to fill the TtEvent structure Template class to fill the TtEvent structure for: - + * TtSemiLeptonicEvent * TtFullLeptonicEvent * TtFullHadronicEvent - - event hypothesis, genEvent and extra information (if - available) are read from the event and contracted into + + event hypothesis, genEvent and extra information (if + available) are read from the event and contracted into the TtEvent */ @@ -34,7 +34,7 @@ class TtEvtBuilder : public edm::EDProducer { explicit TtEvtBuilder(const edm::ParameterSet&); /// default destructor ~TtEvtBuilder(){}; - + private: /// produce function (this one is not even accessible for @@ -71,15 +71,15 @@ class TtEvtBuilder : public edm::EDProducer { /// input parameters for the kKinSolution /// hypothesis class extras edm::ParameterSet kinSolution_; - edm::InputTag solWeight_; - edm::InputTag wrongCharge_; + edm::InputTag solWeight_; + edm::InputTag wrongCharge_; /// input parameters for the kGenMatch - /// hypothesis class extras + /// hypothesis class extras edm::ParameterSet genMatch_; edm::InputTag sumPt_; edm::InputTag sumDR_; /// input parameters for the kMVADisc - /// hypothesis class extras + /// hypothesis class extras edm::ParameterSet mvaDisc_; edm::InputTag meth_; edm::InputTag disc_; @@ -112,7 +112,7 @@ TtEvtBuilder::TtEvtBuilder(const edm::ParameterSet& cfg) : kinSolution_ = cfg.getParameter("kinSolution"); solWeight_ = kinSolution_.getParameter("solWeight"); wrongCharge_ = kinSolution_.getParameter("wrongCharge"); - } + } // parameter subsets for kGenMatch if( cfg.exists("genMatch") ) { genMatch_ = cfg.getParameter("genMatch"); @@ -126,7 +126,7 @@ TtEvtBuilder::TtEvtBuilder(const edm::ParameterSet& cfg) : disc_ = mvaDisc_.getParameter("disc"); } // produces a TtEventEvent for: - // * TtSemiLeptonicEvent + // * TtSemiLeptonicEvent // * TtFullLeptonicEvent // * TtFullHadronicEvent // from hypotheses and associated extra information @@ -144,17 +144,18 @@ TtEvtBuilder::produce(edm::Event& evt, const edm::EventSetup& setup) // set genEvent (if available) edm::Handle genEvt; - if( evt.getByLabel(genEvt_, genEvt) ) - ttEvent.setGenEvent(genEvt); + if ( genEvt_.label().size() > 0 ) + if( evt.getByLabel(genEvt_, genEvt) ) + ttEvent.setGenEvent(genEvt); - // add event hypotheses for all given + // add event hypotheses for all given // hypothesis classes to the TtEvent typedef std::vector::const_iterator EventHypo; for(EventHypo h=hyps_.begin(); h!=hyps_.end(); ++h){ - edm::Handle key; + edm::Handle key; evt.getByLabel(h->label(), "Key", key); - edm::Handle > hypMatchVec; + edm::Handle > hypMatchVec; evt.getByLabel(*h, hypMatchVec); typedef std::vector::const_iterator HypMatch; @@ -168,7 +169,7 @@ TtEvtBuilder::produce(edm::Event& evt, const edm::EventSetup& setup) edm::Handle > fitChi2; evt.getByLabel(fitChi2_, fitChi2); ttEvent.setFitChi2( *fitChi2 ); - + edm::Handle > fitProb; evt.getByLabel(fitProb_, fitProb); ttEvent.setFitProb( *fitProb ); @@ -179,15 +180,15 @@ TtEvtBuilder::produce(edm::Event& evt, const edm::EventSetup& setup) edm::Handle > hitFitChi2; evt.getByLabel(hitFitChi2_, hitFitChi2); ttEvent.setHitFitChi2( *hitFitChi2 ); - + edm::Handle > hitFitProb; evt.getByLabel(hitFitProb_, hitFitProb); ttEvent.setHitFitProb( *hitFitProb ); - + edm::Handle > hitFitMT; evt.getByLabel(hitFitMT_, hitFitMT); ttEvent.setHitFitMT( *hitFitMT ); - + edm::Handle > hitFitSigMT; evt.getByLabel(hitFitSigMT_, hitFitSigMT); ttEvent.setHitFitSigMT( *hitFitSigMT ); @@ -236,15 +237,15 @@ template <> void TtEvtBuilder::fillSpecific(TtFullLeptonicEvent& ttEvent, const edm::Event& evt) { - // set kKinSolution extras + // set kKinSolution extras if( ttEvent.isHypoAvailable(TtEvent::kKinSolution) ) { edm::Handle > solWeight; evt.getByLabel(solWeight_, solWeight); ttEvent.setSolWeight( *solWeight ); - + edm::Handle wrongCharge; evt.getByLabel(wrongCharge_, wrongCharge); - ttEvent.setWrongCharge( *wrongCharge ); + ttEvent.setWrongCharge( *wrongCharge ); } } @@ -255,7 +256,7 @@ void TtEvtBuilder::fillSpecific(TtSemiLeptonicEvent& ttEven typedef std::vector::const_iterator EventHypo; for(EventHypo h=hyps_.begin(); h!=hyps_.end(); ++h){ - edm::Handle key; + edm::Handle key; evt.getByLabel(h->label(), "Key", key); // set number of real neutrino solutions for all hypotheses diff --git a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullHadEvtBuilder_cff.py b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullHadEvtBuilder_cff.py index a73dd3ca3f013..dc73d727c80e0 100644 --- a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullHadEvtBuilder_cff.py +++ b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullHadEvtBuilder_cff.py @@ -11,10 +11,10 @@ ## configure ttFullHadEventBuilder from TopQuarkAnalysis.TopEventProducers.producers.TtFullHadEvtBuilder_cfi import * -## make ttFullHadEvent -makeTtFullHadEvent = cms.Sequence(makeTtFullHadHypotheses * - ttFullHadEvent - ) +### make ttFullHadEvent +#makeTtFullHadEvent = cms.Sequence(makeTtFullHadHypotheses * + #ttFullHadEvent + #) ################################################################################ @@ -37,22 +37,22 @@ def addTtFullHadHypotheses(process, labels.append(label) process.ttFullHadEvent.hypotheses = labels - ## include hypotheses in the standard sequence - sequence = getattr(process, "makeTtFullHadHypotheses") - for obj in range(len(names)): - ## create correct label from HypoClassKey string (stripping the leading "k") - ## e.g. kKinFit -> makeHypothesis_kinFit - if names[obj][1:4] == "MVA": - label = "makeHypothesis_" + names[obj][1:4].lower() + names[obj][4:] - else: - label = "makeHypothesis_" + names[obj][1:2].lower() + names[obj][2:] - ## add it to the sequence - sequence += getattr(process, label) + ### include hypotheses in the standard sequence + #sequence = getattr(process, "makeTtFullHadHypotheses") + #for obj in range(len(names)): + ### create correct label from HypoClassKey string (stripping the leading "k") + ### e.g. kKinFit -> makeHypothesis_kinFit + #if names[obj][1:4] == "MVA": + #label = "makeHypothesis_" + names[obj][1:4].lower() + names[obj][4:] + #else: + #label = "makeHypothesis_" + names[obj][1:2].lower() + names[obj][2:] + ### add it to the sequence + #sequence += getattr(process, label) ## remove genMatch hypothesis from the process def removeTtFullHadHypGenMatch(process): - process.makeTtFullHadHypotheses.remove(process.makeHypothesis_genMatch) + #process.makeTtFullHadHypotheses.remove(process.makeHypothesis_genMatch) process.ttFullHadEvent.hypotheses.remove("ttFullHadHypGenMatch") diff --git a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullLepEvtBuilder_cff.py b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullLepEvtBuilder_cff.py index e4dbb185fe27d..d6737c945ee67 100644 --- a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullLepEvtBuilder_cff.py +++ b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttFullLepEvtBuilder_cff.py @@ -11,10 +11,10 @@ ## configure ttFullLepEventBuilder from TopQuarkAnalysis.TopEventProducers.producers.TtFullLepEvtBuilder_cfi import * -## make ttFullLepEvent -makeTtFullLepEvent = cms.Sequence(makeTtFullLepHypotheses * - ttFullLepEvent - ) +### make ttFullLepEvent +#makeTtFullLepEvent = cms.Sequence(makeTtFullLepHypotheses * + #ttFullLepEvent + #) ################################################################################ @@ -24,15 +24,16 @@ ## remove genMatch hypothesis from the process def removeTtFullLepHypGenMatch(process): - process.makeTtFullLepHypotheses.remove(process.makeHypothesis_genMatch) + #process.makeTtFullLepHypotheses.remove(process.makeHypothesis_genMatch) process.ttFullLepEvent.hypotheses.remove("ttFullLepHypGenMatch") + process.ttFullLepEvent.genEvent = '' ## set a specific attribute for all hypotheses to a given value ## -> this works for "jets", "leps", "mets", "maxNJets" def setForAllTtFullLepHypotheses(process, attribute, value): modules = ["ttFullLepJetPartonMatch", - "ttFullLepHypGenMatch", + "ttFullLepHypGenMatch", "ttFullLepHypKinSolution", "kinSolutionTtFullLepEventHypothesis"] for obj in range(len(modules)): diff --git a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttSemiLepEvtBuilder_cff.py b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttSemiLepEvtBuilder_cff.py index 274434defb5d9..df98ddb3260d2 100644 --- a/TopQuarkAnalysis/TopEventProducers/python/sequences/ttSemiLepEvtBuilder_cff.py +++ b/TopQuarkAnalysis/TopEventProducers/python/sequences/ttSemiLepEvtBuilder_cff.py @@ -11,10 +11,10 @@ ## configure ttSemiLepEventBuilder from TopQuarkAnalysis.TopEventProducers.producers.TtSemiLepEvtBuilder_cfi import * -## make ttSemiLepEvent -makeTtSemiLepEvent = cms.Sequence(makeTtSemiLepHypotheses * - ttSemiLepEvent - ) +### make ttSemiLepEvent +#makeTtSemiLepEvent = cms.Sequence(makeTtSemiLepHypotheses * + #ttSemiLepEvent + #) ################################################################################ @@ -37,23 +37,24 @@ def addTtSemiLepHypotheses(process, labels.append(label) process.ttSemiLepEvent.hypotheses = labels - ## include hypotheses in the standard sequence - sequence = getattr(process, "makeTtSemiLepHypotheses") - for obj in range(len(names)): - ## create correct label from HypoClassKey string (stripping the leading "k") - ## e.g. kKinFit -> makeHypothesis_kinFit - if names[obj][1:4] == "MVA": - label = "makeHypothesis_" + names[obj][1:4].lower() + names[obj][4:] - else: - label = "makeHypothesis_" + names[obj][1:2].lower() + names[obj][2:] - ## add it to the sequence - sequence += getattr(process, label) + ### include hypotheses in the standard sequence + #sequence = getattr(process, "makeTtSemiLepHypotheses") + #for obj in range(len(names)): + ### create correct label from HypoClassKey string (stripping the leading "k") + ### e.g. kKinFit -> makeHypothesis_kinFit + #if names[obj][1:4] == "MVA": + #label = "makeHypothesis_" + names[obj][1:4].lower() + names[obj][4:] + #else: + #label = "makeHypothesis_" + names[obj][1:2].lower() + names[obj][2:] + ### add it to the sequence + #sequence += getattr(process, label) ## remove genMatch hypothesis from the process def removeTtSemiLepHypGenMatch(process): - process.makeTtSemiLepHypotheses.remove(process.makeHypothesis_genMatch) + #process.makeTtSemiLepHypotheses.remove(process.makeHypothesis_genMatch) process.ttSemiLepEvent.hypotheses.remove("ttSemiLepHypGenMatch") + process.ttSemiLepEvent.genEvent = '' ## set a specific attribute for all hypotheses to a given value @@ -72,7 +73,7 @@ def setForAllTtSemiLepHypotheses(process, attribute, value): "ttSemiLepHypHitFit", "ttSemiLepHypKinFit", "ttSemiLepHypMaxSumPtWMass", - "ttSemiLepHypMVADisc", + "ttSemiLepHypMVADisc", "ttSemiLepHypWMassDeltaTopMass", "ttSemiLepHypWMassMaxSumPt" ] diff --git a/TopQuarkAnalysis/TopEventProducers/python/tqafSequences_cff.py b/TopQuarkAnalysis/TopEventProducers/python/tqafSequences_cff.py index e372a31c6c69a..c24f943b257f3 100644 --- a/TopQuarkAnalysis/TopEventProducers/python/tqafSequences_cff.py +++ b/TopQuarkAnalysis/TopEventProducers/python/tqafSequences_cff.py @@ -12,9 +12,9 @@ ## produce ttSemiEvent from TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff import * -## make tqaf layer2 -tqafTtSemiLeptonic = cms.Sequence(makeGenEvt * - makeTtSemiLepKinematicFit + - makeTtSemiLepMVASelDiscriminant + - makeTtSemiLepEvent - ) +### make tqaf layer2 +#tqafTtSemiLeptonic = cms.Sequence(makeGenEvt * + #makeTtSemiLepKinematicFit + + #makeTtSemiLepMVASelDiscriminant + + #makeTtSemiLepEvent + #) diff --git a/TopQuarkAnalysis/TopEventProducers/test/tqaf_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/tqaf_cfg.py index 56dbbcfe2f943..2555991e69f06 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/tqaf_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/tqaf_cfg.py @@ -17,65 +17,36 @@ ) ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -#------------------------------------------------- -# TQAF configuration -# (comment the patDefaultSequence from the path if -# you want to produce TQAF on top of already -# existing PAT objects) -#------------------------------------------------- +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for PAT -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence for TQAF process.load("TopQuarkAnalysis.TopEventProducers.tqafSequences_cff") -## switch jet collection -#from PhysicsTools.PatAlgos.tools.jetTools import * -#switchJetCollection(process, -# cms.InputTag('sisCone5CaloJets'), -# doJTA = True, -# doBTagging = True, -# jetCorrLabel = ('SC5','Calo'), -# doType1MET = True, -# genJetCollection = cms.InputTag("sisCone5GenJets"), -# doJetID = True, -# jetIdLabel = "sc5" -# ) - -## process path -process.p = cms.Path(process.patDefaultSequence * - process.tqafTtSemiLeptonic - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('tqafOutput.root'), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), - outputCommands = cms.untracked.vstring('drop *'), + fileName = cms.untracked.string('tqaf.root'), + outputCommands = cms.untracked.vstring('drop *'), dropMetaData = cms.untracked.string("DROPPED") ## NONE for none ## DROPPED for drop for dropped data ) process.outpath = cms.EndPath(process.out) ## PAT content -from PhysicsTools.PatAlgos.patEventContent_cff import * -process.out.outputCommands += patTriggerEventContent -process.out.outputCommands += patExtraAodEventContent +from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out.outputCommands += patEventContentNoCleaning - ## TQAF content -from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import * +from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import tqafEventContent process.out.outputCommands += tqafEventContent diff --git a/TopQuarkAnalysis/TopEventProducers/test/tqaf_woGeneratorInfo_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/tqaf_woGeneratorInfo_cfg.py index a2a3a6a756478..e2dfe634f283b 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/tqaf_woGeneratorInfo_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/tqaf_woGeneratorInfo_cfg.py @@ -17,86 +17,56 @@ ) ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag,'auto:com10') +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:com10_7E33v4') +process.load("Configuration.StandardSequences.MagneticField_cff") #------------------------------------------------- # PAT and TQAF configuration #------------------------------------------------- ## std sequence for PAT -process.load("PhysicsTools.PatAlgos.patSequences_cff") - -process.patJets.addTagInfos = False +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence for TQAF process.load("TopQuarkAnalysis.TopEventProducers.tqafSequences_cff") ## remove MC specific stuff in TQAF -process.tqafTtSemiLeptonic.remove(process.makeGenEvt) -from TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff import * +from TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff import addTtSemiLepHypotheses addTtSemiLepHypotheses(process, ["kGeom", "kWMassMaxSumPt", "kMaxSumPtWMass"]) -removeTtSemiLepHypGenMatch(process) - -## process path -process.p = cms.Path(process.patDefaultSequence * - process.tqafTtSemiLeptonic - ) ## configure output module process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('tqafOutput.woGeneratorInfo.root'), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), + fileName = cms.untracked.string('tqaf_woGeneratorInfo.root'), outputCommands = cms.untracked.vstring('drop *'), dropMetaData = cms.untracked.string("DROPPED") ## NONE for none ## DROPPED for drop for dropped data ) process.outpath = cms.EndPath(process.out) -### remove MC specific stuff in PAT -#from PhysicsTools.PatAlgos.tools.coreTools import * -#removeMCMatching(process, ["All"]) -# FIXME: very (too) simple to replace functionality from removed coreTools.py -from PhysicsTools.PatAlgos.tools.helpers import removeIfInSequence -process.patElectrons.addGenMatch = False -removeIfInSequence(process, 'electronMatch', "patDefaultSequence") -process.patJets.addGenPartonMatch = False -removeIfInSequence(process, 'patJetPartons', "patDefaultSequence") -removeIfInSequence(process, 'patJetPartonAssociation', "patDefaultSequence") -removeIfInSequence(process, 'patJetPartonMatch', "patDefaultSequence") -process.patJets.addGenJetMatch = False -removeIfInSequence(process, 'patJetGenJetMatch', "patDefaultSequence") -process.patJets.getJetMCFlavour = False -removeIfInSequence(process, 'patJetFlavourId', "patDefaultSequence") -removeIfInSequence(process, 'patJetFlavourAssociation', "patDefaultSequence") -process.patMETs.addGenMET = False -process.patMuons.addGenMatch = False -removeIfInSequence(process, 'muonMatch', "patDefaultSequence") -process.patPhotons.addGenMatch = False -removeIfInSequence(process, 'photonMatch', "patDefaultSequence") -process.patTaus.addGenMatch = False -removeIfInSequence(process, 'tauMatch', "patDefaultSequence") -process.patTaus.addGenJetMatch = False -removeIfInSequence(process, 'tauGenJets', "patDefaultSequence") -removeIfInSequence(process, 'tauGenJetsSelectorAllHadrons', "patDefaultSequence") -removeIfInSequence(process, 'tauGenJetMatch', "patDefaultSequence") -process.patJetCorrFactors.levels.append( 'L2L3Residual' ) +## data specific +from PhysicsTools.PatAlgos.tools.coreTools import runOnData +runOnData( process ) +from TopQuarkAnalysis.TopEventProducers.sequences.ttSemiLepEvtBuilder_cff import removeTtSemiLepHypGenMatch +removeTtSemiLepHypGenMatch(process) ## PAT content -from PhysicsTools.PatAlgos.patEventContent_cff import * -process.out.outputCommands += patTriggerEventContent -process.out.outputCommands += patExtraAodEventContent +from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out.outputCommands += patEventContentNoCleaning +process.out.outputCommands += [ 'drop recoGenJets_*_*_*' ] ## TQAF content -from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import * +from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import tqafEventContent process.out.outputCommands += tqafEventContent +process.out.outputCommands += [ 'drop *_tt*HypGenMatch_*_*', + 'drop *_decaySubset_*_*', + 'drop *_initSubset_*_*', + 'drop *_genEvt_*_*' ] diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py index 6ec3efa0016c6..2210440077999 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttDecaySubset_cfg.py @@ -19,7 +19,8 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## produce decaySubset @@ -29,6 +30,4 @@ process.load("TopQuarkAnalysis.TopEventProducers.sequences.printGenParticles_cff") ## path -process.p = cms.Path(#process.printGenParticles * - process.decaySubset * - process.printDecaySubset) +process.p = cms.Path(process.printDecaySubset) diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py index c4182619200d5..055ec92d6980f 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttFullHadEvtBuilder_cfg.py @@ -23,20 +23,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for PAT -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the ttGenEvt process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") @@ -57,26 +57,17 @@ #from TopQuarkAnalysis.TopEventProducers.sequences.ttFullHadEvtBuilder_cff import * #setForAllTtFullHadHypotheses(process, "maxNJets", 8) -## process path -process.p = cms.Path(process.patDefaultSequence * - process.makeGenEvt * - process.makeTtFullHadEvent - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('ttFullHadEvtBuilder.root'), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), - outputCommands = cms.untracked.vstring('drop *'), + outputCommands = cms.untracked.vstring('drop *'), dropMetaData = cms.untracked.string('DROPPED') ) process.outpath = cms.EndPath(process.out) ## PAT content -from PhysicsTools.PatAlgos.patEventContent_cff import * -process.out.outputCommands += patTriggerEventContent -process.out.outputCommands += patExtraAodEventContent +from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out.outputCommands += patEventContentNoCleaning ## TQAF content -from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import * +from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import tqafEventContent process.out.outputCommands += tqafEventContent diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py index 147d964fa5241..a8f6602237f20 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttFullLepEvtBuilder_cfg.py @@ -23,20 +23,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the ttGenEvt process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") @@ -46,7 +46,7 @@ process.ttFullLepEvent.verbosity = 1 ## optional change of settings -#from TopQuarkAnalysis.TopEventProducers.sequences.ttFullLepEvtBuilder_cff import * +#from TopQuarkAnalysis.TopEventProducers.sequences.ttFullLepEvtBuilder_cff import * #removeTtFullLepHypGenMatch(process) #setForAllTtFullLepHypotheses(process,"muons","myMuons") @@ -54,26 +54,17 @@ #setForAllTtFullLepHypotheses(process,"maxNJets",4) #setForAllTtFullLepHypotheses(process,"jetCorrectionLevel","part") -## process path -process.p = cms.Path(process.patDefaultSequence * - process.makeGenEvt * - process.makeTtFullLepEvent - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('ttFullLepEvtBuilder.root'), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), - outputCommands = cms.untracked.vstring('drop *'), + outputCommands = cms.untracked.vstring('drop *'), dropMetaData = cms.untracked.string('DROPPED') ) process.outpath = cms.EndPath(process.out) -## pat content -from PhysicsTools.PatAlgos.patEventContent_cff import * -process.out.outputCommands += patTriggerEventContent -process.out.outputCommands += patExtraAodEventContent +## PAT content +from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out.outputCommands += patEventContentNoCleaning -## tqaf content -from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import * +## TQAF content +from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import tqafEventContent process.out.outputCommands += tqafEventContent diff --git a/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py b/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py index 4d173c7510186..c8dbb4a5e0b72 100644 --- a/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py +++ b/TopQuarkAnalysis/TopEventProducers/test/ttSemiLepEvtBuilder_cfg.py @@ -25,20 +25,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for PAT -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the ttGenEvt process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") @@ -70,26 +70,17 @@ ## use electrons instead of muons for the hypotheses #useElectronsForAllTtSemiLepHypotheses(process) -## process path -process.p = cms.Path(process.patDefaultSequence * - process.makeGenEvt * - process.makeTtSemiLepEvent - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('ttSemiLepEvtBuilder.root'), - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), - outputCommands = cms.untracked.vstring('drop *'), + outputCommands = cms.untracked.vstring('drop *'), dropMetaData = cms.untracked.string('DROPPED') ) process.outpath = cms.EndPath(process.out) ## PAT content -from PhysicsTools.PatAlgos.patEventContent_cff import * -process.out.outputCommands += patTriggerEventContent -process.out.outputCommands += patExtraAodEventContent +from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out.outputCommands += patEventContentNoCleaning ## TQAF content -from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import * +from TopQuarkAnalysis.TopEventProducers.tqafEventContent_cff import tqafEventContent process.out.outputCommands += tqafEventContent diff --git a/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVAComputer_cfg.py b/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVAComputer_cfg.py index d14f2336dbb41..70dd2a9cd008f 100644 --- a/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVAComputer_cfg.py +++ b/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVAComputer_cfg.py @@ -18,7 +18,7 @@ '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_1.root', '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_4.root', '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_8.root', - '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_7.root', + '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_7.root', '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_3.root', '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_6.root', '/store/user/eschliec/Summer09/7TeV/QCD/pt0015-pythia/patTuple_9.root', @@ -33,7 +33,7 @@ #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_1.root', #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_4.root', #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_8.root', - #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_7.root', + #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_7.root', #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_3.root', #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_6.root', #'/store/user/eschliec/Summer09/7TeV/QCD/pt1400-pythia/patTuple_9.root', @@ -63,18 +63,20 @@ ) ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") -process.GlobalTag.globaltag = cms.string('MC_38Y_V14::All') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.TopEventSelection.TtFullHadSignalSelMVAComputer_cff") ## jet count filter @@ -86,8 +88,7 @@ ) ## path1 -process.p = cms.Path(#process.patDefaultSequence * - process.leadingJetSelection * +process.p = cms.Path(process.leadingJetSelection * process.findTtFullHadSignalSelMVA ) @@ -98,8 +99,8 @@ outputCommands = cms.untracked.vstring('drop *', 'keep double_*_DiscSel_*' ), - fileName = cms.untracked.string('MVAComputer_Output.root') + fileName = cms.untracked.string('ttFullHadSignalSelMVAComputer.root') ) ## output path process.outpath = cms.EndPath(process.out) - + diff --git a/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVATrainTreeSaver_cfg.py b/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVATrainTreeSaver_cfg.py index fb1b3dfb646f5..6d1b948949f59 100644 --- a/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVATrainTreeSaver_cfg.py +++ b/TopQuarkAnalysis/TopEventSelection/test/ttFullHadSignalSelMVATrainTreeSaver_cfg.py @@ -24,21 +24,26 @@ ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") +process.options = cms.untracked.PSet( + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) +) + +## configure geometry & conditions process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence for ttGenEvent process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") -## filter for full-hadronic +## filter for full-hadronic process.load("TopQuarkAnalysis.TopSkimming.ttDecayChannelFilters_cff") ## configure mva trainer @@ -64,6 +69,5 @@ ## produce pat objects and ttGenEvt and make mva training process.p = cms.Path(process.ttFullHadronicFilter * - process.patDefaultSequence * process.leadingJetSelection * process.saveTrainTree) diff --git a/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVAComputer_cfg.py b/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVAComputer_cfg.py index 08001f2caa0a8..d4aecbe1ed8d8 100644 --- a/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVAComputer_cfg.py +++ b/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVAComputer_cfg.py @@ -19,24 +19,23 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") process.load("TopQuarkAnalysis.TopEventSelection.TtSemiLepSignalSelMVAComputer_cff") ## path1 -process.p = cms.Path(process.patDefaultSequence * - process.findTtSemiLepSignalSelMVA +process.p = cms.Path(process.findTtSemiLepSignalSelMVA ) ## output module @@ -46,8 +45,8 @@ outputCommands = cms.untracked.vstring('drop *', 'keep double_*_DiscSel_*' ), - fileName = cms.untracked.string('MVAComputer_Output.root') + fileName = cms.untracked.string('ttSemiLepSignalSelMVAComputer.root') ) ## output path process.outpath = cms.EndPath(process.out) - + diff --git a/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVATrainTreeSaver_cfg.py b/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVATrainTreeSaver_cfg.py index 1d2c175982a2c..3143d22e14335 100644 --- a/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVATrainTreeSaver_cfg.py +++ b/TopQuarkAnalysis/TopEventSelection/test/ttSemiLepSignalSelMVATrainTreeSaver_cfg.py @@ -19,17 +19,16 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + #allowUnscheduled = cms.untracked.bool(True), # What happens to the Looper? + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat process.load("PhysicsTools.PatAlgos.patSequences_cff") @@ -45,6 +44,8 @@ process.looper = looper ## produce pat objects and ttGenEvt and make mva training -process.p = cms.Path(process.patDefaultSequence * +process.p = cms.Path(process.particleFlowPtrs * + process.patCandidates * + process.selectedPatCandidates * process.makeGenEvt * process.saveTrainTree) diff --git a/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py b/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py index 7c44793a302f3..1b469fb001533 100644 --- a/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopHitFit/test/ttSemiLepHitFitProducer_cfg.py @@ -20,33 +20,26 @@ ) ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -#from Configuration.AlCa.autoCond import autoCond -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the kinematic fit for semi-leptonic events process.load("TopQuarkAnalysis.TopHitFit.TtSemiLepHitFitProducer_Muons_cfi") -## process path -process.p = cms.Path(process.patDefaultSequence * - process.hitFitTtSemiLepEvent - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), fileName = cms.untracked.string('ttSemiLepHitFitProducer.root'), outputCommands = cms.untracked.vstring('drop *') ) diff --git a/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVAComputer_cfg.py b/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVAComputer_cfg.py index 3b21503f5a271..f2b015b87a480 100644 --- a/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVAComputer_cfg.py +++ b/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVAComputer_cfg.py @@ -19,33 +19,28 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## configure mva computer process.load("TopQuarkAnalysis.TopJetCombination.TtSemiLepJetCombMVAComputer_cff") ## change maximum number of jets taken into account per event (default: 4) #process.findTtSemiLepJetCombMVA.maxNJets = 5 -## produce pat objects and perform MVA for jet-parton association -process.p = cms.Path(process.patDefaultSequence * - process.findTtSemiLepJetCombMVA) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), fileName = cms.untracked.string('ttSemiLepJetCombMVAComputer_muons.root'), outputCommands = cms.untracked.vstring('drop *') ) diff --git a/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVATrainTreeSaver_cfg.py b/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVATrainTreeSaver_cfg.py index a0b82e9367c77..d54a92665d43c 100644 --- a/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVATrainTreeSaver_cfg.py +++ b/TopQuarkAnalysis/TopJetCombination/test/ttSemiLepJetCombMVATrainTreeSaver_cfg.py @@ -23,20 +23,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence for ttGenEvent process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") @@ -61,8 +61,4 @@ from TopQuarkAnalysis.TopJetCombination.TtSemiLepJetCombMVATrainTreeSaver_cff import looper process.looper = looper -process.p = cms.Path(process.makeGenEvt * - process.patDefaultSequence * - process.ttSemiLeptonicFilter * - process.ttSemiLepJetPartonMatch * - process.saveTtSemiLepJetCombMVATrainTree) +process.p = cms.Path(process.trainTtSemiLepJetCombMVA) diff --git a/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py b/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py index 2dd8b54152461..3acc179885bbd 100644 --- a/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopKinFitter/test/ttFullHadKinFitProducer_cfg.py @@ -27,20 +27,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") - -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") ## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## do event filtering on generator level process.load("TopQuarkAnalysis.TopSkimming.ttDecayChannelFilters_cff") @@ -49,14 +49,12 @@ process.load("TopQuarkAnalysis.TopKinFitter.TtFullHadKinFitProducer_cfi") ## process path -process.p = cms.Path(process.ttFullHadronicFilter * - process.patDefaultSequence * - process.kinFitTtFullHadEvent +process.p = cms.Path(process.ttFullHadronicFilter ) ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), + SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), fileName = cms.untracked.string('ttFullHadKinFitProducer.root'), outputCommands = cms.untracked.vstring('drop *') ) diff --git a/TopQuarkAnalysis/TopKinFitter/test/ttFullLepKinSolutionProducer_cfg.py b/TopQuarkAnalysis/TopKinFitter/test/ttFullLepKinSolutionProducer_cfg.py index 06fe87b762e51..864be97d64a68 100644 --- a/TopQuarkAnalysis/TopKinFitter/test/ttFullLepKinSolutionProducer_cfg.py +++ b/TopQuarkAnalysis/TopKinFitter/test/ttFullLepKinSolutionProducer_cfg.py @@ -19,32 +19,26 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the kinematic solution for fully leptonic events process.load("TopQuarkAnalysis.TopKinFitter.TtFullLepKinSolutionProducer_cfi") -## process path -process.p = cms.Path(process.patDefaultSequence * - process.kinSolutionTtFullLepEvent - ) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), fileName = cms.untracked.string('ttFullLepKinSolutionProducer.root'), outputCommands = cms.untracked.vstring('drop *') ) diff --git a/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py b/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py index 799e0f52a89ab..949bc680870c0 100644 --- a/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py +++ b/TopQuarkAnalysis/TopKinFitter/test/ttSemiLepKinFitProducer_cfg.py @@ -27,30 +27,25 @@ ) ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the kinematic fit for semi-leptonic events process.load("TopQuarkAnalysis.TopKinFitter.TtSemiLepKinFitProducer_Muons_cfi") process.kinFitTtSemiLepEvent.constraints = [1,2] -## process path -process.p = cms.Path(process.patDefaultSequence * - process.kinFitTtSemiLepEvent - ) - ## use object resolutions from a specific config file #from TopQuarkAnalysis.TopObjectResolutions.stringResolutions_etEtaPhi_Summer11_cff import * #process.kinFitTtSemiLepEvent.udscResolutions = udscResolutionPF.functions @@ -60,7 +55,6 @@ ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), fileName = cms.untracked.string('ttSemiLepKinFitProducer.root'), outputCommands = cms.untracked.vstring('drop *') ) diff --git a/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py b/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py index 2b15b4d131145..7f48fce842b32 100644 --- a/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py +++ b/TopQuarkAnalysis/TopTools/test/ttJetPartonMatch_cfg.py @@ -23,20 +23,20 @@ ## configure process options process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(False) + allowUnscheduled = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(True) ) ## configure geometry & conditions -#process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") -process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:startup') +process.load("Configuration.StandardSequences.MagneticField_cff") -from Configuration.AlCa.autoCond import autoCond -process.GlobalTag.globaltag = autoCond['mc'] - -## std sequence for pat -process.load("PhysicsTools.PatAlgos.patSequences_cff") +## std sequence for PAT +process.load("PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff") +process.load("PhysicsTools.PatAlgos.selectionLayer1.selectedPatCandidates_cff") ## std sequence to produce the ttGenEvt process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") @@ -67,17 +67,9 @@ #process.ttSemiLepJetPartonMatch.maxNJets = 5 #default: 4 #process.ttSemiLepJetPartonMatch.maxNComb = 1 #default: 1 -## process path -process.p = cms.Path(process.patDefaultSequence * - process.makeGenEvt * - process.ttFullHadJetPartonMatch * - process.ttFullLepJetPartonMatch * - process.ttSemiLepJetPartonMatch) - ## configure output module process.out = cms.OutputModule("PoolOutputModule", - SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring('p') ), - fileName = cms.untracked.string('ttJetPartonMatch.root'), + fileName = cms.untracked.string('ttJetPartonMatch.root'), outputCommands = cms.untracked.vstring('drop *') ) process.out.outputCommands += ['keep *_ttFullHadJetPartonMatch_*_*', diff --git a/Utilities/RelMon/python/authentication.py b/Utilities/RelMon/python/authentication.py old mode 100644 new mode 100755 diff --git a/Utilities/RelMon/python/definitions.py b/Utilities/RelMon/python/definitions.py old mode 100644 new mode 100755 diff --git a/Utilities/RelMon/python/directories2html.py b/Utilities/RelMon/python/directories2html.py old mode 100644 new mode 100755 index b697ca3f605e2..3f0c4518795fb --- a/Utilities/RelMon/python/directories2html.py +++ b/Utilities/RelMon/python/directories2html.py @@ -3,9 +3,8 @@ # https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon # # $Author: anorkus $ -# $Date: 2013/03/07 11:46:56 $ -# $Revision: 1.6 $ - +# $Date: 2013/07/09 14:00:21 $ +# $Revision: 1.10 $ # # # Danilo Piparo CERN - danilo.piparo@cern.ch @@ -57,10 +56,10 @@ def build_obj(run,sample,version,plot_path,tier): obj_url="obj=%s;" %build_obj_addr(run,sample,version,plot_path,tier) return encode_obj_url(obj_url) -def fairy_url(run,sample,version1,version2,plot_path,tier1,tier2,draw_opts="",h=250,w=200): +def fairy_url(run1,run2,sample1,sample2,version1,version2,plot_path,tier1,tier2,draw_opts="",h=250,w=200): fairy_url = "%s/%s/plotfairy/overlay?" %(server,base_url) - fairy_url+= build_obj(run,sample,version1,plot_path,tier1) - fairy_url+= build_obj(run,sample,version2,plot_path,tier2) + fairy_url+= build_obj(run1,sample1,version1,plot_path,tier1) + fairy_url+= build_obj(run2,sample2,version2,plot_path,tier2) if len(draw_opts)>0: fairy_url+="drawopts=%s;" %draw_opts fairy_url+= plot_size(h,w) @@ -76,7 +75,10 @@ def fairy_url_single(run,sample,version,plot_path,tier,draw_opts="",h=250,w=200) #------------------------------------------------------------------------------- style_location="/cms-service-reldqm" -def get_page_header(directory=None,additional_header=""): +def get_page_header(directory=None, standalone=False, additional_header=""): + style_location="/cms-service-reldqm" + if standalone: + style_location = "http://cms-service-reldqm.web.cern.ch/" + style_location +"/" javascripts='' style='' if directory!=None and len(directory.comparisons)>0: @@ -117,7 +119,11 @@ def get_page_footer(): #------------------------------------------------------------------------------- -def get_title_section(directory, hashing_flag, depth=2): +def get_title_section(directory, hashing_flag, standalone, depth=2): + if standalone: + cms_logo_url = "http://cms-service-reldqm.web.cern.ch/cms-service-reldqm/style/CMS.gif" + else: + cms_logo_url = "cms-service-reldqm/style/CMS.gif" mother_name=basename(directory.mother_dir) mother_file_name="" if depth==1: @@ -125,17 +131,18 @@ def get_title_section(directory, hashing_flag, depth=2): if mother_name!="": mother_file_name="%s.html" %(hash_name(mother_name, hashing_flag)) elif depth==2: - #mother_file_name="RelMonSummary.html" - mother_file_name="%s.html" %(hash_name("RelMonSummary", hashing_flag)) + mother_file_name="RelMonSummary.html" + #mother_file_name="%s.html" %(hash_name("RelMonSummary", hashing_flag)) if mother_name!="": mother_file_name="%s.html" %(hash_name(mother_name, hashing_flag)) else: if hashing_flag: files = directory.mother_dir.split("/") if len(files) != 1: - dir_name = files[-2] ##return the mother directory name only as the html file name by it + dir_name = files[-2]+files[-1] ##return the mother directory name only as the html file name by it else: dir_name = files[-1] + dir_name = directory.mother_dir mother_file_name="%s.html" %(hash_name(dir_name, hashing_flag)) else: mother_file_name="%s.html" %directory.mother_dir.replace("/","_") @@ -149,7 +156,7 @@ def get_title_section(directory, hashing_flag, depth=2): '

%s

'%link_to_mother+\ ''+\ '
'+\ - ''+\ + ''%cms_logo_url+\ '
'+\ '
' if len(mother_name)>0: @@ -169,6 +176,8 @@ def get_dir_stats(directory): html+='
  • Fail: %.1f%% (%s)
  • '%(directory.get_fail_rate(),directory.n_fails) if directory.n_skiped>0: html+='
  • Skipped: %.1f%% (%s)
  • '%(directory.get_skiped_rate(),directory.n_skiped) + if directory.n_missing_objs>0: + html+='
  • Unpaired: %s
  • '%(directory.n_missing_objs) html+='' return html @@ -187,7 +196,7 @@ def get_subdirs_section(directory, hashing_flag): for subdir in sorted_subdirs: name=subdir.name if hashing_flag: - link = "%s.html" %(hash_name(name, hashing_flag)) + link = "%s.html" %(hash_name(join(directory.full_path,name), hashing_flag)) #do hash with directory name + subdirname as single name hashing might get problems with same subdirs name in different parent dirs. else: link="%s_%s_%s.html" %(directory.mother_dir.replace("/","_"),directory.name.replace("/","_"),name) link=link.strip("_") @@ -256,7 +265,7 @@ def get_summary_section(directory,matrix_page=True): '
    ' if matrix_page: html+='

    Sample:

    '+\ - '

    %s

    '%meta.sample+\ + '

    %s

    '%meta.sample1+\ '

    Run1 and Run2:

    '+\ '

    %s - %s

    '%(meta.run1,meta.run2) html+='

    Releases:

    '+\ @@ -305,7 +314,9 @@ def get_comparisons(category,directory): '
    '%(png_link,png_link,cat_classes[category]) else: big_fairy=fairy_url(directory.meta.run1, - directory.meta.sample, + directory.meta.run2, + directory.meta.sample1, + directory.meta.sample2, directory.meta.release1, directory.meta.release2, comp_abs_path, @@ -313,7 +324,9 @@ def get_comparisons(category,directory): directory.meta.tier2, "",600,600) small_fairy=fairy_url(directory.meta.run1, - directory.meta.sample, + directory.meta.run2, + directory.meta.sample1, + directory.meta.sample2, directory.meta.release1, directory.meta.release2, comp_abs_path, @@ -321,13 +334,13 @@ def get_comparisons(category,directory): directory.meta.tier2) single_fairy1=fairy_url_single(directory.meta.run1, - directory.meta.sample, + directory.meta.sample1, directory.meta.release1, comp_abs_path, directory.meta.tier1, "",500,500) single_fairy2=fairy_url_single(directory.meta.run2, - directory.meta.sample, + directory.meta.sample2, directory.meta.release2, comp_abs_path, directory.meta.tier2, @@ -401,7 +414,21 @@ def get_rank_section(directory): #------------------------------------------------------------------------------- -def directory2html(directory, hashing, depth=0): +#------------------------------------------------------------------------------- +def get_missing_objs_section(directory): + """Method to get missing objects from directory: in case histogram/directory was in one ROOT file but not in other + """ + page_html = "Unpaired in %s
    "%(directory.filename1) + for elem in directory.different_histograms['file1']: + page_html += "name: %s type:%s
    "%(elem,directory.different_histograms['file1'][elem]) + page_html +="
    " + page_html += "Unpaired in %s
    "%(directory.filename2) + for elem in directory.different_histograms['file2']: + page_html += "name: %s type:%s
    "%(elem,directory.different_histograms['file2'][elem]) + return page_html +#------------------------------------------------------------------------------- + +def directory2html(directory, hashing, standalone, depth=0): """Converts a directory tree into html pages, very nice ones. """ #print "d2html: depth", str(depth)," dir ",directory.name @@ -414,10 +441,10 @@ def directory2html(directory, hashing, depth=0): #chdir(directory.name) for subdir in directory.subdirs: - directory2html(subdir,hashing, depth) + directory2html(subdir,hashing,standalone, depth) - page_html=get_page_header(directory)+\ - get_title_section(directory,hashing, depth)+\ + page_html=get_page_header(directory, standalone)+\ + get_title_section(directory,hashing, standalone, depth)+\ get_summary_section(directory)+\ get_subdirs_section(directory, hashing) @@ -428,6 +455,9 @@ def directory2html(directory, hashing, depth=0): (directory.n_comp_skiped >0,SKIPED)): if do_cat: page_html+=get_comparisons(cat,directory) + + if (len(directory.different_histograms['file1']) >0) or (len(directory.different_histograms['file2']) >0): + page_html += get_missing_objs_section(directory) # Distribution of ranks @@ -442,7 +472,12 @@ def directory2html(directory, hashing, depth=0): if len(page_name)==0: page_name="RelMonSummary" if hashing: - ofilename = "%s.html" %(hash_name(page_name, hashing)) + if page_name != "RelMonSummary": + #print " ## oFile path: %s"%(join(directory.full_path)) + #print " ## oFile hash: %s"%(hash_name(join(directory.full_path), hashing)) + ofilename = "%s.html" %(hash_name(join(directory.full_path), hashing)) #as links is generated: parentdi+subdir; we split and get the last parent dir + else: + ofilename = "RelMonSummary.html" else: ofilename="%s_%s.html" %(directory.mother_dir.replace("/","_"),page_name) ofilename=ofilename.strip("_") @@ -659,7 +694,7 @@ def make_barchart_summary(dir_dict,name="the_chart",title="DQM directory",the_ag #------------------------------------------------------------------------------- -def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_flag): +def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_flag, standalone_flag): """Create a table, with as rows the directories and as columns the samples. Each box in the table will contain a pie chart linking to the directory. """ @@ -709,7 +744,7 @@ def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_ directories_barchart=make_barchart_summary(dir_dict,'dir_chart',"DQM Directory") categories_barchart=make_barchart_summary(dir_dict,'cat_chart','Category',aggregation_rules) - page_html = get_page_header(additional_header=directories_barchart+categories_barchart) + page_html = get_page_header(standalone=standalone_flag, additional_header=directories_barchart+categories_barchart) rel1="" rel2="" try: @@ -727,6 +762,8 @@ def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_ all_subdirs.append(subdir_name) all_subdirs=sorted(list(set(all_subdirs))) + #print " $$ all_subdirs: %s" %(all_subdirs) + # Get The title page_html+= '
    '+\ '

    RelMon Global Report: %s

    '%title+\ @@ -811,7 +848,7 @@ def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_ for sample in sorted_samples: col=dir_dict[sample] # check if the directory was a top one or not - summary_page_name=hash_name("RelMonSummary", hashing_flag)+".html" + summary_page_name="RelMonSummary.html" if col.name!="": summary_page_name=hash_name(col.name, hashing_flag)+".html" img_link=col.get_summary_chart_ajax(55,55) @@ -849,10 +886,18 @@ def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_ subdirs_dict=directory.get_subdirs_dict() # Check if the directory is the top one - summary_page=join(sample,"%s.html"%(hash_name(subdir_name, hashing_flag))) if directory.name!="": - # We did not run on the topdir - summary_page=join(sample,"%s_%s.html"%(directory.name,hash_name(subdir_name,hashing_flag))) + # We did not run on the topdir + #print " ## summary_page: %s"%(directory.name+"_"+subdir_name) + #print " ## summary_page hash: %s" %(hash_name(directory.name+"/"+subdir_name,hashing_flag)) + if hashing_flag: + summary_page=join(sample,"%s.html"%(hash_name(directory.name+"/"+subdir_name,hashing_flag))) + else: + summary_page=join(sample,"%s.html"%(hash_name(directory.name+"_"+subdir_name,hashing_flag))) + else: + #print " ## summary_page: %s"%(directory.name+subdir_name) + #print " ## summary_page hash: %s" %(hash_name(directory.name+subdir_name,hashing_flag)) + summary_page=join(sample,"%s.html"%(hash_name(directory.name+subdir_name,hashing_flag))) dir_is_there=subdirs_dict.has_key(subdir_name) img_link="https://chart.googleapis.com/chart?cht=p3&chco=C0C0C0&chs=50x50&chd=t:1" @@ -886,6 +931,7 @@ def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_ #-----------UPDATES------ def hash_name(file_name, flag): + #print " HashFILE name: "+file_name if flag: #if hashing flag is ON then return return hashlib.md5(file_name).hexdigest()[:10] #md5 hashed file name with length 10 else: diff --git a/Utilities/RelMon/python/dirstructure.py b/Utilities/RelMon/python/dirstructure.py old mode 100644 new mode 100755 index 837c5280276c9..d6845312b5411 --- a/Utilities/RelMon/python/dirstructure.py +++ b/Utilities/RelMon/python/dirstructure.py @@ -3,8 +3,8 @@ # https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon # # $Author: anorkus $ -# $Date: 2012/11/21 15:22:14 $ -# $Revision: 1.3 $ +# $Date: 2013/07/05 09:45:01 $ +# $Revision: 1.5 $ # # # Danilo Piparo CERN - danilo.piparo@cern.ch @@ -48,8 +48,9 @@ def __init__(self,name,weight=1): #------------------------------------------------------------------------------- class CompInfo(object): - def __init__(self,sample="",release1="",release2="",run1="",run2="",tier1=0,tier2=0): - self.sample=sample + def __init__(self,sample1="",sample2="",release1="",release2="",run1="",run2="",tier1=0,tier2=0): + self.sample1=sample1 + self.sample2=sample2 self.release1=release1 self.release2=release2 self.run1=run1 @@ -79,7 +80,14 @@ def __init__(self,name,mother_dir="",meta=CompInfo(),draw_success=False,do_pngs= self.do_pngs=do_pngs self.rank_histo=TH1I("rh%s"%name,"",50,-0.01,1.001) self.rank_histo.SetDirectory(0) - + self.different_histograms = {} + self.different_histograms['file1']= {} + self.different_histograms['file2']= {} + self.filename1 = "" + self.filename2 = "" + self.n_missing_objs = 0 + self.full_path = "" + def is_empty(self): if len(self.subdirs)==0 and len(self.comparisons)==0: return True @@ -102,7 +110,10 @@ def calcStats(self,make_pie=True): self.n_skiped = 0 self.n_comp_skiped = 0 - + self.n_missing_objs = len(self.different_histograms['file1'].keys())+len(self.different_histograms['file2'].keys()) + if self.n_missing_objs != 0: + print " [*] Missing in %s: %s" %(self.filename1, self.different_histograms['file1']) + print " [*] Missing in %s: %s" %(self.filename2, self.different_histograms['file2']) # clean from empty dirs self.subdirs = filter(lambda subdir: not subdir.is_empty(),self.subdirs) @@ -126,6 +137,7 @@ def calcStats(self,make_pie=True): for subdir in self.subdirs: subdir.mother_dir=join(self.mother_dir,self.name) + subdir.full_path = join(self.mother_dir,self.name).replace("/Run summary","") subdir.calcStats(make_pie) subdir.meta=self.meta self.weight+=subdir.weight @@ -134,10 +146,12 @@ def calcStats(self,make_pie=True): self.n_nulls+=subdir.n_nulls self.n_skiped+=subdir.n_skiped + self.n_missing_objs += subdir.n_missing_objs self.rank_histo.Add(subdir.rank_histo) - self.stats_calculated=True + self.stats_calculated=True + self.full_path = join(self.mother_dir,self.name).replace("/Run summary","") #if make_pie: #self.__create_pie_image() @@ -186,6 +200,7 @@ def print_report(self,indent="",verbose=False): print " o Nulls: %.2f%% (%s/%s) " %(self.get_null_rate(),self.n_nulls,self.weight) print " o Successes: %.2f%% (%s/%s) " %(self.get_success_rate(),self.n_successes,self.weight) print " o Skipped: %.2f%% (%s/%s) " %(self.get_skiped_rate(),self.n_skiped,self.weight) + print " o Missing objects: %s" %(self.n_missing_objs) def get_skiped_rate(self): if self.weight == 0: return 0 diff --git a/Utilities/RelMon/python/dqm_interfaces.py b/Utilities/RelMon/python/dqm_interfaces.py old mode 100644 new mode 100755 index 2d30160a63fda..480f4caf197cc --- a/Utilities/RelMon/python/dqm_interfaces.py +++ b/Utilities/RelMon/python/dqm_interfaces.py @@ -2,9 +2,9 @@ # RelMon: a tool for automatic Release Comparison # https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon # -# $Author: dpiparo $ -# $Date: 2013/03/06 09:50:18 $ -# $Revision: 1.6 $ +# $Author: anorkus $ +# $Date: 2013/07/10 14:37:45 $ +# $Revision: 1.9 $ # # # Danilo Piparo CERN - danilo.piparo@cern.ch @@ -13,7 +13,7 @@ from copy import deepcopy from os import chdir,getcwd,makedirs -from os.path import abspath,exists,join +from os.path import abspath,exists,join, basename from re import sub,search from re import compile as recompile from sys import exit,stderr,version_info @@ -554,6 +554,9 @@ def __init__(self, name, topdirname,rootfilename1, rootfilename2, run=-1, black_ self.directory.draw_success=draw_success self.directory.do_pngs=do_pngs self.black_list_histos = black_list_histos + self.different_histograms = {} + self.filename1 = basename(rootfilename2) + self.filename2 = basename(rootfilename1) def __del__(self): chdir(self.workdir) @@ -589,10 +592,35 @@ def ls(self,directory_name=""): """ contents1=self.dqmrootfile1.ls(directory_name) contents2=self.dqmrootfile2.ls(directory_name) + #print "cont1: %s"%(contents1) + #print "cont2: %s"%(contents2) contents={} - keys = filter(lambda key: contents1.has_key(key),contents2.keys()) - for key in keys: - #if contents1[key]==contents2[key]: + self.different_histograms['file1']= {} + self.different_histograms['file2']= {} + keys = filter(lambda key: contents1.has_key(key),contents2.keys()) #set of all possible contents from both files + #print " ## keys: %s" %(keys) + for key in keys: #iterate on all unique keys + if contents1[key]!=contents2[key]: + diff_file1 = set(contents1.keys()) - set(contents2.keys()) #set of contents that file1 is missing + diff_file2 = set(contents2.keys()) - set(contents1.keys()) #--'-- that file2 is missing + for key1 in diff_file1: + obj_type = contents1[key1] + if obj_type == "TDirectoryFile": + self.different_histograms['file1'][key1] = contents1[key1] #if direcory + #print "\n Missing inside a dir: ", self.ls(key1) + #contents[key] = contents1[key1] + if obj_type[:2]!="TH" and obj_type[:3]!="TPr" : #if histogram + continue + self.different_histograms['file1'][key1] = contents1[key1] + for key1 in diff_file2: + obj_type = contents2[key1] + if obj_type == "TDirectoryFile": + self.different_histograms['file2'][key1] = contents2[key1] #if direcory + #print "\n Missing inside a dir: ", self.ls(key1) + #contents[key] = contents2[key1] + if obj_type[:2]!="TH" and obj_type[:3]!="TPr" : #if histogram + continue + self.different_histograms['file2'][key1] = contents2[key1] contents[key]=contents1[key] return contents @@ -607,7 +635,7 @@ def __fill_single_dir(self,dir_name,directory,mother_name="",depth=0): # see if in black_list this_dir=DirID(dir_name,depth) - #print this_dir + #print " ## this_dir: %s"%(this_dir) if this_dir in self.black_list: #print "Directory %s skipped because black-listed" %dir_name return 0 @@ -615,7 +643,8 @@ def __fill_single_dir(self,dir_name,directory,mother_name="",depth=0): depth+=1 self.cd(dir_name) - #print self.ls() + #if dir_name == 'HLTJETMET': + # print self.ls() #print "Test %s with thre %s" %(self.stat_test.name, self.stat_test.threshold) @@ -668,6 +697,10 @@ def __fill_single_dir(self,dir_name,directory,mother_name="",depth=0): deepcopy(self.stat_test), draw_success=directory.draw_success, do_pngs=directory.do_pngs, skip=False)) + directory.filename1 = self.filename1 + directory.filename2 = self.filename2 + directory.different_histograms['file1'] = self.different_histograms['file1'] + directory.different_histograms['file2'] = self.different_histograms['file2'] self.cd("..") diff --git a/Utilities/RelMon/python/progressbar.py b/Utilities/RelMon/python/progressbar.py old mode 100644 new mode 100755 diff --git a/Utilities/RelMon/python/utils.py b/Utilities/RelMon/python/utils.py old mode 100644 new mode 100755 diff --git a/Utilities/RelMon/scripts/ValidationMatrix.py b/Utilities/RelMon/scripts/ValidationMatrix.py index 4201750e1b87b..3cca10157923b 100755 --- a/Utilities/RelMon/scripts/ValidationMatrix.py +++ b/Utilities/RelMon/scripts/ValidationMatrix.py @@ -4,8 +4,8 @@ # https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon # # $Author: anorkus $ -# $Date: 2012/10/25 16:10:22 $ -# $Revision: 1.8 $ +# $Date: 2013/07/10 14:37:45 $ +# $Revision: 1.11 $ # # # Danilo Piparo CERN - danilo.piparo@cern.ch @@ -79,10 +79,12 @@ def guess_params(ref_filenames,test_filenames): ref_version=name2version(ref) test_sample=name2sample(test) test_version=name2version(test) + + print " ## sample 1: %s vs sample 2: %s"%(ref_sample, test_sample) if ref_sample!=test_sample: print "Files %s and %s do not seem to be relative to the same sample." %(ref, test) - exit(2) + # exit(2) # Slightly modify for data if search("20[01]",ref_version)!=None: @@ -147,7 +149,7 @@ def guess_blacklists(samples,ver1,ver2,hlt): """ blacklists={} for sample in samples: - blacklists[sample]="FED@1,AlcaBeamMonitor@1,Physics@1,Info@-1,HLT@1,AlCaReco@1" + blacklists[sample]="FED@1,AlcaBeamMonitor@1,HLT@1,AlCaReco@1" # HLT if hlt: #HLT @@ -156,9 +158,6 @@ def guess_blacklists(samples,ver1,ver2,hlt): print "We are treating MC files for the HLT" for pattern,blist in definitions.hlt_mc_pattern_blist_pairs: blacklists[sample]=add_to_blacklist(blacklists[sample],pattern,sample,blist) -# print 'HLT '+pattern -# print 'HLT '+sample -# print 'HLT '+blacklists[sample] else: print "We are treating Data files for the HLT" # at the moment it does not make sense since hlt is ran already @@ -295,6 +294,8 @@ def call_compare_using_files(args): if options.blacklist_file: command += " --use_black_file " + if options.standalone: + command += " --standalone " if len(blacklists[sample]) >0: command+= '-B %s ' %blacklists[sample] print "\nExecuting -- %s" %command @@ -411,7 +412,7 @@ def do_reports(indir): os.chdir("..") #------------------------------------------------------------------------------- -def do_html(options, hashing_flag): +def do_html(options, hashing_flag, standalone): if options.reports: print "Preparing reports for the single files..." @@ -427,7 +428,7 @@ def do_html(options, hashing_flag): else: aggregation_rules=definitions.aggr_pairs_dict['reco'] aggregation_rules_twiki=definitions.aggr_pairs_twiki_dict['reco'] - table_html = make_summary_table(options.input_dir,aggregation_rules,aggregation_rules_twiki, hashing_flag) + table_html = make_summary_table(options.input_dir,aggregation_rules,aggregation_rules_twiki, hashing_flag, standalone) # create summary html file ofile = open("RelMonSummary.html","w") @@ -532,12 +533,18 @@ def do_html(options, hashing_flag): dest="hash_name", default=False, help="Set if you want to minimize & hash the output HTML files.") -##--Blacklist File --## +##--Blacklist File --## parser.add_option("--use_black_file", action="store_true", dest="blacklist_file", default=False, help="Use a black list file of histograms located @ /RelMon/data") +##-- USE CSS files in web access, for stand-alone usage --## + parser.add_option("--standalone", + action="store_true", + dest="standalone", + default=False, + help="Define that using RelMon in standalone method. Makes CSS files accessible over HTTP") (options, args) = parser.parse_args() @@ -549,7 +556,7 @@ def do_html(options, hashing_flag): if len(options.all_samples)>0 or (len(options.ref_samples)*len(options.test_samples)>0): do_comparisons_threaded(options) if len(options.input_dir)>0: - do_html(options, options.hash_name) + do_html(options, options.hash_name, options.standalone) diff --git a/Utilities/RelMon/scripts/compare_using_files.py b/Utilities/RelMon/scripts/compare_using_files.py index 3cce9817aba2f..7d986518de33f 100755 --- a/Utilities/RelMon/scripts/compare_using_files.py +++ b/Utilities/RelMon/scripts/compare_using_files.py @@ -2,9 +2,9 @@ ################################################################################ # https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon # -# $Author: anorkus $ -# $Date: 2012/10/25 16:10:22 $ -# $Revision: 1.6 $ +# $Author: dpiparo $ +# $Date: 2013/04/22 13:30:05 $ +# $Revision: 1.8 $ # # # Danilo Piparo CERN - danilo.piparo@cern.ch @@ -142,6 +142,12 @@ def getInfoFromFilename(filename): dest="blacklist_file", default=False, help="Use a black list file of histograms located @ /RelMon/data") +##-- USE CSS files in web access, for stand-alone usage --## +parser.add_option("--standalone", + action="store_true", + dest="standalone", + default=False, + help="Makes CSS files accessible over HTTP") def blackListedHistos(): ##GET a black-list file of histograms## @@ -206,11 +212,12 @@ def blackListedHistos(): print "Reading meta from commandline" sample1=sample2=options.sample cmssw_release1,cmssw_release2=options.metas.split('@@@') + options.standalone = True # check if the sample is the same if sample1!=sample2: print "I am puzzled. Did you choose two different samples?" - exit(1) + #exit(1) sample = sample1 # check if the run is the same @@ -280,7 +287,8 @@ def blackListedHistos(): directory=dirwalker.directory # Set some meta for the page generation - directory.meta.sample=sample + directory.meta.sample1=sample1 + directory.meta.sample2=sample2 directory.meta.run1=run1 directory.meta.run2=run2 directory.meta.release1=cmssw_release1 @@ -337,7 +345,7 @@ def blackListedHistos(): directory.calcStats() print "Producing html..." - directory2html(directory, options.hash_name) + directory2html(directory, options.hash_name, options.standalone) if not (options.report or options.compare): print "Neither comparison nor report to be executed. A typo?" diff --git a/Utilities/RelMon/scripts/fetchall_from_DQM_v2.py b/Utilities/RelMon/scripts/fetchall_from_DQM_v2.py old mode 100644 new mode 100755 diff --git a/Utilities/ReleaseScripts/scripts/addOnTests.py b/Utilities/ReleaseScripts/scripts/addOnTests.py index 61be7645d1c97..4ce19408af9d9 100755 --- a/Utilities/ReleaseScripts/scripts/addOnTests.py +++ b/Utilities/ReleaseScripts/scripts/addOnTests.py @@ -101,16 +101,16 @@ def prepare(self): 'cmsDriver.py RelVal -s HLT:HIon,RAW2DIGI,L1Reco,RECO --mc --scenario=HeavyIons -n 10 --conditions auto:starthi_HIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_HIon_STARTUP.root --fileout file:RelVal_Raw_HIon_STARTUP_HLT_RECO.root'], 'hlt3' : ['cmsDriver.py RelVal -s L1REPACK --data --scenario=pp -n 10 --conditions auto:startup --relval 9000,50 --datatier "RAW" --eventcontent RAW --fileout file:RelVal_Raw_GRun_DATA.root --filein /store/data/Run2012A/MuEG/RAW/v1/000/191/718/14932935-E289-E111-830C-5404A6388697.root', 'cmsRun '+self.file2Path('HLTrigger/Configuration/test/OnData_HLT_GRun.py'), - 'cmsDriver.py RelVal -s HLT:GRun,RAW2DIGI,L1Reco,RECO --data --scenario=pp -n 10 --conditions auto:startup_GRun --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_GRun_DATA.root --fileout file:RelVal_Raw_GRun_DATA_HLT_RECO.root'], + 'cmsDriver.py RelVal -s HLT:GRun,RAW2DIGI,L1Reco,RECO --data --scenario=pp -n 10 --conditions auto:hltonline_GRun --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_GRun_DATA.root --fileout file:RelVal_Raw_GRun_DATA_HLT_RECO.root'], 'hlt4' : ['cmsDriver.py RelVal -s L1REPACK --data --scenario=HeavyIons -n 10 --conditions auto:starthi --relval 9000,50 --datatier "RAW" --eventcontent RAW --fileout file:RelVal_Raw_HIon_DATA.root --filein /store/hidata/HIRun2011/HIHighPt/RAW/v1/000/182/838/F20AAF66-F71C-E111-9704-BCAEC532971D.root', 'cmsRun '+self.file2Path('HLTrigger/Configuration/test/OnData_HLT_HIon.py'), - 'cmsDriver.py RelVal -s HLT:HIon,RAW2DIGI,L1Reco,RECO --data --scenario=HeavyIons -n 10 --conditions auto:starthi_HIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_HIon_DATA.root --fileout file:RelVal_Raw_HIon_DATA_HLT_RECO.root'], + 'cmsDriver.py RelVal -s HLT:HIon,RAW2DIGI,L1Reco,RECO --data --scenario=HeavyIons -n 10 --conditions auto:hltonline_HIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_HIon_DATA.root --fileout file:RelVal_Raw_HIon_DATA_HLT_RECO.root'], 'hlt5' : ['cmsDriver.py TTbar_Tauola.cfi -s GEN,SIM,DIGI,L1,DIGI2RAW --mc --scenario=pp -n 10 --conditions auto:startup --relval 9000,50 --datatier "GEN-SIM-RAW" --eventcontent RAW --fileout file:RelVal_Raw_PIon_STARTUP.root', 'cmsRun ' + self.file2Path('HLTrigger/Configuration/test/OnLine_HLT_PIon.py'), 'cmsDriver.py RelVal -s HLT:PIon,RAW2DIGI,L1Reco,RECO --mc --scenario=pp -n 10 --conditions auto:startup_PIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_PIon_STARTUP.root --fileout file:RelVal_Raw_PIon_STARTUP_HLT_RECO.root'], 'hlt6' : ['cmsDriver.py RelVal -s L1REPACK --data --scenario=pp -n 10 --conditions auto:startup --relval 9000,50 --datatier "RAW" --eventcontent RAW --fileout file:RelVal_Raw_PIon_DATA.root --filein /store/data/Run2012A/MuEG/RAW/v1/000/191/718/14932935-E289-E111-830C-5404A6388697.root', 'cmsRun ' + self.file2Path('HLTrigger/Configuration/test/OnData_HLT_PIon.py'), - 'cmsDriver.py RelVal -s HLT:PIon,RAW2DIGI,L1Reco,RECO --data --scenario=pp -n 10 --conditions auto:startup_PIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_PIon_DATA.root --fileout file:RelVal_Raw_PIon_DATA_HLT_RECO.root'], + 'cmsDriver.py RelVal -s HLT:PIon,RAW2DIGI,L1Reco,RECO --data --scenario=pp -n 10 --conditions auto:hltonline_PIon --relval 9000,50 --datatier "RAW-HLT-RECO" --eventcontent FEVTDEBUGHLT --customise=HLTrigger/Configuration/CustomConfigs.L1THLT --processName=HLTRECO --filein file:RelVal_Raw_PIon_DATA.root --fileout file:RelVal_Raw_PIon_DATA_HLT_RECO.root'], } self.commands={} diff --git a/Validation/Configuration/python/globalValidation_cff.py b/Validation/Configuration/python/globalValidation_cff.py index 69d5aab4f9fdc..e80ebe8eb37a2 100644 --- a/Validation/Configuration/python/globalValidation_cff.py +++ b/Validation/Configuration/python/globalValidation_cff.py @@ -1,5 +1,6 @@ import FWCore.ParameterSet.Config as cms +from SimGeneral.TrackingAnalysis.simHitTPAssociation_cfi import * from Validation.TrackerHits.trackerHitsValidation_cff import * from Validation.TrackerDigis.trackerDigisValidation_cff import * from Validation.TrackerRecHits.trackerRecHitsValidation_cff import * @@ -29,6 +30,7 @@ from Validation.RecoEgamma.egammaValidation_cff import * from Validation.RecoParticleFlow.PFJetValidation_cff import * from Validation.RecoParticleFlow.PFMETValidation_cff import * +from Validation.RecoParticleFlow.PFMuonValidation_cff import * from Validation.RPCRecHits.rpcRecHitValidation_cfi import * from Validation.DTRecHits.DTRecHitQuality_cfi import * from Validation.RecoTau.DQMMCValidation_cfi import * @@ -36,7 +38,8 @@ # filter/producer "pre-" sequence for globalValidation globalPrevalidation = cms.Sequence( - tracksValidationSelectors + simHitTPAssocProducer + * tracksValidationSelectors * photonPrevalidationSequence * produceDenoms * prebTagSequence @@ -75,6 +78,7 @@ + egammaValidation + pfJetValidationSequence + pfMETValidationSequence + + pfMuonValidationSequence + rpcRecHitValidation_step + dtLocalRecoValidation_no2D + pfTauRunDQMValidation diff --git a/Validation/EventGenerator/interface/TauValidation.h b/Validation/EventGenerator/interface/TauValidation.h index ea6a67a99c7c7..9812bcfb54f9f 100644 --- a/Validation/EventGenerator/interface/TauValidation.h +++ b/Validation/EventGenerator/interface/TauValidation.h @@ -5,8 +5,6 @@ * * Class to fill Event Generator dqm monitor elements; works on HepMCProduct * - * $Date: 2013/03/06 01:51:10 $ - * $Revision: 1.19 $ * */ @@ -111,7 +109,7 @@ class TauValidation : public edm::EDAnalyzer *TauSpinEffectsW_X, *TauSpinEffectsW_UpsilonRho, *TauSpinEffectsW_UpsilonA1,*TauSpinEffectsW_eX,*TauSpinEffectsW_muX, *TauSpinEffectsHpm_X, *TauSpinEffectsHpm_UpsilonRho, *TauSpinEffectsHpm_UpsilonA1,*TauSpinEffectsHpm_eX,*TauSpinEffectsHpm_muX, *TauSpinEffectsZ_MVis, *TauSpinEffectsZ_Zs, *TauSpinEffectsZ_Xf, *TauSpinEffectsZ_Xb, - *TauSpinEffectsZ_eX, *TauSpinEffectsZ_muX, + *TauSpinEffectsZ_eX, *TauSpinEffectsZ_muX, *TauSpinEffectsZ_X, *TauSpinEffectsH_X, *TauSpinEffectsH_MVis, *TauSpinEffectsH_Zs, *TauSpinEffectsH_Xf, *TauSpinEffectsH_Xb, *TauSpinEffectsH_eX, *TauSpinEffectsH_muX, *TauBremPhotonsN,*TauBremPhotonsPt,*TauBremPhotonsPtSum,*TauFSRPhotonsN,*TauFSRPhotonsPt,*TauFSRPhotonsPtSum; diff --git a/Validation/EventGenerator/plugins/TauValidation.cc b/Validation/EventGenerator/plugins/TauValidation.cc index ab22d0fb69b60..37d21498d38a7 100644 --- a/Validation/EventGenerator/plugins/TauValidation.cc +++ b/Validation/EventGenerator/plugins/TauValidation.cc @@ -3,7 +3,6 @@ * Class to fill dqm monitor elements from existing EDM file * */ - #include "Validation/EventGenerator/interface/TauValidation.h" #include "CLHEP/Units/defs.h" @@ -98,6 +97,9 @@ void TauValidation::beginJob() TauSpinEffectsZ_Zs = dbe->book1D("TauSpinEffectsZZs","Z_{s}", zsbins ,zsmin,zsmax); TauSpinEffectsZ_Zs->setAxisTitle("Z_{s}"); TauSpinEffectsH_Zs = dbe->book1D("TauSpinEffectsHZs","Z_{s}", zsbins ,zsmin,zsmax); TauSpinEffectsZ_Zs->setAxisTitle("Z_{s}"); + TauSpinEffectsZ_X= dbe->book1D("TauSpinEffectsZX","X of #tau^{-}", 25 ,0,1.0); TauSpinEffectsZ_X->setAxisTitle("X"); + TauSpinEffectsH_X= dbe->book1D("TauSpinEffectsH_X","X of #tau^{-}", 25 ,0,1.0); TauSpinEffectsH_X->setAxisTitle("X"); + TauSpinEffectsZ_Xf = dbe->book1D("TauSpinEffectsZXf","X of forward emitted #tau^{-}", 25 ,0,1.0); TauSpinEffectsZ_Xf->setAxisTitle("X_{f}"); TauSpinEffectsH_Xf = dbe->book1D("TauSpinEffectsHXf","X of forward emitted #tau^{-}", 25 ,0,1.0); TauSpinEffectsZ_Xf->setAxisTitle("X_{f}"); @@ -556,6 +558,10 @@ void TauValidation::spinEffectsZ(const HepMC::GenParticle* boson, double weight) int charge = (int) pd->charge(); LVtau.Boost(-1*Zboson.BoostVector()); LVpi.Boost(-1*Zboson.BoostVector()); + if(tauDecayChannel(*des) == pi){ + if(abs(boson->pdg_id())==PdtPdgMini::Z0) TauSpinEffectsZ_X->Fill(LVpi.P()/LVtau.E(),weight); + if(abs(boson->pdg_id())==PdtPdgMini::Higgs0) TauSpinEffectsH_X->Fill(LVpi.P()/LVtau.E(),weight); + } if(charge<0){x1=LVpi.P()/LVtau.E(); taum=LVtau;} else{ x2=LVpi.P()/LVtau.E();} } diff --git a/Validation/EventGenerator/src/TauDecay.cc b/Validation/EventGenerator/src/TauDecay.cc index 69fa26e6d2fc8..ee7753396ea1d 100755 --- a/Validation/EventGenerator/src/TauDecay.cc +++ b/Validation/EventGenerator/src/TauDecay.cc @@ -195,7 +195,7 @@ void TauDecay::ClassifyDecayMode(unsigned int &JAK_ID,unsigned int &TauBitMask){ JAK_ID=JAK_PION; return; } - if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1 && n_rho==1){ + if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){// && n_rho==1){ removing intermediate resoance to be compatible with pythia8 JAK_ID=JAK_RHO_PIPI0; return; } @@ -247,10 +247,11 @@ void TauDecay::ClassifyDecayMode(unsigned int &JAK_ID,unsigned int &TauBitMask){ JAK_ID=JAK_KPIPI; return; } - if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1 && n_gamma>=1 && n_rho==0){ + // removing JAKID 21 to allow for compatibility with Pythia8 + /* if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1 && n_gamma>=1 && n_rho==0){ JAK_ID=JAK_PIPI0GAM; return; - } + }*/ std::cout << "Tau Mode not found: n_e " << n_e << " n_mu " << n_mu << " n_pi " << n_pi << " n_pi0 " << n_pi0 << " n_K " << n_K << " n_K0L " << n_K0L << " n_K0S " << n_K0S << " n_nu " << n_nu << " n_gamma " << n_gamma << std::endl; JAK_ID=JAK_UNKNOWN; } diff --git a/Validation/RPCRecHits/interface/RPCRecHitValid.h b/Validation/RPCRecHits/interface/RPCRecHitValid.h index 4f11dfdffb3f2..eacd5855203e3 100644 --- a/Validation/RPCRecHits/interface/RPCRecHitValid.h +++ b/Validation/RPCRecHits/interface/RPCRecHitValid.h @@ -32,7 +32,8 @@ class RPCRecHitValid : public edm::EDAnalyzer private: std::string subDir_; edm::InputTag simHitLabel_, recHitLabel_; - edm::InputTag simTrackLabel_; + edm::InputTag simParticleLabel_; + edm::InputTag simHitAssocLabel_; edm::InputTag muonLabel_; DQMStore* dbe_; @@ -50,7 +51,7 @@ class RPCRecHitValid : public edm::EDAnalyzer MEP h_recoMuonBarrel_pt, h_recoMuonOverlap_pt, h_recoMuonEndcap_pt, h_recoMuonNoRPC_pt; MEP h_recoMuonBarrel_eta, h_recoMuonOverlap_eta, h_recoMuonEndcap_eta, h_recoMuonNoRPC_eta; MEP h_recoMuonBarrel_phi, h_recoMuonOverlap_phi, h_recoMuonEndcap_phi, h_recoMuonNoRPC_phi; - MEP h_simTrackPType, h_simTrackPTypeBarrel, h_simTrackPTypeEndcap; + MEP h_simParticleType, h_simParticleTypeBarrel, h_simParticleTypeEndcap; MEP h_refPunchOccupancyBarrel_wheel, h_refPunchOccupancyEndcap_disk, h_refPunchOccupancyBarrel_station; MEP h_refPunchOccupancyBarrel_wheel_station, h_refPunchOccupancyEndcap_disk_ring; diff --git a/Validation/RPCRecHits/python/rpcRecHitValidation_cfi.py b/Validation/RPCRecHits/python/rpcRecHitValidation_cfi.py index b719c65c0ecb2..bc6ed18f10987 100644 --- a/Validation/RPCRecHits/python/rpcRecHitValidation_cfi.py +++ b/Validation/RPCRecHits/python/rpcRecHitValidation_cfi.py @@ -5,6 +5,7 @@ simHit = cms.InputTag("g4SimHits", "MuonRPCHits"), recHit = cms.InputTag("rpcRecHits"), simTrack = cms.InputTag("mix", "MergedTrackTruth"), + simHitAssoc = cms.InputTag("simHitTPAssocProducer"), muon = cms.InputTag("muons"), ) diff --git a/Validation/RPCRecHits/src/RPCRecHitValid.cc b/Validation/RPCRecHits/src/RPCRecHitValid.cc index bade6b3280e41..9720a9b3120d1 100644 --- a/Validation/RPCRecHits/src/RPCRecHitValid.cc +++ b/Validation/RPCRecHits/src/RPCRecHitValid.cc @@ -19,6 +19,9 @@ #include "Geometry/RPCGeometry/interface/RPCGeometry.h" #include "Geometry/RPCGeometry/interface/RPCGeomServ.h" #include "Geometry/Records/interface/MuonGeometryRecord.h" +#include "SimGeneral/TrackingAnalysis/interface/SimHitTPAssociationProducer.h" + +#include using namespace std; @@ -28,7 +31,8 @@ RPCRecHitValid::RPCRecHitValid(const edm::ParameterSet& pset) { simHitLabel_ = pset.getParameter("simHit"); recHitLabel_ = pset.getParameter("recHit"); - simTrackLabel_ = pset.getParameter("simTrack"); + simParticleLabel_ = pset.getParameter("simTrack"); + simHitAssocLabel_ = pset.getParameter("simHitAssoc"); muonLabel_ = pset.getParameter("muon"); dbe_ = edm::Service().operator->(); if ( !dbe_ ) @@ -43,9 +47,9 @@ RPCRecHitValid::RPCRecHitValid(const edm::ParameterSet& pset) // SimHit plots, not compatible to RPCPoint-RPCRecHit comparison dbe_->setCurrentFolder(subDir_+"/HitProperty"); - h_simTrackPType = dbe_->book1D("SimHitPType", "SimHit particle type", 11, 0, 11); - h_simTrackPType->getTH1()->SetMinimum(0); - if ( TH1* h = h_simTrackPType->getTH1() ) + h_simParticleType = dbe_->book1D("SimHitPType", "SimHit particle type", 11, 0, 11); + h_simParticleType->getTH1()->SetMinimum(0); + if ( TH1* h = h_simParticleType->getTH1() ) { h->GetXaxis()->SetBinLabel(1 , "#mu^{-}"); h->GetXaxis()->SetBinLabel(2 , "#mu^{+}"); @@ -76,7 +80,7 @@ RPCRecHitValid::RPCRecHitValid(const edm::ParameterSet& pset) h_nRPCHitPerSimMuonBarrel ->getTH1()->SetMinimum(0); h_nRPCHitPerSimMuonOverlap ->getTH1()->SetMinimum(0); h_nRPCHitPerSimMuonEndcap ->getTH1()->SetMinimum(0); - + h_nRPCHitPerRecoMuon ->getTH1()->SetMinimum(0); h_nRPCHitPerRecoMuonBarrel ->getTH1()->SetMinimum(0); h_nRPCHitPerRecoMuonOverlap->getTH1()->SetMinimum(0); @@ -122,7 +126,7 @@ RPCRecHitValid::RPCRecHitValid(const edm::ParameterSet& pset) h_simMuonOverlap_phi ->getTH1()->SetMinimum(0); h_simMuonEndcap_phi ->getTH1()->SetMinimum(0); h_simMuonNoRPC_phi ->getTH1()->SetMinimum(0); - + h_recoMuonBarrel_pt ->getTH1()->SetMinimum(0); h_recoMuonOverlap_pt ->getTH1()->SetMinimum(0); h_recoMuonEndcap_pt ->getTH1()->SetMinimum(0); @@ -246,17 +250,14 @@ void RPCRecHitValid::beginRun(const edm::Run& run, const edm::EventSetup& eventS int nRPCRollBarrel = 0, nRPCRollEndcap = 0; TrackingGeometry::DetContainer rpcDets = rpcGeom->dets(); - for ( TrackingGeometry::DetContainer::const_iterator detIter = rpcDets.begin(); - detIter != rpcDets.end(); ++detIter ) + for ( auto det : rpcDets ) { - RPCChamber* rpcCh = dynamic_cast(*detIter); + RPCChamber* rpcCh = dynamic_cast(det); if ( !rpcCh ) continue; std::vector rolls = rpcCh->rolls(); - for ( std::vector::const_iterator rollIter = rolls.begin(); - rollIter != rolls.end(); ++rollIter ) + for ( auto roll : rolls ) { - const RPCRoll* roll = *rollIter; if ( !roll ) continue; //RPCGeomServ rpcSrv(roll->id()); @@ -296,11 +297,10 @@ void RPCRecHitValid::beginRun(const edm::Run& run, const edm::EventSetup& eventS h_rollAreaBarrel_detId = dbe_->bookProfile("RollAreaBarrel_detId", "Roll area;roll index;Area", nRPCRollBarrel, 0., 1.*nRPCRollBarrel, 0., 1e5); h_rollAreaEndcap_detId = dbe_->bookProfile("RollAreaEndcap_detId", "Roll area;roll index;Area", nRPCRollEndcap, 0., 1.*nRPCRollEndcap, 0., 1e5); - for ( map::const_iterator iter = detIdToIndexMapBarrel_.begin(); - iter != detIdToIndexMapBarrel_.end(); ++iter ) + for ( auto detIdToIndex : detIdToIndexMapBarrel_ ) { - const int rawId = iter->first; - const int index = iter->second; + const int rawId = detIdToIndex.first; + const int index = detIdToIndex.second; const RPCDetId rpcDetId = static_cast(rawId); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(rpcDetId)); @@ -314,11 +314,10 @@ void RPCRecHitValid::beginRun(const edm::Run& run, const edm::EventSetup& eventS h_rollAreaBarrel_detId->Fill(index, area); } - for ( map::const_iterator iter = detIdToIndexMapEndcap_.begin(); - iter != detIdToIndexMapEndcap_.end(); ++iter ) + for ( auto detIdToIndex : detIdToIndexMapEndcap_ ) { - const int rawId = iter->first; - const int index = iter->second; + const int rawId = detIdToIndex.first; + const int index = detIdToIndex.second; const RPCDetId rpcDetId = static_cast(rawId); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(rpcDetId)); @@ -364,11 +363,21 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve return; } - // Get SimTracks - edm::Handle > simTrackHandle; - if ( !event.getByLabel(simTrackLabel_, simTrackHandle) ) + // Get SimParticles + edm::Handle simParticleHandle; + if ( !event.getByLabel(simParticleLabel_, simParticleHandle) ) + { + edm::LogInfo("RPCRecHitValid") << "Cannot find TrackingParticle collection\n"; + return; + } + + typedef std::pair SimHitTPPair; + typedef std::vector SimHitTPAssociationList; + // Get SimParticle to SimHit association map + edm::Handle simHitsTPAssoc; + if ( !event.getByLabel(simHitAssocLabel_, simHitsTPAssoc) ) { - edm::LogInfo("RPCRecHitValid") << "Cannot find simTrack collection\n"; + edm::LogInfo("RPCRecHitValid") << "Cannot find TrackingParticle to SimHit association map\n"; return; } @@ -382,115 +391,107 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve typedef edm::PSimHitContainer::const_iterator SimHitIter; typedef RPCRecHitCollection::const_iterator RecHitIter; + typedef std::vector SimHitRefs; + + // TrackingParticles with (and without) RPC simHits + SimHitRefs muonSimHits, pthrSimHits; - std::vector muonSimHits; - std::vector pthrSimHits; - for ( edm::View::const_iterator simTrack = simTrackHandle->begin(); - simTrack != simTrackHandle->end(); ++simTrack ) + for ( int i=0, n=simParticleHandle->size(); ipt() < 1.0 or simTrack->p() < 2.5 ) continue; // globalMuon acceptance + TrackingParticleRef simParticle(simParticleHandle, i); + if ( simParticle->pt() < 1.0 or simParticle->p() < 2.5 ) continue; // globalMuon acceptance + + // Collect SimHits from this Tracking Particle + SimHitRefs simHitsFromParticle; + auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), + std::make_pair(simParticle, TrackPSimHitRef()), + SimHitTPAssociationProducer::simHitTPAssociationListGreater); + for ( auto simParticleToHit = range.first; simParticleToHit != range.second; ++simParticleToHit ) + { + auto simHit = simParticleToHit->second; + const DetId detId(simHit->detUnitId()); + if ( detId.det() != DetId::Muon or detId.subdetId() != MuonSubdetId::RPC ) continue; - bool hasRPCHit = false; - if ( abs(simTrack->pdgId()) == 13 ) + simHitsFromParticle.push_back(simParticleToHit->second); + } + const int nRPCHit = simHitsFromParticle.size(); + const bool hasRPCHit = nRPCHit > 0; + + if ( abs(simParticle->pdgId()) == 13 ) { + muonSimHits.insert(muonSimHits.end(), simHitsFromParticle.begin(), simHitsFromParticle.end()); + + // Count number of Barrel hits and Endcap hits int nRPCHitBarrel = 0; int nRPCHitEndcap = 0; - -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - for ( SimHitIter simHit = simTrack->pSimHit_begin(); - simHit != simTrack->pSimHit_end(); ++simHit ) + for ( auto simHit : simHitsFromParticle ) { - const DetId detId(simHit->detUnitId()); - if ( detId.det() != DetId::Muon or detId.subdetId() != MuonSubdetId::RPC ) continue; const RPCDetId rpcDetId = static_cast(simHit->detUnitId()); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(rpcDetId)); if ( !roll ) continue; if ( rpcDetId.region() == 0 ) ++nRPCHitBarrel; else ++nRPCHitEndcap; - - muonSimHits.push_back(&*simHit); } -#endif - const int nRPCHit = nRPCHitBarrel+nRPCHitEndcap; - hasRPCHit = nRPCHit > 0; + // Fill TrackingParticle related histograms h_nRPCHitPerSimMuon->Fill(nRPCHit); if ( nRPCHitBarrel and nRPCHitEndcap ) { h_nRPCHitPerSimMuonOverlap->Fill(nRPCHit); - h_simMuonOverlap_pt->Fill(simTrack->pt()); - h_simMuonOverlap_eta->Fill(simTrack->eta()); - h_simMuonOverlap_phi->Fill(simTrack->phi()); + h_simMuonOverlap_pt->Fill(simParticle->pt()); + h_simMuonOverlap_eta->Fill(simParticle->eta()); + h_simMuonOverlap_phi->Fill(simParticle->phi()); } else if ( nRPCHitBarrel ) { h_nRPCHitPerSimMuonBarrel->Fill(nRPCHit); - h_simMuonBarrel_pt->Fill(simTrack->pt()); - h_simMuonBarrel_eta->Fill(simTrack->eta()); - h_simMuonBarrel_phi->Fill(simTrack->phi()); + h_simMuonBarrel_pt->Fill(simParticle->pt()); + h_simMuonBarrel_eta->Fill(simParticle->eta()); + h_simMuonBarrel_phi->Fill(simParticle->phi()); } else if ( nRPCHitEndcap ) { h_nRPCHitPerSimMuonEndcap->Fill(nRPCHit); - h_simMuonEndcap_pt->Fill(simTrack->pt()); - h_simMuonEndcap_eta->Fill(simTrack->eta()); - h_simMuonEndcap_phi->Fill(simTrack->phi()); + h_simMuonEndcap_pt->Fill(simParticle->pt()); + h_simMuonEndcap_eta->Fill(simParticle->eta()); + h_simMuonEndcap_phi->Fill(simParticle->phi()); } else { - h_simMuonNoRPC_pt->Fill(simTrack->pt()); - h_simMuonNoRPC_eta->Fill(simTrack->eta()); - h_simMuonNoRPC_phi->Fill(simTrack->phi()); + h_simMuonNoRPC_pt->Fill(simParticle->pt()); + h_simMuonNoRPC_eta->Fill(simParticle->eta()); + h_simMuonNoRPC_phi->Fill(simParticle->phi()); } } else { - int nRPCHit = 0; -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - for ( SimHitIter simHit = simTrack->pSimHit_begin(); - simHit != simTrack->pSimHit_end(); ++simHit ) - { - const DetId detId(simHit->detUnitId()); - if ( detId.det() != DetId::Muon or detId.subdetId() != MuonSubdetId::RPC ) continue; - const RPCDetId rpcDetId = static_cast(simHit->detUnitId()); - const RPCRoll* roll = dynamic_cast(rpcGeom->roll(rpcDetId())); - if ( !roll ) continue; - - ++nRPCHit; - pthrSimHits.push_back(&*simHit); - } -#endif - hasRPCHit = nRPCHit > 0; + pthrSimHits.insert(pthrSimHits.end(), simHitsFromParticle.begin(), simHitsFromParticle.end()); } if ( hasRPCHit ) { - switch ( simTrack->pdgId() ) + switch ( simParticle->pdgId() ) { - case 13: h_simTrackPType->Fill( 0); break; - case -13: h_simTrackPType->Fill( 1); break; - case 11: h_simTrackPType->Fill( 2); break; - case -11: h_simTrackPType->Fill( 3); break; - case 211: h_simTrackPType->Fill( 4); break; - case -211: h_simTrackPType->Fill( 5); break; - case 321: h_simTrackPType->Fill( 6); break; - case -321: h_simTrackPType->Fill( 7); break; - case 2212: h_simTrackPType->Fill( 8); break; - case -2212: h_simTrackPType->Fill( 9); break; - default: h_simTrackPType->Fill(10); break; + case 13: h_simParticleType->Fill( 0); break; + case -13: h_simParticleType->Fill( 1); break; + case 11: h_simParticleType->Fill( 2); break; + case -11: h_simParticleType->Fill( 3); break; + case 211: h_simParticleType->Fill( 4); break; + case -211: h_simParticleType->Fill( 5); break; + case 321: h_simParticleType->Fill( 6); break; + case -321: h_simParticleType->Fill( 7); break; + case 2212: h_simParticleType->Fill( 8); break; + case -2212: h_simParticleType->Fill( 9); break; + default: h_simParticleType->Fill(10); break; } } } // Loop over muon simHits, fill histograms which does not need associations int nRefHitBarrel = 0, nRefHitEndcap = 0; - for ( std::vector::const_iterator simHitP = muonSimHits.begin(); - simHitP != muonSimHits.end(); ++simHitP ) + for ( auto simHit : muonSimHits ) { - const PSimHit* simHit = *simHitP; const RPCDetId detId = static_cast(simHit->detUnitId()); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(detId)); @@ -521,10 +522,8 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve } // Loop over punch-through simHits, fill histograms which does not need associations - for ( std::vector::const_iterator simHitP = pthrSimHits.begin(); - simHitP != pthrSimHits.end(); ++simHitP ) + for ( auto simHit : pthrSimHits ) { - const PSimHit* simHit = *simHitP; const RPCDetId detId = static_cast(simHit->detUnitId()); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(detId())); @@ -613,13 +612,11 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve } // Start matching SimHits to RecHits - typedef std::map SimToRecHitMap; + typedef std::map SimToRecHitMap; SimToRecHitMap simToRecHitMap; - for ( std::vector::const_iterator simHitP = muonSimHits.begin(); - simHitP != muonSimHits.end(); ++simHitP ) + for ( auto simHit : muonSimHits ) { - const PSimHit* simHit = *simHitP; const RPCDetId simDetId = static_cast(simHit->detUnitId()); //const RPCRoll* simRoll = dynamic_cast(rpcGeom->roll(simDetId)); @@ -658,11 +655,10 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve // Now we have simHit-recHit mapping // So we can fill up relavant histograms int nMatchHitBarrel = 0, nMatchHitEndcap = 0; - for ( SimToRecHitMap::const_iterator match = simToRecHitMap.begin(); - match != simToRecHitMap.end(); ++match ) + for ( auto match : simToRecHitMap ) { - const PSimHit* simHit = match->first; - RecHitIter recHitIter = match->second; + TrackPSimHitRef simHit = match.first; + RecHitIter recHitIter = match.second; const RPCDetId detId = static_cast(simHit->detUnitId()); const RPCRoll* roll = dynamic_cast(rpcGeom->roll(detId)); @@ -787,10 +783,9 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve //const int subsector = roll->id().subsector(); bool matched = false; - for ( SimToRecHitMap::const_iterator match = simToRecHitMap.begin(); - match != simToRecHitMap.end(); ++match ) + for ( auto match : simToRecHitMap ) { - if ( recHitIter == match->second ) + if ( recHitIter == match.second ) { matched = true; break; @@ -815,10 +810,8 @@ void RPCRecHitValid::analyze(const edm::Event& event, const edm::EventSetup& eve int nPunchMatched = 0; // Check if this recHit came from non-muon simHit - for ( std::vector::const_iterator pthrSimHitP = pthrSimHits.begin(); - pthrSimHitP != pthrSimHits.end(); ++pthrSimHitP ) + for ( auto simHit : pthrSimHits ) { - const PSimHit* simHit = *pthrSimHitP; const int absSimHitPType = abs(simHit->particleType()); if ( absSimHitPType == 13 ) continue; diff --git a/Validation/RecoB/scripts/histoStyle.py b/Validation/RecoB/scripts/histoStyle.py new file mode 100644 index 0000000000000..7d3c4dd2922aa --- /dev/null +++ b/Validation/RecoB/scripts/histoStyle.py @@ -0,0 +1,509 @@ + +####### + +# automatized plots generator for b-tagging performances +# Adrien Caudron, 2013, UCL + +####### + +#do all import +import os, sys + +try: + import ROOT +except: + print "\nCannot load PYROOT, make sure you have setup ROOT in the path" + print "and pyroot library is also defined in the variable PYTHONPATH, try:\n" + if (os.getenv("PYTHONPATH")): + print " setenv PYTHONPATH ${PYTHONPATH}:$ROOTSYS/lib\n" + else: + print " setenv PYTHONPATH $ROOTSYS/lib\n" + sys.exit() + +from ROOT import TFile +from ROOT import TCanvas +from ROOT import TPad +from ROOT import TLegend +from ROOT import TLatex +from ROOT import TH1F +from ROOT import TF1 +from ROOT import TVectorD +from ROOT import TGraphErrors +from ROOT import Double + +import Style +from listHistos import * + +#define the input root files +#fileVal = TFile("BTagRelVal_TTbar_Startup_14_612SLHC2.root","READ") +#fileRef = TFile("BTagRelVal_TTbar_Startup_612SLHC1_14.root","READ") +fileNameVal = "BTagRelVal_TTbar_Startup_14_612SLHC2.root" +fileNameRef = "BTagRelVal_TTbar_Startup_612SLHC1_14.root" +#define the val/ref labels +ValRel = "612SLHC2_14" +RefRel = "612SLHC1_14" +#define the sample labels +ValSample = "TTbar_FullSim" +RefSample = "TTbar_FullSim" +#define different settings +batch = False #run on batch mode ? +weight = 1. #rescale the histos according to this weight +drawLegend = False #draw legend ? +printBanner = False #draw text Banner on top of the histos +Banner = "CMS Preliminary" +doRatio = True #plot the ratios +drawOption = "" # "" or "HIST" +#path in the file +pathInFile = "/DQMData/Run 1/Btag/Run summary/" +#ETA/PT bins, GLOBAL ? +EtaPtBin =[ + "GLOBAL", + #"ETA_0-1v4", + #"ETA_1v4-2v4", + #"PT_50-80", + #"PT_80-120", + ] +#list of taggers to look at +listTag = [ + "CSV", + "CSVMVA", + "JP", + "JBP", + "TCHE", + "TCHP", + "SSVHE", + "SSVHP", + "SMT", + #"SMTIP3d", + #"SMTPt", + "SET", + ] +#list of flavors to look at +listFlavors = [ + #"ALL", + "B", + "C", + #"G", + #"DUS", + "DUSG", + #"NI", + ] +#map for marker color for flav-col and tag-col +mapColor = { + "ALL" : 4 , + "B" : 3 , + "C" : 1 , + "G" : 2 , + "DUS" : 2 , + "DUSG" : 2 , + "NI" : 5 , + "CSV" : 5 , + "CSVMVA" : 6 , + "JP" : 3 , + "JBP" : 9 , + "TCHE" : 1, + "TCHP" : 2, + "SSVHE" : 4, + "SSVHP" : 7, + "SMT" : 8 , + "SMTIP3d" : 11 , + "SMTPt" : 12 + } +#marker style map for Val/Ref +mapMarker = { + "Val" : 22, + "Ref" : 8 + } +mapLineWidth = { + "Val" : 3, + "Ref" : 2 + } +mapLineStyle = { + "Val" : 2, + "Ref" : 1 + } +#choose the formats to save the plots +listFromats = [ + "gif", + ] +#unity function +unity = TF1("unity","1",-1000,1000) +unity.SetLineColor(8) +unity.SetLineWidth(1) +unity.SetLineStyle(1) +#list of histos to plots +listHistos = [ + jetPt, + jetEta, + discr, + effVsDiscrCut_discr, + FlavEffVsBEff_discr, + performance, + #performanceC, + + #IP, + #IPe, + #IPs, + #NTracks, + #decayLength, + #distToJetAxis, + #NHits, + #NPixelHits, + #NormChi2, + #trackPt, + + + #flightDist3Dval, + #flightDist3Dsig, + #jetNSecondaryVertices, + + #vertexMass, + #vertexNTracks, + #vertexJetDeltaR, + #vertexEnergyRatio, + + #vertexCategory, + #trackSip3dVal, + #trackSip3dSig, + #trackSip3dSigAboveCharm, + #trackDeltaR, + #trackEtaRel, + #trackDecayLenVal, + #trackSumJetDeltaR, + #trackJetDist, + #trackSumJetEtRatio, + #trackPtRel, + #trackPtRatio, + #trackMomentum, + #trackPPar, + #trackPParRatio, + ] + +#methode to do a plot from histos +def histoProducer(plot,histos,keys,isVal=True): + if histos is None : return + if isVal : sample = "Val" + else : sample = "Ref" + outhistos = [] + minY=9999. + maxY=0. + for k in keys : + #Binning + if plot.binning and len(plot.binning)==3 : + histos[k].SetBins(plot.binning[0],plot.binning[1],plot.binning[2]) + elif plot.binning and len(plot.binning)==2 : + nbins=plot.binning[1]+1-plot.binning[0] + xmin=histos[k].GetBinLowEdge(plot.binning[0]) + xmax=histos[k].GetBinLowEdge(plot.binning[1]+1) + valtmp=TH1F(histos[k].GetName(),histos[k].GetTitle(),nbins,xmin,xmax) + i=1 + for bin in range(plot.binning[0],plot.binning[1]+1) : + valtmp.SetBinContent(i,histos[k].GetBinContent(bin)) + i+=1 + histos[k]=valtmp + if plot.Rebin and plot.Rebin > 0 : + histos[k].Rebin(plot.Rebin) + #Style + histos[k].SetLineColor(mapColor[k]) + histos[k].SetMarkerColor(mapColor[k]) + histos[k].SetMarkerStyle(mapMarker[sample]) + if drawOption == "HIST" : + histos[k].SetLineWidth(mapLineWidth[sample]) + histos[k].SetLineStyle(mapLineStyle[sample]) + #compute errors + histos[k].Sumw2() + #do the norm + if plot.doNormalization : + histos[k].Scale(1./histos[k].Integral()) + elif weight!=1 : + histos[k].Scale(weight) + #get Y min + if histos[k].GetMinimum(0.) < minY : + minY = histos[k].GetMinimum(0.) + #get Y max + if histos[k].GetBinContent(histos[k].GetMaximumBin()) > maxY : + maxY = histos[k].GetBinContent(histos[k].GetMaximumBin())+histos[k].GetBinError(histos[k].GetMaximumBin()) + #Axis + if plot.Xlabel : + histos[k].SetXTitle(plot.Xlabel) + if plot.Ylabel : + histos[k].SetYTitle(plot.Ylabel) + outhistos.append(histos[k]) + #Range + if not plot.logY : outhistos[0].GetYaxis().SetRangeUser(0,1.1*maxY) + #else : outhistos[0].GetYaxis().SetRangeUser(0.0001,1.05) + else : outhistos[0].GetYaxis().SetRangeUser(max(0.0001,0.5*minY),1.1*maxY) + return outhistos + +#method to do a plot from a graph +def graphProducer(plot,histos,tagFlav="B",mistagFlav=["C","DUSG"],isVal=True): + if histos is None : return + if isVal : sample = "Val" + else : sample = "Ref" + #define graphs + g = {} + g_out = [] + if tagFlav not in listFlavors : + return + if plot.tagFlavor and plot.mistagFlavor : + tagFlav = plot.tagFlavor + mistagFlav = plot.mistagFlavor + for f in listFlavors : + #compute errors, in case not already done + histos[f].Sumw2() + #efficiency lists + Eff = {} + EffErr = {} + for f in listFlavors : + Eff[f] = [] + EffErr[f] = [] + #define mapping points for the histos + maxnpoints = histos[tagFlav].GetNbinsX() + for f in listFlavors : + Eff[f].append(histos[f].GetBinContent(1)) + EffErr[f].append(histos[f].GetBinError(1)) + for bin in range(2,maxnpoints+1) : + #check if we add the point to the graph for Val sample + if len(Eff[tagFlav])>0 : + delta = Eff[tagFlav][-1]-histos[tagFlav].GetBinContent(bin) + if delta>max(0.005,EffErr[tagFlav][-1]) : + #get efficiencies + for f in listFlavors : + Eff[f].append(histos[f].GetBinContent(bin)) + EffErr[f].append(histos[f].GetBinError(bin)) + #create TVector + len_ = len(Eff[tagFlav]) + TVec_Eff = {} + TVec_EffErr = {} + for f in listFlavors : + TVec_Eff[f] = TVectorD(len_) + TVec_EffErr[f] = TVectorD(len_) + #Fill the vector + for j in range(0,len_) : + for f in listFlavors : + TVec_Eff[f][j] = Eff[f][j] + TVec_EffErr[f][j] = EffErr[f][j] + #fill TGraph + for mis in mistagFlav : + g[tagFlav+mis]=TGraphErrors(TVec_Eff[tagFlav],TVec_Eff[mis],TVec_EffErr[tagFlav],TVec_EffErr[mis]) + #style + for f in listFlavors : + if f not in mistagFlav : continue + g[tagFlav+f].SetLineColor(mapColor[f]) + g[tagFlav+f].SetMarkerStyle(mapMarker[sample]) + g[tagFlav+f].SetMarkerColor(mapColor[f]) + g_out.append(g[tagFlav+f]) + index = -1 + for g_i in g_out : + index+=1 + if g_i is not None : break + #Axis + g_out[index].GetXaxis().SetRangeUser(0,1) + g_out[index].GetYaxis().SetRangeUser(0.0001,1) + if plot.Xlabel : + g_out[index].GetXaxis().SetTitle(plot.Xlabel) + if plot.Ylabel : + g_out[index].GetYaxis().SetTitle(plot.Ylabel) + #add in the list None for element in listFlavors for which no TGraph is computed + for index,f in enumerate(listFlavors) : + if f not in mistagFlav : g_out.insert(index,None) + return g_out + +#method to draw the plot and save it +def savePlots(title,saveName,listFromats,plot,Histos,keyHisto,listLegend,options,ratios=None,legendName="") : + #create canvas + c = {} + pads = {} + if options.doRatio : + c[keyHisto] = TCanvas(saveName,keyHisto+plot.title,700,700+24*len(listFlavors)) + pads["hist"] = TPad("hist", saveName+plot.title,0,0.11*len(listFlavors),1.0,1.0) + else : + c[keyHisto] = TCanvas(keyHisto,saveName+plot.title,700,700) + pads["hist"] = TPad("hist", saveName+plot.title,0,0.,1.0,1.0) + pads["hist"].Draw() + if ratios : + for r in range(0,len(ratios)) : + pads["ratio_"+str(r)] = TPad("ratio_"+str(r), saveName+plot.title+str(r),0,0.11*r,1.0,0.11*(r+1)) + pads["ratio_"+str(r)].Draw() + pads["hist"].cd() + #canvas style + if plot.logY : pads["hist"].SetLogy() + if plot.grid : pads["hist"].SetGrid() + #legend + leg = TLegend(0.6,0.4,0.8,0.6) + leg.SetMargin(0.12) + leg.SetTextSize(0.035) + leg.SetFillColor(10) + leg.SetBorderSize(0) + #draw histos + first = True + option = drawOption + optionSame = drawOption+"same" + if plot.doPerformance : + option = "AP" + optionSame = "sameP" + for i in range(0,len(Histos)) : + if Histos[i] is None : continue + if first : + if not plot.doPerformance : Histos[i].GetPainter().PaintStat(ROOT.gStyle.GetOptStat(),0) + Histos[i].SetTitle(title) + Histos[i].Draw(option) + first = False + else : Histos[i].Draw(optionSame) + #Fill legend + if plot.legend and len(Histos)%len(listLegend)==0: + r=len(Histos)/len(listLegend) + index=i-r*len(listLegend) + while(index<0): + index+=len(listLegend) + legName = legendName.replace("KEY",listLegend[index]) + if ix : + if p==0 : continue + xbiserr = hVal[g_i].GetErrorX(p-1) + ybiserr = hVal[g_i].GetErrorY(p-1) + hVal[g_i].GetPoint(p-1,xbis,ybis) + else : + xbiserr = hVal[g_i].GetErrorX(p+1) + ybiserr = hVal[g_i].GetErrorY(p+1) + hVal[g_i].GetPoint(p+1,xbis,ybis) + if ybis==y : + #just take y at x + bin_p_valContent = y + bin_p_valContent_errP = y+yerr + bin_p_valContent_errM = y-yerr + else : + #do a linear extrapolation (equivalent to do Eval(xHist)) + a=(ybis-y)/(xbis-x) + b=y-a*x + bin_p_valContent = a*xHist+b + #extrapolate the error + aerrP = ( (ybis+ybiserr)-(y+yerr) ) / (xbis-x) + berrP = (y+yerr)-aerrP*x + bin_p_valContent_errP = aerrP*xHist+berrP + aerrM = ( (ybis-ybiserr)-(y-yerr) ) / (xbis-x) + berrM = (y-yerr)-aerrM*x + bin_p_valContent_errM = aerrM*xHist+berrM + #fill val hist + histVal.SetBinContent(bin_p,bin_p_valContent) + histVal.SetBinError(bin_p,(bin_p_valContent_errP-bin_p_valContent_errM)/2) + #loop over the reference TGraph to get the corresponding point + for pRef in range(0,hRef[g_i].GetN()): + #get point pRef + xRef = Double(0) + yRef = Double(0) + hRef[g_i].GetPoint(pRef,xRef,yRef) + #take the first point as xRef < xHist + if xRef > xHist : continue + xReferr = hRef[g_i].GetErrorX(pRef) + yReferr = hRef[g_i].GetErrorY(pRef) + #get the other point as xHist in [xRef,xRefbis] + xRefbis = Double(0) + yRefbis = Double(0) + xRefbiserr = hRef[g_i].GetErrorX(pRef+1) + yRefbiserr = hRef[g_i].GetErrorY(pRef+1) + hRef[g_i].GetPoint(pRef+1,xRefbis,yRefbis) + if yRefbis==yRef : + #just take yRef at xRef + bin_p_refContent = yRef + bin_p_refContent_errP = yRef+yReferr + bin_p_refContent_errM = yRef-yReferr + else : + #do a linear extrapolation (equivalent to do Eval(xHist)) + aRef=(ybis-y)/(xbis-x) + bRef=yRef-aRef*xRef + bin_p_refContent = aRef*xHist+bRef + #extrapolate the error + aReferrP = ((yRefbis+yRefbiserr)-(yRef+yReferr))/((xRefbis)-(xRef)) + bReferrP = (yRef+yReferr)-aReferrP*(xRef-xReferr) + bin_p_refContent_errP = aReferrP*xHist+bReferrP + aReferrM = ((yRefbis-yRefbiserr)-(yRef-yReferr))/((xRefbis)-(xRef)) + bReferrM = (yRef-yReferr)-aReferrM*(xRef+xReferr) + bin_p_refContent_errM = aReferrM*xHist+bReferrM + break + #fill ref hist + histRef.SetBinContent(bin_p,bin_p_refContent) + histRef.SetBinError(bin_p,(bin_p_refContent_errP-bin_p_refContent_errM)/2) + #do the ratio + histVal.Sumw2() + histRef.Sumw2() + histVal.Divide(histRef) + #ratio style + histVal.GetXaxis().SetRangeUser(0.,1.) + #histRef.GetXaxis().SetRangeUser(0.,1.) + histVal.GetYaxis().SetRangeUser(0.25,1.75) + histVal.SetMarkerColor(hVal[g_i].GetMarkerColor()) + histVal.SetLineColor(hVal[g_i].GetLineColor()) + histVal.GetYaxis().SetLabelSize(0.15) + histVal.GetXaxis().SetLabelSize(0.15) + ratio.append(histVal) + return ratio diff --git a/Validation/RecoB/scripts/listHistos.py b/Validation/RecoB/scripts/listHistos.py new file mode 100644 index 0000000000000..a05204bdd92a2 --- /dev/null +++ b/Validation/RecoB/scripts/listHistos.py @@ -0,0 +1,237 @@ + +####### + +# automatized plots generator for b-tagging performances +# Adrien Caudron, 2013, UCL + +####### + +class plotInfo : + def __init__ (self, name, title, #mandatory + legend="", Xlabel="", Ylabel="", logY=False, grid=False, + binning=None, Rebin=None, + doNormalization=False, + listTagger=None, + doPerformance=False, tagFlavor="B", mistagFlavor=["C","DUSG"]): + self.name = name #name of the histos without postfix as PT/ETA bin or flavor + self.title = title #title of the histograms : better if specific for the histogram + self.legend = legend #legend name, if contain 'KEY', it will be replace by the list of keys you provide (as flavor, tagger ...) + self.Xlabel = Xlabel #label of the X axis + self.Ylabel = Ylabel #label of the Y axis + self.logY = logY #if True : Y axis will be in log scale + self.grid = grid #if True : a grid will be drawn + self.binning = binning #if you want to change the binning put a list with [nBins,xmin,xmax] + self.Rebin = Rebin #if you want to rebin the histos + self.doNormalization = doNormalization #if you want to normalize to 1 all the histos + self.doPerformance = doPerformance #if you want to draw the performance as TGraph + if self.doPerformance : + #replace TAG by the tag flavor choosen (B, C, UDSG ...) + self.title = name.replace("TAG",tagFlavor) + self.Xlabel = Xlabel.replace("TAG",tagFlavor) + self.Ylabel = Ylabel.replace("TAG",tagFlavor) + self.legend = legend.replace("TAG",tagFlavor) + self.tagFlavor = tagFlavor + self.mistagFlavor = mistagFlavor + if listTagger is None : + self.listTagger=None #you will take the list of tagger defined centrally + else : + self.listTagger=listTagger #you take the list passed as argument +#define here the histograms you interested by +#by jets +jetPt = plotInfo(name="jetPt", title="Pt of all jets", legend="isVAL KEY-jets", Xlabel="Pt (GeV/c)", Ylabel="abitrary units", + logY=False, grid=False, + binning=[300,10.,310.], Rebin=20, doNormalization=True, + listTagger=["CSV"] + ) +jetEta = plotInfo(name="jetEta", title="Eta of all jets", legend="isVAL KEY-jets", Xlabel="#eta", Ylabel="abitrary units", + logY=False, grid=False, + binning=[11,90], Rebin=4, doNormalization=True, + listTagger=["CSV"] + ) +discr = plotInfo(name="discr", title="Discriminant of all jets", legend="isVAL KEY-jets", Xlabel="Discriminant", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True + ) +effVsDiscrCut_discr = plotInfo(name="effVsDiscrCut_discr", title="Efficiency versus discriminant cut for all jets", legend="isVAL KEY-jets", Xlabel="Discriminant", Ylabel="efficiency", + logY=True, grid=True + ) +#MC only +FlavEffVsBEff_discr = plotInfo(name="FlavEffVsBEff_B_discr", title="b-tag efficiency versus non b-tag efficiency", + legend="KEY FLAV-jets versus b-jets", Xlabel="b-tag efficiency", Ylabel="non b-tag efficiency", + logY=True, grid=True + ) +#MC only +performance = plotInfo(name="effVsDiscrCut_discr", title="TAG-tag efficiency versus non TAG-tag efficiency", + legend="isVAL KEY-jets versus TAG-jets", Xlabel="TAG-tag efficiency", Ylabel="non TAG-tag efficiency", + logY=True, grid=True, + doPerformance=True, tagFlavor="B", mistagFlavor=["C","DUSG"] + ) +#MC only, to do C vs B and C vs light +performanceC = plotInfo(name="effVsDiscrCut_discr", title="TAG-tag efficiency versus non TAG-tag efficiency", + legend="isVAL KEY-jets versus TAG-jets", Xlabel="TAG-tag efficiency", Ylabel="non TAG-tag efficiency", + logY=True, grid=True, + doPerformance=True, tagFlavor="C", mistagFlavor=["B","DUSG"] + ) +#by tracks +IP = plotInfo(name="ip_3D", title="Impact parameter", legend="isVAL KEY-jets", Xlabel="IP [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None,Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +IPe = plotInfo(name="ipe_3D", title="Impact parameter error", legend="isVAL KEY-jets", Xlabel="IPE [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +IPs = plotInfo(name="ips_3D", title="Impact parameter significance", legend="isVAL KEY-jets", Xlabel="IPS", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +NTracks = plotInfo(name="selTrksNbr_3D", title="number of selected tracks", legend="isVAL KEY-jets", Xlabel="number of selected tracks", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +distToJetAxis = plotInfo(name="jetDist_3D", title="track distance to the jet axis", legend="isVAL KEY-jets", Xlabel="distance to the jet axis [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +decayLength = plotInfo(name="decLen_3D", title="track decay length", legend="isVAL KEY-jets", Xlabel="decay length [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, listTagger=["IPTag"] + ) +NHits = plotInfo(name="tkNHits_3D", title="Number of Hits / selected tracks", legend="isVAL KEY-jets", Xlabel="Number of Hits", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +NPixelHits = plotInfo(name="tkNPixelHits_3D", title="Number of Pixel Hits / selected tracks", legend="isVAL KEY-jets", Xlabel="Number of Pixel Hits", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +NormChi2 = plotInfo(name="tkNChiSqr_3D", title="Normalized Chi2", legend="isVAL KEY-jets", Xlabel="Normilized Chi2", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +trackPt = plotInfo(name="tkPt_3D", title="track Pt", legend="isVAL KEY-jets", Xlabel="track Pt", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["IPTag"] + ) +#by SV and for CSV information +flightDist3Dval = plotInfo(name="flightDistance3dVal", title="3D flight distance value", legend="isVAL KEY-jets", Xlabel="3D flight distance value [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +flightDist3Dsig = plotInfo(name="flightDistance3dSig", title="3D flight distance significance", legend="isVAL KEY-jets", Xlabel="3D flight distance significance", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +jetNSecondaryVertices = plotInfo(name="jetNSecondaryVertices", title="Number of SV / jet", legend="isVAL KEY-jets", Xlabel="Number of SV / jet", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +#Reco and pseudo vertex information +vertexMass = plotInfo(name="vertexMass", title="vertex mass", legend="isVAL KEY-jets", Xlabel="vertex mass GeV/c^2", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +vertexNTracks = plotInfo(name="vertexNTracks", title="number of tracks at SV", legend="isVAL KEY-jets", Xlabel="number of tracks at SV", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +vertexJetDeltaR = plotInfo(name="vertexJetDeltaR", title="Delta R between the SV and the jet axis", legend="isVAL KEY-jets", Xlabel="Delta R between the SV and the jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +vertexEnergyRatio = plotInfo(name="vertexEnergyRatio", title="Energy Ratio between SV and the jet", legend="isVAL KEY-jets", Xlabel="Energy Ratio between SV and the jet", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +#Reco, pseudo and no vertex information +vertexCategory = plotInfo(name="vertexCategory", title="Reco, Pseudo, No vertex", legend="isVAL KEY-jets", Xlabel="Reco, Pseudo, No vertex", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackSip3dVal = plotInfo(name="trackSip3dVal", title="track IP 3D", legend="isVAL KEY-jets", Xlabel="track IP 3D [cm]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackSip3dSig = plotInfo(name="trackSip3dSig", title="track IPS 3D", legend="isVAL KEY-jets", Xlabel="track IPS 3D", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackSip3dSigAboveCharm = plotInfo(name="trackSip3dSigAboveCharm", title="first track IPS 3D lifting SV mass above charm", legend="isVAL KEY-jets", Xlabel="first track IPS 3D lifting SV mass above charm", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackDeltaR = plotInfo(name="trackDeltaR", title="Delta R between the track and the jet axis", legend="isVAL KEY-jets", Xlabel="DeltaR(track,jet axis)", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackEtaRel = plotInfo(name="trackEtaRel", title="track eta relative to the jet axis", legend="isVAL KEY-jets", Xlabel="track eta relative to the jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackDecayLenVal = plotInfo(name="trackDecayLenVal", title="track decay length", legend="isVAL KEY-jets", Xlabel="track decay length", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackSumJetDeltaR = plotInfo(name="trackSumJetDeltaR", title="Delta R between track 4-vector sum and jet axis", legend="isVAL KEY-jets", Xlabel="Delta R between track 4-vector sum and jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackJetDist = plotInfo(name="trackJetDist", title="track distance to jet axis", legend="isVAL KEY-jets", Xlabel="track distance to jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackSumJetEtRatio = plotInfo(name="trackSumJetEtRatio", title="track sum Et / jet energy", legend="isVAL KEY-jets", Xlabel="track sum Et / jet energy", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackPtRel = plotInfo(name="trackPtRel", title="track Pt relative to jet axis", legend="isVAL KEY-jets", Xlabel="track Pt relative to jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackPtRatio = plotInfo(name="trackPtRatio", title="track Pt relative to jet axis, normalized to its energy", legend="isVAL KEY-jets", Xlabel="track Pt relative to jet axis, normalized to its energy", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackMomentum = plotInfo(name="trackMomentum", title="track momentum", legend="isVAL KEY-jets", Xlabel="track momentum [GeV/c]", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackPPar = plotInfo(name="trackPPar", title="track parallel momentum along the jet axis", legend="isVAL KEY-jets", Xlabel="track parallel momentum along the jet axis", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) +trackPParRatio = plotInfo(name="trackPParRatio", title="track parallel momentum along the jet axis, normalized to its energy", legend="isVAL KEY-jets", Xlabel="track parallel momentum along the jet axis, normalized to its energy", Ylabel="abitrary units", + logY=False, grid=False, + binning=None, Rebin=None, doNormalization=True, + listTagger=["CSVTag"] + ) diff --git a/Validation/RecoB/scripts/plotFactory.py b/Validation/RecoB/scripts/plotFactory.py new file mode 100755 index 0000000000000..835db3ab1699d --- /dev/null +++ b/Validation/RecoB/scripts/plotFactory.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +####### + +# automatized plots generator for b-tagging performances +# Adrien Caudron, 2013, UCL + +####### + +#import all what is needed +from histoStyle import * +#parser options +from optparse import OptionParser +usage="""%prog [options]""" +description="""A simple script to generate validation plots""" +epilog="""Example: +plotFactory.py -f BTagRelVal_TTbar_Startup_600.root -F BTagRelVal_TTbar_Startup_600gspre3.root -r 600 -R 600gspre3 -s TTbar_Startup -S TTbar_Startup +""" +parser = OptionParser(usage=usage,add_help_option=True,description=description,epilog=epilog) +parser.add_option("-f", "--valInputFile", dest="valPath", default=fileNameVal, + help="Read input file for sample to validated", metavar="VALFILE") +parser.add_option("-F", "--refInputFile", dest="refPath", default=fileNameRef, + help="Read input file for reference sample", metavar="RAFFILE") +parser.add_option("-r", "--valReleaseName", dest="ValRel", default=ValRel, + help="Name to refer to the release/conditions to validate, ex: 600, GTV18 ...", metavar="VALREL") +parser.add_option("-R", "--refReleaseName", dest="RefRel", default=RefRel, + help="Name to refer to the reference release/conditions, ex: 600pre11, GTV16 ...", metavar="REFREL") +parser.add_option("-s", "--valSampleName", dest="ValSample", default=ValSample, + help="Name to refer to the sample name to validate, ex: TTbar_FullSim, 2012C ...", metavar="VALSAMPLE") +parser.add_option("-S", "--refSampleName", dest="RefSample", default=RefSample, + help="Name to refer to the reference sample name, ex: TTbar_FullSim, 2012C ...", metavar="REFSAMPLE") +parser.add_option("-b", "--batch", dest="batch", default=batch, + action="store_true", help="if False, the script will run in batch mode") +parser.add_option("-l", "--drawLegend", dest="drawLegend", default=drawLegend, + action="store_true", help="if True the legend will be drawn on top of the plots") +parser.add_option("-p", "--printBanner", dest="printBanner", default=printBanner, + action="store_true", help="if True, a banner will be print on top of the plots") +parser.add_option("-B", "--Banner", dest="Banner", default=Banner, + help="String to write as banner on top of the plots, option -B should be used") +parser.add_option("-n", "--noRatio", dest="doRatio", default=doRatio, + action="store_false", help="if True, ratios plots will be created") +(options, args) = parser.parse_args() +print "file for validation", options.valPath, "file for reference", options.refPath +print "Validation release:", options.ValRel, "Reference release:", options.RefRel +print "Validation sample:", options.ValSample, "Reference sample:", options.RefSample +print "Options : batch mode ?", options.batch, "draw legend ?", options.drawLegend, "print banner ?", options.printBanner, "banner is ", options.Banner, "make ratio plots ?", options.doRatio +#define the input root files +if options.valPath and options.refPath : + fileVal = TFile(options.valPath,"READ") + fileRef = TFile(options.refPath,"READ") +#batch mode ? +if options.batch : ROOT.gROOT.SetBatch() +# style +_style = Style.Style() +_style.SetStyle() +#title +if options.ValSample==options.RefSample : title=options.ValRel+"vs"+options.RefRel+" "+options.ValSample+" " +elif options.ValRel==options.RefRel : title=options.ValRel+" "+options.ValSample+"_vs_"+options.RefSample+" " +else : title=options.ValRel+"vs"+options.RefRel+" "+options.ValSample+"_vs_"+options.RefSample+" " +#declaration +c = {} +perfAll_Val = {} +perfAll_Ref = {} +perfAll_keys = [] +valHistos = {} +refHistos ={} +Histos = {} +ratios = {} +#loop over eta an pt bins +for b in EtaPtBin : + #loop over the histos + for h in listHistos : + for f in listFlavors : + perfAll_Val[f] = {} + perfAll_Ref[f] = {} + #loop over the list of taggers + if h.listTagger is None : h.listTagger=listTag + for tag in h.listTagger : + keyHisto = tag+"_"+h.name+"_"+b + if h.doPerformance : + keyHisto = tag+"_performance_vs_"+h.tagFlavor + #loop over the flavours + h_Val = {} + h_Ref = {} + passH = False + for f in listFlavors : + path = pathInFile+tag+"_"+b+"/"+h.name+"_"+tag+"_"+b+f + if "_B_" in path : + path=path.replace("_B_","_"+f+"_") + path=path.replace(b+f,b) + print path + #get histos + h_Val[f] = fileVal.Get(path) + h_Ref[f] = fileRef.Get(path) + if not h_Val[f] : + print "ERROR :", path, "not found in the roofiles, please check the spelling or check if this histogram is present in the rootdile" + passH = True + if passH : continue + #stop if FlavEffVsBEff_?_discr plot for all the taggers + if h.name=="FlavEffVsBEff_B_discr" : + for f in listFlavors : + perfAll_Val[f][tag]=h_Val[f] + perfAll_Ref[f][tag]=h_Ref[f] + perfAll_keys.append(tag) + continue + #create final histos + if h.doPerformance : + valHistos[keyHisto]=graphProducer(plot=h,histos=h_Val,isVal=True) + refHistos[keyHisto]=graphProducer(plot=h,histos=h_Ref,isVal=False) + else : + valHistos[keyHisto]=histoProducer(plot=h,histos=h_Val,keys=listFlavors,isVal=True) + refHistos[keyHisto]=histoProducer(plot=h,histos=h_Ref,keys=listFlavors,isVal=False) + if valHistos[keyHisto] is None or refHistos[keyHisto] is None : continue + if len(valHistos[keyHisto])!=len(refHistos[keyHisto]) : print "ERROR" + #compute ratios + if options.doRatio : + if h.doPerformance: + ratiosList = createRatioFromGraph(valHistos[keyHisto],refHistos[keyHisto]) + else : + ratiosList = createRatio(valHistos[keyHisto],refHistos[keyHisto]) + ratios[keyHisto] = ratiosList + else : + ratiosList = None + #set name file + if options.ValSample == options.RefSample : saveName=options.ValRel+"vs"+options.RefRel+"_"+options.ValSample+"_Val_"+keyHisto+"_all" + elif options.ValRel==options.RefRel : saveName=options.ValRel+"_"+options.ValSample+"_vs_"+options.RefSample+"_Val_"+keyHisto+"_all" + else : saveName=options.ValRel+"vs"+options.RefRel+"_"+options.ValSample+"_vs_"+options.RefSample+"_Val_"+keyHisto+"_all" + #save canvas + c[keyHisto] = savePlots(title=title+tag,saveName=saveName,listFromats=listFromats,plot=h,Histos=valHistos[keyHisto]+refHistos[keyHisto],options=options,ratios=ratiosList,keyHisto=keyHisto,listLegend=listFlavors,legendName=h.legend) + #for FlavEffVsBEff_B_discr + if h.name=="FlavEffVsBEff_B_discr" : + for f in ["C","DUSG"] : + for isVal in [True,False] : + keyHisto=f+str(isVal) + #setup the histos + if isVal : Histos[keyHisto]=histoProducer(plot=h,histos=perfAll_Val[f],keys=perfAll_keys,isVal=isVal) + else : Histos[keyHisto]=histoProducer(plot=h,histos=perfAll_Ref[f],keys=perfAll_keys,isVal=isVal) + #set name file + if isVal : saveName=options.ValRel+"_"+options.ValSample+"_performance_Bvs"+f+"_allTaggers" + else : saveName=options.RefRel+"_"+options.RefSample+"_performance_Bvs"+f+"_allTaggers" + #set title + if isVal : titleFlav = options.ValRel+"_"+options.ValSample+"_performance_Bvs"+f+"_allTaggers" + else : titleFlav = options.RefRel+"_"+options.RefSample+"_performanceBvs"+f+"_allTaggers" + #save canvas + c[keyHisto] = savePlots(title=titleFlav,saveName=saveName,listFromats=listFromats,plot=h,Histos=Histos[keyHisto],keyHisto=keyHisto,listLegend=h.listTagger,options=options,legendName=h.legend.replace("FLAV",f)) diff --git a/Validation/RecoB/test/RelValnewFinal.csh b/Validation/RecoB/test/RelValnewFinal.csh new file mode 100755 index 0000000000000..6712b5ad41b22 --- /dev/null +++ b/Validation/RecoB/test/RelValnewFinal.csh @@ -0,0 +1,86 @@ +#!/bin/tcsh + +#change release version : $1=release to validate, $2=reference release, $3=working directory (where is lacated yours CMSSW instances), $4=release name for DQM inputs to validate, $5=the same for reference DQM inputs +valrel=$1 +refrel=$2 +workdir=$3 +valdir=$4 +refdir=$5 + +mkdir TTbar_${valrel}_vs_${refrel}_Startup +mkdir TTbar_${valrel}_vs_${refrel}_Startup_PU +mkdir TTbar_${valrel}_vs_${refrel}_FastSim +mkdir QCD_${valrel}_vs_${refrel}_Startup +mkdir FastSim_TTbar_${valrel}_vs_TTbar_${valrel} + +cd TTbar_${valrel}_vs_${refrel}_Startup +plotFactory.py -b -f ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_Startup_${valrel}.root -F ${workdir}/CMSSW_${refdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_Startup_${refrel}.root -r ${valrel} -R ${refrel} -s TTbar_Startup -S TTbar_Startup +cp /afs/cern.ch/cms/btag/www/validation/img/0_leg*.gif . +mv 0_leg1.gif 0_leg4.gif +for File in `ls ${valrel}_*_allTaggers*.gif`; do mv ${File} 1_${File}; done +for File in `ls ${valrel}*jetPt*.gif`; do mv ${File} 2_${File}; done +for File in `ls ${refrel}_*_allTaggers*.gif`; do mv ${File} 3_${File}; done +for File in `ls ${valrel}*jetEta*.gif`; do mv ${File} 4_${File}; done +cd .. + +cd TTbar_${valrel}_vs_${refrel}_Startup_PU +plotFactory.py -b -f ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_Startup_PU_${valrel}.root -F ${workdir}/CMSSW_${refdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_Startup_PU_${refrel}.root -r ${valrel} -R ${refrel} -s TTbar_Startup_PU -S TTbar_Startup_PU +cp /afs/cern.ch/cms/btag/www/validation/img/0_leg*.gif . +mv 0_leg1.gif 0_leg4.gif +for File in `ls ${valrel}_*_allTaggers*.gif`; do mv ${File} 1_${File}; done +for File in `ls ${valrel}*jetPt*.gif`; do mv ${File} 2_${File}; done +for File in `ls ${refrel}_*_allTaggers*.gif`; do mv ${File} 3_${File}; done +for File in `ls ${valrel}*jetEta*.gif`; do mv ${File} 4_${File}; done +cd .. + +cd TTbar_${valrel}_vs_${refrel}_FastSim +plotFactory.py -b -f ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_FastSim_${valrel}.root -F ${workdir}/CMSSW_${refdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_FastSim_${refrel}.root -r ${valrel} -R ${refrel} -s TTbar_FastSim -S TTbar_FastSim +cp /afs/cern.ch/cms/btag/www/validation/img/0_leg*.gif . +mv 0_leg1.gif 0_leg4.gif +for File in `ls ${valrel}_*_allTaggers*.gif`; do mv ${File} 1_${File}; done +for File in `ls ${valrel}*jetPt*.gif`; do mv ${File} 2_${File}; done +for File in `ls ${refrel}_*_allTaggers*.gif`; do mv ${File} 3_${File}; done +for File in `ls ${valrel}*jetEta*.gif`; do mv ${File} 4_${File}; done +cd .. + + +cd QCD_${valrel}_vs_${refrel}_Startup +plotFactory.py -b -f ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_QCD_Startup_${valrel}.root -F ${workdir}/CMSSW_${refdir}/src/Validation/RecoB/test/BTagRelVal_QCD_Startup_${refrel}.root -r ${valrel} -R ${refrel} -s QCD_Startup -S QCD_Startup +cp /afs/cern.ch/cms/btag/www/validation/img/0_leg*.gif . +mv 0_leg1.gif 0_leg4.gif +for File in `ls ${valrel}_*_allTaggers*.gif`; do mv ${File} 1_${File}; done +for File in `ls ${valrel}*jetPt*.gif`; do mv ${File} 2_${File}; done +for File in `ls ${refrel}_*_allTaggers*.gif`; do mv ${File} 3_${File}; done +for File in `ls ${valrel}*jetEta*.gif`; do mv ${File} 4_${File}; done +cd .. + +cd FastSim_TTbar_${valrel}_vs_TTbar_${valrel} +plotFactory.py -b -f ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_FastSim_${valrel}.root -F ${workdir}/CMSSW_${valdir}/src/Validation/RecoB/test/BTagRelVal_TTbar_Startup_${valrel}.root -r ${valrel} -R ${valrel} -s TTbar_FastSim -S TTbar_Startup +cp /afs/cern.ch/cms/btag/www/validation/img/0_leg*.gif . +mv 0_leg1.gif 0_leg4.gif +for File in `ls ${valrel}*FastSim*_allTaggers*.gif`; do mv ${File} 1_${File}; done +for File in `ls ${valrel}*jetPt*.gif`; do mv ${File} 2_${File}; done +for File in `ls ${valrel}*Startup*_allTaggers*.gif`; do mv ${File} 3_${File}; done +for File in `ls ${valrel}*jetEta*.gif`; do mv ${File} 4_${File}; done +cd .. + +mkdir CMSSW_${valdir} +mv *_${valrel}_vs_${refrel}_* CMSSW_${valdir}/ +mv FastSim_TTbar_${valrel}_vs_TTbar_${valrel} CMSSW_${valdir}/ + +echo ''TTbar_${valrel}_vs_${refrel}_Startup'
    ' >> index.html + +echo ''TTbar_${valrel}_vs_${refrel}_Startup_PU'
    ' >> index.html + +echo ''TTbar_${valrel}_vs_${refrel}_FastSim'
    ' >> index.html + +echo ''QCD_${valrel}_vs_${refrel}_Startup'
    ' >> index.html + +echo ''FastSim_TTbar_${valrel}_vs_TTbar_${valrel}'
    ' >> index.html + + + +#mv index.html /afs/cern.ch/cms/btag/www/validation/CMSSW_${valdir}_topdir.html + + +echo "https://cms-btag-validation.web.cern.ch/cms-btag-validation/validation/CMSSW_${valdir}_topdir.html" >& webpage.txt diff --git a/Validation/RecoEgamma/plugins/PhotonValidator.cc b/Validation/RecoEgamma/plugins/PhotonValidator.cc index 876520df293ad..bcc7bcd01d3cb 100755 --- a/Validation/RecoEgamma/plugins/PhotonValidator.cc +++ b/Validation/RecoEgamma/plugins/PhotonValidator.cc @@ -649,6 +649,9 @@ void PhotonValidator::beginJob() { // dbe_->setCurrentFolder("EgammaV/"+fName_+"/Photons"); + histname="nOfflineVtx"; + h_nRecoVtx_ = dbe_->book1D(histname,"# of Offline Vertices",80, -0.5, 79.5); + h_phoEta_[0] = dbe_->book1D("phoEta"," Photon Eta ",etaBin,etaMin, etaMax) ; h_phoPhi_[0] = dbe_->book1D("phoPhi"," Photon Phi ",phiBin,phiMin,phiMax) ; @@ -1064,9 +1067,7 @@ void PhotonValidator::beginJob() { dbe_->setCurrentFolder("EgammaV/"+fName_+"/ConversionInfo"); - histname="nOfflineVtx"; - h_nRecoVtx_ = dbe_->book1D(histname,"# of Offline Vertices",30, -0.5, 29.5); - + histname="nConv"; h_nConv_[0][0] = dbe_->book1D(histname+"All","Number Of Conversions per isolated candidates per events: All Ecal ",10,-0.5, 9.5); h_nConv_[0][1] = dbe_->book1D(histname+"Barrel","Number Of Conversions per isolated candidates per events: Ecal Barrel ",10,-0.5, 9.5); diff --git a/Validation/RecoMuon/plugins/MuonTrackValidator.cc b/Validation/RecoMuon/plugins/MuonTrackValidator.cc index 99ad370858735..5f0a9e7ed8024 100644 --- a/Validation/RecoMuon/plugins/MuonTrackValidator.cc +++ b/Validation/RecoMuon/plugins/MuonTrackValidator.cc @@ -337,17 +337,17 @@ void MuonTrackValidator::analyze(const edm::Event& event, const edm::EventSetup& momentumTP = tp->momentum(); vertexTP = tp->vertex(); //Calcualte the impact parameters w.r.t. PCA - TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,*tp); - TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,*tp); + TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,tpr); + TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,tpr); dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi())); dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2()); } //If the TrackingParticle is comics, get the momentum and vertex at PCA if(parametersDefiner=="CosmicParametersDefinerForTP") { - if(! cosmictpSelector(*tp,&bs,event,setup)) continue; - momentumTP = parametersDefinerTP->momentum(event,setup,*tp); - vertexTP = parametersDefinerTP->vertex(event,setup,*tp); + if(! cosmictpSelector(tpr,&bs,event,setup)) continue; + momentumTP = parametersDefinerTP->momentum(event,setup,tpr); + vertexTP = parametersDefinerTP->vertex(event,setup,tpr); dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi())); dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2()) * momentumTP.z()/sqrt(momentumTP.perp2()); } @@ -667,8 +667,8 @@ void MuonTrackValidator::analyze(const edm::Event& event, const edm::EventSetup& h_charge[w]->Fill( track->charge() ); //Get tracking particle parameters at point of closest approach to the beamline - TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,*(tpr.get())); - TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,*(tpr.get())); + TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,tpr) ; + TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,tpr); double ptSim = sqrt(momentumTP.perp2()); double qoverpSim = tpr->charge()/sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z()); double thetaSim = momentumTP.theta(); diff --git a/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h b/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h index d72af9edbc345..48cccaf1bb4b8 100644 --- a/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h +++ b/Validation/RecoMuon/plugins/MuonTrackValidatorBase.h @@ -24,7 +24,7 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/RecoAlgos/interface/RecoTrackSelector.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h" #include diff --git a/Validation/RecoMuon/src/RecoMuonValidator.h b/Validation/RecoMuon/src/RecoMuonValidator.h index 5563a2bdd9dc4..8bd743cab6521 100644 --- a/Validation/RecoMuon/src/RecoMuonValidator.h +++ b/Validation/RecoMuon/src/RecoMuonValidator.h @@ -9,7 +9,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/InputTag.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "DataFormats/TrackReco/interface/Track.h" #include "SimMuon/MCTruth/interface/MuonAssociatorByHits.h" diff --git a/Validation/RecoParticleFlow/python/PFMuonValidation_cff.py b/Validation/RecoParticleFlow/python/PFMuonValidation_cff.py new file mode 100644 index 0000000000000..d4f18061167cd --- /dev/null +++ b/Validation/RecoParticleFlow/python/PFMuonValidation_cff.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + + +from DQMOffline.Muon.muonPFAnalyzer_cfi import muonPFsequence + + + + +muonPFsequenceMC = muonPFsequence.clone() +muonPFsequenceMC.inputTagMuonReco = cms.InputTag("muons") +muonPFsequenceMC.inputTagGenParticles = cms.InputTag("genParticles") +muonPFsequenceMC.inputTagVertex = cms.InputTag("offlinePrimaryVertices") +muonPFsequenceMC.inputTagBeamSpot = cms.InputTag("offlineBeamSpot") +muonPFsequenceMC.runOnMC = cms.bool(True) +muonPFsequenceMC.folder = cms.string("ParticleFlow/PFMuonValidation/") +muonPFsequenceMC.recoGenDeltaR = cms.double(0.1) +muonPFsequenceMC.relCombIsoCut = cms.double(0.15) +muonPFsequenceMC.highPtThreshold = cms.double(200.) + + +pfMuonValidationSequence = cms.Sequence( muonPFsequenceMC ) + diff --git a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h index 191299cec2d75..64b5278e408de 100644 --- a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h +++ b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h @@ -12,7 +12,7 @@ #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "CommonTools/CandAlgos/interface/GenParticleCustomSelector.h" #include "DQMServices/Core/interface/MonitorElement.h" diff --git a/Validation/RecoTrack/interface/MultiTrackValidator.h b/Validation/RecoTrack/interface/MultiTrackValidator.h index 25ae6bb959607..319af02233402 100644 --- a/Validation/RecoTrack/interface/MultiTrackValidator.h +++ b/Validation/RecoTrack/interface/MultiTrackValidator.h @@ -46,6 +46,7 @@ class MultiTrackValidator : public edm::EDAnalyzer, protected MultiTrackValidato //(i.e. "denominator" of the efficiency ratio) TrackingParticleSelector tpSelector; CosmicTrackingParticleSelector cosmictpSelector; + edm::InputTag _simHitTpMapTag; }; diff --git a/Validation/RecoTrack/interface/MultiTrackValidatorBase.h b/Validation/RecoTrack/interface/MultiTrackValidatorBase.h index e59f0126c94ed..8c74e25a96ca8 100644 --- a/Validation/RecoTrack/interface/MultiTrackValidatorBase.h +++ b/Validation/RecoTrack/interface/MultiTrackValidatorBase.h @@ -23,7 +23,7 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/RecoAlgos/interface/RecoTrackSelector.h" -#include "CommonTools/RecoAlgos/interface/TrackingParticleSelector.h" +#include "SimGeneral/TrackingAnalysis/interface/TrackingParticleSelector.h" #include "CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h" #include diff --git a/Validation/RecoTrack/plugins/MultiTrackValidator.cc b/Validation/RecoTrack/plugins/MultiTrackValidator.cc index 815b6f1fc5deb..d6e3801ad953b 100644 --- a/Validation/RecoTrack/plugins/MultiTrackValidator.cc +++ b/Validation/RecoTrack/plugins/MultiTrackValidator.cc @@ -77,7 +77,7 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset):MultiTra useGsf = pset.getParameter("useGsf"); runStandalone = pset.getParameter("runStandalone"); - + _simHitTpMapTag = pset.getParameter("simHitTpMapTag"); if (!UseAssociators) { associators.clear(); @@ -161,6 +161,14 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup event.getByLabel(label_tp_fake,TPCollectionHfake); const TrackingParticleCollection tPCfake = *(TPCollectionHfake.product()); + if(parametersDefiner=="CosmicParametersDefinerForTP") { + edm::Handle simHitsTPAssoc; + //warning: make sure the TP collection used in the map is the same used in the MTV! + event.getByLabel(_simHitTpMapTag,simHitsTPAssoc); + parametersDefinerTP->initEvent(simHitsTPAssoc); + cosmictpSelector.initEvent(simHitsTPAssoc); + } + //if (tPCeff.size()==0) {edm::LogInfo("TrackValidator") //<< "TP Collection for efficiency studies has size = 0! Skipping Event." ; return;} //if (tPCfake.size()==0) {edm::LogInfo("TrackValidator") @@ -263,8 +271,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup momentumTP = tp->momentum(); vertexTP = tp->vertex(); //Calcualte the impact parameters w.r.t. PCA - TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,*tp); - TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,*tp); + TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,tpr); + TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,tpr); dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi())); dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2()); @@ -272,9 +280,9 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup //If the TrackingParticle is comics, get the momentum and vertex at PCA if(parametersDefiner=="CosmicParametersDefinerForTP") { - if(! cosmictpSelector(*tp,&bs,event,setup)) continue; - momentumTP = parametersDefinerTP->momentum(event,setup,*tp); - vertexTP = parametersDefinerTP->vertex(event,setup,*tp); + if(! cosmictpSelector(tpr,&bs,event,setup)) continue; + momentumTP = parametersDefinerTP->momentum(event,setup,tpr); + vertexTP = parametersDefinerTP->vertex(event,setup,tpr); dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi())); dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2()) * momentumTP.z()/sqrt(momentumTP.perp2()); @@ -453,8 +461,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup //Get tracking particle parameters at point of closest approach to the beamline - TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,*(tpr.get())); - TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,*(tpr.get())); + TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,tpr); + TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,tpr); int chargeTP = tpr->charge(); histoProducerAlgo_->fill_ResoAndPull_recoTrack_histos(w,momentumTP,vertexTP,chargeTP, diff --git a/Validation/RecoTrack/plugins/TrackerSeedValidator.cc b/Validation/RecoTrack/plugins/TrackerSeedValidator.cc index f5f6e7ec0a99f..3780d1ae40f37 100644 --- a/Validation/RecoTrack/plugins/TrackerSeedValidator.cc +++ b/Validation/RecoTrack/plugins/TrackerSeedValidator.cc @@ -201,8 +201,8 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu TrackingParticle::Vector momentumTP = tp->momentum(); TrackingParticle::Point vertexTP = tp->vertex(); //Calcualte the impact parameters w.r.t. PCA - TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,*tp); - TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,*tp); + TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,tp); + TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,tp); double dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi())); double dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2()); @@ -359,8 +359,8 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu TrackingParticleRef tpr = tp.begin()->first; //compute tracking particle parameters at point of closest approach to the beamline - TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,*(tpr.get())); - TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,*(tpr.get())); + TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,tpr); + TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,tpr); // LogTrace("SeedValidatorTEST") << "assocChi2=" << tp.begin()->second << "\n" // << "" << "\n" diff --git a/Validation/RecoTrack/python/MultiTrackValidator_cfi.py b/Validation/RecoTrack/python/MultiTrackValidator_cfi.py index 6dedb6e24a58d..747af30d42764 100644 --- a/Validation/RecoTrack/python/MultiTrackValidator_cfi.py +++ b/Validation/RecoTrack/python/MultiTrackValidator_cfi.py @@ -44,6 +44,7 @@ sim = cms.string('g4SimHits'), parametersDefiner = cms.string('LhcParametersDefinerForTP'), # collision like tracks # parametersDefiner = cms.string('CosmicParametersDefinerForTP'), # cosmics tracks + simHitTpMapTag = cms.InputTag("simHitTPAssocProducer"), # needed by CosmicParametersDefinerForTP ### reco input configuration ### label = cms.VInputTag(cms.InputTag("generalTracks")), diff --git a/Validation/RecoVertex/BuildFile.xml b/Validation/RecoVertex/BuildFile.xml index aa1838287ea3d..a4a9cf1fb98b7 100644 --- a/Validation/RecoVertex/BuildFile.xml +++ b/Validation/RecoVertex/BuildFile.xml @@ -1,9 +1,14 @@ + + + + + @@ -11,6 +16,7 @@ + @@ -26,6 +32,8 @@ + + @@ -34,4 +42,5 @@ + diff --git a/Validation/RecoVertex/interface/BSvsPVHistogramMaker.h b/Validation/RecoVertex/interface/BSvsPVHistogramMaker.h new file mode 100644 index 0000000000000..29e95fb1f5abe --- /dev/null +++ b/Validation/RecoVertex/interface/BSvsPVHistogramMaker.h @@ -0,0 +1,78 @@ +#ifndef Validation_RecoVertex_BSvsPVHistogramMaker_H +#define Validation_RecoVertex_BSvsPVHistogramMaker_H + +#include +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DPGAnalysis/SiStripTools/interface/RunHistogramManager.h" + +namespace edm { + class ParameterSet; + class Event; +} + +namespace reco { + class BeamSpot; +} + + +class TH1F; +class TH2F; +class TProfile; +class TFileDirectory; + +class BSvsPVHistogramMaker { + + public: + BSvsPVHistogramMaker(); + BSvsPVHistogramMaker(const edm::ParameterSet& iConfig); + + ~BSvsPVHistogramMaker(); + + void book(const std::string dirname=""); + void beginRun(const unsigned int nrun); + void fill(const unsigned int orbit, const int bx, const reco::VertexCollection& vertices, const reco::BeamSpot& bs); + void fill(const edm::Event& iEvent, const reco::VertexCollection& vertices, const reco::BeamSpot& bs); + + double x(const reco::BeamSpot& bs, const double z) const; + double y(const reco::BeamSpot& bs, const double z) const; + + private: + + TFileDirectory* _currdir; + const unsigned int m_maxLS; + const bool useSlope_; + const bool _trueOnly; + const bool _runHisto; + const bool _runHistoProfile; + const bool _runHistoBXProfile; + const bool _runHistoBX2D; + const edm::ParameterSet _histoParameters; + + RunHistogramManager _rhm; + TH1F* _hdeltax; + TH1F* _hdeltay; + TH1F* _hdeltaz; + TProfile* _hdeltaxvsz; + TProfile* _hdeltayvsz; + TH1F** _hdeltaxrun; + TH1F** _hdeltayrun; + TH1F** _hdeltazrun; + TProfile** _hdeltaxvszrun; + TProfile** _hdeltayvszrun; + TProfile** _hdeltaxvsorbrun; + TProfile** _hdeltayvsorbrun; + TProfile** _hdeltazvsorbrun; + + TProfile** _hdeltaxvsbxrun; + TProfile** _hdeltayvsbxrun; + TProfile** _hdeltazvsbxrun; + + TH2F** _hdeltaxvsbx2drun; + TH2F** _hdeltayvsbx2drun; + TH2F** _hdeltazvsbx2drun; + +}; + + +#endif // Validation_RecoVertex_BSvsPVHistogramMaker_H diff --git a/Validation/RecoVertex/interface/BeamSpotHistogramMaker.h b/Validation/RecoVertex/interface/BeamSpotHistogramMaker.h new file mode 100644 index 0000000000000..254c9cacbb0a7 --- /dev/null +++ b/Validation/RecoVertex/interface/BeamSpotHistogramMaker.h @@ -0,0 +1,55 @@ +#ifndef Validation_RecoVertex_BeamSpotHistogramMaker_H +#define Validation_RecoVertex_BeamSpotHistogramMaker_H + +#include +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DPGAnalysis/SiStripTools/interface/RunHistogramManager.h" + +namespace edm { + class ParameterSet; +} + +namespace reco { + class BeamSpot; +} + +class TH1F; +class TProfile; +class TFileDirectory; + +class BeamSpotHistogramMaker { + + public: + BeamSpotHistogramMaker(); + BeamSpotHistogramMaker(const edm::ParameterSet& iConfig); + + ~BeamSpotHistogramMaker(); + + void book(const std::string dirname=""); + void beginRun(const unsigned int nrun); + void fill(const unsigned int orbit, const reco::BeamSpot& bs); + + private: + + TFileDirectory* _currdir; + const edm::ParameterSet _histoParameters; + + RunHistogramManager _rhm; + TH1F** _hbsxrun; + TH1F** _hbsyrun; + TH1F** _hbszrun; + TH1F** _hbssigmaxrun; + TH1F** _hbssigmayrun; + TH1F** _hbssigmazrun; + TProfile** _hbsxvsorbrun; + TProfile** _hbsyvsorbrun; + TProfile** _hbszvsorbrun; + TProfile** _hbssigmaxvsorbrun; + TProfile** _hbssigmayvsorbrun; + TProfile** _hbssigmazvsorbrun; + + +}; + + +#endif // Validation_RecoVertex_BeamSpotHistogramMaker_H diff --git a/Validation/RecoVertex/interface/VertexHistogramMaker.h b/Validation/RecoVertex/interface/VertexHistogramMaker.h new file mode 100644 index 0000000000000..19cd3e20485e8 --- /dev/null +++ b/Validation/RecoVertex/interface/VertexHistogramMaker.h @@ -0,0 +1,93 @@ +#ifndef Validation_RecoVertex_VertexHistogramMaker_H +#define Validation_RecoVertex_VertexHistogramMaker_H + +#include +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "DPGAnalysis/SiStripTools/interface/RunHistogramManager.h" + +namespace edm { + class ParameterSet; + class Event; + class Run; +} + +class TH1F; +class TH2F; +class TProfile; +class TFileDirectory; + +class VertexHistogramMaker { + + public: + VertexHistogramMaker(); + VertexHistogramMaker(const edm::ParameterSet& iConfig); + + ~VertexHistogramMaker(); + + void book(const std::string dirname=""); + void beginRun(const edm::Run& iRun); + void fill(const edm::Event& iEvent, const reco::VertexCollection& vertices, const double weight=1.); + + private: + + void fill(const unsigned int orbit, const int bx, const float bxlumi, const reco::VertexCollection& vertices, const double weight=1.); + + TFileDirectory* m_currdir; + const unsigned int m_maxLS; + const double m_weightThreshold; + const bool m_trueOnly; + const bool m_runHisto; + const bool m_runHistoProfile; + const bool m_runHistoBXProfile; + const bool m_runHistoBXProfile2D; + const bool m_runHisto2D; + const bool m_bsConstrained; + const edm::ParameterSet m_histoParameters; + + RunHistogramManager m_rhm; + RunHistogramManager m_fhm; + TH1F* m_hnvtx; + TH1F* m_hntruevtx; + TProfile* m_hntruevtxvslumi; + TH2D* m_hntruevtxvslumi2D; + TH1F* m_hntracks; + TH1F* m_hsqsumptsq; + TH1F* m_hsqsumptsqheavy; + TH1F* m_hnheavytracks; + TH1F* m_hndof; + TH1F* m_haveweight; + TH2F* m_hndofvstracks; + TProfile* m_hndofvsvtxz; + TProfile* m_hntracksvsvtxz; + TProfile* m_haveweightvsvtxz; + TProfile* m_haveweightvsvtxzchk; + TH1F* m_hweights; + TH1F* m_hvtxx; + TH1F* m_hvtxy; + TH1F* m_hvtxz; + TH1F** m_hvtxxrun; + TH1F** m_hvtxyrun; + TH1F** m_hvtxzrun; + TProfile** m_hvtxxvsorbrun; + TProfile** m_hvtxyvsorbrun; + TProfile** m_hvtxzvsorbrun; + TProfile** m_hnvtxvsorbrun; + TProfile2D** m_hnvtxvsbxvsorbrun; + TH2F** m_hnvtxvsorbrun2D; + + TProfile** m_hvtxxvsbxrun; + TProfile** m_hvtxyvsbxrun; + TProfile** m_hvtxzvsbxrun; + TProfile** m_hnvtxvsbxrun; + + TProfile2D** m_hnvtxvsbxvslumirun; + + TH2F** m_hvtxxvsbx2drun; + TH2F** m_hvtxyvsbx2drun; + TH2F** m_hvtxzvsbx2drun; + +}; + + +#endif // Validation_RecoVertex_VertexHistogramMaker_H diff --git a/Validation/RecoVertex/interface/VertexWeighter.h b/Validation/RecoVertex/interface/VertexWeighter.h new file mode 100644 index 0000000000000..74cf6f6fa50fa --- /dev/null +++ b/Validation/RecoVertex/interface/VertexWeighter.h @@ -0,0 +1,30 @@ +#ifndef TRACKINGPFG_PILEUP_VERTEXWEIGHTER_H +#define TRACKINGPFG_PILEUP_VERTEXWEIGHTER_H + +#include + +namespace edm { class ParameterSet; } + +class VertexWeighter{ + + public: + + VertexWeighter(); + VertexWeighter(const double& sigma_init, const double& mean_init, const double& sigma_final, const bool& usemainvtx); + VertexWeighter(const edm::ParameterSet& iConfig); + + const double weight(const std::vector& zpositions, const float& zmain) const; + + private: + + const double m_sigma_init; + const double m_mean_init; + const double m_sigma_final; + const bool m_usemain; + const bool m_dummy; + + +}; + + +#endif // TRACKINGPFG_PILEUP_VERTEXWEIGHTER_H diff --git a/Validation/RecoVertex/python/anotherprimaryvertexanalyzer_cfi.py b/Validation/RecoVertex/python/anotherprimaryvertexanalyzer_cfi.py new file mode 100644 index 0000000000000..b8dea16d539a2 --- /dev/null +++ b/Validation/RecoVertex/python/anotherprimaryvertexanalyzer_cfi.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +primaryvertexanalyzer = cms.EDAnalyzer('AnotherPrimaryVertexAnalyzer', + pvCollection = cms.InputTag("offlinePrimaryVertices"), + firstOnly = cms.untracked.bool(False), + vHistogramMakerPSet = cms.PSet( + trueOnly = cms.untracked.bool(True), + maxLSBeforeRebin = cms.uint32(100), + weightThreshold = cms.untracked.double(0.5), + bsConstrained = cms.bool(False), + histoParameters = cms.untracked.PSet( + nBinX = cms.untracked.uint32(200), xMin=cms.untracked.double(-1.), xMax=cms.untracked.double(1.), + nBinY = cms.untracked.uint32(200), yMin=cms.untracked.double(-1.), yMax=cms.untracked.double(1.), + nBinZ = cms.untracked.uint32(200), zMin=cms.untracked.double(-20.), zMax=cms.untracked.double(20.) + ) + ), + usePrescaleWeight = cms.bool(False), + prescaleWeightProviderPSet = cms.PSet( + prescaleWeightVerbosityLevel = cms.uint32( 0 ), + prescaleWeightTriggerResults = cms.InputTag( "TriggerResults::HLT" ), + prescaleWeightL1GtTriggerMenuLite = cms.InputTag( "l1GtTriggerMenuLite" ), + prescaleWeightHltPaths = cms.vstring() + ) + ) + diff --git a/Validation/RecoVertex/python/beamspotanalyzer_cfi.py b/Validation/RecoVertex/python/beamspotanalyzer_cfi.py new file mode 100644 index 0000000000000..28730aa0c0955 --- /dev/null +++ b/Validation/RecoVertex/python/beamspotanalyzer_cfi.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +beamspotanalyzer = cms.EDAnalyzer('AnotherBeamSpotAnalyzer', + bsCollection = cms.InputTag("offlineBeamSpot"), + bsHistogramMakerPSet = cms.PSet( + histoParameters = cms.untracked.PSet( + nBinX = cms.untracked.uint32(200), xMin=cms.untracked.double(-1.), xMax=cms.untracked.double(1.), + nBinY = cms.untracked.uint32(200), yMin=cms.untracked.double(-1.), yMax=cms.untracked.double(1.), + nBinZ = cms.untracked.uint32(200), zMin=cms.untracked.double(-20.), zMax=cms.untracked.double(20.), + nBinSigmaX = cms.untracked.uint32(200), sigmaXMin=cms.untracked.double(0.), sigmaXMax=cms.untracked.double(0.025), + nBinSigmaY = cms.untracked.uint32(200), sigmaYMin=cms.untracked.double(0.), sigmaYMax=cms.untracked.double(0.025), + nBinSigmaZ = cms.untracked.uint32(200), sigmaZMin=cms.untracked.double(0.), sigmaZMax=cms.untracked.double(15.) + ) + ) + ) + diff --git a/Validation/RecoVertex/python/bspvanalyzer_cfi.py b/Validation/RecoVertex/python/bspvanalyzer_cfi.py new file mode 100644 index 0000000000000..231f9bbdff4bf --- /dev/null +++ b/Validation/RecoVertex/python/bspvanalyzer_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +bspvanalyzer = cms.EDAnalyzer('BSvsPVAnalyzer', + pvCollection = cms.InputTag("offlinePrimaryVertices"), + bsCollection = cms.InputTag("offlineBeamSpot"), + firstOnly = cms.untracked.bool(False), + bspvHistogramMakerPSet = cms.PSet( + useSlope = cms.bool(True), + trueOnly = cms.untracked.bool(True), + maxLSBeforeRebin = cms.uint32(100), + histoParameters = cms.untracked.PSet( + nBinX = cms.untracked.uint32(200), xMin=cms.untracked.double(-0.1), xMax=cms.untracked.double(0.1), + nBinY = cms.untracked.uint32(200), yMin=cms.untracked.double(-0.1), yMax=cms.untracked.double(0.1), + nBinZ = cms.untracked.uint32(200), zMin=cms.untracked.double(-30.), zMax=cms.untracked.double(30.), + nBinZProfile = cms.untracked.uint32(60), zMinProfile=cms.untracked.double(-30.), zMaxProfile=cms.untracked.double(30.) + ) + ) + ) + diff --git a/Validation/RecoVertex/python/mcvertexweight_cfi.py b/Validation/RecoVertex/python/mcvertexweight_cfi.py new file mode 100644 index 0000000000000..d8186a6e3a1d0 --- /dev/null +++ b/Validation/RecoVertex/python/mcvertexweight_cfi.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +mcvertexweight = cms.EDFilter("MCVerticesWeight", + pileupSummaryCollection = cms.InputTag("addPileupInfo"), + mcTruthCollection = cms.InputTag("generator"), + weighterConfig = cms.PSet( + initSigma = cms.double(6.26), + initMean = cms.double(0.4145), + finalSigma = cms.double(5.2), + useMainVertex = cms.bool(True) + ) + ) + diff --git a/Validation/RecoVertex/python/mcverticesanalyzer_cfi.py b/Validation/RecoVertex/python/mcverticesanalyzer_cfi.py new file mode 100644 index 0000000000000..be16bec12593c --- /dev/null +++ b/Validation/RecoVertex/python/mcverticesanalyzer_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +mcverticesanalyzer = cms.EDAnalyzer("MCVerticesAnalyzer", + pileupSummaryCollection = cms.InputTag("addPileupInfo"), + mcTruthCollection = cms.InputTag("generator"), + useWeight = cms.bool(False), + weightProduct = cms.InputTag("mcvertexweight") + ) + diff --git a/Validation/RecoVertex/python/mcvsrecoverticesanalyzer_cfi.py b/Validation/RecoVertex/python/mcvsrecoverticesanalyzer_cfi.py new file mode 100644 index 0000000000000..45b98fb230d18 --- /dev/null +++ b/Validation/RecoVertex/python/mcvsrecoverticesanalyzer_cfi.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +mcvsrecoverticesanalyzer = cms.EDAnalyzer("MCvsRecoVerticesAnalyzer", + pileupSummaryCollection = cms.InputTag("addPileupInfo"), + mcTruthCollection = cms.InputTag("generator"), + pvCollection = cms.InputTag("offlinePrimaryVertices"), + useWeight = cms.bool(False), + useVisibleVertices = cms.bool(False), + weightProduct = cms.InputTag("mcvertexweight") + ) + diff --git a/Validation/RecoVertex/python/pvSelectionSequence_cff.py b/Validation/RecoVertex/python/pvSelectionSequence_cff.py new file mode 100644 index 0000000000000..5ed16a4cc0538 --- /dev/null +++ b/Validation/RecoVertex/python/pvSelectionSequence_cff.py @@ -0,0 +1,25 @@ +import FWCore.ParameterSet.Config as cms + +# one PV + +goodVertices = cms.EDFilter("VertexSelector", + src = cms.InputTag("offlinePrimaryVertices"), +# cut = cms.string("!isFake && ndof >= 5 && abs(z) <= 15 && position.Rho <= 2"), # old cut +# cut = cms.string("!isFake && ndof >= 5 && abs(z) <= 24 && position.Rho <= 2"), + cut = cms.string("!isFake && ndof > 4 && abs(z) <= 30 && position.Rho <= 2"), + filter = cms.bool(False), # otherwise it won't filter the events, just produce an empty vertex collection. +) + +noFakeVertices = goodVertices.clone(cut=cms.string("!isFake")) + +goodVerticesD0s5 = goodVertices.clone(src = cms.InputTag("offlinePrimaryVerticesD0s5")) +goodVerticesD0s51mm = goodVertices.clone(src = cms.InputTag("offlinePrimaryVerticesD0s51mm")) +goodVerticesDA100um = goodVertices.clone(src = cms.InputTag("offlinePrimaryVerticesDA100um")) +goodVerticesDA100umV7 = goodVertices.clone(src = cms.InputTag("offlinePrimaryVerticesDA100umV7")) +goodVerticesDA100umV8 = goodVertices.clone(src = cms.InputTag("offlinePrimaryVerticesDA100umV8")) + + +seqPVSelection = cms.Sequence(goodVertices + noFakeVertices + goodVerticesD0s5 + goodVerticesD0s51mm + + goodVerticesDA100um + goodVerticesDA100umV7 + goodVerticesDA100umV8 ) +seqSimplePVSelection = cms.Sequence(goodVertices + noFakeVertices) + diff --git a/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc b/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc new file mode 100644 index 0000000000000..ae1eef85162ae --- /dev/null +++ b/Validation/RecoVertex/src/AnotherPrimaryVertexAnalyzer.cc @@ -0,0 +1,170 @@ +// -*- C++ -*- +// +// Package: Validation/RecoVertex +// Class: AnotherPrimaryVertexAnalyzer +// +/**\class AnotherPrimaryVertexAnalyzer AnotherPrimaryVertexAnalyzer.cc Validation/RecoVertex/plugins/AnotherPrimaryVertexAnalyzer.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Mon Oct 27 17:37:53 CET 2008 +// $Id: AnotherPrimaryVertexAnalyzer.cc,v 1.2 2011/12/11 10:51:49 venturia Exp $ +// +// + + +// system include files +#include + +// user include files + +#include +#include +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "Validation/RecoVertex/interface/VertexHistogramMaker.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" + +#include "CommonTools/TriggerUtils/interface/PrescaleWeightProvider.h" + + +// +// class decleration +// + +class AnotherPrimaryVertexAnalyzer : public edm::EDAnalyzer { + public: + explicit AnotherPrimaryVertexAnalyzer(const edm::ParameterSet&); + ~AnotherPrimaryVertexAnalyzer(); + + +private: + virtual void beginJob() ; + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void beginRun(const edm::Run&, const edm::EventSetup&); + virtual void endRun(const edm::Run&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + VertexHistogramMaker _vhm; + edm::InputTag _pvcollection; + bool _firstOnly; + + PrescaleWeightProvider* _weightprov; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +AnotherPrimaryVertexAnalyzer::AnotherPrimaryVertexAnalyzer(const edm::ParameterSet& iConfig): + _vhm(iConfig.getParameter("vHistogramMakerPSet")), + _pvcollection(iConfig.getParameter("pvCollection")), + _firstOnly(iConfig.getUntrackedParameter("firstOnly",false)), + _weightprov(iConfig.getParameter("usePrescaleWeight") ? + new PrescaleWeightProvider(iConfig.getParameter("prescaleWeightProviderPSet")) : 0) +{ + //now do what ever initialization is needed + + // + + _vhm.book(); + +} + + +AnotherPrimaryVertexAnalyzer::~AnotherPrimaryVertexAnalyzer() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + + delete _weightprov; + +} + + +// +// member functions +// + +// ------------ method called to for each event ------------ +void +AnotherPrimaryVertexAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + // compute event weigth + + double weight = 1.; + + if(_weightprov) weight = _weightprov->prescaleWeight(iEvent,iSetup); + + // get PV + + Handle pvcoll; + iEvent.getByLabel(_pvcollection,pvcoll); + + if(_firstOnly) { + reco::VertexCollection firstpv; + if(pvcoll->size()) firstpv.push_back((*pvcoll)[0]); + _vhm.fill(iEvent,firstpv,weight); + } + else { + _vhm.fill(iEvent,*pvcoll,weight); + } +} + + +// ------------ method called once each job just before starting event loop ------------ +void +AnotherPrimaryVertexAnalyzer::beginJob() +{ } + +void +AnotherPrimaryVertexAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + + _vhm.beginRun(iRun); + + if(_weightprov) _weightprov->initRun(iRun,iSetup); + +} + +void +AnotherPrimaryVertexAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + +} +// ------------ method called once each job just after ending the event loop ------------ +void +AnotherPrimaryVertexAnalyzer::endJob() { +} + + +//define this as a plug-in +DEFINE_FWK_MODULE(AnotherPrimaryVertexAnalyzer); diff --git a/Validation/RecoVertex/src/BSvsPVAnalyzer.cc b/Validation/RecoVertex/src/BSvsPVAnalyzer.cc new file mode 100644 index 0000000000000..8b07e9d76fa52 --- /dev/null +++ b/Validation/RecoVertex/src/BSvsPVAnalyzer.cc @@ -0,0 +1,162 @@ +// -*- C++ -*- +// +// Package: Validation/RecoVertex +// Class: BSvsPVAnalyzer +// +/**\class BSvsPVAnalyzer BSvsPVAnalyzer.cc Validation/RecoVertex/plugins/BSvsPVAnalyzer.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Mon Oct 27 17:37:53 CET 2008 +// $Id: BSvsPVAnalyzer.cc,v 1.1 2011/03/08 17:11:26 venturia Exp $ +// +// + + +// system include files +#include + +// user include files + +#include +#include +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "Validation/RecoVertex/interface/BSvsPVHistogramMaker.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + +// +// class decleration +// + +class BSvsPVAnalyzer : public edm::EDAnalyzer { + public: + explicit BSvsPVAnalyzer(const edm::ParameterSet&); + ~BSvsPVAnalyzer(); + + +private: + virtual void beginJob() ; + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void beginRun(const edm::Run&, const edm::EventSetup&); + virtual void endRun(const edm::Run&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + BSvsPVHistogramMaker _bspvhm; + edm::InputTag _pvcollection; + edm::InputTag _bscollection; + bool _firstOnly; + +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +BSvsPVAnalyzer::BSvsPVAnalyzer(const edm::ParameterSet& iConfig): + _bspvhm(iConfig.getParameter("bspvHistogramMakerPSet")), + _pvcollection(iConfig.getParameter("pvCollection")), + _bscollection(iConfig.getParameter("bsCollection")), + _firstOnly(iConfig.getUntrackedParameter("firstOnly",false)) +{ + //now do what ever initialization is needed + + // + + _bspvhm.book(); + +} + + +BSvsPVAnalyzer::~BSvsPVAnalyzer() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called to for each event ------------ +void +BSvsPVAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + // get BS + + Handle bs; + iEvent.getByLabel(_bscollection,bs); + + // get PV + + Handle pvcoll; + iEvent.getByLabel(_pvcollection,pvcoll); + + if(_firstOnly) { + reco::VertexCollection firstpv; + if(pvcoll->size()) firstpv.push_back((*pvcoll)[0]); + _bspvhm.fill(iEvent,firstpv,*bs); + } + else { + _bspvhm.fill(iEvent,*pvcoll,*bs); + } +} + + +// ------------ method called once each job just before starting event loop ------------ +void +BSvsPVAnalyzer::beginJob() +{ } + +void +BSvsPVAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + + _bspvhm.beginRun(iRun.run()); + +} + +void +BSvsPVAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + +} +// ------------ method called once each job just after ending the event loop ------------ +void +BSvsPVAnalyzer::endJob() { +} + + +//define this as a plug-in +DEFINE_FWK_MODULE(BSvsPVAnalyzer); diff --git a/Validation/RecoVertex/src/BSvsPVHistogramMaker.cc b/Validation/RecoVertex/src/BSvsPVHistogramMaker.cc new file mode 100644 index 0000000000000..e24499aa8f29a --- /dev/null +++ b/Validation/RecoVertex/src/BSvsPVHistogramMaker.cc @@ -0,0 +1,265 @@ +#include "Validation/RecoVertex/interface/BSvsPVHistogramMaker.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TProfile.h" + + +BSvsPVHistogramMaker::BSvsPVHistogramMaker(): + _currdir(0), m_maxLS(100), useSlope_(true), _trueOnly(true), + _runHisto(true), _runHistoProfile(true), _runHistoBXProfile(true), _runHistoBX2D(false), _histoParameters() { } + +BSvsPVHistogramMaker::BSvsPVHistogramMaker(const edm::ParameterSet& iConfig): + _currdir(0), + m_maxLS(iConfig.getParameter("maxLSBeforeRebin")), + useSlope_(iConfig.getParameter("useSlope")), + _trueOnly(iConfig.getUntrackedParameter("trueOnly",true)), + _runHisto(iConfig.getUntrackedParameter("runHisto",true)), + _runHistoProfile(iConfig.getUntrackedParameter("runHistoProfile",true)), + _runHistoBXProfile(iConfig.getUntrackedParameter("runHistoBXProfile",true)), + _runHistoBX2D(iConfig.getUntrackedParameter("runHistoBX2D",false)), + _histoParameters(iConfig.getUntrackedParameter("histoParameters",edm::ParameterSet())), + _rhm() +{ } + + +BSvsPVHistogramMaker::~BSvsPVHistogramMaker() { + + delete _currdir; + +} + + +void BSvsPVHistogramMaker::book(const std::string dirname) { + + edm::Service tfserv; + TFileDirectory* currdir = &(*tfserv); + + if(dirname!="") { + currdir = new TFileDirectory(tfserv->mkdir(dirname)); + _currdir = currdir; + } + + edm::LogInfo("HistogramBooking") << "Vertex histogram booking in directory " << dirname; + + _hdeltax = currdir->make("deltax","(PV-BS) X position", + _histoParameters.getUntrackedParameter("nBinX",200), + _histoParameters.getUntrackedParameter("xMin",-1.), + _histoParameters.getUntrackedParameter("xMax",1.) + ); + _hdeltax->GetXaxis()->SetTitle("#Delta(X) [cm]"); _hdeltax->GetYaxis()->SetTitle("Vertices"); + + _hdeltay = currdir->make("deltay","(PV-BS) Y position", + _histoParameters.getUntrackedParameter("nBinY",200), + _histoParameters.getUntrackedParameter("yMin",-1.), + _histoParameters.getUntrackedParameter("yMax",1.) + ); + _hdeltay->GetXaxis()->SetTitle("#Delta(Y) [cm]"); _hdeltay->GetYaxis()->SetTitle("Vertices"); + + _hdeltaz = currdir->make("deltaz","(PV-BS) Z position", + _histoParameters.getUntrackedParameter("nBinZ",200), + _histoParameters.getUntrackedParameter("zMin",-20.), + _histoParameters.getUntrackedParameter("zMax",20.) + ); + _hdeltaz->GetXaxis()->SetTitle("#Delta(Z) [cm]"); _hdeltaz->GetYaxis()->SetTitle("Vertices"); + + _hdeltaxvsz = currdir->make("deltaxvsz","(PV-BS) X position vs Z", + _histoParameters.getUntrackedParameter("nBinZProfile",40), + _histoParameters.getUntrackedParameter("zMinProfile",-20.), + _histoParameters.getUntrackedParameter("zMaxProfile",20.) + ); + _hdeltaxvsz->GetXaxis()->SetTitle("Z [cm]"); _hdeltaxvsz->GetYaxis()->SetTitle("#Delta(X) [cm]"); + + _hdeltayvsz = currdir->make("deltayvsz","(PV-BS) Y position vs Z", + _histoParameters.getUntrackedParameter("nBinZProfile",40), + _histoParameters.getUntrackedParameter("zMinProfile",-20.), + _histoParameters.getUntrackedParameter("zMaxProfile",20.) + ); + _hdeltayvsz->GetXaxis()->SetTitle("Z [cm]"); _hdeltayvsz->GetYaxis()->SetTitle("#Delta(Y) [cm]"); + + + + + if(_runHisto) { + _hdeltaxrun = _rhm.makeTH1F("deltaxrun","(PV-BS) X position", + _histoParameters.getUntrackedParameter("nBinX",200), + _histoParameters.getUntrackedParameter("xMin",-1.), + _histoParameters.getUntrackedParameter("xMax",1.)); + + _hdeltayrun = _rhm.makeTH1F("deltayrun","(PV-BS) Y position", + _histoParameters.getUntrackedParameter("nBinY",200), + _histoParameters.getUntrackedParameter("yMin",-1.), + _histoParameters.getUntrackedParameter("yMax",1.)); + + _hdeltazrun = _rhm.makeTH1F("deltazrun","(PV-BS) Z position", + _histoParameters.getUntrackedParameter("nBinZ",200), + _histoParameters.getUntrackedParameter("zMin",-20.), + _histoParameters.getUntrackedParameter("zMax",20.)); + + _hdeltaxvszrun = _rhm.makeTProfile("deltaxvszrun","(PV-BS) X position vs Z", + _histoParameters.getUntrackedParameter("nBinZProfile",40), + _histoParameters.getUntrackedParameter("zMinProfile",-20.), + _histoParameters.getUntrackedParameter("zMaxProfile",20.) + ); + + _hdeltayvszrun = _rhm.makeTProfile("deltayvszrun","(PV-BS) Y position vs Z", + _histoParameters.getUntrackedParameter("nBinZProfile",40), + _histoParameters.getUntrackedParameter("zMinProfile",-20.), + _histoParameters.getUntrackedParameter("zMaxProfile",20.) + ); + + if(_runHistoProfile) { + _hdeltaxvsorbrun = _rhm.makeTProfile("deltaxvsorbrun","(PV-BS) X position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + _hdeltayvsorbrun = _rhm.makeTProfile("deltayvsorbrun","(PV-BS) Y position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + _hdeltazvsorbrun = _rhm.makeTProfile("deltazvsorbrun","(PV-BS) Z position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + } + if(_runHistoBXProfile) { + _hdeltaxvsbxrun = _rhm.makeTProfile("deltaxvsbxrun","(PV-BS) X position vs BX number",3564,-0.5,3563.5); + _hdeltayvsbxrun = _rhm.makeTProfile("deltayvsbxrun","(PV-BS) Y position vs BX number",3564,-0.5,3563.5); + _hdeltazvsbxrun = _rhm.makeTProfile("deltazvsbxrun","(PV-BS) Z position vs BX number",3564,-0.5,3563.5); + if(_runHistoBX2D) { + _hdeltaxvsbx2drun = _rhm.makeTH2F("deltaxvsbx2drun","(PV-BS) X position vs BX number",3564,-0.5,3563.5, + _histoParameters.getUntrackedParameter("nBinX",200), + _histoParameters.getUntrackedParameter("xMin",-1.), + _histoParameters.getUntrackedParameter("xMax",1.)); + _hdeltayvsbx2drun = _rhm.makeTH2F("deltayvsbx2drun","(PV-BS) Y position vs BX number",3564,-0.5,3563.5, + _histoParameters.getUntrackedParameter("nBinY",200), + _histoParameters.getUntrackedParameter("yMin",-1.), + _histoParameters.getUntrackedParameter("yMax",1.)); + _hdeltazvsbx2drun = _rhm.makeTH2F("deltazvsbx2drun","(PV-BS) Z position vs BX number",3564,-0.5,3563.5, + _histoParameters.getUntrackedParameter("nBinZ",200), + _histoParameters.getUntrackedParameter("zMin",-20.), + _histoParameters.getUntrackedParameter("zMax",20.)); + } + } + + } +} + +void BSvsPVHistogramMaker::beginRun(const unsigned int nrun) { + + char runname[100]; + sprintf(runname,"run_%d",nrun); + + TFileDirectory* currdir = _currdir; + if(currdir==0) { + edm::Service tfserv; + currdir = &(*tfserv); + } + + _rhm.beginRun(nrun,*currdir); + + if(_runHisto) { + (*_hdeltaxrun)->GetXaxis()->SetTitle("#Delta(X) [cm]"); (*_hdeltaxrun)->GetYaxis()->SetTitle("Vertices"); + (*_hdeltayrun)->GetXaxis()->SetTitle("#Delta(Y) [cm]"); (*_hdeltayrun)->GetYaxis()->SetTitle("Vertices"); + (*_hdeltazrun)->GetXaxis()->SetTitle("#Delta(Z) [cm]"); (*_hdeltazrun)->GetYaxis()->SetTitle("Vertices"); + (*_hdeltaxvszrun)->GetXaxis()->SetTitle("Z [cm]"); (*_hdeltaxvszrun)->GetYaxis()->SetTitle("#Delta(X) [cm]"); + (*_hdeltayvszrun)->GetXaxis()->SetTitle("Z [cm]"); (*_hdeltayvszrun)->GetYaxis()->SetTitle("#Delta(Y) [cm]"); + + if(_runHistoProfile) { + (*_hdeltaxvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hdeltaxvsorbrun)->GetYaxis()->SetTitle("#Delta(X) [cm]"); + (*_hdeltaxvsorbrun)->SetBit(TH1::kCanRebin); + (*_hdeltayvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hdeltayvsorbrun)->GetYaxis()->SetTitle("#Delta(Y) [cm]"); + (*_hdeltayvsorbrun)->SetBit(TH1::kCanRebin); + (*_hdeltazvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hdeltazvsorbrun)->GetYaxis()->SetTitle("#Delta(Z) [cm]"); + (*_hdeltazvsorbrun)->SetBit(TH1::kCanRebin); + } + if(_runHistoBXProfile) { + (*_hdeltaxvsbxrun)->GetXaxis()->SetTitle("BX"); (*_hdeltaxvsbxrun)->GetYaxis()->SetTitle("#Delta(X) [cm]"); + (*_hdeltayvsbxrun)->GetXaxis()->SetTitle("BX"); (*_hdeltayvsbxrun)->GetYaxis()->SetTitle("#Delta(Y) [cm]"); + (*_hdeltazvsbxrun)->GetXaxis()->SetTitle("BX"); (*_hdeltazvsbxrun)->GetYaxis()->SetTitle("#Delta(Z) [cm]"); + if(_runHistoBX2D) { + (*_hdeltaxvsbx2drun)->GetXaxis()->SetTitle("BX"); (*_hdeltaxvsbx2drun)->GetYaxis()->SetTitle("#Delta(X) [cm]"); + (*_hdeltayvsbx2drun)->GetXaxis()->SetTitle("BX"); (*_hdeltayvsbx2drun)->GetYaxis()->SetTitle("#Delta(Y) [cm]"); + (*_hdeltazvsbx2drun)->GetXaxis()->SetTitle("BX"); (*_hdeltazvsbx2drun)->GetYaxis()->SetTitle("#Delta(Z) [cm]"); + } + } + + } +} + +void BSvsPVHistogramMaker::fill(const unsigned int orbit, const int bx, const reco::VertexCollection& vertices, const reco::BeamSpot& bs) { + + for(reco::VertexCollection::const_iterator vtx=vertices.begin();vtx!=vertices.end();++vtx) { + + if(!(_trueOnly && vtx->isFake())) { + + /* + double deltax = vtx->x()-bs.x0(); + double deltay = vtx->y()-bs.y0(); + double deltaz = vtx->z()-bs.z0(); + */ + double deltax = vtx->x()-x(bs,vtx->z()); + double deltay = vtx->y()-y(bs,vtx->z()); + double deltaz = vtx->z()-bs.z0(); + + _hdeltax->Fill(deltax); + _hdeltay->Fill(deltay); + _hdeltaz->Fill(deltaz); + _hdeltaxvsz->Fill(vtx->z(),deltax); + _hdeltayvsz->Fill(vtx->z(),deltay); + + if(_runHisto) { + if(_hdeltaxrun && *_hdeltaxrun ) (*_hdeltaxrun)->Fill(deltax); + if(_hdeltayrun && *_hdeltayrun ) (*_hdeltayrun)->Fill(deltay); + if(_hdeltazrun && *_hdeltazrun ) (*_hdeltazrun)->Fill(deltaz); + if(_hdeltaxvszrun && *_hdeltaxvszrun ) (*_hdeltaxvszrun)->Fill(vtx->z(),deltax); + if(_hdeltayvszrun && *_hdeltayvszrun ) (*_hdeltayvszrun)->Fill(vtx->z(),deltay); + if(_runHistoProfile) { + if(_hdeltaxvsorbrun && *_hdeltaxvsorbrun ) (*_hdeltaxvsorbrun)->Fill(orbit,deltax); + if(_hdeltayvsorbrun && *_hdeltayvsorbrun ) (*_hdeltayvsorbrun)->Fill(orbit,deltay); + if(_hdeltazvsorbrun && *_hdeltazvsorbrun ) (*_hdeltazvsorbrun)->Fill(orbit,deltaz); + } + if(_runHistoBXProfile) { + if(_hdeltaxvsbxrun && *_hdeltaxvsbxrun ) (*_hdeltaxvsbxrun)->Fill(bx,deltax); + if(_hdeltayvsbxrun && *_hdeltayvsbxrun ) (*_hdeltayvsbxrun)->Fill(bx,deltay); + if(_hdeltazvsbxrun && *_hdeltazvsbxrun ) (*_hdeltazvsbxrun)->Fill(bx,deltaz); + if(_runHistoBX2D) { + if(_hdeltaxvsbx2drun && *_hdeltaxvsbx2drun ) (*_hdeltaxvsbx2drun)->Fill(bx,deltax); + if(_hdeltayvsbx2drun && *_hdeltayvsbx2drun ) (*_hdeltayvsbx2drun)->Fill(bx,deltay); + if(_hdeltazvsbx2drun && *_hdeltazvsbx2drun ) (*_hdeltazvsbx2drun)->Fill(bx,deltaz); + } + } + } + } + } +} + +void BSvsPVHistogramMaker::fill(const edm::Event& iEvent, const reco::VertexCollection& vertices, const reco::BeamSpot& bs) { + + fill(iEvent.orbitNumber(),iEvent.bunchCrossing(),vertices,bs); + +} + +double BSvsPVHistogramMaker::x(const reco::BeamSpot& bs, const double z) const { + + double x = bs.x0(); + + // if(useSlope_) x += bs.dxdz()*z; + if(useSlope_) x += bs.dxdz()*(z-bs.z0()); + + // if(useSlope_) x = bs.x(z); + + return x; + +} + +double BSvsPVHistogramMaker::y(const reco::BeamSpot& bs, const double z) const { + + double y = bs.y0(); + + // if(useSlope_) y += bs.dydz()*z; + if(useSlope_) y += bs.dydz()*(z-bs.z0()); + + // if(useSlope_) y = bs.y(z); + + return y; + +} + diff --git a/Validation/RecoVertex/src/BeamSpotAnalyzer.cc b/Validation/RecoVertex/src/BeamSpotAnalyzer.cc new file mode 100644 index 0000000000000..5ff4935f905f7 --- /dev/null +++ b/Validation/RecoVertex/src/BeamSpotAnalyzer.cc @@ -0,0 +1,145 @@ +// -*- C++ -*- +// +// Package: Validation/RecoVertex +// Class: AnotherBeamSpotAnalyzer +// +/**\class AnotherBeamSpotAnalyzer BeamSpotAnalyzer.cc Validation/RecoVertex/plugins/BeamSpotAnalyzer.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Mon Oct 27 17:37:53 CET 2008 +// $Id: BeamSpotAnalyzer.cc,v 1.2 2011/05/28 08:15:53 venturia Exp $ +// +// + + +// system include files +#include + +// user include files + +#include +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "Validation/RecoVertex/interface/BeamSpotHistogramMaker.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + + +// +// class decleration +// + +class AnotherBeamSpotAnalyzer : public edm::EDAnalyzer { + public: + explicit AnotherBeamSpotAnalyzer(const edm::ParameterSet&); + ~AnotherBeamSpotAnalyzer(); + + +private: + virtual void beginJob() ; + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void beginRun(const edm::Run&, const edm::EventSetup&); + virtual void endRun(const edm::Run&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + BeamSpotHistogramMaker _bshm; + edm::InputTag _bscollection; + + +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +AnotherBeamSpotAnalyzer::AnotherBeamSpotAnalyzer(const edm::ParameterSet& iConfig): + _bshm(iConfig.getParameter("bsHistogramMakerPSet")), + _bscollection(iConfig.getParameter("bsCollection")) +{ + //now do what ever initialization is needed + + // + + _bshm.book(); + +} + + +AnotherBeamSpotAnalyzer::~AnotherBeamSpotAnalyzer() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called to for each event ------------ +void +AnotherBeamSpotAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + // get BS + + Handle bs; + iEvent.getByLabel(_bscollection,bs); + _bshm.fill(iEvent.orbitNumber(),*bs); + +} + + +// ------------ method called once each job just before starting event loop ------------ +void +AnotherBeamSpotAnalyzer::beginJob() +{ } + +void +AnotherBeamSpotAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + + _bshm.beginRun(iRun.run()); + +} + +void +AnotherBeamSpotAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + +} +// ------------ method called once each job just after ending the event loop ------------ +void +AnotherBeamSpotAnalyzer::endJob() { +} + + +//define this as a plug-in +DEFINE_FWK_MODULE(AnotherBeamSpotAnalyzer); diff --git a/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc b/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc new file mode 100644 index 0000000000000..238c0e1e7cffa --- /dev/null +++ b/Validation/RecoVertex/src/BeamSpotHistogramMaker.cc @@ -0,0 +1,135 @@ +#include "Validation/RecoVertex/interface/BeamSpotHistogramMaker.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "TH2F.h" +#include "TH1F.h" +#include "TProfile.h" + + +BeamSpotHistogramMaker::BeamSpotHistogramMaker(): + _currdir(0), _histoParameters(), _rhm() { } + +BeamSpotHistogramMaker::BeamSpotHistogramMaker(const edm::ParameterSet& iConfig): + _currdir(0), + _histoParameters(iConfig.getUntrackedParameter("histoParameters",edm::ParameterSet())), + _rhm() +{ } + + +BeamSpotHistogramMaker::~BeamSpotHistogramMaker() { + + delete _currdir; + +} + + +void BeamSpotHistogramMaker::book(const std::string dirname) { + + edm::Service tfserv; + TFileDirectory* currdir = &(*tfserv); + + if(dirname!="") { + currdir = new TFileDirectory(tfserv->mkdir(dirname)); + _currdir = currdir; + } + + edm::LogInfo("HistogramBooking") << "BeamSpot histogram booking in directory " << dirname; + + _hbsxrun = _rhm.makeTH1F("bsxrun","BeamSpot X position", + _histoParameters.getUntrackedParameter("nBinX",200), + _histoParameters.getUntrackedParameter("xMin",-1.), + _histoParameters.getUntrackedParameter("xMax",1.)); + + _hbsyrun = _rhm.makeTH1F("bsyrun","BeamSpot Y position", + _histoParameters.getUntrackedParameter("nBinY",200), + _histoParameters.getUntrackedParameter("yMin",-1.), + _histoParameters.getUntrackedParameter("yMax",1.)); + + _hbszrun = _rhm.makeTH1F("bszrun","BeamSpot Z position", + _histoParameters.getUntrackedParameter("nBinZ",200), + _histoParameters.getUntrackedParameter("zMin",-1.), + _histoParameters.getUntrackedParameter("zMax",1.)); + + _hbssigmaxrun = _rhm.makeTH1F("bssigmaxrun","BeamSpot sigmaX", + _histoParameters.getUntrackedParameter("nBinSigmaX",200), + _histoParameters.getUntrackedParameter("sigmaXMin",0.), + _histoParameters.getUntrackedParameter("sigmaXMax",0.025)); + + _hbssigmayrun = _rhm.makeTH1F("bssigmayrun","BeamSpot sigmaY", + _histoParameters.getUntrackedParameter("nBinSigmaY",200), + _histoParameters.getUntrackedParameter("sigmaYMin",0.), + _histoParameters.getUntrackedParameter("sigmaYMax",0.025)); + + _hbssigmazrun = _rhm.makeTH1F("bssigmazrun","BeamSpot sigmaZ", + _histoParameters.getUntrackedParameter("nBinSigmaZ",200), + _histoParameters.getUntrackedParameter("sigmaZMin",0.), + _histoParameters.getUntrackedParameter("sigmaZMax",15.)); + + _hbsxvsorbrun = _rhm.makeTProfile("bsxvsorbrun","BeamSpot X position vs orbit number",1600,0.5,1600.*16384+0.5); + _hbsyvsorbrun = _rhm.makeTProfile("bsyvsorbrun","BeamSpot Y position vs orbit number",1600,0.5,1600.*16384+0.5); + _hbszvsorbrun = _rhm.makeTProfile("bszvsorbrun","BeamSpot Z position vs orbit number",1600,0.5,1600.*16384+0.5); + _hbssigmaxvsorbrun = _rhm.makeTProfile("bssigmaxvsorbrun","BeamSpot sigmaX vs orbit number",1600,0.5,1600.*16384+0.5); + _hbssigmayvsorbrun = _rhm.makeTProfile("bssigmayvsorbrun","BeamSpot sigmaY vs orbit number",1600,0.5,1600.*16384+0.5); + _hbssigmazvsorbrun = _rhm.makeTProfile("bssigmazvsorbrun","BeamSpot sigmaZ vs orbit number",1600,0.5,1600.*16384+0.5); + +} + +void BeamSpotHistogramMaker::beginRun(const unsigned int nrun) { + + char runname[100]; + sprintf(runname,"run_%d",nrun); + + TFileDirectory* currdir = _currdir; + if(currdir==0) { + edm::Service tfserv; + currdir = &(*tfserv); + } + + _rhm.beginRun(nrun,*currdir); + + (*_hbsxrun)->GetXaxis()->SetTitle("X [cm]"); (*_hbsxrun)->GetYaxis()->SetTitle("Events"); + (*_hbsyrun)->GetXaxis()->SetTitle("Y [cm]"); (*_hbsyrun)->GetYaxis()->SetTitle("Events"); + (*_hbszrun)->GetXaxis()->SetTitle("Z [cm]"); (*_hbszrun)->GetYaxis()->SetTitle("Events"); + (*_hbssigmaxrun)->GetXaxis()->SetTitle("sigmaX [cm]"); (*_hbssigmaxrun)->GetYaxis()->SetTitle("Events"); + (*_hbssigmayrun)->GetXaxis()->SetTitle("sigmaY [cm]"); (*_hbssigmayrun)->GetYaxis()->SetTitle("Events"); + (*_hbssigmazrun)->GetXaxis()->SetTitle("sigmaZ [cm]"); (*_hbssigmazrun)->GetYaxis()->SetTitle("Events"); + + (*_hbsxvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbsxvsorbrun)->GetYaxis()->SetTitle("X [cm]"); + (*_hbsxvsorbrun)->SetBit(TH1::kCanRebin); + (*_hbsyvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbsyvsorbrun)->GetYaxis()->SetTitle("Y [cm]"); + (*_hbsyvsorbrun)->SetBit(TH1::kCanRebin); + (*_hbszvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbszvsorbrun)->GetYaxis()->SetTitle("Z [cm]"); + (*_hbszvsorbrun)->SetBit(TH1::kCanRebin); + (*_hbssigmaxvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbssigmaxvsorbrun)->GetYaxis()->SetTitle("sigmaX [cm]"); + (*_hbssigmaxvsorbrun)->SetBit(TH1::kCanRebin); + (*_hbssigmayvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbssigmayvsorbrun)->GetYaxis()->SetTitle("sigmaY [cm]"); + (*_hbssigmayvsorbrun)->SetBit(TH1::kCanRebin); + (*_hbssigmazvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*_hbssigmazvsorbrun)->GetYaxis()->SetTitle("sigmaZ [cm]"); + (*_hbssigmazvsorbrun)->SetBit(TH1::kCanRebin); + + +} + +void BeamSpotHistogramMaker::fill(const unsigned int orbit, const reco::BeamSpot& bs) { + + if(_hbsxrun && *_hbsxrun ) (*_hbsxrun)->Fill(bs.x0()); + if(_hbsxvsorbrun && *_hbsxvsorbrun ) (*_hbsxvsorbrun)->Fill(orbit,bs.x0()); + + if(_hbsyrun && *_hbsyrun ) (*_hbsyrun)->Fill(bs.y0()); + if(_hbsyvsorbrun && *_hbsyvsorbrun ) (*_hbsyvsorbrun)->Fill(orbit,bs.y0()); + + if(_hbszrun && *_hbszrun ) (*_hbszrun)->Fill(bs.z0()); + if(_hbszvsorbrun && *_hbszvsorbrun ) (*_hbszvsorbrun)->Fill(orbit,bs.z0()); + + if(_hbssigmaxrun && *_hbssigmaxrun ) (*_hbssigmaxrun)->Fill(bs.BeamWidthX()); + if(_hbssigmayrun && *_hbssigmayrun ) (*_hbssigmayrun)->Fill(bs.BeamWidthY()); + if(_hbssigmazrun && *_hbssigmazrun ) (*_hbssigmazrun)->Fill(bs.sigmaZ()); + if(_hbssigmaxvsorbrun && *_hbssigmaxvsorbrun ) (*_hbssigmaxvsorbrun)->Fill(orbit,bs.BeamWidthX()); + if(_hbssigmayvsorbrun && *_hbssigmayvsorbrun ) (*_hbssigmayvsorbrun)->Fill(orbit,bs.BeamWidthY()); + if(_hbssigmazvsorbrun && *_hbssigmazvsorbrun ) (*_hbssigmazvsorbrun)->Fill(orbit,bs.sigmaZ()); + +} + diff --git a/Validation/RecoVertex/src/MCVerticesAnalyzer.cc b/Validation/RecoVertex/src/MCVerticesAnalyzer.cc new file mode 100644 index 0000000000000..28aa73295c16f --- /dev/null +++ b/Validation/RecoVertex/src/MCVerticesAnalyzer.cc @@ -0,0 +1,259 @@ +// -*- C++ -*- +// +// Package: MCVerticesAnalyzer +// Class: MCVerticesAnalyzer +// +/**\class MCVerticesAnalyzer MCVerticesAnalyzer.cc TrackingPFG/PileUp/src/MCVerticesAnalyzer.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Thu Dec 16 16:32:56 CEST 2010 +// $Id: MCVerticesAnalyzer.cc,v 1.6 2011/11/12 16:49:19 venturia Exp $ +// +// + + +// system include files +#include +#include + +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" + + +#include "TH1F.h" +#include "TH2F.h" +#include "TProfile.h" + +// +// class decleration +// + + +class MCVerticesAnalyzer : public edm::EDAnalyzer { +public: + explicit MCVerticesAnalyzer(const edm::ParameterSet&); + ~MCVerticesAnalyzer(); + +private: + virtual void beginJob() ; + virtual void beginRun(const edm::Run&, const edm::EventSetup&); + virtual void endRun(const edm::Run&, const edm::EventSetup&); + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + + + edm::InputTag m_pileupcollection; + edm::InputTag m_mctruthcollection; + const bool m_useweight; + edm::InputTag m_weight; + + TH1F* m_hnvtx; + TH1F* m_hlumi; + TH2F* m_hnvtxvslumi; + TH1F* m_hnvtxweight; + TProfile* m_hnvtxweightprof; + TH1F* m_hmainvtxx; + TH1F* m_hmainvtxy; + TH1F* m_hmainvtxz; + TH1F* m_hpileupvtxz; + +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +MCVerticesAnalyzer::MCVerticesAnalyzer(const edm::ParameterSet& iConfig): + m_pileupcollection(iConfig.getParameter("pileupSummaryCollection")), + m_mctruthcollection(iConfig.getParameter("mcTruthCollection")), + m_useweight(iConfig.getParameter("useWeight")), + m_weight(iConfig.getParameter("weightProduct")) + + +{ + //now do what ever initialization is needed + + + + edm::Service tfserv; + + m_hnvtx = tfserv->make("nvtx","Number of pileup vertices",60,-0.5,59.5); + m_hnvtx->GetXaxis()->SetTitle("Number of Interactions"); + + m_hlumi = tfserv->make("lumi","BX luminosity*xsect",200,0.,50.); + m_hlumi->GetXaxis()->SetTitle("Average Number of Interactions"); + + m_hnvtxvslumi = tfserv->make("nvtxvslumi","Npileup vs BX luminosity*xsect",200,0.,50.,60,-0.5,59.5); + m_hnvtxvslumi->GetXaxis()->SetTitle("Average Number of Interactions"); m_hnvtxvslumi->GetYaxis()->SetTitle("Number of Interactions"); + + if(m_useweight) { + m_hnvtxweight = tfserv->make("nvtxweight","Number of pileup vertices (1-w)",60,-0.5,59.5); + m_hnvtxweight->GetXaxis()->SetTitle("Number of Interactions"); + m_hnvtxweightprof = tfserv->make("nvtxweightprof","Mean (1-w) vs Number of pileup interactions",60,-0.5,59.5); + m_hnvtxweightprof->GetXaxis()->SetTitle("Number of Interactions"); + } + + m_hmainvtxx = tfserv->make("mainvtxx","Main vertex x position",200,-.5,.5); + m_hmainvtxx->GetXaxis()->SetTitle("X (cm)"); + m_hmainvtxy = tfserv->make("mainvtxy","Main vertex y position",200,-.5,.5); + m_hmainvtxy->GetXaxis()->SetTitle("Y (cm)"); + m_hmainvtxz = tfserv->make("mainvtxz","Main vertex z position",600,-30.,30.); + m_hmainvtxz->GetXaxis()->SetTitle("Z (cm)"); + m_hpileupvtxz = tfserv->make("pileupvtxz","PileUp vertices z position",600,-30.,30.); + m_hpileupvtxz->GetXaxis()->SetTitle("Z (cm)"); + +} + + +MCVerticesAnalyzer::~MCVerticesAnalyzer() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called to for each event ------------ +void +MCVerticesAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + double weight = 1.; + + if(m_useweight) { + Handle weightprod; + iEvent.getByLabel(m_weight,weightprod); + + weight = *weightprod; + + } + + + Handle > pileupinfos; + iEvent.getByLabel(m_pileupcollection,pileupinfos); + + // + + if(pileupinfos.isValid()) { + + // look for the intime PileupSummaryInfo + + std::vector::const_iterator pileupinfo; + for(pileupinfo = pileupinfos->begin(); pileupinfo != pileupinfos->end() ; ++pileupinfo) { + if(pileupinfo->getBunchCrossing()==0) break; + } + + // + + if(pileupinfo->getBunchCrossing()!=0) { + edm::LogError("NoInTimePileUpInfo") << "Cannot find the in-time pileup info " << pileupinfo->getBunchCrossing(); + } + else { + + m_hlumi->Fill(pileupinfo->getTrueNumInteractions(),weight); + m_hnvtx->Fill(pileupinfo->getPU_NumInteractions(),weight); + m_hnvtxvslumi->Fill(pileupinfo->getTrueNumInteractions(),pileupinfo->getPU_NumInteractions(),weight); + + if(m_useweight) { + m_hnvtxweight->Fill(pileupinfo->getPU_NumInteractions(),1.-weight); + m_hnvtxweightprof->Fill(pileupinfo->getPU_NumInteractions(),1.-weight); + } + + const std::vector& zpositions = pileupinfo->getPU_zpositions(); + + for(std::vector::const_iterator zpos = zpositions.begin() ; zpos != zpositions.end() ; ++zpos) { + + m_hpileupvtxz->Fill(*zpos,weight); + + } + } + } + // main interaction part + + Handle< HepMCProduct > EvtHandle ; + iEvent.getByLabel(m_mctruthcollection, EvtHandle ) ; + + if(EvtHandle.isValid()) { + + const HepMC::GenEvent* Evt = EvtHandle->GetEvent(); + + // get the first vertex + + if(Evt->vertices_begin() != Evt->vertices_end()) { + + m_hmainvtxx->Fill((*Evt->vertices_begin())->point3d().x()/10.,weight); + m_hmainvtxy->Fill((*Evt->vertices_begin())->point3d().y()/10.,weight); + m_hmainvtxz->Fill((*Evt->vertices_begin())->point3d().z()/10.,weight); + + } + } +} + +void +MCVerticesAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup&) +{ +} + +void +MCVerticesAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup&) +{ +} + + + +// ------------ method called once each job just before starting event loop ------------ +void +MCVerticesAnalyzer::beginJob() +{ +} + +// ------------ method called once each job just after ending the event loop ------------ +void +MCVerticesAnalyzer::endJob() +{ +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MCVerticesAnalyzer); diff --git a/Validation/RecoVertex/src/MCVerticesWeight.cc b/Validation/RecoVertex/src/MCVerticesWeight.cc new file mode 100644 index 0000000000000..5f0f17e5f0511 --- /dev/null +++ b/Validation/RecoVertex/src/MCVerticesWeight.cc @@ -0,0 +1,178 @@ +// -*- C++ -*- +// +// Package: PileUp +// Class: MCVerticesWeight +// +/**\class MCVerticesWeight MCVerticesWeight.cc Validation/RecoVertex/MCVerticesWeight.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Tue Oct 21 20:55:22 CEST 2008 +// +// + + +// system include files +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESWatcher.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" + +#include "Validation/RecoVertex/interface/VertexWeighter.h" + +// +// class declaration +// + +class MCVerticesWeight : public edm::EDFilter { + public: + explicit MCVerticesWeight(const edm::ParameterSet&); + ~MCVerticesWeight(); + + private: + virtual void beginJob() ; + virtual bool filter(edm::Event&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + edm::InputTag m_pileupcollection; + edm::InputTag m_mctruthcollection; + const VertexWeighter m_weighter; + +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +MCVerticesWeight::MCVerticesWeight(const edm::ParameterSet& iConfig): + m_pileupcollection(iConfig.getParameter("pileupSummaryCollection")), + m_mctruthcollection(iConfig.getParameter("mcTruthCollection")), + m_weighter(iConfig.getParameter("weighterConfig")) +{ + + produces(); + +} + +MCVerticesWeight::~MCVerticesWeight() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called on each new Event ------------ +bool +MCVerticesWeight::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + bool selected = true; + + double computed_weight(1); + + Handle > pileupinfos; + iEvent.getByLabel(m_pileupcollection,pileupinfos); + + + // look for the intime PileupSummaryInfo + + std::vector::const_iterator pileupinfo; + for(pileupinfo = pileupinfos->begin(); pileupinfo != pileupinfos->end() ; ++pileupinfo) { + if(pileupinfo->getBunchCrossing()==0) break; + } + + // + if(pileupinfo->getBunchCrossing()!=0) { + edm::LogError("NoInTimePileUpInfo") << "Cannot find the in-time pileup info " << pileupinfo->getBunchCrossing(); + } + else { + + // pileupinfo->getPU_NumInteractions(); + + const std::vector& zpositions = pileupinfo->getPU_zpositions(); + + // for(std::vector::const_iterator zpos = zpositions.begin() ; zpos != zpositions.end() ; ++zpos) { + + // } + + // main interaction part + + Handle< HepMCProduct > EvtHandle ; + iEvent.getByLabel(m_mctruthcollection, EvtHandle ) ; + + const HepMC::GenEvent* Evt = EvtHandle->GetEvent(); + + // get the first vertex + + double zmain = 0.0; + if(Evt->vertices_begin() != Evt->vertices_end()) { + zmain = (*Evt->vertices_begin())->point3d().z()/10.; + } + + // + + + computed_weight = m_weighter.weight(zpositions,zmain); + + } + + std::auto_ptr weight(new double(computed_weight)); + + iEvent.put(weight); + + // + + return selected; +} + +// ------------ method called once each job just before starting event loop ------------ +void +MCVerticesWeight::beginJob() +{ +} + +// ------------ method called once each job just after ending the event loop ------------ +void +MCVerticesWeight::endJob() { +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MCVerticesWeight); diff --git a/Validation/RecoVertex/src/MCvsRecoVerticesAnalyzer.cc b/Validation/RecoVertex/src/MCvsRecoVerticesAnalyzer.cc new file mode 100644 index 0000000000000..696141fc5ce1d --- /dev/null +++ b/Validation/RecoVertex/src/MCvsRecoVerticesAnalyzer.cc @@ -0,0 +1,320 @@ +// -*- C++ -*- +// +// Package: MCvsRecoVerticesAnalyzer +// Class: MCvsRecoVerticesAnalyzer +// +/**\class MCvsRecoVerticesAnalyzer MCvsRecoVerticesAnalyzer.cc TrackingPFG/PileUp/src/MCvsRecoVerticesAnalyzer.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Andrea Venturi +// Created: Thu Dec 16 16:32:56 CEST 2010 +// $Id: MCvsRecoVerticesAnalyzer.cc,v 1.4 2011/11/26 00:51:42 venturia Exp $ +// +// + + +// system include files +#include +#include + +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "FWCore/Utilities/interface/InputTag.h" + +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" +#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" +#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" + +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" + +#include "TH1F.h" +#include "TH2F.h" +#include "TProfile.h" + +// +// class decleration +// + + +class MCvsRecoVerticesAnalyzer : public edm::EDAnalyzer { +public: + explicit MCvsRecoVerticesAnalyzer(const edm::ParameterSet&); + ~MCvsRecoVerticesAnalyzer(); + +private: + virtual void beginJob() ; + virtual void beginRun(const edm::Run&, const edm::EventSetup&); + virtual void endRun(const edm::Run&, const edm::EventSetup&); + virtual void analyze(const edm::Event&, const edm::EventSetup&); + virtual void endJob() ; + + // ----------member data --------------------------- + + + + edm::InputTag m_pileupcollection; + edm::InputTag m_mctruthcollection; + edm::InputTag m_pvcollection; + const bool m_useweight; + edm::InputTag m_weight; + const bool m_useVisibleVertices; + const edm::ParameterSet m_histoParameters; + + TH2F* m_hrecovsmcnvtx2d; + TProfile* m_hrecovsmcnvtxprof; + TProfile* m_hrecovsmcnvtxweightedprof; + TH2F* m_hrecovsmclumi2d; + TProfile* m_hrecovsmclumiprof; + TProfile* m_hrecovsmclumiweightedprof; + TH1F* m_hdeltazfirst; + TH1F* m_hdeltazclose; + TH1F* m_hclosestvtx; + + TH2F* m_hdeltazfirstvsnpu; + TH2F* m_hdeltazclosevsnpu; + TH2F* m_hclosestvtxvsnpu; + + +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +MCvsRecoVerticesAnalyzer::MCvsRecoVerticesAnalyzer(const edm::ParameterSet& iConfig): + m_pileupcollection(iConfig.getParameter("pileupSummaryCollection")), + m_mctruthcollection(iConfig.getParameter("mcTruthCollection")), + m_pvcollection(iConfig.getParameter("pvCollection")), + m_useweight(iConfig.getParameter("useWeight")), + m_weight(iConfig.getParameter("weightProduct")), + m_useVisibleVertices(iConfig.getParameter("useVisibleVertices")), + m_histoParameters(iConfig.getUntrackedParameter("histoParameters",edm::ParameterSet())) +{ + //now do what ever initialization is needed + + if(m_useVisibleVertices) edm::LogInfo("UseVisibleVertices") << "Only visible vertices will be used to compute Npileup"; + + edm::Service tfserv; + + m_hrecovsmcnvtx2d = tfserv->make("recovsmcnvtx2d","Number of reco vertices vs pileup interactions",60,-0.5,59.5,60,-0.5,59.5); + m_hrecovsmcnvtx2d->GetXaxis()->SetTitle("Pileup Interactions"); m_hrecovsmcnvtx2d->GetYaxis()->SetTitle("Reco Vertices"); + m_hrecovsmcnvtxprof = tfserv->make("recovsmcnvtxprof","Mean number of reco vs pileup vertices",60,-0.5,59.5); + m_hrecovsmcnvtxprof->GetXaxis()->SetTitle("Pileup Interactions"); m_hrecovsmcnvtxprof->GetYaxis()->SetTitle("Reco Vertices"); + + m_hrecovsmclumi2d = tfserv->make("recovsmclumi2d","Number of reco vertices vs ave pileup interactions",200,0.,50.,60,-0.5,59.5); + m_hrecovsmclumi2d->GetXaxis()->SetTitle("Average Pileup Interactions"); m_hrecovsmclumi2d->GetYaxis()->SetTitle("Reco Vertices"); + m_hrecovsmclumiprof = tfserv->make("recovsmclumiprof","Mean number of reco vs ave pileup vertices",200,0.,50.); + m_hrecovsmclumiprof->GetXaxis()->SetTitle("Average Pileup Interactions"); m_hrecovsmclumiprof->GetYaxis()->SetTitle("Reco Vertices"); + + if(m_useweight) { + m_hrecovsmcnvtxweightedprof = tfserv->make("recovsmcnvtxweightedprof","Mean number of reco vs pileup vertices (1-w) weight",60,-0.5,59.5); + m_hrecovsmcnvtxweightedprof->GetXaxis()->SetTitle("Pileup Interactions"); m_hrecovsmcnvtxweightedprof->GetYaxis()->SetTitle("Reco Vertices (1-w)"); + + m_hrecovsmclumiweightedprof = tfserv->make("recovsmclumiweightedprof","Mean number of reco vs ave pileup vertices (1-w) weight", + 200,0.,50.); + m_hrecovsmclumiweightedprof->GetXaxis()->SetTitle("Average Pileup Interactions"); + m_hrecovsmclumiweightedprof->GetYaxis()->SetTitle("Reco Vertices (1-w)"); + } + + m_hdeltazfirst = tfserv->make("deltazfirst","Reco-MC vertex z position (first vertex)", + m_histoParameters.getUntrackedParameter("zBins",1000), + m_histoParameters.getUntrackedParameter("zMin",-1.), + m_histoParameters.getUntrackedParameter("zMax",1.)); + m_hdeltazfirst->GetXaxis()->SetTitle("#Delta z (cm)"); m_hdeltazfirst->GetYaxis()->SetTitle("Events"); + + m_hdeltazclose = tfserv->make("deltazclose","Reco-MC vertex z position (closest vertex)", + m_histoParameters.getUntrackedParameter("zBins",1000), + m_histoParameters.getUntrackedParameter("zMin",-1.), + m_histoParameters.getUntrackedParameter("zMax",1.)); + m_hdeltazclose->GetXaxis()->SetTitle("#Delta z (cm)"); m_hdeltazclose->GetYaxis()->SetTitle("Events"); + + m_hclosestvtx = tfserv->make("closestvtx","Closest reco vtx ID",30,-0.5,29.5); + m_hclosestvtx->GetXaxis()->SetTitle("Vtx ID"); m_hclosestvtx->GetYaxis()->SetTitle("Events"); + + m_hdeltazfirstvsnpu = tfserv->make("deltazfirstvsnpu","Reco-MC vertex z position (first vertex) vs Npileup",30,-0.5,29.5, + m_histoParameters.getUntrackedParameter("zBins",1000), + m_histoParameters.getUntrackedParameter("zMin",-1.), + m_histoParameters.getUntrackedParameter("zMax",1.)); + m_hdeltazfirstvsnpu->GetXaxis()->SetTitle("pileup Interactions"); m_hdeltazfirstvsnpu->GetYaxis()->SetTitle("#Delta z (cm)"); + + m_hdeltazclosevsnpu = tfserv->make("deltazclosevsnpu","Reco-MC vertex z position (closest vertex) v Npileup",30,-0.5,29.5, + m_histoParameters.getUntrackedParameter("zBins",1000), + m_histoParameters.getUntrackedParameter("zMin",-1.), + m_histoParameters.getUntrackedParameter("zMax",1.)); + m_hdeltazclosevsnpu->GetXaxis()->SetTitle("Pileup Interactions"); m_hdeltazclosevsnpu->GetYaxis()->SetTitle("#Delta z (cm)"); + + m_hclosestvtxvsnpu = tfserv->make("closestvtxvsnpu","Closest reco vtx ID vs Npileup",30,-0.5,29.5,30,-0.5,29.5); + m_hclosestvtxvsnpu->GetXaxis()->SetTitle("Pileup Interactions"); m_hclosestvtxvsnpu->GetYaxis()->SetTitle("Vtx ID"); + +} + + +MCvsRecoVerticesAnalyzer::~MCvsRecoVerticesAnalyzer() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called to for each event ------------ +void +MCvsRecoVerticesAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + + double weight = 1.; + + if(m_useweight) { + Handle weightprod; + iEvent.getByLabel(m_weight,weightprod); + + weight = *weightprod; + + } + + Handle > pileupinfos; + iEvent.getByLabel(m_pileupcollection,pileupinfos); + + // look for the intime PileupSummaryInfo + + std::vector::const_iterator pileupinfo; + + for(pileupinfo = pileupinfos->begin(); pileupinfo != pileupinfos->end() ; ++pileupinfo) { + + if(pileupinfo->getBunchCrossing()==0) break; + + } + + // + + Handle pvcoll; + iEvent.getByLabel(m_pvcollection,pvcoll); + + + // + + if(pileupinfo->getBunchCrossing()!=0) { + + edm::LogError("NoInTimePileUpInfo") << "Cannot find the in-time pileup info " << pileupinfo->getBunchCrossing(); + + } + else { + + int npileup = pileupinfo->getPU_NumInteractions(); + + if(m_useVisibleVertices) npileup = pileupinfo->getPU_zpositions().size(); + + m_hrecovsmcnvtx2d->Fill(npileup,pvcoll->size(),weight); + m_hrecovsmcnvtxprof->Fill(npileup,pvcoll->size(),weight); + + m_hrecovsmclumi2d->Fill(pileupinfo->getTrueNumInteractions(),pvcoll->size(),weight); + m_hrecovsmclumiprof->Fill(pileupinfo->getTrueNumInteractions(),pvcoll->size(),weight); + + if(m_useweight) { + m_hrecovsmcnvtxweightedprof->Fill(npileup,pvcoll->size(),1.-weight); + m_hrecovsmclumiweightedprof->Fill(pileupinfo->getTrueNumInteractions(),pvcoll->size(),1.-weight); + } + // + + Handle< HepMCProduct > EvtHandle ; + iEvent.getByLabel(m_mctruthcollection, EvtHandle ) ; + + const HepMC::GenEvent* Evt = EvtHandle->GetEvent(); + + // compute the difference between the main interaction vertex z position and the first vertex of the collection + + if(pvcoll->size() !=0) { + if(!(*pvcoll)[0].isFake()) { + // get the first vertex + if(Evt->vertices_begin() != Evt->vertices_end()) { + m_hdeltazfirst->Fill((*pvcoll)[0].z()-(*Evt->vertices_begin())->point3d().z()/10.,weight); + m_hdeltazfirstvsnpu->Fill(npileup,(*pvcoll)[0].z()-(*Evt->vertices_begin())->point3d().z()/10.,weight); + } + } + } + + // compute the difference between the main interaction vertex z position and the closest reco vertex + + double minabsdist = -1.; + double mindist = -999.; + int closestvtx = -1; + + for(unsigned int ivtx = 0 ; ivtx < pvcoll->size() ; ++ivtx) { + + if(closestvtx < 0 || minabsdist > std::abs((*pvcoll)[ivtx].z()-(*Evt->vertices_begin())->point3d().z()/10.)) { + mindist = (*pvcoll)[ivtx].z()-(*Evt->vertices_begin())->point3d().z()/10.; + closestvtx = ivtx; + minabsdist = std::abs(mindist); + } + + } + if(closestvtx >= 0) { + m_hdeltazclose->Fill(mindist,weight); + m_hdeltazclosevsnpu->Fill(npileup,mindist,weight); + m_hclosestvtx->Fill(closestvtx,weight); + m_hclosestvtxvsnpu->Fill(npileup,closestvtx,weight); + } + + } +} + + void +MCvsRecoVerticesAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup&) +{ +} + +void +MCvsRecoVerticesAnalyzer::endRun(const edm::Run& iRun, const edm::EventSetup&) +{ +} + + + +// ------------ method called once each job just before starting event loop ------------ +void +MCvsRecoVerticesAnalyzer::beginJob() +{ +} + +// ------------ method called once each job just after ending the event loop ------------ +void +MCvsRecoVerticesAnalyzer::endJob() +{ +} + +//define this as a plug-in +DEFINE_FWK_MODULE(MCvsRecoVerticesAnalyzer); diff --git a/Validation/RecoVertex/src/VertexHistogramMaker.cc b/Validation/RecoVertex/src/VertexHistogramMaker.cc new file mode 100644 index 0000000000000..c85d4600f9088 --- /dev/null +++ b/Validation/RecoVertex/src/VertexHistogramMaker.cc @@ -0,0 +1,377 @@ +#include "Validation/RecoVertex/interface/VertexHistogramMaker.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/Luminosity/interface/LumiDetails.h" +#include "TH2F.h" +#include "TH1F.h" +#include "TProfile.h" + + +VertexHistogramMaker::VertexHistogramMaker(): + m_currdir(0), m_maxLS(100), m_weightThreshold(0.5), m_trueOnly(true), + m_runHisto(true), m_runHistoProfile(true), m_runHistoBXProfile(true), m_runHistoBXProfile2D(false), m_runHisto2D(false), + m_bsConstrained(false), + m_histoParameters() { } + +VertexHistogramMaker::VertexHistogramMaker(const edm::ParameterSet& iConfig): + m_currdir(0), + m_maxLS(iConfig.getParameter("maxLSBeforeRebin")), + m_weightThreshold(iConfig.getUntrackedParameter("weightThreshold",0.5)), + m_trueOnly(iConfig.getUntrackedParameter("trueOnly",true)), + m_runHisto(iConfig.getUntrackedParameter("runHisto",true)), + m_runHistoProfile(iConfig.getUntrackedParameter("runHistoProfile",true)), + m_runHistoBXProfile(iConfig.getUntrackedParameter("runHistoBXProfile",true)), + m_runHistoBXProfile2D(iConfig.getUntrackedParameter("runHistoBXProfile2D",false)), + m_runHisto2D(iConfig.getUntrackedParameter("runHisto2D",false)), + m_bsConstrained(iConfig.getParameter("bsConstrained")), + m_histoParameters(iConfig.getUntrackedParameter("histoParameters",edm::ParameterSet())), + m_rhm(false),m_fhm(true) +{ } + + +VertexHistogramMaker::~VertexHistogramMaker() { + + delete m_currdir; + +} + + +void VertexHistogramMaker::book(const std::string dirname) { + + edm::Service tfserv; + TFileDirectory* currdir = &(*tfserv); + + if(dirname!="") { + currdir = new TFileDirectory(tfserv->mkdir(dirname)); + m_currdir = currdir; + } + + edm::LogInfo("HistogramBooking") << "Vertex histogram booking in directory " << dirname; + + m_hnvtx = currdir->make("nvtx","Number of Vertices",60,-0.5,59.5); + m_hnvtx->GetXaxis()->SetTitle("vertices"); m_hnvtx->GetYaxis()->SetTitle("Events"); + + m_hntruevtx = currdir->make("ntruevtx","Number of True Vertices",60,-0.5,59.5); + m_hntruevtx->GetXaxis()->SetTitle("vertices"); m_hntruevtx->GetYaxis()->SetTitle("Events"); + + m_hntruevtxvslumi = currdir->make("ntruevtxvslumi","Number of True Vertices vs BX lumi",250,0.,10.); + m_hntruevtxvslumi->GetXaxis()->SetTitle("BX lumi [10^{30}cm^{-2}s^{-1}]"); m_hntruevtxvslumi->GetYaxis()->SetTitle("Vertices"); + + m_hntruevtxvslumi2D = currdir->make("ntruevtxvslumi2D","Number of True Vertices vs BX lumi",250,0.,10.,100,-0.5,99.5); + m_hntruevtxvslumi2D->GetXaxis()->SetTitle("BX lumi [10^{30}cm^{-2}s^{-1}]"); m_hntruevtxvslumi2D->GetYaxis()->SetTitle("Vertices"); + + m_hntracks = currdir->make("ntracks","Number of Tracks",300,-0.5,299.5); + m_hntracks->GetXaxis()->SetTitle("tracks"); m_hntracks->GetYaxis()->SetTitle("Vertices"); + + m_hsqsumptsq = currdir->make("sqsumptsq","sqrt(sum pt**2)",1000,0.,1000.); + m_hsqsumptsq->GetXaxis()->SetTitle("sqrt(#Sigma pt^{2}) (GeV)"); m_hsqsumptsq->GetYaxis()->SetTitle("Vertices"); + + char htitle[300]; + sprintf(htitle,"sqrt(sum pt**2) of Tracks weight > %f",m_weightThreshold); + m_hsqsumptsqheavy = currdir->make("sqsumptsqheavy",htitle,1000,0.,1000.); + m_hsqsumptsqheavy->GetXaxis()->SetTitle("sqrt(#Sigma pt^{2}) (GeV)"); m_hsqsumptsqheavy->GetYaxis()->SetTitle("Vertices"); + + sprintf(htitle,"Number of Tracks weight > %f",m_weightThreshold); + m_hnheavytracks = currdir->make("nheavytracks",htitle,200,-0.5,199.5); + m_hnheavytracks->GetXaxis()->SetTitle("tracks"); m_hnheavytracks->GetYaxis()->SetTitle("Vertices"); + + m_hndof = currdir->make("ndof","Number of degree of freedom",250,-0.5,499.5); + m_hndof->GetXaxis()->SetTitle("ndof"); m_hndof->GetYaxis()->SetTitle("Vertices"); + + m_hndofvstracks = currdir->make("ndofvstracks","Ndof vs Ntracks",300,-0.5,299.5,250,-0.5,499.5); + m_hndofvstracks->GetXaxis()->SetTitle("tracks"); m_hndofvstracks->GetYaxis()->SetTitle("ndof"); + + m_hndofvsvtxz = currdir->make("ndofvsvtxz","Ndof vs Vertex Z position",200, + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + m_hndofvsvtxz->GetXaxis()->SetTitle("Z [cm]"); m_hndofvsvtxz->GetYaxis()->SetTitle("ndof"); + + m_hntracksvsvtxz = currdir->make("ntracksvsvtxz","Ntracks vs Vertex Z position",200, + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + m_hntracksvsvtxz->GetXaxis()->SetTitle("Z [cm]"); m_hntracksvsvtxz->GetYaxis()->SetTitle("tracks"); + + m_haveweightvsvtxz = currdir->make("aveweightvsvtxz","Average weight vs Vertex Z position",200, + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + m_haveweightvsvtxz->GetXaxis()->SetTitle("Z [cm]"); m_haveweightvsvtxz->GetYaxis()->SetTitle("Average weight"); + + m_haveweightvsvtxzchk = currdir->make("aveweightvsvtxzchk","Average weight vs Vertex Z position (check)",200, + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + m_haveweightvsvtxzchk->GetXaxis()->SetTitle("Z [cm]"); m_haveweightvsvtxzchk->GetYaxis()->SetTitle("Average weight"); + + m_hweights = currdir->make("weights","Tracks weights",51,0.,1.02); + m_hweights->GetXaxis()->SetTitle("weights"); m_hweights->GetYaxis()->SetTitle("Tracks"); + + m_haveweight = currdir->make("aveweight","Tracks average weights sum",51,0.,1.02); + m_haveweight->GetXaxis()->SetTitle("Average weight"); m_haveweight->GetYaxis()->SetTitle("Vertices"); + + + m_hvtxx = currdir->make("vtxx","Vertex X position", + m_histoParameters.getUntrackedParameter("nBinX",200), + m_histoParameters.getUntrackedParameter("xMin",-1.), + m_histoParameters.getUntrackedParameter("xMax",1.) + ); + m_hvtxx->GetXaxis()->SetTitle("X [cm]"); m_hvtxx->GetYaxis()->SetTitle("Vertices"); + + m_hvtxy = currdir->make("vtxy","Vertex Y position", + m_histoParameters.getUntrackedParameter("nBinY",200), + m_histoParameters.getUntrackedParameter("yMin",-1.), + m_histoParameters.getUntrackedParameter("yMax",1.) + ); + m_hvtxy->GetXaxis()->SetTitle("Y [cm]"); m_hvtxy->GetYaxis()->SetTitle("Vertices"); + + m_hvtxz = currdir->make("vtxz","Vertex Z position", + m_histoParameters.getUntrackedParameter("nBinZ",200), + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.) + ); + m_hvtxz->GetXaxis()->SetTitle("Z [cm]"); m_hvtxz->GetYaxis()->SetTitle("Vertices"); + + if(m_runHisto) { + m_hvtxxrun = m_rhm.makeTH1F("vtxxrun","Vertex X position", + m_histoParameters.getUntrackedParameter("nBinX",200), + m_histoParameters.getUntrackedParameter("xMin",-1.), + m_histoParameters.getUntrackedParameter("xMax",1.)); + + m_hvtxyrun = m_rhm.makeTH1F("vtxyrun","Vertex Y position", + m_histoParameters.getUntrackedParameter("nBinY",200), + m_histoParameters.getUntrackedParameter("yMin",-1.), + m_histoParameters.getUntrackedParameter("yMax",1.)); + + m_hvtxzrun = m_rhm.makeTH1F("vtxzrun","Vertex Z position", + m_histoParameters.getUntrackedParameter("nBinZ",200), + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + + if(m_runHistoProfile) { + m_hvtxxvsorbrun = m_rhm.makeTProfile("vtxxvsorbrun","Vertex X position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + m_hvtxyvsorbrun = m_rhm.makeTProfile("vtxyvsorbrun","Vertex Y position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + m_hvtxzvsorbrun = m_rhm.makeTProfile("vtxzvsorbrun","Vertex Z position vs orbit number",4*m_maxLS,0.5,m_maxLS*262144+0.5); + m_hnvtxvsorbrun = m_rhm.makeTProfile("nvtxvsorbrun","Number of true vertices vs orbit number",m_maxLS,0.5,m_maxLS*262144+0.5); + } + + if(m_runHisto2D) { + m_hnvtxvsbxvsorbrun = m_rhm.makeTProfile2D("nvtxvsbxvsorbrun","Number of true vertices vs BX vs orbit number", + 3564,-0.5,3563.5,m_maxLS,0.5,m_maxLS*262144+0.5); + m_hnvtxvsorbrun2D = m_rhm.makeTH2F("nvtxvsorbrun2D","Number of true vertices vs orbit number", + m_maxLS,0.5,m_maxLS*262144+0.5,60,-0.5,59.5); + } + + if(m_runHistoBXProfile) { + m_hvtxxvsbxrun = m_fhm.makeTProfile("vtxxvsbxrun","Vertex X position vs BX number",3564,-0.5,3563.5); + m_hvtxyvsbxrun = m_fhm.makeTProfile("vtxyvsbxrun","Vertex Y position vs BX number",3564,-0.5,3563.5); + m_hvtxzvsbxrun = m_fhm.makeTProfile("vtxzvsbxrun","Vertex Z position vs BX number",3564,-0.5,3563.5); + + m_hnvtxvsbxrun = m_rhm.makeTProfile("nvtxvsbxrun","Number of true vertices vs BX number",3564,-0.5,3563.5); + + if(m_runHistoBXProfile2D) { + m_hnvtxvsbxvslumirun = m_fhm.makeTProfile2D("nvtxvsbxvslumirun","Number of vertices vs BX and BX lumi",3564,-0.5,3563.5,250,0.,10.); + } + if(m_runHisto2D) { + m_hvtxxvsbx2drun = m_fhm.makeTH2F("vtxxvsbx2drun","Vertex X position vs BX number",3564,-0.5,3563.5, + m_histoParameters.getUntrackedParameter("nBinX",200), + m_histoParameters.getUntrackedParameter("xMin",-1.), + m_histoParameters.getUntrackedParameter("xMax",1.)); + m_hvtxyvsbx2drun = m_fhm.makeTH2F("vtxyvsbx2drun","Vertex Y position vs BX number",3564,-0.5,3563.5, + m_histoParameters.getUntrackedParameter("nBinY",200), + m_histoParameters.getUntrackedParameter("yMin",-1.), + m_histoParameters.getUntrackedParameter("yMax",1.)); + m_hvtxzvsbx2drun = m_fhm.makeTH2F("vtxzvsbx2drun","Vertex Z position vs BX number",3564,-0.5,3563.5, + m_histoParameters.getUntrackedParameter("nBinZ",200), + m_histoParameters.getUntrackedParameter("zMin",-20.), + m_histoParameters.getUntrackedParameter("zMax",20.)); + } + } + + + } +} + +void VertexHistogramMaker::beginRun(const edm::Run& iRun) { + + TFileDirectory* currdir = m_currdir; + if(currdir==0) { + edm::Service tfserv; + currdir = &(*tfserv); + } + + m_rhm.beginRun(iRun,*currdir); + m_fhm.beginRun(iRun,*currdir); + + + if(m_runHisto) { + (*m_hvtxxrun)->GetXaxis()->SetTitle("X [cm]"); (*m_hvtxxrun)->GetYaxis()->SetTitle("Vertices"); + (*m_hvtxyrun)->GetXaxis()->SetTitle("Y [cm]"); (*m_hvtxyrun)->GetYaxis()->SetTitle("Vertices"); + (*m_hvtxzrun)->GetXaxis()->SetTitle("Z [cm]"); (*m_hvtxzrun)->GetYaxis()->SetTitle("Vertices"); + + if(m_runHistoProfile) { + (*m_hvtxxvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*m_hvtxxvsorbrun)->GetYaxis()->SetTitle("X [cm]"); + (*m_hvtxxvsorbrun)->SetBit(TH1::kCanRebin); + (*m_hvtxyvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*m_hvtxyvsorbrun)->GetYaxis()->SetTitle("Y [cm]"); + (*m_hvtxyvsorbrun)->SetBit(TH1::kCanRebin); + (*m_hvtxzvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*m_hvtxzvsorbrun)->GetYaxis()->SetTitle("Z [cm]"); + (*m_hvtxzvsorbrun)->SetBit(TH1::kCanRebin); + (*m_hnvtxvsorbrun)->GetXaxis()->SetTitle("time [orbit#]"); (*m_hnvtxvsorbrun)->GetYaxis()->SetTitle("Nvertices"); + (*m_hnvtxvsorbrun)->SetBit(TH1::kCanRebin); + } + + if(m_runHistoBXProfile) { + (*m_hvtxxvsbxrun)->GetXaxis()->SetTitle("BX"); (*m_hvtxxvsbxrun)->GetYaxis()->SetTitle("X [cm]"); + (*m_hvtxyvsbxrun)->GetXaxis()->SetTitle("BX"); (*m_hvtxyvsbxrun)->GetYaxis()->SetTitle("Y [cm]"); + (*m_hvtxzvsbxrun)->GetXaxis()->SetTitle("BX"); (*m_hvtxzvsbxrun)->GetYaxis()->SetTitle("Z [cm]"); + (*m_hnvtxvsbxrun)->GetXaxis()->SetTitle("BX"); (*m_hnvtxvsbxrun)->GetYaxis()->SetTitle("Nvertices"); + if(m_runHistoBXProfile2D) { + (*m_hnvtxvsbxvslumirun)->GetXaxis()->SetTitle("BX"); (*m_hnvtxvsbxvslumirun)->GetYaxis()->SetTitle("BX lumi [10^{30}cm^{-2}s^{-1}]"); + } + if(m_runHisto2D) { + (*m_hvtxxvsbx2drun)->GetXaxis()->SetTitle("BX"); (*m_hvtxxvsbx2drun)->GetYaxis()->SetTitle("X [cm]"); + (*m_hvtxyvsbx2drun)->GetXaxis()->SetTitle("BX"); (*m_hvtxyvsbx2drun)->GetYaxis()->SetTitle("Y [cm]"); + (*m_hvtxzvsbx2drun)->GetXaxis()->SetTitle("BX"); (*m_hvtxzvsbx2drun)->GetYaxis()->SetTitle("Z [cm]"); + } + } + + if(m_runHisto2D) { + (*m_hnvtxvsbxvsorbrun)->GetXaxis()->SetTitle("BX#"); (*m_hnvtxvsbxvsorbrun)->GetYaxis()->SetTitle("time [orbit#]"); + (*m_hnvtxvsbxvsorbrun)->SetBit(TH1::kCanRebin); + (*m_hnvtxvsorbrun2D)->GetXaxis()->SetTitle("time [orbit#]"); (*m_hnvtxvsorbrun2D)->GetYaxis()->SetTitle("Nvertices"); + (*m_hnvtxvsorbrun2D)->SetBit(TH1::kCanRebin); + } + } +} + +void VertexHistogramMaker::fill(const unsigned int orbit, const int bx, const float bxlumi, const reco::VertexCollection& vertices, const double weight) { + + m_hnvtx->Fill(vertices.size(),weight); + + int ntruevtx = 0; + for(reco::VertexCollection::const_iterator vtx=vertices.begin();vtx!=vertices.end();++vtx) { + if(!vtx->isFake()) ntruevtx++; + + if(!(m_trueOnly && vtx->isFake())) { + + double aveweight = m_bsConstrained ? vtx->ndof()/(2.*vtx->tracksSize()) : (vtx->ndof()+3)/(2.*vtx->tracksSize()); + + m_hntracks->Fill(vtx->tracksSize(),weight); + m_hndof->Fill(vtx->ndof(),weight); + m_haveweight->Fill(aveweight,weight); + m_hndofvstracks->Fill(vtx->tracksSize(),vtx->ndof(),weight); + m_hndofvsvtxz->Fill(vtx->z(),vtx->ndof(),weight); + m_hntracksvsvtxz->Fill(vtx->z(),vtx->tracksSize(),weight); + m_haveweightvsvtxz->Fill(vtx->z(),aveweight,weight); + + m_hvtxx->Fill(vtx->x(),weight); + m_hvtxy->Fill(vtx->y(),weight); + m_hvtxz->Fill(vtx->z(),weight); + + if(m_runHisto) { + if(m_hvtxxrun && *m_hvtxxrun ) (*m_hvtxxrun)->Fill(vtx->x(),weight); + if(m_hvtxyrun && *m_hvtxyrun ) (*m_hvtxyrun)->Fill(vtx->y(),weight); + if(m_hvtxzrun && *m_hvtxzrun ) (*m_hvtxzrun)->Fill(vtx->z(),weight); + if(m_runHistoProfile) { + if(m_hvtxxvsorbrun && *m_hvtxxvsorbrun ) (*m_hvtxxvsorbrun)->Fill(orbit,vtx->x(),weight); + if(m_hvtxyvsorbrun && *m_hvtxyvsorbrun ) (*m_hvtxyvsorbrun)->Fill(orbit,vtx->y(),weight); + if(m_hvtxzvsorbrun && *m_hvtxzvsorbrun ) (*m_hvtxzvsorbrun)->Fill(orbit,vtx->z(),weight); + } + if(m_runHistoBXProfile) { + if(m_hvtxxvsbxrun && *m_hvtxxvsbxrun ) (*m_hvtxxvsbxrun)->Fill(bx,vtx->x(),weight); + if(m_hvtxyvsbxrun && *m_hvtxyvsbxrun ) (*m_hvtxyvsbxrun)->Fill(bx,vtx->y(),weight); + if(m_hvtxzvsbxrun && *m_hvtxzvsbxrun ) (*m_hvtxzvsbxrun)->Fill(bx,vtx->z(),weight); + if(m_runHisto2D) { + if(m_hvtxxvsbx2drun && *m_hvtxxvsbx2drun ) (*m_hvtxxvsbx2drun)->Fill(bx,vtx->x(),weight); + if(m_hvtxyvsbx2drun && *m_hvtxyvsbx2drun ) (*m_hvtxyvsbx2drun)->Fill(bx,vtx->y(),weight); + if(m_hvtxzvsbx2drun && *m_hvtxzvsbx2drun ) (*m_hvtxzvsbx2drun)->Fill(bx,vtx->z(),weight); + } + } + } + + int nheavytracks = 0; + double sumpt2 = 0.; + double sumpt2heavy = 0.; + + for(reco::Vertex::trackRef_iterator trk=vtx->tracks_begin();trk!=vtx->tracks_end();++trk) { + + sumpt2 += (*trk)->pt()*(*trk)->pt(); + + if(vtx->trackWeight(*trk) > m_weightThreshold) { + nheavytracks++; + sumpt2heavy += (*trk)->pt()*(*trk)->pt(); + } + + m_hweights->Fill(vtx->trackWeight(*trk),weight); + m_haveweightvsvtxzchk->Fill(vtx->z(),vtx->trackWeight(*trk),weight); + + } + + m_hnheavytracks->Fill(nheavytracks,weight); + m_hsqsumptsq->Fill(sqrt(sumpt2),weight); + m_hsqsumptsqheavy->Fill(sqrt(sumpt2heavy),weight); + + + } + + + } + + m_hntruevtx->Fill(ntruevtx,weight); + + if(bxlumi >= 0.) { + m_hntruevtxvslumi->Fill(bxlumi,ntruevtx,weight); + m_hntruevtxvslumi2D->Fill(bxlumi,ntruevtx,weight); + } + + if(m_runHisto) { + if(m_runHistoProfile) { + if(m_hnvtxvsorbrun && *m_hnvtxvsorbrun ) (*m_hnvtxvsorbrun)->Fill(orbit,ntruevtx,weight); + } + if(m_runHistoBXProfile) { + if(m_hnvtxvsbxrun && *m_hnvtxvsbxrun ) (*m_hnvtxvsbxrun)->Fill(bx,ntruevtx,weight); + if(m_runHistoBXProfile2D) { + if(m_hnvtxvsbxvslumirun && *m_hnvtxvsbxvslumirun && bxlumi >= 0.) (*m_hnvtxvsbxvslumirun)->Fill(bx,bxlumi,ntruevtx,weight); + } + } + if(m_runHisto2D) { + if(m_hnvtxvsbxvsorbrun && *m_hnvtxvsbxvsorbrun ) (*m_hnvtxvsbxvsorbrun)->Fill(bx,orbit,ntruevtx,weight); + if(m_hnvtxvsorbrun2D && *m_hnvtxvsorbrun2D ) { + if(ntruevtx < (*m_hnvtxvsorbrun2D)->GetYaxis()->GetXmax() && ntruevtx > (*m_hnvtxvsorbrun2D)->GetYaxis()->GetXmin()) { + (*m_hnvtxvsorbrun2D)->Fill(orbit,ntruevtx,weight); + } + } + } + } + + +} + +void VertexHistogramMaker::fill(const edm::Event& iEvent, const reco::VertexCollection& vertices, const double weight) { + + TFileDirectory* currdir = m_currdir; + if(currdir==0) { + edm::Service tfserv; + currdir = &(*tfserv); + } + + + // get luminosity + + edm::Handle ld; + iEvent.getLuminosityBlock().getByLabel("lumiProducer",ld); + + float bxlumi = -1.; + + if(ld.isValid()) { + if(ld->isValid()) { + bxlumi = ld->lumiValue(LumiDetails::kOCC1,iEvent.bunchCrossing())*6.37; + } + } + + fill(iEvent.orbitNumber(),iEvent.bunchCrossing(),bxlumi,vertices,weight); + +} diff --git a/Validation/RecoVertex/src/VertexWeighter.cc b/Validation/RecoVertex/src/VertexWeighter.cc new file mode 100644 index 0000000000000..e690ecaeb2902 --- /dev/null +++ b/Validation/RecoVertex/src/VertexWeighter.cc @@ -0,0 +1,41 @@ +#include "Validation/RecoVertex/interface/VertexWeighter.h" +#include +#include +#include "FWCore/ParameterSet/interface/ParameterSet.h" + + +VertexWeighter::VertexWeighter(): + m_sigma_init(1.), m_mean_init(0.), m_sigma_final(1.), m_usemain(false), m_dummy(true) { } + +VertexWeighter::VertexWeighter(const double& sigma_init, const double& mean_init, const double& sigma_final, const bool& usemainvtx): + m_sigma_init(sigma_init), m_mean_init(mean_init), m_sigma_final(sigma_final), m_usemain(usemainvtx), m_dummy(false) { } + +VertexWeighter::VertexWeighter(const edm::ParameterSet& iConfig): + m_sigma_init(iConfig.getParameter("initSigma")), + m_mean_init(iConfig.getParameter("initMean")), + m_sigma_final(iConfig.getParameter("finalSigma")), + m_usemain(iConfig.getParameter("useMainVertex")), + m_dummy(false) { } + +const double VertexWeighter::weight(const std::vector& zpositions, const float& zmain) const { + + double final_weight = 1.; + + if(!m_dummy) { + + for(std::vector::const_iterator zpos = zpositions.begin() ; zpos != zpositions.end() ; ++zpos) { + + final_weight *= (m_sigma_init/m_sigma_final) * exp(-pow((*zpos-m_mean_init),2)/2.*(1./pow(m_sigma_final,2)-1./pow(m_sigma_init,2))); + + } + + if(m_usemain) { + final_weight *= (m_sigma_init/m_sigma_final) * exp(-pow((zmain-m_mean_init),2)/2.*(1./pow(m_sigma_final,2)-1./pow(m_sigma_init,2))); + } + + } + + return final_weight; + + +} diff --git a/Validation/RecoVertex/test/bspvanalyzer_cfg.py b/Validation/RecoVertex/test/bspvanalyzer_cfg.py new file mode 100644 index 0000000000000..19fba10099d5c --- /dev/null +++ b/Validation/RecoVertex/test/bspvanalyzer_cfg.py @@ -0,0 +1,108 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +process = cms.Process("MCvertices") + +#prepare options + +options = VarParsing.VarParsing() + +options.register ('globalTag', + "DONOTEXIST::All", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "GlobalTag") +#options.globalTag = "DONOTEXIST::All" + +options.parseArguments() + +# +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), + fileMode = cms.untracked.string("FULLMERGE") + ) + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.threshold = cms.untracked.string("INFO") +process.MessageLogger.cout.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cout.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(10000) + ) + +process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") +process.MessageLogger.cerr.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(100000) + ) + +#----Remove too verbose PrimaryVertexProducer + +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptive") +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptiveNoBS") + +#----Remove too verbose BeamSpotOnlineProducer + +process.MessageLogger.suppressInfo.append("testBeamSpot") +process.MessageLogger.suppressInfo.append("onlineBeamSpot") +process.MessageLogger.suppressWarning.append("testBeamSpot") +process.MessageLogger.suppressWarning.append("onlineBeamSpot") + +#----Remove too verbose TrackRefitter + +process.MessageLogger.suppressInfo.append("newTracksFromV0") +process.MessageLogger.suppressInfo.append("newTracksFromOtobV0") + + +#------------------------------------------------------------------ + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(), +# skipBadFiles = cms.untracked.bool(True), + inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") + ) + + +process.source.fileNames = cms.untracked.vstring( +"/store/relval/CMSSW_4_3_0_pre1/RelValZTT/GEN-SIM-RECO/MC_42_V7-v1/0053/1640096C-9E59-E011-BBE5-001A92971B8A.root", +"/store/relval/CMSSW_4_3_0_pre1/RelValZTT/GEN-SIM-RECO/MC_42_V7-v1/0048/F0BF09EC-0559-E011-AFD4-0018F3D0966C.root", +"/store/relval/CMSSW_4_3_0_pre1/RelValZTT/GEN-SIM-RECO/MC_42_V7-v1/0048/C85057F9-0A59-E011-936D-0030486792B6.root" +) + +process.load("Validation.RecoVertex.bspvanalyzer_cfi") +process.bspvanalyzer.pvCollection = cms.InputTag("goodVertices") +process.bspvanalyzer.bspvHistogramMakerPSet.histoParameters = cms.untracked.PSet( + nBinX = cms.untracked.uint32(2000), xMin=cms.untracked.double(-0.2), xMax=cms.untracked.double(0.2), + nBinY = cms.untracked.uint32(2000), yMin=cms.untracked.double(-0.2), yMax=cms.untracked.double(0.2), + nBinZ = cms.untracked.uint32(200), zMin=cms.untracked.double(-30.), zMax=cms.untracked.double(30.), + nBinZProfile = cms.untracked.uint32(60), zMinProfile=cms.untracked.double(-30.), zMaxProfile=cms.untracked.double(30.) + ) +process.bspvanalyzer.bspvHistogramMakerPSet.runHisto = cms.untracked.bool(False) + +process.bspvnoslope = process.bspvanalyzer.clone() +process.bspvnoslope.bspvHistogramMakerPSet.useSlope = cms.bool(False) + + +process.load("Validation.RecoVertex.pvSelectionSequence_cff") + + +process.p0 = cms.Path(process.goodVertices + process.bspvanalyzer + process.bspvnoslope) + +#----GlobalTag ------------------------ + +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +process.GlobalTag.globaltag = options.globalTag + + +process.TFileService = cms.Service('TFileService', + fileName = cms.string('bspvanalyzer.root') + ) + diff --git a/Validation/RecoVertex/test/crab_bspvanalyzer.cfg b/Validation/RecoVertex/test/crab_bspvanalyzer.cfg new file mode 100644 index 0000000000000..bf8cda4180091 --- /dev/null +++ b/Validation/RecoVertex/test/crab_bspvanalyzer.cfg @@ -0,0 +1,120 @@ +[CRAB] + +jobtype = cmssw +#scheduler = glite +scheduler = caf +### NOTE: just setting the name of the server (pi, lnl etc etc ) +### crab will submit the jobs to the server... +#server_name = bari +# +[CMSSW] + +### The data you want to access (to be found on DBS) + +#dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_01/servlet/DBSServlet + +datasetpath=/ExpressPhysics/Run2011A-Express-v1/FEVT + + +pycfg_params= globalTag=GR_E_V16::All + + +pset=Validation/RecoVertex/test/bspvanalyzer_cfg.py + + +lumi_mask=express_2011_ge1615_DECOonly_v10.JSON +runselection=161311 + +total_number_of_lumis =-1 +lumis_per_job = 200 + + +### The output files (comma separated list) +#output_file = + +[USER] + +### OUTPUT files Management +## output back into UI +return_data = 1 + +### To use a specific name of UI directory where CRAB will create job to submit (with full path). +### the default directory will be "crab_0_data_time" +ui_working_dir = /afs/cern.ch/cms/tracking/output/bspvanalyzer_Run2011A_express_161311_v3 + +### To specify the UI directory where to store the CMS executable output +### FULL path is mandatory. Default is /res will be used. +#outputdir= /full/path/yourOutDir + +### To specify the UI directory where to store the stderr, stdout and .BrokerInfo of submitted jobs +### FULL path is mandatory. Default is /res will be used. +#logdir= /full/path/yourLogDir + +### OUTPUT files INTO A SE +copy_data = 0 + +### if you want to copy data in a "official CMS site" +### you have to specify the name as written in +#storage_element = T2_IT_Bari +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = name_directory_you_want + +### if you want to copy your data at CAF +#storage_element = T2_CH_CAF +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = express_2010_132421 + +### if you want to copy your data to your area in castor at cern +### or in a "not official CMS site" you have to specify the complete name of SE +storage_element=srm-cms.cern.ch +### this directory is the mountpoin of SE +#storage_path=/srm/managerv2?SFN=/castor/cern.ch +storage_path=/castor/cern.ch +### directory or tree of directory under the mounpoint +#user_remote_dir = /user/v/venturia/skims/express_2010_132421_132422_3 + + +### To publish produced output in a local istance of DBS set publish_data = 1 +publish_data=0 +### Specify the dataset name. The full path will be //USER +publish_data_name = name_you_prefer +### Specify the URL of DBS istance where CRAB has to publish the output files +#dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_caf_analysis_01_writer/servlet/DBSServlet + +### To specify additional files to be put in InputSandBox +### write the full path if the files are not in the current directory +### (wildcard * are allowed): comma separated list +#additional_input_files = file1, file2, /full/path/file3 + +#if server +#thresholdLevel = 100 +#eMail = your@Email.address + +[GRID] +# +## RB/WMS management: +rb = CERN + +## Black and White Lists management: +## By Storage +se_black_list = T0,T1 +#se_black_list = T0 +#se_white_list = + +## By ComputingElement +#ce_black_list = +#ce_white_list = + +[CONDORG] + +# Set this to condor to override the batchsystem defined in gridcat. +#batchsystem = condor + +# Specify addition condor_g requirments +# use this requirment to run on a cms dedicated hardare +# globus_rsl = (condor_submit=(requirements 'ClusterName == \"CMS\" && (Arch == \"INTEL\" || Arch == \"X86_64\")')) +# use this requirement to run on the new hardware +#globus_rsl = (condor_submit=(requirements 'regexp(\"cms-*\",Machine)')) + diff --git a/Validation/RecoVertex/test/crab_mcvertices.cfg b/Validation/RecoVertex/test/crab_mcvertices.cfg new file mode 100644 index 0000000000000..fffe873cc5a55 --- /dev/null +++ b/Validation/RecoVertex/test/crab_mcvertices.cfg @@ -0,0 +1,165 @@ +[CRAB] + +jobtype = cmssw +scheduler = glite +#scheduler = caf +### NOTE: just setting the name of the server (pi, lnl etc etc ) +### crab will submit the jobs to the server... +#server_name = bari +# +[CMSSW] + +### The data you want to access (to be found on DBS) + +#dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_01/servlet/DBSServlet + +#datasetpath=/GluGluToHToGG_M-120_7TeV-powheg-pythia6/Summer11-Flat35PU_START42_V11-v1/GEN-SIM-RECO +#datasetpath=/WH_ZH_HToGG_M-120_7TeV-pythia6/Summer11-Flat35PU_START42_V11-v1/GEN-SIM-RECO +# HLT +#datasetpath=/TTJets_TuneZ2_7TeV-madgraph-tauola/Fall10-START38_V12-v3/GEN-SIM-RECO +# HLT (?) +#datasetpath=/TTJets_TuneZ2_7TeV-madgraph-tauola/Winter10-E7TeV_ProbDist_2010Data_BX156_START39_V8-v1/GEN-SIM-RECO +# REDIGI39X +#datasetpath=/TTJets_TuneZ2_7TeV-madgraph-tauola/Winter10-E7TeV_ProbDist_2011Flat_BX156_START39_V8-v1/GEN-SIM-RECO +# REDIGI39X +#datasetpath=/TTJets_TuneZ2_7TeV-madgraph-tauola/Winter10-E7TeV_ProbDist_2010Data_BX156_START39_V8-v1/AODSIM +# REDIGI39X +#datasetpath=/TTJets_TuneZ2_7TeV-madgraph-tauola/Winter10-E7TeV_ProbDist_2011Flat_BX156_START39_V8-v1/AODSIM +# REDIGI39X +#datasetpath=/MinBias_TuneZ2_7TeV-pythia6/Fall10-START38_V12-v1/GEN-SIM-RECODEBUG +# REDIGI38XTP +#datasetpath=/MinBias_TuneZ2_7TeV-pythia6/Winter10-START39_V8-v1/GEN-SIM-RECODEBUG +# REDIGI39X +#datasetpath=/Neutrino_Pt_2to20_gun/Summer11-PU_S4_START42_V11-v2/GEN-SIM-RECO +# +datasetpath=/Neutrino_Pt_2to20_gun/Summer11-PUpythia8_START42_V11-v1/GEN-SIM-RECO + +# not sure it works with AOD becuse of the determination of the position of the main vertex MC truth + +#pycfg_params= globalTag=START39_V8::All +#isAOD=0 HLTprocess=REDIGI39X +#pycfg_params= globalTag=START38_V12::All +#pycfg_params= globalTag=START311_V2::All + +#datasetpath=/MinBias_TuneZ2_7TeV-pythia6/Fall10-START38_V12-v1/GEN-SIM-RECODEBUG +#pycfg_params= globalTag=START38_V13::All + +#datasetpath=/Neutrino_Pt2to20_gun/Fall10-E7TeV_ProbDist_2010Data_BX156_START38_V12-v1/GEN-SIM-RECO +#pycfg_params= globalTag=START38_V12::All +#datasetpath=/NeutrinoGun_Pt-2To20/Winter10-E7TeV_ProbDist_2010Data_BX156_2011PU_START39_V8-v1/GEN-SIM-RECO +#datasetpath=/NeutrinoGun_Pt-2To20/Winter10-E7TeV_ProbDist_2010Data_BX156_START39_V8-v1/GEN-SIM-RECO +pycfg_params= globalTag=START42_V11::All + +pset=Validation/RecoVertex/test/mcverticesanalyzer_cfg.py + + +total_number_of_events=10000000 +events_per_job = 50000 + +### The output files (comma separated list) +#output_file = + +[USER] + +### OUTPUT files Management +## output back into UI +return_data = 1 + +### To use a specific name of UI directory where CRAB will create job to submit (with full path). +### the default directory will be "crab_0_data_time" +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ttjets_z2_fall10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ttjets_z2_pileup2010_aod_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ttjets_z2_pileup2011_aod_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ttjets_z2_pileup2010_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ttjets_z2_pileup2011_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_minbias_z2_fall10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_minbias_z2_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_neutrino_2010pileup_fall10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_neutrino_2010pileup_winter10_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_neutrino_2011pileup_winter10_v12 + +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_ggHgg_flat35_summer11_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_WZHgg_flat35_summer11_v12 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_neutrino_pu-s4_summer11_v12 +ui_working_dir = /afs/cern.ch/cms/tracking/output/mcvertices_neutrino_pu-pythia8_summer11_v12 + +### To specify the UI directory where to store the CMS executable output +### FULL path is mandatory. Default is /res will be used. +#outputdir= /full/path/yourOutDir + +### To specify the UI directory where to store the stderr, stdout and .BrokerInfo of submitted jobs +### FULL path is mandatory. Default is /res will be used. +#logdir= /full/path/yourLogDir + +### OUTPUT files INTO A SE +copy_data = 0 + +### if you want to copy data in a "official CMS site" +### you have to specify the name as written in +#storage_element = T2_IT_Bari +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = name_directory_you_want + +### if you want to copy your data at CAF +#storage_element = T2_CH_CAF +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = express_2010_132421 + +### if you want to copy your data to your area in castor at cern +### or in a "not official CMS site" you have to specify the complete name of SE +storage_element=srm-cms.cern.ch +### this directory is the mountpoin of SE +#storage_path=/srm/managerv2?SFN=/castor/cern.ch +storage_path=/castor/cern.ch +### directory or tree of directory under the mounpoint +#user_remote_dir = /user/v/venturia/skims/express_2010_132421_132422_3 + + +### To publish produced output in a local istance of DBS set publish_data = 1 +publish_data=0 +### Specify the dataset name. The full path will be //USER +publish_data_name = name_you_prefer +### Specify the URL of DBS istance where CRAB has to publish the output files +#dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_caf_analysis_01_writer/servlet/DBSServlet + +### To specify additional files to be put in InputSandBox +### write the full path if the files are not in the current directory +### (wildcard * are allowed): comma separated list +#additional_input_files = file1, file2, /full/path/file3 + +#if server +#thresholdLevel = 100 +#eMail = your@Email.address + +[CAF] + +queue=cmscaf1nd + +[GRID] +# +## RB/WMS management: +rb = CERN + +## Black and White Lists management: +## By Storage +se_black_list = T0,T1 +#se_black_list = T0 +#se_white_list = + +## By ComputingElement +#ce_black_list = +#ce_white_list = + +[CONDORG] + +# Set this to condor to override the batchsystem defined in gridcat. +#batchsystem = condor + +# Specify addition condor_g requirments +# use this requirment to run on a cms dedicated hardare +# globus_rsl = (condor_submit=(requirements 'ClusterName == \"CMS\" && (Arch == \"INTEL\" || Arch == \"X86_64\")')) +# use this requirement to run on the new hardware +#globus_rsl = (condor_submit=(requirements 'regexp(\"cms-*\",Machine)')) + diff --git a/Validation/RecoVertex/test/crab_mcverticestriggerbias.cfg b/Validation/RecoVertex/test/crab_mcverticestriggerbias.cfg new file mode 100644 index 0000000000000..550a232336020 --- /dev/null +++ b/Validation/RecoVertex/test/crab_mcverticestriggerbias.cfg @@ -0,0 +1,124 @@ +[CRAB] + +jobtype = cmssw +scheduler = glite +#scheduler = caf +### NOTE: just setting the name of the server (pi, lnl etc etc ) +### crab will submit the jobs to the server... +#server_name = bari +# +[CMSSW] + +### The data you want to access (to be found on DBS) + +#dbs_url = http://cmsdbsprod.cern.ch/cms_dbs_ph_analysis_01/servlet/DBSServlet + +#datasetpath=/Neutrino_Pt_2to20_gun/Fall11-PU_S6-START44_V5-v1/GEN-SIM-RECO +#datasetpath=/Neutrino_Pt_2to20_gun/Fall11-PU_S6-START44_V5-v1/AODSIM +datasetpath=/Neutrino_Pt_2to20_gun/Fall11-Reprocess_50ns_PoissonOOTPU_START44_V5-v1/GEN-SIM-RECO +#datasetpath=/Neutrino_Pt_2to20_gun/Fall11-FlatDist10_2011EarlyData_50ns_PoissonOOT_START44_V5-v1/GEN-SIM-RECO + +pycfg_params= globalTag=START44_V5::All HLTprocess=HLT triggerPaths=HLT_*,L1_ETM30,L1_HTT100,L1_SingleJet52,L1_SingleJet92 triggerLabels=All,L1ETM30,L1HTT100,L1SingleJet52,L1SingleJet92 negateFlags=0,0,0,0,0 + +pset=Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py + + +total_number_of_events=-1 +events_per_job = 50000 +#events_per_job = 120000 + +### The output files (comma separated list) +#output_file = + +[USER] + +### OUTPUT files Management +## output back into UI +return_data = 1 + +### To use a specific name of UI directory where CRAB will create job to submit (with full path). +### the default directory will be "crab_0_data_time" +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcverticestriggerbias_neutrino_pu-s6_44x_fall11_L1selection_v1 +#ui_working_dir = /afs/cern.ch/cms/tracking/output/mcverticestriggerbias_neutrino_pu-s6_44x_fall11_aod_L1selection_v1 +ui_working_dir = /afs/cern.ch/cms/tracking/output/mcverticestriggerbias_neutrino_largepileup_44x_fall11_L1selection_v1 + +### To specify the UI directory where to store the CMS executable output +### FULL path is mandatory. Default is /res will be used. +#outputdir= /full/path/yourOutDir + +### To specify the UI directory where to store the stderr, stdout and .BrokerInfo of submitted jobs +### FULL path is mandatory. Default is /res will be used. +#logdir= /full/path/yourLogDir + +### OUTPUT files INTO A SE +copy_data = 0 + +### if you want to copy data in a "official CMS site" +### you have to specify the name as written in +#storage_element = T2_IT_Bari +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = name_directory_you_want + +### if you want to copy your data at CAF +#storage_element = T2_CH_CAF +### the user_remote_dir will be created under the SE mountpoint +### in the case of publication this directory is not considered +#user_remote_dir = express_2010_132421 + +### if you want to copy your data to your area in castor at cern +### or in a "not official CMS site" you have to specify the complete name of SE +storage_element=srm-cms.cern.ch +### this directory is the mountpoin of SE +#storage_path=/srm/managerv2?SFN=/castor/cern.ch +storage_path=/castor/cern.ch +### directory or tree of directory under the mounpoint +#user_remote_dir = /user/v/venturia/skims/express_2010_132421_132422_3 + + +### To publish produced output in a local istance of DBS set publish_data = 1 +publish_data=0 +### Specify the dataset name. The full path will be //USER +publish_data_name = name_you_prefer +### Specify the URL of DBS istance where CRAB has to publish the output files +#dbs_url_for_publication = https://cmsdbsprod.cern.ch:8443/cms_dbs_caf_analysis_01_writer/servlet/DBSServlet + +### To specify additional files to be put in InputSandBox +### write the full path if the files are not in the current directory +### (wildcard * are allowed): comma separated list +#additional_input_files = file1, file2, /full/path/file3 + +#if server +#thresholdLevel = 100 +#eMail = your@Email.address + +[CAF] + +queue=cmscaf1nd + +[GRID] +# +## RB/WMS management: +rb = CERN + +## Black and White Lists management: +## By Storage +se_black_list = T0,T1 +#se_black_list = T0 +#se_white_list = + +## By ComputingElement +#ce_black_list = +#ce_white_list = + +[CONDORG] + +# Set this to condor to override the batchsystem defined in gridcat. +#batchsystem = condor + +# Specify addition condor_g requirments +# use this requirment to run on a cms dedicated hardare +# globus_rsl = (condor_submit=(requirements 'ClusterName == \"CMS\" && (Arch == \"INTEL\" || Arch == \"X86_64\")')) +# use this requirement to run on the new hardware +#globus_rsl = (condor_submit=(requirements 'regexp(\"cms-*\",Machine)')) + diff --git a/Validation/RecoVertex/test/mcverticesPlots.C b/Validation/RecoVertex/test/mcverticesPlots.C new file mode 100644 index 0000000000000..9ce3a03602b7f --- /dev/null +++ b/Validation/RecoVertex/test/mcverticesPlots.C @@ -0,0 +1,70 @@ +#include "TFile.h" +#include "TProfile.h" +#include "TDirectory.h" +#include "TLegend.h" +#include "TLine.h" + +void recovsmcdraw(TFile* _file0, const char* dir, const char* label, const int color, TLegend* leg, const bool isFirst) { + + TProfile* prof=0; + if(_file0->cd(dir)) { + prof = (TProfile*)gDirectory->Get("recovsmcnvtxprof"); + if(prof) { + prof->SetMarkerStyle(20); + prof->SetMarkerColor(color); + prof->SetLineColor(color); + if(isFirst) {prof->Draw();} else {prof->Draw("same");} + prof->GetXaxis()->SetRangeUser(-0.5,30.5); + if(leg) { + leg->AddEntry(prof,label,"p"); + } + } + } + +} + +void recovsmcalgoplot(TFile* _file0, const char* dir, const char* name, const double offset) +{ + + char dir1[300]; + char dir2[300]; + char dir3[300]; + + sprintf(dir1,"%sanalyzer",dir); + sprintf(dir2,"%sD0s51mm",dir); + sprintf(dir3,"%sDA100um",dir); + + TLegend leg(.4,.2,.6,.4,name); + + recovsmcdraw(_file0,dir3,"DA 100um",kRed,&leg,true); + recovsmcdraw(_file0,dir1,"2010 reco",kBlack,&leg,false); + recovsmcdraw(_file0,dir2,"gap=1mm, d0 sig=5",kBlue,&leg,false); + + TLine ll(0,offset,30,offset+30*0.7); + ll.DrawClone(); + leg.AddEntry(&ll,"70% efficiency","l"); + leg.DrawClone(); +} + +void recovsmcplot(TFile* _file0, const char* dir, const char* name, const double offset) +{ + + char dir1[300]; + char dir2[300]; + char dir3[300]; + + sprintf(dir1,"%s",dir); + sprintf(dir2,"weighted%s",dir); + sprintf(dir3,"weighted45mm%s",dir); + + TLegend leg(.4,.2,.6,.4,name); + + recovsmcdraw(_file0,dir1,"sigmaZ=6.26cm",kBlack,&leg,true); + recovsmcdraw(_file0,dir2,"sigmaZ=5.20cm",kBlue,&leg,false); + recovsmcdraw(_file0,dir3,"sigmaZ=4.50cm",kRed,&leg,false); + + TLine ll(0,offset,30,offset+30*0.7); + ll.DrawClone(); + leg.AddEntry(&ll,"70% efficiency","l"); + leg.DrawClone(); +} diff --git a/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py new file mode 100644 index 0000000000000..248e7403a5685 --- /dev/null +++ b/Validation/RecoVertex/test/mcverticesanalyzer_cfg.py @@ -0,0 +1,176 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +process = cms.Process("MCvertices") + +#prepare options + +options = VarParsing.VarParsing("analysis") + +options.register ('globalTag', + "DONOTEXIST::All", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "GlobalTag") +#options.globalTag = "DONOTEXIST::All" + +options.parseArguments() + +# +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), + fileMode = cms.untracked.string("FULLMERGE") + ) + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.threshold = cms.untracked.string("INFO") +process.MessageLogger.cout.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cout.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(10000) + ) + +process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") +process.MessageLogger.cerr.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(100000) + ) + +#----Remove too verbose PrimaryVertexProducer + +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptive") +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptiveNoBS") + +#----Remove too verbose BeamSpotOnlineProducer + +process.MessageLogger.suppressInfo.append("testBeamSpot") +process.MessageLogger.suppressInfo.append("onlineBeamSpot") +process.MessageLogger.suppressWarning.append("testBeamSpot") +process.MessageLogger.suppressWarning.append("onlineBeamSpot") + +#----Remove too verbose TrackRefitter + +process.MessageLogger.suppressInfo.append("newTracksFromV0") +process.MessageLogger.suppressInfo.append("newTracksFromOtobV0") + + +#------------------------------------------------------------------ + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(), +# skipBadFiles = cms.untracked.bool(True), + inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") + ) + + +process.source.fileNames = cms.untracked.vstring(options.inputFiles) + +#process.load("Validation.RecoVertex.pvRecoSequence_cff") +process.load("Validation.RecoVertex.pvSelectionSequence_cff") + +#process.load("Validation.RecoVertex.mcvertexweight_cfi") +process.load("Validation.RecoVertex.mcverticesanalyzer_cfi") +process.load("Validation.RecoVertex.mcvsrecoverticesanalyzer_cfi") + +#process.mcvertexweight45mm = process.mcvertexweight.clone() +#process.mcvertexweight45mm.weighterConfig.finalSigma = cms.double(4.5) + +process.mcvsreconofakeverticesanalyzer = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("noFakeVertices")) +process.mcvsrecogoodverticesanalyzer = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVertices")) + +process.mcvsrecoverticesanalyzervisible = process.mcvsrecoverticesanalyzer.clone(useVisibleVertices = cms.bool(True)) +process.mcvsreconofakeverticesanalyzervisible = process.mcvsreconofakeverticesanalyzer.clone(useVisibleVertices = cms.bool(True)) +process.mcvsrecogoodverticesanalyzervisible = process.mcvsrecogoodverticesanalyzer.clone(useVisibleVertices = cms.bool(True)) +#process.mcvsrecogoodverticesD0s5 = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVerticesD0s5")) +#process.mcvsrecogoodverticesD0s51mm = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVerticesD0s51mm")) +#process.mcvsrecogoodverticesDA100um = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVerticesDA100um")) +#process.mcvsrecogoodverticesDA100umV7 = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVerticesDA100umV7")) +#process.mcvsrecogoodverticesDA100umV8 = process.mcvsrecoverticesanalyzer.clone(pvCollection = cms.InputTag("goodVerticesDA100umV8")) + + +#process.weightedmcverticesanalyzer = process.mcverticesanalyzer.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecoverticesanalyzer = process.mcvsrecoverticesanalyzer.clone(useWeight = cms.bool(True)) +#process.weightedmcvsreconofakeverticesanalyzer = process.mcvsreconofakeverticesanalyzer.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesanalyzer = process.mcvsrecogoodverticesanalyzer.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesD0s5 = process.mcvsrecogoodverticesD0s5.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesD0s51mm = process.mcvsrecogoodverticesD0s51mm.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesDA100um = process.mcvsrecogoodverticesDA100um.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesDA100umV7 = process.mcvsrecogoodverticesDA100umV7.clone(useWeight = cms.bool(True)) +#process.weightedmcvsrecogoodverticesDA100umV8 = process.mcvsrecogoodverticesDA100umV8.clone(useWeight = cms.bool(True)) + + +#process.weighted45mmmcverticesanalyzer = process.mcverticesanalyzer.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecoverticesanalyzer = process.mcvsrecoverticesanalyzer.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsreconofakeverticesanalyzer = process.mcvsreconofakeverticesanalyzer.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesanalyzer = process.mcvsrecogoodverticesanalyzer.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesD0s5 = process.mcvsrecogoodverticesD0s5.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesD0s51mm = process.mcvsrecogoodverticesD0s51mm.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesDA100um = process.mcvsrecogoodverticesDA100um.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesDA100umV7 = process.mcvsrecogoodverticesDA100umV7.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) +#process.weighted45mmmcvsrecogoodverticesDA100umV8 = process.mcvsrecogoodverticesDA100umV8.clone(useWeight = cms.bool(True), weightProduct=cms.InputTag("mcvertexweight45mm")) + +process.load("Validation.RecoVertex.anotherprimaryvertexanalyzer_cfi") + +process.primaryvertexanalyzer.vHistogramMakerPSet.runHisto=cms.untracked.bool(False) +process.primaryvertexanalyzer.vHistogramMakerPSet.histoParameters = cms.untracked.PSet( + nBinX = cms.untracked.uint32(2000), xMin=cms.untracked.double(-0.5), xMax=cms.untracked.double(0.5), + nBinY = cms.untracked.uint32(2000), yMin=cms.untracked.double(-0.5), yMax=cms.untracked.double(0.5), + nBinZ = cms.untracked.uint32(300), zMin=cms.untracked.double(-30.), zMax=cms.untracked.double(30.) + ) + +process.pvnofakevertices = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("noFakeVertices")) +process.pvgoodvertices = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVertices")) +#process.pvgoodverticesD0s5 = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVerticesD0s5")) +#process.pvgoodverticesD0s51mm = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVerticesD0s51mm")) +#process.pvgoodverticesDA100um = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVerticesDA100um")) +#process.pvgoodverticesDA100umV7 = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVerticesDA100umV7")) +#process.pvgoodverticesDA100umV8 = process.primaryvertexanalyzer.clone(pvCollection=cms.InputTag("goodVerticesDA100umV8")) + + +process.p626 = cms.Path( +# process.seqPVReco + + process.seqSimplePVSelection + + process.mcverticesanalyzer + + process.mcvsrecoverticesanalyzer + process.mcvsreconofakeverticesanalyzer + process.mcvsrecogoodverticesanalyzer + + process.mcvsrecoverticesanalyzervisible + process.mcvsreconofakeverticesanalyzervisible + process.mcvsrecogoodverticesanalyzervisible +# + process.mcvsrecogoodverticesD0s5 +process.mcvsrecogoodverticesD0s51mm + +# process.mcvsrecogoodverticesDA100um +process.mcvsrecogoodverticesDA100umV7 +process.mcvsrecogoodverticesDA100umV8 + + + process.pvnofakevertices + process.pvgoodvertices +# + process.pvgoodverticesD0s5 + process.pvgoodverticesD0s51mm +# + process.pvgoodverticesDA100um + process.pvgoodverticesDA100umV7 + process.pvgoodverticesDA100umV8 + ) + +#process.p520 = cms.Path(process.mcvertexweight+ +# process.seqPVReco + process.seqPVSelection + +# process.weightedmcverticesanalyzer + process.weightedmcvsrecoverticesanalyzer + +# process.weightedmcvsreconofakeverticesanalyzer + process.weightedmcvsrecogoodverticesanalyzer + +# process.weightedmcvsrecogoodverticesD0s5 +process.weightedmcvsrecogoodverticesD0s51mm + +# process.weightedmcvsrecogoodverticesDA100um + process.weightedmcvsrecogoodverticesDA100umV7 + process.weightedmcvsrecogoodverticesDA100umV8 +# ) + +#process.p450 = cms.Path(process.mcvertexweight45mm+ +# process.seqPVReco + process.seqPVSelection + +# process.weighted45mmmcverticesanalyzer + process.weighted45mmmcvsrecoverticesanalyzer + +# process.weighted45mmmcvsreconofakeverticesanalyzer + process.weighted45mmmcvsrecogoodverticesanalyzer + +# process.weighted45mmmcvsrecogoodverticesD0s5 +process.weighted45mmmcvsrecogoodverticesD0s51mm + +# process.weighted45mmmcvsrecogoodverticesDA100um + process.weighted45mmmcvsrecogoodverticesDA100umV7 + process.weighted45mmmcvsrecogoodverticesDA100umV8 +# ) + +#----GlobalTag ------------------------ + +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +process.GlobalTag.globaltag = options.globalTag + + +process.TFileService = cms.Service('TFileService', + fileName = cms.string('mcvertices.root') + ) + diff --git a/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py new file mode 100644 index 0000000000000..a2e52bc0d5529 --- /dev/null +++ b/Validation/RecoVertex/test/mcverticessimpleanalyzer_cfg.py @@ -0,0 +1,92 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +process = cms.Process("MCvertices") + +#prepare options + +options = VarParsing.VarParsing("analysis") + +options.register ('globalTag', + "DONOTEXIST::All", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "GlobalTag") +#options.globalTag = "DONOTEXIST::All" + +options.parseArguments() + +# +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), + fileMode = cms.untracked.string("FULLMERGE") + ) + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.threshold = cms.untracked.string("INFO") +process.MessageLogger.cout.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cout.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(10000) + ) + +process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") +process.MessageLogger.cerr.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(100000) + ) + +#----Remove too verbose PrimaryVertexProducer + +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptive") +process.MessageLogger.suppressInfo.append("pixelVerticesAdaptiveNoBS") + +#----Remove too verbose BeamSpotOnlineProducer + +process.MessageLogger.suppressInfo.append("testBeamSpot") +process.MessageLogger.suppressInfo.append("onlineBeamSpot") +process.MessageLogger.suppressWarning.append("testBeamSpot") +process.MessageLogger.suppressWarning.append("onlineBeamSpot") + +#----Remove too verbose TrackRefitter + +process.MessageLogger.suppressInfo.append("newTracksFromV0") +process.MessageLogger.suppressInfo.append("newTracksFromOtobV0") + + +#------------------------------------------------------------------ + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(), + +# skipBadFiles = cms.untracked.bool(True), + inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") + ) + + +process.source.fileNames = cms.untracked.vstring(options.inputFiles) + + +process.load("Validation.RecoVertex.mcverticesanalyzer_cfi") + + +process.p626 = cms.Path(process.mcverticesanalyzer) + +#----GlobalTag ------------------------ + +#process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +#process.GlobalTag.globaltag = options.globalTag + + +process.TFileService = cms.Service('TFileService', + fileName = cms.string('mcvertices.root') + ) + diff --git a/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py b/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py new file mode 100644 index 0000000000000..600fc57b20e1d --- /dev/null +++ b/Validation/RecoVertex/test/mcverticestriggerbiasanalyzer_cfg.py @@ -0,0 +1,121 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet + +process = cms.Process("MCverticesTriggerBias") + +#prepare options + +options = VarParsing.VarParsing("analysis") + +options.register ('globalTag', + "DONOTEXIST::All", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "GlobalTag") +options.register ('HLTprocess', + "HLT", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "HLTProcess") +options.register ('L1Collection', + "gtDigis", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "L1DigiCollection") +options.register ('triggerPaths', + "", + VarParsing.VarParsing.multiplicity.list, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "list of HLT paths") +options.register ('triggerLabels', + "", + VarParsing.VarParsing.multiplicity.list, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "list of labels") +options.register ('negateFlags', + "", + VarParsing.VarParsing.multiplicity.list, # singleton or list + VarParsing.VarParsing.varType.int, # string, int, or float + "list of flags to negate HLT selection") + +options.parseArguments() + +# +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), + fileMode = cms.untracked.string("FULLMERGE") + ) + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.MessageLogger.cout.placeholder = cms.untracked.bool(False) +process.MessageLogger.cout.threshold = cms.untracked.string("INFO") +process.MessageLogger.cout.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cout.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(10000) + ) + +process.MessageLogger.cerr.placeholder = cms.untracked.bool(False) +process.MessageLogger.cerr.threshold = cms.untracked.string("WARNING") +process.MessageLogger.cerr.default = cms.untracked.PSet( + limit = cms.untracked.int32(10000000) + ) +process.MessageLogger.cerr.FwkReport = cms.untracked.PSet( + reportEvery = cms.untracked.int32(100000) + ) + +#------------------------------------------------------------------ + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(), + +# skipBadFiles = cms.untracked.bool(True), + inputCommands = cms.untracked.vstring("keep *", "drop *_MEtoEDMConverter_*_*") + ) + + +process.source.fileNames = cms.untracked.vstring(options.inputFiles) + +#--------------------------------------------------------------------------------------------------- +# Trigger Selection + +from HLTrigger.HLTfilters.triggerResultsFilter_cfi import * +process.hltSelection = triggerResultsFilter.clone( + triggerConditions = cms.vstring("HLT_*"), + hltResults = cms.InputTag( "TriggerResults", "", options.HLTprocess ), + l1tResults = cms.InputTag( options.L1Collection ), + throw = cms.bool(False) + ) + +#--------------------------------------------------------------------------------------------------- + +process.load("Validation.RecoVertex.mcverticesanalyzer_cfi") + + +process.seqComplete= cms.Sequence(process.hltSelection + process.mcverticesanalyzer) + +for label, trigger,negate in zip(options.triggerLabels,options.triggerPaths,options.negateFlags): + cloneProcessingSnippet(process,process.seqComplete,label) + getattr(process,"hltSelection"+label).triggerConditions = cms.vstring(trigger) + + if negate == 1: + tempmodule = getattr(process,"hltSelection"+label) + getattr(process,"seqComplete"+label).replace(getattr(process,"hltSelection"+label),~tempmodule) + + setattr(process,"p"+label,cms.Path(getattr(process,"seqComplete"+label))) + +#----GlobalTag ------------------------ + +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +process.GlobalTag.globaltag = options.globalTag + +process.TFileService = cms.Service('TFileService', + fileName = cms.string('mcverticestriggerbias.root') + ) + diff --git a/Validation/RecoVertex/test/recoVertexModel.C b/Validation/RecoVertex/test/recoVertexModel.C new file mode 100644 index 0000000000000..0cb2b9281e625 --- /dev/null +++ b/Validation/RecoVertex/test/recoVertexModel.C @@ -0,0 +1,35 @@ +#include +#include "TGraph.h" +#include "TMath.h" + +TGraph* recoVertexModel(const double dz, const double sigma, const int npileup, const double eff) { + + TGraph* nrecograph = new TGraph; + + double frac = TMath::Erf(dz/(sigma*sqrt(2))); + + cout << frac << endl; + + for(unsigned int i=0; iSetPoint(nrecograph->GetN(),i,nreco); + + cout << "done" << endl; + + + } + + return nrecograph; + +} diff --git a/Validation/TrackingMCTruth/plugins/TrackingTruthValid.cc b/Validation/TrackingMCTruth/plugins/TrackingTruthValid.cc index f4529e14c97a4..b139cd1a68af1 100644 --- a/Validation/TrackingMCTruth/plugins/TrackingTruthValid.cc +++ b/Validation/TrackingMCTruth/plugins/TrackingTruthValid.cc @@ -89,13 +89,10 @@ void TrackingTruthValid::analyze(const edm::Event& event, const edm::EventSetup& event.getByLabel(src_,TruthTrackContainer ); - // event.getByLabel(src_,TruthVertexContainer); - // std::cout << "Using Collection " << src_ << std::endl; const TrackingParticleCollection *tPC = TruthTrackContainer.product(); - // const TrackingVertexCollection *tVC = TruthVertexContainer.product(); /* @@ -105,7 +102,6 @@ void TrackingTruthValid::analyze(const edm::Event& event, const edm::EventSetup& const edm::HepMCProduct *mcp = hepMC.product(); // const HepMC::GenEvent *genEvent = mcp -> GetEvent(); */ - // cout << "Found " << tPC -> size() << " tracks and " << tVC -> size() << " vertices." < begin(); t != tPC -> end(); ++t) { //if(t -> trackerPSimHit().size() ==0) cout << " Track with 0 SimHit " << endl; - meTPMass->Fill(t->mass()); - meTPCharge->Fill(t->charge() ); - meTPId->Fill(t->pdgId()); - meTPPt->Fill(sqrt(t->momentum().perp2())); - meTPEta->Fill(t->momentum().eta()); - meTPPhi->Fill(t->momentum().Phi()); -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - std::vector trackerPSimHit( t->trackPSimHit(DetId::Tracker) ); -#endif + //#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" + //#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED + // std::vector trackerPSimHit( t->trackPSimHit(DetId::Tracker) ); + //#endif meTPAllHits->Fill(t->numberOfTrackerHits()); //get the process of the first hit -#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" -#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED - if(trackerPSimHit.size() !=0) meTPProc->Fill( trackerPSimHit.front().processType()); -#endif + //#warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended" + //#ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED + // if(trackerPSimHit.size() !=0) meTPProc->Fill( trackerPSimHit.front().processType()); + //#endif + + // there is no more the PSimHits collection !!! how to deal w/ the processType ? + // if(t->numberOfTrackerHits() !=0) meTPProc->Fill( trackerPSimHit.front().processType()); + meTPMatchedHits->Fill(t->numberOfTrackerLayers()); meTPVtxX->Fill(t->vx()); meTPVtxY->Fill(t->vy());