From 799ba61bb36d999161c0b5dfdbad7e368c381b59 Mon Sep 17 00:00:00 2001 From: Shervin Nourbakhsh Date: Mon, 29 Aug 2016 10:27:31 +0200 Subject: [PATCH 001/297] Added way to define standard energy for recHits: now combination of low and high gain --- DataFormats/interface/HGCalTBRecHit.h | 3 +++ DataFormats/src/HGCalTBRecHit.cc | 1 + 2 files changed, 4 insertions(+) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index f38c29c..dee2c2a 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -8,7 +8,10 @@ /** \class HGCalTBRecHit * * \author Jeremy Mans + * + * \todo fix the energy threshold for low gain saturation in a different way: now it's hardcoded */ +#define _lowGainSaturationThreshold 2000 class HGCalTBRecHit : public CaloRecHit { diff --git a/DataFormats/src/HGCalTBRecHit.cc b/DataFormats/src/HGCalTBRecHit.cc index 6a36ab5..6969d55 100644 --- a/DataFormats/src/HGCalTBRecHit.cc +++ b/DataFormats/src/HGCalTBRecHit.cc @@ -14,6 +14,7 @@ HGCalTBRecHit::HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, { ///\todo set the default recHit energy to the highGain values unless saturated + setEnergy( ( energyLow < _lowGainSaturationThreshold ) ? energyLow : energyHigh); } std::ostream& operator<<(std::ostream& s, const HGCalTBRecHit& hit) From 03a93d6239a951948e06fb3ef8dae4cbdebfad30 Mon Sep 17 00:00:00 2001 From: Shervin Nourbakhsh Date: Mon, 29 Aug 2016 10:58:31 +0200 Subject: [PATCH 002/297] Flags for saturation and default energy set --- DataFormats/interface/HGCalTBRecHit.h | 14 ++++++++++++++ DataFormats/src/HGCalTBRecHit.cc | 11 +++++++++-- Reco/plugins/HGCalTBRecHitProducer.cc | 7 ++++++- Reco/plugins/HGCalTBRecHitProducer.h | 1 + Reco/python/hgcaltbrechitproducer_cfi.py | 1 + 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index dee2c2a..59c7738 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -18,6 +18,13 @@ class HGCalTBRecHit : public CaloRecHit public: typedef DetId key_type; + enum Flags { + kGood = 0, + kHighGainSaturated, + kLowGainSaturated + } + + HGCalTBRecHit(); // by default a recHit is greated with no flag HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC @@ -39,6 +46,13 @@ class HGCalTBRecHit : public CaloRecHit return _energyHigh; }; + // set the flags + void setFlag(int flag) {setFlagField(1, flag, 1);}; // flagBits_|= (0x1 << flag);} + void unsetFlag(int flag) {setFlagField(0, flag, 1);}; //_ &= ~(0x1 << flag);} + + // check if the flag is true + bool checkFlag(int flag) const {return flagField(flag, 1);}; //flagBits_ & ( 0x1<("pedestalLow")), _pedestalHigh_filename(cfg.getParameter("pedestalHigh")), _gainsLow_filename(cfg.getParameter("gainLow")), - _gainsHigh_filename(cfg.getParameter("gainHigh")) + _gainsHigh_filename(cfg.getParameter("gainHigh")), + _adcSaturation(cfg.getParameter("adcSaturation")) { produces (outputCollectionName); @@ -66,6 +67,10 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS HGCalTBRecHit recHit(digi.detid(), energyLow, energyHigh, digi[iSample].tdc()); ///\todo use time calibration! + if(digi[iSample].adcHigh() > _adcSaturation) recHit.setFlag(kHighGainSaturated); + if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(kLowGainSaturated); + + #ifdef DEBUG std::cout << recHit << std::endl; #endif diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 1241fe1..504082d 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -40,6 +40,7 @@ class HGCalTBRecHitProducer : public edm::EDProducer edm::EDGetTokenT _digisToken; std::string _pedestalLow_filename, _pedestalHigh_filename; std::string _gainsLow_filename, _gainsHigh_filename; + unsigned int _adcSaturation; }; diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index 520e2e8..9a29eb5 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -9,5 +9,6 @@ # pedestalHigh = cms.string(''), gainLow = cms.string(''), gainHigh = cms.string(''), + adcSaturation = cms.uint32(2000), ) From bdef7d390c18ad239cc7530c4f43b996e742e848 Mon Sep 17 00:00:00 2001 From: Shervin Date: Wed, 21 Sep 2016 14:23:35 +0200 Subject: [PATCH 003/297] New script to rearrange the txt files, modified text source to deal with the input format now all the events are saved in the FEDRAW with the exception of the events with "DANGER" --- RawToDigi/plugins/HGCalTBTextSource.cc | 189 +++++++++++++------------ RawToDigi/plugins/HGCalTBTextSource.h | 45 ++---- scripts/rearrangeTxtFile.awk | 62 ++++++++ scripts/rearrangeTxtFile.sh | 97 +++++++++++++ 4 files changed, 267 insertions(+), 126 deletions(-) create mode 100644 scripts/rearrangeTxtFile.awk create mode 100755 scripts/rearrangeTxtFile.sh diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 45fe615..de59fd4 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -1,89 +1,108 @@ #include +#include #include "HGCal/RawToDigi/plugins/HGCalTBTextSource.h" #include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" #include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" -using namespace std; -unsigned int runcounter = 0; -int runflag = 0; -int trigcountperspillflag = 0; -unsigned int Events_Per_Spill = 0; -unsigned int spillcounter = 0; -unsigned int tmp_event = 0; -//unsigned int Number_Of_Events_Per_Spill = 150; -//unsigned int Number_Of_Spills = 8; -int Number_Of_SKIROC_Data_Words = 64; -int Number_Of_SKIROC_Words = 68; - -string buffer1 = "0 0 0x00000000 0x00000000"; -bool HGCalTBTextSource::readLines() +//#define DEBUG +/** +RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=09 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=12 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=14 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=17 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=18 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=19 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=22 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=23 +T 0x0072D911 0xBEC20B15 T 0x0072D93F 0xBED19F54 T 0x0072D96E 0xBED19F56 T 0x0072D99D 0x3A11F91F T 0x0072D9CC 0x40DACEB1 T 0x0072D9FA 0xC5EAE85C T 0x00000000 0xBED19F52 T 0x00000000 0x57B86176 +0x118F11BD 0x1081108D 0x11A511B7 0x118A108C 0x119311F2 0x119F1195 0x109E109E 0x1083108D 0x118D11F2 0x11FD1198 0x11881195 0x118D1196 0x11911190 0x1193118A 0x1088109F 0x118C118A +*/ + +bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) { - m_lines.clear(); - char buffer[1024]; - int counter = 0; - if(runcounter == 0 && runflag == 0) { - buffer[0] = 0; - fgets(buffer, 1000, m_file); - if(sscanf(buffer, "STARTING SPILL READ AT TIME (1us): %x RUN: %u", &m_time_tmp, &m_run_tmp) != 2 ) return false; - m_run = m_run_tmp; - runflag = 1; + + if (!(fileNames().size())) return false; // need a file... + if (m_file == 0) { + std::string name = fileNames()[0].c_str(); /// \todo FIX in order to take several files + if (name.find("file:") == 0) name = name.substr(5); + m_file = fopen(name.c_str(), "r"); + if (m_file == 0) { + throw cms::Exception("FileNotFound") << "Unable to open file " << name; + } + m_event = 0; } - if(runcounter == EVENTSPERSPILL) { - runcounter = 0; - trigcountperspillflag++; + if (feof(m_file)) return false; + + // read the header + while(readHeader() == false) { + if (feof(m_file)) return false; + // have to skip the data lines and return false + readLines(); } - if(trigcountperspillflag == MAXLAYERS) { - spillcounter++; - trigcountperspillflag = 0; + // now try to read from the file + if (!readLines()) return false; + + id = edm::EventID(m_run, m_spill, m_event); + + time = (edm::TimeValue_t) m_time; + return true; +} + +// sets m_run, m_spill, m_even, m_time +///\todo read the number of boards +bool HGCalTBTextSource::readHeader() +{ + char buffer[1024]; // typically 605 chars + buffer[0] = 0; //init buffer + fgets(buffer, 1000, m_file); // read the header line + std::string b = buffer; +#ifdef DEBUG + std::cout << "------------------------------\n"; + std::cout << b << std::endl; +#endif + if(b.find("DANGER=true") != std::string::npos) return false; +//RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=09 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=12 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=14 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=17 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=18 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=19 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=22 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=23 + + if(sscanf(buffer, "RUN=%u\tSPILL=%u\tEVENT=%u\tGLOBALTIME=%x", &m_run, &m_spill, &m_event, &m_time) != 4) { + return false; // what to do? } - /* - if(runcounter == 0 && trigcountperspillflag == 0){ - buffer[0] = 0; - fgets(buffer, 1000, m_file); - if(sscanf(buffer,"Board header: on FMC-IO 2, trig_count in mem= %u, sk_status = 1",&Events_Per_Spill) !=1 ) return false; - trigcountperspillflag = 1; - if(Events_Per_Spill < 140) return false; - } - */ - -// if( sscanf(buffer, " RUN: %u", &m_run) != 1) return false; -// sscanf(buffer, " RUN:%u", &m_run); -// cout<> data_sk0 >> data_sk1; + + ++board_counter; + //continue for all the boards + + // extra security + m_lines[board_counter].push_back(data_sk0); + m_lines[board_counter].push_back(data_sk1); + if(board_counter > max_boards) max_boards = board_counter; + } + } + +// if(sscanf(buffer, "Event header for event %x with (200ns) timestamp %x", &tmp_event, &m_time) == 2) { + return !m_lines.empty(); } @@ -91,27 +110,19 @@ void HGCalTBTextSource::produce(edm::Event & e) { std::auto_ptr bare_product(new FEDRawDataCollection()); -// cout< skiwords; + std::vector skiwords; // make sure there are an even number of 32-bit-words (a round number of 64 bit words... - if (m_lines.size() % 2) { - skiwords.push_back(0); - skiwords.push_back(0); - } - for (std::vector::const_iterator i = m_lines.begin(); i != m_lines.end(); i++) { - uint32_t a, b, c, d; - sscanf(i->c_str(), "%x %x %x %x", &a, &b, &c, &d); -// cout<> 16)); - skiwords.push_back(uint16_t(d >> 16)); - skiwords.push_back(uint16_t(c)); - skiwords.push_back(uint16_t(d)); + + for (unsigned int i_board = 0 ; i_board < max_boards; ++i_board) { + auto board = m_lines[i_board]; + for (auto skiword : board) { + skiwords.push_back(skiword); + } } FEDRawData& fed = bare_product->FEDData(m_sourceId); - size_t len = sizeof(uint16_t) * skiwords.size(); -// cout<("nSpills", 6)) + m_file(0) { m_sourceId = pset.getUntrackedParameter("fed", 1000); /// \todo check and read from file? @@ -40,42 +39,14 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - virtual bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&) - { - - if (!(fileNames().size())) return false; // need a file... - if (m_file == 0) { - std::string name = fileNames()[0].c_str(); /// \todo FIX in order to take several files - if (name.find("file:") == 0) name = name.substr(5); - m_file = fopen(name.c_str(), "r"); - if (m_file == 0) { - throw cms::Exception("FileNotFound") << "Unable to open file " << name; - } - m_event = 0; - } - if (feof(m_file)) return false; - if (!readLines()) return false; - - m_event++; /// \todo get eventID from file? - id = edm::EventID(m_run, 1, m_event); - /* - // time is a hack - edm::TimeValue_t present_time = presentTime(); ///\todo take time from file? how to define the time? - unsigned long time_between_events = timeBetweenEvents(); - - time = present_time + time_between_events; - */ - - time = (edm::TimeValue_t) m_time; - return true; - } + bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); - bool readLines(); + bool readHeader(void); + bool readLines(void); - std::vector m_lines; + std::array< std::vector < unsigned int> , MAX_LAYERS> m_lines; FILE* m_file; - unsigned int m_time, m_time_tmp, m_run_tmp; - int m_event, m_run; - unsigned int m_nSpills; + unsigned int m_time; + unsigned int m_event, m_run, m_spill, max_boards; int m_sourceId; }; diff --git a/scripts/rearrangeTxtFile.awk b/scripts/rearrangeTxtFile.awk new file mode 100644 index 0000000..b51fe1c --- /dev/null +++ b/scripts/rearrangeTxtFile.awk @@ -0,0 +1,62 @@ +# directory structure: +# RUN/EVENT/BOARD +BEGIN{ + + +} + +#STARTING SPILL READ AT TIME (1us): 0x01EE8310 RUN: 878 EVENT: 400 +(/STARTING SPILL/){ + spillID+=1 + spillTime=$7 + run=$9 +# print "[DEBUG SPILL]", spillID, spillTime, run + dir=sprintf("%s/RUN_%06d", baseDir, run) + system("mkdir -p "dir) +} + +#Board header: on FMC-IO 9, trig_count in mem= 396, sk_status = 1 +(/Board header/){ + boardID=$5 + gsub(",", "", boardID) + + triggerCount=$9 + gsub(",", "", triggerCount) + + skiStatus=$12 +# print "[DEBUG]", boardID, triggerCount, skiStatus +} + +#Event header for event 0 with (200ns) timestamp 0xBEC20B15 global tts(us) 0x0072D911 and CKOV= 0 +#DANGER: stale event warning! +(/Event header/){ + if(match($0, "DANGER")){ + eventID=$9 + eventTime=$13 + triggerTime=$16 + DANGER="true" + }else{ + eventID=$5 + eventTime=$9 + triggerTime=$12 + DANGER="false" + } + eventID++ # cannot start at 0 + + #print "[DEBUG EVENT HEADER]", eventID, eventTime, triggerTime + file=sprintf("SPILL_%02d-EVENT_%06d-BOARD_%02d.txt", spillID, eventID, boardID) + printf("RUN=%06d\tSPILL=%02d\tEVENT=%06d\tGLOBALTIME=%s\tBOARD=%02d\tDANGER=%s\n", run, spillID, eventID, spillTime, boardID, DANGER) >> dir"/"file + print triggerTime, eventTime >> dir"/"file +} + +(NF==4){ + sk0=$3 + sk1=$4 + print sk0, sk1 >> dir"/"file + +} + +END{ +# print spillID + +} diff --git a/scripts/rearrangeTxtFile.sh b/scripts/rearrangeTxtFile.sh new file mode 100755 index 0000000..53b902d --- /dev/null +++ b/scripts/rearrangeTxtFile.sh @@ -0,0 +1,97 @@ +#!/bin/bash +file=$1 +dir=tmp +outDir=tmpOut + +#STARTING SPILL READ AT TIME (1us): 0x01EE8310 RUN: 878 EVENT: 400 +#Board header: on FMC-IO 9, trig_count in mem= 400, sk_status = 1 +#Event header for event 0 with (200ns) timestamp 0x51FABA20 global tts(us) 0x00AA8338 and CKOV= 0 + +#EVENT: run spill readtime nfmcio +#eventtime0 globaltts0 eventtime1 globaltts1 +#sk0.0 sk0.1 sk1.0 sk1.1 etc + + +echo ${file} +if [ -e "${dir}" ];then + rm ${dir} -Rf +fi + +mkdir ${dir} +if [ -e "${outDir}" ];then + rm ${outDir} -Rf +fi +mkdir ${outDir} + + +rm $dir/* -Rf +awk -v baseDir=${dir} -f scripts/rearrangeTxtFile.awk $file + + +IFS=$'\n' +for run in $dir/RUN_* +do + boards=`ls $run/*.txt | sed 's|.*-BOARD_||;s|.txt||' | sort | uniq` + spills=`ls $run/*.txt | sed 's|-BOARD_.*||' | sort | uniq | sed 's|.*SPILL_||;s|-EVENT_| |'` + run=`basename $run | sed 's|RUN_||'` + + mkdir -p $outDir/RUN_${run} + + for spillevent in $spills + do + spill=`echo $spillevent | cut -d ' ' -f 1` + event=`echo $spillevent | cut -d ' ' -f 2` +# echo $spill " -- " $event + paste $dir/RUN_${run}/SPILL_${spill}-EVENT_${event}-BOARD_* | sed -e 's|[[:space:]]RUN.*BOARD{,1}|\tBOARD|g' > $outDir/RUN_${run}/SPILL_${spill}-EVENT_${event}.txt + done + cat $outDir/RUN_${run}/SPILL_*-EVENT_*.txt > $outDir/RUN_$run.txt +# cat $dir/RUN_${run}/SPILL_*-EVENT_*-BOARD_*.txt > $outDir/RUN_$run.txt + +done + + + +exit 0 +cat $dir/RUN_*/SPILL_*-EVENT_*-BOARD_*.txt > $outDir/RUN_ +# take the list of spills and create the subdirs +run_fills=`grep STARTING $file | awk '{print $7, $9}'` +# take the list of boards and create the subdirs +echo "[INFO] Now reordering files" + + +IFS=$'\n' +for run_fill in ${run_fills} +do + let spillID=$spillID+1 + run=`echo $run_fill | awk '{print $2}'` + spill=`echo ${run_fill} | awk '{print $1}'` + + dir=tmp/$spillID-$spill/ + events=`ls -1 ${dir}/* | sort -n | uniq | grep dat | sed 's|.dat||'` + boards=`ls -1 tmp/*/ |grep -v tmp | sort -n | uniq | sed '/^$/ d'` + echo "Spill: $spill" + for event in ${events} + do + for board in ${boards} + do + f=${dir}/$board/$event.dat + if [ ! -e "$f" ];then continue; fi + cat $f >> ${outDir}/$spillID-$event.dat + done + cat ${outDir}/${spillID}-${event}.dat >> ${outDir}/${spillID}.dat + done + +done + + +# IFS=$'\n' + +# if [ ! -d "${dir}/${run}/${board}" ];then +# mkdir ${dir}/${run}/${boardID}-${board} -p +# fi + +# done + + + + From 66194bb46852fd8beb40ae9caf615835289ec8f8 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Thu, 29 Sep 2016 04:49:24 +0200 Subject: [PATCH 004/297] Unpacker modified to not push any event when Danger found in the header Conflicts: RawToDigi/plugins/HGCalTBTextSource.cc --- Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc index 66e9182..7aac108 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc @@ -209,7 +209,7 @@ RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const ed // double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); // Cell_counter++; // Average_Pedestal_Per_Event_Full += RecHit1.energyHigh(); -// if(RecHit1.energyHigh() > 100) continue; + if(RecHit1.energyHigh() > 32.) continue; if((RecHit1.id()).cellType() == 0) { // Full_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); Cell_counter[(RecHit1.id()).layer() - 1]++; @@ -245,7 +245,7 @@ RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const ed } for(auto RecHit : *Rechits) { -// if(RecHit.energyHigh() > 100) continue; +// if(RecHit.energyHigh() > 32.) continue; if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); // double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; From 71617adc522b9b3bc47a9fda692599230c00961f Mon Sep 17 00:00:00 2001 From: Shervin Date: Mon, 3 Oct 2016 10:40:29 +0200 Subject: [PATCH 005/297] temp modifications --- scripts/rearrangeTxtFile.awk | 13 ++++++++++++- test_cfg.py | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/scripts/rearrangeTxtFile.awk b/scripts/rearrangeTxtFile.awk index b51fe1c..59c57ca 100644 --- a/scripts/rearrangeTxtFile.awk +++ b/scripts/rearrangeTxtFile.awk @@ -30,6 +30,7 @@ BEGIN{ #Event header for event 0 with (200ns) timestamp 0xBEC20B15 global tts(us) 0x0072D911 and CKOV= 0 #DANGER: stale event warning! (/Event header/){ + T_old=strtonum(triggerTime) if(match($0, "DANGER")){ eventID=$9 eventTime=$13 @@ -41,8 +42,18 @@ BEGIN{ triggerTime=$12 DANGER="false" } + if(eventID==0){ + T_old=strtonum(triggerTime) + } eventID++ # cannot start at 0 - + T=strtonum(triggerTime) + + if(T-T_old> 50000){ + print spillID, eventID, T, T_old, T-T_old, ntriggers + ntriggers=0 + }else{ + ntriggers+=1 + } #print "[DEBUG EVENT HEADER]", eventID, eventTime, triggerTime file=sprintf("SPILL_%02d-EVENT_%06d-BOARD_%02d.txt", spillID, eventID, boardID) printf("RUN=%06d\tSPILL=%02d\tEVENT=%06d\tGLOBALTIME=%s\tBOARD=%02d\tDANGER=%s\n", run, spillID, eventID, spillTime, boardID, DANGER) >> dir"/"file diff --git a/test_cfg.py b/test_cfg.py index caf41e7..f1084a9 100644 --- a/test_cfg.py +++ b/test_cfg.py @@ -101,6 +101,12 @@ +#process.MessageLogger.cerr.FwkReport.reportEvery = 1 +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), +# SkipEvent = cms.untracked.vstring('ProductNotFound'), +) + ###### process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) @@ -130,6 +136,7 @@ #process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) +process.shervin = cms.Path() ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) @@ -155,3 +162,4 @@ process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) process.end = cms.EndPath(process.output) +process.schedule = cms.Schedule(process.shervin, process.end) From 1d305894a32d667ce8c4ab6d8ac78e8e1cf89b88 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sun, 2 Oct 2016 02:32:18 +0200 Subject: [PATCH 006/297] Put correct HGCalTBRawToDigi to deal with new TextSource --- RawToDigi/plugins/HGCalTBRawToDigi.cc | 106 +++++-------------------- RawToDigi/plugins/HGCalTBRawToDigi.h | 2 +- RawToDigi/plugins/HGCalTBTextSource.cc | 8 +- test_cfg.py | 6 +- 4 files changed, 32 insertions(+), 90 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBRawToDigi.cc b/RawToDigi/plugins/HGCalTBRawToDigi.cc index dc88e61..c995dfb 100644 --- a/RawToDigi/plugins/HGCalTBRawToDigi.cc +++ b/RawToDigi/plugins/HGCalTBRawToDigi.cc @@ -5,7 +5,6 @@ using namespace std; unsigned int gray_to_binary (unsigned int gray); -int counter = 0; HGCalTBRawToDigi::HGCalTBRawToDigi(edm::ParameterSet const& conf): dataTag_(conf.getParameter("InputLabel")), fedId_(conf.getUntrackedParameter("fedId")), @@ -36,8 +35,6 @@ void HGCalTBRawToDigi::produce(edm::Event& e, const edm::EventSetup& c) // const FEDRawData& fed = rawraw->FEDData(fedId_); if (fed.size() != 0) { /// \todo Exception if 0???? - int ski_up = 2; - int ski_down = 1; // we can figure out the number of samples from the size of the raw data int nsamples = fed.size() / (sizeof(uint16_t) * SKIROC::NCHANNELS * 2); // 2 is for ADC and TDC digis = std::auto_ptr(new SKIROC2DigiCollection(nsamples)); @@ -50,96 +47,37 @@ void HGCalTBRawToDigi::produce(edm::Event& e, const edm::EventSetup& c) ptr--; // now we are pointing at a relatively-useless header word ptr--; // now we are pointing at the first TDC word */ - counter++; - if(counter > EVENTSPERSPILL) { - ski_up = 4; - ski_down = 3; - } - if(counter > EVENTSPERSPILL * 2 ) { - ski_up = 6; - ski_down = 5; - } - if(counter > EVENTSPERSPILL * 3) { - ski_up = 8; - ski_down = 7; - } - if(counter > EVENTSPERSPILL * 4) { - ski_up = 10; - ski_down = 9; - } - if(counter > EVENTSPERSPILL * 5) { - ski_up = 12; - ski_down = 11; - } - if(counter > EVENTSPERSPILL * 6) { - ski_up = 14; - ski_down = 13; - } - if(counter > EVENTSPERSPILL * 7) { - ski_up = 16; - ski_down = 15; - } - if(counter > EVENTSPERSPILL * 8 ) { - ski_up = 18; - ski_down = 17; - } - if(counter > EVENTSPERSPILL * 9) { - ski_up = 20; - ski_down = 19; - } - if(counter > EVENTSPERSPILL * 10) { - ski_up = 22; - ski_down = 21; - } - if(counter > EVENTSPERSPILL * 11 ) { - ski_up = 24; - ski_down = 23; - } - if(counter > EVENTSPERSPILL * 12) { - ski_up = 26; - ski_down = 25; - } - if(counter > EVENTSPERSPILL * 13) { - ski_up = 28; - ski_down = 27; - } - if(counter > EVENTSPERSPILL * 14) { - ski_up = 30; - ski_down = 29; - } - if(counter > EVENTSPERSPILL * 15) { - ski_up = 32; - ski_down = 31; - } - - if(counter == EVENTSPERSPILL * MAXLAYERS) counter = 0; -// for (int ski = 2; ski >= 1; ski--) { for (int ichan = 0; ichan < SKIROC::NCHANNELS; ichan++) { - for (int ski = ski_down; ski <= ski_up; ski++) { + for (int ski = MAXSKIROCS; ski >= 0; ski--) { HGCalTBElectronicsId eid(ski, ichan); if (!essource_.emap_.existsEId(eid.rawId())) { // std::cout << "We do not have a mapping for " << eid; } else { HGCalTBDetId did = essource_.emap_.eid2detId(eid); digis->addDataFrame(did); - if(ski <= 32) { - int ptradc1 = ptr - ichan * 2 - (ski - ski_down); - int ptradc2 = ptr - ichan * 2 - (ski - ski_down) - 128; - digis->backDataFrame().setSample(0, gray_to_binary(pdata[ptradc1] & 0xFFF), gray_to_binary( pdata[ptradc2] & 0xFFF), 0); -// cout<backDataFrame().setSample(0, gray_to_binary(pdata[ptradc1] & 0xFFF),gray_to_binary( pdata[ptradc2] & 0xFFF),0); - - } - */ - + else{ + if((ichan % 2) == 0){ + ptradc1 = ptr - (ichan*2 + 2) - (((MAXSKIROCS - ski)/2)*(4*SKIROC::NCHANNELS)); + ptradc2 = ptr - (ichan*2 + 2) - (((MAXSKIROCS - ski)/2)*(4*SKIROC::NCHANNELS)) - (2*SKIROC::NCHANNELS); + } + else{ + ptradc1 = ptr - (ichan*2 + 1) - (((MAXSKIROCS - ski)/2)*(4*SKIROC::NCHANNELS)); + ptradc2 = ptr - (ichan*2 + 1) - (((MAXSKIROCS - ski)/2)*(4*SKIROC::NCHANNELS)) - (2*SKIROC::NCHANNELS); + } + } + digis->backDataFrame().setSample(0, gray_to_binary(pdata[ptradc1] & 0xFFF), gray_to_binary( pdata[ptradc2] & 0xFFF), 0); +// cout< 64) continue; while( buffer.peek() != EOF) { //buffer.good() gives compilation errors // read the data of the two skirocs of one board - buffer >> data_sk0 >> data_sk1; + buffer >> data_sk1 >> data_sk0; ++board_counter; //continue for all the boards @@ -111,18 +112,19 @@ void HGCalTBTextSource::produce(edm::Event & e) std::auto_ptr bare_product(new FEDRawDataCollection()); // here we parse the data - std::vector skiwords; + std::vector skiwords; // make sure there are an even number of 32-bit-words (a round number of 64 bit words... for (unsigned int i_board = 0 ; i_board < max_boards; ++i_board) { auto board = m_lines[i_board]; for (auto skiword : board) { + skiwords.push_back(skiword >> 16); skiwords.push_back(skiword); } } FEDRawData& fed = bare_product->FEDData(m_sourceId); - size_t len = sizeof(uint32_t) * skiwords.size(); + size_t len = sizeof(uint16_t) * skiwords.size(); fed.resize(len); memcpy(fed.data(), &(skiwords[0]), len); diff --git a/test_cfg.py b/test_cfg.py index f1084a9..4e4623d 100644 --- a/test_cfg.py +++ b/test_cfg.py @@ -6,7 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '/afs/cern.ch/work/r/rslu/public/HGC_TB_data_Sep2016/', + '/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -155,7 +155,9 @@ if (options.chainSequence == 1): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) +# process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) + process.p =cms.Path(process.hgcaltbdigis) + # process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter) elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): From 07de66ae1ccb51283d9083b81a282d0c8adbabbb Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sun, 2 Oct 2016 02:35:16 +0200 Subject: [PATCH 007/297] Put correct HGCalTBRawToDigi to deal with new TextSource, and TextSource in SKIROC data format --- RawToDigi/plugins/HGCalTBTextSource.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 33385e8..380ea8a 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -87,7 +87,7 @@ bool HGCalTBTextSource::readLines() std::string b = buff; std::istringstream buffer(b); unsigned int board_counter = 0; - if(i < 1 && i > 64) continue; + if(i < 1 && i > 64) continue;// Only these are data words, the rest dont interest us for now while( buffer.peek() != EOF) { //buffer.good() gives compilation errors // read the data of the two skirocs of one board buffer >> data_sk1 >> data_sk0; From 770c826512d0a33011ea9f41a8fec5512652cb47 Mon Sep 17 00:00:00 2001 From: Shervin Date: Tue, 4 Oct 2016 17:03:07 +0200 Subject: [PATCH 008/297] update --- scripts/rearrangeTxtFile.awk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rearrangeTxtFile.awk b/scripts/rearrangeTxtFile.awk index 59c57ca..a7880db 100644 --- a/scripts/rearrangeTxtFile.awk +++ b/scripts/rearrangeTxtFile.awk @@ -49,7 +49,7 @@ BEGIN{ T=strtonum(triggerTime) if(T-T_old> 50000){ - print spillID, eventID, T, T_old, T-T_old, ntriggers +# print spillID, eventID, T, T_old, T-T_old, ntriggers ntriggers=0 }else{ ntriggers+=1 From 6800c7440012bc9059a4d3565c2b5da3d559eee0 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Fri, 7 Oct 2016 05:58:43 +0200 Subject: [PATCH 009/297] newTextInputFormat modified for checks --- RawToDigi/plugins/HGCalTBTextSource.cc | 30 +++++++++++++------------- RawToDigi/plugins/HGCalTBTextSource.h | 10 ++++----- test_cfg.py | 12 +---------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 380ea8a..bd5b395 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -1,8 +1,11 @@ #include #include +#include +#include "stdlib.h" #include "HGCal/RawToDigi/plugins/HGCalTBTextSource.h" #include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" #include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" +using namespace std; //#define DEBUG /** RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=09 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=12 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=14 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=17 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=18 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=19 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=22 RUN=000880 SPILL=01 EVENT=000000 GLOBALTIME=0x01B6EAF2 BOARD=23 @@ -24,7 +27,6 @@ bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& t m_event = 0; } if (feof(m_file)) return false; - // read the header while(readHeader() == false) { if (feof(m_file)) return false; @@ -38,7 +40,8 @@ bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& t id = edm::EventID(m_run, m_spill, m_event); time = (edm::TimeValue_t) m_time; - return true; + if(m_spill <= NSpills) return true; + else return false; } // sets m_run, m_spill, m_even, m_time @@ -70,11 +73,11 @@ bool HGCalTBTextSource::readHeader() bool HGCalTBTextSource::readLines() { max_boards = 0; - for( auto board : m_lines) { + for( auto& board : m_lines) { board.clear(); } - char buff[1024]; + char buff[1024], buff_SK0[1024], buff_SK1[1024]; buff[0] = 0; unsigned int data_sk0, data_sk1; @@ -82,35 +85,33 @@ bool HGCalTBTextSource::readLines() for(unsigned int i = 0; i < 69 && !feof(m_file); ++i) { buff[0] = 0; fgets(buff, 1000, m_file); - // loop over one line of the text file std::string b = buff; std::istringstream buffer(b); unsigned int board_counter = 0; - if(i < 1 && i > 64) continue;// Only these are data words, the rest dont interest us for now - while( buffer.peek() != EOF) { //buffer.good() gives compilation errors + if((i < 1) || (i > 64)) continue;// Only these are data words, the rest dont interest us for now + while( buffer.peek() != EOF && board_counter < MAXLAYERS) { //buffer.good() gives compilation errors // read the data of the two skirocs of one board - buffer >> data_sk1 >> data_sk0; - - ++board_counter; + buffer >> buff_SK1; + buffer >> buff_SK0; + data_sk0 = strtoul(buff_SK0,NULL,0); + data_sk1 = strtoul(buff_SK1,NULL,0); //continue for all the boards - // extra security m_lines[board_counter].push_back(data_sk0); m_lines[board_counter].push_back(data_sk1); + + ++board_counter; if(board_counter > max_boards) max_boards = board_counter; } } - // if(sscanf(buffer, "Event header for event %x with (200ns) timestamp %x", &tmp_event, &m_time) == 2) { - return !m_lines.empty(); } void HGCalTBTextSource::produce(edm::Event & e) { std::auto_ptr bare_product(new FEDRawDataCollection()); - // here we parse the data std::vector skiwords; // make sure there are an even number of 32-bit-words (a round number of 64 bit words... @@ -127,7 +128,6 @@ void HGCalTBTextSource::produce(edm::Event & e) size_t len = sizeof(uint16_t) * skiwords.size(); fed.resize(len); memcpy(fed.data(), &(skiwords[0]), len); - e.put(bare_product); } diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 77010d2..afc8fda 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -2,14 +2,12 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Sources/interface/ProducerSourceFromFiles.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" - +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include #include #include - -#define MAX_LAYERS 16 /** * \class HGCalTBTextSource HGCal/RawToDigi/plugins/HGCalTBTextSource.h * @@ -23,7 +21,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles public: explicit HGCalTBTextSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : edm::ProducerSourceFromFiles(pset, desc, true), - m_file(0) + m_file(0), + NSpills(pset.getUntrackedParameter("nSpills", 6)) { m_sourceId = pset.getUntrackedParameter("fed", 1000); /// \todo check and read from file? @@ -44,9 +43,10 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles bool readHeader(void); bool readLines(void); - std::array< std::vector < unsigned int> , MAX_LAYERS> m_lines; + std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; unsigned int m_time; unsigned int m_event, m_run, m_spill, max_boards; + unsigned int NSpills;//Read while running how many spills we wish to run over int m_sourceId; }; diff --git a/test_cfg.py b/test_cfg.py index 4e4623d..4f17fa3 100644 --- a/test_cfg.py +++ b/test_cfg.py @@ -6,7 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut', + '/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -101,12 +101,6 @@ -#process.MessageLogger.cerr.FwkReport.reportEvery = 1 -process.options = cms.untracked.PSet( - wantSummary = cms.untracked.bool(True), -# SkipEvent = cms.untracked.vstring('ProductNotFound'), -) - ###### process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) @@ -136,7 +130,6 @@ #process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) -process.shervin = cms.Path() ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) @@ -155,13 +148,10 @@ if (options.chainSequence == 1): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) elif (options.chainSequence == 3): -# process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) process.p =cms.Path(process.hgcaltbdigis) - # process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter) elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) process.end = cms.EndPath(process.output) -process.schedule = cms.Schedule(process.shervin, process.end) From abdebf1e339f34b763a811bbc423bb5a88aeae86 Mon Sep 17 00:00:00 2001 From: Shervin Date: Fri, 7 Oct 2016 10:55:53 +0200 Subject: [PATCH 010/297] recHit energy providing gain switch HG to LG Conflicts: Reco/python/hgcaltbrechitproducer_cfi.py --- Reco/python/hgcaltbrechitproducer_cfi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index 444c57a..d9df14e 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -7,7 +7,7 @@ pedestalHigh = cms.string('CondObjects/data/Ped_HighGain_L8.txt'), gainLow = cms.string(''), gainHigh = cms.string(''), - ) + LG2HG = cms.double(9.), + gainThr = cms.double(1800.) adcSaturation = cms.uint32(2000), ) - From db4aa694e482ef8f164b992154199d72d8ff0c5d Mon Sep 17 00:00:00 2001 From: Shervin Date: Fri, 7 Oct 2016 11:01:07 +0200 Subject: [PATCH 011/297] Added way to define standard energy for recHits: now combination of low and high gain Conflicts: DataFormats/src/HGCalTBRecHit.cc --- DataFormats/src/HGCalTBRecHit.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DataFormats/src/HGCalTBRecHit.cc b/DataFormats/src/HGCalTBRecHit.cc index e442932..3a8c354 100644 --- a/DataFormats/src/HGCalTBRecHit.cc +++ b/DataFormats/src/HGCalTBRecHit.cc @@ -22,6 +22,8 @@ HGCalTBRecHit::HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, } else setEnergy(energyHigh); } + ///\todo set the default recHit energy to the highGain values unless saturated + setEnergy( ( energyHigh < _highGainSaturationThreshold ) ? energyHigh : energyLow *); } std::ostream& operator<<(std::ostream& s, const HGCalTBRecHit& hit) From c65019177a3853f3dbec782be7f2a2806aec759f Mon Sep 17 00:00:00 2001 From: Shervin Date: Fri, 7 Oct 2016 11:12:04 +0200 Subject: [PATCH 012/297] recHit energy providing gain switch HG to LG Conflicts: DataFormats/interface/HGCalTBRecHit.h Reco/plugins/HGCalTBRecHitProducer.cc Reco/plugins/HGCalTBRecHitProducer.h --- DataFormats/interface/HGCalTBRecHit.h | 26 ++++++++++++++++-------- DataFormats/src/HGCalTBRecHit.cc | 15 ++------------ DataFormats/src/classes_def.xml | 7 +++---- Reco/plugins/HGCalTBRecHitProducer.cc | 6 ++++-- Reco/plugins/HGCalTBRecHitProducer.h | 1 + Reco/python/hgcaltbrechitproducer_cfi.py | 3 +-- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index 59c7738..64a3344 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -27,7 +27,8 @@ class HGCalTBRecHit : public CaloRecHit HGCalTBRecHit(); // by default a recHit is greated with no flag - HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC + // HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC + HGCalTBRecHit(const DetId& id, float energy, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC /// get the id HGCalTBDetId id() const { @@ -36,22 +37,31 @@ class HGCalTBRecHit : public CaloRecHit ///// bool isRecovered() const; float _energyLow, _energyHigh; - float energyLow() + float energyLow() const { return _energyLow; }; - float energyHigh() + float energyHigh() const { return _energyHigh; }; - // set the flags - void setFlag(int flag) {setFlagField(1, flag, 1);}; // flagBits_|= (0x1 << flag);} - void unsetFlag(int flag) {setFlagField(0, flag, 1);}; //_ &= ~(0x1 << flag);} - + // set the flags + void setFlag(int flag) + { + setFlagField(1, flag, 1); + }; // flagBits_|= (0x1 << flag);} + void unsetFlag(int flag) + { + setFlagField(0, flag, 1); + }; //_ &= ~(0x1 << flag);} + // check if the flag is true - bool checkFlag(int flag) const {return flagField(flag, 1);}; //flagBits_ & ( 0x1< - + - - - + + diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index daa0054..b82a072 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -8,6 +8,7 @@ HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) _gainsLow_filename(cfg.getParameter("gainLow")), _gainsHigh_filename(cfg.getParameter("gainHigh")), _adcSaturation(cfg.getParameter("adcSaturation")) + _LG2HG_value(cfg.getParameter("LG2HG")), { produces (outputCollectionName); @@ -65,11 +66,12 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energyLow = digi[iSample].adcLow() - pedestal_low_value * adcToGeV_low_value; float energyHigh = digi[iSample].adcHigh() - pedestal_high_value * adcToGeV_high_value; - HGCalTBRecHit recHit(digi.detid(), energyLow, energyHigh, digi[iSample].tdc()); ///\todo use time calibration! + float energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * LG2HG; + + HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); //, _LG2HG_value, _gainThr_value * adcToGeV_high_value); ///\todo use time calibration! if(digi[iSample].adcHigh() > _adcSaturation) recHit.setFlag(kHighGainSaturated); if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(kLowGainSaturated); - #ifdef DEBUG std::cout << recHit << std::endl; diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 504082d..fb41d52 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -41,6 +41,7 @@ class HGCalTBRecHitProducer : public edm::EDProducer std::string _pedestalLow_filename, _pedestalHigh_filename; std::string _gainsLow_filename, _gainsHigh_filename; unsigned int _adcSaturation; + double _LG2HG_value; }; diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index d9df14e..d12a7fa 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -8,6 +8,5 @@ gainLow = cms.string(''), gainHigh = cms.string(''), LG2HG = cms.double(9.), - gainThr = cms.double(1800.) - adcSaturation = cms.uint32(2000), + adcSaturation = cms.uint32(1800), ) From 09259616dfd73192ce1c31065854f01b5ef3858f Mon Sep 17 00:00:00 2001 From: arabella Date: Fri, 7 Oct 2016 12:08:57 +0200 Subject: [PATCH 013/297] minor fix to enable compilation --- DataFormats/interface/HGCalTBRecHit.h | 4 ++-- DataFormats/src/classes_def.xml | 4 ++-- Reco/plugins/HGCalTBRecHitProducer.cc | 10 +++++----- Reco/plugins/HGCalTBRecHitProducer.h | 2 +- Reco/python/hgcaltbrechitproducer_cfi.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index 64a3344..c2f6bec 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -22,7 +22,7 @@ class HGCalTBRecHit : public CaloRecHit kGood = 0, kHighGainSaturated, kLowGainSaturated - } + }; HGCalTBRecHit(); @@ -33,7 +33,7 @@ class HGCalTBRecHit : public CaloRecHit HGCalTBDetId id() const { return HGCalTBDetId(detid()); - } + }; ///// bool isRecovered() const; float _energyLow, _energyHigh; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index a740166..ec40d90 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -4,8 +4,8 @@ - - + + diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index b82a072..37127ce 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -7,8 +7,8 @@ HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) _pedestalHigh_filename(cfg.getParameter("pedestalHigh")), _gainsLow_filename(cfg.getParameter("gainLow")), _gainsHigh_filename(cfg.getParameter("gainHigh")), - _adcSaturation(cfg.getParameter("adcSaturation")) - _LG2HG_value(cfg.getParameter("LG2HG")), + _adcSaturation(cfg.getParameter("adcSaturation")), + _LG2HG_value(cfg.getParameter("LG2HG")) { produces (outputCollectionName); @@ -66,12 +66,12 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energyLow = digi[iSample].adcLow() - pedestal_low_value * adcToGeV_low_value; float energyHigh = digi[iSample].adcHigh() - pedestal_high_value * adcToGeV_high_value; - float energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * LG2HG; + float energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * _LG2HG_value; HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); //, _LG2HG_value, _gainThr_value * adcToGeV_high_value); ///\todo use time calibration! - if(digi[iSample].adcHigh() > _adcSaturation) recHit.setFlag(kHighGainSaturated); - if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(kLowGainSaturated); + if(digi[iSample].adcHigh() > _adcSaturation) recHit.setFlag(HGCalTBRecHit::kHighGainSaturated); + if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(HGCalTBRecHit::kLowGainSaturated); #ifdef DEBUG std::cout << recHit << std::endl; diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index fb41d52..fa1c8b0 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -40,7 +40,7 @@ class HGCalTBRecHitProducer : public edm::EDProducer edm::EDGetTokenT _digisToken; std::string _pedestalLow_filename, _pedestalHigh_filename; std::string _gainsLow_filename, _gainsHigh_filename; - unsigned int _adcSaturation; + int _adcSaturation; double _LG2HG_value; }; diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index d12a7fa..e3e9d53 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -8,5 +8,5 @@ gainLow = cms.string(''), gainHigh = cms.string(''), LG2HG = cms.double(9.), - adcSaturation = cms.uint32(1800), + adcSaturation = cms.int32(1800) ) From 514bf288476214c1f038391cc4d550159158e55d Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 11 Oct 2016 15:23:10 +0200 Subject: [PATCH 014/297] fix Layer_Sum_Analyzer for weights and new event builder --- README.txt | 11 + Reco/plugins/Layer_Sum_Analyzer.cc | 568 +++++++++++++----------- Reco/python/hgcaltbrechitplotter_cfi.py | 3 +- 3 files changed, 312 insertions(+), 270 deletions(-) diff --git a/README.txt b/README.txt index f27f6db..e65f1c9 100644 --- a/README.txt +++ b/README.txt @@ -48,3 +48,14 @@ process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Ou cmsRun test_cfg.py >> /dev/null + + +** new event-based reco ** +sh scripts/rearrangeTxtFile.sh input.txt + >> need fix to rearrange HGCRun type. Produce output.txt + +cmsRun test_cfg_newEB.py nSpills=9 chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun + >> chainSequence=6 to run Layer_Sum_Analyzer + >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs + >> test_cfg_newEB.py to be fixed when rearrangeTxtFile.sh works properly + diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 055a9a0..90f737e 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -50,13 +50,19 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; double ADCtoMIP[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; +double MIP2ParticleCalib = 1.3; // FIXME for CERN //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts //double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights //double LayerWeight[16] = {1.4091566745180932, 0.7020676448403224, 0.6054055986179145, 0.7020676448403224, 0.6054055986179145, 0.8415931435769973, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891}; -double LayerWeight[16] = {1.}; + +double LayerWeight_8L_conf1[16] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129}; +double X0depth_8L_conf1[16] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; +double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451}; +double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; +double weights2GeV = 1.e-03; //double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights @@ -91,6 +97,8 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer> CellXY; std::pair CellCentreXY; + HGCalTBTopology IsCellValid; HGCalTBCellVertices TheCell; - double maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; - TH1F *h_sum_layer[MAXLAYERS], *h_layer_seven[MAXLAYERS], *h_layer_nineteen[MAXLAYERS], *h_sum_all, *h_seven_all, *h_nineteen_all; - TH1F *h_x_layer[MAXLAYERS], *h_y_layer[MAXLAYERS]; + double maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; // <<< FIXME maxdist > HGCAL_TB_CELL::FULL_CELL_SIDE !! + + double Weights_8L[MAXLAYERS]; + double X0_8L[MAXLAYERS]; + + TH1F *h_CM_layer[MAXSKIROCS]; + TH1F *h_sum_layer[MAXLAYERS], *h_layer_seven[MAXLAYERS], *h_layer_nineteen[MAXLAYERS], *h_Seed_layer[MAXLAYERS]; + TH1F *h_sum_layer_AbsW[MAXLAYERS], *h_layer_seven_AbsW[MAXLAYERS], *h_layer_nineteen_AbsW[MAXLAYERS], *h_Seed_layer_AbsW[MAXLAYERS]; + TH1F *h_x_layer[MAXLAYERS], *h_y_layer[MAXLAYERS]; TH2F *h_x_y_layer[MAXLAYERS]; - TH1F *h_CM_layer[MAXLAYERS]; - TH1F *h_Seed_layer[MAXLAYERS]; + + TH1F* h_Radius[MAXLAYERS]; TH1F *h_E1oE7_layer[MAXLAYERS], *h_E1oE19_layer[MAXLAYERS], *h_E7oE19_layer[MAXLAYERS]; + + TH1F *h_sum_all, *h_seven_all, *h_nineteen_all; + TH1F *h_sum_all_AbsW, *h_seven_all_AbsW, *h_nineteen_all_AbsW; TProfile *tp_E1_vs_layer, *tp_E7_vs_layer, *tp_E19_vs_layer; TProfile *tp_E1oSumL_vs_layer, *tp_E7oSumL_vs_layer, *tp_E19oSumL_vs_layer; TProfile *tp_E1oE7_vs_layer, *tp_E1oE19_vs_layer, *tp_E7oE19_vs_layer; TH2F *HighGain_LowGain_2D; - int SPILL = 0, EVENT = 0, LAYER = 0; - - map CMCells[MAXLAYERS]; - map AllCells[MAXLAYERS]; - map SeedCells[MAXLAYERS]; - map SevenCells[MAXLAYERS]; - map NineteenCells[MAXLAYERS]; - map X_Layer[MAXLAYERS]; - map Y_Layer[MAXLAYERS]; + TH2F *Energy_LowGain_2D; + + int EVENT = 0; + map Time_Stamp; map Delta_Time_Stamp; double Time_Temp = 0.; @@ -129,53 +142,84 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer fs; HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + CERN_8layers_config_ = iConfig.getParameter("CERN_8layers_config"); //booking the histos for(int layer = 0; layer < MAXLAYERS; layer++) { - stringstream name, seedname, sevenname, nineteenname, Xname, Yname, X_Y_name; - name << "AllCells_Sum_Layer" << layer + 1; - seedname << "SeedCell_Layer" << layer + 1; - sevenname << "Cells7_Sum_Layer" << layer + 1; - nineteenname << "Cells19_Sum_Layer" << layer + 1; - Xname << "X_Layer" << layer + 1; - Yname << "Y_Layer" << layer + 1; - X_Y_name << "X_Y_Layer" << layer + 1; - - h_sum_layer[layer] = fs->make(name.str().c_str(), name.str().c_str(), 40010, -10, 40000); - h_layer_seven[layer] = fs->make(sevenname.str().c_str(), sevenname.str().c_str(), 40010, -10, 40000); - h_layer_nineteen[layer] = fs->make(nineteenname.str().c_str(), nineteenname.str().c_str(), 40010, -10, 40000); - h_x_layer[layer] = fs->make(Xname.str().c_str(), Xname.str().c_str(), 2000, -10., 10. ); - h_y_layer[layer] = fs->make(Yname.str().c_str(), Yname.str().c_str(), 2000, -10., 10. ); - h_x_y_layer[layer] = fs->make(X_Y_name.str().c_str(), X_Y_name.str().c_str(), 2000, -10., 10., 2000, -10., 10. ); - h_CM_layer[layer] = fs->make(Form("h_CM_layer%d",layer+1), Form("h_CM_layer%d",layer+1), 5000, -500, 500); + h_sum_layer[layer] = fs->make(Form("sumAll_Layer%d", layer+1), "", 40010, -10, 40000); h_Seed_layer[layer] = fs->make(Form("h_Seed_layer%d",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven[layer] = fs->make(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); + h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); + + h_sum_layer_AbsW[layer] = fs->make(Form("sumAll_Layer%d_AbsW", layer+1), "", 40010, -10, 40000); + h_Seed_layer_AbsW[layer] = fs->make(Form("h_Seed_layer%d_AbsW",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven_AbsW[layer] = fs->make(Form("sum7_Layer%d_AbsW", layer+1),"", 40010, -10, 40000); + h_layer_nineteen_AbsW[layer] = fs->make(Form("sum19_Layer%d_AbsW", layer+1), "", 40010, -10, 40000); + + h_x_layer[layer] = fs->make(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); + h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); + h_x_y_layer[layer] = fs->make(Form("YvsX_Layer%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); + h_E1oE7_layer[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d",layer+1), 5000, -5, 5); h_E1oE19_layer[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d",layer+1), 5000, -5, 5); h_E7oE19_layer[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d",layer+1), 5000, -5, 5); + h_Radius[layer] = fs->make(Form("h_Radius_layer%d",layer+1), Form("h_Radius_layer%d",layer+1), 5000, 0., 20.); + } + + for(int ski=0; skimake(Form("h_CM_skiroc%d",ski+1), "", 5000, -500, 500); } - h_sum_all = fs->make("AllCells_Sum_AllLayers", "AllCells_Sum_AllLayers", 40010, -10, 40000); + h_sum_all = fs->make("h_sumAll_AllLayers", "", 40010, -10, 40000); + h_seven_all = fs->make("h_sum7_AllLayers", "", 40010, -10, 40000); + h_nineteen_all = fs->make("h_sum19_AllLayers", "", 40010, -10, 40000); h_sum_all->Sumw2(); - h_seven_all = fs->make("Cells7_Sum_AllLayers", "7Cells_Sum_AllLayers", 40010, -10, 40000); h_seven_all->Sumw2(); - h_nineteen_all = fs->make("Cells19_Sum_AllLayers", "19Cells_Sum_AllLayers", 40010, -10, 40000); h_nineteen_all->Sumw2(); - HighGain_LowGain_2D = fs->make("HighGain_LowGain_2D", "HighGain_LowGain_2D", 4000, 0, 4000, 4000, 0, 4000); - tp_E1_vs_layer = fs->make("tp_E1_vs_layer", "tp_E1_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7_vs_layer = fs->make("tp_E7_vs_layer", "tp_E7_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E19_vs_layer = fs->make("tp_E19_vs_layer", "tp_E19_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oSumL_vs_layer = fs->make("tp_E1oSumL_vs_layer", "tp_E1oSumL_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7oSumL_vs_layer = fs->make("tp_E7oSumL_vs_layer", "tp_E7oSumL_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E19oSumL_vs_layer = fs->make("tp_E19oSumL_vs_layer", "tp_E19oSumL_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oE7_vs_layer = fs->make("tp_E1oE7_vs_layer", "tp_E1oE7_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oE19_vs_layer = fs->make("tp_E1oE19_vs_layer", "tp_E1oE19_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7oE19_vs_layer = fs->make("tp_E7oE19_vs_layer", "tp_E7oE19_vs_layer", MAXLAYERS+1, 0, MAXLAYERS+1); + h_sum_all_AbsW = fs->make("h_sumAll_AllLayers_AbsW", "", 40010, -10, 40000); + h_seven_all_AbsW = fs->make("h_sum7_AllLayers_AbsW", "", 40010, -10, 40000); + h_nineteen_all_AbsW = fs->make("h_sum19_AllLayers_AbsW", "", 40010, -10, 40000); + h_sum_all_AbsW->Sumw2(); + h_seven_all_AbsW->Sumw2(); + h_nineteen_all_AbsW->Sumw2(); + + HighGain_LowGain_2D = fs->make("h2_HGvsLG", "", 4000, 0, 4000, 4000, 0, 4000); + Energy_LowGain_2D = fs->make("h2_EvsLG", "", 4000, 0, 4000, 4000, 0, 4000); + + tp_E1_vs_layer = fs->make("tp_E1_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7_vs_layer = fs->make("tp_E7_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E19_vs_layer = fs->make("tp_E19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oSumL_vs_layer = fs->make("tp_E1oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7oSumL_vs_layer = fs->make("tp_E7oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E19oSumL_vs_layer = fs->make("tp_E19oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oE7_vs_layer = fs->make("tp_E1oE7_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oE19_vs_layer = fs->make("tp_E1oE19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7oE19_vs_layer = fs->make("tp_E7oE19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); + + //loading the proper weights + if(MAXLAYERS != 8) { + std::cout << " update weights " << std::endl; + return; + } + + for(int iL=0; iL>> Layer_Sum_Analyzer::analyze " << std::endl; - - if(((event.id()).event() - 1) % (EVENTSPERSPILL * MAXLAYERS) == 0 && (event.id()).event() != 1) { - SPILL++; - } - LAYER = (((event.id()).event() - 1) / EVENTSPERSPILL) % MAXLAYERS; - EVENT = ((event.id()).event() - 1) % EVENTSPERSPILL + EVENTSPERSPILL * SPILL; - if(EVENT == 1) { - Time_Temp = event.time().value(); - Time_Stamp[EVENT] = Time_Temp; - Delta_Time_Stamp[EVENT] = 0.; - } else { - Time_Stamp[EVENT] = event.time().value(); - Delta_Time_Stamp[EVENT] = event.time().value() - Time_Temp; - Time_Temp = event.time().value(); - } - //opening Rechits - edm::Handle Rechits; - event.getByToken(HGCalTBRecHitCollection_, Rechits); - - // looping over each rechit to fill histogram - bool FIRST(1); - double commonmode, max, max_x, max_y; - commonmode = max = max_x = max_y = 0.; - int cm_num = 0; - for(auto Rechit : *Rechits) { - - //getting electronics ID - uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); - HGCalTBElectronicsId eid(EID); + EVENT = (event.id()).event(); + + if((event.id()).event() == 1) { + Time_Temp = event.time().value(); + Time_Stamp[EVENT] = Time_Temp; + Delta_Time_Stamp[EVENT] = 0.; + } else { + Time_Stamp[EVENT] = event.time().value(); + Delta_Time_Stamp[EVENT] = event.time().value() - Time_Temp; + Time_Temp = event.time().value(); + } + + //opening Rechits + edm::Handle Rechits; + event.getByToken(HGCalTBRecHitCollection_, Rechits); + + // looping over each rechit to fill histogram + double commonmode[MAXSKIROCS]; + int cm_num[MAXSKIROCS]; + for(int iS=0; iS REPLACE WITH EXTERNAL CLASS => FIX + for(auto Rechit : *Rechits){ + + if(!IsCellValid.iu_iv_valid((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorsize)) continue; + + //getting electronics ID + uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); + HGCalTBElectronicsId eid(EID); + + int n_layer = (Rechit.id()).layer() - 1; + int n_cell_type = (Rechit.id()).cellType(); + int n_skiroc = eid.iskiroc() - 1; + + + //getting X and Y coordinates + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorsize); + + HighGain_LowGain_2D->Fill(Rechit.energyLow(), Rechit.energyHigh()); + Energy_LowGain_2D->Fill(Rechit.energy(), Rechit.energyHigh()); + + // needed? FIXME + if(n_cell_type != 0) continue; + + if(Rechit.energy() > max[n_layer]) { + max[n_layer] = Rechit.energy(); + max_x[n_layer] = CellCentreXY.first; + max_y[n_layer] = CellCentreXY.second; + } + + if((Rechit.energy()) / ADCtoMIP[n_skiroc] <= CMTHRESHOLD) { + commonmode[n_skiroc] += Rechit.energy(); + cm_num[n_skiroc]++; + } + + }//Rechit loop ends here + // std::cout << " >>> found commonmode = " << commonmode << std::endl; + + + for(int iS=0; iS>> found commonmode = " << commonmode << std::endl; - commonmode /= cm_num; - - edm::Handle Rechits1; - event.getByToken(HGCalTBRecHitCollection_, Rechits1); + int eLayer = (Rechit1.id()).layer()-1; + int eCellType = (Rechit1.id()).cellType(); + int eSkiroc = eid.iskiroc() - 1; - // looping over each rechit to fill histogram - double allcells_sum, sevencells_sum, nineteencells_sum, radius; - allcells_sum = sevencells_sum = nineteencells_sum = radius = 0.; - double seedEnergy = -1.; - double x_tmp = 0., y_tmp = 0.; - int num, sevennum, nineteennum; - num = sevennum = nineteennum = 0; - for(auto Rechit1 : *Rechits1) { - //getting electronics ID - uint32_t EID = essource_.emap_.detId2eid(Rechit1.id()); - HGCalTBElectronicsId eid(EID); + //getting X and Y coordinates + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit1.id()).layer(), (Rechit1.id()).sensorIU(), (Rechit1.id()).sensorIV(), (Rechit1.id()).iu(), (Rechit1.id()).iv(), sensorsize); - //getting X and Y coordinates - CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit1.id()).layer(), (Rechit1.id()).sensorIU(), (Rechit1.id()).sensorIV(), (Rechit1.id()).iu(), (Rechit1.id()).iv(), sensorsize); + //FIXME >> needed? + if(eCellType != 0) continue; - if((Rechit1.id()).cellType() != 0) continue; + // std::cout << Rechit1.energy() << std::endl; - radius = sqrt( pow(CellCentreXY.first - max_x, 2) + pow(CellCentreXY.second - max_y, 2) ); + radius[eLayer] = sqrt( pow(CellCentreXY.first - max_x[eLayer], 2) + pow(CellCentreXY.second - max_y[eLayer], 2) ); - if(((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]) > CMTHRESHOLD){ - allcells_sum += (Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]; - if(seedEnergy == -1) seedEnergy = (Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]; - else{ - if((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER] > seedEnergy) seedEnergy = (Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]; - } - } + float energyCMsub = (Rechit1.energy() - commonmode[eSkiroc]) / ADCtoMIP[eSkiroc]; + // std::cout << "val = " << commonmode[eSkiroc] << std::endl; + if(energyCMsub > CMTHRESHOLD){ + allcells_sum[eLayer] += energyCMsub; + if(energyCMsub > seedEnergy[eLayer]) seedEnergy[eLayer] = energyCMsub; + } + + // countin all recHits even below CM threshold + num[eLayer]++; - // countin all recHits even below CM threshold - num++; + h_Radius[eLayer]->Fill(radius[eLayer]); - if((radius < maxdist && sevennum < 7) && ((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER] > CMTHRESHOLD)) { - - sevencells_sum += (Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]; - sevennum++; - } - - if((radius < 1.95 * maxdist && nineteennum < 19) && ((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER] > CMTHRESHOLD)) { - + //FIXME navigation to 7cells + if((radius[eLayer] < maxdist && sevennum[eLayer] < 7) && (energyCMsub > CMTHRESHOLD)){ + sevencells_sum[eLayer] += energyCMsub; + sevennum[eLayer]++; + } + + //FIXME navigation to 19cells + if((radius[eLayer] < 1.95 * maxdist && nineteennum[eLayer] < 19) && (energyCMsub > CMTHRESHOLD)){ // nineteencells_sum += (LayerWeight[LAYER]*(Rechit1.energyHigh() - commonmode))/ ADCtoMIP[LAYER]; - nineteencells_sum += ((Rechit1.energyHigh() - commonmode)) / ADCtoMIP[LAYER]; - - x_tmp += CellCentreXY.first * ((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]); - y_tmp += CellCentreXY.second * ((Rechit1.energyHigh() - commonmode) / ADCtoMIP[LAYER]); - nineteennum++; - } - } - // std::cout << " >>> all rechits = " << num << " sevennum = " << sevennum << " nineteennum = " << nineteennum << std::endl; - - CMCells[LAYER][EVENT] = commonmode; - AllCells[LAYER][EVENT] = allcells_sum; - SeedCells[LAYER][EVENT] = seedEnergy; - SevenCells[LAYER][EVENT] = sevencells_sum; - NineteenCells[LAYER][EVENT] = nineteencells_sum; - if(nineteennum > 1 && nineteencells_sum > 0) X_Layer[LAYER][EVENT] = x_tmp / nineteencells_sum ; - if(nineteennum > 1 && nineteencells_sum > 0) Y_Layer[LAYER][EVENT] = y_tmp / nineteencells_sum ; - - // if(LAYER > 1) std::cout << " TROVATOOOOOOOOOOOOOOOOOOO " << seedEnergy << std::endl; - - + nineteencells_sum[eLayer] += energyCMsub; + x_tmp[eLayer] += CellCentreXY.first * energyCMsub; + y_tmp[eLayer] += CellCentreXY.second * energyCMsub; + nineteennum[eLayer]++; + } + } + + for(int iS=0; iS>> end job " << std::endl; - double allcells, sevencells, nineteencells; - bool doAllCells, do7Cells, do19Cells; - double E1SumL = 0.; - double E7SumL = 0.; - double E19SumL = 0.; - - ofstream fs1; - fs1.open("./timeSynchro_HGCAL/HGC_CERN_Time_Synch.txt"); - // fs1 << "# " << "Event Num" << "\t" << "Time(us)" << "\t" << "Delta t(us)" << "\t" << "Cluster x[cm]" << "\t" << "Cluster y[cm]" << endl; - fs1 << "# " << "Event Num" << "\t" << "Delta t(us)" << "\t" << "Cluster x[cm]" << "\t" << "Cluster y[cm]" << endl; - - // std::cout << " (SPILL + 1) * EVENTSPERSPILL = " << (SPILL + 1) * EVENTSPERSPILL << " EVENTSPERSPILL = " << EVENTSPERSPILL << std::endl; - for(int event = 0; event < (SPILL + 1) * EVENTSPERSPILL; event++) { - allcells = sevencells = nineteencells = 0.; - doAllCells = do7Cells = do19Cells = true; // false; - // fs1< us - - E1SumL = 0.; - E7SumL = 0.; - E19SumL = 0.; - - - for(int layer = 0; layer < MAXLAYERS; layer++) { - h_CM_layer[layer]->Fill(CMCells[layer][event]); - - allcells += AllCells[layer][event]; - sevencells += SevenCells[layer][event]; - nineteencells += NineteenCells[layer][event]; - - E1SumL += SeedCells[layer][event]; - E7SumL += SevenCells[layer][event]; - E19SumL += NineteenCells[layer][event]; - - h_Seed_layer[layer]->Fill(SeedCells[layer][event]); - tp_E1_vs_layer->Fill(layer, SeedCells[layer][event]); - tp_E7_vs_layer->Fill(layer, SevenCells[layer][event]); - tp_E19_vs_layer->Fill(layer, NineteenCells[layer][event]); - - // if(layer > 1 ) std::cout << " SeedCells[layer][event] = " << SeedCells[layer][event] << std::endl; - if(SevenCells[layer][event] != 0){ - h_E1oE7_layer[layer]->Fill(SeedCells[layer][event]/SevenCells[layer][event]); - tp_E1oE7_vs_layer->Fill(layer, SeedCells[layer][event]/SevenCells[layer][event]); - } - if(NineteenCells[layer][event] != 0){ - h_E1oE19_layer[layer]->Fill(SeedCells[layer][event]/NineteenCells[layer][event]); - h_E7oE19_layer[layer]->Fill(SevenCells[layer][event]/NineteenCells[layer][event]); - tp_E1oE19_vs_layer->Fill(layer, SeedCells[layer][event]/NineteenCells[layer][event]); - // std::cout << " layer = " << layer << " val = " << SeedCells[layer][event]/SevenCells[layer][event] - // << " entries = " << tp_E1oE19_vs_layer->GetEntries() << std::endl; - tp_E7oE19_vs_layer->Fill(layer, SevenCells[layer][event]/NineteenCells[layer][event]); - } - // fs1 << layer << "\t" << event + 1 << "\t" << 200 * Delta_Time_Stamp[event + 1] / 1000. << "\t" << X_Layer[layer][event] << "\t" << Y_Layer[layer][event] << endl; - if(doAllCells) { - h_sum_layer[layer]->Fill(AllCells[layer][event]); - } - if(do7Cells) { - h_layer_seven[layer]->Fill(SevenCells[layer][event]); - } - if(do19Cells) { - h_layer_nineteen[layer]->Fill(NineteenCells[layer][event]); - h_x_layer[layer]->Fill(X_Layer[layer][event]); - h_y_layer[layer]->Fill(Y_Layer[layer][event]); - h_x_y_layer[layer]->Fill(X_Layer[layer][event], Y_Layer[layer][event]); - cout << endl << " " << layer << " " << X_Layer[layer][event] << " " << Y_Layer[layer][event] << endl; - //fs1 << event + 1 << "\t" << 200 * Time_Stamp[event + 1] / 1000. << "\t" << 200 * Delta_Time_Stamp[event + 1] / 1000. << "\t" << X_Layer[layer][event] << "\t" << Y_Layer[layer][event] << endl; - fs1 << event + 1 << "\t" << layer << "\t" << X_Layer[layer][event] << "\t" << Y_Layer[layer][event] << "\t" << Layer_Z[layer] << "\t" << endl; - } - - } - - // std::cout << " E1SumL = " << E1SumL << std::endl; - for(int layer = 0; layer < MAXLAYERS; layer++) { - if(E1SumL != 0.) tp_E1oSumL_vs_layer->Fill(layer, SeedCells[layer][event]/E1SumL); - if(E7SumL != 0.) tp_E7oSumL_vs_layer->Fill(layer, SevenCells[layer][event]/E7SumL); - if(E19SumL != 0.) tp_E19oSumL_vs_layer->Fill(layer, NineteenCells[layer][event]/E19SumL); - } - - if(ELECTRONS || !PIONS) { - if(allcells >= ALLCELLS_THRESHOLD) { - h_sum_all->Fill(allcells); - doAllCells = true; - } - if(sevencells >= SEVENCELLS_THRESHOLD) { - h_seven_all->Fill(sevencells); - do7Cells = true; - } - if(nineteencells >= NINETEENCELLS_THRESHOLD) { - h_nineteen_all->Fill(nineteencells / LayerSumWeight); - do19Cells = true; - } - } - - if(PIONS) { - if(allcells <= ALLCELLS_THRESHOLD && allcells >= PION_ALLCELLS_THRESHOLD) { - h_sum_all->Fill(allcells); - doAllCells = true; - } - if(sevencells <= SEVENCELLS_THRESHOLD && allcells >= PION_7CELLS_THRESHOLD) { - h_seven_all->Fill(sevencells); - do7Cells = true; - } - if(nineteencells <= NINETEENCELLS_THRESHOLD && allcells >= PION_19CELLS_THRESHOLD) { - h_nineteen_all->Fill(nineteencells / LayerSumWeight); - do19Cells = true; - } - } - - } - fs1.close(); } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ diff --git a/Reco/python/hgcaltbrechitplotter_cfi.py b/Reco/python/hgcaltbrechitplotter_cfi.py index e591694..04beaa1 100644 --- a/Reco/python/hgcaltbrechitplotter_cfi.py +++ b/Reco/python/hgcaltbrechitplotter_cfi.py @@ -33,5 +33,6 @@ ) LayerSumAnalyzer = cms.EDAnalyzer("Layer_Sum_Analyzer", - HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ) + HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), + CERN_8layers_config = cms.int32(1) ) From d7e5b6f6d7049ff3a3417164b03fc3388b993361 Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 11 Oct 2016 15:26:47 +0200 Subject: [PATCH 015/297] fix Layer_Sum_Analyzer for weights and new event builder --- test_cfg_newEB.py | 176 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 test_cfg_newEB.py diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py new file mode 100644 index 0000000..40d447d --- /dev/null +++ b/test_cfg_newEB.py @@ -0,0 +1,176 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +import os,sys + +options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' + +options.register('dataFolder', + #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', + #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' + 'tmpOut/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'folder containing raw text input') + +options.register('outputFolder', + '/tmp/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Result of processing') + +# options.register('commonPrefix', +# '', +# VarParsing.VarParsing.multiplicity.singleton, +# VarParsing.VarParsing.varType.string, +# 'Input file to process') + +options.register('runNumber', + 850, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Input file to process') + +options.register('runType', + 'Unknown', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Type of run: HGCRun for run with beam on, PED for pedestal run, Unknown otherwise') + +options.register('chainSequence', + 0, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + '0: if runType is PED then do Digi, if runType is HGC_Run then do Digi and Reco (not implemented yet); 1: do Digi; 2: only Reco (not implemented yet); 3: Digi + highgain_correlation_cm; 4: event display sequence; 5: highgain_correlation_cm + event display sequence') + +options.register('nSpills', + 15, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Number of spills in run') + +options.register('pedestalsHighGain', + 'CondObjects/data/Ped_HighGain_L8.txt', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to high gain pedestals file') + +options.register('pedestalsLowGain', + 'CondObjects/data/Ped_LowGain_L8.txt', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to low gain pedestals file') + +options.register('configuration', + 1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + '1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') + + + +options.output = "test_output.root" +options.maxEvents = -1 + +options.parseArguments() + +# print options # <--- A better option is to call test_cfg is called with "print" argument e.g. cmsRun test_cfg.py print dataFolder=example1 outputFolder=example2 ... + +if not os.path.isdir(options.dataFolder): + sys.exit("Error: Data folder not found or inaccessible!") + +if not os.path.isdir(options.outputFolder): + os.system("mkdir -p " + options.outputFolder) + +if (options.runType != "PED" and options.runType != "HGCRun"): + sys.exit("Error: only runtypes PED and HGCRun supported for now; given runType was %s"%(options.runType)) + +if (options.runType == "PED"): + if (os.path.isfile(options.pedestalsHighGain) or os.path.isfile(options.pedestalsLowGain)): + sys.exit("Error: Run %d is a pedestals run. The arguments pedestalsHighGain = %s and pedestalsLowGain = %s should be paths that do not lead to an existing file."%(options.runNumber, options.pedestalsHighGain, options.pedestalsLowGain)) + + + +################################ +process = cms.Process("unpack") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + +#################################### +process.load('HGCal.StandardSequences.RawToDigi_cff') +process.load('HGCal.StandardSequences.LocalReco_cff') +process.load('HGCal.StandardSequences.dqm_cff') + + +process.source = cms.Source("HGCalTBTextSource", + run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file + #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + nSpills=cms.untracked.uint32(options.nSpills), +) + + + +###### +process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) +process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) + +process.hgcaltbrechits.pedestalLow = cms.string(options.pedestalsLowGain) +process.hgcaltbrechits.pedestalHigh = cms.string(options.pedestalsHighGain) +process.hgcaltbrechits.gainLow = cms.string('') +process.hgcaltbrechits.gainHigh = cms.string('') + +process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", + dumpPayload=cms.untracked.bool(True)) + +process.dumpDigi = cms.EDAnalyzer("HGCalDigiDump") + + +process.output = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string(options.output) + ) + +# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) +if (options.chainSequence == 1): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Digi.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5 or options.chainSequence == 6): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) +# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco.root") ) +#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Layer.root") ) +#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) + + + +if(options.configuration == "1"): + process.LayerSumAnalyzer.CERN_8layers_config = cms.int32(1) +elif(options.configuration == "2"): + process.LayerSumAnalyzer.CERN_8layers_config = cms.int32(2) + +########Activate this to produce event displays######################################### +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) + +################Not needed for DQM purposes, produces digi histograms for each channel, and the pedestal txt file needed for Digi->Reco +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) + +################Produces Reco histograms for each channel as well as a scatter plot of the Reco per channel############# +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) + +#################Produces Clusters of Recos(7cells, 19cells and all cells(full hexagons only))################ +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) + +################Miscellaneous############################################################################## +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) + +if (options.chainSequence == 1): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) +elif (options.chainSequence == 3): + process.p =cms.Path(process.hgcaltbdigis) +elif (options.chainSequence == 4): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 5): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 6): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) + +process.end = cms.EndPath(process.output) From 45fb63ce8feafbdb071cd121329db7a74f6021ff Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 13 Oct 2016 11:49:07 +0200 Subject: [PATCH 016/297] default no weights correction --- Reco/plugins/Layer_Sum_Analyzer.cc | 4 ++++ Reco/python/hgcaltbrechitplotter_cfi.py | 2 +- test_cfg_newEB.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 90f737e..093981a 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -209,6 +209,10 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) } for(int iL=0; iL Date: Thu, 13 Oct 2016 16:31:41 +0200 Subject: [PATCH 017/297] LG HG values and MIP values --- Reco/plugins/HGCalTBRecHitProducer.cc | 10 ++++++++-- Reco/plugins/HGCalTBRecHitProducer.h | 7 ++++++- Reco/plugins/Layer_Sum_Analyzer.cc | 10 +++++----- Reco/python/hgcaltbrechitproducer_cfi.py | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index 37127ce..39cbf12 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -8,7 +8,7 @@ HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) _gainsLow_filename(cfg.getParameter("gainLow")), _gainsHigh_filename(cfg.getParameter("gainHigh")), _adcSaturation(cfg.getParameter("adcSaturation")), - _LG2HG_value(cfg.getParameter("LG2HG")) + _LG2HG_value(cfg.getParameter >("LG2HG")) { produces (outputCollectionName); @@ -66,10 +66,16 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energyLow = digi[iSample].adcLow() - pedestal_low_value * adcToGeV_low_value; float energyHigh = digi[iSample].adcHigh() - pedestal_high_value * adcToGeV_high_value; - float energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * _LG2HG_value; + float energy = -1.; HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); //, _LG2HG_value, _gainThr_value * adcToGeV_high_value); ///\todo use time calibration! + uint32_t EID = essource_.emap_.detId2eid(recHit.id()); + HGCalTBElectronicsId eid(EID); + + energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * _LG2HG_value.at(eid.iskiroc() - 1); + recHit.setEnergy(energy); + if(digi[iSample].adcHigh() > _adcSaturation) recHit.setFlag(HGCalTBRecHit::kHighGainSaturated); if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(HGCalTBRecHit::kLowGainSaturated); diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index fa1c8b0..3c8642d 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -22,6 +22,8 @@ #include "HGCal/CondObjects/interface/HGCalCondObjects.h" #include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" #include "HGCal/CondObjects/interface/HGCalTBNumberingScheme.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" //#define DEBUG @@ -41,7 +43,10 @@ class HGCalTBRecHitProducer : public edm::EDProducer std::string _pedestalLow_filename, _pedestalHigh_filename; std::string _gainsLow_filename, _gainsHigh_filename; int _adcSaturation; - double _LG2HG_value; + std::vector _LG2HG_value; + struct { + HGCalElectronicsMap emap_; + } essource_; }; diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 093981a..3adf843 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -49,7 +49,7 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; -double ADCtoMIP[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; +double ADCtoMIP[16] = {17.32, 17.16, 16.45, 17.39, 17.75, 17.27, 16.55, 16.25, 17.52, 17.18, 17.10, 17.88, 15.87, 16.71, 16.92, 15.72}; double MIP2ParticleCalib = 1.3; // FIXME for CERN //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts @@ -403,10 +403,10 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_layer_seven[iL]->Fill(sevencells_sum[iL]); h_layer_nineteen[iL]->Fill(nineteencells_sum[iL]); - float layerE1 = seedEnergy[iL] * ( ADCtoMIP[iL] * weights2GeV * Weights_8L[iL] + 1.); - float layerE7 = sevencells_sum[iL] * ( ADCtoMIP[iL] * weights2GeV * Weights_8L[iL] + 1.); - float layerE19 = nineteencells_sum[iL] * ( ADCtoMIP[iL] * weights2GeV * Weights_8L[iL] + 1.); - float layerEAll = allcells_sum[iL] * ( ADCtoMIP[iL] * weights2GeV * Weights_8L[iL] + 1.); + float layerE1 = seedEnergy[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); + float layerE7 = sevencells_sum[iL] * ((ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); + float layerE19 = nineteencells_sum[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); + float layerEAll = allcells_sum[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); h_sum_layer_AbsW[iL]->Fill(layerEAll); h_Seed_layer_AbsW[iL]->Fill(layerE1); diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index e3e9d53..0f43c6c 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -7,6 +7,6 @@ pedestalHigh = cms.string('CondObjects/data/Ped_HighGain_L8.txt'), gainLow = cms.string(''), gainHigh = cms.string(''), - LG2HG = cms.double(9.), + LG2HG = cms.vdouble(10.2, 10.2, 10., 10., 9.8, 8.8, 9.7, 9.7, 9.7, 9.7, 9.8, 9.8, 9.8, 9.8, 9.2, 9.2), adcSaturation = cms.int32(1800) ) From 7c14969abd8809487bd8024f5724507717c75a96 Mon Sep 17 00:00:00 2001 From: Shervin Date: Thu, 13 Oct 2016 17:40:10 +0200 Subject: [PATCH 018/297] fixed scripts for rearrange files --- scripts/rearrangeTxtFile.awk | 2 +- scripts/rearrangeTxtFile.sh | 49 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/scripts/rearrangeTxtFile.awk b/scripts/rearrangeTxtFile.awk index a7880db..cd948c6 100644 --- a/scripts/rearrangeTxtFile.awk +++ b/scripts/rearrangeTxtFile.awk @@ -11,7 +11,7 @@ BEGIN{ spillTime=$7 run=$9 # print "[DEBUG SPILL]", spillID, spillTime, run - dir=sprintf("%s/RUN_%06d", baseDir, run) + dir=sprintf("%s/RUN_%06d/SPILL_%02d", baseDir, run, spillID) system("mkdir -p "dir) } diff --git a/scripts/rearrangeTxtFile.sh b/scripts/rearrangeTxtFile.sh index 53b902d..d2cb794 100755 --- a/scripts/rearrangeTxtFile.sh +++ b/scripts/rearrangeTxtFile.sh @@ -1,7 +1,9 @@ #!/bin/bash file=$1 -dir=tmp -outDir=tmpOut +tmpdir=/dev/shm/$USER/ +splitDir=$tmpdir/split +mergeDir=$tmpdir/merge +finalDir=tmpOut #STARTING SPILL READ AT TIME (1us): 0x01EE8310 RUN: 878 EVENT: 400 #Board header: on FMC-IO 9, trig_count in mem= 400, sk_status = 1 @@ -12,41 +14,38 @@ outDir=tmpOut #sk0.0 sk0.1 sk1.0 sk1.1 etc -echo ${file} -if [ -e "${dir}" ];then - rm ${dir} -Rf +echo "[`basename $0`] Processing file: ${file}" +if [ -e "${tmpdir}" ];then + rm ${tmpdir}/* -Rf fi - -mkdir ${dir} -if [ -e "${outDir}" ];then - rm ${outDir} -Rf -fi -mkdir ${outDir} +mkdir -p $tmpdir/{split,merge}/ -rm $dir/* -Rf -awk -v baseDir=${dir} -f scripts/rearrangeTxtFile.awk $file +awk -v baseDir=${splitDir} -f scripts/rearrangeTxtFile.awk $file IFS=$'\n' -for run in $dir/RUN_* +for run in $splitDir/RUN_* do - boards=`ls $run/*.txt | sed 's|.*-BOARD_||;s|.txt||' | sort | uniq` - spills=`ls $run/*.txt | sed 's|-BOARD_.*||' | sort | uniq | sed 's|.*SPILL_||;s|-EVENT_| |'` + spills=`ls --color=none -d $splitDir/RUN_000930/SPILL_* | sed 's|.*SPILL_||' | sort -n` run=`basename $run | sed 's|RUN_||'` - - mkdir -p $outDir/RUN_${run} + mkdir -p $mergeDir/RUN_${run} - for spillevent in $spills + for spill in $spills do - spill=`echo $spillevent | cut -d ' ' -f 1` - event=`echo $spillevent | cut -d ' ' -f 2` + echo $spill + #tmp/RUN_000930/SPILL_01/SPILL_01-EVENT_000400-BOARD_23.txt + #boards=`ls ${dir}/RUN_${run}/SPILL_${spill}/*.txt | sed 's|.*-BOARD_||;s|.txt||' | sort | uniq` + + events=`ls ${splitDir}/RUN_${run}/SPILL_${spill}/*.txt | sed 's|.*EVENT_\([0-9]*\)-BOARD_.*|\1|;s|.txt||' | sort | uniq` + for event in $events + do # echo $spill " -- " $event - paste $dir/RUN_${run}/SPILL_${spill}-EVENT_${event}-BOARD_* | sed -e 's|[[:space:]]RUN.*BOARD{,1}|\tBOARD|g' > $outDir/RUN_${run}/SPILL_${spill}-EVENT_${event}.txt + paste $splitDir/RUN_${run}/SPILL_${spill}/SPILL_${spill}-EVENT_${event}-BOARD_* | sed -e 's|[[:space:]]RUN.*BOARD{,1}|\tBOARD|g' > $mergeDir/RUN_${run}/SPILL_${spill}-EVENT_${event}.txt + done done - cat $outDir/RUN_${run}/SPILL_*-EVENT_*.txt > $outDir/RUN_$run.txt -# cat $dir/RUN_${run}/SPILL_*-EVENT_*-BOARD_*.txt > $outDir/RUN_$run.txt - + cat $mergeDir/RUN_${run}/SPILL_*-EVENT_*.txt > $finalDir/RUN_$run.txt + done From 0fb454bd8e74d2a6d2f2c7d463144c7853c37de5 Mon Sep 17 00:00:00 2001 From: arabella Date: Fri, 14 Oct 2016 18:17:34 +0200 Subject: [PATCH 019/297] bug fix + correct formalism for weights --- README.txt | 1 + Reco/plugins/HGCalTBRecHitProducer.cc | 11 +++- Reco/plugins/HGCalTBRecHitProducer.h | 1 + Reco/plugins/Layer_Sum_Analyzer.cc | 71 +++++++++++++++--------- Reco/python/hgcaltbrechitplotter_cfi.py | 2 +- Reco/python/hgcaltbrechitproducer_cfi.py | 6 +- test_cfg_newEB.py | 14 +++-- 7 files changed, 70 insertions(+), 36 deletions(-) diff --git a/README.txt b/README.txt index e65f1c9..ed188ec 100644 --- a/README.txt +++ b/README.txt @@ -56,6 +56,7 @@ sh scripts/rearrangeTxtFile.sh input.txt cmsRun test_cfg_newEB.py nSpills=9 chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun >> chainSequence=6 to run Layer_Sum_Analyzer + >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs >> test_cfg_newEB.py to be fixed when rearrangeTxtFile.sh works properly diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index 39cbf12..5f65c58 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -1,4 +1,5 @@ #include "HGCal/Reco/plugins/HGCalTBRecHitProducer.h" +#include HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) : outputCollectionName(cfg.getParameter("OutputCollectionName")), @@ -8,9 +9,17 @@ HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) _gainsLow_filename(cfg.getParameter("gainLow")), _gainsHigh_filename(cfg.getParameter("gainHigh")), _adcSaturation(cfg.getParameter("adcSaturation")), - _LG2HG_value(cfg.getParameter >("LG2HG")) + _LG2HG_value(cfg.getParameter >("LG2HG_CERN")), + _mapFile(cfg.getParameter("mapFile")) { produces (outputCollectionName); + // std::cout << " >>> _LG2HG_value size = " << _LG2HG_value.size() << std::endl; + + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_mapFile); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; } diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 3c8642d..961df11 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -44,6 +44,7 @@ class HGCalTBRecHitProducer : public edm::EDProducer std::string _gainsLow_filename, _gainsHigh_filename; int _adcSaturation; std::vector _LG2HG_value; + std::string _mapFile; struct { HGCalElectronicsMap emap_; } essource_; diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 3adf843..5ea551d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -47,26 +47,34 @@ const bool ELECTRONS(1);// uses > *CELLS_THRESHOLD const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD -double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +//double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; -double ADCtoMIP[16] = {17.32, 17.16, 16.45, 17.39, 17.75, 17.27, 16.55, 16.25, 17.52, 17.18, 17.10, 17.88, 15.87, 16.71, 16.92, 15.72}; -double MIP2ParticleCalib = 1.3; // FIXME for CERN +//double ADCtoMIP_CERN[16] = {17.32, 17.16, 16.45, 17.39, 17.75, 17.27, 16.55, 16.25, 17.52, 17.18, 17.10, 17.88, 15.87, 16.71, 16.92, 15.72}; +double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; +double ADCtoMIP_FNAL[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; + +//double MIP2ParticleCalib = 1.3; // FNAL to proton 120GeV +double MIP2ParticleCalib = 1.06; // CERN to pion 125GeV //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts //double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights //double LayerWeight[16] = {1.4091566745180932, 0.7020676448403224, 0.6054055986179145, 0.7020676448403224, 0.6054055986179145, 0.8415931435769973, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891}; +double LayerWeight_16L_FNAL[16] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; +double X0depth_16L_FNAL[16] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; -double LayerWeight_8L_conf1[16] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129}; -double X0depth_8L_conf1[16] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; -double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451}; -double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; +double LayerWeight_8L_conf1[16] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129, 0., 0., 0., 0., 0., 0., 0., 0.}; +double X0depth_8L_conf1[16] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42, 0., 0., 0., 0., 0., 0., 0., 0.}; +double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0.}; +double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0.}; double weights2GeV = 1.e-03; +double weights2MIP = 52.8/63.6; // rescale weights from mean to MPV //double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights -double LayerSumWeight = 1.; +//double LayerSumWeight = 1.; + const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum // applied to all layers sum after commonmode subtraction and the ADC to MIP conversion @@ -97,7 +105,7 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer HGCAL_TB_CELL::FULL_CELL_SIDE !! - double Weights_8L[MAXLAYERS]; - double X0_8L[MAXLAYERS]; + double Weights_L[MAXLAYERS]; + double X0_L[MAXLAYERS]; + double ADCtoMIP[MAXLAYERS]; TH1F *h_CM_layer[MAXSKIROCS]; TH1F *h_sum_layer[MAXLAYERS], *h_layer_seven[MAXLAYERS], *h_layer_nineteen[MAXLAYERS], *h_Seed_layer[MAXLAYERS]; @@ -147,7 +156,7 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) usesResource("TFileService"); edm::Service fs; HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); - CERN_8layers_config_ = iConfig.getParameter("CERN_8layers_config"); + layers_config_ = iConfig.getParameter("layers_config"); //booking the histos for(int layer = 0; layer < MAXLAYERS; layer++) { @@ -209,17 +218,25 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) } for(int iL=0; iLFill(sevencells_sum[iL]); h_layer_nineteen[iL]->Fill(nineteencells_sum[iL]); - float layerE1 = seedEnergy[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); - float layerE7 = sevencells_sum[iL] * ((ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); - float layerE19 = nineteencells_sum[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); - float layerEAll = allcells_sum[iL] * ( (ADCtoMIP[iL*2]+ ADCtoMIP[iL*2+1])/2. * weights2GeV * Weights_8L[iL] + 1.); + float layerE1 = seedEnergy[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); + float layerE7 = sevencells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); + float layerE19 = nineteencells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); + float layerEAll = allcells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); h_sum_layer_AbsW[iL]->Fill(layerEAll); h_Seed_layer_AbsW[iL]->Fill(layerE1); @@ -473,7 +490,7 @@ Layer_Sum_Analyzer::beginJob() throw cms::Exception("Unable to load electronics map"); } - for(int iii = 0; iii < 16; iii++) + for(int iii = 0; iii < MAXLAYERS; iii++) ADCtoMIP[iii] = ADCtoMIP[iii] / MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs /* for(int iii= 0; iii<16;iii++){ diff --git a/Reco/python/hgcaltbrechitplotter_cfi.py b/Reco/python/hgcaltbrechitplotter_cfi.py index 73023d0..9d0f7bd 100644 --- a/Reco/python/hgcaltbrechitplotter_cfi.py +++ b/Reco/python/hgcaltbrechitplotter_cfi.py @@ -34,5 +34,5 @@ LayerSumAnalyzer = cms.EDAnalyzer("Layer_Sum_Analyzer", HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), - CERN_8layers_config = cms.int32(0) + layers_config = cms.int32(-1) ) diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index 0f43c6c..a58371a 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -7,6 +7,8 @@ pedestalHigh = cms.string('CondObjects/data/Ped_HighGain_L8.txt'), gainLow = cms.string(''), gainHigh = cms.string(''), - LG2HG = cms.vdouble(10.2, 10.2, 10., 10., 9.8, 8.8, 9.7, 9.7, 9.7, 9.7, 9.8, 9.8, 9.8, 9.8, 9.2, 9.2), - adcSaturation = cms.int32(1800) + LG2HG_CERN = cms.vdouble(10.2, 10.2, 10., 10., 9.8, 8.8, 9.7, 9.7, 9.7, 9.7, 9.8, 9.8, 9.8, 9.8, 9.2, 9.2), + LG2HG_FNAL = cms.vdouble(1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.), + adcSaturation = cms.int32(1800), + mapFile = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt') ) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index f230ddd..f685714 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -62,10 +62,10 @@ 'Path to low gain pedestals file') options.register('configuration', - 0, + -1, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - '1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') + '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') @@ -142,10 +142,14 @@ -if(options.configuration == "1"): - process.LayerSumAnalyzer.CERN_8layers_config = cms.int32(1) +if(options.configuration == "-1"): + process.LayerSumAnalyzer.layers_config = cms.int32(-1) +elif(options.configuration == "0"): + process.LayerSumAnalyzer.layers_config = cms.int32(0) +elif(options.configuration == "1"): + process.LayerSumAnalyzer.layers_config = cms.int32(1) elif(options.configuration == "2"): - process.LayerSumAnalyzer.CERN_8layers_config = cms.int32(2) + process.LayerSumAnalyzer.layers_config = cms.int32(2) ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) From f13d58ec6c4e084291eb259630b0c1cd1c50e317 Mon Sep 17 00:00:00 2001 From: Shervin Date: Mon, 17 Oct 2016 10:21:03 +0200 Subject: [PATCH 020/297] few fixes for better handling of file names --- scripts/rearrangeTxtFile.sh | 74 ++++++++++--------------------------- 1 file changed, 20 insertions(+), 54 deletions(-) diff --git a/scripts/rearrangeTxtFile.sh b/scripts/rearrangeTxtFile.sh index d2cb794..fe071bd 100755 --- a/scripts/rearrangeTxtFile.sh +++ b/scripts/rearrangeTxtFile.sh @@ -1,9 +1,13 @@ #!/bin/bash file=$1 -tmpdir=/dev/shm/$USER/ +tmpdir=/dev/shm/$USER splitDir=$tmpdir/split mergeDir=$tmpdir/merge -finalDir=tmpOut +finalDir=$2 + +splitDir=$splitDir/`basename $file .txt` +mergeDir=$mergeDir/`basename $file .txt` +finalFile=$finalDir/`basename $file` || exit #STARTING SPILL READ AT TIME (1us): 0x01EE8310 RUN: 878 EVENT: 400 #Board header: on FMC-IO 9, trig_count in mem= 400, sk_status = 1 @@ -15,82 +19,44 @@ finalDir=tmpOut echo "[`basename $0`] Processing file: ${file}" -if [ -e "${tmpdir}" ];then - rm ${tmpdir}/* -Rf +if [ -e "${finalFile}" ];then + echo "[`basename $0`] Final file ${finalFile} exists" + exit 0 fi -mkdir -p $tmpdir/{split,merge}/ +if [ ! -e "${tmpdir}" ];then + mkdir -p $tmpdir/{split,merge}/ || exit 1 +fi -awk -v baseDir=${splitDir} -f scripts/rearrangeTxtFile.awk $file +awk -v baseDir=${splitDir} -f scripts/rearrangeTxtFile.awk $file || exit 1 IFS=$'\n' for run in $splitDir/RUN_* do - spills=`ls --color=none -d $splitDir/RUN_000930/SPILL_* | sed 's|.*SPILL_||' | sort -n` + run=`basename $run | sed 's|RUN_||'` + spills=`ls --color=none -d $splitDir/RUN_${run}/SPILL_* | sed 's|.*SPILL_||' | sort -n` mkdir -p $mergeDir/RUN_${run} for spill in $spills do - echo $spill + echo "[`basename $0`] Merging spillID: $spill" #tmp/RUN_000930/SPILL_01/SPILL_01-EVENT_000400-BOARD_23.txt #boards=`ls ${dir}/RUN_${run}/SPILL_${spill}/*.txt | sed 's|.*-BOARD_||;s|.txt||' | sort | uniq` events=`ls ${splitDir}/RUN_${run}/SPILL_${spill}/*.txt | sed 's|.*EVENT_\([0-9]*\)-BOARD_.*|\1|;s|.txt||' | sort | uniq` for event in $events do -# echo $spill " -- " $event - paste $splitDir/RUN_${run}/SPILL_${spill}/SPILL_${spill}-EVENT_${event}-BOARD_* | sed -e 's|[[:space:]]RUN.*BOARD{,1}|\tBOARD|g' > $mergeDir/RUN_${run}/SPILL_${spill}-EVENT_${event}.txt + (paste $splitDir/RUN_${run}/SPILL_${spill}/SPILL_${spill}-EVENT_${event}-BOARD_* | sed -e 's|[[:space:]]RUN.*BOARD{,1}|\tBOARD|g' > $mergeDir/RUN_${run}/SPILL_${spill}-EVENT_${event}.txt) & done + wait done - cat $mergeDir/RUN_${run}/SPILL_*-EVENT_*.txt > $finalDir/RUN_$run.txt + cat $mergeDir/RUN_${run}/SPILL_*-EVENT_*.txt > $finalFile || exit 1 done +rm {$splitDir,$mergeDir}/ -Rf exit 0 -cat $dir/RUN_*/SPILL_*-EVENT_*-BOARD_*.txt > $outDir/RUN_ -# take the list of spills and create the subdirs -run_fills=`grep STARTING $file | awk '{print $7, $9}'` -# take the list of boards and create the subdirs -echo "[INFO] Now reordering files" - - -IFS=$'\n' -for run_fill in ${run_fills} -do - let spillID=$spillID+1 - run=`echo $run_fill | awk '{print $2}'` - spill=`echo ${run_fill} | awk '{print $1}'` - - dir=tmp/$spillID-$spill/ - events=`ls -1 ${dir}/* | sort -n | uniq | grep dat | sed 's|.dat||'` - boards=`ls -1 tmp/*/ |grep -v tmp | sort -n | uniq | sed '/^$/ d'` - echo "Spill: $spill" - for event in ${events} - do - for board in ${boards} - do - f=${dir}/$board/$event.dat - if [ ! -e "$f" ];then continue; fi - cat $f >> ${outDir}/$spillID-$event.dat - done - cat ${outDir}/${spillID}-${event}.dat >> ${outDir}/${spillID}.dat - done - -done - - -# IFS=$'\n' - -# if [ ! -d "${dir}/${run}/${board}" ];then -# mkdir ${dir}/${run}/${boardID}-${board} -p -# fi - -# done - - - - From 24507b778ecc89cb6d4d9d6a1d14a31c34e70aea Mon Sep 17 00:00:00 2001 From: arabella Date: Mon, 17 Oct 2016 17:26:13 +0200 Subject: [PATCH 021/297] include cellType 0,1,4 and CM for 0,4 per layer --- Reco/plugins/Layer_Sum_Analyzer.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 5ea551d..0e28b16 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -309,7 +309,7 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu Energy_LowGain_2D->Fill(Rechit.energy(), Rechit.energyHigh()); // needed? FIXME - if(n_cell_type != 0) continue; + if(n_cell_type != 0 && n_cell_type != 4) continue; if(Rechit.energy() > max[n_layer]) { max[n_layer] = Rechit.energy(); @@ -326,9 +326,10 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu // std::cout << " >>> found commonmode = " << commonmode << std::endl; - for(int iS=0; iS + + + + - diff --git a/Reco/interface/RecHitCommonMode.h b/Reco/interface/RecHitCommonMode.h new file mode 100644 index 0000000..bcf4690 --- /dev/null +++ b/Reco/interface/RecHitCommonMode.h @@ -0,0 +1,59 @@ +#ifndef HGCAL_RECO_RECHITCOMMONMODE_H +#define HGCAL_RECO_RECHITCOMMONMODE_H +// user include files +#include +#include +#include + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" + +using namespace std; +// +// class declaration +// + + + +class RecHitCommonMode +{ + +public: + RecHitCommonMode(edm::Handle Rechits, HGCalElectronicsMap& emap); + ~RecHitCommonMode(); + + void evaluate(float maxEcut = 1000.0); + float getGaussCommonModeNoise(HGCalTBDetId id); + float getGaussCommonModeNoise(int idSKIROC, int type); + float getMeanCommonModeNoise(HGCalTBDetId id); + float getMeanCommonModeNoise(int idSKIROC, int type); + + +private: + + edm::Handle Rechits_; + struct { + HGCalElectronicsMap emap_; + } essource_; + + TH1F* Full_Cell[MAXSKIROCS]; + char name[50], title[50]; + float FullCell_CMNoise_Fit[MAXSKIROCS]; + float FullCell_CMNoise_Mean[MAXSKIROCS]; + float CalibPad_CMNoise[MAXSKIROCS]; + float HalfCell_CMNoise[MAXSKIROCS]; + float MB_CMNoise[MAXSKIROCS]; + float OuterCalibPad_CMNoise[MAXSKIROCS]; + float MergedCell_CMNoise[MAXSKIROCS]; +}; + +#endif diff --git a/Reco/plugins/BuildFile.xml b/Reco/plugins/BuildFile.xml index 71c0e21..57943a2 100644 --- a/Reco/plugins/BuildFile.xml +++ b/Reco/plugins/BuildFile.xml @@ -9,5 +9,6 @@ + diff --git a/Reco/plugins/RecHitPlotter_HighGain_CM_Correction.cc b/Reco/plugins/RecHitPlotter_HighGain_CM_Correction.cc new file mode 100644 index 0000000..0d0ca96 --- /dev/null +++ b/Reco/plugins/RecHitPlotter_HighGain_CM_Correction.cc @@ -0,0 +1,238 @@ +/* Modify RecHitPlotter_HighGain_Correlation_CM.cc to use the RecHitCommonMode class */ +// +// Author: Menglei Sun +// Created: Fri, August 26 2016 + + +// system include files +#include +#include +#include "TH2Poly.h" +#include "TProfile.h" +#include "TH1F.h" +#include "TH2F.h" +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "HGCal/Reco/interface/RecHitCommonMode.h" + +using namespace std; +// +// class declaration +// + +// If the analyzer does not use TFileService, please remove +// the template argument to the base class so the class inherits +// from edm::one::EDAnalyzer<> and also remove the line from +// constructor "usesResource("TFileService");" +// This will improve performance in multithreaded jobs. + +static const double delta = 0.00001;//Add/subtract delta = 0.00001 to x,y of a cell centre so the TH2Poly::Fill doesnt have a problem at the edges where the centre of a half-hex cell passes through the sennsor boundary line. + +class RecHitPlotter_HighGain_CM_Correction : public edm::one::EDAnalyzer +{ + +public: + explicit RecHitPlotter_HighGain_CM_Correction(const edm::ParameterSet&); + ~RecHitPlotter_HighGain_CM_Correction(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + bool doCommonMode_CM_; + edm::EDGetToken HGCalTBRecHitCollection_; + HGCalTBTopology IsCellValid; + HGCalTBCellVertices TheCell; + std::string mapfile_ = "HGCal/CondObjects/data/map_FNAL_SB2_Layer16.txt"; + struct { + HGCalElectronicsMap emap_; + } essource_; + int sensorsize = 128;// The geometry for a 256 cell sensor hasnt been implemted yet. Need a picture to do this. + std::vector> CellXY; + std::pair CellCentreXY; + + TH2Poly *h_RecHit_layer[128]; + TH1F* Full_Cell[MAXSKIROCS]; + TH1F* Half_Cell[MAXSKIROCS]; + TH1F* MB_Cell[MAXSKIROCS]; + TH1F* Calib_Pads[MAXSKIROCS]; + TH1F* OuterCalib_Cell[MAXSKIROCS]; + TH1F* Merged_Cell[MAXSKIROCS]; + TH1F *h_digi_layer_channel[MAXSKIROCS][64]; + + TH1F* AllCells_Ped; + TH1F* AllCells_CM; + TH2F* Noise_2D_Profile; + char name[50], title[50]; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +RecHitPlotter_HighGain_CM_Correction::RecHitPlotter_HighGain_CM_Correction(const edm::ParameterSet& iConfig) +{ + //now do what ever initialization is needed + usesResource("TFileService"); + doCommonMode_CM_ = iConfig.getParameter("doCommonMode"); + edm::Service fs; + HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + + +//Booking 2 "hexagonal" histograms to display the sum of Rechits and the Occupancy(Hit > 5 GeV) in 1 sensor in 1 layer. To include all layers soon. Also the 1D Rechits per cell in a sensor is booked here. + AllCells_Ped = fs->make("AllCells_Ped","AllCells_Ped",500,-250,250); + AllCells_CM = fs->make("AllCells_CM","AllCells_CM",500,-250,250); + sprintf(name, "Noise_2D_Profile_Layer"); + sprintf(title, "Noise 2D Profile Layer"); + Noise_2D_Profile = fs->make(name,title,2048,0,2048,8000,-4000,4000); + for(int ISKI=0;ISKImake(name, title, 1000,-500., 500.); + sprintf(name, "Half_Cell_SKIROC_%i",ISKI); + sprintf(title, "Half Cell SKIROC %i",ISKI); + Half_Cell[ISKI] = fs->make(name, title, 1000,-500., 500.); + sprintf(name, "MB_Cell_SKIROC_%i",ISKI); + sprintf(title, "MB Cell SKIROC %i",ISKI); + MB_Cell[ISKI] = fs->make(name, title, 1000,-500., 500.); + sprintf(name, "Calib_Pads_SKIROC_%i",ISKI); + sprintf(title, "Calib Pads SKIROC %i",ISKI); + Calib_Pads[ISKI] = fs->make(name, title, 1000,-500., 500.); + sprintf(name, "Outer_Calib_Pads_SKIROC_%i",ISKI); + sprintf(title, "Outer Calib Pads SKIROC %i",ISKI); + OuterCalib_Cell[ISKI] = fs->make(name, title, 1000,-500., 500.); + sprintf(name, "Merged_Cell_SKIROC_%i",ISKI); + sprintf(title, "Merged Cell SKIROC %i",ISKI); + Merged_Cell[ISKI] = fs->make(name, title, 1000,-500., 500.); + + for(int Channel=0; Channel<64;Channel++){ + sprintf(name, "Ski_%i_Channel_%i",ISKI,Channel); + sprintf(title, "Ski %i Channel %i",ISKI,Channel); + h_digi_layer_channel[ISKI][Channel] = fs->make(name, title, 1000,-500., 500.); +/* + sprintf(name, "Ski_%i_Channel_%i_CM",ISkiroc,Channel); + sprintf(title, "Ski %i Channel %i CM",ISkiroc,Channel); + h_digi_layer_channel_CM[ISkiroc-1][Channel] = fs->make(name, title, 1000,-500., 500.,1000,-500., 500.); +*/ + } + } + +}//contructor ends here + + +RecHitPlotter_HighGain_CM_Correction::~RecHitPlotter_HighGain_CM_Correction() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called for each event ------------ +void +RecHitPlotter_HighGain_CM_Correction::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + + using namespace edm; + + edm::Handle Rechits; + event.getByToken(HGCalTBRecHitCollection_, Rechits); + edm::Handle Rechits1; + event.getByToken(HGCalTBRecHitCollection_, Rechits1); + + RecHitCommonMode CM(Rechits,essource_.emap_); + CM.evaluate(100.0); + + for(int iii = 0; iii < MAXSKIROCS; iii++){ + if(CM.getGaussCommonModeNoise(iii, 0) != 0) Full_Cell[iii]->Fill(CM.getGaussCommonModeNoise(iii, 0)); + if(CM.getGaussCommonModeNoise(iii, 1) != 0) Calib_Pads[iii]->Fill(CM.getGaussCommonModeNoise(iii, 1)); + if(CM.getGaussCommonModeNoise(iii, 2) != 0) Half_Cell[iii]->Fill(CM.getGaussCommonModeNoise(iii, 2)); + if(CM.getGaussCommonModeNoise(iii, 3) != 0) MB_Cell[iii]->Fill(CM.getGaussCommonModeNoise(iii, 3)); + if(CM.getGaussCommonModeNoise(iii, 4) != 0) OuterCalib_Cell[iii]->Fill(CM.getGaussCommonModeNoise(iii, 4)); + if(CM.getGaussCommonModeNoise(iii, 5) != 0) Merged_Cell[iii]->Fill(CM.getGaussCommonModeNoise(iii, 5)); + } + + for(auto RecHit : *Rechits) { + if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); + + uint32_t EID = essource_.emap_.detId2eid(RecHit.id()); + HGCalTBElectronicsId eid(EID); + if(!doCommonMode_CM_){ + h_digi_layer_channel[eid.iskiroc()-1][eid.ichan()]->Fill(RecHit.energyHigh()); + Noise_2D_Profile->Fill((64*(eid.iskiroc()-1) + eid.ichan()),RecHit.energyHigh()); + } + else if(doCommonMode_CM_){ + AllCells_Ped->Fill(RecHit.energyHigh()); + h_digi_layer_channel[eid.iskiroc()-1][eid.ichan()]->Fill(RecHit.energyHigh() - CM.getGaussCommonModeNoise(RecHit.id())); + } + + Noise_2D_Profile->Fill((64*(eid.iskiroc()-1) + eid.ichan()),RecHit.energyHigh() - CM.getGaussCommonModeNoise(eid.iskiroc()-1, 0)); + + } + + +}//analyze method ends here + + +// ------------ method called once each job just before starting event loop ------------ +void +RecHitPlotter_HighGain_CM_Correction::beginJob() +{ +HGCalCondObjectTextIO io(0); + edm::FileInPath fip(mapfile_); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + } +} + +// ------------ method called once each job just after ending the event loop ------------ +void +RecHitPlotter_HighGain_CM_Correction::endJob() +{ + +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void +RecHitPlotter_HighGain_CM_Correction::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(RecHitPlotter_HighGain_CM_Correction); diff --git a/Reco/python/hgcaltbrechitplotter_cfi.py b/Reco/python/hgcaltbrechitplotter_cfi.py index e591694..8b4975a 100644 --- a/Reco/python/hgcaltbrechitplotter_cfi.py +++ b/Reco/python/hgcaltbrechitplotter_cfi.py @@ -27,6 +27,11 @@ hgcaltbrechitsplotter_highgain_correlation_cm = cms.EDAnalyzer("RecHitPlotter_HighGain_Correlation_CM", HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ) ) +hgcaltbrechitsplotter_highgain_cm_correction = cms.EDAnalyzer("RecHitPlotter_HighGain_CM_Correction", + HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), + doCommonMode = cms.bool(True) + ) + FourLayerRecHitPlotterMax = cms.EDAnalyzer("FourLayerRecHitPlotterMax", HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ) diff --git a/Reco/src/RecHitCommonMode.cc b/Reco/src/RecHitCommonMode.cc new file mode 100644 index 0000000..a85916c --- /dev/null +++ b/Reco/src/RecHitCommonMode.cc @@ -0,0 +1,202 @@ +#include "HGCal/Reco/interface/RecHitCommonMode.h" +using namespace std; +// +// class declaration +// + +RecHitCommonMode::RecHitCommonMode(edm::Handle Rechits, HGCalElectronicsMap& emap) +{ + using namespace edm; + Rechits_ = Rechits; + essource_.emap_ = emap; + if(essource_.emap_.size() == 0) + throw cms::Exception("InvalidElectronicsMap") << "HGCalElectronicsMap has zero size"; + + for(int iSKI(0);iSKIbegin(); rechit != Rechits_->end(); rechit++) { + HGCalTBRecHit hit = (*rechit); + if(hit.energyHigh() > maxEcut)continue; + uint32_t EID = essource_.emap_.detId2eid(rechit->id()); + HGCalTBElectronicsId eid(EID); + int idSKIROC = eid.iskiroc()-1; + int type = (rechit->id()).cellType(); + switch(type){ + case 0: + Full_Cell[idSKIROC]->Fill(hit.energyHigh()); + Cell_counter_Full[idSKIROC]+=1; + Average_Pedestal_Per_Event_Full[idSKIROC] += hit.energyHigh(); + break; + case 1: + Cell_counter_Calib_Pad[idSKIROC]+=1; + Average_Pedestal_Per_Event_Calib_Pad[idSKIROC] += 0; + break; + case 2: + Cell_counter_Half[idSKIROC]+= 1; + Average_Pedestal_Per_Event_Half[idSKIROC] += hit.energyHigh(); + break; + case 3: + Cell_counter_MB[idSKIROC]+=1; + Average_Pedestal_Per_Event_MB[idSKIROC] += hit.energyHigh(); + break; + case 4: + Full_Cell[idSKIROC]->Fill(hit.energyHigh()); // Full cell + outer calib pad for Gaussian fit + Cell_counter_Full[idSKIROC]+=1; + Average_Pedestal_Per_Event_Full[idSKIROC] += hit.energyHigh(); + break; + case 5: + Cell_counter_Merged_Cell[idSKIROC]+=1; + Average_Pedestal_Per_Event_Merged_Cell[idSKIROC] += hit.energyHigh(); + break; + default: + throw cms::Exception("InvalidCellType") << "rechit celltype if out of range"; + break; + } + } + + for(int iSKI(0);iSKIGetEntries() > 0){ + int fitstatus = Full_Cell[iSKI]->Fit("gaus", "Q"); + if(fitstatus ==0)FullCell_CMNoise_Fit[iSKI] = Full_Cell[iSKI]->GetFunction("gaus")->GetParameter(1); + else FullCell_CMNoise_Fit[iSKI] = 0; + } else { + FullCell_CMNoise_Fit[iSKI] = 0; + } + + if(Cell_counter_Full[iSKI] > 0)FullCell_CMNoise_Mean[iSKI] = Average_Pedestal_Per_Event_Full[iSKI]/Cell_counter_Full[iSKI]; + CalibPad_CMNoise[iSKI] = 0.0; + if(Cell_counter_Half[iSKI] > 0)HalfCell_CMNoise[iSKI] = Average_Pedestal_Per_Event_Half[iSKI]/Cell_counter_Half[iSKI]; + if(Cell_counter_MB[iSKI] > 0)MB_CMNoise[iSKI] = Average_Pedestal_Per_Event_MB[iSKI]/Cell_counter_MB[iSKI]; + OuterCalibPad_CMNoise[iSKI] = FullCell_CMNoise_Mean[iSKI]; + if(Cell_counter_Merged_Cell[iSKI] > 0)MergedCell_CMNoise[iSKI] = Average_Pedestal_Per_Event_Merged_Cell[iSKI]/Cell_counter_Merged_Cell[iSKI]; + } +} + +float +RecHitCommonMode::getGaussCommonModeNoise(HGCalTBDetId id) +{ + uint32_t EID = essource_.emap_.detId2eid(id); + HGCalTBElectronicsId eid(EID); + int idSKIROC = eid.iskiroc()-1; + int type = id.cellType(); + float CMNoise(0); + switch(type){ + case 0: CMNoise = FullCell_CMNoise_Fit[idSKIROC]; break; + case 1: CMNoise = CalibPad_CMNoise[idSKIROC]; break; + case 2: CMNoise = HalfCell_CMNoise[idSKIROC]; break; + case 3: CMNoise = MB_CMNoise[idSKIROC]; break; + case 4: CMNoise = FullCell_CMNoise_Fit[idSKIROC]; break; + case 5: CMNoise = MergedCell_CMNoise[idSKIROC]; break; + default: CMNoise = 0; break; + }; + + return CMNoise; +} + +float +RecHitCommonMode::getMeanCommonModeNoise(HGCalTBDetId id) +{ + uint32_t EID = essource_.emap_.detId2eid(id); + HGCalTBElectronicsId eid(EID); + int idSKIROC = eid.iskiroc()-1; + int type = id.cellType(); + float CMNoise(0); + switch(type){ + case 0: CMNoise = FullCell_CMNoise_Mean[idSKIROC]; break; + case 1: CMNoise = CalibPad_CMNoise[idSKIROC]; break; + case 2: CMNoise = HalfCell_CMNoise[idSKIROC]; break; + case 3: CMNoise = MB_CMNoise[idSKIROC]; break; + case 4: CMNoise = OuterCalibPad_CMNoise[idSKIROC]; break; + case 5: CMNoise = MergedCell_CMNoise[idSKIROC]; break; + default: CMNoise = 0; break; + }; + + return CMNoise; +} + +float +RecHitCommonMode::getGaussCommonModeNoise(int idSKIROC, int type) +{ + if( type < 0 || type > 5){ + throw cms::Exception("InvalidCellType") << "Invalid cell type: " << type; + } + + float CMNoise(0); + switch(type){ + case 0: CMNoise = FullCell_CMNoise_Fit[idSKIROC]; break; + case 1: CMNoise = CalibPad_CMNoise[idSKIROC]; break; + case 2: CMNoise = HalfCell_CMNoise[idSKIROC]; break; + case 3: CMNoise = MB_CMNoise[idSKIROC]; break; + case 4: CMNoise = FullCell_CMNoise_Fit[idSKIROC]; break; + case 5: CMNoise = MergedCell_CMNoise[idSKIROC]; break; + default: CMNoise = 0; break; + }; + + return CMNoise; +} + +float +RecHitCommonMode::getMeanCommonModeNoise(int idSKIROC, int type) +{ + if( type < 0 || type > 5){ + throw cms::Exception("InvalidCellType") << "Invalid cell type: " << type; + } + float CMNoise(0); + switch(type){ + case 0: CMNoise = FullCell_CMNoise_Mean[idSKIROC]; break; + case 1: CMNoise = CalibPad_CMNoise[idSKIROC]; break; + case 2: CMNoise = HalfCell_CMNoise[idSKIROC]; break; + case 3: CMNoise = MB_CMNoise[idSKIROC]; break; + case 4: CMNoise = OuterCalibPad_CMNoise[idSKIROC]; break; + case 5: CMNoise = MergedCell_CMNoise[idSKIROC]; break; + default: CMNoise = 0; break; + }; + + return CMNoise; +} + + + + + + + diff --git a/test_cfg.py b/test_cfg.py index 4f17fa3..54101bc 100644 --- a/test_cfg.py +++ b/test_cfg.py @@ -123,7 +123,7 @@ # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Digi.root"%(options.outputFolder,options.runType,options.runNumber))) -elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5): +elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5 or options.chainSequence == 6): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco.root") ) #process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Layer.root") ) @@ -153,5 +153,8 @@ process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 6): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_cm_correction) + process.end = cms.EndPath(process.output) From 13a3f3c218f41393417abd9ae13817a74afe6afa Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 18 Oct 2016 11:41:38 +0200 Subject: [PATCH 023/297] bug fix in Layer_Sum_Analyzer --- Reco/plugins/Layer_Sum_Analyzer.cc | 107 +++++++++++++++++++---------- 1 file changed, 71 insertions(+), 36 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 0e28b16..e70f113 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -69,13 +69,15 @@ double X0depth_8L_conf1[16] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0.}; double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0.}; double weights2GeV = 1.e-03; +double MIP2GeV_sim = 52.81e-06; double weights2MIP = 52.8/63.6; // rescale weights from mean to MPV //double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights //double LayerSumWeight = 1.; -const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum +//const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum +const int CMTHRESHOLD = 2;// anything less than this value is added to the commonmode sum // applied to all layers sum after commonmode subtraction and the ADC to MIP conversion const double ALLCELLS_THRESHOLD = 50.; @@ -124,7 +126,8 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzermake(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); - h_sum_layer_AbsW[layer] = fs->make(Form("sumAll_Layer%d_AbsW", layer+1), "", 40010, -10, 40000); - h_Seed_layer_AbsW[layer] = fs->make(Form("h_Seed_layer%d_AbsW",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_AbsW[layer] = fs->make(Form("sum7_Layer%d_AbsW", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_AbsW[layer] = fs->make(Form("sum19_Layer%d_AbsW", layer+1), "", 40010, -10, 40000); + h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); + h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 40000); + h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); + + h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); + h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 40010, -10, 40000); + h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); h_x_layer[layer] = fs->make(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); @@ -190,12 +199,19 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_sum_all->Sumw2(); h_seven_all->Sumw2(); h_nineteen_all->Sumw2(); - h_sum_all_AbsW = fs->make("h_sumAll_AllLayers_AbsW", "", 40010, -10, 40000); - h_seven_all_AbsW = fs->make("h_sum7_AllLayers_AbsW", "", 40010, -10, 40000); - h_nineteen_all_AbsW = fs->make("h_sum19_AllLayers_AbsW", "", 40010, -10, 40000); - h_sum_all_AbsW->Sumw2(); - h_seven_all_AbsW->Sumw2(); - h_nineteen_all_AbsW->Sumw2(); + h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 40000); + h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 40000); + h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 40000); + h_sum_all_AbsW_Mip->Sumw2(); + h_seven_all_AbsW_Mip->Sumw2(); + h_nineteen_all_AbsW_Mip->Sumw2(); + + h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 40010, -10, 40000); + h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 40010, -10, 40000); + h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 40010, -10, 40000); + h_sum_all_AbsW_GeV->Sumw2(); + h_seven_all_AbsW_GeV->Sumw2(); + h_nineteen_all_AbsW_GeV->Sumw2(); HighGain_LowGain_2D = fs->make("h2_HGvsLG", "", 4000, 0, 4000, 4000, 0, 4000); Energy_LowGain_2D = fs->make("h2_EvsLG", "", 4000, 0, 4000, 4000, 0, 4000); @@ -317,7 +333,7 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu max_y[n_layer] = CellCentreXY.second; } - if((Rechit.energy()) / ADCtoMIP[n_skiroc] <= CMTHRESHOLD) { + if((Rechit.energy()) / ADCtoMIP[n_layer] <= CMTHRESHOLD) { commonmode[n_skiroc] += Rechit.energy(); cm_num[n_skiroc]++; } @@ -358,7 +374,7 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu int eLayer = (Rechit1.id()).layer()-1; int eCellType = (Rechit1.id()).cellType(); - int eSkiroc = eid.iskiroc() - 1; + //int eSkiroc = eid.iskiroc() - 1; //getting X and Y coordinates @@ -371,8 +387,8 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu radius[eLayer] = sqrt( pow(CellCentreXY.first - max_x[eLayer], 2) + pow(CellCentreXY.second - max_y[eLayer], 2) ); - float energyCMsub = (Rechit1.energy() - commonmode[eSkiroc]) / ADCtoMIP[eSkiroc]; - if(eCellType == 1) energyCMsub = (Rechit1.energy()) / ADCtoMIP[eSkiroc]; + float energyCMsub = (Rechit1.energy() - commonmode[eLayer]) / ADCtoMIP[eLayer]; + if(eCellType == 1) energyCMsub = (Rechit1.energy()) / ADCtoMIP[eLayer]; // std::cout << "val = " << commonmode[eSkiroc] << std::endl; if(energyCMsub > CMTHRESHOLD){ allcells_sum[eLayer] += energyCMsub; @@ -411,10 +427,15 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float E19SumL_R = 0.; float EAllSumL_R = 0.; - float E1SumL_AbsW = 0.; - float E7SumL_AbsW = 0.; - float E19SumL_AbsW = 0.; - float EAllSumL_AbsW = 0.; + float E1SumL_AbsW_Mip = 0.; + float E7SumL_AbsW_Mip = 0.; + float E19SumL_AbsW_Mip = 0.; + float EAllSumL_AbsW_Mip = 0.; + + float E1SumL_AbsW_GeV = 0.; + float E7SumL_AbsW_GeV = 0.; + float E19SumL_AbsW_GeV = 0.; + float EAllSumL_AbsW_GeV = 0.; for(int iL=0; iLFill(allcells_sum[iL]); @@ -422,15 +443,20 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_layer_seven[iL]->Fill(sevencells_sum[iL]); h_layer_nineteen[iL]->Fill(nineteencells_sum[iL]); - float layerE1 = seedEnergy[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); - float layerE7 = sevencells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); - float layerE19 = nineteencells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); - float layerEAll = allcells_sum[iL] * (ADCtoMIP[iL] * weights2GeV * weights2MIP * Weights_L[iL] + 1.); + float layerE1_Mip = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE7_Mip = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE19_Mip = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerEAll_Mip = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + + float layerE1_GeV = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE7_GeV = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE19_GeV = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerEAll_GeV = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); - h_sum_layer_AbsW[iL]->Fill(layerEAll); - h_Seed_layer_AbsW[iL]->Fill(layerE1); - h_layer_seven_AbsW[iL]->Fill(layerE7); - h_layer_nineteen_AbsW[iL]->Fill(layerE19); + h_sum_layer_AbsW_Mip[iL]->Fill(layerEAll_Mip); + h_Seed_layer_AbsW_Mip[iL]->Fill(layerE1_Mip); + h_layer_seven_AbsW_Mip[iL]->Fill(layerE7_Mip); + h_layer_nineteen_AbsW_Mip[iL]->Fill(layerE19_Mip); tp_E1_vs_layer->Fill(iL+1, seedEnergy[iL]); tp_E7_vs_layer->Fill(iL+1, sevencells_sum[iL]); @@ -456,10 +482,15 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu E19SumL_R += nineteencells_sum[iL]; EAllSumL_R += allcells_sum[iL]; - E1SumL_AbsW += layerE1; - E7SumL_AbsW += layerE7; - E19SumL_AbsW += layerE19; - EAllSumL_AbsW += layerEAll; + E1SumL_AbsW_Mip += layerE1_Mip; + E7SumL_AbsW_Mip += layerE7_Mip; + E19SumL_AbsW_Mip += layerE19_Mip; + EAllSumL_AbsW_Mip += layerEAll_Mip; + + E1SumL_AbsW_GeV += layerE1_GeV; + E7SumL_AbsW_GeV += layerE7_GeV; + E19SumL_AbsW_GeV += layerE19_GeV; + EAllSumL_AbsW_GeV += layerEAll_GeV; } @@ -473,9 +504,13 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_seven_all->Fill(E7SumL_R); h_nineteen_all->Fill(E19SumL_R); - h_sum_all_AbsW->Fill(EAllSumL_AbsW); - h_seven_all_AbsW->Fill(E7SumL_AbsW); - h_nineteen_all_AbsW->Fill(E19SumL_AbsW); + h_sum_all_AbsW_Mip->Fill(EAllSumL_AbsW_Mip); + h_seven_all_AbsW_Mip->Fill(E7SumL_AbsW_Mip); + h_nineteen_all_AbsW_Mip->Fill(E19SumL_AbsW_Mip); + + h_sum_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); + h_seven_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); + h_nineteen_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); } }// analyze ends here From e6a65005555d139def9df21fed5613deac8f8ab3 Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 18 Oct 2016 11:42:30 +0200 Subject: [PATCH 024/297] configuration for recHit producer HG LG switch --- Reco/plugins/HGCalTBRecHitProducer.cc | 15 +++++++++++++-- Reco/plugins/HGCalTBRecHitProducer.h | 1 + Reco/python/hgcaltbrechitproducer_cfi.py | 4 +++- test_cfg_newEB.py | 4 ++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index 5f65c58..85ed06b 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -9,12 +9,22 @@ HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) _gainsLow_filename(cfg.getParameter("gainLow")), _gainsHigh_filename(cfg.getParameter("gainHigh")), _adcSaturation(cfg.getParameter("adcSaturation")), - _LG2HG_value(cfg.getParameter >("LG2HG_CERN")), - _mapFile(cfg.getParameter("mapFile")) + //_LG2HG_value(cfg.getParameter >("LG2HG_CERN")), + //_mapFile(cfg.getParameter("mapFile")), + _layers_config(cfg.getParameter("layers_config")) { produces (outputCollectionName); // std::cout << " >>> _LG2HG_value size = " << _LG2HG_value.size() << std::endl; + if(_layers_config == 0){ + _LG2HG_value = cfg.getParameter >("LG2HG_FNAL"); + _mapFile = cfg.getParameter("mapFile_FNAL"); + } + else{ + _LG2HG_value = cfg.getParameter >("LG2HG_CERN"); + _mapFile = cfg.getParameter("mapFile_CERN"); + } + HGCalCondObjectTextIO io(0); edm::FileInPath fip(_mapFile); if (!io.load(fip.fullPath(), essource_.emap_)) { @@ -82,6 +92,7 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS uint32_t EID = essource_.emap_.detId2eid(recHit.id()); HGCalTBElectronicsId eid(EID); + energy = ( energyHigh < _adcSaturation ) ? energyHigh : energyLow * _LG2HG_value.at(eid.iskiroc() - 1); recHit.setEnergy(energy); diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 961df11..2a9a9c1 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -45,6 +45,7 @@ class HGCalTBRecHitProducer : public edm::EDProducer int _adcSaturation; std::vector _LG2HG_value; std::string _mapFile; + int _layers_config; struct { HGCalElectronicsMap emap_; } essource_; diff --git a/Reco/python/hgcaltbrechitproducer_cfi.py b/Reco/python/hgcaltbrechitproducer_cfi.py index a58371a..8fba7a1 100644 --- a/Reco/python/hgcaltbrechitproducer_cfi.py +++ b/Reco/python/hgcaltbrechitproducer_cfi.py @@ -10,5 +10,7 @@ LG2HG_CERN = cms.vdouble(10.2, 10.2, 10., 10., 9.8, 8.8, 9.7, 9.7, 9.7, 9.7, 9.8, 9.8, 9.8, 9.8, 9.2, 9.2), LG2HG_FNAL = cms.vdouble(1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.), adcSaturation = cms.int32(1800), - mapFile = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt') + mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), + mapFile_FNAL = cms.string(''), + layers_config = cms.int32(-1) ) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index f685714..4547c49 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -144,12 +144,16 @@ if(options.configuration == "-1"): process.LayerSumAnalyzer.layers_config = cms.int32(-1) + process.hgcaltbrechits.layers_config = cms.int32(-1) elif(options.configuration == "0"): process.LayerSumAnalyzer.layers_config = cms.int32(0) + process.hgcaltbrechits.layers_config = cms.int32(0) elif(options.configuration == "1"): process.LayerSumAnalyzer.layers_config = cms.int32(1) + process.hgcaltbrechits.layers_config = cms.int32(1) elif(options.configuration == "2"): process.LayerSumAnalyzer.layers_config = cms.int32(2) + process.hgcaltbrechits.layers_config = cms.int32(2) ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) From b9e9a5de221e042ddc89ef103171258ba2137b44 Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 18 Oct 2016 11:53:24 +0200 Subject: [PATCH 025/297] configuration for electronic map from python --- Reco/plugins/Layer_Sum_Analyzer.cc | 6 +++++- Reco/python/hgcaltbrechitplotter_cfi.py | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index e70f113..774d621 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -112,7 +112,7 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer> CellXY; std::pair CellCentreXY; @@ -238,9 +238,11 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) Weights_L[iL] = LayerWeight_16L_FNAL[iL]; X0_L[iL] = X0depth_16L_FNAL[iL]; ADCtoMIP[iL] = ADCtoMIP_FNAL[iL]; + mapfile_ = iConfig.getParameter("mapFile_FNAL"); } else{ ADCtoMIP[iL] = ADCtoMIP_CERN[iL]; + mapfile_ = iConfig.getParameter("mapFile_CERN"); if(layers_config_ == 1){ Weights_L[iL] = LayerWeight_8L_conf1[iL]; X0_L[iL] = X0depth_8L_conf1[iL]; @@ -257,6 +259,8 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) } + + }//constructor ends here diff --git a/Reco/python/hgcaltbrechitplotter_cfi.py b/Reco/python/hgcaltbrechitplotter_cfi.py index 9d0f7bd..6b71de0 100644 --- a/Reco/python/hgcaltbrechitplotter_cfi.py +++ b/Reco/python/hgcaltbrechitplotter_cfi.py @@ -34,5 +34,7 @@ LayerSumAnalyzer = cms.EDAnalyzer("Layer_Sum_Analyzer", HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), - layers_config = cms.int32(-1) + layers_config = cms.int32(-1), + mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), + mapFile_FNAL = cms.string('') ) From aa44cc31861169e29a8f756fe9b1b79ee79ef67b Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 19 Oct 2016 16:58:19 +0200 Subject: [PATCH 026/297] fix from Rajdeep --- Reco/plugins/Layer_Sum_Analyzer.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 774d621..c7a4c08 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -40,7 +40,6 @@ #include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" #include "HGCal/Geometry/interface/HGCalTBCellParameters.h" -#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" // chooses which particle to look at. Inverts threshold filtering. // if nothing is selected, electrons are the default @@ -504,18 +503,19 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu tp_E7oSumL_vs_layer->Fill(iL, sevencells_sum[iL]/E7SumL_R); tp_E19oSumL_vs_layer->Fill(iL, nineteencells_sum[iL]/E19SumL_R); } - h_sum_all->Fill(EAllSumL_R); - h_seven_all->Fill(E7SumL_R); - h_nineteen_all->Fill(E19SumL_R); - - h_sum_all_AbsW_Mip->Fill(EAllSumL_AbsW_Mip); - h_seven_all_AbsW_Mip->Fill(E7SumL_AbsW_Mip); - h_nineteen_all_AbsW_Mip->Fill(E19SumL_AbsW_Mip); - - h_sum_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); - h_seven_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); - h_nineteen_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); } + h_sum_all->Fill(EAllSumL_R); + h_seven_all->Fill(E7SumL_R); + h_nineteen_all->Fill(E19SumL_R); + + h_sum_all_AbsW_Mip->Fill(EAllSumL_AbsW_Mip); + h_seven_all_AbsW_Mip->Fill(E7SumL_AbsW_Mip); + h_nineteen_all_AbsW_Mip->Fill(E19SumL_AbsW_Mip); + + h_sum_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); + h_seven_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); + h_nineteen_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); + }// analyze ends here From 8fa73e8cdf1d9b3737985585cef0c039d62320ba Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 26 Oct 2016 14:03:34 +0200 Subject: [PATCH 027/297] bug fix in energy units for weights --- Reco/plugins/Layer_Sum_Analyzer.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index c7a4c08..1e1011d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -451,9 +451,9 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float layerE19_Mip = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); float layerEAll_Mip = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE1_GeV = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE7_GeV = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE19_GeV = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE1_GeV = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE7_GeV = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE19_GeV = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); float layerEAll_GeV = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); h_sum_layer_AbsW_Mip[iL]->Fill(layerEAll_Mip); From b98ac17014d4d0ab2da92e4b024d6aa712fbd028 Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 26 Oct 2016 14:03:34 +0200 Subject: [PATCH 028/297] bug fix in energy units for weights --- Reco/plugins/Layer_Sum_Analyzer.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index c7a4c08..1e1011d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -451,9 +451,9 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float layerE19_Mip = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); float layerEAll_Mip = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE1_GeV = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE7_GeV = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); - float layerE19_GeV = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE1_GeV = seedEnergy[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE7_GeV = sevencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE19_GeV = nineteencells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); float layerEAll_GeV = allcells_sum[iL] * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); h_sum_layer_AbsW_Mip[iL]->Fill(layerEAll_Mip); From 9a548326c662ab377e870eac55eecec9c316a9d3 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 08:55:29 +0200 Subject: [PATCH 029/297] further fixes --- Reco/plugins/Layer_Sum_Analyzer.cc | 33 +++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 1e1011d..909611d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -168,15 +168,15 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_layer_seven[layer] = fs->make(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); - h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); - h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); + h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); + h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 4.e6); + h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 4.e6); + h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); - h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); - h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); + h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); + h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 5100, -10, 500); + h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 5100, -10, 500); + h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); h_x_layer[layer] = fs->make(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); @@ -198,16 +198,16 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_sum_all->Sumw2(); h_seven_all->Sumw2(); h_nineteen_all->Sumw2(); - h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 40000); - h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 40000); - h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 40000); + h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); + h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); + h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); h_sum_all_AbsW_Mip->Sumw2(); h_seven_all_AbsW_Mip->Sumw2(); h_nineteen_all_AbsW_Mip->Sumw2(); - h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 40010, -10, 40000); - h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 40010, -10, 40000); - h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 40010, -10, 40000); + h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 5100, -10, 500); + h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 5100, -10, 500); + h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 5100, -10, 500); h_sum_all_AbsW_GeV->Sumw2(); h_seven_all_AbsW_GeV->Sumw2(); h_nineteen_all_AbsW_GeV->Sumw2(); @@ -460,6 +460,11 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_Seed_layer_AbsW_Mip[iL]->Fill(layerE1_Mip); h_layer_seven_AbsW_Mip[iL]->Fill(layerE7_Mip); h_layer_nineteen_AbsW_Mip[iL]->Fill(layerE19_Mip); + + h_sum_layer_AbsW_GeV[iL]->Fill(layerEAll_GeV); + h_Seed_layer_AbsW_GeV[iL]->Fill(layerE1_GeV); + h_layer_seven_AbsW_GeV[iL]->Fill(layerE7_GeV); + h_layer_nineteen_AbsW_GeV[iL]->Fill(layerE19_GeV); tp_E1_vs_layer->Fill(iL+1, seedEnergy[iL]); tp_E7_vs_layer->Fill(iL+1, sevencells_sum[iL]); From f670742be0cb6abcbb4e1eb827a1d5136b3a8c30 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 09:00:48 +0200 Subject: [PATCH 030/297] new cfg for rearranged --- test_cfg_newEB.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 4547c49..81403af 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -8,13 +8,14 @@ options.register('dataFolder', #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' - 'tmpOut/', + #'/tmp/amartell/rearrangedTxtFiles/', + '/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') options.register('outputFolder', - '/tmp/', + '/tmp/amartell/output/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') @@ -102,13 +103,14 @@ process.load('HGCal.StandardSequences.LocalReco_cff') process.load('HGCal.StandardSequences.dqm_cff') +#print "root://eoscms.cern.ch//eos/cms/%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file - #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXE fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED nSpills=cms.untracked.uint32(options.nSpills), -) + ) From 783d115138cd48f4b2a61066adfaba27d9b3243f Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 09:02:22 +0200 Subject: [PATCH 031/297] new .txt --- README.txt | 10 ++++++---- test_cfg_newEB.py | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.txt b/README.txt index ed188ec..c725354 100644 --- a/README.txt +++ b/README.txt @@ -52,11 +52,13 @@ cmsRun test_cfg.py >> /dev/null ** new event-based reco ** sh scripts/rearrangeTxtFile.sh input.txt - >> need fix to rearrange HGCRun type. Produce output.txt - -cmsRun test_cfg_newEB.py nSpills=9 chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun + >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ + +cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun >> chainSequence=6 to run Layer_Sum_Analyzer >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs - >> test_cfg_newEB.py to be fixed when rearrangeTxtFile.sh works properly + >> test_cfg_newEB.py to load the reqarranged .txt: + -> mount eos + -> options.register('dataFolder','~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',.... diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 81403af..815f048 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -9,7 +9,8 @@ #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' #'/tmp/amartell/rearrangedTxtFiles/', - '/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + #'/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') From fc0ca185aa1c43c5bafe708ec79585f8c138af70 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 08:55:29 +0200 Subject: [PATCH 032/297] further fixes --- Reco/plugins/Layer_Sum_Analyzer.cc | 33 +++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 1e1011d..909611d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -168,15 +168,15 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_layer_seven[layer] = fs->make(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); - h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); - h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 40000); + h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); + h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 4.e6); + h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 4.e6); + h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); - h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); - h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 40010, -10, 40000); + h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); + h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 5100, -10, 500); + h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 5100, -10, 500); + h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); h_x_layer[layer] = fs->make(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); @@ -198,16 +198,16 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_sum_all->Sumw2(); h_seven_all->Sumw2(); h_nineteen_all->Sumw2(); - h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 40000); - h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 40000); - h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 40000); + h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); + h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); + h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); h_sum_all_AbsW_Mip->Sumw2(); h_seven_all_AbsW_Mip->Sumw2(); h_nineteen_all_AbsW_Mip->Sumw2(); - h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 40010, -10, 40000); - h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 40010, -10, 40000); - h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 40010, -10, 40000); + h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 5100, -10, 500); + h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 5100, -10, 500); + h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 5100, -10, 500); h_sum_all_AbsW_GeV->Sumw2(); h_seven_all_AbsW_GeV->Sumw2(); h_nineteen_all_AbsW_GeV->Sumw2(); @@ -460,6 +460,11 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_Seed_layer_AbsW_Mip[iL]->Fill(layerE1_Mip); h_layer_seven_AbsW_Mip[iL]->Fill(layerE7_Mip); h_layer_nineteen_AbsW_Mip[iL]->Fill(layerE19_Mip); + + h_sum_layer_AbsW_GeV[iL]->Fill(layerEAll_GeV); + h_Seed_layer_AbsW_GeV[iL]->Fill(layerE1_GeV); + h_layer_seven_AbsW_GeV[iL]->Fill(layerE7_GeV); + h_layer_nineteen_AbsW_GeV[iL]->Fill(layerE19_GeV); tp_E1_vs_layer->Fill(iL+1, seedEnergy[iL]); tp_E7_vs_layer->Fill(iL+1, sevencells_sum[iL]); From 4a83174d6d01a1609cffd5b0cea2bc2627f83af0 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 09:02:22 +0200 Subject: [PATCH 033/297] conflict solved --- README.txt | 10 ++++++---- test_cfg_newEB.py | 4 +--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.txt b/README.txt index ed188ec..c725354 100644 --- a/README.txt +++ b/README.txt @@ -52,11 +52,13 @@ cmsRun test_cfg.py >> /dev/null ** new event-based reco ** sh scripts/rearrangeTxtFile.sh input.txt - >> need fix to rearrange HGCRun type. Produce output.txt - -cmsRun test_cfg_newEB.py nSpills=9 chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun + >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ + +cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun >> chainSequence=6 to run Layer_Sum_Analyzer >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs - >> test_cfg_newEB.py to be fixed when rearrangeTxtFile.sh works properly + >> test_cfg_newEB.py to load the reqarranged .txt: + -> mount eos + -> options.register('dataFolder','~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',.... diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 4547c49..52999c5 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,9 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', - #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' - 'tmpOut/', + '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') From ed16d0c846b8c5dd473e98c43ccb6acdf204d7ef Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sat, 29 Oct 2016 18:57:45 +0200 Subject: [PATCH 034/297] Updated README, bug fixes for the event display code to work with the event builder, included Kai-Yu's modification to RecHitPlotter_HighGain_Correlation_CM.cc which is to be run for pedestal runs for noise studies and calibration runs with Pions and muons to evaluate ADC->MIP from fitting single cell Rechits, Finally chainsequences in test_cfg_newEB.py rearreanged 4-> Event Display 5->RecHitPlotter_HighGain_Correlation_CM and 6-> Layer_Sum_Analyzer --- README.txt | 5 +- .../RecHitPlotter_HighGain_Correlation_CM.cc | 462 ++++++++++++++---- Reco/plugins/RecHitPlotter_HighGain_New.cc | 248 ++-------- test_cfg_newEB.py | 13 +- 4 files changed, 445 insertions(+), 283 deletions(-) diff --git a/README.txt b/README.txt index c725354..788cc5c 100644 --- a/README.txt +++ b/README.txt @@ -55,7 +55,10 @@ sh scripts/rearrangeTxtFile.sh input.txt >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun - >> chainSequence=6 to run Layer_Sum_Analyzer + >> chainSequence=1 Runs on Digis produces pedestal files in the path specifienfied under pedestalsHighGain and pedestalsLowGain + >> chainSequence=4 Runs event Display analyzer + >> chainSequence=5 Runs on Recos for each cell of the detector across layers. Use for pion, muon and pedestal run. Correlation across cells as implemented by Kai-Yu are evaluated. + >> chainSequence=6 to run Layer_Sum_Analyzer: Evaluates for each layer as well as summed across layers: Max hit, Max hit + 6 nearest neighbours(7 cells), 19 cells and All cells --- WITH EACH CELL PICKED SUBJECT TO A 2 MIP CUT. Results are available considering only the energy deposited in Silicon, and with dE/dx weights to recover the total energy deposited in the absorbers and the silicon sensors. >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs >> test_cfg_newEB.py to load the reqarranged .txt: diff --git a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc index 7aac108..6aa3fc9 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc @@ -94,18 +94,48 @@ class RecHitPlotter_HighGain_Correlation_CM : public edm::one::EDAnalyzermake(name, title, 2048, 0, 2048, 8000, -4000, 4000); for(int ILayer = 0; ILayer < MAXLAYERS; ILayer++) { - sprintf(name, "Full_Cell_Layer_%i", ILayer); - sprintf(title, "Full Cell Layer %i", ILayer); - Full_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Half_Cell_Layer_%i", ILayer); - sprintf(title, "Half Cell Layer %i", ILayer); - Half_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "MB_Cell_Layer_%i", ILayer); - sprintf(title, "MB Cell Layer %i", ILayer); - MB_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Calib_Pads_Layer_%i", ILayer); - sprintf(title, "Calib Pads Layer %i", ILayer); - Calib_Pads[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Merged_Cell_Layer_%i", ILayer); - sprintf(title, "Merged Cell Layer %i", ILayer); - Merged_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); + for(int ISkiroc=1;ISkiroc<3;++ISkiroc){ + //printf("ISkiroc=%d\n",ISkiroc); + sprintf(name, "HighGainCommonModeVsCellArea_%i", ILayer+1); + sprintf(title, "HighGainCommonMode Noise Vs CellArea Layer %i", ILayer+1); + h_Correlation_CellArea[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 1.5); + h_Correlation_CellArea[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Area[cm^{2}]"); + h_Correlation_CellArea[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + h_Correlation_CellArea[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "HighGainCommonModeVsCellPerimeter_%i", ILayer+1); + sprintf(title, "HighGainCommonMode Noise Vs CellPerimeter Layer %i", ILayer+1); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 5.); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Perimeter[cm]"); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "LowGainCommonModeVsCellArea_%i", ILayer+1); + sprintf(title, "LowgainCommonMode Noise Vs CellArea Layer %i", ILayer+1); + l_Correlation_CellArea[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 1.5); + l_Correlation_CellArea[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Area[cm^{2}]"); + l_Correlation_CellArea[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + l_Correlation_CellArea[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "LowGainCommonModeVsCellPerimeter_%i", ILayer+1); + sprintf(title, "LoGainCommonMode Noise Vs CellPerimeter Layer %i", ILayer+1); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 5.); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Perimeter[cm]"); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "H_Full_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Full Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Full_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Half_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Half Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Half_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_MB_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_MB Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_MB_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Calib_Pads_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Calib Pads Layer %i Ski %d", ILayer+1,ISkiroc); + h_Calib_Pads[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Merged_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Merged Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Merged_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + + sprintf(name, "L_Full_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Full Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Full_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Half_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Half Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Half_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_MB_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_MB Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_MB_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Calib_Pads_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Calib Pads Layer %i Ski %d", ILayer+1,ISkiroc); + l_Calib_Pads[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Merged_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Merged Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Merged_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + } for(int ISkiroc = 1; ISkiroc <= MAXSKIROCS; ISkiroc++) { for(int Channel = 0; Channel < 64; Channel++) { - sprintf(name, "Ski_%i_Channel_%i_Layer_%i", ISkiroc, Channel, ILayer); - sprintf(title, "Ski %i Channel %i Layer %i", ISkiroc, Channel, ILayer); + sprintf(name, "Ski_%i_Channel_%i_Layer_%i", ISkiroc, Channel, ILayer+1); + sprintf(title, "Ski %i Channel %i Layer %i", ISkiroc, Channel, ILayer+1); h_digi_layer_channel[ISkiroc - 1][Channel][ILayer] = fs->make(name, title, 1000, -500., 500.); /* sprintf(name, "Ski_%i_Channel_%i_CM",ISkiroc,Channel); @@ -160,8 +237,59 @@ RecHitPlotter_HighGain_Correlation_CM::RecHitPlotter_HighGain_Correlation_CM(con */ } } + sprintf(name,"h_pre_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"h_pre_CM_correlation_Layer%d",ILayer+1); + h_pre_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + h_pre_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + h_pre_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"h_post_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"h_post_CM_correlation_Layer%d",ILayer+1); + h_post_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + h_post_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + h_post_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_pre_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"l_pre_CM_correlation_Layer%d",ILayer+1); + l_pre_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + l_pre_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + l_pre_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_post_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"l_post_CM_correlation_Layer%d",ILayer+1); + l_post_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + l_post_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + l_post_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + //sprintf(name,"h_post_CM_correlation_Layer%d_C",ILayer+1); + //sprintf(title,"h_post_CM_correlation_Layer%d_C",ILayer+1); + //l_pre_CM_Final_Compare[ILayer] = fs->make(name,title, 128, 0, 127, 128, 0 ,127); + //l_pre_CM_Final_Compare[ILayer] -> GetXaxis()-> SetTitle("Channel"); + //l_pre_CM_Final_Compare[ILayer] -> GetYaxis()-> SetTitle("Channel"); } - + sprintf(name,"h_pre_CM_correlation_AllLayers"); + sprintf(title,"h_pre_CM_correlation_AllLayers"); + h_pre_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + h_pre_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + h_pre_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"h_post_CM_correlation_AllLayers"); + sprintf(title,"h_post_CM_correlation_AllLayers"); + h_post_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + h_post_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + h_post_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_pre_CM_correlation_AllLayers"); + sprintf(title,"l_pre_CM_correlation_AllLayers"); + l_pre_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + l_pre_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + l_pre_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_post_CM_correlation_AllLayers"); + sprintf(title,"l_post_CM_correlation_AllLayers"); + l_post_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + l_post_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + l_post_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); }//contructor ends here @@ -182,7 +310,6 @@ RecHitPlotter_HighGain_Correlation_CM::~RecHitPlotter_HighGain_Correlation_CM() void RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const edm::EventSetup& setup) { - using namespace edm; edm::Handle Rechits; @@ -190,91 +317,124 @@ RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const ed edm::Handle Rechits1; event.getByToken(HGCalTBRecHitCollection_, Rechits1); - double Average_Pedestal_Per_Event_Full[MAXLAYERS] = {0}; - int Cell_counter[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Half[MAXLAYERS] = {0}; - int Cell_counter_Half[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_MB[MAXLAYERS] = {0}; - int Cell_counter_MB[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Calib_Pad[MAXLAYERS] = {0}; - int Cell_counter_Calib_Pad[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Merged_Cell[MAXLAYERS] = {0}; - int Cell_counter_Merged_Cell[MAXLAYERS] = {0}; + double h_Average_Pedestal_Per_Event_Full[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Full[2][MAXLAYERS] = {{0}}; + int Cell_counter[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Half[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Half[2][MAXLAYERS] = {{0}}; + int Cell_counter_Half[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_MB[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_MB[2][MAXLAYERS] = {{0}}; + int Cell_counter_MB[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Calib_Pad[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Calib_Pad[2][MAXLAYERS] = {{0}}; + int Cell_counter_Calib_Pad[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Merged_Cell[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Merged_Cell[2][MAXLAYERS] = {{0}}; + int Cell_counter_Merged_Cell[2][MAXLAYERS] = {{0}}; for(auto RecHit1 : *Rechits1) { CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit1.id()).layer(), (RecHit1.id()).sensorIU(), (RecHit1.id()).sensorIV(), (RecHit1.id()).iu(), (RecHit1.id()).iv(), sensorsize); uint32_t EID = essource_.emap_.detId2eid(RecHit1.id()); HGCalTBElectronicsId eid(EID); -// if((eid.iskiroc()%2 == 1) && (eid.ichan() == 0 || eid.ichan() == 1 )) continue; -// double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; -// double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); -// Cell_counter++; -// Average_Pedestal_Per_Event_Full += RecHit1.energyHigh(); - if(RecHit1.energyHigh() > 32.) continue; + if(RecHit1.energyHigh() > 30) continue; if((RecHit1.id()).cellType() == 0) { -// Full_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Full[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if((RecHit1.id()).cellType() == 2) { -// Half_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Half[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Half[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if(((RecHit1.id()).cellType() == 3) && ( ((RecHit1.id()).iu() == 4 && (RecHit1.id()).iv() == 3) || ((RecHit1.id()).iu() == -7 && (RecHit1.id()).iv() == 4) || ((RecHit1.id()).iu() == 7 && (RecHit1.id()).iv() == -3) || ((RecHit1.id()).iu() == -4 && (RecHit1.id()).iv() == -3) )) { -// MB_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_MB[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_MB[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if(((RecHit1.id()).cellType() == 3) && (((RecHit1.id()).iu() == -4 && (RecHit1.id()).iv() == 6) || ((RecHit1.id()).iu() == -2 && (RecHit1.id()).iv() == 6) || ((RecHit1.id()).iu() == 4 && (RecHit1.id()).iv() == -7) || ((RecHit1.id()).iu() == 2 && (RecHit1.id()).iv() == -6))) { -// Merged_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Merged_Cell[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Merged_Cell[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if((RecHit1.id()).cellType() == 1) { -// Calib_Pads[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Calib_Pad[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Calib_Pad[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + Cell_counter[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Full[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Full[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if((RecHit1.id()).cellType() == 2) { + Cell_counter_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if(((RecHit1.id()).cellType() == 3)){ + Cell_counter_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if(((RecHit1.id()).cellType() == 5)) { + Cell_counter_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if((RecHit1.id()).cellType() == 1) { + Cell_counter_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); } } for(int iii = 0; iii < MAXLAYERS; iii++) { - if(Cell_counter[iii] != 0) Full_Cell[iii]->Fill(Average_Pedestal_Per_Event_Full[iii] / Cell_counter[iii]); - if(Cell_counter_Half[iii] != 0) Half_Cell[iii]->Fill(Average_Pedestal_Per_Event_Half[iii] / Cell_counter_Half[iii]); - if(Cell_counter_MB[iii] != 0) MB_Cell[iii]->Fill(Average_Pedestal_Per_Event_MB[iii] / Cell_counter_MB[iii]); - if(Cell_counter_Merged_Cell[iii] != 0) Merged_Cell[iii]->Fill(Average_Pedestal_Per_Event_Merged_Cell[iii] / Cell_counter_Merged_Cell[iii]); - if(Cell_counter_Calib_Pad[iii] != 0) Calib_Pads[iii]->Fill(Average_Pedestal_Per_Event_Calib_Pad[iii] / Cell_counter_Calib_Pad[iii]); -// cout<Fill(h_Average_Pedestal_Per_Event_Full[ISkiroc][iii] / Cell_counter[ISkiroc][iii]); + if(Cell_counter_Half[ISkiroc][iii] != 0) h_Half_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Half[ISkiroc][iii] / Cell_counter_Half[ISkiroc][iii]); + if(Cell_counter_MB[ISkiroc][iii] != 0) h_MB_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_MB[ISkiroc][iii] / Cell_counter_MB[ISkiroc][iii]); + if(Cell_counter_Merged_Cell[ISkiroc][iii] != 0) h_Merged_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Merged_Cell[ISkiroc][iii] / Cell_counter_Merged_Cell[ISkiroc][iii]); + if(Cell_counter_Calib_Pad[ISkiroc][iii] != 0) h_Calib_Pads[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Calib_Pad[ISkiroc][iii] / Cell_counter_Calib_Pad[ISkiroc][iii]); + + if(Cell_counter[ISkiroc][iii] != 0) l_Full_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Full[ISkiroc][iii] / Cell_counter[ISkiroc][iii]); + if(Cell_counter_Half[ISkiroc][iii] != 0) l_Half_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Half[ISkiroc][iii] / Cell_counter_Half[ISkiroc][iii]); + if(Cell_counter_MB[ISkiroc][iii] != 0) l_MB_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_MB[ISkiroc][iii] / Cell_counter_MB[ISkiroc][iii]); + if(Cell_counter_Merged_Cell[ISkiroc][iii] != 0) l_Merged_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Merged_Cell[ISkiroc][iii] / Cell_counter_Merged_Cell[ISkiroc][iii]); + if(Cell_counter_Calib_Pad[ISkiroc][iii] != 0) l_Calib_Pads[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Calib_Pad[ISkiroc][iii] / Cell_counter_Calib_Pad[ISkiroc][iii]); + } } for(auto RecHit : *Rechits) { -// if(RecHit.energyHigh() > 32.) continue; if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); -// double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; -// double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); uint32_t EID = essource_.emap_.detId2eid(RecHit.id()); HGCalTBElectronicsId eid(EID); -// TF1* Fit2= (TF1*) h_digi_layer_channel[eid.iskiroc()-1][eid.ichan()]->GetFunction("gaus"); + + if((RecHit.id()).layer() - 1 != pre_Layer){ + if((RecHit.id()).layer() - 1 != 0) Eventnumber=Eventnumber_1; + else Eventnumber_1=Eventnumber; + } + if(!doCommonMode_CM) { h_digi_layer_channel[eid.iskiroc() - 1][eid.ichan()][(RecHit.id()).layer() - 1]->Fill(RecHit.energyHigh()); Noise_2D_Profile->Fill((64 * (eid.iskiroc() - 1) + eid.ichan()), RecHit.energyHigh()); } if(doCommonMode_CM) { AllCells_Ped->Fill(RecHit.energyHigh()); -// cout<Fill(1.579, h_Merged_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(1.09, h_Full_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.978, h_MB_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.545, h_Half_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.15, h_Calib_Pads[ISkiroc][iii]->GetRMS()); + + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(5.972, h_Merged_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.894, h_Full_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.47, h_Half_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(4.156, h_MB_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(1.44, h_Calib_Pads[ISkiroc][iii]->GetRMS()); + + l_Correlation_CellArea[ISkiroc][iii]->Fill(1.579, l_Merged_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(1.09, l_Full_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.978, l_MB_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.545, l_Half_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.15, l_Calib_Pads[ISkiroc][iii]->GetRMS()); + + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(5.972, l_Merged_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.894, l_Full_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.47, l_Half_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(4.156, l_MB_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(1.44, l_Calib_Pads[ISkiroc][iii]->GetRMS()); + } + } + + printf("Eventnumber=%d\n",Eventnumber); + + /* //=========================One Layer Correlation======================== + for(int layer=0;layer<8;layer++){ + if(Eventnumber==0)break; + for(int ChX=0;ChX<128;ChX++){ + // Calculate_Correlation-> Reset(); + for(int ChY=ChX;ChY<128;ChY++){ + double sumxy=0,sumx=0,sumy=0,sumx2=0,sumy2=0; + double correlation=0; + for(int Event=0;EventFill(h_p_Channel[ChX][Event][layer],h_p_Channel[ChY][Event][layer]); + //Calculate_Correlation2->Fill(l_p_Channel[ChX][Event][layer],l_p_Channel[ChY][Event][layer]); + Calculate_Correlation3->Fill(h_A_Channel[ChX][Event][layer],h_A_Channel[ChY][Event][layer]); + //Calculate_Correlation4->Fill(l_A_Channel[ChX][Event][layer],l_A_Channel[ChY][Event][layer]); + + sumxy += h_A_Channel[ChX][Event][layer]*h_A_Channel[ChY][Event][layer]; + sumx += h_A_Channel[ChX][Event][layer]; + sumy += h_A_Channel[ChY][Event][layer]; + sumx2 += pow(h_A_Channel[ChX][Event][layer],2); + sumy2 += pow(h_A_Channel[ChY][Event][layer],2); + } + correlation=((Eventnumber*sumxy)-(sumx*sumy))/(sqrt((Eventnumber*sumx2)-(sumx*sumx))*sqrt((Eventnumber*sumy2)-(sumy*sumy))); + + //h_pre_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation1-> GetCorrelationFactor()); + //l_pre_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation2-> GetCorrelationFactor()); + l_pre_CM_Final_Compare[layer]->Fill(ChX,ChY,correlation); + h_post_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation3-> GetCorrelationFactor()); + //l_post_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation4-> GetCorrelationFactor()); + if(ChX!=ChY){ + //h_pre_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation1-> GetCorrelationFactor()); + //l_pre_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation2-> GetCorrelationFactor()); + l_pre_CM_Final_Compare[layer]->Fill(ChY,ChX,correlation); + h_post_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation3-> GetCorrelationFactor()); + //l_post_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation4-> GetCorrelationFactor()); + } + //printf("[%d][%d][%d]=%lf\n",ChX,ChY,layer,Calculate_Correlation1-> GetCorrelationFactor()); + //Calculate_Correlation1-> Reset(); + //Calculate_Correlation2-> Reset(); + Calculate_Correlation3-> Reset(); + //Calculate_Correlation4-> Reset(); + } + printf("Finish Channel[%d] Layer[%d]\n",ChX,layer+1); + } + } + //==========================================================================*/ + + //=========================All Layers Correlation=========================== + for(int layer=0;layer<8;++layer){ + if(Eventnumber==0)break; + for(int ChX=0;ChX<128;++ChX){ + // Calculate_Correlation-> Reset(); + for(int layer2=layer;layer2<8;++layer2){ + for(int ChY=ChX;ChY<128;ChY++){ + double sumxy[4]={0},sumx[4]={0},sumy[4]={0},sumx2[4]={0},sumy2[4]={0},correlation[4]={0}; + for(int Event=0;EventFill(h_p_Channel[ChX][Event][layer],h_p_Channel[ChY][Event][layer2]); + //Calculate_Correlation2->Fill(l_p_Channel[ChX][Event][layer],l_p_Channel[ChY][Event][layer2]); + //Calculate_Correlation3->Fill(h_A_Channel[ChX][Event][layer],h_A_Channel[ChY][Event][layer2]); + //Calculate_Correlation4->Fill(l_A_Channel[ChX][Event][layer],l_A_Channel[ChY][Event][layer2]); + for(int type=0;type<4;++type){ + sumxy[type] += ADC_Channel[type][ChX][Event][layer]*ADC_Channel[type][ChY][Event][layer2]; + sumx[type] += ADC_Channel[type][ChX][Event][layer]; + sumy[type] += ADC_Channel[type][ChY][Event][layer2]; + sumx2[type] += pow(ADC_Channel[type][ChX][Event][layer],2); + sumy2[type] += pow(ADC_Channel[type][ChY][Event][layer2],2); + } + } + for(int type=0;type<4;++type){ + correlation[type]=((Eventnumber*sumxy[type])-(sumx[type]*sumy[type]))/(sqrt((Eventnumber*sumx2[type])-(sumx[type]*sumx[type]))*sqrt((Eventnumber*sumy2[type])-(sumy[type]*sumy[type]))); + } + if(layer2==layer){ + h_pre_CM_Final[layer]->Fill(ChX,ChY,correlation[0]); + l_pre_CM_Final[layer]->Fill(ChX,ChY,correlation[1]); + h_post_CM_Final[layer]->Fill(ChX,ChY,correlation[2]); + l_post_CM_Final[layer]->Fill(ChX,ChY,correlation[3]); + if(ChX!=ChY){ + h_pre_CM_Final[layer]->Fill(ChY,ChX,correlation[0]); + l_pre_CM_Final[layer]->Fill(ChY,ChX,correlation[1]); + h_post_CM_Final[layer]->Fill(ChY,ChX,correlation[2]); + l_post_CM_Final[layer]->Fill(ChY,ChX,correlation[3]); + } + } + h_pre_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[3]); + if(ChX!=ChY){ + h_pre_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[3]); + } + if(layer2!=layer){ + h_pre_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[3]); + if(ChX!=ChY){ + h_pre_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[3]); + } + } + } + } + printf("Finish Channel[%d] Layer[%d]\n",ChX,layer+1); + } + } + //================================================================================================== } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ diff --git a/Reco/plugins/RecHitPlotter_HighGain_New.cc b/Reco/plugins/RecHitPlotter_HighGain_New.cc index 100a6f8..503770d 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_New.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_New.cc @@ -67,8 +67,7 @@ double Return_RMS(double mean_sq, double mean) return sqrt(mean_sq - mean * mean); } bool DoCommonMode = 1; -bool PED = 0; -bool UP = 1; +int Event_multiple = 1; edm::Service fs; class RecHitPlotter_HighGain_New : public edm::one::EDAnalyzer @@ -99,37 +98,9 @@ class RecHitPlotter_HighGain_New : public edm::one::EDAnalyzer CellCentreXY; std::vector>::const_iterator it; const static int NLAYERS = 1; - double Mean_SUM[128] = {0.}; - double Mean_SQ_SUM[128] = {0.}; - double Mean_PROD_SUM[128][128] = { {0.} }; - double Diff_IJ_SUM[128][128] = { {0.} }; - double Mean_i = 0.; - double Mean_j = 0.; - double RMS_i = 0.; - double RMS_j = 0.; - double Correlation = 0.; - double Covariance = 0.; - TH2F *Covar_hist; - TH2F *Correl_hist; - TH2F *DiffIJ_hist; -//TH2D *Covar_hist = new TH2D("Covar_hist","Covar_hist",nphistar_bins-1,phistar_var,nphistar_bins-1,phistar_var); -//TH2D *Correl_hist = new TH2D("Correl_hist","Correl_hist",nphistar_bins-1,phistar_var,nphistar_bins-1,phistar_var); - - int Sensor_Iu = 0; int Sensor_Iv = 0; - double ADC_Chan[128][9000]; - TH1F *h_RecHit_layer_summed[MAXLAYERS]; - TH1F* Sum_Cluster_ADC; - TH1F* Sum_Cluster_Max; - TH1F* AllCells_Ped; - TH1F* AllCells_CM; - TProfile* SKI1_Ped_Event; - TProfile* SKI2_Ped_Event; - TH1F* CG_X; - TH1F* CG_Y; char name[50], title[50]; - double ExtrapolateZ = 20.;// distance along Z the tracks are extrapolated by(in cm) to hit the first layer. }; // @@ -148,25 +119,6 @@ RecHitPlotter_HighGain_New::RecHitPlotter_HighGain_New(const edm::ParameterSet& //now do what ever initialization is needed HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); //Booking 2 "hexagonal" histograms to display the sum of Rechits and the Occupancy(Hit > 5 GeV) in 1 sensor in 1 layer. To include all layers soon. Also the 1D Rechits per cell in a sensor is booked here. - Covar_hist = fs->make("Covar_hist", "Covar_hist", 128, 0, 128, 128, 0, 128); - Correl_hist = fs->make("Correl_hist", "Correl_hist", 128, 0, 128, 128, 0, 128); - DiffIJ_hist = fs->make("DiffIJ_hist", "DiffIJ_hist", 128, 0, 128, 128, 0, 128); - CG_X = fs->make("CG_X", "CG X[cm]", 100, -5, 5); - CG_Y = fs->make("CG_Y", "CG Y[cm]", 100, -5, 5); - AllCells_Ped = fs->make("AllCells_Ped", "AllCells_Ped", 500, -250, 250); - AllCells_CM = fs->make("AllCells_CM", "AllCells_CM", 500, -250, 250); - SKI1_Ped_Event = fs->make("SKI1_Ped_Event", "Profile per event of pedestal for SKI1", 5000, 1, 5000, 0, 400); - SKI2_Ped_Event = fs->make("SKI2_Ped_Event", "Profile per event of pedestal for SKI2", 5000, 1, 5000, 0, 400); - Sum_Cluster_ADC = fs->make("Sum_Cluster_ADC", "Sum_Cluster_ADC", 1000, -4000., 4000.); - Sum_Cluster_Max = fs->make("Sum_Cluster_Max", "Sum_Cluster_Max", 1000, -4000., 4000.); - for(int nlayers = 0; nlayers < MAXLAYERS; nlayers++) { - sprintf(name, "FullLayer_RecHits_Layer%i_Summed", nlayers + 1); - sprintf(title, "Sum of RecHits Layer%i Summed over the cells", nlayers + 1); - h_RecHit_layer_summed[nlayers] = fs->make(name, title, 4000, -2000., 2000.); - h_RecHit_layer_summed[nlayers]->GetXaxis()->SetTitle("RecHits[GeV]"); - }//loop over layers end here - - }//contructor ends here @@ -219,12 +171,8 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet edm::Handle Rechits1; event.getByToken(HGCalTBRecHitCollection_, Rechits1); - double Average_Pedestal_Per_Event1_Full = 0, Average_Pedestal_Per_Event1_Half = 0, Average_Pedestal_Per_Event2_Full = 0, Average_Pedestal_Per_Event2_Half = 0; - int Cell_counter1_Full = 0, Cell_counter2_Full = 0, Cell_counter1_Half = 0, Cell_counter2_Half = 0; - double iux_Max = 0., iyy_Max = 0.; - int ADC_TMP = 0; - - int Sum_Cluster_Tmp = 0; + double Average_Pedestal_Per_Event_Full = 0, Average_Pedestal_Per_Event_Half = 0, Average_Pedestal_Per_Event_MB = 0, Average_Pedestal_Per_Event_Merged = 0; + int Cell_counter_Full = 0, Cell_counter_Half = 0, Cell_counter_MB = 0, Cell_counter_Merged = 0; /* for(auto Track : *Tracks) { @@ -234,100 +182,57 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet for(auto RecHit1 : *Rechits1) { CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit1.id()).layer(), (RecHit1.id()).sensorIU(), (RecHit1.id()).sensorIV(), (RecHit1.id()).iu(), (RecHit1.id()).iv(), sensorsize); - double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; - double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); - if((RecHit1.energyHigh() > ADC_TMP)) { - ADC_TMP = RecHit1.energyHigh(); - iux_Max = iux; - iyy_Max = iyy; - } - if(RecHit1.energyHigh() > 20.) continue; -// if(UP && fabs(iux - iux_Max) > 0. && fabs(iyy - iyy_Max) > 0. && RecHit1.energyHigh()< 2000000.){ - if(((RecHit1.id()).cellType() == 0) || ((RecHit1.id()).cellType() == 5)) { + if(RecHit1.energyHigh() > 30.) continue; - if(( iyy >= -0.25 )) { - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - } - - if((iyy <= -0.5)) { - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - } + if(((RecHit1.id()).cellType() == 0) || ((RecHit1.id()).cellType() == 4)) { - /* - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - */ - } + Cell_counter_Full++; + Average_Pedestal_Per_Event_Full += RecHit1.energyHigh(); - if(((RecHit1.id()).cellType() == 2) || ((RecHit1.id()).cellType() == 3) || ((RecHit1.id()).cellType() == 4) ) { - - if(((iyy >= -0.25 ))) { - Cell_counter1_Half++; - Average_Pedestal_Per_Event1_Half += RecHit1.energyHigh(); - } - if(((iyy <= -0.5))) { - Cell_counter2_Half++; - Average_Pedestal_Per_Event2_Half += RecHit1.energyHigh(); - } } -// } + if((RecHit1.id()).cellType() == 5) { + Cell_counter_Merged++; + Average_Pedestal_Per_Event_Merged += RecHit1.energyHigh(); + + } - if(!UP) { - if(((RecHit1.id()).cellType() == 0)) { + if((RecHit1.id()).cellType() == 3) { - if((iux <= -0.25 && iux >= -3.25) && (iyy <= -0.25 && iyy >= -5.25 ) && (RecHit1.id()).cellType() == 0) { - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - } + Cell_counter_MB++; + Average_Pedestal_Per_Event_MB += RecHit1.energyHigh(); - if((iux >= -0.25 && iux <= 3.25) && (iyy <= -0.25 && iyy >= -5.25 ) && (RecHit1.id()).cellType() == 0) { - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - } - } - - if(((RecHit1.id()).cellType() == 2) || ((RecHit1.id()).cellType() == 3) || ((RecHit1.id()).cellType() == 4) ) { + } - if((iux <= 0.25 && iyy >= -0.25 ) || (iux < -0.5) ) { - Cell_counter1_Half++; - Average_Pedestal_Per_Event1_Half += RecHit1.energyHigh(); - } - if((iux >= 0.25 && iyy <= -0.5) || (iux >= 0.5) ) { - Cell_counter2_Half++; - Average_Pedestal_Per_Event2_Half += RecHit1.energyHigh(); - } - } + if((RecHit1.id()).cellType() == 2) { + Cell_counter_Half++; + Average_Pedestal_Per_Event_Half += RecHit1.energyHigh(); + } - } - if(ADC_TMP > 50.) { - CG_X->Fill(iux_Max); - CG_Y->Fill(iyy_Max); - Sum_Cluster_Max->Fill(ADC_TMP); -// cout<SetName(name); + h_RecHit_layer[iLayer -1]->SetTitle(title); + InitTH2Poly(*h_RecHit_layer[iLayer -1]); + } } - TH2Poly *h_RecHit_layer[MAXLAYERS]; - int evId = event.id().event() - 1; - int iLayer = (evId % (MAXLAYERS * EVENTSPERSPILL)) / (EVENTSPERSPILL); - cout << endl << " iLayer= " << iLayer << endl; - h_RecHit_layer[iLayer] = fs->make(); - sprintf(name, "FullLayer_ADC%i_Layer%i_Event%i", 0, iLayer + 1, evId); - sprintf(title, "ADC counts in Layer%i", iLayer + 1); - h_RecHit_layer[iLayer]->SetName(name); - h_RecHit_layer[iLayer]->SetTitle(title); - InitTH2Poly(*h_RecHit_layer[iLayer]); + for(auto RecHit : *Rechits) { + if(((evId - 1)%Event_multiple) != 0) continue; + if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; int n_layer = (RecHit.id()).layer(); CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); @@ -335,76 +240,29 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); uint32_t EID = essource_.emap_.detId2eid(RecHit.id()); HGCalTBElectronicsId eid(EID); - AllCells_Ped->Fill(RecHit.energyHigh()); - if(RecHit.energyHigh() > 55) cout << endl << " Energy= " << RecHit.energyHigh() << " u= " << iux << " v= " << iyy << " event number= " << event.id().event() << endl; -// if((RecHit.id()).iu() == 4 && (RecHit.id()).iv() == 2) continue; if(!DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh()); + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy()); } - if(((RecHit.id()).cellType() == 0 ) || ((RecHit.id()).cellType() == 5) ) { - if((iyy >= -0.25 ) ) { - if(!PED && DoCommonMode) { - if((RecHit.id()).cellType() == 0) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))) ); - - } - Sum_Cluster_Tmp += (RecHit.energyHigh()); - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))); - } -// Sum_Cluster_ADC->Fill(RecHit.energyHigh()- (Average_Pedestal_Per_Event1_Full/(Cell_counter1_Full))); -// CG_X->Fill(iux); -// CG_Y->Fill(iyy); - } else if(( iyy < -0.50 )) { - if(!PED && DoCommonMode) { - if((RecHit.id()).cellType() == 0) h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))) ); - Sum_Cluster_Tmp += (RecHit.energyHigh()); - - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))); - } -// Sum_Cluster_ADC->Fill(RecHit.energyHigh()- (Average_Pedestal_Per_Event2_Full/(Cell_counter2_Full))); -// CG_X->Fill(iux); -// CG_Y->Fill(iyy); + else{//If Common mode subtraction is enabled + if(((RecHit.id()).cellType() == 0 ) || ((RecHit.id()).cellType() == 4) ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energy() - (Average_Pedestal_Per_Event_Full / (Cell_counter_Full))) ); } - } - if((RecHit.id()).cellType() == 1 ) { - if(!PED) h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh()); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh()); + if((RecHit.id()).cellType() == 1 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy()); } - } - if(((RecHit.id()).cellType() != 5) && ((RecHit.id()).cellType() != 1) && ((RecHit.id()).cellType() != 0)) { - if((iyy >= -0.25 ) ) { - if(!PED && DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / Cell_counter1_Half) ); - - } -// h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / Cell_counter1_Half)); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / (Cell_counter1_Half))); - } - } - if(( iyy < -0.50 )) { - if(!PED && DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / Cell_counter2_Half) ); - - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / Cell_counter2_Half)); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / (Cell_counter2_Half))); - } - } - - } - } - - if(Sum_Cluster_Tmp > 2. ) Sum_Cluster_ADC->Fill(Sum_Cluster_Tmp); + if((RecHit.id()).cellType() != 2 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Half / Cell_counter_Half) ); + } + if((RecHit.id()).cellType() != 3 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_MB/Cell_counter_MB) ); + } + if((RecHit.id()).cellType() != 5 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Merged/Cell_counter_Merged) ); + } + + }//else common mode condition + }//Rechits loop ends here }//analyze method ends here diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 52999c5..5fab182 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -132,11 +132,14 @@ # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Digi.root"%(options.outputFolder,options.runType,options.runNumber))) -elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5 or options.chainSequence == 6): +elif (options.chainSequence == 3): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Unpacker_Digi_Check.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 4): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_EventDisplay.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 5): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) -# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco.root") ) -#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Layer.root") ) -#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) +elif (options.chainSequence == 6): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) @@ -175,7 +178,7 @@ elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) elif (options.chainSequence == 6): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) From e677f5b7192cfe41d19a5f078ea2e74f345c279c Mon Sep 17 00:00:00 2001 From: vieri Date: Mon, 31 Oct 2016 15:09:46 +0100 Subject: [PATCH 035/297] inew analyzer for correlation studies --- .../plugins/Layer_Sum_Analyzer_Correlation.cc | 318 ++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 Reco/plugins/Layer_Sum_Analyzer_Correlation.cc diff --git a/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc b/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc new file mode 100644 index 0000000..c85e4b1 --- /dev/null +++ b/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc @@ -0,0 +1,318 @@ +/* Need full layer, 7 cell cluster, and 19 cell cluster histograms for each layer + * also need each for all layers summed + * use ADC to MIP conversion of 1 MIP = 10 ADC Counts */ + +/** + @Author: Ryan Quinn + 7 July 2016 + quinn@physics.umn.edu + + With modifications by + Shin-Shan Eiko Yu and Vieri Candelise +*/ + + + +// system include files +#include +#include +#include "TH2Poly.h" +#include "TProfile.h" +#include "TH1F.h" +#include "TF1.h" +#include +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" +#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + +// chooses which particle to look at. Inverts threshold filtering. +// if nothing is selected, electrons are the default + +double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +double ADCtoMIP[16] = {1.}; +double LayerWeight[16] = {1.}; +double LayerSumWeight = 1.; +const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum +const int LGCMTHRESHOLD =3; // common-mode noise for low-gain (need to be double checked, Eiko) + +// applied to all layers sum after commonmode subtraction and the ADC to MIP conversion +const double PION_ALLCELLS_THRESHOLD = 15.; +const double PION_7CELLS_THRESHOLD = -100.; +const double PION_19CELLS_THRESHOLD = -100.; + +const int NTYPES=6; +const int NCHIPS=2; +const int NCHANS=64; + +using namespace std; + +class Layer_Sum_Analyzer_Correlation : public edm::one::EDAnalyzer +{ + +public: + explicit Layer_Sum_Analyzer_Correlation(const edm::ParameterSet&); + ~Layer_Sum_Analyzer_Correlation(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + + bool ELECTRONS; + bool PIONS; + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + edm::EDGetToken HGCalTBRecHitCollection_; + struct { + HGCalElectronicsMap emap_; + } essource_; + string mapfile_ = "HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"; + int sensorsize = 128; + std::vector> CellXY; + std::pair CellCentreXY; + HGCalTBCellVertices TheCell; + double maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; + + // added by Eiko and Vieri + TH2F *HighGain_LowGain_2D_lct[MAXLAYERS][NCHIPS][NTYPES]; + TProfile *pf_HighGain_LowGain_2D_cmremoved_lct[MAXLAYERS][NCHIPS][NTYPES]; + TProfile *pf_HighGain_LowGain_2D_lcc[MAXLAYERS][NCHIPS][NCHANS]; + TProfile *pf_HighGain_LowGain_2D_cmremoved_lcc[MAXLAYERS][NCHIPS][NCHANS]; + + int SPILL = 0, EVENT = 0, LAYER = 0; + + map Time_Stamp; + map Delta_Time_Stamp; + double Time_Temp = 0.; +}; + + + +Layer_Sum_Analyzer_Correlation::Layer_Sum_Analyzer_Correlation(const edm::ParameterSet& iConfig) +{ + + // check if it's an electron or pion beam + if(iConfig.getParameter("particleType")=="electron") + { + ELECTRONS=true; + PIONS=false; + } + else if(iConfig.getParameter("particleType")=="pion") + { + ELECTRONS=false; + PIONS=true; + } + + if(ELECTRONS)std::cout << "running on electron sample" << std::endl; + if(PIONS)std::cout << "running on pion sample" << std::endl; + + // initialization + usesResource("TFileService"); + edm::Service fs; + HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + + //booking the histos + for(int layer = 0; layer < MAXLAYERS; layer++) { + stringstream name, sevenname, nineteenname, Xname, Yname, X_Y_name; + + for(int ik = 0; ik < NCHIPS; ik++){ + for(int ij= 0; ij < NCHANS; ij++){ + stringstream name3; + name3 << "pf_HighGain_LowGain_2D_lcc" << layer+1 << Form("%02i",ik+1) << Form("%02i",ij); + pf_HighGain_LowGain_2D_lcc[layer][ik][ij] = fs->make(name3.str().c_str(), name3.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_lcc[layer][ik][ij] -> Sumw2(); + stringstream name4; + name4 << "pf_HighGain_LowGain_2D_cmremoved_lcc" << layer+1 << Form("%02i",ik+1) << Form("%02i",ij); + pf_HighGain_LowGain_2D_cmremoved_lcc[layer][ik][ij] = fs->make(name4.str().c_str(), name4.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_cmremoved_lcc[layer][ik][ij] -> Sumw2(); + } // end of loop over channels, 0-63 + for(int im= 0; im < NTYPES; im++){ + stringstream name3; + name3 << "HighGain_LowGain_2D_lct" << layer+1 << Form("%02i",ik+1) << Form("%02i",im); + HighGain_LowGain_2D_lct[layer][ik][im] = fs->make(name3.str().c_str(), name3.str().c_str(),4000,0,4000,4000,0,4000); + HighGain_LowGain_2D_lct[layer][ik][im] -> Sumw2(); + + stringstream name4; + name4 << "pf_HighGain_LowGain_2D_cmremoved_lct" << layer+1 << Form("%02i",ik+1) << Form("%02i",im); + pf_HighGain_LowGain_2D_cmremoved_lct[layer][ik][im] = fs->make(name4.str().c_str(), name4.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_cmremoved_lct[layer][ik][im] -> Sumw2(); + + } // end of loop over types + } // end loop over skirocs + } // end of loop over layers +}//constructor ends here + +Layer_Sum_Analyzer_Correlation::~Layer_Sum_Analyzer_Correlation() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + +// ------------ method called for each event ------------ +void +Layer_Sum_Analyzer_Correlation::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + + + if(((event.id()).event() - 1) % (EVENTSPERSPILL * MAXLAYERS) == 0 && (event.id()).event() != 1) { + SPILL++; + } + LAYER = (((event.id()).event() - 1) / EVENTSPERSPILL) % MAXLAYERS; + EVENT = ((event.id()).event() - 1) % EVENTSPERSPILL + EVENTSPERSPILL * SPILL; + if(EVENT == 1) { + Time_Temp = event.time().value(); + Time_Stamp[EVENT] = Time_Temp; + Delta_Time_Stamp[EVENT] = 0.; + } else { + Time_Stamp[EVENT] = event.time().value(); + Delta_Time_Stamp[EVENT] = event.time().value() - Time_Temp; + Time_Temp = event.time().value(); + } + //opening Rechits + edm::Handle Rechits; + event.getByToken(HGCalTBRecHitCollection_, Rechits); + + // looping over each rechit to fill histogram + //bool FIRST(1); + double commonmode,max, max_x, max_y; + commonmode=max = max_x = max_y = 0.; + int cm_num=0; + + // added by Eiko for high/low gain + double commonmode_HG[MAXLAYERS][NCHIPS][NTYPES], commonmode_LG[MAXLAYERS][NCHIPS][NTYPES]; + int cm_num_HG[MAXLAYERS][NCHIPS][NTYPES]; + int cm_num_LG[MAXLAYERS][NCHIPS][NTYPES]; + + for(int il=0; ilFill(Rechit.energyLow(),Rechit.energyHigh()); + pf_HighGain_LowGain_2D_lcc[n_layer][skiroc_chip][chan]->Fill(Rechit.energyLow(),Rechit.energyHigh()); + + if((Rechit.id()).cellType() != 0) continue; + + if((Rechit.energyHigh()) / ADCtoMIP[LAYER] <= CMTHRESHOLD) { + commonmode_HG[n_layer][skiroc_chip][type] += Rechit.energyHigh(); + cm_num_HG[n_layer][skiroc_chip][type]++; + commonmode += Rechit.energyHigh(); + cm_num++; + } + if((Rechit.energyLow())/ADCtoMIP[LAYER] <= LGCMTHRESHOLD){ + commonmode_LG[n_layer][skiroc_chip][type] += Rechit.energyLow(); + cm_num_LG[n_layer][skiroc_chip][type]++; + } + }//Rechit loop ends here + + commonmode = cm_num ==0? 0: commonmode/cm_num; + for(int il=0; il Date: Tue, 1 Nov 2016 21:09:04 +0100 Subject: [PATCH 036/297] shower shapes and MIP systematics --- Reco/plugins/Layer_Sum_Analyzer.cc | 308 ++++++++++++++++------------ Reco/src/ShowerShape.cc | 316 +++++++++++++++++++++++++++++ 2 files changed, 499 insertions(+), 125 deletions(-) create mode 100644 Reco/src/ShowerShape.cc diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 909611d..557dac9 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -41,6 +41,9 @@ #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" #include "HGCal/Geometry/interface/HGCalTBCellParameters.h" + +#include "HGCal/Reco/src/ShowerShape.cc" + // chooses which particle to look at. Inverts threshold filtering. // if nothing is selected, electrons are the default const bool ELECTRONS(1);// uses > *CELLS_THRESHOLD @@ -49,11 +52,12 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD //double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; //double ADCtoMIP_CERN[16] = {17.32, 17.16, 16.45, 17.39, 17.75, 17.27, 16.55, 16.25, 17.52, 17.18, 17.10, 17.88, 15.87, 16.71, 16.92, 15.72}; +//double ADCtoMIP_CERN[16] = {17.287,16.9493,17.9461,16.5649,17.4171,17.5042,16.1005,16.4102, 1., 1., 1., 1., 1., 1., 1., 1.}; double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; double ADCtoMIP_FNAL[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; //double MIP2ParticleCalib = 1.3; // FNAL to proton 120GeV -double MIP2ParticleCalib = 1.06; // CERN to pion 125GeV +double MIP2ParticleCalib[16] = {56.29/53.83, 56.21/53.83, 56.28/53.83, 56.28/53.83, 56.33/53.83, 56.36/53.83, 56.42/53.83, 56.40/53.83, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN to pion 125GeV //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts //double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights @@ -69,7 +73,8 @@ double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.80 double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0.}; double weights2GeV = 1.e-03; double MIP2GeV_sim = 52.81e-06; -double weights2MIP = 52.8/63.6; // rescale weights from mean to MPV +//double weights2MIP = 52.8/63.6; // rescale weights from mean to MPV +double weights2MIP = 1.; // rescale weights from mean to MPV //double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights @@ -117,14 +122,23 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer CellCentreXY; HGCalTBTopology IsCellValid; HGCalTBCellVertices TheCell; - double maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; // <<< FIXME maxdist > HGCAL_TB_CELL::FULL_CELL_SIDE !! + double maxdist = (0.5 + sqrt(3) / 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; // <<< FIXME maxdist > HGCAL_TB_CELL::FULL_CELL_SIDE !! + double maxdist_secNB = (0.5 + sqrt(3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; + double maxdist_thirdNB = (0.5 + sqrt(3) * 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; double Weights_L[MAXLAYERS]; double X0_L[MAXLAYERS]; double ADCtoMIP[MAXLAYERS]; + double ADCtoMIPup[MAXLAYERS]; + double ADCtoMIPdw[MAXLAYERS]; - TH1F *h_CM_layer[MAXSKIROCS]; + + TH1F *h_CM_layer[MAXLAYERS]; TH1F *h_sum_layer[MAXLAYERS], *h_layer_seven[MAXLAYERS], *h_layer_nineteen[MAXLAYERS], *h_Seed_layer[MAXLAYERS]; + //systematic => MIP +/- 5% + TH1F *h_sum_layer_up[MAXLAYERS], *h_layer_seven_up[MAXLAYERS], *h_layer_nineteen_up[MAXLAYERS], *h_Seed_layer_up[MAXLAYERS]; + TH1F *h_sum_layer_dw[MAXLAYERS], *h_layer_seven_dw[MAXLAYERS], *h_layer_nineteen_dw[MAXLAYERS], *h_Seed_layer_dw[MAXLAYERS]; + //systematic => MIP +/- 5% TH1F *h_sum_layer_AbsW_Mip[MAXLAYERS], *h_layer_seven_AbsW_Mip[MAXLAYERS], *h_layer_nineteen_AbsW_Mip[MAXLAYERS], *h_Seed_layer_AbsW_Mip[MAXLAYERS]; TH1F *h_sum_layer_AbsW_GeV[MAXLAYERS], *h_layer_seven_AbsW_GeV[MAXLAYERS], *h_layer_nineteen_AbsW_GeV[MAXLAYERS], *h_Seed_layer_AbsW_GeV[MAXLAYERS]; TH1F *h_x_layer[MAXLAYERS], *h_y_layer[MAXLAYERS]; @@ -132,10 +146,16 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzermake(Form("h_CM_layer%d",layer+1), "", 5000, -500, 500); + h_sum_layer[layer] = fs->make(Form("sumAll_Layer%d", layer+1), "", 40010, -10, 40000); h_Seed_layer[layer] = fs->make(Form("h_Seed_layer%d",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); h_layer_seven[layer] = fs->make(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); - + //syst + h_sum_layer_up[layer] = fs->make(Form("sumAll_Layer%d_up", layer+1), "", 40010, -10, 40000); + h_Seed_layer_up[layer] = fs->make(Form("h_Seed_layer%d_up",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven_up[layer] = fs->make(Form("sum7_Layer%d_up", layer+1),"", 40010, -10, 40000); + h_layer_nineteen_up[layer] = fs->make(Form("sum19_Layer%d_up", layer+1), "", 40010, -10, 40000); + h_sum_layer_dw[layer] = fs->make(Form("sumAll_Layer%d_dw", layer+1), "", 40010, -10, 40000); + h_Seed_layer_dw[layer] = fs->make(Form("h_Seed_layer%d_dw",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); + h_layer_seven_dw[layer] = fs->make(Form("sum7_Layer%d_dw", layer+1),"", 40010, -10, 40000); + h_layer_nineteen_dw[layer] = fs->make(Form("sum19_Layer%d_dw", layer+1), "", 40010, -10, 40000); + // h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 4.e6); h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 4.e6); @@ -186,11 +217,16 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_E1oE19_layer[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d",layer+1), 5000, -5, 5); h_E7oE19_layer[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d",layer+1), 5000, -5, 5); h_Radius[layer] = fs->make(Form("h_Radius_layer%d",layer+1), Form("h_Radius_layer%d",layer+1), 5000, 0., 20.); + ///syst + h_E1oE7_layer_up[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d_up",layer+1), 5000, -5, 5); + h_E1oE19_layer_up[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d_up",layer+1), 5000, -5, 5); + h_E7oE19_layer_up[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d_up",layer+1), 5000, -5, 5); + h_E1oE7_layer_dw[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d_dw",layer+1), 5000, -5, 5); + h_E1oE19_layer_dw[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d_dw",layer+1), 5000, -5, 5); + h_E7oE19_layer_dw[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d_dw",layer+1), 5000, -5, 5); + // } - for(int ski=0; skimake(Form("h_CM_skiroc%d",ski+1), "", 5000, -500, 500); - } h_sum_all = fs->make("h_sumAll_AllLayers", "", 40010, -10, 40000); h_seven_all = fs->make("h_sum7_AllLayers", "", 40010, -10, 40000); @@ -198,6 +234,20 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_sum_all->Sumw2(); h_seven_all->Sumw2(); h_nineteen_all->Sumw2(); + ////////// + h_sum_all_up = fs->make("h_sumAll_AllLayers", "", 40010, -10, 40000); + h_seven_all_up = fs->make("h_sum7_AllLayers", "", 40010, -10, 40000); + h_nineteen_all_up = fs->make("h_sum19_AllLayers", "", 40010, -10, 40000); + h_sum_all_up->Sumw2(); + h_seven_all_up->Sumw2(); + h_nineteen_all_up->Sumw2(); + h_sum_all_dw = fs->make("h_sumAll_AllLayers_dw", "", 40010, -10, 40000); + h_seven_all_dw = fs->make("h_sum7_AllLayers_dw", "", 40010, -10, 40000); + h_nineteen_all_dw = fs->make("h_sum19_AllLayers_dw", "", 40010, -10, 40000); + h_sum_all_dw->Sumw2(); + h_seven_all_dw->Sumw2(); + h_nineteen_all_dw->Sumw2(); + h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); @@ -237,10 +287,14 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) Weights_L[iL] = LayerWeight_16L_FNAL[iL]; X0_L[iL] = X0depth_16L_FNAL[iL]; ADCtoMIP[iL] = ADCtoMIP_FNAL[iL]; + ADCtoMIPup[iL] = ADCtoMIP_FNAL[iL] * 1.05; + ADCtoMIPdw[iL] = ADCtoMIP_FNAL[iL] * 0.95; mapfile_ = iConfig.getParameter("mapFile_FNAL"); } else{ ADCtoMIP[iL] = ADCtoMIP_CERN[iL]; + ADCtoMIPup[iL] = ADCtoMIP_CERN[iL] * 1.05; + ADCtoMIPdw[iL] = ADCtoMIP_CERN[iL] * 0.95; mapfile_ = iConfig.getParameter("mapFile_CERN"); if(layers_config_ == 1){ Weights_L[iL] = LayerWeight_8L_conf1[iL]; @@ -295,15 +349,19 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu event.getByToken(HGCalTBRecHitCollection_, Rechits); // looping over each rechit to fill histogram - double commonmode[MAXSKIROCS]; - int cm_num[MAXSKIROCS]; - for(int iS=0; iS>> found commonmode = " << commonmode << std::endl; - - - for(int iS=0; iS>> found commonmode = " << commonmode << std::endl; - // looping over each rechit to fill histogram - double allcells_sum[MAXLAYERS], sevencells_sum[MAXLAYERS], nineteencells_sum[MAXLAYERS], radius[MAXLAYERS]; - double seedEnergy[MAXLAYERS]; - double x_tmp[MAXLAYERS], y_tmp[MAXLAYERS]; - int num[MAXLAYERS], sevennum[MAXLAYERS], nineteennum[MAXLAYERS]; for(int iL=0; iL> needed? - if(eCellType != 0 && eCellType != 1 && eCellType != 4) continue; - - // std::cout << Rechit1.energy() << std::endl; - - radius[eLayer] = sqrt( pow(CellCentreXY.first - max_x[eLayer], 2) + pow(CellCentreXY.second - max_y[eLayer], 2) ); - - float energyCMsub = (Rechit1.energy() - commonmode[eLayer]) / ADCtoMIP[eLayer]; - if(eCellType == 1) energyCMsub = (Rechit1.energy()) / ADCtoMIP[eLayer]; - // std::cout << "val = " << commonmode[eSkiroc] << std::endl; - if(energyCMsub > CMTHRESHOLD){ - allcells_sum[eLayer] += energyCMsub; - if(energyCMsub > seedEnergy[eLayer]) seedEnergy[eLayer] = energyCMsub; - } + commonmode[iL] = commonmode[iL]/cm_num[iL]; + commonmode_up[iL] = commonmode_up[iL]/cm_num_up[iL]; + commonmode_dw[iL] = commonmode_dw[iL]/cm_num_dw[iL]; - // countin all recHits even below CM threshold - num[eLayer]++; - - h_Radius[eLayer]->Fill(radius[eLayer]); - - //FIXME navigation to 7cells - if((radius[eLayer] < maxdist && sevennum[eLayer] < 7) && (energyCMsub > CMTHRESHOLD)){ - sevencells_sum[eLayer] += energyCMsub; - sevennum[eLayer]++; - } - - //FIXME navigation to 19cells - if((radius[eLayer] < 1.95 * maxdist && nineteennum[eLayer] < 19) && (energyCMsub > CMTHRESHOLD)){ -// nineteencells_sum += (LayerWeight[LAYER]*(Rechit1.energyHigh() - commonmode))/ ADCtoMIP[LAYER]; - nineteencells_sum[eLayer] += energyCMsub; - x_tmp[eLayer] += CellCentreXY.first * energyCMsub; - y_tmp[eLayer] += CellCentreXY.second * energyCMsub; - nineteennum[eLayer]++; - } + h_CM_layer[iL]->Fill(commonmode[iL]); } - for(int iS=0; iS +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" +#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + + +#include "TMatrixDSym.h" +#include "TMatrixDSymEigen.h" + +using namespace std; + + +class ShowerShape +{ + +public: + void init(); + + float e1By7(int layer) {return e1over7[layer]; }; + float e1By19(int layer) {return e1over19[layer]; }; + // float eMax(int layer) {return &maxE, float &maxX, float &maxY); + void getAllEnergy(int layer, float& en1, float& en7, float& en19, float& enAll) + {en1 = e1[layer]; en7 = e7[layer]; en19 = e19[layer]; enAll = eAll[layer]; return;} + void getPos(int layer, float& xtmp, float& ytmp) + {xtmp = xEnWeig19[layer]; ytmp = yEnWeig19[layer]; return;}; + + void logWeightedSpread(int layer, float &pox, float &poy) {pox = spreadx43[layer]; poy = spready43[layer]; return;}; + void logWeightedSqSpread19(int layer, float &spreadx, float &spready, float &spreadrad) + {spreadx = spreadx19[layer]; spready = spready19[layer]; spreadrad = spreadrad19[layer]; return;}; + void logWeightedPosition(int layer, float &posx, float &posy) + {posx = posx43[layer]; posy = posy43[layer]; return;}; + void logWeightedPosition19(int layer, float &posx, float &posy) + {posx = posx19[layer]; posy = posy19[layer]; return;}; + + void F7F19(int layer, float &F7, float &F19) {F7 = log(e6[layer]/e7[layer]); F19 = log(e7[layer]/e19[layer]); return;}; + + void eccentricity(int layer, float &ratio) {ratio = eccentr[layer]; return;}; + + ShowerShape(edm::Handle Rechits_, double ADCtoMIP_[MAXLAYERS], double commonmode_[MAXLAYERS], int CMTHRESHOLD, double maxE[MAXLAYERS], double maxX[MAXLAYERS], double maxY[MAXLAYERS]); + ~ShowerShape(); + + +private: + + // ----------member data --------------------------- + edm::Handle Rechits; + + int sensorsize = 128; + std::vector> CellXY; + std::pair CellCentreXY; + HGCalTBCellVertices TheCell; + //float maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; + // float maxdist = (0.5 + sqrt (3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; + double maxdist = (sqrt(3) / 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; // <<< FIXME maxdist > HGCAL_TB_CELL::FULL_CELL_SIDE !! + double maxdist_secNB = (0.5 + sqrt(3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; + double maxdist_thirdNB = (0.5 + sqrt(3) * 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; + double maxdist_fourthNB = (0.5 + sqrt(3) * 3.) * HGCAL_TB_CELL::FULL_CELL_SIDE; + + + double ADCtoMIP[MAXLAYERS]; + + double commonmode[MAXLAYERS]; + double maxE[MAXLAYERS], maxX[MAXLAYERS], maxY[MAXLAYERS]; + int CMTHRESHOLD; + + float e1over7[MAXLAYERS]; + float e1over19[MAXLAYERS]; + + float e1[MAXLAYERS]; + float e6[MAXLAYERS]; + float e7[MAXLAYERS]; + float e12[MAXLAYERS]; + float e19[MAXLAYERS]; + float e43[MAXLAYERS]; + float eAll[MAXLAYERS]; + + //energy weighted position + float xEnWeig19[MAXLAYERS]; + float yEnWeig19[MAXLAYERS]; + + //transvers profile log weighted spread and position + float spreadx43[MAXLAYERS]; + float spready43[MAXLAYERS]; + float posx43[MAXLAYERS]; + float posy43[MAXLAYERS]; + + ///in 19 crystals log weighted spread and position + float posx19[MAXLAYERS]; + float posy19[MAXLAYERS]; + float spreadx19[MAXLAYERS]; + float spready19[MAXLAYERS]; + float spreadrad19[MAXLAYERS]; + + //eccentricity + float eccentr[MAXLAYERS]; + +}; + + + +ShowerShape::ShowerShape(edm::Handle Rechits_, double ADCtoMIP_[MAXLAYERS], double commonmode_[MAXLAYERS], int CMTHRESHOLD_, + double maxE_[MAXLAYERS], double maxX_[MAXLAYERS], double maxY_[MAXLAYERS]) +{ + + Rechits = Rechits_; + CMTHRESHOLD = CMTHRESHOLD_; + for(int i=0; i CMTHRESHOLD) eAll[eLayer] += energyCMsub; + + if((radius < maxdist) && (energyCMsub > CMTHRESHOLD)){ + e1[eLayer] += energyCMsub; + ncell1[eLayer]++; + } + if((radius > maxdist && radius < maxdist_secNB) && (energyCMsub > CMTHRESHOLD)){ + e6[eLayer] += energyCMsub; + ++ncell6[eLayer]; + } + if((radius < maxdist_secNB) && (energyCMsub > CMTHRESHOLD)){ + e7[eLayer] += energyCMsub; + ncell7[eLayer]++; + } + if((radius > maxdist_secNB && radius < maxdist_thirdNB) && (energyCMsub > CMTHRESHOLD)){ + e12[eLayer] += energyCMsub; + ncell12[eLayer]++; + } + if((radius < maxdist_thirdNB) && (energyCMsub > CMTHRESHOLD)){ + e19[eLayer] += energyCMsub; + ncell19[eLayer]++; + } + + if((radius < maxdist_fourthNB) && (energyCMsub > CMTHRESHOLD)){ + e43[eLayer] += energyCMsub; + } + }//recHits + + + double w0 = 4.7; + for(auto Rechit1 : *Rechits){ + //getting X and Y coordinates + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit1.id()).layer(), (Rechit1.id()).sensorIU(), (Rechit1.id()).sensorIV(), (Rechit1.id()).iu(), (Rechit1.id()).iv(), sensorsize); + + int eLayer = (Rechit1.id()).layer()-1; + int eCellType = (Rechit1.id()).cellType(); + + if(eCellType != 0 && eCellType != 1 && eCellType != 4) continue; + + float energyCMsub = (Rechit1.energy() - commonmode[eLayer]) / ADCtoMIP[eLayer]; + if(eCellType == 1) energyCMsub = (Rechit1.energy()) / ADCtoMIP[eLayer]; + + radius = sqrt( pow(CellCentreXY.first - maxX[eLayer], 2) + pow(CellCentreXY.second - maxY[eLayer], 2) ); + + + double x = CellCentreXY.first; + double y = CellCentreXY.second; + if((radius < maxdist_fourthNB) && energyCMsub > CMTHRESHOLD){ + lposx43[eLayer] += (x) * TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + lposy43[eLayer] += (y) * TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + Dposx43[eLayer] += (x-maxX[eLayer]) * TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + Dposy43[eLayer] += (y-maxY[eLayer]) * TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + + eccx43[eLayer] += pow( (x-posx43[eLayer]),2 )*TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + eccy43[eLayer] += pow( (y-posy43[eLayer]),2 )*TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + eccxy43[eLayer] += (x-posx43[eLayer])*(y-posy43[eLayer])*TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + + deno43[eLayer] += TMath::Max(0., (log(energyCMsub/e43[eLayer]) + w0) ); + } // radius 4th ring + + if((radius < maxdist_thirdNB) && energyCMsub > CMTHRESHOLD){ + xEnWeig19[eLayer] += CellCentreXY.first * energyCMsub; + yEnWeig19[eLayer] += CellCentreXY.second * energyCMsub; + + lposx19[eLayer] += (x)*TMath::Max(0., (log(energyCMsub/e19[eLayer]) + w0) ); + lposy19[eLayer] += (y)*TMath::Max(0., (log(energyCMsub/e19[eLayer]) + w0) ); + Dposx19[eLayer] += (x-maxX[eLayer])*TMath::Max(0., (log(energyCMsub/e19[eLayer]) + w0) ); + Dposy19[eLayer] += (y-maxY[eLayer])*TMath::Max(0., (log(energyCMsub/e19[eLayer]) + w0) ); + deno19[eLayer] += TMath::Max(0., (log(energyCMsub/e19[eLayer]) + w0) ); + } // radius 3rd ring + + }//for(auto Rechit1 : *Rechits) + + + for(int iL=0; iL 1 ) std::cout << " Problem expected 1 cells found => " << ncell1[iL] << std::endl; + if(ncell6[iL] > 6) std::cout << " Problem expected 6 cells found => " << ncell6[iL] << std::endl; + if(ncell7[iL] > 7) std::cout << " Problem expected 7 cells found => " << ncell7[iL] << std::endl; + if(ncell12[iL] > 12) std::cout << " Problem expected 12 cells found => " << ncell12[iL] << std::endl; + if(ncell19[iL] > 19) std::cout << " Problem expected 19 cells found => " << ncell19[iL] << " in layer = " << iL << std::endl; + + + if(ncell7[iL] > 0) e1over7[iL] = maxE[iL]/e7[iL]; + else e1over7[iL] = -99.; + if(ncell19[iL] > 0) e1over19[iL] = maxE[iL]/e19[iL]; + else e1over19[iL] = -99.; + + posx19[iL] = lposx19[iL]/deno19[iL]; + posy19[iL] = lposy19[iL]/deno19[iL]; + posx43[iL] = lposx43[iL]/deno43[iL]; + posy43[iL] = lposy43[iL]/deno43[iL]; + + spreadx43[iL] = Dposx43[iL]/deno43[iL]; + spready43[iL] = Dposy43[iL]/deno43[iL]; + + spreadx19[iL] = Dposx19[iL]/deno19[iL]; + spready19[iL] = Dposy19[iL]/deno19[iL]; + spreadrad19[iL] = sqrt(spreadx19[iL] * spreadx19[iL] + spready19[iL] * spready19[iL]); + + + //eccentricy + const int N = 2; + double spread[N*N] = { + eccx43[iL], eccxy43[iL], + eccxy43[iL], eccy43[iL] }; + + TMatrixDSym m(N, spread); + TMatrixDSymEigen me(m); + + TVectorD eigenval = me.GetEigenValues(); + TMatrixD eigenvec = me.GetEigenVectors(); + + float e1 = eigenval[0]; + float e2 = eigenval[1]; + + eccentr[iL] = e1/e2; + //eigenval.Print(); + } +} +//DEFINE_FWK_MODULE(ShowerShape); From 58e24f2924383c16e871939bd1fa9b9d4184c0eb Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 1 Nov 2016 21:16:13 +0100 Subject: [PATCH 037/297] shower shapes and MIP systematics --- Reco/src/ShowerShape.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/Reco/src/ShowerShape.cc b/Reco/src/ShowerShape.cc index 25a2361..d0d05b7 100644 --- a/Reco/src/ShowerShape.cc +++ b/Reco/src/ShowerShape.cc @@ -313,4 +313,3 @@ void ShowerShape::init(){ //eigenval.Print(); } } -//DEFINE_FWK_MODULE(ShowerShape); From 7467e50849146b00491a6dd9d1c8b66819853358 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 3 Nov 2016 16:47:20 +0100 Subject: [PATCH 038/297] fixes for shapes --- Reco/plugins/Layer_Sum_Analyzer.cc | 419 +++++++++++++++-------------- Reco/src/ShowerShape.cc | 49 +++- 2 files changed, 250 insertions(+), 218 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 557dac9..56f94ad 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -57,7 +57,9 @@ double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16. double ADCtoMIP_FNAL[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; //double MIP2ParticleCalib = 1.3; // FNAL to proton 120GeV -double MIP2ParticleCalib[16] = {56.29/53.83, 56.21/53.83, 56.28/53.83, 56.28/53.83, 56.33/53.83, 56.36/53.83, 56.42/53.83, 56.40/53.83, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN to pion 125GeV +//500MeV muon/125GeV pion +double MIP2ParticleCalib[16] = {53.01/56.54, 53.47/56.42, 54.16/56.44, 54.17/56.19, 53.90/56.46, 53.97/56.31, 54.51/56.37, 55.43/56.09, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN to pion 125GeV +//double MIP2ParticleCalib[16] = {0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN to pion 125GeV //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts //double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights @@ -134,31 +136,31 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer MIP +/- 5% - TH1F *h_sum_layer_up[MAXLAYERS], *h_layer_seven_up[MAXLAYERS], *h_layer_nineteen_up[MAXLAYERS], *h_Seed_layer_up[MAXLAYERS]; - TH1F *h_sum_layer_dw[MAXLAYERS], *h_layer_seven_dw[MAXLAYERS], *h_layer_nineteen_dw[MAXLAYERS], *h_Seed_layer_dw[MAXLAYERS]; + TH1F *h_eAll_L_up[MAXLAYERS], *h_e7_L_up[MAXLAYERS], *h_e19_L_up[MAXLAYERS], *h_eMax_L_up[MAXLAYERS]; + TH1F *h_eAll_L_dw[MAXLAYERS], *h_e7_L_dw[MAXLAYERS], *h_e19_L_dw[MAXLAYERS], *h_eMax_L_dw[MAXLAYERS]; //systematic => MIP +/- 5% - TH1F *h_sum_layer_AbsW_Mip[MAXLAYERS], *h_layer_seven_AbsW_Mip[MAXLAYERS], *h_layer_nineteen_AbsW_Mip[MAXLAYERS], *h_Seed_layer_AbsW_Mip[MAXLAYERS]; - TH1F *h_sum_layer_AbsW_GeV[MAXLAYERS], *h_layer_seven_AbsW_GeV[MAXLAYERS], *h_layer_nineteen_AbsW_GeV[MAXLAYERS], *h_Seed_layer_AbsW_GeV[MAXLAYERS]; - TH1F *h_x_layer[MAXLAYERS], *h_y_layer[MAXLAYERS]; - TH2F *h_x_y_layer[MAXLAYERS]; + TH1F *h_eAll_L_AbsW_Mip[MAXLAYERS], *h_e7_L_AbsW_Mip[MAXLAYERS], *h_e19_L_AbsW_Mip[MAXLAYERS], *h_eMax_L_AbsW_Mip[MAXLAYERS]; + TH1F *h_eAll_L_AbsW_GeV[MAXLAYERS], *h_e7_L_AbsW_GeV[MAXLAYERS], *h_e19_L_AbsW_GeV[MAXLAYERS], *h_eMax_L_AbsW_GeV[MAXLAYERS]; + TH1F *h_x_L[MAXLAYERS], *h_y_L[MAXLAYERS]; + TH2F *h_x_y_L[MAXLAYERS]; TH1F* h_Radius[MAXLAYERS]; - TH1F *h_E1oE7_layer[MAXLAYERS], *h_E1oE19_layer[MAXLAYERS], *h_E7oE19_layer[MAXLAYERS]; - TH1F *h_E1oE7_layer_up[MAXLAYERS], *h_E1oE19_layer_up[MAXLAYERS], *h_E7oE19_layer_up[MAXLAYERS]; - TH1F *h_E1oE7_layer_dw[MAXLAYERS], *h_E1oE19_layer_dw[MAXLAYERS], *h_E7oE19_layer_dw[MAXLAYERS]; + TH1F *h_E1oE7_L[MAXLAYERS], *h_E1oE19_L[MAXLAYERS], *h_E7oE19_L[MAXLAYERS]; + TH1F *h_E1oE7_L_up[MAXLAYERS], *h_E1oE19_L_up[MAXLAYERS], *h_E7oE19_L_up[MAXLAYERS]; + TH1F *h_E1oE7_L_dw[MAXLAYERS], *h_E1oE19_L_dw[MAXLAYERS], *h_E7oE19_L_dw[MAXLAYERS]; - TH1F *h_sum_all, *h_seven_all, *h_nineteen_all; - TH1F *h_sum_all_up, *h_seven_all_up, *h_nineteen_all_up; - TH1F *h_sum_all_dw, *h_seven_all_dw, *h_nineteen_all_dw; + TH1F *h_eAll_all, *h_e7_all, *h_e19_all; + TH1F *h_eAll_all_up, *h_e7_all_up, *h_e19_all_up; + TH1F *h_eAll_all_dw, *h_e7_all_dw, *h_e19_all_dw; - TH1F *h_sum_all_AbsW_Mip, *h_seven_all_AbsW_Mip, *h_nineteen_all_AbsW_Mip; - TH1F *h_sum_all_AbsW_GeV, *h_seven_all_AbsW_GeV, *h_nineteen_all_AbsW_GeV; + TH1F *h_eAll_all_AbsW_Mip, *h_e7_all_AbsW_Mip, *h_e19_all_AbsW_Mip; + TH1F *h_eAll_all_AbsW_GeV, *h_e7_all_AbsW_GeV, *h_e19_all_AbsW_GeV; - TProfile *tp_E1_vs_layer, *tp_E7_vs_layer, *tp_E19_vs_layer; - TProfile *tp_E1oSumL_vs_layer, *tp_E7oSumL_vs_layer, *tp_E19oSumL_vs_layer; - TProfile *tp_E1oE7_vs_layer, *tp_E1oE19_vs_layer, *tp_E7oE19_vs_layer; + TProfile *tp_E1_vs_L, *tp_E7_vs_L, *tp_E19_vs_L; + TProfile *tp_E1oSumL_vs_L, *tp_E7oSumL_vs_L, *tp_E19oSumL_vs_L; + TProfile *tp_E1oE7_vs_L, *tp_E1oE19_vs_L, *tp_E7oE19_vs_L; TH2F *HighGain_LowGain_2D; TH2F *Energy_LowGain_2D; @@ -175,145 +177,146 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer fs; - HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); - layers_config_ = iConfig.getParameter("layers_config"); - - //booking the histos - for(int layer = 0; layer < MAXLAYERS; layer++) { - h_CM_layer[layer] = fs->make(Form("h_CM_layer%d",layer+1), "", 5000, -500, 500); - - h_sum_layer[layer] = fs->make(Form("sumAll_Layer%d", layer+1), "", 40010, -10, 40000); - h_Seed_layer[layer] = fs->make(Form("h_Seed_layer%d",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven[layer] = fs->make(Form("sum7_Layer%d", layer+1),"", 40010, -10, 40000); - h_layer_nineteen[layer] = fs->make(Form("sum19_Layer%d", layer+1), "", 40010, -10, 40000); - //syst - h_sum_layer_up[layer] = fs->make(Form("sumAll_Layer%d_up", layer+1), "", 40010, -10, 40000); - h_Seed_layer_up[layer] = fs->make(Form("h_Seed_layer%d_up",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_up[layer] = fs->make(Form("sum7_Layer%d_up", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_up[layer] = fs->make(Form("sum19_Layer%d_up", layer+1), "", 40010, -10, 40000); - h_sum_layer_dw[layer] = fs->make(Form("sumAll_Layer%d_dw", layer+1), "", 40010, -10, 40000); - h_Seed_layer_dw[layer] = fs->make(Form("h_Seed_layer%d_dw",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 40000); - h_layer_seven_dw[layer] = fs->make(Form("sum7_Layer%d_dw", layer+1),"", 40010, -10, 40000); - h_layer_nineteen_dw[layer] = fs->make(Form("sum19_Layer%d_dw", layer+1), "", 40010, -10, 40000); - // - h_sum_layer_AbsW_Mip[layer] = fs->make(Form("sumAll_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); - h_Seed_layer_AbsW_Mip[layer] = fs->make(Form("h_Seed_layer%d_AbsW_Mip",layer+1), Form("h_Seed_layer%d",layer+1), 40010, -10, 4.e6); - h_layer_seven_AbsW_Mip[layer] = fs->make(Form("sum7_Layer%d_AbsW_Mip", layer+1),"", 40010, -10, 4.e6); - h_layer_nineteen_AbsW_Mip[layer] = fs->make(Form("sum19_Layer%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); - - h_sum_layer_AbsW_GeV[layer] = fs->make(Form("sumAll_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); - h_Seed_layer_AbsW_GeV[layer] = fs->make(Form("h_Seed_layer%d_AbsW_GeV",layer+1), Form("h_Seed_layer%d",layer+1), 5100, -10, 500); - h_layer_seven_AbsW_GeV[layer] = fs->make(Form("sum7_Layer%d_AbsW_GeV", layer+1),"", 5100, -10, 500); - h_layer_nineteen_AbsW_GeV[layer] = fs->make(Form("sum19_Layer%d_AbsW_GeV", layer+1), "", 5100, -10, 500); - - h_x_layer[layer] = fs->make(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); - h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); - h_x_y_layer[layer] = fs->make(Form("YvsX_Layer%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); - - h_E1oE7_layer[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d",layer+1), 5000, -5, 5); - h_E1oE19_layer[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d",layer+1), 5000, -5, 5); - h_E7oE19_layer[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d",layer+1), 5000, -5, 5); - h_Radius[layer] = fs->make(Form("h_Radius_layer%d",layer+1), Form("h_Radius_layer%d",layer+1), 5000, 0., 20.); - ///syst - h_E1oE7_layer_up[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d_up",layer+1), 5000, -5, 5); - h_E1oE19_layer_up[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d_up",layer+1), 5000, -5, 5); - h_E7oE19_layer_up[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d_up",layer+1), 5000, -5, 5); - h_E1oE7_layer_dw[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d_dw",layer+1), 5000, -5, 5); - h_E1oE19_layer_dw[layer] = fs->make(Form("h_E1oE19_layer%d",layer+1), Form("h_E1oE19_layer%d_dw",layer+1), 5000, -5, 5); - h_E7oE19_layer_dw[layer] = fs->make(Form("h_E7oE19_layer%d",layer+1), Form("h_E7oE19_layer%d_dw",layer+1), 5000, -5, 5); - // - } - - - h_sum_all = fs->make("h_sumAll_AllLayers", "", 40010, -10, 40000); - h_seven_all = fs->make("h_sum7_AllLayers", "", 40010, -10, 40000); - h_nineteen_all = fs->make("h_sum19_AllLayers", "", 40010, -10, 40000); - h_sum_all->Sumw2(); - h_seven_all->Sumw2(); - h_nineteen_all->Sumw2(); - ////////// - h_sum_all_up = fs->make("h_sumAll_AllLayers", "", 40010, -10, 40000); - h_seven_all_up = fs->make("h_sum7_AllLayers", "", 40010, -10, 40000); - h_nineteen_all_up = fs->make("h_sum19_AllLayers", "", 40010, -10, 40000); - h_sum_all_up->Sumw2(); - h_seven_all_up->Sumw2(); - h_nineteen_all_up->Sumw2(); - h_sum_all_dw = fs->make("h_sumAll_AllLayers_dw", "", 40010, -10, 40000); - h_seven_all_dw = fs->make("h_sum7_AllLayers_dw", "", 40010, -10, 40000); - h_nineteen_all_dw = fs->make("h_sum19_AllLayers_dw", "", 40010, -10, 40000); - h_sum_all_dw->Sumw2(); - h_seven_all_dw->Sumw2(); - h_nineteen_all_dw->Sumw2(); - - h_sum_all_AbsW_Mip = fs->make("h_sumAll_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); - h_seven_all_AbsW_Mip = fs->make("h_sum7_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); - h_nineteen_all_AbsW_Mip = fs->make("h_sum19_AllLayers_AbsW_Mip", "", 40010, -10, 4.e6); - h_sum_all_AbsW_Mip->Sumw2(); - h_seven_all_AbsW_Mip->Sumw2(); - h_nineteen_all_AbsW_Mip->Sumw2(); - - h_sum_all_AbsW_GeV = fs->make("h_sumAll_AllLayers_AbsW_GeV", "", 5100, -10, 500); - h_seven_all_AbsW_GeV = fs->make("h_sum7_AllLayers_AbsW_GeV", "", 5100, -10, 500); - h_nineteen_all_AbsW_GeV = fs->make("h_sum19_AllLayers_AbsW_GeV", "", 5100, -10, 500); - h_sum_all_AbsW_GeV->Sumw2(); - h_seven_all_AbsW_GeV->Sumw2(); - h_nineteen_all_AbsW_GeV->Sumw2(); - - HighGain_LowGain_2D = fs->make("h2_HGvsLG", "", 4000, 0, 4000, 4000, 0, 4000); - Energy_LowGain_2D = fs->make("h2_EvsLG", "", 4000, 0, 4000, 4000, 0, 4000); - - tp_E1_vs_layer = fs->make("tp_E1_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7_vs_layer = fs->make("tp_E7_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E19_vs_layer = fs->make("tp_E19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oSumL_vs_layer = fs->make("tp_E1oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7oSumL_vs_layer = fs->make("tp_E7oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E19oSumL_vs_layer = fs->make("tp_E19oSumL_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oE7_vs_layer = fs->make("tp_E1oE7_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E1oE19_vs_layer = fs->make("tp_E1oE19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - tp_E7oE19_vs_layer = fs->make("tp_E7oE19_vs_layer", "", MAXLAYERS+1, 0, MAXLAYERS+1); - - - //loading the proper weights - if(MAXLAYERS != 8) { - std::cout << " update weights " << std::endl; - return; - } - - for(int iL=0; iL("mapFile_FNAL"); - } - else{ - ADCtoMIP[iL] = ADCtoMIP_CERN[iL]; - ADCtoMIPup[iL] = ADCtoMIP_CERN[iL] * 1.05; - ADCtoMIPdw[iL] = ADCtoMIP_CERN[iL] * 0.95; - mapfile_ = iConfig.getParameter("mapFile_CERN"); - if(layers_config_ == 1){ - Weights_L[iL] = LayerWeight_8L_conf1[iL]; - X0_L[iL] = X0depth_8L_conf1[iL]; - } - if(layers_config_ == 2){ - Weights_L[iL] = LayerWeight_8L_conf2[iL]; - X0_L[iL] = X0depth_8L_conf2[iL]; - } - if(layers_config_ == -1){ - Weights_L[iL] = 1.; - X0_L[iL] = 0.; - } - } - } - + // initialization + usesResource("TFileService"); + edm::Service fs; + HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + layers_config_ = iConfig.getParameter("layers_config"); + + //booking the histos + for(int layer = 0; layer < MAXLAYERS; layer++) { + h_CM_layer[layer] = fs->make(Form("h_CM_layer%d",layer+1), "", 5000, -500, 500); + + h_eAll_L[layer] = fs->make(Form("h_eAll_L%d", layer+1), "", 40010, -10, 40000); + h_eMax_L[layer] = fs->make(Form("h_eMax_L%d",layer+1), "", 40010, -10, 40000); + h_e7_L[layer] = fs->make(Form("h_e7_L%d", layer+1),"", 40010, -10, 40000); + h_e19_L[layer] = fs->make(Form("h_e19_L%d", layer+1), "", 40010, -10, 40000); + //syst + h_eAll_L_up[layer] = fs->make(Form("h_eAll_L%d_up", layer+1), "", 40010, -10, 40000); + h_eMax_L_up[layer] = fs->make(Form("h_eMax_L%d_up",layer+1), "", 40010, -10, 40000); + h_e7_L_up[layer] = fs->make(Form("h_e7_L%d_up", layer+1),"", 40010, -10, 40000); + h_e19_L_up[layer] = fs->make(Form("h_e19_L%d_up", layer+1), "", 40010, -10, 40000); + h_eAll_L_dw[layer] = fs->make(Form("h_eAll_L%d_dw", layer+1), "", 40010, -10, 40000); + h_eMax_L_dw[layer] = fs->make(Form("h_eMax_L%d_dw",layer+1), "", 40010, -10, 40000); + h_e7_L_dw[layer] = fs->make(Form("h_e7_L%d_dw", layer+1),"", 40010, -10, 40000); + h_e19_L_dw[layer] = fs->make(Form("h_e19_L%d_dw", layer+1), "", 40010, -10, 40000); + // + h_eAll_L_AbsW_Mip[layer] = fs->make(Form("h_eAll_L%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); + h_eMax_L_AbsW_Mip[layer] = fs->make(Form("h_eMax_L%d_AbsW_Mip",layer+1), "", 40010, -10, 4.e6); + h_e7_L_AbsW_Mip[layer] = fs->make(Form("h_e7_L%d_AbsW_Mip", layer+1),"", 40010, -10, 4.e6); + h_e19_L_AbsW_Mip[layer] = fs->make(Form("h_e19_L%d_AbsW_Mip", layer+1), "", 40010, -10, 4.e6); + + h_eAll_L_AbsW_GeV[layer] = fs->make(Form("h_eAll_L%d_AbsW_GeV", layer+1), "", 5100, -10, 500); + h_eMax_L_AbsW_GeV[layer] = fs->make(Form("h_eMax_L%d_AbsW_GeV",layer+1), "", 5100, -10, 500); + h_e7_L_AbsW_GeV[layer] = fs->make(Form("h_e7_L%d_AbsW_GeV", layer+1),"", 5100, -10, 500); + h_e19_L_AbsW_GeV[layer] = fs->make(Form("h_e19_L%d_AbsW_GeV", layer+1), "", 5100, -10, 500); + + h_x_L[layer] = fs->make(Form("X_L%d", layer+1), "", 2000, -10., 10. ); + h_y_L[layer] = fs->make(Form("Y_L%d", layer+1), "", 2000, -10., 10. ); + h_x_y_L[layer] = fs->make(Form("YvsX_L%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); + + h_E1oE7_L[layer] = fs->make(Form("h_E1oE7_L%d",layer+1), "", 5000, -5, 5); + h_E1oE19_L[layer] = fs->make(Form("h_E1oE19_L%d",layer+1), "", 5000, -5, 5); + h_E7oE19_L[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); + h_Radius[layer] = fs->make(Form("h_Radius_L%d",layer+1), "", 5000, 0., 20.); + ///syst + h_E1oE7_L_up[layer] = fs->make(Form("h_E1oE7_L%d",layer+1), "", 5000, -5, 5); + h_E1oE19_L_up[layer] = fs->make(Form("h_E1oE19_L%d",layer+1), "", 5000, -5, 5); + h_E7oE19_L_up[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); + h_E1oE7_L_dw[layer] = fs->make(Form("h_E1oE7_L%d",layer+1), "", 5000, -5, 5); + h_E1oE19_L_dw[layer] = fs->make(Form("h_E1oE19_L%d",layer+1), "", 5000, -5, 5); + h_E7oE19_L_dw[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); + // + } + + h_eAll_all = fs->make("h_eAll_all", "", 40010, -10, 40000); + h_e7_all = fs->make("h_e7_all", "", 40010, -10, 40000); + h_e19_all = fs->make("h_e19_all", "", 40010, -10, 40000); + h_eAll_all->Sumw2(); + h_e7_all->Sumw2(); + h_e19_all->Sumw2(); + ////////// + h_eAll_all_up = fs->make("h_eAll_all_up", "", 40010, -10, 40000); + h_e7_all_up = fs->make("h_e7_all_up", "", 40010, -10, 40000); + h_e19_all_up = fs->make("h_e19_all_up", "", 40010, -10, 40000); + h_eAll_all_up->Sumw2(); + h_e7_all_up->Sumw2(); + h_e19_all_up->Sumw2(); + h_eAll_all_dw = fs->make("h_eAll_all_dw", "", 40010, -10, 40000); + h_e7_all_dw = fs->make("h_e7_all_dw", "", 40010, -10, 40000); + h_e19_all_dw = fs->make("h_e19_all_dw", "", 40010, -10, 40000); + h_eAll_all_dw->Sumw2(); + h_e7_all_dw->Sumw2(); + h_e19_all_dw->Sumw2(); + + h_eAll_all_AbsW_Mip = fs->make("h_eAll_all_AbsW_Mip", "", 40010, -10, 4.e6); + h_e7_all_AbsW_Mip = fs->make("h_e7_all_AbsW_Mip", "", 40010, -10, 4.e6); + h_e19_all_AbsW_Mip = fs->make("h_e19_all_AbsW_Mip", "", 40010, -10, 4.e6); + h_eAll_all_AbsW_Mip->Sumw2(); + h_e7_all_AbsW_Mip->Sumw2(); + h_e19_all_AbsW_Mip->Sumw2(); + + h_eAll_all_AbsW_GeV = fs->make("h_eAll_all_AbsW_GeV", "", 5100, -10, 500); + h_e7_all_AbsW_GeV = fs->make("h_e7_all_AbsW_GeV", "", 5100, -10, 500); + h_e19_all_AbsW_GeV = fs->make("h_e19_all_AbsW_GeV", "", 5100, -10, 500); + h_eAll_all_AbsW_GeV->Sumw2(); + h_e7_all_AbsW_GeV->Sumw2(); + h_e19_all_AbsW_GeV->Sumw2(); + + HighGain_LowGain_2D = fs->make("h2_HGvsLG", "", 4000, 0, 4000, 4000, 0, 4000); + Energy_LowGain_2D = fs->make("h2_EvsLG", "", 4000, 0, 4000, 4000, 0, 4000); + + tp_E1_vs_L = fs->make("tp_E1_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7_vs_L = fs->make("tp_E7_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E19_vs_L = fs->make("tp_E19_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oSumL_vs_L = fs->make("tp_E1oSumL_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7oSumL_vs_L = fs->make("tp_E7oSumL_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E19oSumL_vs_L = fs->make("tp_E19oSumL_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oE7_vs_L = fs->make("tp_E1oE7_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E1oE19_vs_L = fs->make("tp_E1oE19_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + tp_E7oE19_vs_L = fs->make("tp_E7oE19_vs_L", "", MAXLAYERS+1, 0, MAXLAYERS+1); + + + //loading the proper weights + if(MAXLAYERS != 8) { + std::cout << " update weights " << std::endl; + return; + } + for(int iL=0; iL("mapFile_FNAL"); + } + else{ + ADCtoMIP[iL] = ADCtoMIP_CERN[iL]; + ADCtoMIPup[iL] = ADCtoMIP_CERN[iL] * 1.05; + ADCtoMIPdw[iL] = ADCtoMIP_CERN[iL] * 0.95; + mapfile_ = iConfig.getParameter("mapFile_CERN"); + if(layers_config_ == 1){ + Weights_L[iL] = LayerWeight_8L_conf1[iL]; + X0_L[iL] = X0depth_8L_conf1[iL]; + } + if(layers_config_ == 2){ + Weights_L[iL] = LayerWeight_8L_conf2[iL]; + X0_L[iL] = X0depth_8L_conf2[iL]; + } + if(layers_config_ == -1){ + Weights_L[iL] = 1.; + X0_L[iL] = 0.; + } + } + } + + + + }//constructor ends here @@ -452,26 +455,26 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float e1, e7, e19, eAll; shosha.getAllEnergy(iL, e1, e7, e19, eAll); - h_sum_layer[iL]->Fill(eAll); - h_Seed_layer[iL]->Fill(e1); - h_layer_seven[iL]->Fill(e7); - h_layer_nineteen[iL]->Fill(e19); + h_eAll_L[iL]->Fill(eAll); + h_eMax_L[iL]->Fill(e1); + h_e7_L[iL]->Fill(e7); + h_e19_L[iL]->Fill(e19); float e1_up, e7_up, e19_up, eAll_up; shosha.getAllEnergy(iL, e1_up, e7_up, e19_up, eAll_up); - h_sum_layer_up[iL]->Fill(eAll_up); - h_Seed_layer_up[iL]->Fill(e1_up); - h_layer_seven_up[iL]->Fill(e7_up); - h_layer_nineteen_up[iL]->Fill(e19_up); + h_eAll_L_up[iL]->Fill(eAll_up); + h_eMax_L_up[iL]->Fill(e1_up); + h_e7_L_up[iL]->Fill(e7_up); + h_e19_L_up[iL]->Fill(e19_up); float e1_dw, e7_dw, e19_dw, eAll_dw; shosha.getAllEnergy(iL, e1_dw, e7_dw, e19_dw, eAll_dw); - h_sum_layer_dw[iL]->Fill(eAll_dw); - h_Seed_layer_dw[iL]->Fill(e1_dw); - h_layer_seven_dw[iL]->Fill(e7_dw); - h_layer_nineteen_dw[iL]->Fill(e19_dw); + h_eAll_L_dw[iL]->Fill(eAll_dw); + h_eMax_L_dw[iL]->Fill(e1_dw); + h_e7_L_dw[iL]->Fill(e7_dw); + h_e19_L_dw[iL]->Fill(e19_dw); float layerE1_Mip = e1 * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); @@ -484,48 +487,48 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float layerE19_GeV = e19 * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); float layerEAll_GeV = eAll * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); - h_sum_layer_AbsW_Mip[iL]->Fill(layerEAll_Mip); - h_Seed_layer_AbsW_Mip[iL]->Fill(layerE1_Mip); - h_layer_seven_AbsW_Mip[iL]->Fill(layerE7_Mip); - h_layer_nineteen_AbsW_Mip[iL]->Fill(layerE19_Mip); + h_eAll_L_AbsW_Mip[iL]->Fill(layerEAll_Mip); + h_eMax_L_AbsW_Mip[iL]->Fill(layerE1_Mip); + h_e7_L_AbsW_Mip[iL]->Fill(layerE7_Mip); + h_e19_L_AbsW_Mip[iL]->Fill(layerE19_Mip); - h_sum_layer_AbsW_GeV[iL]->Fill(layerEAll_GeV); - h_Seed_layer_AbsW_GeV[iL]->Fill(layerE1_GeV); - h_layer_seven_AbsW_GeV[iL]->Fill(layerE7_GeV); - h_layer_nineteen_AbsW_GeV[iL]->Fill(layerE19_GeV); + h_eAll_L_AbsW_GeV[iL]->Fill(layerEAll_GeV); + h_eMax_L_AbsW_GeV[iL]->Fill(layerE1_GeV); + h_e7_L_AbsW_GeV[iL]->Fill(layerE7_GeV); + h_e19_L_AbsW_GeV[iL]->Fill(layerE19_GeV); - tp_E1_vs_layer->Fill(iL+1, e1); - tp_E7_vs_layer->Fill(iL+1, e7); - tp_E19_vs_layer->Fill(iL+1, e19); + tp_E1_vs_L->Fill(iL+1, e1); + tp_E7_vs_L->Fill(iL+1, e7); + tp_E19_vs_L->Fill(iL+1, e19); if(e7 != 0.){ - h_E1oE7_layer[iL]->Fill(e1/e7); - tp_E1oE7_vs_layer->Fill(iL+1, e1/e7); + h_E1oE7_L[iL]->Fill(e1/e7); + tp_E1oE7_vs_L->Fill(iL+1, e1/e7); } - if(e7_up != 0.) h_E1oE7_layer_up[iL]->Fill(e1_up/e7_up); - if(e7_dw != 0.) h_E1oE7_layer_dw[iL]->Fill(e1_dw/e7_dw); + if(e7_up != 0.) h_E1oE7_L_up[iL]->Fill(e1_up/e7_up); + if(e7_dw != 0.) h_E1oE7_L_dw[iL]->Fill(e1_dw/e7_dw); if(e19 != 0){ - h_E1oE19_layer[iL]->Fill(e1/e19); - h_E7oE19_layer[iL]->Fill(e7/e19); - tp_E1oE19_vs_layer->Fill(iL, e1/e19); - tp_E7oE19_vs_layer->Fill(iL, e7/e19); + h_E1oE19_L[iL]->Fill(e1/e19); + h_E7oE19_L[iL]->Fill(e7/e19); + tp_E1oE19_vs_L->Fill(iL, e1/e19); + tp_E7oE19_vs_L->Fill(iL, e7/e19); } if(e19_up != 0){ - h_E1oE19_layer_up[iL]->Fill(e1_up/e19_up); - h_E7oE19_layer_up[iL]->Fill(e7_up/e19_up); + h_E1oE19_L_up[iL]->Fill(e1_up/e19_up); + h_E7oE19_L_up[iL]->Fill(e7_up/e19_up); } if(e19_dw != 0){ - h_E1oE19_layer_dw[iL]->Fill(e1_dw/e19_dw); - h_E7oE19_layer_dw[iL]->Fill(e7_dw/e19_dw); + h_E1oE19_L_dw[iL]->Fill(e1_dw/e19_dw); + h_E7oE19_L_dw[iL]->Fill(e7_dw/e19_dw); } float xTmp, yTmp; shosha.getPos(iL, xTmp, yTmp); - h_x_layer[iL]->Fill(xTmp / e19); - h_y_layer[iL]->Fill(yTmp / e19); - h_x_y_layer[iL]->Fill(xTmp / e19, yTmp / e19); + h_x_L[iL]->Fill(xTmp / e19); + h_y_L[iL]->Fill(yTmp / e19); + h_x_y_L[iL]->Fill(xTmp / e19, yTmp / e19); E1SumL_R += e1; E7SumL_R += e7; @@ -561,23 +564,23 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu } */ - h_sum_all->Fill(EAllSumL_R); - h_seven_all->Fill(E7SumL_R); - h_nineteen_all->Fill(E19SumL_R); - h_sum_all_up->Fill(EAllSumL_Rup); - h_seven_all_up->Fill(E7SumL_Rup); - h_nineteen_all_up->Fill(E19SumL_Rup); - h_sum_all_dw->Fill(EAllSumL_Rdw); - h_seven_all_dw->Fill(E7SumL_Rdw); - h_nineteen_all_dw->Fill(E19SumL_Rdw); + h_eAll_all->Fill(EAllSumL_R); + h_e7_all->Fill(E7SumL_R); + h_e19_all->Fill(E19SumL_R); + h_eAll_all_up->Fill(EAllSumL_Rup); + h_e7_all_up->Fill(E7SumL_Rup); + h_e19_all_up->Fill(E19SumL_Rup); + h_eAll_all_dw->Fill(EAllSumL_Rdw); + h_e7_all_dw->Fill(E7SumL_Rdw); + h_e19_all_dw->Fill(E19SumL_Rdw); - h_sum_all_AbsW_Mip->Fill(EAllSumL_AbsW_Mip); - h_seven_all_AbsW_Mip->Fill(E7SumL_AbsW_Mip); - h_nineteen_all_AbsW_Mip->Fill(E19SumL_AbsW_Mip); + h_eAll_all_AbsW_Mip->Fill(EAllSumL_AbsW_Mip); + h_e7_all_AbsW_Mip->Fill(E7SumL_AbsW_Mip); + h_e19_all_AbsW_Mip->Fill(E19SumL_AbsW_Mip); - h_sum_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); - h_seven_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); - h_nineteen_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); + h_eAll_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); + h_e7_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); + h_e19_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); }// analyze ends here diff --git a/Reco/src/ShowerShape.cc b/Reco/src/ShowerShape.cc index d0d05b7..5b4aad2 100644 --- a/Reco/src/ShowerShape.cc +++ b/Reco/src/ShowerShape.cc @@ -163,8 +163,12 @@ ShowerShape::~ShowerShape() void ShowerShape::init(){ - int ncell1[MAXLAYERS], ncell6[MAXLAYERS], ncell12[MAXLAYERS]; - int ncell7[MAXLAYERS], ncell19[MAXLAYERS]; + float ncell1[MAXLAYERS], ncell6[MAXLAYERS], ncell12[MAXLAYERS]; + float ncell7[MAXLAYERS], ncell19[MAXLAYERS], ncell43[MAXLAYERS]; + + // float ncell1S[MAXLAYERS], ncell6S[MAXLAYERS], ncell12S[MAXLAYERS]; + //float ncell7S[MAXLAYERS], + float ncell19S[MAXLAYERS], ncell43S[MAXLAYERS]; float deno43[MAXLAYERS], lposx43[MAXLAYERS], lposy43[MAXLAYERS], Dposx43[MAXLAYERS], Dposy43[MAXLAYERS], eccx43[MAXLAYERS], eccy43[MAXLAYERS], eccxy43[MAXLAYERS]; float deno19[MAXLAYERS], lposx19[MAXLAYERS], lposy19[MAXLAYERS], Dposx19[MAXLAYERS], Dposy19[MAXLAYERS]; @@ -176,10 +180,13 @@ void ShowerShape::init(){ for(int iL=0; iLmake(Form("h_e7_L%d_AbsW_GeV", layer+1),"", 5100, -10, 500); h_e19_L_AbsW_GeV[layer] = fs->make(Form("h_e19_L%d_AbsW_GeV", layer+1), "", 5100, -10, 500); + ///up + h_eAll_L_AbsW_Mip_up[layer] = fs->make(Form("h_eAll_L%d_AbsW_Mip_up", layer+1), "", 40010, -10, 4.e6); + h_eMax_L_AbsW_Mip_up[layer] = fs->make(Form("h_eMax_L%d_AbsW_Mip_up",layer+1), "", 40010, -10, 4.e6); + h_e7_L_AbsW_Mip_up[layer] = fs->make(Form("h_e7_L%d_AbsW_Mip_up", layer+1),"", 40010, -10, 4.e6); + h_e19_L_AbsW_Mip_up[layer] = fs->make(Form("h_e19_L%d_AbsW_Mip_up", layer+1), "", 40010, -10, 4.e6); + + h_eAll_L_AbsW_GeV_up[layer] = fs->make(Form("h_eAll_L%d_AbsW_GeV_up", layer+1), "", 5100, -10, 500); + h_eMax_L_AbsW_GeV_up[layer] = fs->make(Form("h_eMax_L%d_AbsW_GeV_up",layer+1), "", 5100, -10, 500); + h_e7_L_AbsW_GeV_up[layer] = fs->make(Form("h_e7_L%d_AbsW_GeV_up", layer+1),"", 5100, -10, 500); + h_e19_L_AbsW_GeV_up[layer] = fs->make(Form("h_e19_L%d_AbsW_GeV_up", layer+1), "", 5100, -10, 500); + ///dw + h_eAll_L_AbsW_Mip_dw[layer] = fs->make(Form("h_eAll_L%d_AbsW_Mip_dw", layer+1), "", 40010, -10, 4.e6); + h_eMax_L_AbsW_Mip_dw[layer] = fs->make(Form("h_eMax_L%d_AbsW_Mip_dw",layer+1), "", 40010, -10, 4.e6); + h_e7_L_AbsW_Mip_dw[layer] = fs->make(Form("h_e7_L%d_AbsW_Mip_dw", layer+1),"", 40010, -10, 4.e6); + h_e19_L_AbsW_Mip_dw[layer] = fs->make(Form("h_e19_L%d_AbsW_Mip_dw", layer+1), "", 40010, -10, 4.e6); + h_eAll_L_AbsW_GeV_dw[layer] = fs->make(Form("h_eAll_L%d_AbsW_GeV_dw", layer+1), "", 5100, -10, 500); + h_eMax_L_AbsW_GeV_dw[layer] = fs->make(Form("h_eMax_L%d_AbsW_GeV_dw",layer+1), "", 5100, -10, 500); + h_e7_L_AbsW_GeV_dw[layer] = fs->make(Form("h_e7_L%d_AbsW_GeV_dw", layer+1),"", 5100, -10, 500); + h_e19_L_AbsW_GeV_dw[layer] = fs->make(Form("h_e19_L%d_AbsW_GeV_dw", layer+1), "", 5100, -10, 500); + + //////////////////////////////////////////////////////////////////////////////////////////////////////// h_x_L[layer] = fs->make(Form("X_L%d", layer+1), "", 2000, -10., 10. ); h_y_L[layer] = fs->make(Form("Y_L%d", layer+1), "", 2000, -10., 10. ); h_x_y_L[layer] = fs->make(Form("YvsX_L%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); @@ -264,6 +297,36 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_eAll_all_AbsW_GeV->Sumw2(); h_e7_all_AbsW_GeV->Sumw2(); h_e19_all_AbsW_GeV->Sumw2(); + + /// + h_eAll_all_AbsW_Mip_up = fs->make("h_eAll_all_AbsW_Mip_up", "", 40010, -10, 4.e6); + h_e7_all_AbsW_Mip_up = fs->make("h_e7_all_AbsW_Mip_up", "", 40010, -10, 4.e6); + h_e19_all_AbsW_Mip_up = fs->make("h_e19_all_AbsW_Mip_up", "", 40010, -10, 4.e6); + h_eAll_all_AbsW_Mip_up->Sumw2(); + h_e7_all_AbsW_Mip_up->Sumw2(); + h_e19_all_AbsW_Mip_up->Sumw2(); + + h_eAll_all_AbsW_GeV_up = fs->make("h_eAll_all_AbsW_GeV_up", "", 5100, -10, 500); + h_e7_all_AbsW_GeV_up = fs->make("h_e7_all_AbsW_GeV_up", "", 5100, -10, 500); + h_e19_all_AbsW_GeV_up = fs->make("h_e19_all_AbsW_GeV_up", "", 5100, -10, 500); + h_eAll_all_AbsW_GeV_up->Sumw2(); + h_e7_all_AbsW_GeV_up->Sumw2(); + h_e19_all_AbsW_GeV_up->Sumw2(); + + h_eAll_all_AbsW_Mip_dw = fs->make("h_eAll_all_AbsW_Mip_dw", "", 40010, -10, 4.e6); + h_e7_all_AbsW_Mip_dw = fs->make("h_e7_all_AbsW_Mip_dw", "", 40010, -10, 4.e6); + h_e19_all_AbsW_Mip_dw = fs->make("h_e19_all_AbsW_Mip_dw", "", 40010, -10, 4.e6); + h_eAll_all_AbsW_Mip_dw->Sumw2(); + h_e7_all_AbsW_Mip_dw->Sumw2(); + h_e19_all_AbsW_Mip_dw->Sumw2(); + + h_eAll_all_AbsW_GeV_dw = fs->make("h_eAll_all_AbsW_GeV_dw", "", 5100, -10, 500); + h_e7_all_AbsW_GeV_dw = fs->make("h_e7_all_AbsW_GeV_dw", "", 5100, -10, 500); + h_e19_all_AbsW_GeV_dw = fs->make("h_e19_all_AbsW_GeV_dw", "", 5100, -10, 500); + h_eAll_all_AbsW_GeV_dw->Sumw2(); + h_e7_all_AbsW_GeV_dw->Sumw2(); + h_e19_all_AbsW_GeV_dw->Sumw2(); + HighGain_LowGain_2D = fs->make("h2_HGvsLG", "", 4000, 0, 4000, 4000, 0, 4000); Energy_LowGain_2D = fs->make("h2_EvsLG", "", 4000, 0, 4000, 4000, 0, 4000); @@ -424,9 +487,12 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_CM_layer[iL]->Fill(commonmode[iL]); } + // std::cout << " >>> normal " << std::endl; ShowerShape shosha(Rechits, ADCtoMIP, commonmode, CMTHRESHOLD, max, max_x, max_y); - ShowerShape shosha_up(Rechits, ADCtoMIPup, commonmode_up, CMTHRESHOLD, max, max_x, max_y); - ShowerShape shosha_dw(Rechits, ADCtoMIPdw, commonmode_dw, CMTHRESHOLD, max, max_x, max_y); + // std::cout << " >>> up " << std::endl; + ShowerShape shosha_up(Rechits, ADCtoMIPup, commonmode, CMTHRESHOLD, max, max_x, max_y); + // std::cout << " >>> down " << std::endl; + ShowerShape shosha_dw(Rechits, ADCtoMIPdw, commonmode, CMTHRESHOLD, max, max_x, max_y); float E1SumL_R = 0.; float E7SumL_R = 0.; @@ -451,17 +517,38 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float E19SumL_AbsW_GeV = 0.; float EAllSumL_AbsW_GeV = 0.; + float E1SumL_AbsW_Mip_up = 0.; + float E7SumL_AbsW_Mip_up = 0.; + float E19SumL_AbsW_Mip_up = 0.; + float EAllSumL_AbsW_Mip_up = 0.; + + float E1SumL_AbsW_GeV_up = 0.; + float E7SumL_AbsW_GeV_up = 0.; + float E19SumL_AbsW_GeV_up = 0.; + float EAllSumL_AbsW_GeV_up = 0.; + + float E1SumL_AbsW_Mip_dw = 0.; + float E7SumL_AbsW_Mip_dw = 0.; + float E19SumL_AbsW_Mip_dw = 0.; + float EAllSumL_AbsW_Mip_dw = 0.; + + float E1SumL_AbsW_GeV_dw = 0.; + float E7SumL_AbsW_GeV_dw = 0.; + float E19SumL_AbsW_GeV_dw = 0.; + float EAllSumL_AbsW_GeV_dw = 0.; + + for(int iL=0; iLFill(eAll); h_eMax_L[iL]->Fill(e1); h_e7_L[iL]->Fill(e7); h_e19_L[iL]->Fill(e19); float e1_up, e7_up, e19_up, eAll_up; - shosha.getAllEnergy(iL, e1_up, e7_up, e19_up, eAll_up); + shosha_up.getAllEnergy(iL, e1_up, e7_up, e19_up, eAll_up); h_eAll_L_up[iL]->Fill(eAll_up); h_eMax_L_up[iL]->Fill(e1_up); @@ -469,7 +556,7 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_e19_L_up[iL]->Fill(e19_up); float e1_dw, e7_dw, e19_dw, eAll_dw; - shosha.getAllEnergy(iL, e1_dw, e7_dw, e19_dw, eAll_dw); + shosha_dw.getAllEnergy(iL, e1_dw, e7_dw, e19_dw, eAll_dw); h_eAll_L_dw[iL]->Fill(eAll_dw); h_eMax_L_dw[iL]->Fill(e1_dw); @@ -477,6 +564,9 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_e19_L_dw[iL]->Fill(e19_dw); + // std::cout << " >>> e1 = " << e1 << " e1up = " << e1_up << " e1_dw = " << e1_dw << std::endl; + // return; + float layerE1_Mip = e1 * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); float layerE7_Mip = e7 * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); float layerE19_Mip = e19 * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); @@ -487,6 +577,26 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu float layerE19_GeV = e19 * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); float layerEAll_GeV = eAll * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE1_Mip_up = e1_up * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE7_Mip_up = e7_up * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE19_Mip_up = e19_up * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerEAll_Mip_up = eAll_up * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + + float layerE1_GeV_up = e1_up * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE7_GeV_up = e7_up * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE19_GeV_up = e19_up * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerEAll_GeV_up = eAll_up * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + + float layerE1_Mip_dw = e1_dw * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE7_Mip_dw = e7_dw * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerE19_Mip_dw = e19_dw * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + float layerEAll_Mip_dw = eAll_dw * (weights2GeV * weights2MIP * Weights_L[iL] / MIP2GeV_sim + 1.); + + float layerE1_GeV_dw = e1_dw * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE7_GeV_dw = e7_dw * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerE19_GeV_dw = e19_dw * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + float layerEAll_GeV_dw = eAll_dw * (weights2GeV * weights2MIP * Weights_L[iL] + 1. * MIP2GeV_sim); + h_eAll_L_AbsW_Mip[iL]->Fill(layerEAll_Mip); h_eMax_L_AbsW_Mip[iL]->Fill(layerE1_Mip); h_e7_L_AbsW_Mip[iL]->Fill(layerE7_Mip); @@ -496,7 +606,27 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_eMax_L_AbsW_GeV[iL]->Fill(layerE1_GeV); h_e7_L_AbsW_GeV[iL]->Fill(layerE7_GeV); h_e19_L_AbsW_GeV[iL]->Fill(layerE19_GeV); - + //////////////////////////////////////////////////////////////////////////////////////////////////////// + h_eAll_L_AbsW_Mip_up[iL]->Fill(layerEAll_Mip_up); + h_eMax_L_AbsW_Mip_up[iL]->Fill(layerE1_Mip_up); + h_e7_L_AbsW_Mip_up[iL]->Fill(layerE7_Mip_up); + h_e19_L_AbsW_Mip_up[iL]->Fill(layerE19_Mip_up); + + h_eAll_L_AbsW_GeV_up[iL]->Fill(layerEAll_GeV_up); + h_eMax_L_AbsW_GeV_up[iL]->Fill(layerE1_GeV_up); + h_e7_L_AbsW_GeV_up[iL]->Fill(layerE7_GeV_up); + h_e19_L_AbsW_GeV_up[iL]->Fill(layerE19_GeV_up); + + h_eAll_L_AbsW_Mip_dw[iL]->Fill(layerEAll_Mip_dw); + h_eMax_L_AbsW_Mip_dw[iL]->Fill(layerE1_Mip_dw); + h_e7_L_AbsW_Mip_dw[iL]->Fill(layerE7_Mip_dw); + h_e19_L_AbsW_Mip_dw[iL]->Fill(layerE19_Mip_dw); + + h_eAll_L_AbsW_GeV_dw[iL]->Fill(layerEAll_GeV_dw); + h_eMax_L_AbsW_GeV_dw[iL]->Fill(layerE1_GeV_dw); + h_e7_L_AbsW_GeV_dw[iL]->Fill(layerE7_GeV_dw); + h_e19_L_AbsW_GeV_dw[iL]->Fill(layerE19_GeV_dw); + /////////////////////////////////////////////////////////////////////// tp_E1_vs_L->Fill(iL+1, e1); tp_E7_vs_L->Fill(iL+1, e7); tp_E19_vs_L->Fill(iL+1, e19); @@ -552,6 +682,26 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu E7SumL_AbsW_GeV += layerE7_GeV; E19SumL_AbsW_GeV += layerE19_GeV; EAllSumL_AbsW_GeV += layerEAll_GeV; + + E1SumL_AbsW_Mip_up += layerE1_Mip_up; + E7SumL_AbsW_Mip_up += layerE7_Mip_up; + E19SumL_AbsW_Mip_up += layerE19_Mip_up; + EAllSumL_AbsW_Mip_up += layerEAll_Mip_up; + + E1SumL_AbsW_GeV_up += layerE1_GeV_up; + E7SumL_AbsW_GeV_up += layerE7_GeV_up; + E19SumL_AbsW_GeV_up += layerE19_GeV_up; + EAllSumL_AbsW_GeV_up += layerEAll_GeV_up; + + E1SumL_AbsW_Mip_dw += layerE1_Mip_dw; + E7SumL_AbsW_Mip_dw += layerE7_Mip_dw; + E19SumL_AbsW_Mip_dw += layerE19_Mip_dw; + EAllSumL_AbsW_Mip_dw += layerEAll_Mip_dw; + + E1SumL_AbsW_GeV_dw += layerE1_GeV_dw; + E7SumL_AbsW_GeV_dw += layerE7_GeV_dw; + E19SumL_AbsW_GeV_dw += layerE19_GeV_dw; + EAllSumL_AbsW_GeV_dw += layerEAll_GeV_dw; } /* @@ -581,7 +731,23 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_eAll_all_AbsW_GeV->Fill(EAllSumL_AbsW_GeV); h_e7_all_AbsW_GeV->Fill(E7SumL_AbsW_GeV); h_e19_all_AbsW_GeV->Fill(E19SumL_AbsW_GeV); + + h_eAll_all_AbsW_Mip_up->Fill(EAllSumL_AbsW_Mip_up); + h_e7_all_AbsW_Mip_up->Fill(E7SumL_AbsW_Mip_up); + h_e19_all_AbsW_Mip_up->Fill(E19SumL_AbsW_Mip_up); + + h_eAll_all_AbsW_GeV_up->Fill(EAllSumL_AbsW_GeV_up); + h_e7_all_AbsW_GeV_up->Fill(E7SumL_AbsW_GeV_up); + h_e19_all_AbsW_GeV_up->Fill(E19SumL_AbsW_GeV_up); + + h_eAll_all_AbsW_Mip_dw->Fill(EAllSumL_AbsW_Mip_dw); + h_e7_all_AbsW_Mip_dw->Fill(E7SumL_AbsW_Mip_dw); + h_e19_all_AbsW_Mip_dw->Fill(E19SumL_AbsW_Mip_dw); + h_eAll_all_AbsW_GeV_dw->Fill(EAllSumL_AbsW_GeV_dw); + h_e7_all_AbsW_GeV_dw->Fill(E7SumL_AbsW_GeV_dw); + h_e19_all_AbsW_GeV_dw->Fill(E19SumL_AbsW_GeV_dw); + }// analyze ends here @@ -597,8 +763,11 @@ Layer_Sum_Analyzer::beginJob() throw cms::Exception("Unable to load electronics map"); } - for(int iii = 0; iii < MAXLAYERS; iii++) - ADCtoMIP[iii] = ADCtoMIP[iii] * MIP2ParticleCalib[iii]; // Converting response to 120 GeV protons to MIPs + for(int iii = 0; iii < MAXLAYERS; iii++){ + ADCtoMIP[iii] = ADCtoMIP[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPup[iii] = ADCtoMIPup[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPdw[iii] = ADCtoMIPdw[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + } /* for(int iii= 0; iii<16;iii++){ LayerWeight[iii] += 0.8; From 9d0aabedf55f3b261daf7f3971ccc102982c1938 Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 9 Nov 2016 16:03:28 +0100 Subject: [PATCH 040/297] cfg for runs --- 8layers_cfg1/lancia70GeV.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 8layers_cfg1/lancia70GeV.sh diff --git a/8layers_cfg1/lancia70GeV.sh b/8layers_cfg1/lancia70GeV.sh new file mode 100644 index 0000000..d097490 --- /dev/null +++ b/8layers_cfg1/lancia70GeV.sh @@ -0,0 +1,22 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=865 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=866 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=867 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=868 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=869 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=870 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=872 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=873 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=874 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=875 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=876 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=877 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=878 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=879 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=880 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=881 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=882 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=883 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=884 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=887 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=888 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=889 configuration=1 runType=HGCRun From 43569d0ace0e4310fe996cddb4ffc355d1455fb9 Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 9 Nov 2016 17:49:56 +0100 Subject: [PATCH 041/297] cfg for analysis data --- 8layers_cfg1/lancia100GeV.sh | 23 +++++++++++++++++++++++ 8layers_cfg1/lancia200GeV.sh | 22 ++++++++++++++++++++++ 8layers_cfg1/lancia20GeV.sh | 19 +++++++++++++++++++ 8layers_cfg1/lancia250GeV.sh | 24 ++++++++++++++++++++++++ 8layers_cfg1/lancia32GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg1/lancia70GeV.sh | 22 ++++++++++++++++++++++ 8layers_cfg1/lanciaAll.sh | 2 ++ 8layers_cfg2/lancia100GeV.sh | 18 ++++++++++++++++++ 8layers_cfg2/lancia200GeV.sh | 21 +++++++++++++++++++++ 8layers_cfg2/lancia20GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia250GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia32GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia70GeV.sh | 21 +++++++++++++++++++++ 8layers_cfg2/lanciaAll.sh | 2 ++ 14 files changed, 254 insertions(+) create mode 100644 8layers_cfg1/lancia100GeV.sh create mode 100644 8layers_cfg1/lancia200GeV.sh create mode 100644 8layers_cfg1/lancia20GeV.sh create mode 100644 8layers_cfg1/lancia250GeV.sh create mode 100644 8layers_cfg1/lancia32GeV.sh create mode 100644 8layers_cfg1/lancia70GeV.sh create mode 100644 8layers_cfg1/lanciaAll.sh create mode 100644 8layers_cfg2/lancia100GeV.sh create mode 100644 8layers_cfg2/lancia200GeV.sh create mode 100644 8layers_cfg2/lancia20GeV.sh create mode 100644 8layers_cfg2/lancia250GeV.sh create mode 100644 8layers_cfg2/lancia32GeV.sh create mode 100644 8layers_cfg2/lancia70GeV.sh create mode 100644 8layers_cfg2/lanciaAll.sh diff --git a/8layers_cfg1/lancia100GeV.sh b/8layers_cfg1/lancia100GeV.sh new file mode 100644 index 0000000..4cbf7e4 --- /dev/null +++ b/8layers_cfg1/lancia100GeV.sh @@ -0,0 +1,23 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1051 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1052 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1053 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1054 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1055 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1056 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1057 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1058 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1059 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1060 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1061 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1062 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1063 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1064 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1065 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1066 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1067 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1068 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1069 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1070 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1071 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1072 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1073 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia200GeV.sh b/8layers_cfg1/lancia200GeV.sh new file mode 100644 index 0000000..87be742 --- /dev/null +++ b/8layers_cfg1/lancia200GeV.sh @@ -0,0 +1,22 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1026 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1027 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1028 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1029 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1030 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1031 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1032 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1033 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1034 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1035 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1036 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1037 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1038 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1039 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1040 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1041 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1042 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1043 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1044 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1045 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1046 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1047 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia20GeV.sh b/8layers_cfg1/lancia20GeV.sh new file mode 100644 index 0000000..2bc51a5 --- /dev/null +++ b/8layers_cfg1/lancia20GeV.sh @@ -0,0 +1,19 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=916 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=917 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=918 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=919 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=920 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=921 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=922 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=923 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=924 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=925 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=926 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=927 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=928 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=929 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=931 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=932 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=933 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=934 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lancia250GeV.sh b/8layers_cfg1/lancia250GeV.sh new file mode 100644 index 0000000..07428ad --- /dev/null +++ b/8layers_cfg1/lancia250GeV.sh @@ -0,0 +1,24 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=937 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=938 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=939 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=940 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=941 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=942 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=943 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=944 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=945 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=946 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=947 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=948 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=949 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=950 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=951 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=952 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=953 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=954 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=955 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=956 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=957 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=959 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=960 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=961 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia32GeV.sh b/8layers_cfg1/lancia32GeV.sh new file mode 100644 index 0000000..a773679 --- /dev/null +++ b/8layers_cfg1/lancia32GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1087 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1088 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1089 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1091 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1092 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1093 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1094 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1095 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1096 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1097 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1098 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1099 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1100 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1101 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1102 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1103 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1104 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1105 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1106 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1107 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia70GeV.sh b/8layers_cfg1/lancia70GeV.sh new file mode 100644 index 0000000..d097490 --- /dev/null +++ b/8layers_cfg1/lancia70GeV.sh @@ -0,0 +1,22 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=865 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=866 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=867 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=868 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=869 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=870 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=872 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=873 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=874 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=875 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=876 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=877 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=878 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=879 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=880 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=881 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=882 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=883 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=884 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=887 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=888 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=889 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lanciaAll.sh b/8layers_cfg1/lanciaAll.sh new file mode 100644 index 0000000..d8c20d3 --- /dev/null +++ b/8layers_cfg1/lanciaAll.sh @@ -0,0 +1,2 @@ +source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh + diff --git a/8layers_cfg2/lancia100GeV.sh b/8layers_cfg2/lancia100GeV.sh new file mode 100644 index 0000000..c4e70d1 --- /dev/null +++ b/8layers_cfg2/lancia100GeV.sh @@ -0,0 +1,18 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia200GeV.sh b/8layers_cfg2/lancia200GeV.sh new file mode 100644 index 0000000..df51f48 --- /dev/null +++ b/8layers_cfg2/lancia200GeV.sh @@ -0,0 +1,21 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia20GeV.sh b/8layers_cfg2/lancia20GeV.sh new file mode 100644 index 0000000..5a7ea48 --- /dev/null +++ b/8layers_cfg2/lancia20GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun + diff --git a/8layers_cfg2/lancia250GeV.sh b/8layers_cfg2/lancia250GeV.sh new file mode 100644 index 0000000..3957d98 --- /dev/null +++ b/8layers_cfg2/lancia250GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia32GeV.sh b/8layers_cfg2/lancia32GeV.sh new file mode 100644 index 0000000..e0c74ba --- /dev/null +++ b/8layers_cfg2/lancia32GeV.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia70GeV.sh b/8layers_cfg2/lancia70GeV.sh new file mode 100644 index 0000000..f352bfe --- /dev/null +++ b/8layers_cfg2/lancia70GeV.sh @@ -0,0 +1,21 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh new file mode 100644 index 0000000..f43a8b8 --- /dev/null +++ b/8layers_cfg2/lanciaAll.sh @@ -0,0 +1,2 @@ +source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh + From 42f702c62539cbf433edfb5569d9d2dba38afedc Mon Sep 17 00:00:00 2001 From: arabella Date: Wed, 9 Nov 2016 19:49:08 +0100 Subject: [PATCH 042/297] new shapes --- 8layers_cfg1/add.sh | 6 ++++++ 8layers_cfg2/add.sh | 7 +++++++ 8layers_cfg2/lancia70GeV.sh | 30 +++++++++++++++--------------- 3 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 8layers_cfg1/add.sh create mode 100644 8layers_cfg2/add.sh diff --git a/8layers_cfg1/add.sh b/8layers_cfg1/add.sh new file mode 100644 index 0000000..7ecf842 --- /dev/null +++ b/8layers_cfg1/add.sh @@ -0,0 +1,6 @@ +add 20GeV.root 934.root +add 32.root 1092.root 1095.root 1100.root 1101.root 1102.root +add 70.root 870.root 874.root 879.root 884.root 887.root +add 100.root 1052.root 1053.root 1057.root 1059.root 1060.root 1069.root 1070.root 1072.root 1073.root +add 200.root 1028.root 1030.root 1037.root 1039.root 1042.root 1047.root +add 250.root 942.root 955.root 959.root diff --git a/8layers_cfg2/add.sh b/8layers_cfg2/add.sh new file mode 100644 index 0000000..a3e8047 --- /dev/null +++ b/8layers_cfg2/add.sh @@ -0,0 +1,7 @@ +add 20GeV.root 1255.root 1256.root 1259.root 1262.root 1265.root 1266.root +add 32.root 1226.root 1229.root 1230.root 1231.root 1236.root 1237.root 1238.root 1239.root 1241.root 1245.root + +#add 70.root 870.root 874.root 879.root 884.root 887.root +add 100.root 1205.root 1213.root 1218.root +add 200.root 1182.root 1183.root 1184.root 1196.root 1198.root +#add 250.root 942.root 955.root 959.root diff --git a/8layers_cfg2/lancia70GeV.sh b/8layers_cfg2/lancia70GeV.sh index f352bfe..2e3c2eb 100644 --- a/8layers_cfg2/lancia70GeV.sh +++ b/8layers_cfg2/lancia70GeV.sh @@ -1,21 +1,21 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file From 223aa00b503d54c4b35ae6d2310b5de13db9e68f Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 10:42:36 +0100 Subject: [PATCH 043/297] final scripts for analysis --- 8layers_cfg1/add.sh | 6 ++++++ 8layers_cfg1/lancia100GeV.sh | 23 +++++++++++++++++++++++ 8layers_cfg1/lancia200GeV.sh | 22 ++++++++++++++++++++++ 8layers_cfg1/lancia20GeV.sh | 19 +++++++++++++++++++ 8layers_cfg1/lancia250GeV.sh | 24 ++++++++++++++++++++++++ 8layers_cfg1/lancia32GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg1/lanciaAll.sh | 2 ++ 8layers_cfg2/add.sh | 7 +++++++ 8layers_cfg2/lancia100GeV.sh | 18 ++++++++++++++++++ 8layers_cfg2/lancia200GeV.sh | 21 +++++++++++++++++++++ 8layers_cfg2/lancia20GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia250GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia32GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia70GeV.sh | 21 +++++++++++++++++++++ 8layers_cfg2/lanciaAll.sh | 2 ++ 15 files changed, 245 insertions(+) create mode 100644 8layers_cfg1/add.sh create mode 100644 8layers_cfg1/lancia100GeV.sh create mode 100644 8layers_cfg1/lancia200GeV.sh create mode 100644 8layers_cfg1/lancia20GeV.sh create mode 100644 8layers_cfg1/lancia250GeV.sh create mode 100644 8layers_cfg1/lancia32GeV.sh create mode 100644 8layers_cfg1/lanciaAll.sh create mode 100644 8layers_cfg2/add.sh create mode 100644 8layers_cfg2/lancia100GeV.sh create mode 100644 8layers_cfg2/lancia200GeV.sh create mode 100644 8layers_cfg2/lancia20GeV.sh create mode 100644 8layers_cfg2/lancia250GeV.sh create mode 100644 8layers_cfg2/lancia32GeV.sh create mode 100644 8layers_cfg2/lancia70GeV.sh create mode 100644 8layers_cfg2/lanciaAll.sh diff --git a/8layers_cfg1/add.sh b/8layers_cfg1/add.sh new file mode 100644 index 0000000..7ecf842 --- /dev/null +++ b/8layers_cfg1/add.sh @@ -0,0 +1,6 @@ +add 20GeV.root 934.root +add 32.root 1092.root 1095.root 1100.root 1101.root 1102.root +add 70.root 870.root 874.root 879.root 884.root 887.root +add 100.root 1052.root 1053.root 1057.root 1059.root 1060.root 1069.root 1070.root 1072.root 1073.root +add 200.root 1028.root 1030.root 1037.root 1039.root 1042.root 1047.root +add 250.root 942.root 955.root 959.root diff --git a/8layers_cfg1/lancia100GeV.sh b/8layers_cfg1/lancia100GeV.sh new file mode 100644 index 0000000..4cbf7e4 --- /dev/null +++ b/8layers_cfg1/lancia100GeV.sh @@ -0,0 +1,23 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1051 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1052 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1053 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1054 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1055 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1056 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1057 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1058 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1059 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1060 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1061 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1062 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1063 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1064 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1065 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1066 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1067 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1068 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1069 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1070 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1071 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1072 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1073 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia200GeV.sh b/8layers_cfg1/lancia200GeV.sh new file mode 100644 index 0000000..87be742 --- /dev/null +++ b/8layers_cfg1/lancia200GeV.sh @@ -0,0 +1,22 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1026 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1027 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1028 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1029 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1030 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1031 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1032 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1033 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1034 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1035 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1036 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1037 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1038 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1039 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1040 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1041 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1042 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1043 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1044 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1045 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1046 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1047 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia20GeV.sh b/8layers_cfg1/lancia20GeV.sh new file mode 100644 index 0000000..2bc51a5 --- /dev/null +++ b/8layers_cfg1/lancia20GeV.sh @@ -0,0 +1,19 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=916 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=917 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=918 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=919 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=920 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=921 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=922 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=923 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=924 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=925 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=926 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=927 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=928 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=929 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=931 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=932 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=933 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=934 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lancia250GeV.sh b/8layers_cfg1/lancia250GeV.sh new file mode 100644 index 0000000..07428ad --- /dev/null +++ b/8layers_cfg1/lancia250GeV.sh @@ -0,0 +1,24 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=937 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=938 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=939 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=940 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=941 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=942 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=943 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=944 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=945 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=946 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=947 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=948 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=949 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=950 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=951 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=952 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=953 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=954 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=955 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=956 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=957 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=959 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=960 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=961 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia32GeV.sh b/8layers_cfg1/lancia32GeV.sh new file mode 100644 index 0000000..a773679 --- /dev/null +++ b/8layers_cfg1/lancia32GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1087 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1088 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1089 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1091 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1092 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1093 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1094 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1095 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1096 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1097 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1098 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1099 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1100 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1101 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1102 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1103 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1104 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1105 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1106 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1107 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lanciaAll.sh b/8layers_cfg1/lanciaAll.sh new file mode 100644 index 0000000..d8c20d3 --- /dev/null +++ b/8layers_cfg1/lanciaAll.sh @@ -0,0 +1,2 @@ +source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh + diff --git a/8layers_cfg2/add.sh b/8layers_cfg2/add.sh new file mode 100644 index 0000000..40d9198 --- /dev/null +++ b/8layers_cfg2/add.sh @@ -0,0 +1,7 @@ +add 20GeV.root 1255.root 1256.root 1259.root 1262.root 1265.root 1266.root +add 32.root 1226.root 1229.root 1230.root 1231.root 1236.root 1237.root 1238.root 1239.root 1241.root 1245.root +add 70.root 1155.root 1158.root 1159.root 1160.root 1170.root 1171.root +add 100.root 1205.root 1213.root 1218.root +add 200.root 1182.root 1183.root 1184.root 1196.root 1198.root +add 250.root 1293.root 1300.root 1304.root 1306.root 1310.root + diff --git a/8layers_cfg2/lancia100GeV.sh b/8layers_cfg2/lancia100GeV.sh new file mode 100644 index 0000000..c4e70d1 --- /dev/null +++ b/8layers_cfg2/lancia100GeV.sh @@ -0,0 +1,18 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia200GeV.sh b/8layers_cfg2/lancia200GeV.sh new file mode 100644 index 0000000..df51f48 --- /dev/null +++ b/8layers_cfg2/lancia200GeV.sh @@ -0,0 +1,21 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia20GeV.sh b/8layers_cfg2/lancia20GeV.sh new file mode 100644 index 0000000..5a7ea48 --- /dev/null +++ b/8layers_cfg2/lancia20GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun + diff --git a/8layers_cfg2/lancia250GeV.sh b/8layers_cfg2/lancia250GeV.sh new file mode 100644 index 0000000..3957d98 --- /dev/null +++ b/8layers_cfg2/lancia250GeV.sh @@ -0,0 +1,20 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia32GeV.sh b/8layers_cfg2/lancia32GeV.sh new file mode 100644 index 0000000..e0c74ba --- /dev/null +++ b/8layers_cfg2/lancia32GeV.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia70GeV.sh b/8layers_cfg2/lancia70GeV.sh new file mode 100644 index 0000000..2e3c2eb --- /dev/null +++ b/8layers_cfg2/lancia70GeV.sh @@ -0,0 +1,21 @@ +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh new file mode 100644 index 0000000..f43a8b8 --- /dev/null +++ b/8layers_cfg2/lanciaAll.sh @@ -0,0 +1,2 @@ +source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh + From 6a3df548773d5ca9a9fe8dfda91d6fcc1a81c90f Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 10:47:19 +0100 Subject: [PATCH 044/297] my cfg --- test_cfg_newEB.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 815f048..79b3bd0 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -9,8 +9,8 @@ #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' #'/tmp/amartell/rearrangedTxtFiles/', - #'/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', - '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + #'~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') From 290af4082e35797d03d2f9bbc0d2510d8ff74422 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 11:16:52 +0100 Subject: [PATCH 045/297] bug fix --- 8layers_cfg1/lancia100GeV.sh | 46 +++++++++++++++++----------------- 8layers_cfg1/lancia200GeV.sh | 44 ++++++++++++++++----------------- 8layers_cfg1/lancia20GeV.sh | 38 ++++++++++++++-------------- 8layers_cfg1/lancia250GeV.sh | 48 ++++++++++++++++++------------------ 8layers_cfg1/lancia32GeV.sh | 40 +++++++++++++++--------------- 8layers_cfg1/lancia70GeV.sh | 44 ++++++++++++++++----------------- 8layers_cfg2/lancia100GeV.sh | 36 +++++++++++++-------------- 8layers_cfg2/lancia200GeV.sh | 42 +++++++++++++++---------------- 8layers_cfg2/lancia20GeV.sh | 38 ++++++++++++++-------------- 8layers_cfg2/lancia250GeV.sh | 40 +++++++++++++++--------------- 8layers_cfg2/lancia32GeV.sh | 40 +++++++++++++++--------------- 8layers_cfg2/lancia70GeV.sh | 42 +++++++++++++++---------------- 12 files changed, 249 insertions(+), 249 deletions(-) diff --git a/8layers_cfg1/lancia100GeV.sh b/8layers_cfg1/lancia100GeV.sh index 4cbf7e4..89786c6 100644 --- a/8layers_cfg1/lancia100GeV.sh +++ b/8layers_cfg1/lancia100GeV.sh @@ -1,23 +1,23 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1051 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1052 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1053 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1054 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1055 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1056 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1057 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1058 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1059 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1060 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1061 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1062 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1063 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1064 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1065 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1066 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1067 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1068 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1069 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1070 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1071 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1072 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1073 configuration=1 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1051 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1052 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1053 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1054 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1055 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1056 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1057 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1058 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1059 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1060 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1061 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1062 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1063 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1064 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1065 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1066 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1067 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1068 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1069 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1070 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1071 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1072 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1073 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia200GeV.sh b/8layers_cfg1/lancia200GeV.sh index 87be742..3b27ad0 100644 --- a/8layers_cfg1/lancia200GeV.sh +++ b/8layers_cfg1/lancia200GeV.sh @@ -1,22 +1,22 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1026 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1027 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1028 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1029 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1030 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1031 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1032 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1033 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1034 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1035 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1036 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1037 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1038 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1039 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1040 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1041 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1042 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1043 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1044 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1045 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1046 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1047 configuration=1 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1026 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1027 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1028 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1029 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1030 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1031 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1032 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1033 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1034 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1035 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1036 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1037 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1038 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1039 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1040 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1041 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1042 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1043 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1044 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1045 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1046 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1047 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia20GeV.sh b/8layers_cfg1/lancia20GeV.sh index 2bc51a5..bcb49ee 100644 --- a/8layers_cfg1/lancia20GeV.sh +++ b/8layers_cfg1/lancia20GeV.sh @@ -1,19 +1,19 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=916 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=917 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=918 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=919 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=920 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=921 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=922 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=923 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=924 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=925 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=926 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=927 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=928 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=929 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=931 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=932 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=933 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=934 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=916 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=917 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=918 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=919 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=920 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=921 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=922 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=923 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=924 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=925 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=926 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=927 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=928 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=929 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=931 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=932 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=933 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=934 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lancia250GeV.sh b/8layers_cfg1/lancia250GeV.sh index 07428ad..05194dd 100644 --- a/8layers_cfg1/lancia250GeV.sh +++ b/8layers_cfg1/lancia250GeV.sh @@ -1,24 +1,24 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=937 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=938 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=939 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=940 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=941 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=942 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=943 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=944 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=945 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=946 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=947 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=948 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=949 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=950 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=951 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=952 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=953 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=954 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=955 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=956 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=957 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=959 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=960 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=961 configuration=1 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=937 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=938 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=939 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=940 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=941 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=942 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=943 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=944 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=945 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=946 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=947 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=948 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=949 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=950 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=951 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=952 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=953 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=954 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=955 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=956 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=957 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=959 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=960 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=961 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia32GeV.sh b/8layers_cfg1/lancia32GeV.sh index a773679..d91cac0 100644 --- a/8layers_cfg1/lancia32GeV.sh +++ b/8layers_cfg1/lancia32GeV.sh @@ -1,20 +1,20 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1087 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1088 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1089 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1091 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1092 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1093 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1094 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1095 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1096 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1097 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1098 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1099 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1100 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1101 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1102 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1103 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1104 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1105 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1106 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1107 configuration=1 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1087 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1088 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1089 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1091 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1092 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1093 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1094 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1095 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1096 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1097 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1098 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1099 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1100 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1101 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1102 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1103 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1104 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1105 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1106 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1107 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia70GeV.sh b/8layers_cfg1/lancia70GeV.sh index d097490..fd0f664 100644 --- a/8layers_cfg1/lancia70GeV.sh +++ b/8layers_cfg1/lancia70GeV.sh @@ -1,22 +1,22 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=865 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=866 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=867 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=868 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=869 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=870 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=872 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=873 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=874 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=875 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=876 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=877 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=878 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=879 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=880 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=881 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=882 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=883 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=884 configuration=1 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=887 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=888 configuration=1 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=889 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=865 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=866 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=867 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=868 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=869 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=870 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=872 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=873 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=874 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=875 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=876 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=877 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=878 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=879 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=880 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=881 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=882 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=883 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=884 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=887 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=888 configuration=1 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=889 configuration=1 runType=HGCRun diff --git a/8layers_cfg2/lancia100GeV.sh b/8layers_cfg2/lancia100GeV.sh index c4e70d1..1a72798 100644 --- a/8layers_cfg2/lancia100GeV.sh +++ b/8layers_cfg2/lancia100GeV.sh @@ -1,18 +1,18 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia200GeV.sh b/8layers_cfg2/lancia200GeV.sh index df51f48..157fd14 100644 --- a/8layers_cfg2/lancia200GeV.sh +++ b/8layers_cfg2/lancia200GeV.sh @@ -1,21 +1,21 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia20GeV.sh b/8layers_cfg2/lancia20GeV.sh index 5a7ea48..f115088 100644 --- a/8layers_cfg2/lancia20GeV.sh +++ b/8layers_cfg2/lancia20GeV.sh @@ -1,20 +1,20 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia250GeV.sh b/8layers_cfg2/lancia250GeV.sh index 3957d98..c994fc0 100644 --- a/8layers_cfg2/lancia250GeV.sh +++ b/8layers_cfg2/lancia250GeV.sh @@ -1,20 +1,20 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia32GeV.sh b/8layers_cfg2/lancia32GeV.sh index e0c74ba..a9f0f55 100644 --- a/8layers_cfg2/lancia32GeV.sh +++ b/8layers_cfg2/lancia32GeV.sh @@ -1,20 +1,20 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia70GeV.sh b/8layers_cfg2/lancia70GeV.sh index 2e3c2eb..129182d 100644 --- a/8layers_cfg2/lancia70GeV.sh +++ b/8layers_cfg2/lancia70GeV.sh @@ -1,21 +1,21 @@ -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun -#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun +#cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file From f4b0fb12f048a1cba30cd000382176f4bd90d5c5 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 11:28:50 +0100 Subject: [PATCH 046/297] updated weights --- .../GeometrySetup/setup1_data_CERN.txt | 76 ++++ .../setup_data_CERN_setup28Layers.txt | 140 ++++++ ...up_data_CERN_setup8Layers_centerShower.txt | 59 +++ ...etup_data_CERN_setup8Layers_tailShower.txt | 76 ++++ .../GeometrySetup/setup_data_FNAL.txt | 95 ++++ .../setup_data_FNAL_28layers.txt | 140 ++++++ .../GeometrySetup/setup_data_test.txt | 140 ++++++ .../NonNormalized_calculate_layer_weights.py | 126 ++++++ produceWeights/doPlots.C | 178 ++++++++ produceWeights/fitResolution.C | 362 +++++++++++++++ produceWeights/fitResolution_data.C | 423 ++++++++++++++++++ produceWeights/simple.C | 264 +++++++++++ produceWeights/simple_Data.C | 297 ++++++++++++ 13 files changed, 2376 insertions(+) create mode 100644 produceWeights/GeometrySetup/setup1_data_CERN.txt create mode 100644 produceWeights/GeometrySetup/setup_data_CERN_setup28Layers.txt create mode 100644 produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_centerShower.txt create mode 100644 produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_tailShower.txt create mode 100644 produceWeights/GeometrySetup/setup_data_FNAL.txt create mode 100644 produceWeights/GeometrySetup/setup_data_FNAL_28layers.txt create mode 100644 produceWeights/GeometrySetup/setup_data_test.txt create mode 100644 produceWeights/NonNormalized_calculate_layer_weights.py create mode 100644 produceWeights/doPlots.C create mode 100644 produceWeights/fitResolution.C create mode 100644 produceWeights/fitResolution_data.C create mode 100644 produceWeights/simple.C create mode 100644 produceWeights/simple_Data.C diff --git a/produceWeights/GeometrySetup/setup1_data_CERN.txt b/produceWeights/GeometrySetup/setup1_data_CERN.txt new file mode 100644 index 0000000..c6cf37b --- /dev/null +++ b/produceWeights/GeometrySetup/setup1_data_CERN.txt @@ -0,0 +1,76 @@ +25.2,Pb +6,Cu +0.6,WCu +0.1,Si +0.2,Si +11,Air +4,W +9,Air +4,W +7,Air +2,W +4,Air +6,Cu +0.6,WCu +0.1,Si +0.2,Si +15,Air +4,W +11,Air +4,W +7,Air +2,W +3,Air +6,Cu +0.6,WCu +0.1,Si +0.2,Si +15,Air +2.8,W +7,Air +2.8,W +6,Air +2,W +3,Air +6,Cu +1.2,WCu +0.1,Si +0.2,Si +17,Air +4,W +7,Air +2.8,W +7,Air +2,W +10,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +6,Cu +2.2,WCu +0.1,Si +0.2,Si +21,Air +5.6,Pb +2.8,W +7,Air +2,W +15.6,Air +0.2,Si +0.1,Si +2.2,WCu +6,Cu +8,Air +5.6,Pb +2.8,W +6.1,Air +5.6,Pb +2.8,W +7.9,Air +2,W +3.7,Air +6,Cu +2.2,WCu +0.1,Si +0.2,Si diff --git a/produceWeights/GeometrySetup/setup_data_CERN_setup28Layers.txt b/produceWeights/GeometrySetup/setup_data_CERN_setup28Layers.txt new file mode 100644 index 0000000..f419704 --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_CERN_setup28Layers.txt @@ -0,0 +1,140 @@ +2,W +1,Air +0.2,Si +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,Si +1,Air +2,W +1,Air +0.2,Si +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,Si +1,Air +2,W +1,Air +0.2,Si +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,Si +1,Air +2,W +1,Air +0.2,Si +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,Si +1,Air +2,W +1,Air +0.2,Si +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,Si +1,Air +2.8,W +1,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,Si +1,Air +2.8,W +1,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,Si +1,Air +2.8,W +1,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,Si +1,Air +2.8,W +1,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,Si +1,Air +2.8,W +1,Air +0.2,Si +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,Si +1,Air +4.2,W +1,Air +0.2,Si +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,Si +1,Air +4.2,W +1,Air +0.2,Si +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,Si +1,Air +4.2,W +1,Air +0.2,Si +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,Si +1,Air +4.2,W +1,Air +0.2,Si +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,Si +1,Air diff --git a/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_centerShower.txt b/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_centerShower.txt new file mode 100644 index 0000000..874b556 --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_centerShower.txt @@ -0,0 +1,59 @@ +4,W +5,Air +4,W +5,Air +4,W +5,Air +4,W +5,Air +4,W +6,Air +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +23.5,Air +2,W +22.3,Air +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +22.4,Air +2,W +19.6,Air +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +17.8,Air +2,W +13.7,Air +6,Cu +1.6,WCu +0.1,Si +0.2,AcSi +19.4,Air +2,W +19.4,Air +0.2,AcSi +0.1,Si +1.6,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +18.8,Air +2,W +20.3,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +3.2,Air +2,W +4.7,Air +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi diff --git a/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_tailShower.txt b/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_tailShower.txt new file mode 100644 index 0000000..abcfe71 --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_CERN_setup8Layers_tailShower.txt @@ -0,0 +1,76 @@ +25.2,Pb +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +11,Air +4,W +9,Air +4,W +7,Air +2,W +4,Air +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +15,Air +4,W +11,Air +4,W +7,Air +2,W +3,Air +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +15,Air +2.8,W +7,Air +2.8,W +6,Air +2,W +3,Air +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +17,Air +4,W +7,Air +2.8,W +7,Air +2,W +10,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +21,Air +5.6,Pb +2.8,W +7,Air +2,W +15.6,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +8,Air +5.6,Pb +2.8,W +6.1,Air +5.6,Pb +2.8,W +7.9,Air +2,W +3.7,Air +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi diff --git a/produceWeights/GeometrySetup/setup_data_FNAL.txt b/produceWeights/GeometrySetup/setup_data_FNAL.txt new file mode 100644 index 0000000..421a19e --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_FNAL.txt @@ -0,0 +1,95 @@ +2.1,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +0.6,WCu +6,Cu +0.6,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +2.1,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +0.6,WCu +6,Cu +0.6,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +2.1,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +0.6,WCu +6,Cu +1.2,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +2.8,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +1.2,WCu +6,Cu +1.2,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +2.8,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +1.2,WCu +6,Cu +1.2,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +2.8,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +2.2,WCu +6,Cu +2.2,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +4.2,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +2.2,WCu +6,Cu +2.2,WCu +0.2,Air +0.1,Si +0.2,AcSi +7,Air +4.2,W +7,Air +0.2,AcSi +0.1,Si +0.2,Air +2.2,WCu +6,Cu +2.2,WCu +0.2,Air +0.1,Si +0.2,AcSi diff --git a/produceWeights/GeometrySetup/setup_data_FNAL_28layers.txt b/produceWeights/GeometrySetup/setup_data_FNAL_28layers.txt new file mode 100644 index 0000000..60214f9 --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_FNAL_28layers.txt @@ -0,0 +1,140 @@ +2.0,W +1.0,Air +0.2,AcSi +0.1,Si +0.6,WCu +6.0,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.0,W +1.0,Air +0.2,AcSi +0.1,Si +0.6,WCu +6.0,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.0,W +1.0,Air +0.2,AcSi +0.1,Si +0.6,WCu +6.0,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.0,W +1.0,Air +0.2,AcSi +0.1,Si +0.6,WCu +6.0,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.0,W +1.0,Air +0.2,AcSi +0.1,Si +0.6,WCu +6.0,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.8,W +1.0,Air +0.2,AcSi +0.1,Si +1.2,WCu +6.0,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.8,W +1.0,Air +0.2,AcSi +0.1,Si +1.2,WCu +6.0,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.8,W +1.0,Air +0.2,AcSi +0.1,Si +1.2,WCu +6.0,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.8,W +1.0,Air +0.2,AcSi +0.1,Si +1.2,WCu +6.0,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +2.8,W +1.0,Air +0.2,AcSi +0.1,Si +1.2,WCu +6.0,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +4.2,W +1.0,Air +0.2,AcSi +0.1,Si +2.2,WCu +6.0,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +4.2,W +1.0,Air +0.2,AcSi +0.1,Si +2.2,WCu +6.0,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +4.2,W +1.0,Air +0.2,AcSi +0.1,Si +2.2,WCu +6.0,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1.0,Air +4.2,W +1.0,Air +0.2,AcSi +0.1,Si +2.2,WCu +6.0,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1.0,Air diff --git a/produceWeights/GeometrySetup/setup_data_test.txt b/produceWeights/GeometrySetup/setup_data_test.txt new file mode 100644 index 0000000..5918eed --- /dev/null +++ b/produceWeights/GeometrySetup/setup_data_test.txt @@ -0,0 +1,140 @@ +2,W +1,Air +0.2,AcSi +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1,Air +2,W +1,Air +0.2,AcSi +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1,Air +2,W +1,Air +0.2,AcSi +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1,Air +2,W +1,Air +0.2,AcSi +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1,Air +2,W +1,Air +0.2,AcSi +0.1,Si +0.6,WCu +6,Cu +0.6,WCu +0.1,Si +0.2,AcSi +1,Air +2.8,W +1,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1,Air +2.8,W +1,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1,Air +2.8,W +1,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1,Air +2.8,W +1,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1,Air +2.8,W +1,Air +0.2,AcSi +0.1,Si +1.2,WCu +6,Cu +1.2,WCu +0.1,Si +0.2,AcSi +1,Air +4.2,W +1,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1,Air +4.2,W +1,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1,Air +4.2,W +1,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1,Air +4.2,W +1,Air +0.2,AcSi +0.1,Si +2.2,WCu +6,Cu +2.2,WCu +0.1,Si +0.2,AcSi +1,Air diff --git a/produceWeights/NonNormalized_calculate_layer_weights.py b/produceWeights/NonNormalized_calculate_layer_weights.py new file mode 100644 index 0000000..08b256f --- /dev/null +++ b/produceWeights/NonNormalized_calculate_layer_weights.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +from __future__ import print_function, division + +from math import pow + +dEdX_for = {'W': 2.21, 'Cu': 1.257, 'Air': 0, 'Si': 0.3876, 'AcSi': 0.3876, 'Pb': 1.274} +#dEdX_for = {'W': 2.21, 'Cu': 1.257, 'Air': 0, 'Si': 0., 'AcSi': 0.3876, 'Pb': 1.274} +dEdX_for['WCu'] = 0.75*dEdX_for['W'] + 0.25*dEdX_for['Cu'] + +X0_for = {'W': 3.504, 'Cu': 14.36, 'Air': 303900, 'Si': 93.70, 'AcSi': 93.70, 'Pb': 5.612} +X0_for['WCu'] = pow(0.75*pow(X0_for['W'],-1) + 0.25*pow(X0_for['Cu'],-1),-1) + +#path_to_setup_data = "./TM_setup_data_FNAL.txt" +#path_to_setup_data = "./SJ_setup_data_CERN.txt" +#path_to_setup_data = "./setup_data_CERN_setup8Layers_centerShower.txt" +#path_to_setup_data = "./setup_data_CERN_setup28Layers.txt" + +##28 layers +#path_to_setup_data = "./setup_data_test.txt" +##8layers central shower +#path_to_setup_data = "./GeometrySetup/setup_data_CERN_setup8Layers_centerShower.txt" + +##8layers tail shower +#path_to_setup_data = "./GeometrySetup/setup_data_CERN_setup8Layers_tailShower.txt" + +#path_to_setup_data = "./GeometrySetup/setup_data_FNAL.txt" + +## 28 layers FNAL +path_to_setup_data = "./GeometrySetup/setup_data_FNAL_28layers.txt" + +dEdX_times_deltaX_before_first_layer = 0 +radiation_lengths_before_first_layer = 0 # this means 0 radiation lengths before the beam encounters the first sublayer + +def getAveragedWeights(weights_raw): + averagedWeights = [] + for layerCounter in range(0,len(weights_raw)-1): # first to (n-1)th layers, where n is the total number of layers + averagedWeights += [0.5*(weights_raw[layerCounter]+weights_raw[layerCounter+1])] + averagedWeights += [weights_raw[-1]] # last layer + return averagedWeights + +def getNormalized(weights): + normalizationFactor = len(weights)/sum(weights) + normalizedWeights = [] + for weight in weights: + normalizedWeights.append(weight*normalizationFactor) + return normalizedWeights + +def printGapWithText(text): + print ("\n"+"-"*100) + print ("%s"%(text)) + +def getPrettierArray(weights): + prettierArray = [] + for weight in weights: + prettierArray += [float("%.3f"%(weight))] + return prettierArray + +printGapWithText("dEdXs for materials: %s"%(dEdX_for)) +printGapWithText("X0s for materials: %s"%(X0_for)) + +dEdXs = [] +X0s = [] + +setup_data = open(path_to_setup_data) +lastLayer = "" +dEdX_layer = 0 +X0_layer = 0 + +# Initialize with some number of radiation lengths/dEdX times deltaX: +dEdX_layer = dEdX_times_deltaX_before_first_layer +X0_layer = radiation_lengths_before_first_layer + +for sublayer_data in setup_data: + sublayer_data_array = (sublayer_data.strip()).split(',') + sublayer = [float(sublayer_data_array[0]), sublayer_data_array[1]] + print ("Sublayer: %s"%(sublayer)) + if (sublayer[1] == "AcSi"): + #print (" AAAA sublayer[0]*dEdX_for[sublayer[1]] = %s"%(sublayer[0])) + dEdXs.append(dEdX_layer) + X0s.append(X0_layer) + dEdX_layer = 0 + X0_layer = 0 + if (sublayer[1] != "AcSi"): + dEdX_layer += sublayer[0]*dEdX_for[sublayer[1]] + #print (" #### sublayer[0]*dEdX_for[sublayer[1]] = %s"%(sublayer[0]*dEdX_for[sublayer[1]])) + X0_layer += sublayer[0]/X0_for[sublayer[1]] + lastLayer = sublayer[1] + +dEdXs.append(dEdX_layer) +X0s.append(X0_layer) + +printGapWithText("Checking... sum_over_sublayers(dE/dX(sublayer)*thickness(sublayer)) = %s"%(getPrettierArray(dEdXs))) +printGapWithText("Checking... sum_over_sublayers(thickness(sublayer)/X0(sublayer)) = %s"%(getPrettierArray(X0s))) + +printGapWithText("Checking... total number of radiation lengths: %f"%(sum(X0s))) + +dEdX_normalization_factor = len(dEdXs)/sum(dEdXs) +X0_normalization_factor = len(X0s)/sum(X0s) + +dEdXs_normalized = getNormalized(dEdXs) +X0s_normalized = getNormalized(X0s) + +dEdXs_averaged_nn = getAveragedWeights(dEdXs) +X0s_averaged_nn = getAveragedWeights(X0s) + +dEdXs_averaged = getNormalized(getAveragedWeights(dEdXs)) +X0s_averaged = getNormalized(getAveragedWeights(X0s)) + +printGapWithText("Checking... dEdX weights, unnormalized: %s"%(getPrettierArray(dEdXs))) +printGapWithText("Checking... X0 weights, unnormalized: %s"%(getPrettierArray(X0s))) + +printGapWithText("Checking... sum of dEdX weights after normalization: %f"%(sum(dEdXs_normalized))) +printGapWithText("Checking... sum of X0 weights after normalization: %f"%(sum(X0s_normalized))) +printGapWithText("Checking... sum of dEdX averaged weights after normalization: %f"%(sum(dEdXs_averaged))) +printGapWithText("Checking... sum of X0 averaged weights after normalization: %f"%(sum(X0s_averaged))) + +printGapWithText("Normalized dEdX weights: %s"%(getPrettierArray(dEdXs_normalized))) +printGapWithText("Normalized X0 weights: %s"%(getPrettierArray(X0s_normalized))) + +printGapWithText(" >>>> Non Normalized averaged dEdX weights: %s"%(getPrettierArray(dEdXs_averaged_nn))) +printGapWithText("Non Normalized averaged X0 weights: %s"%(getPrettierArray(X0s_averaged_nn))) + +printGapWithText("Normalized averaged dEdX weights: %s"%(getPrettierArray(dEdXs_averaged))) +printGapWithText("Normalized averaged X0 weights: %s"%(getPrettierArray(X0s_averaged))) +printGapWithText("") diff --git a/produceWeights/doPlots.C b/produceWeights/doPlots.C new file mode 100644 index 0000000..0e3343b --- /dev/null +++ b/produceWeights/doPlots.C @@ -0,0 +1,178 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + +#include "/afs/cern.ch/work/a/amartell/ES_P5/CMSSW_7_4_6_patch6/src/MyAnalyzer/ESAnalyzer/macroAnalysis/langausfit.h" + +void doPlots(int nLayer, int energyEle, int config){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptTitle(0); + + float dEdX_weights[28]; + float X0val[28]; + + if(nLayer == 28){ + float dEdX_weights_28[28] = {7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 8.087, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 10.817, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 8.148}; + float X0val_28[28] = {0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_28[j]; + X0val[j] = X0val_28[j]; + } + } + else{ + if(config == 1){ + // float dEdX_weights_8[28] = {33.151, 13.261, 14.247, 9.885, 9.844, 9.844, 16.416, 28.296, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float dEdX_weights_8[28] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + else if(config == 2){ + float dEdX_weights_8[28] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + } + + + + float EtoMip = 56.31e-06; // 125pion MPV response + + float weights2GeV = 1.e-03; + float weights2MIP = 1.; // weights with MIP from PDG + float MIP2GeV_sim = EtoMip * 74.76e-06 / 56.31e-06; // recalibrate to mean 500MeV muon response + + float G4Escale = 1.; // 0.83; // >>> fix scale in data mc for Si + + + TChain* t = new TChain("HGCalTBAnalyzer/HGCTB"); + + if(nLayer == 8 && config == 1){ + std::string nameFolder = ""; + if(energyEle == 20) nameFolder = "161101_094655"; + if(energyEle == 35) nameFolder = "161031_180636"; + if(energyEle == 70) nameFolder = "161031_180644"; + if(energyEle == 100) nameFolder = "161101_094708"; + if(energyEle == 200) nameFolder = "161031_180705"; + if(energyEle == 250) nameFolder = "161031_180712"; + + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + } + } + } + else if(nLayer == 8 && config == 2){ + std::string nameFolder = ""; + if(energyEle == 20) nameFolder = "161108_231750"; + //if(energyEle == 200) nameFolder = "160927_101553"; + + if(energyEle == 250) nameFolder = "161108_231833"; + if(energyEle == 70) nameFolder = "161109_074724"; + if(energyEle == 100) nameFolder = "161108_231811"; + + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIIv4_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + } + } + } + else{ + std::string nameFolder = ""; + if(energyEle == 20) nameFolder = "161031_180325"; + if(energyEle == 35) nameFolder = "161031_180332"; + if(energyEle == 70) nameFolder = "161031_180339"; + if(energyEle == 100) nameFolder = "161031_180346"; + if(energyEle == 150) nameFolder = "161031_180353"; + if(energyEle == 200) nameFolder = "161031_180401"; + if(energyEle == 250) nameFolder = "161101_095433"; + + +for(int iFo=0; iFo<2; ++iFo){ +for(int iF=0; iF<1000; ++iF){ +t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + } + } + } + + double totEntries = t->GetEntries(); + std::cout << " tree read => entries = " << totEntries << std::endl; + + TH1F* enLayer[28]; + TH1F* enLayerCorr[28]; + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i] = new TH1F(Form("enLayer%d", i+1), "", 5000, 0., 0.5); + enLayerCorr[i] = new TH1F(Form("enLayerCorr%d", i+1), "", 5000, 0., 10.); + } + + TH1F* recoEnergy = new TH1F("recoEnergy", "", 5000, 0., 500.); + TH1F* recoEnergyRel = new TH1F("recoEnergyRel", "", 1000, 0., 2.); + + double xBeam, yBeam; + std::vector* simHitLayEn2E = 0; + t->SetBranchAddress("simHitLayEn2E", &simHitLayEn2E); + t->SetBranchAddress("xBeam", &xBeam); + t->SetBranchAddress("yBeam", &yBeam); + + + //looping over entries + for(int iE=0; iEGetEntry(iE); + // std::cout << " simHitLayEn2E->size() = " << simHitLayEn2E->size() << std::endl; + if(abs(xBeam) >= 2 || abs(yBeam) >= 2) continue; + float totEnergy = 0.; + for(int iS=0; iSsize(); ++iS){ + enLayer[iS]->Fill(simHitLayEn2E->at(iS)); + + // std::cout << " E = " simHitLayEn2E->at(iS) << << std::endl; + float localE = simHitLayEn2E->at(iS) / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); + + enLayerCorr[iS]->Fill(localE); + totEnergy += localE; + } + recoEnergy->Fill(totEnergy); + recoEnergyRel->Fill(totEnergy/(1.*energyEle)); + } + + + TFile* outF; + if(nLayer == 28) outF = new TFile(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle), "recreate"); + else if(config == 1) outF = new TFile(Form("energyLayer_ROOT/outF_Ele%d.root", energyEle), "recreate"); + else if(config == 2) outF = new TFile(Form("energyLayer_ROOT/outF_endShower_Ele%d.root", energyEle), "recreate"); + outF->cd(); + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i]->Write(); + enLayerCorr[i]->Write(); + } + recoEnergy->Write(); + recoEnergyRel->Write(); + outF->Close(); + + +} diff --git a/produceWeights/fitResolution.C b/produceWeights/fitResolution.C new file mode 100644 index 0000000..5db6f40 --- /dev/null +++ b/produceWeights/fitResolution.C @@ -0,0 +1,362 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + + + +void fitResolution(){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + + + /* + int nLayers = 28; + int config = 1; + int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; + int energyP[5] = {20, 70, 100, 200, 250}; + */ + + + + int nLayers = 8; + int config = 1; + int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; + int energyP[5] = {20, 70, 100, 200, 250}; + + + + /* + int nLayers = 8; + int config = 2; + int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kBlack}; + int energyP[5] = {20, 70, 100, 200, 250}; + */ + + + TGraphErrors* tg[5]; + TGraphErrors* tgR[5]; + TGraphErrors* tgS[5]; + for(int iT=0; iT<5; ++iT){ + // if(nLayers == 28 && iT >= 4) continue; + tg[iT] = new TGraphErrors(); + tg[iT]->SetName(Form("mean_E%d", energyP[iT])); + // tg[iT]->SetPoint(0, -1, -1); + + // tg[iT]->SetLineColor(iColors[iT]); + // tg[iT]->SetMarkerColor(iColors[iT]); + tg[iT]->SetMarkerStyle(20); + + tgR[iT] = new TGraphErrors(); + tgR[iT]->SetName(Form("resolution_E%d", energyP[iT])); + // tgR[iT]->SetPoint(0, -1, -1); + + // tgR[iT]->SetLineColor(iColors[iT]); + // tgR[iT]->SetMarkerColor(iColors[iT]); + tgR[iT]->SetMarkerStyle(20); + + tgS[iT] = new TGraphErrors(); + tgS[iT]->SetName(Form("resolutionS_E%d", energyP[iT])); + // tgS[iT]->SetPoint(0, -1, -1); + + // tgS[iT]->SetLineColor(iColors[iT]); + // tgS[iT]->SetMarkerColor(iColors[iT]); + tgS[iT]->SetMarkerStyle(20); + } + + + TFile* inF[5]; + if(nLayers == 8 && config == 1){ + for(int iP=0; iP<5; ++iP) + inF[iP] = TFile::Open(Form("energyLayer_ROOT/outF_Ele%d.root", energyP[iP])); + } + else if(nLayers == 8 && config == 2){ + for(int iP=0; iP<5; ++iP) + inF[iP] = TFile::Open(Form("energyLayer_ROOT/outF_endShower_Ele%d.root", energyP[iP])); + } + else{ + for(int iP=0; iP<5; ++iP) + inF[iP] = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyP[iP])); + } + + TH1F* recoEnergy[5]; + TH1F* recoEnergyRel[5]; + + TF1* fitF[5]; + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + fitF[iP] = new TF1(Form("E%d",energyP[iP]), "gaus", 0, 500); + } + + + TF1* fitFRel[5]; + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + fitFRel[iP] = new TF1(Form("E%dR",energyP[iP]), "gaus", 0, 500); + } + + + for(int iC=0; iC<5; ++iC){ + // if(nLayers == 28 && iC >=4) continue; + recoEnergy[iC] = (TH1F*)(inF[iC]->Get("recoEnergy")); + recoEnergyRel[iC] = (TH1F*)(inF[iC]->Get("recoEnergyRel")); + + recoEnergy[iC]->SetLineColor(iColors[iC]); + recoEnergy[iC]->SetLineWidth(2); + + recoEnergyRel[iC]->SetLineColor(iColors[iC]); + recoEnergyRel[iC]->SetLineWidth(2); + + fitF[iC]->SetParameters(recoEnergy[iC]->Integral(), recoEnergy[iC]->GetMean(), recoEnergy[iC]->GetRMS()); + fitF[iC]->SetLineColor(iColors[iC]); + + fitFRel[iC]->SetParameters(recoEnergyRel[iC]->Integral(), recoEnergyRel[iC]->GetMean(), recoEnergyRel[iC]->GetRMS()); + fitFRel[iC]->SetLineColor(iColors[iC]); + } + + + std::cout << " ci sono " << std::endl; + + TLegend *legTGM = new TLegend(0.80,0.30,0.95,0.55,NULL,"brNDC"); + legTGM->SetTextFont(42); + legTGM->SetFillColor(kWhite); + legTGM->SetLineColor(kWhite); + legTGM->SetShadowColor(kWhite); + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + legTGM->AddEntry(recoEnergy[iP], Form("%dGeV", energyP[iP]), "l"); + } + + + TLegend *leg = new TLegend(0.80,0.70,0.98,0.95,NULL,"brNDC"); + leg->SetTextFont(42); + leg->SetFillColor(kWhite); + leg->SetLineColor(kWhite); + leg->SetShadowColor(kWhite); + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + leg->AddEntry(recoEnergy[iP], Form("%dGeV", energyP[iP]), "l"); + } + + + TLatex t1; + t1.SetNDC(); + t1.SetTextSize(0.03); + t1.SetTextFont(132); + t1.SetTextColor(kRed); + + TLatex t2; + t2.SetNDC(); + t2.SetTextSize(0.03); + t2.SetTextFont(132); + t2.SetTextColor(kBlue); + + + TLatex t3; + t3.SetNDC(); + t3.SetTextSize(0.03); + t3.SetTextFont(132); + t3.SetTextColor(kGreen+2); + + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + recoEnergy[iP]->Fit(Form("E%d", energyP[iP]), "R"); + } + + // float energyValues[5] = {10., 30., 60., 100., 250.}; + + // std::string folder = "plots"+std::string(Form("_E%d",ene)); + std::string folder = "plots_Energy"; + // std::string folder = "plots_E250"; + + /* + TCanvas* chE = new TCanvas(); + chE->cd(); + recoEnergy[0]->GetXaxis()->SetTitle("#Sigma E_{i}"); + recoEnergy[0]->Draw(); + for(int iP=1; iP<5; ++iP){ + recoEnergy[iP]->Draw("same"); + } + t1.DrawLatex(0.2,0.9,Form("m = %.2e +/- %.2e #sigma = %.2e +/- %.2e", fitF[0]->GetParameter(1), fitF[0]->GetParError(1), + fitF[0]->GetParameter(2), fitF[0]->GetParError(2))); + t2.DrawLatex(0.2,0.85,Form("m = %.2e +/- %.2e #sigma = %.2e +/- %.2e", fitF[1]->GetParameter(1), fitF[1]->GetParError(1), + fitF[1]->GetParameter(2), fitF[1]->GetParError(2))); + t3.DrawLatex(0.2,0.8,Form("m = %.2e +/- %.2e #sigma = %.2e +/- %.2e", fitF[2]->GetParameter(1), fitF[2]->GetParError(1), + fitF[2]->GetParameter(2), fitF[2]->GetParError(2))); + + leg->Draw("same"); + chE->Print(Form((folder+"/energyPlots_layers%d_config%d.png").c_str(), nLayers, config), "png"); + chE->Print(Form((folder+"/energyPlots_layers%d_config%d.root").c_str(), nLayers, config), "root"); + */ + + ///////////////////////////// + + for(int iP=0; iP<5; ++iP) + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + recoEnergy[iP]->Fit(Form("E%dR", energyP[iP]), "R"); + } + + TCanvas* chER = new TCanvas(); + chER->cd(); + recoEnergy[0]->GetXaxis()->SetTitle("#Sigma E_{i} / E_{beam}"); + recoEnergy[0]->GetXaxis()->SetRangeUser(10, 250.); + recoEnergy[0]->GetYaxis()->SetRangeUser(0., 10.e+03); + if(nLayers == 8){ + recoEnergy[0]->GetXaxis()->SetRangeUser(10., 250.); + recoEnergy[0]->GetYaxis()->SetRangeUser(0., 3.e+03); + } + recoEnergy[0]->Draw(); + for(int iP=1; iP<5; ++iP){ + recoEnergy[iP]->Draw("same"); + } + + for(int iT=0; iT<5; ++iT){ + + tg[0]->SetPoint(iT+1, energyP[iT], fitFRel[iT]->GetParameter(1)/energyP[iT]); + tg[0]->SetPointError(iT+1, 0., fitFRel[iT]->GetParError(1) / energyP[iT]); + + tgR[0]->SetPoint(iT+1, 1./energyP[iT], pow(fitFRel[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100.); + tgR[0]->SetPointError(iT+1, 0., 100.*pow(fitFRel[iT]->GetParError(2),2.)/ (1.* energyP[iT])); + + tgS[0]->SetPoint(iT+1, energyP[iT], fitFRel[iT]->GetParameter(2) / fitFRel[iT]->GetParameter(1)); + tgS[0]->SetPointError(iT+1, 0., sqrt( pow(fitFRel[iT]->GetParameter(2) / fitFRel[iT]->GetParameter(1) * sqrt( pow(fitFRel[iT]->GetParError(2)/fitFRel[iT]->GetParameter(2), 2.) + + pow(fitFRel[iT]->GetParError(1)/fitFRel[iT]->GetParameter(1), 2.) ), 2.) ) ); + + + //std::cout << " >>> energyP[iT] = " << energyP[iT] << " fitF[iT]->GetParameter(1) / (1.* energyP[iT]) = " << fitF[iT]->GetParameter(1) / (1.* energyP[iT]) << std::endl; + // std::cout << " >>> energyP[iT] = " << energyP[iT] << " Y = " << pow(fitF[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100. << std::endl; + + tg[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgR[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgS[0]->SetPoint(tg[iT]->GetN(), 400, 5); + } + leg->Draw("same"); + chER->Print(Form((folder+"/energyPlots_layers%d_config%d.png").c_str(), nLayers, config), "png"); + chER->Print(Form((folder+"/energyPlots_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + + + /////////TGraph + TCanvas* tgM = new TCanvas(); + tgM->cd(); + tg[0]->GetYaxis()->SetTitle("#Sigma E_{i} / E_{beam}"); + tg[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tg[0]->GetXaxis()->SetRangeUser(0, 300.); + tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tg[0]->Draw("ap"); + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + + /* + /////////TGraph + TCanvas* tgReso = new TCanvas(); + tgReso->cd(); + tgR[0]->GetYaxis()->SetTitle("#sigma(E) / E)^{2} (%)"); + tgR[0]->GetXaxis()->SetTitle("#gamma 1/E (GeV)"); + tgR[0]->GetXaxis()->SetRangeUser(0, 0.15); + tgR[0]->GetYaxis()->SetRangeUser(0., 1.); + tgR[0]->Draw("ap"); + tgR[1]->Draw("p, same"); + tgR[2]->Draw("p, same"); + legTGM->Draw("same"); + tgReso->Print((folder+"/energy_ResolutionVsEnergy.png").c_str(), "png"); + */ + + + gStyle->SetOptFit(1); + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + + /* + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([2], 2.))", 10., 250.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "C"); + */ + + tgS[0]->Fit("fitReso", "R"); + fitReso->SetLineColor(kGreen+2); + fitReso->SetLineWidth(2); + + + /////////TGraph simple + TCanvas* tgResoS = new TCanvas(); + tgResoS->cd(); + tgS[0]->GetYaxis()->SetTitle("#sigma( #Sigma E) / #Sigma E"); + tgS[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tgS[0]->GetXaxis()->SetRangeUser(0., 300.); + tgS[0]->GetYaxis()->SetRangeUser(0., 0.3); + tgS[0]->Draw("ap"); + fitReso->Draw("same"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + return; + //////////////// + TFile* inF2[5]; + if(nLayers == 28 && config == 1){ + for(int iP=0; iP<4; ++iP) + inF2[iP] = TFile::Open(Form("showers_ROOT/analyzed_28layers_Ele%d.root", energyP[iP])); + } + else if(nLayers == 8 && config == 2){ + for(int iP=0; iP<5; ++iP) + inF2[iP] = TFile::Open(Form("showers_ROOT/analyzed_endShower_Ele%d.root", energyP[iP])); + } + else{ + for(int iP=0; iP<5; ++iP) + inF2[iP] = TFile::Open(Form("showers_ROOT/analyzed_Ele%d.root", energyP[iP])); + } + + + std::cout << " >>> fatto " << std::endl; + TGraphErrors* tEF[5]; + for(int iT=0; iT<5; ++iT){ + // if(nLayers == 28 && iT >= 4) continue; + tEF[iT] = (TGraphErrors*)inF2[iT]->Get("beamEfraction_layer"); + tEF[iT]->SetName(Form("beamEfractionvsL_E%d", energyP[iT])); + + tEF[iT]->SetMarkerStyle(20); + tEF[iT]->SetMarkerColor(iColors[iT]); + tEF[iT]->SetLineColor(iColors[iT]); + tEF[iT]->SetLineWidth(2); + tEF[iT]->SetLineStyle(iT); + } + + + + TCanvas* tgBeamEF = new TCanvas(); + tgBeamEF->cd(); + tEF[0]->GetXaxis()->SetTitle("shower depth (X_{0})"); + tEF[0]->GetYaxis()->SetTitle("#Sigma_{layer} E_{layer} / E_{beam}"); + tEF[0]->GetXaxis()->SetRangeUser(0., 300.); + tEF[0]->GetYaxis()->SetRangeUser(0., 1.1); + tEF[0]->Draw("ap"); + for(int iT=1; iT<5; ++iT){ + // if(nLayers == 28 && iT >= 4) continue; + tEF[iT]->Draw("p, same"); + } + legTGM->Draw("same"); + tgBeamEF->Print(Form((folder+"/beamEnergyFractionLayer%d_config%d.png").c_str(), nLayers, config), "png"); + + +} diff --git a/produceWeights/fitResolution_data.C b/produceWeights/fitResolution_data.C new file mode 100644 index 0000000..396ddb9 --- /dev/null +++ b/produceWeights/fitResolution_data.C @@ -0,0 +1,423 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + + + +void fitResolution_data(){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + + + /* + int nLayers = 28; + int config = 1; + int iColors[3] = {kRed, kBlue, kGreen+2}; + int energyP[3] = {20, 100, 200}; + */ + + + /* + int nLayers = 8; + int config = 1; + int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; + int energyP[6] = {20, 32, 70, 100, 200, 250}; + */ + + + + int nLayers = 8; + int config = 2; + int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; //, kBlack}; + int energyP[6] = {20, 32, 70, 100, 200, 250}; + + + + TGraphErrors* tg[6]; + TGraphErrors* tgR[6]; + TGraphErrors* tgS[6]; + for(int iT=0; iT<6; ++iT){ + if(nLayers == 28 && iT >= 3) continue; + tg[iT] = new TGraphErrors(); + tg[iT]->SetName(Form("mean_E%d", energyP[iT])); + tg[iT]->SetMarkerStyle(20); + + tgR[iT] = new TGraphErrors(); + tgR[iT]->SetName(Form("resolution_Mip%d", energyP[iT])); + tgR[iT]->SetMarkerStyle(20); + + tgS[iT] = new TGraphErrors(); + tgS[iT]->SetName(Form("resolutionS_E%d", energyP[iT])); + tgS[iT]->SetMarkerStyle(20); + } + + TFile* inF[5]; + if(nLayers == 8 && config == 1){ + for(int iP=0; iP<6; ++iP) + inF[iP] = TFile::Open(Form("showers_ROOT_data/analyzed_Ele%d.root", energyP[iP])); + } + else if(nLayers == 8 && config == 2){ + for(int iP=0; iP<6; ++iP) + inF[iP] = TFile::Open(Form("showers_ROOT_data/analyzed_endShower_Ele%d.root", energyP[iP])); + } + else{ + for(int iP=0; iP<3; ++iP) + inF[iP] = TFile::Open(Form("showers_ROOT_data/analyzed_28layers_Ele%d.root", energyP[iP])); + } + + + TH1F* recoEnergy[6]; + TH1F* recoEnergy_up[6]; + TH1F* recoEnergy_dw[6]; + + TH1F* recoMip[6]; + TH1F* recoMip_up[6]; + TH1F* recoMip_dw[6]; + + for(int iC=0; iC<6; ++iC){ + if(nLayers == 28 && iC >=3) continue; + recoEnergy[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all_AbsW_GeV")); + recoEnergy_up[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all_AbsW_GeV_up")); + recoEnergy_dw[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all_AbsW_GeV_dw")); + + recoEnergy[iC]->SetLineColor(iColors[iC]); + recoEnergy[iC]->SetLineWidth(2); + + recoMip[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all")); + recoMip_up[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all_up")); + recoMip_dw[iC] = (TH1F*)(inF[iC]->Get("h_eAll_all_dw")); + + recoMip[iC]->SetLineColor(iColors[iC]); + recoMip[iC]->SetLineWidth(2); + + + recoEnergy[iC]->Rebin(2); + recoEnergy_up[iC]->Rebin(2); + recoEnergy_dw[iC]->Rebin(2); + + recoMip[iC]->Rebin(10); + recoMip_up[iC]->Rebin(10); + recoMip_dw[iC]->Rebin(10); + + } + + + + TF1* fitF[6]; + TF1* fitF_up[6]; + TF1* fitF_dw[6]; + + TF1* fitM[6]; + TF1* fitM_up[6]; + TF1* fitM_dw[6]; + for(int iP=0; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + fitF[iP] = new TF1(Form("E%d",energyP[iP]), "gaus", recoEnergy[iP]->GetMean() - 0.5* recoEnergy[iP]->GetRMS(), recoEnergy[iP]->GetMean() + 2.* recoEnergy[iP]->GetRMS()); + fitF_up[iP] = new TF1(Form("E%d_up",energyP[iP]), "gaus", recoEnergy_up[iP]->GetMean() - 0.5* recoEnergy_up[iP]->GetRMS(), recoEnergy_up[iP]->GetMean() + 2.* recoEnergy_up[iP]->GetRMS()); + fitF_dw[iP] = new TF1(Form("E%d_dw",energyP[iP]), "gaus", recoEnergy_dw[iP]->GetMean() - 0.5* recoEnergy_dw[iP]->GetRMS(), recoEnergy_dw[iP]->GetMean() + 2.* recoEnergy_dw[iP]->GetRMS()); + fitM[iP] = new TF1(Form("M%d",energyP[iP]), "gaus", recoMip[iP]->GetMean() - 0.5* recoMip[iP]->GetRMS(), recoMip[iP]->GetMean() + 2.* recoMip[iP]->GetRMS()); + fitM_up[iP] = new TF1(Form("M%d_up",energyP[iP]), "gaus", recoMip_up[iP]->GetMean() - 0.5* recoMip_up[iP]->GetRMS(), recoMip_up[iP]->GetMean() + 2.* recoMip_up[iP]->GetRMS()); + fitM_dw[iP] = new TF1(Form("M%d_dw",energyP[iP]), "gaus", recoMip_dw[iP]->GetMean() - 0.5* recoMip_dw[iP]->GetRMS(), recoMip_dw[iP]->GetMean() + 2.* recoMip_dw[iP]->GetRMS()); + + fitF[iP]->SetParameters(recoEnergy[iP]->Integral(), recoEnergy[iP]->GetMean(), recoEnergy[iP]->GetRMS()); + fitF[iP]->SetLineColor(iColors[iP]); + + fitM[iP]->SetParameters(recoMip[iP]->Integral(), recoMip[iP]->GetMean(), recoMip[iP]->GetRMS()); + fitM[iP]->SetLineColor(iColors[iP]); + // std::out << << std::endl; + } + + std::cout << " ci sono " << std::endl; + // return; + TLegend *legTGM = new TLegend(0.80,0.30,0.95,0.55,NULL,"brNDC"); + legTGM->SetTextFont(42); + legTGM->SetFillColor(kWhite); + legTGM->SetLineColor(kWhite); + legTGM->SetShadowColor(kWhite); + for(int iP=0; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + legTGM->AddEntry(recoEnergy[iP], Form("%dGeV", energyP[iP]), "l"); + } + + + TLegend *leg = new TLegend(0.80,0.70,0.98,0.95,NULL,"brNDC"); + leg->SetTextFont(42); + leg->SetFillColor(kWhite); + leg->SetLineColor(kWhite); + leg->SetShadowColor(kWhite); + for(int iP=0; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + leg->AddEntry(recoEnergy[iP], Form("%dGeV", energyP[iP]), "l"); + } + + + std::string folder = "plots_Energy_data"; + + ///////////////////////////// + + for(int iP=0; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + recoEnergy[iP]->Fit(Form("E%d", energyP[iP]), "RQ"); + recoEnergy_up[iP]->Fit(Form("E%d_up", energyP[iP]), "RQ"); + recoEnergy_dw[iP]->Fit(Form("E%d_dw", energyP[iP]), "RQ"); + + recoMip[iP]->Fit(Form("M%d", energyP[iP]), "RQ"); + recoMip_up[iP]->Fit(Form("M%d_up", energyP[iP]), "RQ"); + recoMip_dw[iP]->Fit(Form("M%d_dw", energyP[iP]), "RQ"); + + // std::cout << "*********** mean fit = " << fitM[iP]->GetParameter(1) << std::endl; + } + + // return; + + TCanvas* chE = new TCanvas(); + chE->cd(); + recoEnergy[0]->GetXaxis()->SetTitle("#Sigma E_{i} (GeV)"); + recoEnergy[0]->GetXaxis()->SetRangeUser(0.7, 1.3); + recoEnergy[0]->GetYaxis()->SetRangeUser(0., 100.e+03); + if(nLayers == 8){ + recoEnergy[0]->GetXaxis()->SetRangeUser(0., 300.); + recoEnergy[0]->GetYaxis()->SetRangeUser(0., 1.2e+03); + } + recoEnergy[0]->Draw(); + for(int iP=1; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + recoEnergy[iP]->Draw("same"); + } + leg->Draw("same"); + chE->Print(Form((folder+"/energyPlots_layers%d_config%d.png").c_str(), nLayers, config), "png"); + chE->Print(Form((folder+"/energyPlots_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + TCanvas* chM = new TCanvas(); + chM->cd(); + recoMip[0]->GetXaxis()->SetTitle("#Sigma E_{i} (MIP)"); + recoMip[0]->GetXaxis()->SetRangeUser(0.7, 1.3); + recoMip[0]->GetYaxis()->SetRangeUser(0., 100.e+03); + if(nLayers == 8){ + recoMip[0]->GetXaxis()->SetRangeUser(0., 10.e+03); + recoMip[0]->GetYaxis()->SetRangeUser(0., 1.e+03); + } + recoMip[0]->Draw(); + for(int iP=1; iP<6; ++iP){ + if(nLayers == 28 && iP >=3) continue; + recoMip[iP]->Draw("same"); + } + leg->Draw("same"); + chM->Print(Form((folder+"/mipPlots_layers%d_config%d.png").c_str(), nLayers, config), "png"); + chM->Print(Form((folder+"/mipPlots_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + // return; + + + for(int iT=0; iT<6; ++iT){ + if(nLayers == 28 && iT >=3) continue; + + tg[0]->SetPoint(iT+1, energyP[iT], fitF[iT]->GetParameter(1)/energyP[iT]); + tg[0]->SetPointError(iT+1, 0., sqrt(pow(fitF[iT]->GetParError(1)/energyP[iT], 2.) + pow(abs(fitF_up[iT]->GetParameter(1) - fitF_dw[iT]->GetParameter(1)) /2. / energyP[iT], 2.) ) ); + + std::cout << " >>>>>>> in MIP energy = " << energyP[iT] << " reso = " << fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1) << std::endl; + tgR[0]->SetPoint(iT+1, energyP[iT], fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1)); + tgR[0]->SetPointError(iT+1, 0., sqrt( pow(fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1) * sqrt( pow(fitM[iT]->GetParError(2)/fitM[iT]->GetParameter(2), 2.) + + pow(fitM[iT]->GetParError(1)/fitM[iT]->GetParameter(1), 2.) ), 2.) + + pow(std::abs(fitM_up[iT]->GetParameter(2) / fitM[iT]->GetParameter(1) - fitM_dw[iT]->GetParameter(2) / fitM[iT]->GetParameter(1))/2., 2.) ) ); + // tgR[0]->SetPointError(iT+1, 0., 100.*pow(fitF[iT]->GetParError(2),2.)/ (1.* energyP[iT]) ); + + std::cout << " >>>>>>> in GeV energy = " << energyP[iT] << " reso = " << fitF[iT]->GetParameter(2) / fitF[iT]->GetParameter(1) << std::endl; + tgS[0]->SetPoint(iT+1, energyP[iT], fitF[iT]->GetParameter(2) / fitF[iT]->GetParameter(1)); + tgS[0]->SetPointError(iT+1, 0., sqrt( pow(fitF[iT]->GetParameter(2) / fitF[iT]->GetParameter(1) * sqrt( pow(fitF[iT]->GetParError(2)/fitF[iT]->GetParameter(2), 2.) + + pow(fitF[iT]->GetParError(1)/fitF[iT]->GetParameter(1), 2.) ), 2.) + + pow(std::abs(fitF_up[iT]->GetParameter(2) / fitF[iT]->GetParameter(1) - fitF_dw[iT]->GetParameter(2) / fitF[iT]->GetParameter(1))/2., 2.) ) ); + // tgS[0]->SetPointError(iT+1, 0.,sqrt( pow(fitF[iT]->GetParError(2), 2.) + pow(fitF[iT]->GetParError(1), 2.) ) ); + // tgS[0]->SetPointError(iT+1, 0., sqrt( pow(fitF[iT]->GetParError(2)/fitF[iT]->GetParameter(1), 2) + + // pow(fitF[iT]->GetParameter(2)/fitF[iT]->GetParameter(1)/fitF[iT]->GetParameter(1) * fitF[iT]->GetParError(1), 2) + + // pow(std::abs(fitF_up[iT]->GetParameter(2) / fitF_up[iT]->GetParameter(1) - fitF_dw[iT]->GetParameter(2) / fitF_dw[iT]->GetParameter(1)) /2., 2)) ); + + + //std::cout << " >>> energyP[iT] = " << energyP[iT] << " fitF[iT]->GetParameter(1) / (1.* energyP[iT]) = " << fitF[iT]->GetParameter(1) / (1.* energyP[iT]) << std::endl; + // std::cout << " >>> energyP[iT] = " << energyP[iT] << " Y = " << pow(fitF[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100. << std::endl; + + tg[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgR[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgS[0]->SetPoint(tg[iT]->GetN(), 400, 5); + } + + + + /////////TGraph + TCanvas* tgM = new TCanvas(); + tgM->cd(); + tg[0]->GetYaxis()->SetTitle("#Sigma E_{i} / E_{beam}"); + tg[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tg[0]->GetXaxis()->SetRangeUser(0, 300.); + tg[0]->GetYaxis()->SetRangeUser(0.9, 1.01); + if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tg[0]->Draw("ap"); + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + + + gStyle->SetOptFit(1); + /////////TGraph + + + TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + fitResoM->SetParName(0, "S"); + fitResoM->SetParName(1, "C"); + // fitResoM->SetParLimits(1, 0., 0.16); + // fitResoM->SetParLimits(2, 0.0001, 0.05); + /* + TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + fitResoM->SetParName(0, "S"); + fitResoM->SetParName(1, "C"); + // fitResoM->SetParLimits(1, 0., 0.05); + fitResoM->SetParLimits(1, 0.0001, 0.05); + */ + tgR[0]->Fit("fitResoM", "R"); + fitResoM->SetLineColor(kRed); + fitResoM->SetLineWidth(2); + + /* + for(int point=0; pointGetN(); ++point){ + double ey = tgR[0]->GetErrorY(point); + tgR[0]->SetPointError(point, 0., ey*sqrt(fitResoM->GetChisquare()/fitResoM->GetNDF())); + } + */ + + + TF1* fitResoM_post = new TF1("fitResoM_post", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + fitResoM_post->SetParName(0, "S"); + fitResoM_post->SetParName(1, "N"); + fitResoM_post->SetParName(2, "C"); + fitResoM_post->SetParLimits(1, 0., 0.16); + + // tgR[0]->Fit("fitReso_post", "R"); + // fitResoM_post->SetLineColor(kRed+2); + // fitResoM_post->SetLineWidth(2); + + + TCanvas* tgResoM = new TCanvas(); + tgResoM->cd(); + tgR[0]->GetYaxis()->SetTitle("#sigma( #Sigma E) / E_{reco}"); + tgR[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tgR[0]->GetXaxis()->SetRangeUser(0, 300.); + tgR[0]->GetYaxis()->SetRangeUser(0., 0.3); + tgR[0]->Draw("ap"); + fitResoM->Draw("same"); + // fitResoM_post->Draw("same"); + tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + + + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "C"); + // fitReso->SetParLimits(1, 0., 0.16); + // fitReso->SetParLimits(2, 0.0001, 0.05); + /* + // TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); + fitReso->SetParName(0, "S"); + //fitReso->SetParName(1, "N"); + fitReso->SetParName(1, "C"); + // fitReso->SetParLimits(1, 0., 0.05); + fitReso->SetParLimits(1, 0.0001, 0.05); + */ + tgS[0]->Fit("fitReso", "R"); + fitReso->SetLineColor(kGreen); + fitReso->SetLineWidth(2); + + /* + for(int point=0; pointGetN(); ++point){ + double ey = tgS[0]->GetErrorY(point); + tgS[0]->SetPointError(point,0., ey*sqrt(fitReso->GetChisquare()/fitReso->GetNDF())); + // tgS[0]->SetPointEYlow(point,ey*sqrt(fitReso->GetChisquare()/fitReso->GetNDF())); + } + */ + + //post + TF1* fitReso_post = new TF1("fitReso_post", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); + fitReso_post->SetParName(0, "S"); + fitReso_post->SetParName(1, "N"); + fitReso_post->SetParName(2, "C"); + fitReso_post->SetParLimits(1, 0., 0.16); + // tgS[0]->Fit("fitReso_post", "R"); + // fitReso_post->SetLineColor(kGreen+2); + // fitReso_post->SetLineWidth(2); + + /////////TGraph simple + TCanvas* tgResoS = new TCanvas(); + tgResoS->cd(); + tgS[0]->GetYaxis()->SetTitle("#sigma( #Sigma E )/ E_{reco}"); + tgS[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tgS[0]->GetXaxis()->SetRangeUser(0., 300.); + tgS[0]->GetYaxis()->SetRangeUser(0., 0.3); + tgS[0]->Draw("ap"); + fitReso->Draw("same"); + // fitReso_post->Draw("same"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + // return; + //////////////// + std::cout << " >>> fatto " << std::endl; + // return; + TGraphErrors* tM[6]; + for(int iT=0; iT<6; ++iT){ + if(nLayers == 28 && iT >= 3) continue; + tM[iT] = (TGraphErrors*)inF[iT]->Get("enLayer_MIP"); + tM[iT]->SetName(Form("enLayer_MIP_E%d", energyP[iT])); + + tM[iT]->SetMarkerStyle(20); + tM[iT]->SetMarkerColor(iColors[iT]); + tM[iT]->SetLineColor(iColors[iT]); + tM[iT]->SetLineWidth(2); + tM[iT]->SetLineStyle(iT); + } + + TFile newOUT(Form("analyzed_DATA_layers%d_config%d.root", nLayers, config), "recreate"); + newOUT.cd(); + for(int iT=0; iT<6; ++iT){ + tM[iT]->SetName(Form("enLayer_MIP_E%d", energyP[iT])); + tM[iT]->Write(Form("enLayer_MIP_E%d", energyP[iT])); + } + newOUT.Close(); + + + TCanvas* cTM = new TCanvas(); + cTM->cd(); + tM[0]->GetXaxis()->SetTitle("shower depth (X_{0})"); + tM[0]->GetYaxis()->SetTitle("#Sigma_{layer} E_{layer} (MIP)"); + tM[0]->GetXaxis()->SetRangeUser(0., 300.); + tM[0]->GetYaxis()->SetRangeUser(0., 2.e3); + tM[0]->Draw("ap"); + for(int iT=1; iT<6; ++iT){ + if(nLayers == 28 && iT >= 3) continue; + tM[iT]->Draw("p, same"); + } + leg->Draw("same"); + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d_config%d.png").c_str(), nLayers, config), "png"); + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d_config%d.root").c_str(), nLayers, config), "root"); + + +} diff --git a/produceWeights/simple.C b/produceWeights/simple.C new file mode 100644 index 0000000..a79f712 --- /dev/null +++ b/produceWeights/simple.C @@ -0,0 +1,264 @@ +#include "TLegend.h" +#include "TLatex.h" +#include "TMath.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + +#include "RooGlobalFunc.h" +#include "RooRealVar.h" +#include "RooDataSet.h" +#include "RooDataHist.h" +#include "RooGaussian.h" +#include "TCanvas.h" +#include "RooPlot.h" +#include "TTree.h" +#include "TH1D.h" +#include "TRandom.h" +using namespace RooFit; + +void simple(int nLayer, int energyEle, int config) { + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptTitle(0); + + + float dEdX_weights[28]; + float X0val[28]; + + if(nLayer == 28){ + float dEdX_weights_28[28] = {7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 8.087, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 10.817, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 8.148}; + float X0val_28[28] = {0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_28[j]; + X0val[j] = X0val_28[j]; + } + } + else{ + if(config == 1){ + float dEdX_weights_8[28] = {33.151, 13.261, 14.247, 9.885, 9.844, 9.844, 16.416, 28.296, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + else if(config == 2){ + float dEdX_weights_8[28] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + } + + + // float weights2GeV = 1.e-03; + // //weights2GeV = weights2GeV / 0.828; + // // float MIP2GeV_sim = 77.52e-06; + // float MIP2GeV_sim = 62.67e-06; + + + float MIP2GeV_sim = 5.28e-05; + float weights2GeV = 1.e-03; + float weights2MIP = 52.8 / 63.6; + // float MIP2GeV_sim = 64.19e-06; + // float MIP2GeV_sim = 53.16e-06; + // float MIP2GeV_sim = 53.16e-06; + // weights2GeV = weights2GeV / 0.828; + float G4Escale = 1.; //0.83; // >>> fix scale i + + TFile* inF; + if(nLayer == 28) inF = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle)); + else if(config == 1) inF = TFile::Open(Form("energyLayer_ROOT/outF_Ele%d.root", energyEle)); + else if(config == 2) inF = TFile::Open(Form("energyLayer_ROOT/outF_endShower_Ele%d.root", energyEle)); + + TH1F* enLayer[28]; + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i] = (TH1F*)inF->Get(Form("enLayer%d", i+1)); + } + + + TGraph* enLayer_MPV = new TGraph(); + TGraph* enLayer_Mean = new TGraph(); + TGraph* enLayer_MIP = new TGraph(); + TGraph* enLayer_MeanW = new TGraph(); + TGraph* enLayer_MeanWMIP = new TGraph(); + TGraphErrors* beamEfraction_layer = new TGraphErrors(); + + float totEnergyErr = 0; + float totEnergy = 0; + float totMIP = 0; + + float X0value = 0; + + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + + //enLayer[i]->Rebin(4); + /* + if(energyEle == 20) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.02); + if(energyEle == 100) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.1); + if(energyEle == 250) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.2); + if(energyEle == 200) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.2); + */ + + + float xMax = 0.; + float xMaxVal = 0.; + float xErr = 0.; + + for(int iB=1; iBGetNbinsX()+1; ++iB){ + if(enLayer[i]->GetBinContent(iB) > xMaxVal){ + xMax = enLayer[i]->GetBinCenter(iB); + xMaxVal = enLayer[i]->GetBinContent(iB); + xErr = enLayer[i]->GetBinWidth(iB); + } + } + + // if(i != 3) continue; + // Declare observable x + RooRealVar x("x", "x", 0., 0.02); + if(energyEle == 20) x.setMax(0.02); + if(energyEle == 70) x.setMax(0.1); + if(energyEle == 100) x.setMax(0.1); + if(energyEle == 250) x.setMax(0.2); + if(energyEle == 200) x.setMax(0.2); + // Create a binned dataset that imports contents of TH1 and associates its contents to observable 'x' + RooDataHist data("data", "data", x, Import(*enLayer[i])); + + + TF1* helpFit = new TF1("helpFit", "landau", 0., 0.2); + enLayer[i]->Fit("helpFit"); + + + // Construct observable + RooRealVar ml("ml", "mean landau", helpFit->GetParameter(1), helpFit->GetParameter(1) * 0.8, enLayer[i]->GetMean()); + RooRealVar sl("sl", "sigma landau", helpFit->GetParameter(2)); //, helpFit->GetParameter(2)*0.5, helpFit->GetParameter(2)); + RooLandau landau("lx", "lx", x, ml, sl); + // landau.fitTo(data); + // std::cout << " L = " << ml.getVal() << " +/- " << ml.getError() << std::endl; + + // Construct gauss(t,mg,sg) + RooRealVar mg("mg", "mg", 0.); + //RooRealVar mg("mg", "mg", enLayer[i]->GetMean(), 0., 0.2); + RooRealVar sg("sg", "sg", enLayer[i]->GetRMS(), enLayer[i]->GetRMS()/2., enLayer[i]->GetRMS()*2.); + // RooRealVar sg("sg", "sg", enLayer[i]->GetRMS()); + RooGaussian gauss("gauss", "gauss", x, mg, sg); + + + // C o n s t r u c t c o n v o l u t i o n p d f + // --------------------------------------- + // Set #bins to be used for FFT sampling to 10000 + x.setBins(100000,"cache"); + + // Construct landau (x) gauss + RooFFTConvPdf lxg("lxg", "landau (X) gauss", x, landau, gauss); + // Fit gxlx to data + //gauss.fitTo(*data); + RooFitResult* info = lxg.fitTo(data); + //RooFitResult* info = landau.fitTo(data); + // Plot data, landau pdf, landau (X) gauss pdf + RooPlot* frame1 = x.frame(Title("landau (x) gauss convolution")); + data.plotOn(frame1); + lxg.plotOn(frame1); + //landau.plotOn(frame1, LineStyle(kDashed)); + //gauss.plotOn(frame1, LineColor(kRed)); + + + TF1 *f = lxg.asTF( RooArgList(x) ); + float convMax = f->GetMaximumX(); + + // Draw frame on canvas + TCanvas* c2 = new TCanvas("fit", "", 600, 600); + gPad->SetLeftMargin(0.15); frame1->GetYaxis()->SetTitleOffset(1.4); frame1->Draw(); + c2->Print(Form("fitFolder/histoLayer%d_energy%d.png", i, energyEle), ".png"); + + // info->Print(); + std::cout << " convMax = " << convMax << std::endl; + std::cout << " max = " << xMax << std::endl; + // std::cout << " Gsig = " << sg.getVal() << " +/- " << sg.getError() << std::endl; + + // float estimateE = ml.getVal(); + float estimateE = xMax; + // float estimateEerr = min(abs(f1->GetParameter(1) - f2->GetParameter(1)), abs(f1->GetParameter(1) - f3->GetParameter(1)) ); + // float estimateEerr = ml.getError(); + //float estimateEerr = sqrt(pow(ml.getError(), 2) + pow(estimateE - xMax, 2)); + // float estimateEerr = sqrt(pow(ml.getError(), 2) + pow(estimateE - ml.getVal(), 2)); + // float estimateEerr = min(enLayer[i]->GetRMS(), abs(estimateE - ml.getVal())); + // float estimateEerr = enLayer[i]->GetRMS(); + float estimateEerr = TMath::Max(xErr, xMax - convMax); + + std::cout << " xMax = " << xMax << " +/- " << estimateEerr << std::endl; + + Double_t chi2 = frame1->chiSquare("lxg", "data", 3); + std::cout << " chi2 lxg = " << chi2 << std::endl; + + + X0value += X0val[i]; + + enLayer_MPV->SetPoint(i+1, X0value, estimateE); + enLayer_Mean->SetPoint(i+1, X0value, estimateE); + enLayer_MIP->SetPoint(i+1, X0value, estimateE/MIP2GeV_sim); + + enLayer_MeanW->SetPoint(i+1, X0value, estimateE / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP * dEdX_weights[i] + 1.)); + //enLayer_MeanW->SetPoint(i+1, X0value, estimateE ); // * ( 1./MIP2GeV_sim * weights2GeV * dEdX_weights[i] + 1.)); + // enLayer_MeanWMIP->SetPoint(i+1, X0value, estimateE * ( 1./MIP2GeV_sim * weights2GeV * dEdX_weights[i] + 1.) / MIP2GeV_sim ); + // enLayer_MeanWMIP->SetPoint(i+1, X0value, estimateE / MIP2GeV_sim ); + + /* + totEnergy += estimateE * ( 1./MIP2GeV_sim * weights2GeV * dEdX_weights[i] + 1.); + totMIP += estimateE * ( 1./MIP2GeV_sim * weights2GeV * dEdX_weights[i] + 1.) / MIP2GeV_sim; + */ + // totEnergy += estimateE; + + totMIP += estimateE / MIP2GeV_sim; + + // totEnergyErr = sqrt(pow(totEnergyErr, 2) + pow(estimateEerr * ( 1./MIP2GeV_sim * weights2GeV * dEdX_weights[i] + 1.), 2)); + totEnergy += estimateE / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP * dEdX_weights[i] + 1.); + totEnergyErr = sqrt( pow(estimateEerr / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP * dEdX_weights[i] + 1.), 2)); + // totEnergyErr = sqrt( pow(estimateEerr, 2)); + beamEfraction_layer->SetPoint(i+1, X0value, totEnergy / (1.*energyEle)); + beamEfraction_layer->SetPointError(i+1, 0., totEnergyErr); + } + + + TFile* outF; + if(nLayer == 28) outF = new TFile(Form("showers_ROOT/analyzed_28layers_Ele%d.root", energyEle), "recreate"); + else if(config == 1) outF = new TFile(Form("showers_ROOT/analyzed_Ele%d.root", energyEle), "recreate"); + else if(config == 2) outF = new TFile(Form("showers_ROOT/analyzed_endShower_Ele%d.root", energyEle), "recreate"); + + outF->cd(); + enLayer_MPV->Write("enLayer_MPV"); + enLayer_Mean->Write("enLayer_Mean"); + enLayer_MIP->Write("enLayer_MIP"); + enLayer_MeanW->Write("enLayer_MeanW"); + enLayer_MeanWMIP->Write("enLayer_MeanWMIP"); + beamEfraction_layer->Write("beamEfraction_layer"); + outF->Close(); + + + std::cout << " >>> beam energy in MIP = " << 1.* energyEle / MIP2GeV_sim << " in energy = " << 1.* energyEle << std::endl; + std::cout << " >>> " << nLayer << " layers >> sum MIP = " << totMIP << " sum energy = " << totEnergy << std::endl; + std::cout << " >>> " << nLayer << " layers >> sum/beam = " << totEnergy/(1.* energyEle) << " energy and in MIP = " << totMIP / (1.* energyEle / MIP2GeV_sim) << std::endl; + +} + diff --git a/produceWeights/simple_Data.C b/produceWeights/simple_Data.C new file mode 100644 index 0000000..424866f --- /dev/null +++ b/produceWeights/simple_Data.C @@ -0,0 +1,297 @@ +#include "TLegend.h" +#include "TLatex.h" +#include "TMath.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + +#include "RooGlobalFunc.h" +#include "RooRealVar.h" +#include "RooDataSet.h" +#include "RooDataHist.h" +#include "RooGaussian.h" +#include "TCanvas.h" +#include "RooPlot.h" +#include "TTree.h" +#include "TH1D.h" +#include "TRandom.h" +using namespace RooFit; + +void simple_Data(int nLayer, int energyEle, int config = 1) { + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptTitle(0); + + float X0val[28]; + if(config == 1){ + float X0val_8[28] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + for(int j=0; j<28; ++j){ + X0val[j] = X0val_8[j]; + } + } + else if(config == 2){ + float X0val_8[28] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + for(int j=0; j<28; ++j){ + X0val[j] = X0val_8[j]; + } + } + + + TFile* inF; + if(nLayer == 28) inF = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle)); + else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_okFactor/%dGeV.root", energyEle)); + else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_okFactor/%dGeV.root", energyEle)); + + TH1F* enLayer[28]; + TH1F* enLayer_AbsW_Mip[28]; + TH1F* enLayer_AbsW_GeV[28]; + + TH1F* enLayer_up[28]; + TH1F* enLayer_AbsW_Mip_up[28]; + TH1F* enLayer_AbsW_GeV_up[28]; + + TH1F* enLayer_dw[28]; + TH1F* enLayer_AbsW_Mip_dw[28]; + TH1F* enLayer_AbsW_GeV_dw[28]; + + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d", i+1)); + enLayer_AbsW_Mip[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_Mip", i+1)); + enLayer_AbsW_GeV[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_GeV", i+1)); + + enLayer_up[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_up", i+1)); + enLayer_AbsW_Mip_up[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_Mip_up", i+1)); + enLayer_AbsW_GeV_up[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_GeV_up", i+1)); + + enLayer_dw[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_dw", i+1)); + enLayer_AbsW_Mip_dw[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_Mip_dw", i+1)); + enLayer_AbsW_GeV_dw[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_GeV_dw", i+1)); + } + + std::cout << " >> presi histos " << std::endl; + + TGraphErrors* enLayer_MIP = new TGraphErrors(); + TGraphErrors* enLayer_MIPW = new TGraphErrors(); + TGraphErrors* enLayer_GeVW = new TGraphErrors(); + + std::cout << " >> definiti graph " << std::endl; + float X0value = 0; + + TGraphErrors* Mean_vsE = new TGraphErrors(); + TGraphErrors* Sigma_vsE = new TGraphErrors(); + // TGraphErrors* beamEfraction_layer = new TGraphErrors(); + + + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + + //enLayer[i]->Rebin(4); + /* + if(energyEle == 20) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.02); + if(energyEle == 100) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.1); + if(energyEle == 250) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.2); + if(energyEle == 200) enLayer[i]->GetXaxis()->SetRangeUser(0., 0.2); + */ + + float xMax = 0.; + float xMaxVal = 0.; + float xErr = 0.; + + float xMax_MW = 0.; + float xMaxVal_MW = 0.; + float xErr_MW = 0.; + + float xMax_GW = 0.; + float xMaxVal_GW = 0.; + float xErr_GW = 0.; + + for(int iB=1; iBGetNbinsX()+1; ++iB){ + if(enLayer[i]->GetBinCenter(iB) == 0) continue; + if(enLayer[i]->GetBinContent(iB) > xMaxVal){ + xMax = enLayer[i]->GetBinCenter(iB); + xMaxVal = enLayer[i]->GetBinContent(iB); + xErr = enLayer[i]->GetBinWidth(iB); + } + if(iBGetNbinsX()+1){ + if(enLayer_AbsW_Mip[i]->GetBinContent(iB) > xMaxVal_MW){ + xMax_MW = enLayer_AbsW_Mip[i]->GetBinCenter(iB); + xMaxVal_MW = enLayer_AbsW_Mip[i]->GetBinContent(iB); + xErr_MW = enLayer_AbsW_Mip[i]->GetBinWidth(iB); + } + } + if(iBGetNbinsX()+1){ + if(enLayer_AbsW_GeV[i]->GetBinContent(iB) > xMaxVal_GW){ + xMax_GW = enLayer_AbsW_GeV[i]->GetBinCenter(iB); + xMaxVal_GW = enLayer_AbsW_GeV[i]->GetBinContent(iB); + xErr_GW = enLayer_AbsW_GeV[i]->GetBinWidth(iB); + } + } + } + + // std::cout << " >>> qui ok " << std::endl; + + //FIXME optimize fit + /* + + // if(i != 3) continue; + // Declare observable x + RooRealVar x("x", "x", 0., 0.02); + if(energyEle == 20) x.setMax(0.02); + if(energyEle == 70) x.setMax(0.1); + if(energyEle == 100) x.setMax(0.1); + if(energyEle == 250) x.setMax(0.2); + if(energyEle == 200) x.setMax(0.2); + // Create a binned dataset that imports contents of TH1 and associates its contents to observable 'x' + RooDataHist data("data", "data", x, Import(*enLayer[i])); + */ + + TF1* helpFit = new TF1("helpFit", "gaus", 0., 5.e+03); + TF1* helpFit_MW = new TF1("helpFit_MW", "gaus", 0., 500.e+03); + TF1* helpFit_GW = new TF1("helpFit_GW", "gaus", 0., 500.); + enLayer[i]->Fit("helpFit", "RQ"); + enLayer_AbsW_Mip[i]->Fit("helpFit_MW", "RQ"); + enLayer_AbsW_GeV[i]->Fit("helpFit_GW", "RQ"); + + + /* + // Construct observable + RooRealVar ml("ml", "mean landau", helpFit->GetParameter(1), helpFit->GetParameter(1) * 0.8, enLayer[i]->GetMean()); + RooRealVar sl("sl", "sigma landau", helpFit->GetParameter(2)); //, helpFit->GetParameter(2)*0.5, helpFit->GetParameter(2)); + RooLandau landau("lx", "lx", x, ml, sl); + // landau.fitTo(data); + // std::cout << " L = " << ml.getVal() << " +/- " << ml.getError() << std::endl; + + // Construct gauss(t,mg,sg) + RooRealVar mg("mg", "mg", 0.); + //RooRealVar mg("mg", "mg", enLayer[i]->GetMean(), 0., 0.2); + RooRealVar sg("sg", "sg", enLayer[i]->GetRMS(), enLayer[i]->GetRMS()/2., enLayer[i]->GetRMS()*2.); + // RooRealVar sg("sg", "sg", enLayer[i]->GetRMS()); + RooGaussian gauss("gauss", "gauss", x, mg, sg); + + + // C o n s t r u c t c o n v o l u t i o n p d f + // --------------------------------------- + // Set #bins to be used for FFT sampling to 10000 + x.setBins(100000,"cache"); + + // Construct landau (x) gauss + RooFFTConvPdf lxg("lxg", "landau (X) gauss", x, landau, gauss); + // Fit gxlx to data + //gauss.fitTo(*data); + RooFitResult* info = lxg.fitTo(data); + //RooFitResult* info = landau.fitTo(data); + // Plot data, landau pdf, landau (X) gauss pdf + RooPlot* frame1 = x.frame(Title("landau (x) gauss convolution")); + data.plotOn(frame1); + lxg.plotOn(frame1); + //landau.plotOn(frame1, LineStyle(kDashed)); + //gauss.plotOn(frame1, LineColor(kRed)); + + + TF1 *f = lxg.asTF( RooArgList(x) ); + float convMax = f->GetMaximumX(); + + + // info->Print(); + std::cout << " convMax = " << convMax << std::endl; + std::cout << " max = " << xMax << std::endl; + // std::cout << " Gsig = " << sg.getVal() << " +/- " << sg.getError() << std::endl; + */ + + // Draw frame on canvas + TCanvas* c2 = new TCanvas("fit", "", 600, 600); + c2->cd(); + enLayer[i]->GetXaxis()->SetRangeUser(0., 3.e+03); + enLayer[i]->Draw(); + c2->Print(Form("fitFolder/histoLayer%d_energy%d.png", i, energyEle), ".png"); + + + X0value += X0val[i]; + /* + enLayer_MIP->SetPoint(i+1, X0value, helpFit->GetParameter(1)); + // enLayer_MIP->SetPointError(i+1, 0, helpFit->GetParError(1)); + enLayer_MIPW->SetPoint(i+1, X0value, helpFit_MW->GetParameter(1)); + enLayer_GeVW->SetPoint(i+1, X0value, helpFit_GW->GetParameter(1)); + */ + + std::cout << " >> riempio graph " << i << " val " << enLayer[i]->GetMean() + << " val up " << enLayer_up[i]->GetMean() + << " val dw " << enLayer_dw[i]->GetMean() + << std::endl; + + enLayer_MIP->SetPoint(i+1, X0value, enLayer[i]->GetMean()); + enLayer_MIP->SetPointError(i+1, 0, std::abs(enLayer_up[i]->GetMean() - enLayer_dw[i]->GetMean())/2.); + // enLayer_MIP->SetPointError(i+1, 0, helpFit->GetParError(1)); + + + std::cout << " >> riempio graph " << i << " val " << enLayer_AbsW_Mip[i]->GetMean() + << " val up " << enLayer_AbsW_Mip_up[i]->GetMean() + << " val dw " << enLayer_AbsW_Mip_dw[i]->GetMean() + << std::endl; + + enLayer_MIPW->SetPoint(i+1, X0value, enLayer_AbsW_Mip[i]->GetMean()); + enLayer_MIPW->SetPointError(i+1, 0, std::abs(enLayer_AbsW_Mip_up[i]->GetMean() - enLayer_AbsW_Mip_dw[i]->GetMean())/2.); + + enLayer_GeVW->SetPoint(i+1, X0value, enLayer_AbsW_GeV[i]->GetMean()); + enLayer_GeVW->SetPointError(i+1, 0, std::abs(enLayer_AbsW_GeV_up[i]->GetMean() - enLayer_AbsW_GeV_dw[i]->GetMean()) /2.); + } + + std::cout << " fatto " << std::endl; + + TH1F* sumAll_Layer = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all"); + TH1F* sumAll_Layer_MIP = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_Mip"); + TH1F* sumAll_Layer_GeV = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_GeV"); + + TH1F* sumAll_Layer_up = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_up"); + TH1F* sumAll_Layer_MIP_up = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_Mip_up"); + TH1F* sumAll_Layer_GeV_up = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_GeV_up"); + + TH1F* sumAll_Layer_dw = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_dw"); + TH1F* sumAll_Layer_MIP_dw = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_Mip_dw"); + TH1F* sumAll_Layer_GeV_dw = (TH1F*)inF->Get("LayerSumAnalyzer/h_eAll_all_AbsW_GeV_dw"); + + + // TGraph* Mean_vsE = new TGraph(); + // TGraph* Sigma_vsE = new TGraph(); + + + + TFile* outF; + if(nLayer == 28) outF = new TFile(Form("showers_ROOT_data/analyzed_28layers_Ele%d.root", energyEle), "recreate"); + else if(config == 1) outF = new TFile(Form("showers_ROOT_data/analyzed_Ele%d.root", energyEle), "recreate"); + else if(config == 2) outF = new TFile(Form("showers_ROOT_data/analyzed_endShower_Ele%d.root", energyEle), "recreate"); + + outF->cd(); + sumAll_Layer->Write(); + sumAll_Layer_MIP->Write(); + sumAll_Layer_GeV->Write(); + + sumAll_Layer_up->Write(); + sumAll_Layer_MIP_up->Write(); + sumAll_Layer_GeV_up->Write(); + + sumAll_Layer_dw->Write(); + sumAll_Layer_MIP_dw->Write(); + sumAll_Layer_GeV_dw->Write(); + + enLayer_MIP->Write("enLayer_MIP"); + enLayer_MIPW->Write("enLayer_MIPW"); + enLayer_GeVW->Write("enLayer_GeVW"); + outF->Close(); + +} + From e09799d95daf3a2e2926079d7a01235f48f683c5 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 11:33:45 +0100 Subject: [PATCH 047/297] update for EMM 3 config --- produceWeights/doPlots.C | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/produceWeights/doPlots.C b/produceWeights/doPlots.C index 0e3343b..f4544f6 100644 --- a/produceWeights/doPlots.C +++ b/produceWeights/doPlots.C @@ -88,11 +88,11 @@ void doPlots(int nLayer, int energyEle, int config){ else if(nLayer == 8 && config == 2){ std::string nameFolder = ""; if(energyEle == 20) nameFolder = "161108_231750"; - //if(energyEle == 200) nameFolder = "160927_101553"; - - if(energyEle == 250) nameFolder = "161108_231833"; + if(energyEle == 32) nameFolder = "161108_231756"; if(energyEle == 70) nameFolder = "161109_074724"; if(energyEle == 100) nameFolder = "161108_231811"; + if(energyEle == 200) nameFolder = "161109_130453"; + if(energyEle == 250) nameFolder = "161108_231833"; for(int iFo=0; iFo<2; ++iFo){ for(int iF=0; iF<1000; ++iF){ From 1c25771715792432220e3bb32fe6312eb4d19c56 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 12:17:09 +0100 Subject: [PATCH 048/297] fix small --- 8layers_cfg1/add.sh | 17 +++++++++++------ 8layers_cfg1/lanciaAll.sh | 7 ++++++- 8layers_cfg2/add.sh | 17 +++++++++++------ 8layers_cfg2/lanciaAll.sh | 7 ++++++- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/8layers_cfg1/add.sh b/8layers_cfg1/add.sh index 7ecf842..fa20797 100644 --- a/8layers_cfg1/add.sh +++ b/8layers_cfg1/add.sh @@ -1,6 +1,11 @@ -add 20GeV.root 934.root -add 32.root 1092.root 1095.root 1100.root 1101.root 1102.root -add 70.root 870.root 874.root 879.root 884.root 887.root -add 100.root 1052.root 1053.root 1057.root 1059.root 1060.root 1069.root 1070.root 1072.root 1073.root -add 200.root 1028.root 1030.root 1037.root 1039.root 1042.root 1047.root -add 250.root 942.root 955.root 959.root +hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_000934_Reco.root + +hadd /tmp/amartell/32.root /tmp/amartell/output/HGCRun_Output_001092_Reco.root /tmp/amartell/output/HGCRun_Output_001095_Reco.root /tmp/amartell/output/HGCRun_Output_001100_Reco.root /tmp/amartell/output/HGCRun_Output_001101_Reco.root /tmp/amartell/output/HGCRun_Output_001102_Reco.root + +hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_00870_Reco.root /tmp/amartell/output/HGCRun_Output_00874_Reco.root /tmp/amartell/output/HGCRun_Output_00879_Reco.root /tmp/amartell/output/HGCRun_Output_00884_Reco.root /tmp/amartell/output/HGCRun_Output_00887_Reco.root + +hadd /tmp/amartell/100.root /tmp/amartell/output/HGCRun_Output_001052_Reco.root /tmp/amartell/output/HGCRun_Output_001053_Reco.root /tmp/amartell/output/HGCRun_Output_001057_Reco.root /tmp/amartell/output/HGCRun_Output_001059_Reco.root /tmp/amartell/output/HGCRun_Output_001060_Reco.root /tmp/amartell/output/HGCRun_Output_001069_Reco.root /tmp/amartell/output/HGCRun_Output_001070_Reco.root /tmp/amartell/output/HGCRun_Output_001072_Reco.root /tmp/amartell/output/HGCRun_Output_001073_Reco.root + +hadd /tmp/amartell/200.root /tmp/amartell/output/HGCRun_Output_001028_Reco.root /tmp/amartell/output/HGCRun_Output_001030_Reco.root /tmp/amartell/output/HGCRun_Output_001037_Reco.root /tmp/amartell/output/HGCRun_Output_001039_Reco.root /tmp/amartell/output/HGCRun_Output_001042_Reco.root /tmp/amartell/output/HGCRun_Output_001047_Reco.root + +hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_00942_Reco.root /tmp/amartell/output/HGCRun_Output_00955_Reco.root /tmp/amartell/output/HGCRun_Output_00959_Reco.root diff --git a/8layers_cfg1/lanciaAll.sh b/8layers_cfg1/lanciaAll.sh index d8c20d3..1fb1012 100644 --- a/8layers_cfg1/lanciaAll.sh +++ b/8layers_cfg1/lanciaAll.sh @@ -1,2 +1,7 @@ -source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh +source lancia100GeV.sh +source lancia200GeV.sh +source lancia20GeV.sh +source lancia250GeV.sh +source lancia32GeV.sh +source lancia70GeV.sh diff --git a/8layers_cfg2/add.sh b/8layers_cfg2/add.sh index c9c1a3c..cc75371 100644 --- a/8layers_cfg2/add.sh +++ b/8layers_cfg2/add.sh @@ -1,6 +1,11 @@ -add 20GeV.root 1255.root 1256.root 1259.root 1262.root 1265.root 1266.root -add 32.root 1226.root 1229.root 1230.root 1231.root 1236.root 1237.root 1238.root 1239.root 1241.root 1245.root -add 70.root 1155.root 1158.root 1159.root 1160.root 1170.root 1171.root -add 100.root 1205.root 1213.root 1218.root -add 200.root 1182.root 1183.root 1184.root 1196.root 1198.root -add 250.root 1293.root 1300.root 1304.root 1306.root 1310.root +hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_001255_Reco.root /tmp/amartell/output/HGCRun_Output_001256_Reco.root /tmp/amartell/output/HGCRun_Output_001259_Reco.root /tmp/amartell/output/HGCRun_Output_001262_Reco.root /tmp/amartell/output/HGCRun_Output_001265_Reco.root /tmp/amartell/output/HGCRun_Output_001266_Reco.root + +hadd /tmp/amartell/32.root /tmp/amartell/output/HGCRun_Output_001226_Reco.root /tmp/amartell/output/HGCRun_Output_001229_Reco.root /tmp/amartell/output/HGCRun_Output_001230_Reco.root /tmp/amartell/output/HGCRun_Output_001231_Reco.root /tmp/amartell/output/HGCRun_Output_001236_Reco.root /tmp/amartell/output/HGCRun_Output_001237_Reco.root /tmp/amartell/output/HGCRun_Output_001238_Reco.root /tmp/amartell/output/HGCRun_Output_001239_Reco.root /tmp/amartell/output/HGCRun_Output_001241_Reco.root /tmp/amartell/output/HGCRun_Output_001245_Reco.root + +hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_001155_Reco.root /tmp/amartell/output/HGCRun_Output_001158_Reco.root /tmp/amartell/output/HGCRun_Output_001159_Reco.root /tmp/amartell/output/HGCRun_Output_001160_Reco.root /tmp/amartell/output/HGCRun_Output_001170_Reco.root /tmp/amartell/output/HGCRun_Output_001171_Reco.root + +hadd /tmp/amartell/100.root /tmp/amartell/output/HGCRun_Output_001205_Reco.root /tmp/amartell/output/HGCRun_Output_001213_Reco.root /tmp/amartell/output/HGCRun_Output_001218_Reco.root + +hadd /tmp/amartell/200.root /tmp/amartell/output/HGCRun_Output_001182_Reco.root /tmp/amartell/output/HGCRun_Output_001183_Reco.root /tmp/amartell/output/HGCRun_Output_001184_Reco.root /tmp/amartell/output/HGCRun_Output_001196_Reco.root /tmp/amartell/output/HGCRun_Output_001198_Reco.root + +hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_001293_Reco.root /tmp/amartell/output/HGCRun_Output_001300_Reco.root /tmp/amartell/output/HGCRun_Output_001304_Reco.root /tmp/amartell/output/HGCRun_Output_001306_Reco.root /tmp/amartell/output/HGCRun_Output_001310_Reco.root diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh index f43a8b8..08d31ff 100644 --- a/8layers_cfg2/lanciaAll.sh +++ b/8layers_cfg2/lanciaAll.sh @@ -1,2 +1,7 @@ -source lancia100GeV.sh lancia200GeV.sh lancia20GeV.sh lancia250GeV.sh lancia32GeV.sh lancia70GeV.sh +source lancia100GeV.sh +source lancia200GeV.sh +source lancia20GeV.sh +spurce lancia250GeV.sh +source lancia32GeV.sh +source lancia70GeV.sh From 70e3d0a0fbe4f18b7f4571d5deae1ea28b27a39d Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 13:45:28 +0100 Subject: [PATCH 049/297] fix --- 8layers_cfg1/add.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/8layers_cfg1/add.sh b/8layers_cfg1/add.sh index fa20797..1f84bd3 100644 --- a/8layers_cfg1/add.sh +++ b/8layers_cfg1/add.sh @@ -2,10 +2,10 @@ hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_000934_Rec hadd /tmp/amartell/32.root /tmp/amartell/output/HGCRun_Output_001092_Reco.root /tmp/amartell/output/HGCRun_Output_001095_Reco.root /tmp/amartell/output/HGCRun_Output_001100_Reco.root /tmp/amartell/output/HGCRun_Output_001101_Reco.root /tmp/amartell/output/HGCRun_Output_001102_Reco.root -hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_00870_Reco.root /tmp/amartell/output/HGCRun_Output_00874_Reco.root /tmp/amartell/output/HGCRun_Output_00879_Reco.root /tmp/amartell/output/HGCRun_Output_00884_Reco.root /tmp/amartell/output/HGCRun_Output_00887_Reco.root +hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_000870_Reco.root /tmp/amartell/output/HGCRun_Output_000874_Reco.root /tmp/amartell/output/HGCRun_Output_000879_Reco.root /tmp/amartell/output/HGCRun_Output_000884_Reco.root /tmp/amartell/output/HGCRun_Output_000887_Reco.root hadd /tmp/amartell/100.root /tmp/amartell/output/HGCRun_Output_001052_Reco.root /tmp/amartell/output/HGCRun_Output_001053_Reco.root /tmp/amartell/output/HGCRun_Output_001057_Reco.root /tmp/amartell/output/HGCRun_Output_001059_Reco.root /tmp/amartell/output/HGCRun_Output_001060_Reco.root /tmp/amartell/output/HGCRun_Output_001069_Reco.root /tmp/amartell/output/HGCRun_Output_001070_Reco.root /tmp/amartell/output/HGCRun_Output_001072_Reco.root /tmp/amartell/output/HGCRun_Output_001073_Reco.root hadd /tmp/amartell/200.root /tmp/amartell/output/HGCRun_Output_001028_Reco.root /tmp/amartell/output/HGCRun_Output_001030_Reco.root /tmp/amartell/output/HGCRun_Output_001037_Reco.root /tmp/amartell/output/HGCRun_Output_001039_Reco.root /tmp/amartell/output/HGCRun_Output_001042_Reco.root /tmp/amartell/output/HGCRun_Output_001047_Reco.root -hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_00942_Reco.root /tmp/amartell/output/HGCRun_Output_00955_Reco.root /tmp/amartell/output/HGCRun_Output_00959_Reco.root +hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_000942_Reco.root /tmp/amartell/output/HGCRun_Output_000955_Reco.root /tmp/amartell/output/HGCRun_Output_000959_Reco.root From 82d2637cec3df4769d738d73d0b1c2baf3c4993d Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 15:42:38 +0100 Subject: [PATCH 050/297] final fixes --- 8layers_cfg1/add.sh | 10 +++++----- 8layers_cfg2/add.sh | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/8layers_cfg1/add.sh b/8layers_cfg1/add.sh index 1f84bd3..fcf75a2 100644 --- a/8layers_cfg1/add.sh +++ b/8layers_cfg1/add.sh @@ -1,11 +1,11 @@ hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_000934_Reco.root -hadd /tmp/amartell/32.root /tmp/amartell/output/HGCRun_Output_001092_Reco.root /tmp/amartell/output/HGCRun_Output_001095_Reco.root /tmp/amartell/output/HGCRun_Output_001100_Reco.root /tmp/amartell/output/HGCRun_Output_001101_Reco.root /tmp/amartell/output/HGCRun_Output_001102_Reco.root +hadd /tmp/amartell/32GeV.root /tmp/amartell/output/HGCRun_Output_001092_Reco.root /tmp/amartell/output/HGCRun_Output_001095_Reco.root /tmp/amartell/output/HGCRun_Output_001100_Reco.root /tmp/amartell/output/HGCRun_Output_001101_Reco.root /tmp/amartell/output/HGCRun_Output_001102_Reco.root -hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_000870_Reco.root /tmp/amartell/output/HGCRun_Output_000874_Reco.root /tmp/amartell/output/HGCRun_Output_000879_Reco.root /tmp/amartell/output/HGCRun_Output_000884_Reco.root /tmp/amartell/output/HGCRun_Output_000887_Reco.root +hadd /tmp/amartell/70GeV.root /tmp/amartell/output/HGCRun_Output_000870_Reco.root /tmp/amartell/output/HGCRun_Output_000874_Reco.root /tmp/amartell/output/HGCRun_Output_000879_Reco.root /tmp/amartell/output/HGCRun_Output_000884_Reco.root /tmp/amartell/output/HGCRun_Output_000887_Reco.root -hadd /tmp/amartell/100.root /tmp/amartell/output/HGCRun_Output_001052_Reco.root /tmp/amartell/output/HGCRun_Output_001053_Reco.root /tmp/amartell/output/HGCRun_Output_001057_Reco.root /tmp/amartell/output/HGCRun_Output_001059_Reco.root /tmp/amartell/output/HGCRun_Output_001060_Reco.root /tmp/amartell/output/HGCRun_Output_001069_Reco.root /tmp/amartell/output/HGCRun_Output_001070_Reco.root /tmp/amartell/output/HGCRun_Output_001072_Reco.root /tmp/amartell/output/HGCRun_Output_001073_Reco.root +hadd /tmp/amartell/100GeV.root /tmp/amartell/output/HGCRun_Output_001052_Reco.root /tmp/amartell/output/HGCRun_Output_001053_Reco.root /tmp/amartell/output/HGCRun_Output_001057_Reco.root /tmp/amartell/output/HGCRun_Output_001059_Reco.root /tmp/amartell/output/HGCRun_Output_001060_Reco.root /tmp/amartell/output/HGCRun_Output_001069_Reco.root /tmp/amartell/output/HGCRun_Output_001070_Reco.root /tmp/amartell/output/HGCRun_Output_001072_Reco.root /tmp/amartell/output/HGCRun_Output_001073_Reco.root -hadd /tmp/amartell/200.root /tmp/amartell/output/HGCRun_Output_001028_Reco.root /tmp/amartell/output/HGCRun_Output_001030_Reco.root /tmp/amartell/output/HGCRun_Output_001037_Reco.root /tmp/amartell/output/HGCRun_Output_001039_Reco.root /tmp/amartell/output/HGCRun_Output_001042_Reco.root /tmp/amartell/output/HGCRun_Output_001047_Reco.root +hadd /tmp/amartell/200GeV.root /tmp/amartell/output/HGCRun_Output_001028_Reco.root /tmp/amartell/output/HGCRun_Output_001030_Reco.root /tmp/amartell/output/HGCRun_Output_001037_Reco.root /tmp/amartell/output/HGCRun_Output_001039_Reco.root /tmp/amartell/output/HGCRun_Output_001042_Reco.root /tmp/amartell/output/HGCRun_Output_001047_Reco.root -hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_000942_Reco.root /tmp/amartell/output/HGCRun_Output_000955_Reco.root /tmp/amartell/output/HGCRun_Output_000959_Reco.root +hadd /tmp/amartell/250GeV.root /tmp/amartell/output/HGCRun_Output_000942_Reco.root /tmp/amartell/output/HGCRun_Output_000955_Reco.root /tmp/amartell/output/HGCRun_Output_000959_Reco.root diff --git a/8layers_cfg2/add.sh b/8layers_cfg2/add.sh index cc75371..b2386e2 100644 --- a/8layers_cfg2/add.sh +++ b/8layers_cfg2/add.sh @@ -1,11 +1,11 @@ hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_001255_Reco.root /tmp/amartell/output/HGCRun_Output_001256_Reco.root /tmp/amartell/output/HGCRun_Output_001259_Reco.root /tmp/amartell/output/HGCRun_Output_001262_Reco.root /tmp/amartell/output/HGCRun_Output_001265_Reco.root /tmp/amartell/output/HGCRun_Output_001266_Reco.root -hadd /tmp/amartell/32.root /tmp/amartell/output/HGCRun_Output_001226_Reco.root /tmp/amartell/output/HGCRun_Output_001229_Reco.root /tmp/amartell/output/HGCRun_Output_001230_Reco.root /tmp/amartell/output/HGCRun_Output_001231_Reco.root /tmp/amartell/output/HGCRun_Output_001236_Reco.root /tmp/amartell/output/HGCRun_Output_001237_Reco.root /tmp/amartell/output/HGCRun_Output_001238_Reco.root /tmp/amartell/output/HGCRun_Output_001239_Reco.root /tmp/amartell/output/HGCRun_Output_001241_Reco.root /tmp/amartell/output/HGCRun_Output_001245_Reco.root +hadd /tmp/amartell/32GeV.root /tmp/amartell/output/HGCRun_Output_001226_Reco.root /tmp/amartell/output/HGCRun_Output_001229_Reco.root /tmp/amartell/output/HGCRun_Output_001230_Reco.root /tmp/amartell/output/HGCRun_Output_001231_Reco.root /tmp/amartell/output/HGCRun_Output_001236_Reco.root /tmp/amartell/output/HGCRun_Output_001237_Reco.root /tmp/amartell/output/HGCRun_Output_001238_Reco.root /tmp/amartell/output/HGCRun_Output_001239_Reco.root /tmp/amartell/output/HGCRun_Output_001241_Reco.root /tmp/amartell/output/HGCRun_Output_001245_Reco.root -hadd /tmp/amartell/70.root /tmp/amartell/output/HGCRun_Output_001155_Reco.root /tmp/amartell/output/HGCRun_Output_001158_Reco.root /tmp/amartell/output/HGCRun_Output_001159_Reco.root /tmp/amartell/output/HGCRun_Output_001160_Reco.root /tmp/amartell/output/HGCRun_Output_001170_Reco.root /tmp/amartell/output/HGCRun_Output_001171_Reco.root +hadd /tmp/amartell/70GeV.root /tmp/amartell/output/HGCRun_Output_001155_Reco.root /tmp/amartell/output/HGCRun_Output_001158_Reco.root /tmp/amartell/output/HGCRun_Output_001159_Reco.root /tmp/amartell/output/HGCRun_Output_001160_Reco.root /tmp/amartell/output/HGCRun_Output_001170_Reco.root /tmp/amartell/output/HGCRun_Output_001171_Reco.root -hadd /tmp/amartell/100.root /tmp/amartell/output/HGCRun_Output_001205_Reco.root /tmp/amartell/output/HGCRun_Output_001213_Reco.root /tmp/amartell/output/HGCRun_Output_001218_Reco.root +hadd /tmp/amartell/100GeV.root /tmp/amartell/output/HGCRun_Output_001205_Reco.root /tmp/amartell/output/HGCRun_Output_001213_Reco.root /tmp/amartell/output/HGCRun_Output_001218_Reco.root -hadd /tmp/amartell/200.root /tmp/amartell/output/HGCRun_Output_001182_Reco.root /tmp/amartell/output/HGCRun_Output_001183_Reco.root /tmp/amartell/output/HGCRun_Output_001184_Reco.root /tmp/amartell/output/HGCRun_Output_001196_Reco.root /tmp/amartell/output/HGCRun_Output_001198_Reco.root +hadd /tmp/amartell/200GeV.root /tmp/amartell/output/HGCRun_Output_001182_Reco.root /tmp/amartell/output/HGCRun_Output_001183_Reco.root /tmp/amartell/output/HGCRun_Output_001184_Reco.root /tmp/amartell/output/HGCRun_Output_001196_Reco.root /tmp/amartell/output/HGCRun_Output_001198_Reco.root -hadd /tmp/amartell/250.root /tmp/amartell/output/HGCRun_Output_001293_Reco.root /tmp/amartell/output/HGCRun_Output_001300_Reco.root /tmp/amartell/output/HGCRun_Output_001304_Reco.root /tmp/amartell/output/HGCRun_Output_001306_Reco.root /tmp/amartell/output/HGCRun_Output_001310_Reco.root +hadd /tmp/amartell/250GeV.root /tmp/amartell/output/HGCRun_Output_001293_Reco.root /tmp/amartell/output/HGCRun_Output_001300_Reco.root /tmp/amartell/output/HGCRun_Output_001304_Reco.root /tmp/amartell/output/HGCRun_Output_001306_Reco.root /tmp/amartell/output/HGCRun_Output_001310_Reco.root From 04080430672a717d502336c3591a20e2723408e0 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 10 Nov 2016 16:33:04 +0100 Subject: [PATCH 051/297] data mc comparison --- produceWeights/dataVsmc.C | 150 ++++++++++++++++++++++++++++ produceWeights/fitResolution.C | 82 +++++++++------ produceWeights/fitResolution_data.C | 57 +++++++---- produceWeights/simple_Data.C | 6 +- 4 files changed, 242 insertions(+), 53 deletions(-) create mode 100644 produceWeights/dataVsmc.C diff --git a/produceWeights/dataVsmc.C b/produceWeights/dataVsmc.C new file mode 100644 index 0000000..dc2e9b6 --- /dev/null +++ b/produceWeights/dataVsmc.C @@ -0,0 +1,150 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + + + +void dataVsmc(){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + + int nLayers = 8; + int config = 2; + int iColors[3] = {kRed, kBlue, kGreen+2}; + // int energyP[3] = {20, 70, 100, 200, 250}; + + TFile* inF[4]; + inF[0] = TFile::Open("SIM_resolution_layers8_config1.root"); + inF[1] = TFile::Open("SIM_resolution_layers8_config2.root"); + inF[2] = TFile::Open("DATA_resolution_layers8_config1.root"); + inF[3] = TFile::Open("DATA_resolution_layers8_config2.root"); + + + TGraphErrors* tgCfg1[3]; + TGraphErrors* tgCfg2[3]; + + tgCfg1[0] = (TGraphErrors*)inF[0]->Get("resolution_GeV"); + tgCfg1[1] = (TGraphErrors*)inF[2]->Get("resolution_GeV"); + tgCfg1[2] = (TGraphErrors*)inF[2]->Get("resolution_Mip"); + + tgCfg2[0] = (TGraphErrors*)inF[1]->Get("resolution_GeV"); + tgCfg2[1] = (TGraphErrors*)inF[3]->Get("resolution_GeV"); + tgCfg2[2] = (TGraphErrors*)inF[3]->Get("resolution_Mip"); + + + for(int iT=0; iT<3; ++iT){ + tgCfg1[iT]->SetMarkerStyle(20); + tgCfg2[iT]->SetMarkerStyle(20); + + tgCfg1[iT]->SetMarkerColor(iColors[iT]); + tgCfg2[iT]->SetMarkerColor(iColors[iT]); + } + + std::cout << " ci sono " << std::endl; + + TLegend *legTGM = new TLegend(0.65,0.65,0.85,0.85,NULL,"brNDC"); + legTGM->SetTextFont(42); + legTGM->SetFillColor(kWhite); + legTGM->SetLineColor(kWhite); + legTGM->SetShadowColor(kWhite); + legTGM->SetHeader("6 X_{0} - 15 X_{0}"); + legTGM->AddEntry(tgCfg1[0], "sim GeV", "pl"); + legTGM->AddEntry(tgCfg1[1], "data GeV", "pl"); + // legTGM->AddEntry(tgCfg1[2], "data Mip", "l"); + + TLegend *legTGM2 = new TLegend(0.65,0.65,0.85,0.85,NULL,"brNDC"); + legTGM2->SetTextFont(42); + legTGM2->SetFillColor(kWhite); + legTGM2->SetLineColor(kWhite); + legTGM2->SetShadowColor(kWhite); + legTGM2->SetHeader("5 X_{0} - 27 X_{0}"); + legTGM2->AddEntry(tgCfg1[0], "sim GeV", "pl"); + legTGM2->AddEntry(tgCfg1[1], "data GeV", "pl"); + // legTGM->AddEntry(tgCfg1[2], "data Mip", "l"); + + + + TLegend *leg = new TLegend(0.45,0.65,0.85,0.85,NULL,"brNDC"); + leg->SetTextFont(42); + leg->SetFillColor(kWhite); + leg->SetLineColor(kWhite); + leg->SetShadowColor(kWhite); + leg->SetHeader("6 X_{0} - 15 X_{0}"); + leg->AddEntry(tgCfg1[1], "data GeV", "pl"); + leg->AddEntry(tgCfg1[2], "data Mip (no weights)", "pl"); + + + TLegend *leg2 = new TLegend(0.45,0.65,0.85,0.85,NULL,"brNDC"); + leg2->SetTextFont(42); + leg2->SetFillColor(kWhite); + leg2->SetLineColor(kWhite); + leg2->SetShadowColor(kWhite); + leg2->SetHeader("5 X_{0} - 27 X_{0}"); + leg2->AddEntry(tgCfg1[1], "data GeV", "pl"); + leg2->AddEntry(tgCfg1[2], "data Mip (no weights)", "pl"); + + + TCanvas* chER = new TCanvas(); + chER->cd(); + tgCfg1[0]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg1[0]->GetYaxis()->SetTitle("#sigma(#SigmaE)/ <#SigmaE>"); + tgCfg1[0]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg1[0]->Draw("ap"); + tgCfg1[1]->Draw("p, same"); + legTGM->Draw("same"); + chER->Print("dataVsMC/SimGeV_DataGeV_layers8_config1.png", "png"); + chER->Print("dataVsMC/SimGeV_DataGeV_layers8_config1.root", "root"); + // + TCanvas* chER2 = new TCanvas(); + chER2->cd(); + tgCfg2[0]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg2[0]->GetYaxis()->SetTitle("#sigma(#SigmaE)/ <#SigmaE>"); + tgCfg2[0]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg2[0]->Draw("ap"); + tgCfg2[1]->Draw("p, same"); + legTGM2->Draw("same"); + chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.png", "png"); + chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.root", "root"); + + + TCanvas* chDA = new TCanvas(); + chDA->cd(); + tgCfg1[1]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg1[1]->GetYaxis()->SetTitle("#sigma(#SigmaE)/ <#SigmaE>"); + tgCfg1[1]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg1[1]->Draw("ap"); + tgCfg1[2]->Draw("p, same"); + leg->Draw("same"); + chDA->Print("dataVsMC/DataMip_DataGeV_layers8_config1.png", "png"); + chDA->Print("dataVsMC/DataMip_DataGeV_layers8_config1.root", "root"); + + TCanvas* chDA2 = new TCanvas(); + chDA2->cd(); + tgCfg2[1]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg2[1]->GetYaxis()->SetTitle("#sigma(#SigmaE)/ <#SigmaE>"); + tgCfg2[1]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg2[1]->Draw("ap"); + tgCfg2[2]->Draw("p, same"); + leg2->Draw("same"); + chDA2->Print("dataVsMC/DataMip_DataGeV_layers8_config2.png", "png"); + chDA2->Print("dataVsMC/DataMip_DataGeV_layers8_config2.root", "root"); + + +} diff --git a/produceWeights/fitResolution.C b/produceWeights/fitResolution.C index 5db6f40..22831fb 100644 --- a/produceWeights/fitResolution.C +++ b/produceWeights/fitResolution.C @@ -34,20 +34,20 @@ void fitResolution(){ */ - + /* int nLayers = 8; int config = 1; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - + */ - /* + int nLayers = 8; int config = 2; - int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kBlack}; + int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - */ + TGraphErrors* tg[5]; @@ -98,19 +98,6 @@ void fitResolution(){ TH1F* recoEnergy[5]; TH1F* recoEnergyRel[5]; - TF1* fitF[5]; - for(int iP=0; iP<5; ++iP){ - // if(nLayers == 28 && iP >=4) continue; - fitF[iP] = new TF1(Form("E%d",energyP[iP]), "gaus", 0, 500); - } - - - TF1* fitFRel[5]; - for(int iP=0; iP<5; ++iP){ - // if(nLayers == 28 && iP >=4) continue; - fitFRel[iP] = new TF1(Form("E%dR",energyP[iP]), "gaus", 0, 500); - } - for(int iC=0; iC<5; ++iC){ // if(nLayers == 28 && iC >=4) continue; @@ -122,14 +109,23 @@ void fitResolution(){ recoEnergyRel[iC]->SetLineColor(iColors[iC]); recoEnergyRel[iC]->SetLineWidth(2); + } - fitF[iC]->SetParameters(recoEnergy[iC]->Integral(), recoEnergy[iC]->GetMean(), recoEnergy[iC]->GetRMS()); - fitF[iC]->SetLineColor(iColors[iC]); - fitFRel[iC]->SetParameters(recoEnergyRel[iC]->Integral(), recoEnergyRel[iC]->GetMean(), recoEnergyRel[iC]->GetRMS()); - fitFRel[iC]->SetLineColor(iColors[iC]); - } + TF1* fitF[5]; + TF1* fitFRel[5]; + for(int iP=0; iP<5; ++iP){ + // if(nLayers == 28 && iP >=4) continue; + fitF[iP] = new TF1(Form("E%d",energyP[iP]), "gaus", recoEnergy[iP]->GetMean() - 0.5 * recoEnergy[iP]->GetRMS(), recoEnergy[iP]->GetMean() + 2.*recoEnergy[iP]->GetRMS()); + fitFRel[iP] = new TF1(Form("E%dR",energyP[iP]), "gaus", recoEnergy[iP]->GetMean() - 0.5 * recoEnergy[iP]->GetRMS(), recoEnergy[iP]->GetMean() + 2.*recoEnergy[iP]->GetRMS()); + + fitF[iP]->SetParameters(recoEnergy[iP]->Integral(), recoEnergy[iP]->GetMean(), recoEnergy[iP]->GetRMS()); + fitF[iP]->SetLineColor(iColors[iP]); + + fitFRel[iP]->SetParameters(recoEnergyRel[iP]->Integral(), recoEnergy[iP]->GetMean(), recoEnergy[iP]->GetRMS()); + fitFRel[iP]->SetLineColor(iColors[iP]); + } std::cout << " ci sono " << std::endl; @@ -236,8 +232,8 @@ void fitResolution(){ tgR[0]->SetPointError(iT+1, 0., 100.*pow(fitFRel[iT]->GetParError(2),2.)/ (1.* energyP[iT])); tgS[0]->SetPoint(iT+1, energyP[iT], fitFRel[iT]->GetParameter(2) / fitFRel[iT]->GetParameter(1)); - tgS[0]->SetPointError(iT+1, 0., sqrt( pow(fitFRel[iT]->GetParameter(2) / fitFRel[iT]->GetParameter(1) * sqrt( pow(fitFRel[iT]->GetParError(2)/fitFRel[iT]->GetParameter(2), 2.) + - pow(fitFRel[iT]->GetParError(1)/fitFRel[iT]->GetParameter(1), 2.) ), 2.) ) ); + tgS[0]->SetPointError(iT+1, 0., fitFRel[iT]->GetParameter(2) / fitFRel[iT]->GetParameter(1) * sqrt( pow(fitFRel[iT]->GetParError(2)/fitFRel[iT]->GetParameter(2), 2.) + + pow(fitFRel[iT]->GetParError(1)/fitFRel[iT]->GetParameter(1), 2.) ) ); //std::cout << " >>> energyP[iT] = " << energyP[iT] << " fitF[iT]->GetParameter(1) / (1.* energyP[iT]) = " << fitF[iT]->GetParameter(1) / (1.* energyP[iT]) << std::endl; @@ -248,9 +244,14 @@ void fitResolution(){ tgS[0]->SetPoint(tg[iT]->GetN(), 400, 5); } leg->Draw("same"); + if(nLayers != 28){ chER->Print(Form((folder+"/energyPlots_layers%d_config%d.png").c_str(), nLayers, config), "png"); chER->Print(Form((folder+"/energyPlots_layers%d_config%d.root").c_str(), nLayers, config), "root"); - + } + else{ + chER->Print(Form((folder+"/energyPlots_layers%d.png").c_str(), nLayers), "png"); + chER->Print(Form((folder+"/energyPlots_layers%d.root").c_str(), nLayers), "root"); + } /////////TGraph @@ -262,9 +263,14 @@ void fitResolution(){ tg[0]->GetYaxis()->SetRangeUser(0., 1.01); if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); tg[0]->Draw("ap"); + if(nLayers != 28){ tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); - + } + else{ + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d.png").c_str(), nLayers), "png"); + tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d.root").c_str(), nLayers), "root"); + } /* /////////TGraph @@ -282,8 +288,16 @@ void fitResolution(){ */ + TFile outSim(Form("SIM_resolution_layers%d_config%d.root", nLayers, config), "recreate"); + outSim.cd(); + tgS[0]->Write("resolution_GeV"); + outSim.Close(); + + + gStyle->SetOptFit(1); - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([2], 2.))", 10., 300.); fitReso->SetParName(0, "S"); fitReso->SetParName(1, "N"); fitReso->SetParName(2, "C"); @@ -308,8 +322,16 @@ void fitResolution(){ tgS[0]->GetYaxis()->SetRangeUser(0., 0.3); tgS[0]->Draw("ap"); fitReso->Draw("same"); - tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); - tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + if(nLayers != 28){ + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + } + else{ + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d.png").c_str(), nLayers), "png"); + tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d.root").c_str(), nLayers), "root"); + } + + return; //////////////// diff --git a/produceWeights/fitResolution_data.C b/produceWeights/fitResolution_data.C index 396ddb9..58751e6 100644 --- a/produceWeights/fitResolution_data.C +++ b/produceWeights/fitResolution_data.C @@ -34,21 +34,20 @@ void fitResolution_data(){ */ - /* + int nLayers = 8; int config = 1; int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[6] = {20, 32, 70, 100, 200, 250}; - */ + - + /* int nLayers = 8; int config = 2; int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; //, kBlack}; int energyP[6] = {20, 32, 70, 100, 200, 250}; - - + */ TGraphErrors* tg[6]; TGraphErrors* tgR[6]; @@ -273,14 +272,23 @@ void fitResolution_data(){ tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + TFile outData(Form("DATA_resolution_layers%d_config%d.root", nLayers, config), "recreate"); + outData.cd(); + tgS[0]->Write("resolution_GeV"); + tgR[0]->Write("resolution_Mip"); + outData.Close(); + + gStyle->SetOptFit(1); /////////TGraph - TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + // TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); fitResoM->SetParName(0, "S"); - fitResoM->SetParName(1, "C"); + fitResoM->SetParName(1, "N"); + fitResoM->SetParName(2, "C"); // fitResoM->SetParLimits(1, 0., 0.16); // fitResoM->SetParLimits(2, 0.0001, 0.05); /* @@ -290,7 +298,7 @@ void fitResolution_data(){ // fitResoM->SetParLimits(1, 0., 0.05); fitResoM->SetParLimits(1, 0.0001, 0.05); */ - tgR[0]->Fit("fitResoM", "R"); + // tgR[0]->Fit("fitResoM", "R"); fitResoM->SetLineColor(kRed); fitResoM->SetLineWidth(2); @@ -308,9 +316,9 @@ void fitResolution_data(){ fitResoM_post->SetParName(2, "C"); fitResoM_post->SetParLimits(1, 0., 0.16); - // tgR[0]->Fit("fitReso_post", "R"); - // fitResoM_post->SetLineColor(kRed+2); - // fitResoM_post->SetLineWidth(2); + tgR[0]->Fit("fitResoM_post", "R"); + fitResoM_post->SetLineColor(kRed+2); + fitResoM_post->SetLineWidth(2); TCanvas* tgResoM = new TCanvas(); @@ -320,17 +328,19 @@ void fitResolution_data(){ tgR[0]->GetXaxis()->SetRangeUser(0, 300.); tgR[0]->GetYaxis()->SetRangeUser(0., 0.3); tgR[0]->Draw("ap"); - fitResoM->Draw("same"); - // fitResoM_post->Draw("same"); + //fitResoM->Draw("same"); + fitResoM_post->Draw("same"); tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); fitReso->SetParName(0, "S"); - fitReso->SetParName(1, "C"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); // fitReso->SetParLimits(1, 0., 0.16); // fitReso->SetParLimits(2, 0.0001, 0.05); /* @@ -342,7 +352,7 @@ void fitResolution_data(){ // fitReso->SetParLimits(1, 0., 0.05); fitReso->SetParLimits(1, 0.0001, 0.05); */ - tgS[0]->Fit("fitReso", "R"); + //tgS[0]->Fit("fitReso", "R"); fitReso->SetLineColor(kGreen); fitReso->SetLineWidth(2); @@ -361,9 +371,9 @@ void fitResolution_data(){ fitReso_post->SetParName(1, "N"); fitReso_post->SetParName(2, "C"); fitReso_post->SetParLimits(1, 0., 0.16); - // tgS[0]->Fit("fitReso_post", "R"); - // fitReso_post->SetLineColor(kGreen+2); - // fitReso_post->SetLineWidth(2); + tgS[0]->Fit("fitReso_post", "R"); + fitReso_post->SetLineColor(kGreen+2); + fitReso_post->SetLineWidth(2); /////////TGraph simple TCanvas* tgResoS = new TCanvas(); @@ -373,11 +383,16 @@ void fitResolution_data(){ tgS[0]->GetXaxis()->SetRangeUser(0., 300.); tgS[0]->GetYaxis()->SetRangeUser(0., 0.3); tgS[0]->Draw("ap"); - fitReso->Draw("same"); - // fitReso_post->Draw("same"); + //fitReso->Draw("same"); + fitReso_post->Draw("same"); tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + + + + + // return; //////////////// std::cout << " >>> fatto " << std::endl; diff --git a/produceWeights/simple_Data.C b/produceWeights/simple_Data.C index 424866f..fe985ca 100644 --- a/produceWeights/simple_Data.C +++ b/produceWeights/simple_Data.C @@ -52,8 +52,10 @@ void simple_Data(int nLayer, int energyEle, int config = 1) { TFile* inF; if(nLayer == 28) inF = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle)); - else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_okFactor/%dGeV.root", energyEle)); - else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_okFactor/%dGeV.root", energyEle)); + // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_okFactor/%dGeV.root", energyEle)); + // else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_okFactor/%dGeV.root", energyEle)); + else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data/%dGeV.root", energyEle)); + else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data/%dGeV.root", energyEle)); TH1F* enLayer[28]; TH1F* enLayer_AbsW_Mip[28]; From 4e072a70ef05f59d2773a51894578664bff10302 Mon Sep 17 00:00:00 2001 From: arabella Date: Fri, 11 Nov 2016 20:51:52 +0100 Subject: [PATCH 052/297] 8layers_cfg2/lanciaAll.sh --- Reco/plugins/Layer_Sum_Analyzer.cc | 22 ++-- produceWeights/dataVsmc.C | 121 ++++++++++++++++++-- produceWeights/doPlots.C | 21 +++- produceWeights/fitResolution.C | 122 ++++++++++++++++---- produceWeights/fitResolution_data.C | 168 ++++++++++++++++++---------- produceWeights/simple_Data.C | 8 +- 6 files changed, 357 insertions(+), 105 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index f169bc6..0450aa9 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -56,11 +56,17 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; double ADCtoMIP_FNAL[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; -//double MIP2ParticleCalib = 1.3; // FNAL to proton 120GeV + + +// pion MPV = 55.16; +// muon MPV = 51.91; +// muon Mean = 63.28; + + //500MeV muon/125GeV pion -//double MIP2ParticleCalib[16] = {53.01/56.54, 53.47/56.42, 54.16/56.44, 54.17/56.19, 53.90/56.46, 53.97/56.31, 54.51/56.37, 55.43/56.09, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN MPV muon to pion 125GeV -//double MIP2ParticleCalib[16] = {73.80/56.54, 73.67/56.42, 74.11/56.44, 74.22/56.19, 76.11/56.46, 74.63/56.31, 76.57/56.37, 74.94/56.09, 1., 1., 1., 1., 1., 1., 1., 1.}; // CERN Mean muon to pion 125GeV -double MIP2ParticleCalib = 1.33; // CERN mean muon to pion 125GeV +double MIP2ParticleCalib = 1.147; // CERN mean muon to pion 125GeV EMM physics list +//double MIP2ParticleCalib = 0.94; // CERN mpv muon to pion 125GeV EMM physics list + //double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts //double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights @@ -75,10 +81,10 @@ double X0depth_8L_conf1[16] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0.}; double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0.}; double weights2GeV = 1.e-03; -//double MIP2GeV_sim = 52.81e-06; -//double MIP2GeV_sim = 54.07e-06; -double MIP2GeV_sim = 74.76e-06; //mean muon -//double weights2MIP = 52.8/63.6; // rescale weights from mean to MPV + +double MIP2GeV_sim = 63.28e-06; //mean muon EMM physics list +//double MIP2GeV_sim = 51.91e-06; //mpv muon EMM pysics list + double weights2MIP = 1.; // rescale weights from mean to MPV //double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights diff --git a/produceWeights/dataVsmc.C b/produceWeights/dataVsmc.C index dc2e9b6..150b1e3 100644 --- a/produceWeights/dataVsmc.C +++ b/produceWeights/dataVsmc.C @@ -27,7 +27,7 @@ void dataVsmc(){ int nLayers = 8; int config = 2; - int iColors[3] = {kRed, kBlue, kGreen+2}; + int iColors[5] = {kRed, kBlue, kGreen+2, kRed, kBlue}; // int energyP[3] = {20, 70, 100, 200, 250}; TFile* inF[4]; @@ -37,19 +37,23 @@ void dataVsmc(){ inF[3] = TFile::Open("DATA_resolution_layers8_config2.root"); - TGraphErrors* tgCfg1[3]; - TGraphErrors* tgCfg2[3]; + TGraphErrors* tgCfg1[5]; + TGraphErrors* tgCfg2[5]; tgCfg1[0] = (TGraphErrors*)inF[0]->Get("resolution_GeV"); tgCfg1[1] = (TGraphErrors*)inF[2]->Get("resolution_GeV"); tgCfg1[2] = (TGraphErrors*)inF[2]->Get("resolution_Mip"); + tgCfg1[3] = (TGraphErrors*)inF[0]->Get("linerity_GeV"); + tgCfg1[4] = (TGraphErrors*)inF[2]->Get("linearity_GeV"); tgCfg2[0] = (TGraphErrors*)inF[1]->Get("resolution_GeV"); tgCfg2[1] = (TGraphErrors*)inF[3]->Get("resolution_GeV"); tgCfg2[2] = (TGraphErrors*)inF[3]->Get("resolution_Mip"); + tgCfg2[3] = (TGraphErrors*)inF[1]->Get("linerity_GeV"); + tgCfg2[4] = (TGraphErrors*)inF[3]->Get("linearity_GeV"); - for(int iT=0; iT<3; ++iT){ + for(int iT=0; iT<5; ++iT){ tgCfg1[iT]->SetMarkerStyle(20); tgCfg2[iT]->SetMarkerStyle(20); @@ -59,7 +63,7 @@ void dataVsmc(){ std::cout << " ci sono " << std::endl; - TLegend *legTGM = new TLegend(0.65,0.65,0.85,0.85,NULL,"brNDC"); + TLegend *legTGM = new TLegend(0.45,0.65,0.65,0.85,NULL,"brNDC"); legTGM->SetTextFont(42); legTGM->SetFillColor(kWhite); legTGM->SetLineColor(kWhite); @@ -69,7 +73,7 @@ void dataVsmc(){ legTGM->AddEntry(tgCfg1[1], "data GeV", "pl"); // legTGM->AddEntry(tgCfg1[2], "data Mip", "l"); - TLegend *legTGM2 = new TLegend(0.65,0.65,0.85,0.85,NULL,"brNDC"); + TLegend *legTGM2 = new TLegend(0.45,0.65,0.65,0.85,NULL,"brNDC"); legTGM2->SetTextFont(42); legTGM2->SetFillColor(kWhite); legTGM2->SetLineColor(kWhite); @@ -123,6 +127,32 @@ void dataVsmc(){ chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.png", "png"); chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.root", "root"); + std::cout << " >>> plot linearity " << std::endl; + //////// + TCanvas* chLi = new TCanvas(); + chLi->cd(); + tgCfg1[3]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg1[3]->GetYaxis()->SetTitle("#SigmaE (GeV)"); + // tgCfg1[3]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg1[3]->Draw("ap"); + tgCfg1[4]->Draw("p, same"); + legTGM->Draw("same"); + chLi->Print("dataVsMC/linearity_SimGeV_DataGeV_layers8_config1.png", "png"); + chLi->Print("dataVsMC/linearity_SimGeV_DataGeV_layers8_config1.root", "root"); + // + TCanvas* chLi2 = new TCanvas(); + chLi2->cd(); + tgCfg2[3]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg2[3]->GetYaxis()->SetTitle("#SigmaE (GeV)"); + // tgCfg2[3]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfg2[3]->Draw("ap"); + tgCfg2[4]->Draw("p, same"); + legTGM2->Draw("same"); + chLi2->Print("dataVsMC/linearity_SimGeV_DataGeV_layers8_config2.png", "png"); + chLi2->Print("dataVsMC/linearity_SimGeV_DataGeV_layers8_config2.root", "root"); + //////// + + TCanvas* chDA = new TCanvas(); chDA->cd(); @@ -146,5 +176,82 @@ void dataVsmc(){ chDA2->Print("dataVsMC/DataMip_DataGeV_layers8_config2.png", "png"); chDA2->Print("dataVsMC/DataMip_DataGeV_layers8_config2.root", "root"); - + + int iColorsM[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; + int energyPM[5] = {20, 70, 100, 200, 250}; + + + + TFile* inFM[4]; + inFM[0] = TFile::Open("analyzed_DATA_layers8_config1.root"); + inFM[1] = TFile::Open("analyzed_DATA_layers8_config2.root"); + inFM[2] = TFile::Open("analyzed_SIM_layers8_config1.root"); + inFM[3] = TFile::Open("analyzed_SIM_layers8_config2.root"); + + TGraphErrors* tgM_daCfg1[5]; + TGraphErrors* tgM_daCfg2[5]; + TGraphErrors* tgM_mcCfg1[5]; + TGraphErrors* tgM_mcCfg2[5]; + for(int iF=0; iF<5; ++iF){ + tgM_daCfg1[iF] = (TGraphErrors*)inFM[0]->Get(Form("enLayer_MIP_E%d", energyPM[iF])); + tgM_daCfg2[iF] = (TGraphErrors*)inFM[1]->Get(Form("enLayer_MIP_E%d", energyPM[iF])); + tgM_mcCfg1[iF] = (TGraphErrors*)inFM[2]->Get(Form("enLayer_MIP_E%d", energyPM[iF])); + tgM_mcCfg2[iF] = (TGraphErrors*)inFM[3]->Get(Form("enLayer_MIP_E%d", energyPM[iF])); + + tgM_daCfg1[iF]->SetMarkerStyle(20); + tgM_daCfg2[iF]->SetMarkerStyle(20); + tgM_mcCfg1[iF]->SetMarkerStyle(21); + tgM_mcCfg2[iF]->SetMarkerStyle(21); + + tgM_daCfg1[iF]->SetMarkerColor(iColorsM[iF]); + tgM_daCfg2[iF]->SetMarkerColor(iColorsM[iF]); + tgM_mcCfg1[iF]->SetMarkerColor(iColorsM[iF]); + tgM_mcCfg2[iF]->SetMarkerColor(iColorsM[iF]); + + } + + + TLegend *legM = new TLegend(0.80,0.70,0.98,0.95,NULL,"brNDC"); + legM->SetTextFont(42); + legM->SetFillColor(kWhite); + legM->SetLineColor(kWhite); + legM->SetShadowColor(kWhite); + for(int iP=0; iP<5; ++iP){ + legM->AddEntry(tgM_daCfg1[iP], Form("%dGeV", energyPM[iP]), "p"); + } + + + TCanvas* cTM = new TCanvas(); + cTM->cd(); + tgM_daCfg1[0]->GetXaxis()->SetTitle("shower depth (X_{0})"); + tgM_daCfg1[0]->GetYaxis()->SetTitle("#Sigma_{layer} E_{layer} (MIP)"); + tgM_daCfg1[0]->GetXaxis()->SetRangeUser(0., 30.); + tgM_daCfg1[0]->GetYaxis()->SetRangeUser(0., 2.5e3); + tgM_daCfg1[0]->Draw("ap"); + tgM_mcCfg1[0]->Draw("p, same"); + for(int iT=1; iT<5; ++iT){ + tgM_daCfg1[iT]->Draw("p, same"); + tgM_mcCfg1[iT]->Draw("p, same"); + } + legM->Draw("same"); + cTM->Print("dataVsMC/enLayer_MIP_nLayer8_config1.png", "png"); + cTM->Print("dataVsMC/enLayer_MIP_nLaye8_config1.root", "root"); + + TCanvas* cTM2 = new TCanvas(); + cTM2->cd(); + tgM_daCfg2[0]->GetXaxis()->SetTitle("shower depth (X_{0})"); + tgM_daCfg2[0]->GetYaxis()->SetTitle("#Sigma_{layer} E_{layer} (MIP)"); + tgM_daCfg2[0]->GetXaxis()->SetRangeUser(0., 30.); + tgM_daCfg2[0]->GetYaxis()->SetRangeUser(0., 2.5e3); + tgM_daCfg2[0]->Draw("ap"); + tgM_mcCfg2[0]->Draw("p, same"); + for(int iT=1; iT<5; ++iT){ + tgM_daCfg2[iT]->Draw("p, same"); + tgM_mcCfg2[iT]->Draw("p, same"); + } + legM->Draw("same"); + cTM2->Print("dataVsMC/enLayer_MIP_nLayer8_config2.png", "png"); + cTM2->Print("dataVsMC/enLayer_MIP_nLaye8_config2.root", "root"); + + } diff --git a/produceWeights/doPlots.C b/produceWeights/doPlots.C index f4544f6..5e4cd42 100644 --- a/produceWeights/doPlots.C +++ b/produceWeights/doPlots.C @@ -57,13 +57,15 @@ void doPlots(int nLayer, int energyEle, int config){ } } + // pion MPV = 55.16; + // muon MPV = 51.91; + // muon Mean = 63.28; - - float EtoMip = 56.31e-06; // 125pion MPV response + float EtoMip = 55.16e-06; // 125pion MPV response float weights2GeV = 1.e-03; float weights2MIP = 1.; // weights with MIP from PDG - float MIP2GeV_sim = EtoMip * 74.76e-06 / 56.31e-06; // recalibrate to mean 500MeV muon response + float MIP2GeV_sim = EtoMip * 63.28e-06 / 55.16e-06; // recalibrate to mean 500MeV muon response float G4Escale = 1.; // 0.83; // >>> fix scale in data mc for Si @@ -123,14 +125,17 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu TH1F* enLayer[28]; TH1F* enLayerCorr[28]; + TH1F* enLayerMip[28]; for(int i=0; i<28; ++i){ if(nLayer != 28 && i >= 8) continue; enLayer[i] = new TH1F(Form("enLayer%d", i+1), "", 5000, 0., 0.5); enLayerCorr[i] = new TH1F(Form("enLayerCorr%d", i+1), "", 5000, 0., 10.); + enLayerMip[i] = new TH1F(Form("enLayerMip%d", i+1), "", 10000, 0., 10000.); } TH1F* recoEnergy = new TH1F("recoEnergy", "", 5000, 0., 500.); TH1F* recoEnergyRel = new TH1F("recoEnergyRel", "", 1000, 0., 2.); + TGraphErrors* enLayer_MIP = new TGraphErrors(); double xBeam, yBeam; std::vector* simHitLayEn2E = 0; @@ -153,6 +158,7 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu float localE = simHitLayEn2E->at(iS) / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); enLayerCorr[iS]->Fill(localE); + enLayerMip[iS]->Fill(simHitLayEn2E->at(iS) / G4Escale * 1./MIP2GeV_sim); totEnergy += localE; } recoEnergy->Fill(totEnergy); @@ -160,6 +166,13 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu } + float X0value = 0; + for(int i=0; iSetPoint(i+1, X0value, enLayerMip[i]->GetMean()); + enLayer_MIP->SetPointError(i+1, 0, enLayerMip[i]->GetRMS()/enLayerMip[i]->GetEntries()); + } + TFile* outF; if(nLayer == 28) outF = new TFile(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle), "recreate"); else if(config == 1) outF = new TFile(Form("energyLayer_ROOT/outF_Ele%d.root", energyEle), "recreate"); @@ -169,7 +182,9 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu if(nLayer != 28 && i >= 8) continue; enLayer[i]->Write(); enLayerCorr[i]->Write(); + enLayerMip[i]->Write(); } + enLayer_MIP->Write("enLayer_MIP"); recoEnergy->Write(); recoEnergyRel->Write(); outF->Close(); diff --git a/produceWeights/fitResolution.C b/produceWeights/fitResolution.C index 22831fb..6ed6f51 100644 --- a/produceWeights/fitResolution.C +++ b/produceWeights/fitResolution.C @@ -26,7 +26,7 @@ void fitResolution(){ - /* + /* int nLayers = 28; int config = 1; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; @@ -34,35 +34,33 @@ void fitResolution(){ */ - /* + /* int nLayers = 8; int config = 1; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; */ - - - + int nLayers = 8; int config = 2; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - TGraphErrors* tg[5]; + TGraphErrors* tgL[5]; TGraphErrors* tgR[5]; TGraphErrors* tgS[5]; for(int iT=0; iT<5; ++iT){ // if(nLayers == 28 && iT >= 4) continue; tg[iT] = new TGraphErrors(); tg[iT]->SetName(Form("mean_E%d", energyP[iT])); - // tg[iT]->SetPoint(0, -1, -1); - - // tg[iT]->SetLineColor(iColors[iT]); - // tg[iT]->SetMarkerColor(iColors[iT]); tg[iT]->SetMarkerStyle(20); + tgL[iT] = new TGraphErrors(); + tgL[iT]->SetName(Form("linearity_E%d", energyP[iT])); + tgL[iT]->SetMarkerStyle(20); + tgR[iT] = new TGraphErrors(); tgR[iT]->SetName(Form("resolution_E%d", energyP[iT])); // tgR[iT]->SetPoint(0, -1, -1); @@ -228,6 +226,9 @@ void fitResolution(){ tg[0]->SetPoint(iT+1, energyP[iT], fitFRel[iT]->GetParameter(1)/energyP[iT]); tg[0]->SetPointError(iT+1, 0., fitFRel[iT]->GetParError(1) / energyP[iT]); + tgL[0]->SetPoint(iT+1, energyP[iT], fitFRel[iT]->GetParameter(1)); + tgL[0]->SetPointError(iT+1, 0., sqrt(pow(fitFRel[iT]->GetParError(1), 2.)) ); + tgR[0]->SetPoint(iT+1, 1./energyP[iT], pow(fitFRel[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100.); tgR[0]->SetPointError(iT+1, 0., 100.*pow(fitFRel[iT]->GetParError(2),2.)/ (1.* energyP[iT])); @@ -240,6 +241,7 @@ void fitResolution(){ // std::cout << " >>> energyP[iT] = " << energyP[iT] << " Y = " << pow(fitF[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100. << std::endl; tg[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgL[0]->SetPoint(tg[iT]->GetN(), 400, 300); tgR[0]->SetPoint(tg[iT]->GetN(), 400, 5); tgS[0]->SetPoint(tg[iT]->GetN(), 400, 5); } @@ -254,6 +256,25 @@ void fitResolution(){ } + + /////////TGraph linearity + TCanvas* tgLi = new TCanvas(); + tgLi->cd(); + tgL[0]->GetYaxis()->SetTitle("#Sigma E_{i} (GeV)"); + tgL[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tgL[0]->GetXaxis()->SetRangeUser(0, 300.); + if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tgL[0]->Draw("ap"); + if(nLayers != 28){ + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + } + else{ + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d.png").c_str(), nLayers), "png"); + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d.root").c_str(), nLayers), "root"); + } + + /////////TGraph TCanvas* tgM = new TCanvas(); tgM->cd(); @@ -291,23 +312,43 @@ void fitResolution(){ TFile outSim(Form("SIM_resolution_layers%d_config%d.root", nLayers, config), "recreate"); outSim.cd(); tgS[0]->Write("resolution_GeV"); + tgL[0]->Write("linerity_GeV"); outSim.Close(); gStyle->SetOptFit(1); - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); - //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([2], 2.))", 10., 300.); - fitReso->SetParName(0, "S"); - fitReso->SetParName(1, "N"); - fitReso->SetParName(2, "C"); - - /* - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([2], 2.))", 10., 250.); - fitReso->SetParName(0, "S"); - fitReso->SetParName(1, "C"); - */ + + TF1* fitReso; + //fit 3par all + // int type = 1; + //fit 3par tail + // int type = 2; + //fit 2par all + int type = 3; + if(type == 1){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + fitReso->SetParLimits(1, 0., 0.16); + // fitResoM->SetParLimits(2, 0.0001, 0.05); + } + if(type == 3){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "C"); + // fitResoM->SetParLimits(1, 0., 0.05); + // fitResoM->SetParLimits(1, 0.0001, 0.05); + } + if(type == 2){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + fitReso->SetParLimits(1, 0., 0.16); + } tgS[0]->Fit("fitReso", "R"); fitReso->SetLineColor(kGreen+2); fitReso->SetLineWidth(2); @@ -331,8 +372,47 @@ void fitResolution(){ tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d.root").c_str(), nLayers), "root"); } + // float X0value = 0; + TGraphErrors* tM[5]; + for(int iT=0; iT<5; ++iT){ + tM[iT] = (TGraphErrors*)inF[iT]->Get("enLayer_MIP"); + tM[iT]->SetName(Form("enLayer_MIP_E%d", energyP[iT])); + + tM[iT]->SetMarkerStyle(20); + tM[iT]->SetMarkerColor(iColors[iT]); + tM[iT]->SetLineColor(iColors[iT]); + tM[iT]->SetLineWidth(2); + tM[iT]->SetLineStyle(iT); + } + + TFile newOUT(Form("analyzed_SIM_layers%d_config%d.root", nLayers, config), "recreate"); + newOUT.cd(); + for(int iT=0; iT<5; ++iT){ + // tM[iT]->SetName(Form("enLayer_MIP_E%d", energyP[iT])); + tM[iT]->Write(Form("enLayer_MIP_E%d", energyP[iT])); + } + newOUT.Close(); + TCanvas* cTM = new TCanvas(); + cTM->cd(); + tM[0]->GetXaxis()->SetTitle("shower depth (X_{0})"); + tM[0]->GetYaxis()->SetTitle("#Sigma_{layer} E_{layer} (MIP)"); + tM[0]->GetXaxis()->SetRangeUser(0., 30.); + tM[0]->GetYaxis()->SetRangeUser(0., 2.e3); + tM[0]->Draw("ap"); + for(int iT=1; iT<5; ++iT){ + tM[iT]->Draw("p, same"); + } + leg->Draw("same"); + if(nLayers != 28){ + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d_config%d.png").c_str(), nLayers, config), "png"); + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d_config%d.root").c_str(), nLayers, config), "root"); + } + else{ + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d.png").c_str(), nLayers), "png"); + cTM->Print(Form((folder+"/enLayer_MIP_nLayer%d.root").c_str(), nLayers), "root"); + } return; //////////////// TFile* inF2[5]; diff --git a/produceWeights/fitResolution_data.C b/produceWeights/fitResolution_data.C index 58751e6..49deb24 100644 --- a/produceWeights/fitResolution_data.C +++ b/produceWeights/fitResolution_data.C @@ -41,15 +41,16 @@ void fitResolution_data(){ int energyP[6] = {20, 32, 70, 100, 200, 250}; - - /* + /* int nLayers = 8; int config = 2; int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; //, kBlack}; int energyP[6] = {20, 32, 70, 100, 200, 250}; */ + TGraphErrors* tg[6]; + TGraphErrors* tgL[6]; TGraphErrors* tgR[6]; TGraphErrors* tgS[6]; for(int iT=0; iT<6; ++iT){ @@ -58,6 +59,10 @@ void fitResolution_data(){ tg[iT]->SetName(Form("mean_E%d", energyP[iT])); tg[iT]->SetMarkerStyle(20); + tgL[iT] = new TGraphErrors(); + tgL[iT]->SetName(Form("linearity_E%d", energyP[iT])); + tgL[iT]->SetMarkerStyle(20); + tgR[iT] = new TGraphErrors(); tgR[iT]->SetName(Form("resolution_Mip%d", energyP[iT])); tgR[iT]->SetMarkerStyle(20); @@ -210,7 +215,7 @@ void fitResolution_data(){ recoMip[0]->GetXaxis()->SetRangeUser(0.7, 1.3); recoMip[0]->GetYaxis()->SetRangeUser(0., 100.e+03); if(nLayers == 8){ - recoMip[0]->GetXaxis()->SetRangeUser(0., 10.e+03); + recoMip[0]->GetXaxis()->SetRangeUser(0., 15.e+03); recoMip[0]->GetYaxis()->SetRangeUser(0., 1.e+03); } recoMip[0]->Draw(); @@ -231,6 +236,10 @@ void fitResolution_data(){ tg[0]->SetPoint(iT+1, energyP[iT], fitF[iT]->GetParameter(1)/energyP[iT]); tg[0]->SetPointError(iT+1, 0., sqrt(pow(fitF[iT]->GetParError(1)/energyP[iT], 2.) + pow(abs(fitF_up[iT]->GetParameter(1) - fitF_dw[iT]->GetParameter(1)) /2. / energyP[iT], 2.) ) ); + + tgL[0]->SetPoint(iT+1, energyP[iT], fitF[iT]->GetParameter(1)); + tgL[0]->SetPointError(iT+1, 0., sqrt(pow(fitF[iT]->GetParError(1), 2.) + pow(abs(fitF_up[iT]->GetParameter(1) - fitF_dw[iT]->GetParameter(1)) /2., 2.) ) ); + std::cout << " >>>>>>> in MIP energy = " << energyP[iT] << " reso = " << fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1) << std::endl; tgR[0]->SetPoint(iT+1, energyP[iT], fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1)); tgR[0]->SetPointError(iT+1, 0., sqrt( pow(fitM[iT]->GetParameter(2) / fitM[iT]->GetParameter(1) * sqrt( pow(fitM[iT]->GetParError(2)/fitM[iT]->GetParameter(2), 2.) + @@ -253,12 +262,24 @@ void fitResolution_data(){ // std::cout << " >>> energyP[iT] = " << energyP[iT] << " Y = " << pow(fitF[iT]->GetParameter(2),2) / (1.* energyP[iT]) * 100. << std::endl; tg[0]->SetPoint(tg[iT]->GetN(), 400, 5); + tgL[0]->SetPoint(tg[iT]->GetN(), 400, 300); tgR[0]->SetPoint(tg[iT]->GetN(), 400, 5); tgS[0]->SetPoint(tg[iT]->GetN(), 400, 5); } + /////////TGraph linearity + TCanvas* tgLi = new TCanvas(); + tgLi->cd(); + tgL[0]->GetYaxis()->SetTitle("#Sigma E_{i} (GeV)"); + tgL[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); + tgL[0]->GetXaxis()->SetRangeUser(0, 300.); + if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tgL[0]->Draw("ap"); + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); + tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); + /////////TGraph TCanvas* tgM = new TCanvas(); tgM->cd(); @@ -274,6 +295,7 @@ void fitResolution_data(){ TFile outData(Form("DATA_resolution_layers%d_config%d.root", nLayers, config), "recreate"); outData.cd(); + tgL[0]->Write("linearity_GeV"); tgS[0]->Write("resolution_GeV"); tgR[0]->Write("resolution_Mip"); outData.Close(); @@ -284,21 +306,43 @@ void fitResolution_data(){ /////////TGraph - // TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); - TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); - fitResoM->SetParName(0, "S"); - fitResoM->SetParName(1, "N"); - fitResoM->SetParName(2, "C"); - // fitResoM->SetParLimits(1, 0., 0.16); - // fitResoM->SetParLimits(2, 0.0001, 0.05); - /* - TF1* fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); - fitResoM->SetParName(0, "S"); - fitResoM->SetParName(1, "C"); - // fitResoM->SetParLimits(1, 0., 0.05); - fitResoM->SetParLimits(1, 0.0001, 0.05); - */ - // tgR[0]->Fit("fitResoM", "R"); + TF1* fitResoM; + + //fit 3par all + // int type = 1; + + //fit 3par tail + // int type = 2; + + //fit 2par all + int type = 3; + + if(type == 1){ + fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + fitResoM->SetParName(0, "S"); + fitResoM->SetParName(1, "N"); + fitResoM->SetParName(2, "C"); + fitResoM->SetParLimits(1, 0., 0.16); + // fitResoM->SetParLimits(2, 0.0001, 0.05); + } + + if(type == 3){ + fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + fitResoM->SetParName(0, "S"); + fitResoM->SetParName(1, "C"); + // fitResoM->SetParLimits(1, 0., 0.05); + // fitResoM->SetParLimits(1, 0.0001, 0.05); + } + + if(type == 2){ + fitResoM = new TF1("fitResoM", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + fitResoM->SetParName(0, "S"); + fitResoM->SetParName(1, "N"); + fitResoM->SetParName(2, "C"); + fitResoM->SetParLimits(1, 0., 0.16); + } + + tgR[0]->Fit("fitResoM", "R"); fitResoM->SetLineColor(kRed); fitResoM->SetLineWidth(2); @@ -310,15 +354,6 @@ void fitResolution_data(){ */ - TF1* fitResoM_post = new TF1("fitResoM_post", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); - fitResoM_post->SetParName(0, "S"); - fitResoM_post->SetParName(1, "N"); - fitResoM_post->SetParName(2, "C"); - fitResoM_post->SetParLimits(1, 0., 0.16); - - tgR[0]->Fit("fitResoM_post", "R"); - fitResoM_post->SetLineColor(kRed+2); - fitResoM_post->SetLineWidth(2); TCanvas* tgResoM = new TCanvas(); @@ -328,34 +363,53 @@ void fitResolution_data(){ tgR[0]->GetXaxis()->SetRangeUser(0, 300.); tgR[0]->GetYaxis()->SetRangeUser(0., 0.3); tgR[0]->Draw("ap"); - //fitResoM->Draw("same"); - fitResoM_post->Draw("same"); + fitResoM->Draw("same"); + //fitResoM_post->Draw("same"); tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); tgResoM->Print(Form((folder+"/energyMIPnonW_ResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); - + + + ///////////////////////////////////////////////////////// + TF1* fitReso; + + //fit 3par all + // type = 1; + + //fit 3par tail + // int type = 2; + //fit 2par all + // int type = 3; + + if(type == 1){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + fitReso->SetParLimits(1, 0., 0.16); + // fitReso->SetParLimits(2, 0.0001, 0.05); + } + + if(type == 3){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "C"); + // fitReso->SetParLimits(1, 0., 0.05); + fitReso->SetParLimits(1, 0.0001, 0.05); + } + + if(type == 2){ + fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + fitReso->SetParLimits(1, 0., 0.16); + } - //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 300.); - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); - //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); - fitReso->SetParName(0, "S"); - fitReso->SetParName(1, "N"); - fitReso->SetParName(2, "C"); - // fitReso->SetParLimits(1, 0., 0.16); - // fitReso->SetParLimits(2, 0.0001, 0.05); - /* - // TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); - TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); - fitReso->SetParName(0, "S"); - //fitReso->SetParName(1, "N"); - fitReso->SetParName(1, "C"); - // fitReso->SetParLimits(1, 0., 0.05); - fitReso->SetParLimits(1, 0.0001, 0.05); - */ - //tgS[0]->Fit("fitReso", "R"); - fitReso->SetLineColor(kGreen); + tgS[0]->Fit("fitReso", "R"); + fitReso->SetLineColor(kGreen+2); fitReso->SetLineWidth(2); - + /* for(int point=0; pointGetN(); ++point){ double ey = tgS[0]->GetErrorY(point); @@ -364,16 +418,6 @@ void fitResolution_data(){ } */ - //post - TF1* fitReso_post = new TF1("fitReso_post", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 50., 300.); - //TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1], 2.))", 10., 250.); - fitReso_post->SetParName(0, "S"); - fitReso_post->SetParName(1, "N"); - fitReso_post->SetParName(2, "C"); - fitReso_post->SetParLimits(1, 0., 0.16); - tgS[0]->Fit("fitReso_post", "R"); - fitReso_post->SetLineColor(kGreen+2); - fitReso_post->SetLineWidth(2); /////////TGraph simple TCanvas* tgResoS = new TCanvas(); @@ -383,8 +427,8 @@ void fitResolution_data(){ tgS[0]->GetXaxis()->SetRangeUser(0., 300.); tgS[0]->GetYaxis()->SetRangeUser(0., 0.3); tgS[0]->Draw("ap"); - //fitReso->Draw("same"); - fitReso_post->Draw("same"); + fitReso->Draw("same"); + // fitReso_post->Draw("same"); tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); tgResoS->Print(Form((folder+"/energy_SResolutionVsEnergy_layers%d_config%d.root").c_str(), nLayers, config), "root"); diff --git a/produceWeights/simple_Data.C b/produceWeights/simple_Data.C index fe985ca..a4b032d 100644 --- a/produceWeights/simple_Data.C +++ b/produceWeights/simple_Data.C @@ -52,10 +52,10 @@ void simple_Data(int nLayer, int energyEle, int config = 1) { TFile* inF; if(nLayer == 28) inF = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle)); - // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_okFactor/%dGeV.root", energyEle)); - // else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_okFactor/%dGeV.root", energyEle)); - else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data/%dGeV.root", energyEle)); - else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data/%dGeV.root", energyEle)); + else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_Mean/%dGeV.root", energyEle)); + else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_Mean/%dGeV.root", energyEle)); + // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_MPV/%dGeV.root", energyEle)); + // else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_MPV/%dGeV.root", energyEle)); TH1F* enLayer[28]; TH1F* enLayer_AbsW_Mip[28]; From bcd066997a4f6e621b8ddc0aec83f157b2c37bf0 Mon Sep 17 00:00:00 2001 From: arabella Date: Fri, 11 Nov 2016 20:52:18 +0100 Subject: [PATCH 053/297] new --- produceWeights/doMIP.C | 173 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 produceWeights/doMIP.C diff --git a/produceWeights/doMIP.C b/produceWeights/doMIP.C new file mode 100644 index 0000000..97d085e --- /dev/null +++ b/produceWeights/doMIP.C @@ -0,0 +1,173 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + +#include "/afs/cern.ch/work/a/amartell/ES_P5/CMSSW_7_4_6_patch6/src/MyAnalyzer/ESAnalyzer/macroAnalysis/langausfit.h" + +void doMIP(int nLayer, int config, int energyEle=0){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptTitle(0); + + float dEdX_weights[28]; + float X0val[28]; + + if(nLayer == 28){ + float dEdX_weights_28[28] = {7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 7.203, 8.087, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 10.817, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 12.789, 8.148}; + float X0val_28[28] = {0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.574, 0.699, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 0.802, 0.977, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439, 1.202, 1.439}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_28[j]; + X0val[j] = X0val_28[j]; + } + } + else{ + if(config == 1){ + // float dEdX_weights_8[28] = {33.151, 13.261, 14.247, 9.885, 9.844, 9.844, 16.416, 28.296, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float dEdX_weights_8[28] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + else if(config == 2){ + float dEdX_weights_8[28] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.804, 36.322, 27.451, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + float X0val_8[28] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; + + for(int j=0; j<28; ++j){ + dEdX_weights[j] = dEdX_weights_8[j]; + X0val[j] = X0val_8[j]; + } + } + } + + + TChain* t = new TChain("HGCalTBAnalyzer/HGCTB"); + + if(nLayer == 8 && config == 1){ + std::string nameFolder = ""; + if(energyEle == 20) nameFolder = "161101_094655"; + if(energyEle == 35) nameFolder = "161031_180636"; + if(energyEle == 70) nameFolder = "161031_180644"; + if(energyEle == 100) nameFolder = "161101_094708"; + if(energyEle == 200) nameFolder = "161031_180705"; + if(energyEle == 250) nameFolder = "161031_180712"; + + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + } + } + } + else if(nLayer == 8 && config == 2){ + std::string nameFolder = ""; + if(energyEle == 20) nameFolder = "161108_231750"; + if(energyEle == 32) nameFolder = "161108_231756"; + if(energyEle == 70) nameFolder = "161109_074724"; + if(energyEle == 100) nameFolder = "161108_231811"; + if(energyEle == 200) nameFolder = "161109_130453"; + if(energyEle == 250) nameFolder = "161108_231833"; + + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIIv4_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + } + } + } + else if(nLayer == 28 && config == 1){ + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Muon500MeV/161101_141550/000%d/TBGenSim_%d.root", iFo, iF)); + } + } + } + else if(nLayer == 28 && config == 2){ + for(int iFo=0; iFo<2; ++iFo){ + for(int iF=0; iF<1000; ++iF){ + t->Add(Form("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Pi125GeV/161101_095441/000%d/TBGenSim_%d.root", iFo, iF)); + } + } + } + + double totEntries = t->GetEntries(); + std::cout << " tree read => entries = " << totEntries << std::endl; + + TH1F* enLayer[28]; + + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i] = new TH1F(Form("enLayer%d", i+1), "", 5000, 0., 150.e-06); + + } + + + TGraphErrors* enLayer_Mean = new TGraphErrors(); + TGraphErrors* enLayer_MPV = new TGraphErrors(); + + double xBeam, yBeam; + std::vector* simHitLayEn2E = 0; + t->SetBranchAddress("simHitLayEn2E", &simHitLayEn2E); + t->SetBranchAddress("xBeam", &xBeam); + t->SetBranchAddress("yBeam", &yBeam); + + + //looping over entries + for(int iE=0; iEGetEntry(iE); + nLayer = simHitLayEn2E->size(); + // std::cout << " simHitLayEn2E->size() = " << simHitLayEn2E->size() << std::endl; + if(abs(xBeam) >= 2 || abs(yBeam) >= 2) continue; + float totEnergy = 0.; + for(int iS=0; iSsize(); ++iS){ + if(simHitLayEn2E->at(iS) > 0) enLayer[iS]->Fill(simHitLayEn2E->at(iS)); + } + } + + TF1* hL = new TF1("hL", "landau", 0, 100); + // float X0value = 0; + for(int i=0; iFit("hL"); + + // X0value += X0val[i]; + enLayer_MPV->SetPoint(i+1, i+1, hL->GetParameter(1)); + enLayer_MPV->SetPointError(i+1, 0, hL->GetParError(1)); + + enLayer_Mean->SetPoint(i+1, i+1, enLayer[i]->GetMean()); + enLayer_Mean->SetPointError(i+1, 0, enLayer[i]->GetRMS()/enLayer[i]->GetEntries()); + } + + TFile* outF; + if(config == 1) outF = new TFile("energyLayer_ROOT/outF_MIPmuon_28layers.root", "recreate"); + if(config == 2) outF = new TFile("energyLayer_ROOT/outF_MIPpion_28layers.root", "recreate"); + /* + else if(nLayer == 8 && config == 1) outF = new TFile(Form("energyLayer_ROOT/outF_Ele%d.root", energyEle), "recreate"); + else if(nLayer == 8 && config == 2) outF = new TFile(Form("energyLayer_ROOT/outF_endShower_Ele%d.root", energyEle), "recreate"); + */ + outF->cd(); + for(int i=0; i<28; ++i){ + if(nLayer != 28 && i >= 8) continue; + enLayer[i]->Write(); + } + enLayer_Mean->Write("enLayer_Mean"); + enLayer_MPV->Write("enLayer_MPV"); + outF->Close(); + + +} From 167088a7774ad27e379f31529016b5aaeabbee87 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 16 Nov 2016 10:24:27 +0100 Subject: [PATCH 054/297] [position resolution] initialization, start with minimally working framework --- Reco/interface/Particle_Track.h | 36 +++++ Reco/plugins/Position_Resolution_Analyzer.cc | 134 +++++++++++++++++++ Reco/python/position_resolution_cfi.py | 17 +++ Reco/src/Particle_Track.cc | 18 +++ StandardSequences/python/LocalReco_cff.py | 1 + test_cfg_newEB.py | 12 +- 6 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 Reco/interface/Particle_Track.h create mode 100644 Reco/plugins/Position_Resolution_Analyzer.cc create mode 100644 Reco/python/position_resolution_cfi.py create mode 100644 Reco/src/Particle_Track.cc diff --git a/Reco/interface/Particle_Track.h b/Reco/interface/Particle_Track.h new file mode 100644 index 0000000..a707b53 --- /dev/null +++ b/Reco/interface/Particle_Track.h @@ -0,0 +1,36 @@ +#ifndef HGCAL_RECO_PARTICLETRACK_H +#define HGCAL_RECO_PARTICLETRACK_H + + +//#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +//#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +//#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +//#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +//#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +//#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" + +using namespace std; +// +// class declaration +// + +class Particle_Track{ + + public: + Particle_Track(edm::Handle Rechits, HGCalElectronicsMap& emap); + ~Particle_Track(); + + private: + edm::Handle Rechits_; + struct { + HGCalElectronicsMap emap_; + } essource_; + +}; + +#endif diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc new file mode 100644 index 0000000..6f9c7e5 --- /dev/null +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -0,0 +1,134 @@ +/* Write + * a description here! + */ + +/** + @Author: Thorben Quast + 16 Nov 2016 + thorben.quast@cern.ch / thorben.quast@rwth-aachen.de +*/ + + + +// system include files +//#include +#include +#include +//#include "TH2Poly.h" +//#include "TProfile.h" +//#include "TH1F.h" +//#include "TF1.h" +//#include +//#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +//#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +//#include "HGCal/Geometry/interface/HGCalTBTopology.h" +//#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +//#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +//#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +//#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +//#include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +//#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" +//#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + +//this should go into a config file +double Layer_Z_Positions[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +int SensorSize = 128; + +class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { + + public: + explicit Position_Resolution_Analyzer(const edm::ParameterSet&); + ~Position_Resolution_Analyzer(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + edm::EDGetToken HGCalTBRecHitCollection_; + + //this is needed to calculate the real x-y positions from u-v + HGCalTBCellVertices TheCell; + std::pair CellCenterXY; +}; + + + +Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { + // initialization + usesResource("TFileService"); + edm::Service fs; + HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + std::string test_string = iConfig.getParameter("randomString"); + std::cout<<"Position_Resolution_Analyzer is initialized with the test_string parameter: "< Rechits; + event.getByToken(HGCalTBRecHitCollection_, Rechits); + + for(auto Rechit : *Rechits) { + int layer = (Rechit.id()).layer(); + double iu = (Rechit.id()).iu(); + double iv = (Rechit.id()).iv(); + //double energyLow = Rechit.energyLow(); + //double energyHigh = Rechit.energyHigh(); + double energy = Rechit.energy(); + + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), SensorSize); + double iux = CellCenterXY.first; + double ivy = CellCenterXY.second; + std::cout< Rechits, HGCalElectronicsMap& emap) { +} + + +Particle_Track::~Particle_Track() { +} + + + + + + + + diff --git a/StandardSequences/python/LocalReco_cff.py b/StandardSequences/python/LocalReco_cff.py index 86dc0e1..5f3c903 100644 --- a/StandardSequences/python/LocalReco_cff.py +++ b/StandardSequences/python/LocalReco_cff.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms from HGCal.Reco.hgcaltbrechitproducer_cfi import * +from HGCal.Reco.position_resolution_cfi import * LocalRecoSeq = cms.Sequence(hgcaltbrechits) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 5fab182..968f375 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,7 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -68,13 +68,14 @@ options.output = "test_output.root" -options.maxEvents = -1 +options.maxEvents = 1 options.parseArguments() # print options # <--- A better option is to call test_cfg is called with "print" argument e.g. cmsRun test_cfg.py print dataFolder=example1 outputFolder=example2 ... if not os.path.isdir(options.dataFolder): + print options.dataFolder sys.exit("Error: Data folder not found or inaccessible!") if not os.path.isdir(options.outputFolder): @@ -119,6 +120,8 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') +process.position_resolution_analyzer.randomString = "blablablablabla" + process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) @@ -140,6 +143,9 @@ process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) elif (options.chainSequence == 6): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 6): + pass #TODO + #process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) @@ -181,5 +187,7 @@ process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) elif (options.chainSequence == 6): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) +elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.position_resolution_analyzer) process.end = cms.EndPath(process.output) From aab7f9f44b010a7088fc5a36dc88f598638e3595 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 16 Nov 2016 13:46:02 +0100 Subject: [PATCH 055/297] [position resolution] extend HGCalTBRecHit class by cartesian coordinates information --- DataFormats/interface/HGCalTBRecHit.h | 5 +++++ DataFormats/src/HGCalTBRecHit.cc | 12 ++++++++++++ DataFormats/src/classes_def.xml | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index c2f6bec..2403d2e 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -15,7 +15,9 @@ class HGCalTBRecHit : public CaloRecHit { + public: + double* cartesian_coordinates; typedef DetId key_type; enum Flags { @@ -63,6 +65,9 @@ class HGCalTBRecHit : public CaloRecHit return flagField(flag, 1); }; //flagBits_ & ( 0x1< #include #include @@ -12,7 +13,18 @@ HGCalTBRecHit::HGCalTBRecHit(const DetId& id, float energy, float energyLow, flo _energyLow(energyLow), _energyHigh(energyHigh) { + cartesian_coordinates = new double[3]; +} + +void HGCalTBRecHit::setCartesianCoordinates(double x, double y, double z){ + cartesian_coordinates[0] = x; + cartesian_coordinates[1] = y; + cartesian_coordinates[2] = z; +} +double HGCalTBRecHit::getCartesianCoordinate(int index){ + assert(index<=2); + return cartesian_coordinates[index]; } std::ostream& operator<<(std::ostream& s, const HGCalTBRecHit& hit) diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index ec40d90..1bfca74 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -5,7 +5,7 @@ - + From 9de98e7319b23aa44bd3f2953d85d47bff4623c9 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 16 Nov 2016 15:19:14 +0100 Subject: [PATCH 056/297] [position resolution] introduce helper classes and structs in external files, provide skeleton for different weighting techniques --- ...le_Track.h => PositionResolutionHelpers.h} | 48 +++++++++-- Reco/plugins/Position_Resolution_Analyzer.cc | 73 ++++++++-------- Reco/python/position_resolution_cfi.py | 2 +- Reco/src/Particle_Track.cc | 18 ---- Reco/src/PositionResolutionHelpers.cc | 83 +++++++++++++++++++ 5 files changed, 167 insertions(+), 57 deletions(-) rename Reco/interface/{Particle_Track.h => PositionResolutionHelpers.h} (50%) delete mode 100644 Reco/src/Particle_Track.cc create mode 100644 Reco/src/PositionResolutionHelpers.cc diff --git a/Reco/interface/Particle_Track.h b/Reco/interface/PositionResolutionHelpers.h similarity index 50% rename from Reco/interface/Particle_Track.h rename to Reco/interface/PositionResolutionHelpers.h index a707b53..ccb168e 100644 --- a/Reco/interface/Particle_Track.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -1,36 +1,74 @@ #ifndef HGCAL_RECO_PARTICLETRACK_H #define HGCAL_RECO_PARTICLETRACK_H - +#include +#include //#include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/Event.h" //#include "FWCore/ServiceRegistry/interface/Service.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" //#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -//#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" //#include "HGCal/Geometry/interface/HGCalTBTopology.h" #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" //#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" -using namespace std; + // // class declaration // -class Particle_Track{ +enum WeightingMethod { + SQUAREDWEIGHTING, + LINEARWEIGHTING, + DEFAULT +}; +class Particle_Track{ public: Particle_Track(edm::Handle Rechits, HGCalElectronicsMap& emap); ~Particle_Track(); - private: edm::Handle Rechits_; struct { HGCalElectronicsMap emap_; } essource_; +}; + +struct HitTriple { + double x; double y; + double I; }; +class SensorHitMap { + private: + std::pair centralHitPoint; + double layerZ; + int sensorSize; + std::vector Hits; + //helpers to obtain the x-y coordinate + HGCalTBCellVertices TheCell; + std::pair CellCenterXY; + + void linearWeighting(); + void squaredWeighting(); + + public: + SensorHitMap(); + void setZ(double z); + void setSensorSize(int s); + //reduces the information from the Rechit towards what is necessary for the impact point calculation + void addHit(HGCalTBRecHit Rechit); + std::pair calculateCenterPosition(WeightingMethod method); + std::pair getCenterPosition(); + + //debug + void printHits(); +}; + + + #endif diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 6f9c7e5..2ff8445 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -14,6 +14,8 @@ //#include #include #include +#include +#include //#include "TH2Poly.h" //#include "TProfile.h" //#include "TH1F.h" @@ -28,6 +30,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" @@ -48,7 +51,6 @@ double Layer_Z_Positions[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12 int SensorSize = 128; class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { - public: explicit Position_Resolution_Analyzer(const edm::ParameterSet&); ~Position_Resolution_Analyzer(); @@ -62,21 +64,27 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer CellCenterXY; + WeightingMethod weightingMethod; + + }; - - Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { // initialization usesResource("TFileService"); edm::Service fs; HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); - std::string test_string = iConfig.getParameter("randomString"); - std::cout<<"Position_Resolution_Analyzer is initialized with the test_string parameter: "<("weightingMethod"); + + if (methodString == "") + weightingMethod = SQUAREDWEIGHTING; + else if (methodString == "") + weightingMethod = LINEARWEIGHTING; + else + weightingMethod = DEFAULT; + }//constructor ends here Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { @@ -85,50 +93,49 @@ Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { // ------------ method called for each event ------------ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - - //int event_nr = (event.id()).event(); - //double time = event.time().value(); - //opening Rechits edm::Handle Rechits; event.getByToken(HGCalTBRecHitCollection_, Rechits); - for(auto Rechit : *Rechits) { + //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer + std::map Sensors; + for(auto Rechit : *Rechits) { int layer = (Rechit.id()).layer(); - double iu = (Rechit.id()).iu(); - double iv = (Rechit.id()).iv(); - //double energyLow = Rechit.energyLow(); - //double energyHigh = Rechit.energyHigh(); - double energy = Rechit.energy(); - - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), SensorSize); - double iux = CellCenterXY.first; - double ivy = CellCenterXY.second; - std::cout<setZ(Layer_Z_Positions[layer]); + newSensor->setSensorSize(SensorSize); + Sensors[layer] = newSensor; + } + Sensors[layer]->addHit(Rechit); + } - //(Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv() - //Rechit.energyHigh(), Rechit.energyLow() + + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + std::cout<<"Layer: "<first<second->printHits(); + it->second->calculateCenterPosition(method); + std::cout<second->getCenterPosition()->first<<" "<second->getCenterPosition()->second< Rechits, HGCalElectronicsMap& emap) { -} - - -Particle_Track::~Particle_Track() { -} - - - - - - - - diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc new file mode 100644 index 0000000..a9df734 --- /dev/null +++ b/Reco/src/PositionResolutionHelpers.cc @@ -0,0 +1,83 @@ +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" + + + +//Particle_Track implementations +Particle_Track::Particle_Track(edm::Handle Rechits, HGCalElectronicsMap& emap) { +} + +Particle_Track::~Particle_Track() { +} + + + + +//**** Sensor Hit Maps ****// + +//public functions +SensorHitMap::SensorHitMap(){ + centralHitPoint = std::make_pair(0., 0.); + layerZ = 0; + sensorSize = 128; +} + +void SensorHitMap::setSensorSize(int s){ + sensorSize = s; +} + +void SensorHitMap::setZ(double z){ + this->layerZ = z; +} + +//reduces the information from the Rechit towards what is necessary for the impact point calculation +void SensorHitMap::addHit(HGCalTBRecHit Rechit) { + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); + double iux = CellCenterXY.first; + double ivy = CellCenterXY.second; + //Rechit.setCartesianCoordinates(iux, ivy, Layer_Z_Positions[layer]); //in cm, is not really necessary + + HitTriple* hit = new HitTriple; + hit->x = iux; + hit->y = ivy; + hit->I = Rechit.energy(); + Hits.push_back(hit); +} + +std::pair SensorHitMap::calculateCenterPosition(WeightingMethod method) { + switch(method){ + case SQUAREDWEIGHTING: + SensorHitMap::squaredWeighting(); + case LINEARWEIGHTING: + default: + SensorHitMap::linearWeighting(); + } + return centralHitPoint; +} + +std::pair SensorHitMap::getCenterPosition() { + return centralHitPoint; +} + +//private functions +void SensorHitMap::squaredWeighting() { + //todo + centralHitPoint.first = 1.0; + centralHitPoint.second = 1.0; + return; +} + +void SensorHitMap::linearWeighting() { + //todo + centralHitPoint.first = 2.0; + centralHitPoint.second = 2.0; + return; +} + +//debug function +void SensorHitMap::printHits() { + + for(std::vector::iterator it=Hits.begin(); it!=Hits.end(); it++){ + std::cout<<(*it)->x<<" "<<(*it)->y<<" "<<(*it)->I< Date: Wed, 16 Nov 2016 18:04:25 +0100 Subject: [PATCH 057/297] [position resolution] implement first center position calculation schemes --- Reco/interface/PositionResolutionHelpers.h | 19 +++--- Reco/plugins/Position_Resolution_Analyzer.cc | 11 ++-- Reco/src/PositionResolutionHelpers.cc | 66 +++++++++++++++----- test_cfg_newEB.py | 2 +- 4 files changed, 69 insertions(+), 29 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index ccb168e..06474d0 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -3,16 +3,17 @@ #include #include +#include //#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/Event.h" +//#include "FWCore/Framework/interface/Event.h" //#include "FWCore/ServiceRegistry/interface/Service.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" //#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" //#include "HGCal/Geometry/interface/HGCalTBTopology.h" -#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" -#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +//#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +//#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" //#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" @@ -28,19 +29,17 @@ enum WeightingMethod { class Particle_Track{ public: - Particle_Track(edm::Handle Rechits, HGCalElectronicsMap& emap); + Particle_Track(edm::Handle Rechits);//, HGCalElectronicsMap& emap); ~Particle_Track(); private: edm::Handle Rechits_; - struct { - HGCalElectronicsMap emap_; - } essource_; }; struct HitTriple { double x; double y; double I; + int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction }; class SensorHitMap { @@ -52,9 +51,10 @@ class SensorHitMap { //helpers to obtain the x-y coordinate HGCalTBCellVertices TheCell; std::pair CellCenterXY; + std::map cellTypeCount; + std::map pedestalCount; - void linearWeighting(); - void squaredWeighting(); + void poweredWeighting(int exponent); public: SensorHitMap(); @@ -62,6 +62,7 @@ class SensorHitMap { void setSensorSize(int s); //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); + void subtractPedestals(); std::pair calculateCenterPosition(WeightingMethod method); std::pair getCenterPosition(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 2ff8445..62706d8 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -78,9 +78,9 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //read the weighting method to obtain the central hit point std::string methodString = iConfig.getParameter("weightingMethod"); - if (methodString == "") + if (methodString == "squaredWeighting") weightingMethod = SQUAREDWEIGHTING; - else if (methodString == "") + else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; else weightingMethod = DEFAULT; @@ -107,6 +107,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E newSensor->setSensorSize(SensorSize); Sensors[layer] = newSensor; } + + //TODO: need to apply global correction to energies, like subtract pedestals? Sensors[layer]->addHit(Rechit); } @@ -114,8 +116,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { std::cout<<"Layer: "<first<second->printHits(); - it->second->calculateCenterPosition(method); - std::cout<second->getCenterPosition()->first<<" "<second->getCenterPosition()->second<second->subtractPedestals(); + it->second->calculateCenterPosition(weightingMethod); + std::cout<second->getCenterPosition().first<<" "<second->getCenterPosition().second< Rechits, HGCalElectronicsMap& emap) { +Particle_Track::Particle_Track(edm::Handle Rechits){;//, HGCalElectronicsMap& emap) { } Particle_Track::~Particle_Track() { @@ -34,22 +34,57 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); double iux = CellCenterXY.first; double ivy = CellCenterXY.second; + int ID = (Rechit.id()).cellType(); + double energy = Rechit.energy(); //input to centrum calculation ? + double energyHigh = Rechit.energyHigh(); //used for pedestal subtraction analogous to the event display + //Rechit.setCartesianCoordinates(iux, ivy, Layer_Z_Positions[layer]); //in cm, is not really necessary HitTriple* hit = new HitTriple; + hit->ID = ID; hit->x = iux; hit->y = ivy; - hit->I = Rechit.energy(); + hit->I = energy; Hits.push_back(hit); + + if (energyHigh <= 30.0) { + if (cellTypeCount.find(ID) == cellTypeCount.end()) { + cellTypeCount[ID] = 0; + pedestalCount[ID] = 0; + } + cellTypeCount[ID] += 1; + pedestalCount[ID] += energyHigh; + } } +void SensorHitMap::subtractPedestals() { + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin + switch((*hit)->ID) { + case 0: + case 4: + (*hit)->I -= (pedestalCount[0]+pedestalCount[4])/(cellTypeCount[0]+cellTypeCount[4]); + case 2: + (*hit)->I -= pedestalCount[2]/cellTypeCount[2]; + case 3: + (*hit)->I -= pedestalCount[3]/cellTypeCount[3]; + case 5: + (*hit)->I -= pedestalCount[5]/cellTypeCount[5]; + case 1: + default: + continue; + } + } +} + + std::pair SensorHitMap::calculateCenterPosition(WeightingMethod method) { switch(method){ case SQUAREDWEIGHTING: - SensorHitMap::squaredWeighting(); + SensorHitMap::poweredWeighting(2); case LINEARWEIGHTING: default: - SensorHitMap::linearWeighting(); + SensorHitMap::poweredWeighting(1); } return centralHitPoint; } @@ -59,19 +94,20 @@ std::pair SensorHitMap::getCenterPosition() { } //private functions -void SensorHitMap::squaredWeighting() { - //todo - centralHitPoint.first = 1.0; - centralHitPoint.second = 1.0; - return; +void SensorHitMap::poweredWeighting(int exponent) { + double numerator_x, numerator_y, denominator; + numerator_x = numerator_y = denominator = 0; + double w; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + w = (*hit)->I >= 0. ? pow((*hit)->I, exponent) : 0.0; + denominator += w; + numerator_x += w*(*hit)->x; + numerator_y += w*(*hit)->y; + } + centralHitPoint.first = numerator_x/denominator; + centralHitPoint.second = numerator_y/denominator; } -void SensorHitMap::linearWeighting() { - //todo - centralHitPoint.first = 2.0; - centralHitPoint.second = 2.0; - return; -} //debug function void SensorHitMap::printHits() { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 968f375..2c30a8d 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -120,7 +120,7 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') -process.position_resolution_analyzer.randomString = "blablablablabla" +process.position_resolution_analyzer.weightingMethod = "squaredWeighting" process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) From 928a6933ac97c3d081f10e926cc9f5b0d8ae16bc Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Wed, 16 Nov 2016 23:44:54 +0100 Subject: [PATCH 058/297] Added log Energy weighted position of the 19 cell cluster for each layer X_Layer%d_log and Y_Layer%d_log --- Reco/plugins/Layer_Sum_Analyzer.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 1e1011d..c3b199d 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -128,6 +128,8 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzermake(Form("X_Layer%d", layer+1), "", 2000, -10., 10. ); h_y_layer[layer] = fs->make(Form("Y_Layer%d", layer+1), "", 2000, -10., 10. ); + h_x_layer_log[layer] = fs->make(Form("X_Layer%d_log", layer+1), "", 2000, -10., 10. ); + h_y_layer_log[layer] = fs->make(Form("Y_Layer%d_log", layer+1), "", 2000, -10., 10. ); + h_x_y_layer[layer] = fs->make(Form("YvsX_Layer%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); h_E1oE7_layer[layer] = fs->make(Form("h_E1oE7_layer%d",layer+1), Form("h_E1oE7_layer%d",layer+1), 5000, -5, 5); @@ -356,14 +361,16 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu event.getByToken(HGCalTBRecHitCollection_, Rechits1); // looping over each rechit to fill histogram - double allcells_sum[MAXLAYERS], sevencells_sum[MAXLAYERS], nineteencells_sum[MAXLAYERS], radius[MAXLAYERS]; + double allcells_sum[MAXLAYERS], sevencells_sum[MAXLAYERS], nineteencells_sum[MAXLAYERS], nineteencells_log_sum[MAXLAYERS], radius[MAXLAYERS]; double seedEnergy[MAXLAYERS]; double x_tmp[MAXLAYERS], y_tmp[MAXLAYERS]; + double x_log_tmp[MAXLAYERS], y_log_tmp[MAXLAYERS]; + int num[MAXLAYERS], sevennum[MAXLAYERS], nineteennum[MAXLAYERS]; for(int iL=0; iL CMTHRESHOLD)){ // nineteencells_sum += (LayerWeight[LAYER]*(Rechit1.energyHigh() - commonmode))/ ADCtoMIP[LAYER]; nineteencells_sum[eLayer] += energyCMsub; + nineteencells_log_sum[eLayer] += log(energyCMsub); x_tmp[eLayer] += CellCentreXY.first * energyCMsub; y_tmp[eLayer] += CellCentreXY.second * energyCMsub; + x_log_tmp[eLayer] += CellCentreXY.first * log(energyCMsub); + y_log_tmp[eLayer] += CellCentreXY.second * log(energyCMsub); nineteennum[eLayer]++; } } @@ -478,6 +488,8 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_x_layer[iL]->Fill(x_tmp[iL] / nineteencells_sum[iL]); h_y_layer[iL]->Fill(y_tmp[iL] / nineteencells_sum[iL]); + h_x_layer_log[iL]->Fill(x_log_tmp[iL] / nineteencells_log_sum[iL]); + h_y_layer_log[iL]->Fill(y_log_tmp[iL] / nineteencells_log_sum[iL]); h_x_y_layer[iL]->Fill(x_tmp[iL] / nineteencells_sum[iL], y_tmp[iL] / nineteencells_sum[iL]); E1SumL_R += seedEnergy[iL]; From 427d9f67b1780ac3ab93c61d306b5ec05038cea5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 10:46:00 +0100 Subject: [PATCH 059/297] [position resolution] implement center track fitting framework and simple linear fit scheme using TGraphErrors --- Reco/interface/PositionResolutionHelpers.h | 59 ++++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 61 +++++---- Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 123 ++++++++++++++++--- test_cfg_newEB.py | 5 +- 5 files changed, 180 insertions(+), 69 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 06474d0..ff4e6de 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -3,18 +3,18 @@ #include #include +#include #include -//#include "FWCore/Framework/interface/Frameworkfwd.h" -//#include "FWCore/Framework/interface/Event.h" -//#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "TF1.h" +#include "TGraphErrors.h" + + #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" -//#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -//#include "HGCal/Geometry/interface/HGCalTBTopology.h" -//#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" -//#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" -//#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" + + // @@ -22,20 +22,16 @@ // enum WeightingMethod { + DEFAULTWEIGHTING, SQUAREDWEIGHTING, - LINEARWEIGHTING, - DEFAULT + LINEARWEIGHTING }; -class Particle_Track{ - public: - Particle_Track(edm::Handle Rechits);//, HGCalElectronicsMap& emap); - ~Particle_Track(); - private: - edm::Handle Rechits_; +enum TrackFittingMethod { + DEFAULTFITTING, + LINEFITTGRAPHERRORS }; - struct HitTriple { double x; double y; double I; @@ -45,6 +41,7 @@ struct HitTriple { class SensorHitMap { private: std::pair centralHitPoint; + std::pair centralHitPointError; double layerZ; int sensorSize; std::vector Hits; @@ -63,13 +60,39 @@ class SensorHitMap { //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); void subtractPedestals(); - std::pair calculateCenterPosition(WeightingMethod method); + void calculateCenterPosition(WeightingMethod method); + double getZ(); std::pair getCenterPosition(); + std::pair getCenterPositionError(); //calculated via RMS //debug void printHits(); }; +class ParticleTrack{ + public: + ParticleTrack(); + ~ParticleTrack(); + void addFitPoint(SensorHitMap* sensor); + void fitTrack(TrackFittingMethod method); + std::pair CalculatePositionXY(double z); + private: + //general information, the fit points + std::vector x; + std::vector x_err; + std::vector y; + std::vector y_err; + std::vector z; + std::vector z_err; + TrackFittingMethod lastAppliedMethod; + + //different fit functions + void LineFitTGraphErrors(); + std::pair PositionFromLineFitTGraphErrors(double z); + TF1* ROOTpol_x; + TF1* ROOTpol_y; +}; + #endif diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 62706d8..1a2ab49 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -16,12 +16,6 @@ #include #include #include -//#include "TH2Poly.h" -//#include "TProfile.h" -//#include "TH1F.h" -//#include "TF1.h" -//#include -//#include #include // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -32,23 +26,17 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" -#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -//#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -//#include "HGCal/Geometry/interface/HGCalTBTopology.h" -//#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -//#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" -//#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" -//#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" -//#include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" -#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -//#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" -//#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" - -//this should go into a config file + + + +/**********/ +//all of this should go into a config file double Layer_Z_Positions[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +int nLayers = 8; int SensorSize = 128; +/**********/ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { public: @@ -65,7 +53,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer("weightingMethod"); - if (methodString == "squaredWeighting") weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; else - weightingMethod = DEFAULT; + weightingMethod = DEFAULTWEIGHTING; + + //read the track fitting method + methodString = iConfig.getParameter("fittingMethod"); + if (methodString == "lineTGraphErrors") + fittingMethod = LINEFITTGRAPHERRORS; + else + fittingMethod = DEFAULTFITTING; }//constructor ends here @@ -107,24 +101,29 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E newSensor->setSensorSize(SensorSize); Sensors[layer] = newSensor; } - - //TODO: need to apply global correction to energies, like subtract pedestals? Sensors[layer]->addHit(Rechit); } - + //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { - std::cout<<"Layer: "<first<second->printHits(); + //subtract pedestals first it->second->subtractPedestals(); + + //now calculate the center positions for each layer it->second->calculateCenterPosition(weightingMethod); - std::cout<second->getCenterPosition().first<<" "<second->getCenterPosition().second< Tracks; //the integer index indicates which layer is omitted in the track calculation + for (int i=1; i<=nLayers; i++) { + Tracks[i] = new ParticleTrack(); + for (int j=1; j<=nLayers; j++) { + if (i==j) continue; + Tracks[i]->addFitPoint(Sensors[j]); + } + Tracks[i]->fitTrack(fittingMethod); + } }// analyze ends here diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 156b512..53d713c 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -2,6 +2,7 @@ position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", weightingMethod = cms.string('squaredWeighting'), + fittingMethod = cms.string('lineTGraphErrors'), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )#, #digiCollection = cms.InputTag('hgcaltbdigis'), #pedestalLow = cms.string('CondObjects/data/Ped_LowGain_L8.txt'), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index e22d18f..1ca0639 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -1,17 +1,6 @@ #include "HGCal/Reco/interface/PositionResolutionHelpers.h" - -//Particle_Track implementations -Particle_Track::Particle_Track(edm::Handle Rechits){;//, HGCalElectronicsMap& emap) { -} - -Particle_Track::~Particle_Track() { -} - - - - //**** Sensor Hit Maps ****// //public functions @@ -21,14 +10,18 @@ SensorHitMap::SensorHitMap(){ sensorSize = 128; } -void SensorHitMap::setSensorSize(int s){ +void SensorHitMap::setSensorSize(int s) { sensorSize = s; } -void SensorHitMap::setZ(double z){ +void SensorHitMap::setZ(double z) { this->layerZ = z; } +double SensorHitMap::getZ() { + return this->layerZ; +} + //reduces the information from the Rechit towards what is necessary for the impact point calculation void SensorHitMap::addHit(HGCalTBRecHit Rechit) { CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); @@ -47,7 +40,8 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { hit->I = energy; Hits.push_back(hit); - if (energyHigh <= 30.0) { + //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds 30 + if (energyHigh <= 30.0) { //TODO: make a threshold if (cellTypeCount.find(ID) == cellTypeCount.end()) { cellTypeCount[ID] = 0; pedestalCount[ID] = 0; @@ -78,37 +72,130 @@ void SensorHitMap::subtractPedestals() { } -std::pair SensorHitMap::calculateCenterPosition(WeightingMethod method) { +void SensorHitMap::calculateCenterPosition(WeightingMethod method) { switch(method){ case SQUAREDWEIGHTING: SensorHitMap::poweredWeighting(2); + break; case LINEARWEIGHTING: - default: SensorHitMap::poweredWeighting(1); + break; + //case NEWMETHOD: + //SensorHitMap::newWeightingFunction() + //break; + default: + SensorHitMap::poweredWeighting(2); } - return centralHitPoint; } std::pair SensorHitMap::getCenterPosition() { return centralHitPoint; } +std::pair SensorHitMap::getCenterPositionError() { + return centralHitPointError; +} + //private functions void SensorHitMap::poweredWeighting(int exponent) { + double threshold = 0.0; //TODO: maybe as parameter + double numerator_x, numerator_y, denominator; numerator_x = numerator_y = denominator = 0; double w; for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - w = (*hit)->I >= 0. ? pow((*hit)->I, exponent) : 0.0; + w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum denominator += w; numerator_x += w*(*hit)->x; numerator_y += w*(*hit)->y; } centralHitPoint.first = numerator_x/denominator; centralHitPoint.second = numerator_y/denominator; + + //calculate the RMs + numerator_x = numerator_y = 0.0; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; + numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); + numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); + } + centralHitPointError.first = sqrt(numerator_x/denominator); + centralHitPointError.second = sqrt(numerator_y/denominator); +} + + + + +//**** Particle Tracks ****// + +//public functions +ParticleTrack::ParticleTrack(){ + lastAppliedMethod = DEFAULTFITTING; + ROOTpol_x = ROOTpol_y = 0; + +}; +ParticleTrack::~ParticleTrack(){ + +}; + +void ParticleTrack::addFitPoint(SensorHitMap* sensor){ + x.push_back(sensor->getCenterPosition().first); + x_err.push_back(sensor->getCenterPositionError().first); + y.push_back(sensor->getCenterPosition().second); + y_err.push_back(sensor->getCenterPositionError().second); + z.push_back(sensor->getZ()); + z_err.push_back(0.0); +}; + + +void ParticleTrack::fitTrack(TrackFittingMethod method){ + switch(method) { + case LINEFITTGRAPHERRORS: + lastAppliedMethod = LINEFITTGRAPHERRORS; + LineFitTGraphErrors(); + break; + default: + lastAppliedMethod = DEFAULTFITTING; + break; + } +} + +std::pair ParticleTrack::CalculatePositionXY(double z) { + switch(lastAppliedMethod) { + case LINEFITTGRAPHERRORS: + return PositionFromLineFitTGraphErrors(z); + default: + return std::make_pair(0.,0.); + } +} + +//private functions +void ParticleTrack::LineFitTGraphErrors(){ + + if (ROOTpol_x == 0) { + ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + } + if (ROOTpol_y == 0) { + ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + } + + + TGraph* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); + TGraph* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); + + //TODO: Catch exceptions where that does not work + tmp_graph_x->Fit(ROOTpol_x, "Q"); + tmp_graph_y->Fit(ROOTpol_y, "Q"); + +}; + +std::pair ParticleTrack::PositionFromLineFitTGraphErrors(double z) { + //TODO + return std::make_pair(1,2); } + //debug function void SensorHitMap::printHits() { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 2c30a8d..b0f6492 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -12,7 +12,7 @@ 'folder containing raw text input') options.register('outputFolder', - '/tmp/', + '~/outputs/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') @@ -68,7 +68,7 @@ options.output = "test_output.root" -options.maxEvents = 1 +options.maxEvents = -1 options.parseArguments() @@ -121,6 +121,7 @@ process.hgcaltbrechits.gainHigh = cms.string('') process.position_resolution_analyzer.weightingMethod = "squaredWeighting" +process.position_resolution_analyzer.fittingMethod = "lineTGraphErrors" process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) From a9f45847f5dc0f11d7ee89f2798613652790f1bf Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 11:25:18 +0100 Subject: [PATCH 060/297] [position resolution] add cms::Exception if any of the fit fail --- Reco/interface/PositionResolutionHelpers.h | 2 +- Reco/src/PositionResolutionHelpers.cc | 28 +++++++++++----------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index ff4e6de..55edcf3 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -14,7 +14,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" - +#include "FWCore/Utilities/interface/Exception.h" // diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 1ca0639..a790867 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -149,14 +149,19 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ void ParticleTrack::fitTrack(TrackFittingMethod method){ - switch(method) { - case LINEFITTGRAPHERRORS: - lastAppliedMethod = LINEFITTGRAPHERRORS; - LineFitTGraphErrors(); - break; - default: - lastAppliedMethod = DEFAULTFITTING; - break; + try { + switch(method) { + case LINEFITTGRAPHERRORS: + LineFitTGraphErrors(); + break; + default: + lastAppliedMethod = DEFAULTFITTING; + break; + } + lastAppliedMethod = method; + } catch(cms::Exception& iException) { + std::cout<<"Fitting method has failed with error code "<< iException <<". Attempting the default fitting."< ParticleTrack::CalculatePositionXY(double z) { //private functions void ParticleTrack::LineFitTGraphErrors(){ - if (ROOTpol_x == 0) { ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } if (ROOTpol_y == 0) { ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } - - TGraph* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); TGraph* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); - //TODO: Catch exceptions where that does not work tmp_graph_x->Fit(ROOTpol_x, "Q"); tmp_graph_y->Fit(ROOTpol_y, "Q"); - + }; std::pair ParticleTrack::PositionFromLineFitTGraphErrors(double z) { - //TODO return std::make_pair(1,2); } From bf57d2dfe754e8a803d140a1af74be62d16d9693 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 12:05:02 +0100 Subject: [PATCH 061/297] [position resolution] add evaluation functionality --- Reco/interface/PositionResolutionHelpers.h | 6 ++-- Reco/plugins/Position_Resolution_Analyzer.cc | 33 ++++++++++++++++++-- Reco/src/PositionResolutionHelpers.cc | 14 ++++----- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 55edcf3..238d099 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -76,7 +76,7 @@ class ParticleTrack{ ~ParticleTrack(); void addFitPoint(SensorHitMap* sensor); void fitTrack(TrackFittingMethod method); - std::pair CalculatePositionXY(double z); + std::pair calculatePositionXY(double z); private: //general information, the fit points std::vector x; @@ -88,8 +88,8 @@ class ParticleTrack{ TrackFittingMethod lastAppliedMethod; //different fit functions - void LineFitTGraphErrors(); - std::pair PositionFromLineFitTGraphErrors(double z); + void lineFitTGraphErrors(); + std::pair positionFromLineFitTGraphErrors(double z); TF1* ROOTpol_x; TF1* ROOTpol_y; }; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 1a2ab49..301d114 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -54,7 +54,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerfitTrack(fittingMethod); } + + //step 4: calculate the predicted impact point by the fit and compare with the true one + double x_predicted, y_predicted, layerZ, deviation; + for (int i=1; i<=nLayers; i++) { + layerZ = Sensors[i]->getZ(); + x_predicted = Tracks[i]->calculatePositionXY(layerZ).first; + y_predicted = Tracks[i]->calculatePositionXY(layerZ).second; + if (x_predicted==0 && y_predicted==0) { + //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented + failedFitCounter++; + continue; //ignore those cases but count them + } + successfulFitCounter++; + + deviation = pow(x_predicted - Sensors[i]->getCenterPosition().first, 2); + deviation += pow(y_predicted - Sensors[i]->getCenterPosition().second, 2); + deviation = sqrt(deviation); + std::cout<<"Layer "< ParticleTrack::CalculatePositionXY(double z) { +std::pair ParticleTrack::calculatePositionXY(double z) { switch(lastAppliedMethod) { case LINEFITTGRAPHERRORS: - return PositionFromLineFitTGraphErrors(z); + return positionFromLineFitTGraphErrors(z); default: return std::make_pair(0.,0.); } } //private functions -void ParticleTrack::LineFitTGraphErrors(){ +void ParticleTrack::lineFitTGraphErrors(){ if (ROOTpol_x == 0) { ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } if (ROOTpol_y == 0) { ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } - TGraph* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); + TGraph* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros TGraph* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); tmp_graph_x->Fit(ROOTpol_x, "Q"); @@ -190,8 +190,8 @@ void ParticleTrack::LineFitTGraphErrors(){ }; -std::pair ParticleTrack::PositionFromLineFitTGraphErrors(double z) { - return std::make_pair(1,2); +std::pair ParticleTrack::positionFromLineFitTGraphErrors(double z) { + return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); } From 15a99435cefe0314da189ea81d6b2f31d084b479 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 12:50:48 +0100 Subject: [PATCH 062/297] [position resolution] save deviations in TH2D with layers on the x-axis --- Reco/plugins/Position_Resolution_Analyzer.cc | 32 ++++++++++++++++++-- test_cfg_newEB.py | 7 ++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 301d114..f2cf18d 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -29,6 +29,9 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "TH2D.h" +#include "TStyle.h" + /**********/ @@ -50,18 +53,23 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer fs; edm::EDGetToken HGCalTBRecHitCollection_; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; int successfulFitCounter, failedFitCounter; + double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram + + //outputs + std::map >deviations; }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { + gStyle->SetOptStat(); // initialization usesResource("TFileService"); - edm::Service fs; HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); //read the weighting method to obtain the central hit point @@ -83,6 +91,10 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //initiate some counters that are printed at the end successfulFitCounter = failedFitCounter = 0; + //initiate the minimum and maximum values for the deviation + min_deviation = pow(10., 12); + max_deviation = -1.; + }//constructor ends here Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { @@ -94,6 +106,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //opening Rechits edm::Handle Rechits; event.getByToken(HGCalTBRecHitCollection_, Rechits); + //int evId = event.id().event(); //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer std::map Sensors; @@ -145,9 +158,12 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deviation = pow(x_predicted - Sensors[i]->getCenterPosition().first, 2); deviation += pow(y_predicted - Sensors[i]->getCenterPosition().second, 2); deviation = sqrt(deviation); - std::cout<<"Layer "<fs->make("positionDeviations", "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); + deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); + deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); + for(int i=1; i<=nLayers; i++) + for(int j=0; j<(int)deviations[i].size(); j++) + deviationHistogram->Fill(i, deviations[i][j]); + std::cout<<"Done"< Date: Thu, 17 Nov 2016 14:26:22 +0100 Subject: [PATCH 063/297] fixes --- 8layers_cfg2/lanciaAll.sh | 2 +- produceWeights/dataVsmc.C | 39 ++++++++++++++++++++++---- produceWeights/doMIP.C | 3 +- produceWeights/doPlots.C | 39 ++++++++++++++++++++++++-- produceWeights/fitResolution.C | 21 +++++++------- produceWeights/fitResolution_data.C | 5 ++-- produceWeights/simple_Data.C | 43 +++++++++++++++++++++++++++-- test_cfg_newEB.py | 16 +++++++---- 8 files changed, 138 insertions(+), 30 deletions(-) diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh index 08d31ff..bf6d56d 100644 --- a/8layers_cfg2/lanciaAll.sh +++ b/8layers_cfg2/lanciaAll.sh @@ -1,7 +1,7 @@ source lancia100GeV.sh source lancia200GeV.sh source lancia20GeV.sh -spurce lancia250GeV.sh +source lancia250GeV.sh source lancia32GeV.sh source lancia70GeV.sh diff --git a/produceWeights/dataVsmc.C b/produceWeights/dataVsmc.C index 150b1e3..fc1b4a4 100644 --- a/produceWeights/dataVsmc.C +++ b/produceWeights/dataVsmc.C @@ -27,7 +27,7 @@ void dataVsmc(){ int nLayers = 8; int config = 2; - int iColors[5] = {kRed, kBlue, kGreen+2, kRed, kBlue}; + int iColors[7] = {kRed, kBlue, kGreen+2, kRed, kBlue, kRed, kBlue}; // int energyP[3] = {20, 70, 100, 200, 250}; TFile* inF[4]; @@ -37,23 +37,27 @@ void dataVsmc(){ inF[3] = TFile::Open("DATA_resolution_layers8_config2.root"); - TGraphErrors* tgCfg1[5]; - TGraphErrors* tgCfg2[5]; + TGraphErrors* tgCfg1[7]; + TGraphErrors* tgCfg2[7]; tgCfg1[0] = (TGraphErrors*)inF[0]->Get("resolution_GeV"); tgCfg1[1] = (TGraphErrors*)inF[2]->Get("resolution_GeV"); tgCfg1[2] = (TGraphErrors*)inF[2]->Get("resolution_Mip"); tgCfg1[3] = (TGraphErrors*)inF[0]->Get("linerity_GeV"); tgCfg1[4] = (TGraphErrors*)inF[2]->Get("linearity_GeV"); + tgCfg1[5] = (TGraphErrors*)inF[0]->Get("mean_GeV"); + tgCfg1[6] = (TGraphErrors*)inF[2]->Get("mean_GeV"); tgCfg2[0] = (TGraphErrors*)inF[1]->Get("resolution_GeV"); tgCfg2[1] = (TGraphErrors*)inF[3]->Get("resolution_GeV"); tgCfg2[2] = (TGraphErrors*)inF[3]->Get("resolution_Mip"); tgCfg2[3] = (TGraphErrors*)inF[1]->Get("linerity_GeV"); tgCfg2[4] = (TGraphErrors*)inF[3]->Get("linearity_GeV"); + tgCfg2[5] = (TGraphErrors*)inF[1]->Get("mean_GeV"); + tgCfg2[6] = (TGraphErrors*)inF[3]->Get("mean_GeV"); - for(int iT=0; iT<5; ++iT){ + for(int iT=0; iT<7; ++iT){ tgCfg1[iT]->SetMarkerStyle(20); tgCfg2[iT]->SetMarkerStyle(20); @@ -63,7 +67,7 @@ void dataVsmc(){ std::cout << " ci sono " << std::endl; - TLegend *legTGM = new TLegend(0.45,0.65,0.65,0.85,NULL,"brNDC"); + TLegend *legTGM = new TLegend(0.45,0.35,0.65,0.55,NULL,"brNDC"); legTGM->SetTextFont(42); legTGM->SetFillColor(kWhite); legTGM->SetLineColor(kWhite); @@ -73,7 +77,7 @@ void dataVsmc(){ legTGM->AddEntry(tgCfg1[1], "data GeV", "pl"); // legTGM->AddEntry(tgCfg1[2], "data Mip", "l"); - TLegend *legTGM2 = new TLegend(0.45,0.65,0.65,0.85,NULL,"brNDC"); + TLegend *legTGM2 = new TLegend(0.45,0.35,0.65,0.55,NULL,"brNDC"); legTGM2->SetTextFont(42); legTGM2->SetFillColor(kWhite); legTGM2->SetLineColor(kWhite); @@ -126,6 +130,29 @@ void dataVsmc(){ legTGM2->Draw("same"); chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.png", "png"); chER2->Print("dataVsMC/SimGeV_DataGeV_layers8_config2.root", "root"); + + ////////// + TCanvas* chEM = new TCanvas(); + chEM->cd(); + tgCfg1[5]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg1[5]->GetYaxis()->SetTitle("<#SigmaE> / beam energy"); + tgCfg1[5]->GetYaxis()->SetRangeUser(0., 1.2); + tgCfg1[5]->Draw("ap"); + tgCfg1[6]->Draw("p, same"); + legTGM->Draw("same"); + chEM->Print("dataVsMC/scale_SimGeV_DataGeV_layers8_config1.png", "png"); + chEM->Print("dataVsMC/scale_SimGeV_DataGeV_layers8_config1.root", "root"); + // + TCanvas* chEM2 = new TCanvas(); + chEM2->cd(); + tgCfg2[5]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfg2[5]->GetYaxis()->SetTitle("<#SigmaE> beam energy"); + tgCfg2[5]->GetYaxis()->SetRangeUser(0., 1.2); + tgCfg2[5]->Draw("ap"); + tgCfg2[6]->Draw("p, same"); + legTGM2->Draw("same"); + chEM2->Print("dataVsMC/scale_SimGeV_DataGeV_layers8_config2.png", "png"); + chEM2->Print("dataVsMC/scale_SimGeV_DataGeV_layers8_config2.root", "root"); std::cout << " >>> plot linearity " << std::endl; //////// diff --git a/produceWeights/doMIP.C b/produceWeights/doMIP.C index 97d085e..a7db320 100644 --- a/produceWeights/doMIP.C +++ b/produceWeights/doMIP.C @@ -93,7 +93,8 @@ void doMIP(int nLayer, int config, int energyEle=0){ else if(nLayer == 28 && config == 1){ for(int iFo=0; iFo<2; ++iFo){ for(int iF=0; iF<1000; ++iF){ - t->Add(Form("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Muon500MeV/161101_141550/000%d/TBGenSim_%d.root", iFo, iF)); + // t->Add(Form("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Muon500MeV/161101_141550/000%d/TBGenSim_%d.root", iFo, iF)); +t->Add(Form("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28moduleIv3_PhysicsLst_QGSP_FTFP_BERT/mc/CRAB_PrivateMC/crab_Muon500MeV/161101_141550/000%d/TBGenSim_%d.root", iFo, iF)); } } } diff --git a/produceWeights/doPlots.C b/produceWeights/doPlots.C index 5e4cd42..6610f83 100644 --- a/produceWeights/doPlots.C +++ b/produceWeights/doPlots.C @@ -15,6 +15,7 @@ #include #include "TROOT.h" #include "TSystem.h" +#include "../MCanalysis/HGCalTBPlots.C" #include "/afs/cern.ch/work/a/amartell/ES_P5/CMSSW_7_4_6_patch6/src/MyAnalyzer/ESAnalyzer/macroAnalysis/langausfit.h" @@ -65,7 +66,8 @@ void doPlots(int nLayer, int energyEle, int config){ float weights2GeV = 1.e-03; float weights2MIP = 1.; // weights with MIP from PDG - float MIP2GeV_sim = EtoMip * 63.28e-06 / 55.16e-06; // recalibrate to mean 500MeV muon response + // float MIP2GeV_sim = EtoMip * 63.28e-06 / 55.16e-06; // recalibrate to mean 500MeV muon response + float MIP2GeV_sim = EtoMip * 51.91e-06 / 55.16e-06; // recalibrate to mean 500MeV muon response float G4Escale = 1.; // 0.83; // >>> fix scale in data mc for Si @@ -139,10 +141,15 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu double xBeam, yBeam; std::vector* simHitLayEn2E = 0; + std::vector* simHitCellEnE = 0; + std::vector* simHitCellIdE = 0; t->SetBranchAddress("simHitLayEn2E", &simHitLayEn2E); + t->SetBranchAddress("simHitCellEnE", &simHitCellEnE); + t->SetBranchAddress("simHitCellIdE", &simHitCellIdE); t->SetBranchAddress("xBeam", &xBeam); t->SetBranchAddress("yBeam", &yBeam); + HexTopology ht1 = false; //looping over entries for(int iE=0; iEAdd(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu // std::cout << " simHitLayEn2E->size() = " << simHitLayEn2E->size() << std::endl; if(abs(xBeam) >= 2 || abs(yBeam) >= 2) continue; float totEnergy = 0.; - for(int iS=0; iSsize(); ++iS){ - enLayer[iS]->Fill(simHitLayEn2E->at(iS)); + /* + for(int iS=0; iSsize(); ++iS){ + enLayer[iS]->Fill(simHitLayEn2E->at(iS)); // std::cout << " E = " simHitLayEn2E->at(iS) << << std::endl; float localE = simHitLayEn2E->at(iS) / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); @@ -163,6 +171,31 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu } recoEnergy->Fill(totEnergy); recoEnergyRel->Fill(totEnergy/(1.*energyEle)); + */ + + //////// check single cells + std::vector CellId; + std::vector CellE; + for(int ii=0; iisize(); ++ii){ + CellId.push_back(simHitCellIdE->at(ii)); + CellE.push_back(simHitCellEnE->at(ii)); + } + + for(int iS=0; iSsize(); ++iS){ + unsigned int locMaxId = ht1.localMax( (CellId), (CellE), iS+1); + double clusterE19 = ht1.cluster((CellId), (CellE), locMaxId, 2, MIP2GeV_sim, 2); + //double allcell_nomip = ht1.cluster( (CellId), (CellE), locMaxId, 7, EperMIP, 0); + float localE = clusterE19 / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); + //double allcell = ht1.cluster( (CellId), (CellE), locMaxId, 7, MIP2GeV_sim, 2); + //float localE = allcell / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); + + enLayerCorr[iS]->Fill(localE); + //enLayerMip[iS]->Fill(allcell / G4Escale * 1./MIP2GeV_sim); + enLayerMip[iS]->Fill(clusterE19 / G4Escale * 1./MIP2GeV_sim); + totEnergy += localE; + } + recoEnergy->Fill(totEnergy); + recoEnergyRel->Fill(totEnergy/(1.*energyEle)); } diff --git a/produceWeights/fitResolution.C b/produceWeights/fitResolution.C index 6ed6f51..3b72de4 100644 --- a/produceWeights/fitResolution.C +++ b/produceWeights/fitResolution.C @@ -31,21 +31,21 @@ void fitResolution(){ int config = 1; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - */ + */ - /* int nLayers = 8; int config = 1; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - */ - + + + /* int nLayers = 8; int config = 2; int iColors[5] = {kRed, kCyan, kBlue, kGreen+2, kYellow-1}; int energyP[5] = {20, 70, 100, 200, 250}; - + */ TGraphErrors* tg[5]; TGraphErrors* tgL[5]; @@ -263,7 +263,7 @@ void fitResolution(){ tgL[0]->GetYaxis()->SetTitle("#Sigma E_{i} (GeV)"); tgL[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); tgL[0]->GetXaxis()->SetRangeUser(0, 300.); - if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tg[0]->GetYaxis()->SetRangeUser(0., 1.2); tgL[0]->Draw("ap"); if(nLayers != 28){ tgLi->Print(Form((folder+"/energy_LinearityVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); @@ -282,7 +282,7 @@ void fitResolution(){ tg[0]->GetXaxis()->SetTitle("E_{beam} (GeV)"); tg[0]->GetXaxis()->SetRangeUser(0, 300.); tg[0]->GetYaxis()->SetRangeUser(0., 1.01); - if(nLayers == 8) tg[0]->GetYaxis()->SetRangeUser(0., 1.01); + tg[0]->GetYaxis()->SetRangeUser(0., 1.2); tg[0]->Draw("ap"); if(nLayers != 28){ tgM->Print(Form((folder+"/energy_MeanVsEnergy_layers%d_config%d.png").c_str(), nLayers, config), "png"); @@ -312,6 +312,7 @@ void fitResolution(){ TFile outSim(Form("SIM_resolution_layers%d_config%d.root", nLayers, config), "recreate"); outSim.cd(); tgS[0]->Write("resolution_GeV"); + tg[0]->Write("mean_GeV"); tgL[0]->Write("linerity_GeV"); outSim.Close(); @@ -322,11 +323,11 @@ void fitResolution(){ TF1* fitReso; //fit 3par all - // int type = 1; + //int type = 1; //fit 3par tail - // int type = 2; + int type = 2; //fit 2par all - int type = 3; + //int type = 3; if(type == 1){ fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 10., 300.); fitReso->SetParName(0, "S"); diff --git a/produceWeights/fitResolution_data.C b/produceWeights/fitResolution_data.C index 49deb24..b2f71d7 100644 --- a/produceWeights/fitResolution_data.C +++ b/produceWeights/fitResolution_data.C @@ -41,7 +41,7 @@ void fitResolution_data(){ int energyP[6] = {20, 32, 70, 100, 200, 250}; - /* + /* int nLayers = 8; int config = 2; int iColors[6] = {kRed, kViolet, kCyan, kBlue, kGreen+2, kYellow-1}; //, kBlack}; @@ -295,6 +295,7 @@ void fitResolution_data(){ TFile outData(Form("DATA_resolution_layers%d_config%d.root", nLayers, config), "recreate"); outData.cd(); + tg[0]->Write("mean_GeV"); tgL[0]->Write("linearity_GeV"); tgS[0]->Write("resolution_GeV"); tgR[0]->Write("resolution_Mip"); @@ -312,7 +313,7 @@ void fitResolution_data(){ // int type = 1; //fit 3par tail - // int type = 2; + //int type = 2; //fit 2par all int type = 3; diff --git a/produceWeights/simple_Data.C b/produceWeights/simple_Data.C index a4b032d..f3aac39 100644 --- a/produceWeights/simple_Data.C +++ b/produceWeights/simple_Data.C @@ -52,10 +52,22 @@ void simple_Data(int nLayer, int energyEle, int config = 1) { TFile* inF; if(nLayer == 28) inF = TFile::Open(Form("energyLayer_ROOT/outF_28layers_Ele%d.root", energyEle)); - else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_Mean/%dGeV.root", energyEle)); - else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_Mean/%dGeV.root", energyEle)); + // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_Mean/%dGeV.root", energyEle)); + // else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_Mean/%dGeV.root", energyEle)); // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_MPV/%dGeV.root", energyEle)); // else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_MPV/%dGeV.root", energyEle)); + //bert + // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_MPV_BERT/%dGeV.root", energyEle)); + //else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_MPV_BERT/%dGeV.root", energyEle)); + //+/- 2cm cut + // else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_MPV_pm2cm/%dGeV.root", energyEle)); + //else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_MPV_pm2cm/%dGeV.root", energyEle)); + else if(config == 1) inF = TFile::Open(Form("~/public/perShilpi/cfg1_data_MPV_logPos/%dGeV.root", energyEle)); + else if(config == 2) inF = TFile::Open(Form("~/public/perShilpi/cfg2_data_MPV_logPos/%dGeV.root", energyEle)); + + + TH1F* h_X_L1; + TH1F* h_Y_L1; TH1F* enLayer[28]; TH1F* enLayer_AbsW_Mip[28]; @@ -71,6 +83,11 @@ void simple_Data(int nLayer, int energyEle, int config = 1) { for(int i=0; i<28; ++i){ if(nLayer != 28 && i >= 8) continue; + if(i == 0){ + h_X_L1 = (TH1F*)inF->Get("LayerSumAnalyzer/X_L1"); + h_Y_L1 = (TH1F*)inF->Get("LayerSumAnalyzer/Y_L1"); + } + enLayer[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d", i+1)); enLayer_AbsW_Mip[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_Mip", i+1)); enLayer_AbsW_GeV[i] = (TH1F*)inF->Get(Form("LayerSumAnalyzer/h_eAll_L%d_AbsW_GeV", i+1)); @@ -271,6 +288,28 @@ void simple_Data(int nLayer, int energyEle, int config = 1) { // TGraph* Sigma_vsE = new TGraph(); + h_X_L1->Rebin(4); + h_Y_L1->Rebin(4); + + TF1* fitF = new TF1("fitF", "gaus", -6, 6); + h_X_L1->Fit("fitF"); + + TCanvas* cX = new TCanvas(); + cX->cd(); + h_X_L1->GetXaxis()->SetTitle("X"); + h_X_L1->Draw(); + fitF->Draw("same"); + cX->Print(Form("position/h_X_L1_Ele%d_cfg%d.png", energyEle, config), "png"); + + h_Y_L1->Fit("fitF"); + TCanvas* cY = new TCanvas(); + cY->cd(); + h_Y_L1->GetXaxis()->SetTitle("Y"); + h_Y_L1->Draw(); + fitF->Draw("same"); + cY->Print(Form("position/h_Y_L1_Ele%d_cfg%d.png", energyEle, config), "png"); + + TFile* outF; if(nLayer == 28) outF = new TFile(Form("showers_ROOT_data/analyzed_28layers_Ele%d.root", energyEle), "recreate"); diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 79b3bd0..f4c2880 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -71,7 +71,6 @@ -options.output = "test_output.root" options.maxEvents = -1 options.parseArguments() @@ -130,9 +129,12 @@ process.dumpDigi = cms.EDAnalyzer("HGCalDigiDump") -process.output = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string(options.output) - ) +if (options.chainSequence == 7): + options.output = "%s/RECO_type%s_run%06d.root"%(options.outputFolder,options.runType,options.runNumber) + process.output = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string(options.output) + ) + # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): @@ -183,5 +185,9 @@ process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 6): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) +elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits) + -process.end = cms.EndPath(process.output) +if (options.chainSequence == 7): + process.end = cms.EndPath(process.output) From 869cb200b62a77424639a7da235cea32bef855b6 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 15:27:15 +0100 Subject: [PATCH 064/297] [position resolution] plot TGraph2D for each event with true and predicted points --- Reco/plugins/Position_Resolution_Analyzer.cc | 51 +++++++++++++++++--- Reco/python/position_resolution_cfi.py | 1 + test_cfg_newEB.py | 7 +-- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index f2cf18d..603f0b9 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -29,8 +29,10 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "TH2D.h" #include "TStyle.h" +#include "TFile.h" +#include "TH2D.h" +#include "TGraph2D.h" @@ -58,10 +60,12 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer >deviations; }; @@ -88,6 +92,9 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS else fittingMethod = DEFAULTFITTING; + //making 2DGraphs per event? + make2DGraphs = iConfig.getParameter("make2DGraphs"); + //initiate some counters that are printed at the end successfulFitCounter = failedFitCounter = 0; @@ -106,7 +113,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //opening Rechits edm::Handle Rechits; event.getByToken(HGCalTBRecHitCollection_, Rechits); - //int evId = event.id().event(); + int evId = event.id().event(); //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer std::map Sensors; @@ -142,8 +149,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->fitTrack(fittingMethod); } - //step 4: calculate the predicted impact point by the fit and compare with the true one - double x_predicted, y_predicted, layerZ, deviation; + std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_v; + double x_predicted, y_predicted, x_true, y_true, layerZ, deviation; + for (int i=1; i<=nLayers; i++) { layerZ = Sensors[i]->getZ(); x_predicted = Tracks[i]->calculatePositionXY(layerZ).first; @@ -155,16 +163,45 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } successfulFitCounter++; - deviation = pow(x_predicted - Sensors[i]->getCenterPosition().first, 2); - deviation += pow(y_predicted - Sensors[i]->getCenterPosition().second, 2); + x_true = Sensors[i]->getCenterPosition().first; + y_true = Sensors[i]->getCenterPosition().second; + + deviation = pow(x_predicted - x_true, 2); + deviation += pow(y_predicted - y_true, 2); deviation = sqrt(deviation); deviations[i].push_back(deviation); //update the deviations on the fly min_deviation = min_deviation > deviation ? deviation: min_deviation; max_deviation = max_deviation < deviation ? deviation: max_deviation; + + //store for the two 2D graphs that are written per event + x_predicted_v.push_back(x_predicted); + y_predicted_v.push_back(y_predicted); + x_true_v.push_back(x_true); + y_true_v.push_back(y_true); + layerZ_v.push_back(layerZ); } + if (make2DGraphs) { + TGraph2D* graph2D_predicted = fs->make(Form("predicted_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); + graph2D_predicted->SetTitle(Form("predicted_points_event_%s", std::to_string(evId).c_str())); + graph2D_predicted->SetMarkerStyle(21); + graph2D_predicted->SetMarkerColor(1); + graph2D_predicted->GetXaxis()->SetTitle("x [cm]"); + graph2D_predicted->GetYaxis()->SetTitle("y [cm]"); + graph2D_predicted->GetZaxis()->SetTitle("z [cm]"); + + TGraph2D* graph2D_true = fs->make(Form("true_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); + graph2D_true->SetTitle(Form("true_points_event_%s", std::to_string(evId).c_str())); + graph2D_true->SetMarkerStyle(31); + graph2D_true->SetMarkerColor(2); + graph2D_true->GetXaxis()->SetTitle("x [cm]"); + graph2D_true->GetYaxis()->SetTitle("y [cm]"); + graph2D_true->GetZaxis()->SetTitle("z [cm]"); + } + + }// analyze ends here void Position_Resolution_Analyzer::beginJob() { diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 53d713c..534eba3 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -3,6 +3,7 @@ position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), + make2DGraphs = cms.bool(False), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )#, #digiCollection = cms.InputTag('hgcaltbdigis'), #pedestalLow = cms.string('CondObjects/data/Ped_LowGain_L8.txt'), diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index b989648..160cc78 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -68,7 +68,7 @@ options.output = "test_output.root" -options.maxEvents = 500 +options.maxEvents = 1 options.parseArguments() @@ -120,8 +120,9 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') -process.position_resolution_analyzer.weightingMethod = "squaredWeighting" -process.position_resolution_analyzer.fittingMethod = "lineTGraphErrors" +process.position_resolution_analyzer.weightingMethod = cms.string("squaredWeighting") +process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") +process.position_resolution_analyzer.make2DGraphs = True #only for debugging process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) From 0c42db6a1c7707937dd584018620987cb58c7b9a Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 15:37:11 +0100 Subject: [PATCH 065/297] [position resolution] fix indexing of layer positioning --- Reco/plugins/Position_Resolution_Analyzer.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 603f0b9..31b1d01 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -38,7 +38,10 @@ /**********/ //all of this should go into a config file -double Layer_Z_Positions[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; + +double Layer_Z_Positions[17] = {0.0, 1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +//by this convention the first entry is not considered as the layers numbering starts at 1 + int nLayers = 8; int SensorSize = 128; /**********/ From 5ac70da605a18bc2df282746a1491b9aea5ebccf Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 15:59:23 +0100 Subject: [PATCH 066/297] [position resolution] remove style functions of TGraph2Ds in the code --- Reco/plugins/Position_Resolution_Analyzer.cc | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 31b1d01..d6bc6cd 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -187,21 +187,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } if (make2DGraphs) { - TGraph2D* graph2D_predicted = fs->make(Form("predicted_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); - graph2D_predicted->SetTitle(Form("predicted_points_event_%s", std::to_string(evId).c_str())); - graph2D_predicted->SetMarkerStyle(21); - graph2D_predicted->SetMarkerColor(1); - graph2D_predicted->GetXaxis()->SetTitle("x [cm]"); - graph2D_predicted->GetYaxis()->SetTitle("y [cm]"); - graph2D_predicted->GetZaxis()->SetTitle("z [cm]"); - - TGraph2D* graph2D_true = fs->make(Form("true_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); - graph2D_true->SetTitle(Form("true_points_event_%s", std::to_string(evId).c_str())); - graph2D_true->SetMarkerStyle(31); - graph2D_true->SetMarkerColor(2); - graph2D_true->GetXaxis()->SetTitle("x [cm]"); - graph2D_true->GetYaxis()->SetTitle("y [cm]"); - graph2D_true->GetZaxis()->SetTitle("z [cm]"); + fs->make(Form("predicted_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); + fs->make(Form("true_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); } @@ -213,7 +200,7 @@ void Position_Resolution_Analyzer::beginJob() { void Position_Resolution_Analyzer::endJob() { std::cout<<"*************************************************"< Date: Thu, 17 Nov 2016 16:13:36 +0100 Subject: [PATCH 067/297] 150GeV --- 8layers_cfg1/lancia150GeV.sh | 20 ++++++++++++++++++++ 8layers_cfg2/lancia150GeV.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 8layers_cfg1/lancia150GeV.sh create mode 100644 8layers_cfg2/lancia150GeV.sh diff --git a/8layers_cfg1/lancia150GeV.sh b/8layers_cfg1/lancia150GeV.sh new file mode 100644 index 0000000..fb21665 --- /dev/null +++ b/8layers_cfg1/lancia150GeV.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=843 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=844 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=845 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=846 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=847 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=848 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=849 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=850 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=851 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=852 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=853 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=854 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=855 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=856 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=857 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=858 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=859 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=860 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=861 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=862 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia150GeV.sh b/8layers_cfg2/lancia150GeV.sh new file mode 100644 index 0000000..0a4c75c --- /dev/null +++ b/8layers_cfg2/lancia150GeV.sh @@ -0,0 +1,26 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1122 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1123 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1124 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1125 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1126 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1127 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1128 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1129 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1130 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1131 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1132 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1133 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1134 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1137 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1138 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1141 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1142 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1143 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1144 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1145 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1146 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1147 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1148 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1149 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1150 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1151 configuration=2 runType=HGCRun \ No newline at end of file From df6df333aea87c28ff5c19fd1ebb68f67444037a Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 17 Nov 2016 17:54:10 +0100 Subject: [PATCH 068/297] [file reader] allow for filename string vectors as input, handled in HGCalTBTextSource --- RawToDigi/plugins/HGCalTBTextSource.cc | 21 +++++++++++++++------ RawToDigi/plugins/HGCalTBTextSource.h | 4 ++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index bd5b395..336ab92 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -14,11 +14,14 @@ T 0x0072D911 0xBEC20B15 T 0x0072D93F 0xBED19F54 T 0x0072D96E 0xBED19F56 T 0x0072 */ bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) -{ - +{ if (!(fileNames().size())) return false; // need a file... - if (m_file == 0) { - std::string name = fileNames()[0].c_str(); /// \todo FIX in order to take several files + if (newFileIndex==(int)fileNames().size()) return false; //do not overshoot in the file name array + + //magic must come here! + if (currentFileIndex != newFileIndex) { + currentFileIndex = newFileIndex; + std::string name = fileNames()[currentFileIndex].c_str(); /// \todo FIX in order to take several files if (name.find("file:") == 0) name = name.substr(5); m_file = fopen(name.c_str(), "r"); if (m_file == 0) { @@ -26,10 +29,16 @@ bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& t } m_event = 0; } - if (feof(m_file)) return false; + if (feof(m_file)) { + newFileIndex++; + return setRunAndEventInfo(id, time, evType); + } // read the header while(readHeader() == false) { - if (feof(m_file)) return false; + if (feof(m_file)) { + newFileIndex++; + return setRunAndEventInfo(id, time, evType); + } // have to skip the data lines and return false readLines(); } diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index afc8fda..303cf06 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -21,6 +21,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles public: explicit HGCalTBTextSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : edm::ProducerSourceFromFiles(pset, desc, true), + currentFileIndex(-1), + newFileIndex(0), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) { @@ -38,6 +40,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: + int currentFileIndex; //index of the current file + int newFileIndex; bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); bool readHeader(void); From 6c6412e200e7fe68faec8c90390ce727624e7f7c Mon Sep 17 00:00:00 2001 From: Arnaud Steen Date: Fri, 18 Nov 2016 14:13:52 +0100 Subject: [PATCH 069/297] 1st commit in arnaudWorking with HGCalTBClusterProducer; an example of using the produced clusters is shown in Reco/plugins/EventDisplay.cc --- DataFormats/interface/HGCalTBCluster.h | 40 +++ .../interface/HGCalTBClusterCollection.h | 18 ++ DataFormats/src/HGCalTBCluster.cc | 41 +++ DataFormats/src/classes.h | 7 +- DataFormats/src/classes_def.xml | 4 + Geometry/interface/HGCalTBTopology.h | 4 + Geometry/src/HGCalTBTopology.cc | 50 ++++ Reco/plugins/EventDisplay.cc | 249 ++++++++++++++++++ Reco/plugins/HGCalTBClusterProducer.cc | 207 +++++++++++++++ Reco/plugins/HGCalTBClusterProducer.h | 49 ++++ Reco/python/hgcaltbclusterproducer_cfi.py | 10 + Reco/python/hgcaltbrechitplotter_cfi.py | 9 + StandardSequences/python/LocalReco_cff.py | 2 + test_cfg_newEB.py | 6 + 14 files changed, 695 insertions(+), 1 deletion(-) create mode 100644 DataFormats/interface/HGCalTBCluster.h create mode 100644 DataFormats/interface/HGCalTBClusterCollection.h create mode 100644 DataFormats/src/HGCalTBCluster.cc create mode 100644 Reco/plugins/EventDisplay.cc create mode 100644 Reco/plugins/HGCalTBClusterProducer.cc create mode 100644 Reco/plugins/HGCalTBClusterProducer.h create mode 100644 Reco/python/hgcaltbclusterproducer_cfi.py diff --git a/DataFormats/interface/HGCalTBCluster.h b/DataFormats/interface/HGCalTBCluster.h new file mode 100644 index 0000000..6b75a52 --- /dev/null +++ b/DataFormats/interface/HGCalTBCluster.h @@ -0,0 +1,40 @@ +#ifndef DATAFORMATS_HGCALTBCLUSTER_H +#define DATAFORMATS_HGCALTBCLUSTER_H 1 + +#include "DataFormats/CaloRecHit/interface/CaloCluster.h" + +/** \class HGCalTBCluster + * + * \author Arnaud Steen + * 2D hgcal cluster class + */ + +namespace reco{ + + class HGCalTBCluster : public reco::CaloCluster + { + public: + HGCalTBCluster(); + HGCalTBCluster(int layer, float energy, float energyLow, float energyHigh ); + + int layer() const { return _layer; } + float energyLow() const { return _energyLow; } + float energyHigh() const { return _energyHigh; } + float recHitEnergyHigh( int i) const{ return hitsAndFractions_.at(i).second*_energyHigh; } + float recHitEnergyLow( int i) const{ return hitsAndFractions_.at(i).second*_energyLow; } + + void setLayer(int val){ _layer=val; } + void setEnergyLow(float val){ _energyLow=val; } + void setEnergyHigh(float val){ _energyHigh=val; } + + + protected : + int _layer; + float _energyLow; + float _energyHigh; + }; + + std::ostream& operator<<(std::ostream& s, const HGCalTBCluster& cluster); +} + +#endif diff --git a/DataFormats/interface/HGCalTBClusterCollection.h b/DataFormats/interface/HGCalTBClusterCollection.h new file mode 100644 index 0000000..c747a72 --- /dev/null +++ b/DataFormats/interface/HGCalTBClusterCollection.h @@ -0,0 +1,18 @@ +#ifndef DATAFORMATS_HGCCLUSTER_HGCCLUSTERCOLLECTION_H +#define DATAFORMATS_HGCCLUSTER_HGCCLUSTERCOLLECTION_H + +#include "DataFormats/Common/interface/EDCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBCluster.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +// ~ copy paste from "HGCal/DataFormats/interface/HGCalTBRecHitCollection.h" + +namespace reco +{ + typedef edm::EDCollection HGCalTBClusterCollection; + typedef edm::Ref HGCalTBClusterRef; + typedef edm::RefVector HGCalTBClusterRefs; + typedef edm::RefProd HGCalTBClustersRef; +} +#endif diff --git a/DataFormats/src/HGCalTBCluster.cc b/DataFormats/src/HGCalTBCluster.cc new file mode 100644 index 0000000..58c3f46 --- /dev/null +++ b/DataFormats/src/HGCalTBCluster.cc @@ -0,0 +1,41 @@ +#include "HGCal/DataFormats/interface/HGCalTBCluster.h" +//#include "DataFormats/Math/interface/Point3D.h" +#include +namespace reco +{ + + HGCalTBCluster::HGCalTBCluster() : reco::CaloCluster() + { + + } + + HGCalTBCluster::HGCalTBCluster(int layer, float energy, float energyLow, float energyHigh) : + reco::CaloCluster(), + _layer(layer), + _energyLow(energyLow), + _energyHigh(energyHigh) + { + this->setEnergy(energy); + } + + std::ostream& operator<<(std::ostream& out, const HGCalTBCluster& cluster) + { + + if(!out) return out; + + out<<"CaloCluster , algoID="< _HGCTBRHitVect; // edm::SortedCollection _theHGCTBRsc; // edm::Wrapper< HGCalTBRecHitCollection > _HGCTBeeRHitProd; - + + reco::HGCalTBCluster _aCluster; + std::vector _HGCTBClusterVect; + SKIROC2DigiCollection _SR2DC; edm::Wrapper _theSR2DC; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index ec40d90..0510867 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -16,4 +16,8 @@ + + + + diff --git a/Geometry/interface/HGCalTBTopology.h b/Geometry/interface/HGCalTBTopology.h index d085f40..dbcfcf5 100644 --- a/Geometry/interface/HGCalTBTopology.h +++ b/Geometry/interface/HGCalTBTopology.h @@ -1,6 +1,8 @@ #ifndef HGCAL_GEOMETRY_HGCALTBTOPOLOGY_H #define HGCAL_GEOMETRY_HGCALTBTOPOLOGY_H 1 +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "set" /** \class HGCalTBTopology * * Reference: https://indico.cern.ch/event/456955/ @@ -15,6 +17,8 @@ class HGCalTBTopology // valid sensorSizes are 128 and 256 bool iu_iv_valid(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorSize) const; double Cell_Area(int cell_type) const;//returns area in cm*cm + std::set getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, bool reverseLayer=false) const; + int getCellType( int u, int v, int sensorSize, bool reverseLayer=false) const; }; #endif diff --git a/Geometry/src/HGCalTBTopology.cc b/Geometry/src/HGCalTBTopology.cc index 300a2d7..8415b3b 100644 --- a/Geometry/src/HGCalTBTopology.cc +++ b/Geometry/src/HGCalTBTopology.cc @@ -2,6 +2,7 @@ #include "HGCal/Geometry/interface/HGCalTBCellParameters.h" #include "math.h" #include +#include #define PI 3.14159265 bool HGCalTBTopology::iu_iv_valid(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorSize) const @@ -45,3 +46,52 @@ double HGCalTBTopology::Cell_Area(int cell_type) const else return -1.; //signifies an invalid cell type } +int HGCalTBTopology::getCellType( int iu, int iv, int sensorSize, bool reversedLayer ) const +{ + int aiu=abs(iu); + int aiv=abs(iv); + int asum=abs(iu+iv); + if( sensorSize==128 ){ + if( ((iu==2 && iv == -4) || (iu==-1 && iv == 2)) && reversedLayer==false ) + return 4;//calib pad + else if( ((iu==-2 && iv == 4) || (iu==1 && iv == -2)) && reversedLayer==true) + return 4;//calib pad + + else if( (aiu+aiv>=6) && (aiu==1||aiu>=5) && (aiv==1||aiv>=5) && (asum==1||asum>=5) ) + return 2;//half hex + else if( (iu==-3&&iv==-4) || (iu==-7&&iv==4) || (iu==4&&iv==3) || (iu==7&&iv==-3) || + (iu==-4&&iv==-3) || (iu==-7&&iv==3) || (iu==3&&iv==4) || (iu==7&&iv==-4) ) //no hit should be found in these anyway + return 3;//mouse bite + else if( (iu==2&&iv==-6) || (iu==-4&&iv==7) || (iu==-3&&iv==7) || (iu==4&&iv==-6) || + (iu==3&&iv==-7) || (iu==-4&&iv==6) || (iu==-2&&iv==6) || (iu==4&&iv==-7) ) //no hit should be found in these anyway + return 5; //merged cell + else return 0; + } + else return -1; +} + +std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, bool reversedLayer) const +{ + int layer=detid.layer(); + std::set detids; + for(int u=-maxDistance; u<=maxDistance; u++){ + for(int v=-maxDistance; v<=maxDistance; v++){ + if( (u==0 && v==0) || abs(u+v)>maxDistance ) continue; + int iU=detid.sensorIU(); + int iV=detid.sensorIV(); + int iu=detid.iu()+u; + int iv=detid.iv()+v; + bool validCoord = iu_iv_valid( layer, iU, iV, iu, iv, sensorSize); + if( !validCoord ) continue; + int cellType=getCellType( iu, iv, sensorSize, reversedLayer); + HGCalTBDetId did( layer, iU, iV, iu, iv, cellType); + detids.insert(did); + if( cellType==4 ){// 4 is outer calib pad; need also to include inner calib pad + cellType=1; + HGCalTBDetId didbis( layer, iU, iV, iu, iv, cellType); + detids.insert(didbis); + } + } + } + return detids; +} diff --git a/Reco/plugins/EventDisplay.cc b/Reco/plugins/EventDisplay.cc new file mode 100644 index 0000000..2a3cecd --- /dev/null +++ b/Reco/plugins/EventDisplay.cc @@ -0,0 +1,249 @@ +#include +#include +#include +#include +#include +#include "TH2Poly.h" +#include "TProfile.h" +#include "TH1F.h" +#include "TH2F.h" +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "DataFormats/Math/interface/Error.h" +#include "DataFormats/Math/interface/Vector3D.h" +#include "DataFormats/Math/interface/Point3D.h" + +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" + +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" + +#define MAXVERTICES 6 +static const double delta = 0.00001;//Add/subtract delta = 0.00001 to x,y of a cell centre so the TH2Poly::Fill doesnt have a problem at the edges where the centre of a half-hex cell passes through the sennsor boundary line. + +using namespace std; + +class EventDisplay : public edm::one::EDAnalyzer +{ + +public: + explicit EventDisplay(const edm::ParameterSet&); + ~EventDisplay(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + void InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV); + + // ----------member data --------------------------- + // edm::EDGetToken HGCalTBRecHitCollection_; + edm::EDGetToken HGCalTBClusterCollection_; + edm::EDGetToken HGCalTBClusterCollection7_; + edm::EDGetToken HGCalTBClusterCollection19_; + std::string mapfile_ = "HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"; + struct { + HGCalElectronicsMap emap_; + } essource_; + int nlayers; + int sensorsize; + int _evtID; + HGCalTBTopology IsCellValid; + HGCalTBCellVertices TheCell; + std::vector> CellXY; + std::pair CellCentreXY; + edm::Service fs; +}; + +EventDisplay::EventDisplay(const edm::ParameterSet& iConfig) : + nlayers( iConfig.getUntrackedParameter("Nlayers",8) ), + sensorsize( iConfig.getUntrackedParameter("SensorSize",128) ) +{ + usesResource("TFileService"); + HGCalTBClusterCollection_ = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_ = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_ = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); + _evtID = 0; +} + + +EventDisplay::~EventDisplay() +{ +} + +void EventDisplay::InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV) +{ + double HexX[MAXVERTICES] = {0.}; + double HexY[MAXVERTICES] = {0.}; + + for(int iv = -7; iv < 8; iv++) { + for(int iu = -7; iu < 8; iu++) { + if(!IsCellValid.iu_iv_valid(layerID, sensorIU, sensorIV, iu, iv, sensorsize)) continue; + CellXY = TheCell.GetCellCoordinatesForPlots(layerID, sensorIU, sensorIV, iu, iv, sensorsize); + assert(CellXY.size() == 4 || CellXY.size() == 6); + unsigned int iVertex = 0; + for(std::vector>::const_iterator it = CellXY.begin(); it != CellXY.end(); it++) { + HexX[iVertex] = it->first; + HexY[iVertex] = it->second; + ++iVertex; + } + //Somehow cloning of the TH2Poly was not working. Need to look at it. Currently physically booked another one. + poly.AddBin(CellXY.size(), HexX, HexY); + }//loop over iu + }//loop over iv +} +// + +// ------------ method called for each event ------------ +void +EventDisplay::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + + edm::Handle clusters; + event.getByToken(HGCalTBClusterCollection_, clusters); + edm::Handle clusters7; + event.getByToken(HGCalTBClusterCollection7_, clusters7); + edm::Handle clusters19; + event.getByToken(HGCalTBClusterCollection19_, clusters19); + + std::ostringstream os( std::ostringstream::ate ); + TH2Poly *h_RecHit_layer[nlayers]; + TH2Poly *h_Cluster_layer[nlayers]; + TH2Poly *h_Cluster7_layer[nlayers]; + TH2Poly *h_Cluster19_layer[nlayers]; + for( int ilayer=0; ilayermake(); + h_RecHit_layer[ilayer]->SetName( os.str().c_str() ); + h_RecHit_layer[ilayer]->SetTitle( os.str().c_str() ); + InitTH2Poly(*h_RecHit_layer[ilayer],ilayer,0,0); + os.str(""); + os << "Layer" << ilayer << "_Event" << _evtID << "_cluster"; + h_Cluster_layer[ilayer] = fs->make(); + h_Cluster_layer[ilayer]->SetName( os.str().c_str() ); + h_Cluster_layer[ilayer]->SetTitle( os.str().c_str() ); + InitTH2Poly(*h_Cluster_layer[ilayer],ilayer,0,0); + os.str(""); + os << "Layer" << ilayer << "_Event" << _evtID << "_cluster7"; + h_Cluster7_layer[ilayer] = fs->make(); + h_Cluster7_layer[ilayer]->SetName( os.str().c_str() ); + h_Cluster7_layer[ilayer]->SetTitle( os.str().c_str() ); + InitTH2Poly(*h_Cluster7_layer[ilayer],ilayer,0,0); + os.str(""); + os << "Layer" << ilayer << "_Event" << _evtID << "_cluster19"; + h_Cluster19_layer[ilayer] = fs->make(); + h_Cluster19_layer[ilayer]->SetName( os.str().c_str() ); + h_Cluster19_layer[ilayer]->SetTitle( os.str().c_str() ); + InitTH2Poly(*h_Cluster19_layer[ilayer],ilayer,0,0); + + } + _evtID++; + + float clusterID[nlayers]; + for(int i=0; i >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + HGCalTBDetId detID=(*it).first; + if(!IsCellValid.iu_iv_valid( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ) + ) continue; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + if( detID.cellType()!=1 ) + h_Cluster_layer[ detID.layer()-1 ]->Fill(iux , iuy, clusterID[ detID.layer()-1 ]); + h_RecHit_layer[ detID.layer()-1 ]->Fill(iux , iuy, (*it).second*cluster.energy()); + } + } + + for(int i=0; i >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + HGCalTBDetId detID=(*it).first; + if(!IsCellValid.iu_iv_valid( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ) + ) continue; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + if( detID.cellType()!=1 ) + h_Cluster7_layer[ detID.layer()-1 ]->Fill(iux , iuy, clusterID[ detID.layer()-1 ]); + } + } + + for(int i=0; i >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + HGCalTBDetId detID=(*it).first; + if(!IsCellValid.iu_iv_valid( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ) + ) continue; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detID.layer(), + detID.sensorIU(), detID.sensorIV(), + detID.iu(), detID.iv(), sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + if( detID.cellType()!=1 ) + h_Cluster19_layer[ detID.layer()-1 ]->Fill(iux , iuy, clusterID[ detID.layer()-1 ]); + } + } + +} + +void +EventDisplay::beginJob() +{ + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(mapfile_); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + } +} + +void +EventDisplay::endJob() +{ + +} + +void +EventDisplay::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(EventDisplay); diff --git a/Reco/plugins/HGCalTBClusterProducer.cc b/Reco/plugins/HGCalTBClusterProducer.cc new file mode 100644 index 0000000..10a0ad7 --- /dev/null +++ b/Reco/plugins/HGCalTBClusterProducer.cc @@ -0,0 +1,207 @@ +#include "HGCal/Reco/plugins/HGCalTBClusterProducer.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" + +#include +#include +#include + +HGCalTBClusterProducer::HGCalTBClusterProducer(const edm::ParameterSet& cfg) : + _outputCollectionName(cfg.getParameter("OutputCollectionName")), + _rechitToken(consumes(cfg.getParameter("rechitCollection"))), + _runDynamicCluster(cfg.getUntrackedParameter("runDynamicCluster",true)), + _runCluster7(cfg.getUntrackedParameter("runCluster7",true)), + _runCluster19(cfg.getUntrackedParameter("runCluster19",true)), + _sensorSize(cfg.getUntrackedParameter("sensorSize",128)), + _minEnergy(cfg.getUntrackedParameter("minEnergy",0.0)) +{ + float sum=0.; + std::vector vec; + sum+=0.0 ; vec.push_back( sum ); + sum+=5.35; vec.push_back( sum ); + sum+=5.17; vec.push_back( sum ); + sum+=3.92; vec.push_back( sum ); + sum+=4.08; vec.push_back( sum ); + sum+=1.15; vec.push_back( sum ); + sum+=4.11; vec.push_back( sum ); + sum+=2.14; vec.push_back( sum ); + //cern config 1 (5X0->15X0) is default + _layerZPositions = cfg.getUntrackedParameter< std::vector >("LayerZPositions",vec); + + std::vector vb; + for(unsigned int i=0; i<_layerZPositions.size(); i++) + if( i%2 == 0 ) vb.push_back(i); + _reversedLayers = cfg.getUntrackedParameter< std::vector >("reversedLayers",vb); + //by default even layers are reversed (for 8 layers cern config: layers 5 and 7 are reversed) + + produces (_outputCollectionName); + if( _runCluster7 ){ + std::ostringstream os( std::ostringstream::ate ); + os.str("");os << _outputCollectionName << 7; + _outputCollectionName7=os.str(); + produces (_outputCollectionName7); + } + if( _runCluster19 ){ + std::ostringstream os( std::ostringstream::ate ); + os.str("");os << _outputCollectionName << 19; + _outputCollectionName19=os.str(); + produces (_outputCollectionName19); + } +} + +void HGCalTBClusterProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) +{ + + std::auto_ptr clusters(new reco::HGCalTBClusterCollection); + std::auto_ptr clusters7(new reco::HGCalTBClusterCollection); + std::auto_ptr clusters19(new reco::HGCalTBClusterCollection); + + edm::Handle rechits; + event.getByToken(_rechitToken, rechits); + std::map hitmap; + + for(auto hit : *rechits ){ + if( hitmap.find( hit.id().layer() )!=hitmap.end() && hit.energy()>_minEnergy ) + hitmap[ hit.id().layer() ].push_back(hit); + else{ + HGCalTBRecHitCollection hitcol; + hitcol.push_back(hit); + std::pair< int, HGCalTBRecHitCollection > p( hit.id().layer(),hitcol ); + hitmap.insert(p); + } + } + for( std::map::iterator it=hitmap.begin(); it!=hitmap.end(); ++it ){ + if( _runDynamicCluster ){ + std::vector vec; + createDynamicClusters(it->second, vec); + for( std::vector::iterator jt=vec.begin(); jt!=vec.end(); ++jt ) + clusters->push_back(*jt); + } + if( _runCluster7 ){ + reco::HGCalTBCluster cluster; + createSeededClusters(it->second,cluster,1); + clusters7->push_back(cluster); + } + if( _runCluster19 ){ + reco::HGCalTBCluster cluster; + createSeededClusters(it->second,cluster,2); + clusters19->push_back(cluster); + } + } + // std::cout << "number of clusters = " << clusters->size() << std::endl; + // std::cout << "number of clusters7 = " << clusters7->size() << std::endl; + // std::cout << "number of clusters19 = " << clusters19->size() << std::endl; + if( _runDynamicCluster ) + event.put(clusters, _outputCollectionName); + if( _runCluster7 ) + event.put(clusters7, _outputCollectionName7); + if( _runCluster19 ) + event.put(clusters19, _outputCollectionName19); +} + +void HGCalTBClusterProducer::createDynamicClusters(HGCalTBRecHitCollection rechits, std::vector &clusterCol) +{ + _maxTransverse=1; + HGCalTBCellVertices cellVertice; + std::pair CellCentreXY; + std::vector temp; + for( std::vector::iterator it=rechits.begin(); it!=rechits.end(); ++it){ + if( std::find( temp.begin(),temp.end(),(*it).id() )!=temp.end() ) continue; + temp.push_back( (*it).id() ); + std::vector clusterDetIDs; + clusterDetIDs.push_back( (*it).id() ); + buildCluster(rechits, temp, clusterDetIDs); + reco::HGCalTBCluster cluster; + cluster.setLayer( (*it).id().layer() ); + float energyHigh=0.; + float energyLow=0.; + float energy=0.; + float x,y,z; + x = y = z = 0.0; + for( std::vector::iterator jt=clusterDetIDs.begin(); jt!=clusterDetIDs.end(); ++jt){ + HGCalTBRecHit hit=(*rechits.find(*jt)); + energyHigh+=hit.energyHigh(); + energyLow+=hit.energyLow(); + energy+=hit.energy(); + CellCentreXY=cellVertice.GetCellCentreCoordinatesForPlots( (*jt).layer(), (*jt).sensorIU(), (*jt).sensorIV(), (*jt).iu(), (*jt).iv(), _sensorSize); + x += CellCentreXY.first*hit.energy(); + y += CellCentreXY.second*hit.energy(); + z += _layerZPositions.at( (*jt).layer()-1 )*hit.energy(); + } + cluster.setPosition( math::XYZPoint(x,y,z)/energy ); + cluster.setEnergyLow(energyLow); + cluster.setEnergyHigh(energyHigh); + cluster.setEnergy(energy); + // std::cout << "layer = " << cluster.layer() << "\t cluster energy = " << energy << "\t nhit = " << clusterDetIDs.size() << std::endl; + for( std::vector::iterator jt=clusterDetIDs.begin(); jt!=clusterDetIDs.end(); ++jt) + cluster.addHitAndFraction( (*jt), (*rechits.find(*jt)).energy()/energy ); + + clusterCol.push_back(cluster); + } +} + +void HGCalTBClusterProducer::buildCluster( HGCalTBRecHitCollection rechits, + std::vector &temp, + std::vector &clusterDetIDs + ) +{ + HGCalTBTopology top; + HGCalTBDetId detID=clusterDetIDs.back(); + bool reversedlayer = std::find( _reversedLayers.begin(), _reversedLayers.end(), detID.layer() )==_reversedLayers.end() ? false : true ; + std::set neighbors=top.getNeighboringCellsDetID( detID, _sensorSize , _maxTransverse, reversedlayer ); + for( std::set::const_iterator it=neighbors.begin(); it!=neighbors.end(); ++it){ + if( std::find(temp.begin(), temp.end(), (*it))!=temp.end() || rechits.find(*it)==rechits.end() ) + continue; + temp.push_back( (*it) ); + clusterDetIDs.push_back( (*it) ); + buildCluster(rechits, temp, clusterDetIDs); + } +} + +void HGCalTBClusterProducer::createSeededClusters(HGCalTBRecHitCollection rechits, reco::HGCalTBCluster &cluster, int maxDist) +{ + if( rechits.size()==0 ) return; + _maxTransverse=maxDist; + HGCalTBTopology top; + HGCalTBRecHit seed=(*rechits.begin()); + for( std::vector::iterator it=rechits.begin(); it!=rechits.end(); ++it){ + if( (*it).energy() > seed.energy() ) + seed=(*it); + } + cluster.setLayer( seed.id().layer() ); + cluster.setSeed( seed.id() ); + float energyHigh=seed.energyHigh(); + float energyLow=seed.energyLow(); + float energy=seed.energy(); + HGCalTBCellVertices cellVertice; + std::pair CellCentreXY; + CellCentreXY=cellVertice.GetCellCentreCoordinatesForPlots( seed.id().layer(), seed.id().sensorIU(), seed.id().sensorIV(), seed.id().iu(), seed.id().iv(), _sensorSize); + float x = CellCentreXY.first*seed.energy(); + float y = CellCentreXY.second*seed.energy(); + float z = _layerZPositions.at( seed.id().layer()-1 ); + + std::set neighbors=top.getNeighboringCellsDetID( seed.id(), _sensorSize , _maxTransverse ); + for( std::set::iterator jt=neighbors.begin(); jt!=neighbors.end(); ++jt){ + if( rechits.find(*jt) != rechits.end() ){ + HGCalTBRecHit hit=(*rechits.find(*jt)); + energyHigh+=hit.energyHigh(); + energyLow+=hit.energyLow(); + energy+=hit.energy(); + CellCentreXY=cellVertice.GetCellCentreCoordinatesForPlots( (*jt).layer(), (*jt).sensorIU(), (*jt).sensorIV(), (*jt).iu(), (*jt).iv(), _sensorSize); + x += CellCentreXY.first*hit.energy(); + y += CellCentreXY.second*hit.energy(); + } + } + cluster.setPosition( math::XYZPoint(x/energy,y/energy,z) ); + cluster.setEnergyLow(energyLow); + cluster.setEnergyHigh(energyHigh); + cluster.setEnergy(energy); + + cluster.addHitAndFraction( seed.id(), seed.energy()/energy ); + for( std::set::iterator jt=neighbors.begin(); jt!=neighbors.end(); ++jt) + if( rechits.find(*jt) != rechits.end() ) + cluster.addHitAndFraction( (*jt), (*rechits.find(*jt)).energy()/energy ); + +} + +DEFINE_FWK_MODULE(HGCalTBClusterProducer); diff --git a/Reco/plugins/HGCalTBClusterProducer.h b/Reco/plugins/HGCalTBClusterProducer.h new file mode 100644 index 0000000..d8a876b --- /dev/null +++ b/Reco/plugins/HGCalTBClusterProducer.h @@ -0,0 +1,49 @@ +#ifndef HGCALTBCLUSTERPRODUCER_H +#define HGCALTBCLUSTERPRODUCER_H +/** \class Reco/plugins/HGCalTBClusterProducer.h + \brief + + \author Arnaud Steen + */ + +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/ESHandle.h" + +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" + +#include + +class HGCalTBClusterProducer : public edm::EDProducer +{ + +public: + HGCalTBClusterProducer(const edm::ParameterSet&); + virtual void produce(edm::Event&, const edm::EventSetup&); +private: + std::string _outputCollectionName; + std::string _outputCollectionName7; + std::string _outputCollectionName19; + edm::EDGetTokenT _rechitToken; + + bool _runDynamicCluster; + bool _runCluster7; + bool _runCluster19; + int _sensorSize; + int _maxTransverse; + double _minEnergy; + + std::vector _layerZPositions; + std::vector _reversedLayers; + + void buildCluster(HGCalTBRecHitCollection rechits, std::vector &temp, std::vector &clusterDetIDs); + void createDynamicClusters(HGCalTBRecHitCollection rechits, std::vector &clusterCol); + void createSeededClusters(HGCalTBRecHitCollection rechits, reco::HGCalTBCluster &cluster, int maxDist); +}; + +#endif diff --git a/Reco/python/hgcaltbclusterproducer_cfi.py b/Reco/python/hgcaltbclusterproducer_cfi.py new file mode 100644 index 0000000..98a4c9a --- /dev/null +++ b/Reco/python/hgcaltbclusterproducer_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +hgcaltbclusters = cms.EDProducer("HGCalTBClusterProducer", + OutputCollectionName = cms.string(''), + rechitCollection = cms.InputTag('hgcaltbrechits',"","unpack"), + LayerZPositions= cms.untracked.vdouble(0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4),#cern config 2 + #LayerZPositions= cms.untracked.vdouble(0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92),#cern config 1 + reversedLayers = cms.untracked.vint32(5,7), + minEnergy = cms.untracked.double(0) + ) diff --git a/Reco/python/hgcaltbrechitplotter_cfi.py b/Reco/python/hgcaltbrechitplotter_cfi.py index b28c9eb..67c01a7 100644 --- a/Reco/python/hgcaltbrechitplotter_cfi.py +++ b/Reco/python/hgcaltbrechitplotter_cfi.py @@ -43,3 +43,12 @@ mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), mapFile_FNAL = cms.string('') ) + +hgcaltbeventdisplay = cms.EDAnalyzer("EventDisplay", + HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), + HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ), + HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" ), + Nlayers = cms.untracked.int32( 8 ), + SensorSize = cms.untracked.int32( 128 ) + ) + diff --git a/StandardSequences/python/LocalReco_cff.py b/StandardSequences/python/LocalReco_cff.py index 86dc0e1..950d686 100644 --- a/StandardSequences/python/LocalReco_cff.py +++ b/StandardSequences/python/LocalReco_cff.py @@ -1,6 +1,8 @@ import FWCore.ParameterSet.Config as cms from HGCal.Reco.hgcaltbrechitproducer_cfi import * +from HGCal.Reco.hgcaltbclusterproducer_cfi import * LocalRecoSeq = cms.Sequence(hgcaltbrechits) +ClusterRecoSeq = cms.Sequence(hgcaltbclusters) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 5fab182..19f9988 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -140,6 +140,8 @@ process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) elif (options.chainSequence == 6): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 7): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Display_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) @@ -181,5 +183,9 @@ process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) elif (options.chainSequence == 6): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) +elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) +# example for running display : +# cmsRun test_cfg_newEB.py runNumber=1291 runType=HGCRun nSpills=1 dataFolder='./' pedestalsHighGain="./CondObjects/data/pedHighGain1200.txt" pedestalsLowGain="./CondObjects/data/pedLowGain1200.txt" chainSequence=7 maxEvents=10 process.end = cms.EndPath(process.output) From 460923ad70d02886483cdba1cca32395217ad83e Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sun, 20 Nov 2016 19:48:31 +0100 Subject: [PATCH 070/297] Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi --- CondObjects/data/Bad_Run_Spill_CFG2.txt | 466 ++++++++++++++++++++++++ RawToDigi/plugins/Bad_Spill_Filter.cc | 242 ++++++++++++ RawToDigi/python/hgcaltbdigis_cfi.py | 5 + test_cfg_newEB.py | 8 +- 4 files changed, 719 insertions(+), 2 deletions(-) create mode 100644 CondObjects/data/Bad_Run_Spill_CFG2.txt create mode 100644 RawToDigi/plugins/Bad_Spill_Filter.cc diff --git a/CondObjects/data/Bad_Run_Spill_CFG2.txt b/CondObjects/data/Bad_Run_Spill_CFG2.txt new file mode 100644 index 0000000..9c97261 --- /dev/null +++ b/CondObjects/data/Bad_Run_Spill_CFG2.txt @@ -0,0 +1,466 @@ + +1202 5 + +1202 13 + +1203 2 + +1203 11 + +1204 2 + +1206 8 + +1208 2 + +1208 6 + +1214 4 + +1214 12 + +1215 8 + +1216 12 + +1217 12 + +1217 14 + +1219 6 + +1219 14 + +1220 7 + +1221 2 + +1221 7 + +1221 12 + +1222 3 + +1223 12 + +1179 2 + +1179 11 + +1179 12 + +1179 13 + +1180 11 + +1181 3 + +1181 4 + +1185 1 + +1185 7 + +1185 9 + +1186 10 + +1188 11 + +1188 13 + +1189 8 + +1190 8 + +1190 13 + +1191 6 + +1191 10 + +1192 10 + +1193 2 + +1194 9 + +1194 11 + +1194 12 + +1195 12 + +1197 1 + +1197 2 + +1197 8 + +1197 10 + +1197 14 + +1199 8 + +1122 11 + +1123 7 + +1123 12 + +1124 1 + +1124 5 + +1124 13 + +1125 10 + +1126 9 + +1128 13 + +1129 13 + +1130 6 + +1130 8 + +1130 11 + +1130 14 + +1131 1 + +1131 2 + +1131 3 + +1131 4 + +1131 5 + +1131 6 + +1131 7 + +1131 8 + +1131 9 + +1131 10 + +1131 11 + +1131 12 + +1131 13 + +1131 14 + +1132 1 + +1132 2 + +1132 3 + +1132 4 + +1132 5 + +1132 6 + +1132 7 + +1132 8 + +1132 9 + +1132 10 + +1132 11 + +1132 12 + +1132 13 + +1132 14 + +1133 1 + +1133 2 + +1133 3 + +1133 4 + +1133 5 + +1133 6 + +1133 7 + +1133 8 + +1133 9 + +1133 10 + +1133 11 + +1133 12 + +1133 13 + +1133 14 + +1134 1 + +1134 2 + +1134 3 + +1134 4 + +1134 5 + +1134 6 + +1134 7 + +1134 8 + +1134 9 + +1134 10 + +1134 11 + +1134 12 + +1134 13 + +1134 14 + +1137 1 + +1137 2 + +1137 3 + +1137 4 + +1137 5 + +1137 6 + +1137 7 + +1137 8 + +1137 9 + +1137 10 + +1137 11 + +1137 12 + +1137 13 + +1137 14 + +1138 1 + +1138 2 + +1138 3 + +1138 4 + +1138 5 + +1138 6 + +1138 7 + +1138 8 + +1138 9 + +1138 10 + +1138 11 + +1138 12 + +1138 13 + +1138 14 + +1141 4 + +1144 6 + +1145 5 + +1146 9 + +1150 10 + +1150 11 + +1248 12 + +1249 14 + +1250 3 + +1251 8 + +1253 3 + +1253 7 + +1253 13 + +1254 13 + +1257 4 + +1257 10 + +1260 3 + +1260 4 + +1260 8 + +1261 2 + +1263 4 + +1263 11 + +1264 8 + +1267 4 + +1291 9 + +1292 1 + +1292 13 + +1294 10 + +1295 1 + +1296 8 + +1298 5 + +1299 3 + +1299 6 + +1299 11 + +1301 5 + +1302 8 + +1303 12 + +1305 1 + +1307 14 + +1308 5 + +1308 13 + +1309 6 + +1227 6 + +1228 3 + +1228 5 + +1233 11 + +1233 14 + +1235 1 + +1235 9 + +1235 13 + +1240 7 + +1240 14 + +1242 3 + +1242 13 + +1243 1 + +1244 5 + +1246 7 + +1246 10 + +1246 11 + +1247 1 + +1247 4 + +1247 10 + +1247 13 + +1154 5 + +1156 7 + +1157 1 + +1157 4 + +1157 5 + +1161 12 + +1162 12 + +1163 3 + +1163 14 + +1164 2 + +1164 9 + +1165 1 + +1166 4 + +1166 9 + +1167 3 + +1168 2 + +1169 11 + +1172 3 + +1172 4 + +1173 10 diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc new file mode 100644 index 0000000..1994f7e --- /dev/null +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -0,0 +1,242 @@ +// -*- C++ -*- +// +// Package: UserCode/Bad_Spill_Filter +// Class: Bad_Spill_Filter +// +/**\class Bad_Spill_Filter Bad_Spill_Filter.cc UserCode/Bad_Spill_Filter/plugins/Bad_Spill_Filter.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Rajdeep Mohan Chatterjee +// Created: Fri, 18 Nov 2016 12:57:18 GMT +// +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" +#include +#include +#include +#include +#include +// +// class declaration +// + +using namespace std; + +class Bad_Spill_Filter : public edm::stream::EDFilter<> { + public: + explicit Bad_Spill_Filter(const edm::ParameterSet&); + ~Bad_Spill_Filter(); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + virtual void beginStream(edm::StreamID) override; + virtual bool filter(edm::Event&, const edm::EventSetup&) override; + virtual void endStream() override; + int layers_config_; + char buffer[1024]; + int m_run, tmp_run, m_spill; + const static int Num_BAD_RUNS_CFG1 = 98; + const static int Num_BAD_RUNS_CFG2 = 98; + + int BAD_Runs_CFG1[Num_BAD_RUNS_CFG1] = {0}; + int BAD_Runs_CFG2[Num_BAD_RUNS_CFG2] = {0}; +// int Bad_Runs_CFG2[BAD_RUNS_CFG2] = {1202, 1203, 1204, 1206, 1208, 1214, 1215, 1216, 1217, 1219, 1220, 1221, 1222, 1223, 1179, 1180, 1181, 1185, 1186, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1197, 1199, 1122, 1123, 1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1137, 1138, 1141, 1144, 1145, 1146, 1150, 1248, 1249, 1250, 1251, 1253, 1254, 1257, 1260, 1261, 1263, 1264, 1267, 1291, 1292, 1294, 1295, 1296, 1298, 1299, 1301, 1302, 1303, 1305, 1307, 1308, 1309, 1227, 1228, 1233, 1235, 1240, 1242, 1243, 1244, 1246, 1247, 1154, 1156, 1157, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1172, 1173}; + + std::array< std::vector , Num_BAD_RUNS_CFG2> Bad_Run_Spill_Array; + FILE* m_file; + string name_CFG1 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt"; + string name_CFG2 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt"; + //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + + // ----------member data --------------------------- +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +Bad_Spill_Filter::Bad_Spill_Filter(const edm::ParameterSet& iConfig) +{ + //now do what ever initialization is needed + int counter = 0; + int run_counter = 0; + layers_config_ = iConfig.getParameter("layers_config"); + if(layers_config_ == 1) m_file = fopen(name_CFG1.c_str(),"r"); + else if(layers_config_ == 2) m_file = fopen(name_CFG2.c_str(),"r"); + + if (m_file == 0) { + if(layers_config_ == 1) cout< 0){ + if(m_run != tmp_run){ + run_counter++; + BAD_Runs_CFG2[run_counter] = m_run; + Bad_Run_Spill_Array[run_counter].push_back(m_spill); + tmp_run = m_run; + } + else{ + Bad_Run_Spill_Array[run_counter].push_back(m_spill); + } + } + + counter++; + } + + + +} + + +Bad_Spill_Filter::~Bad_Spill_Filter() +{ + + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called on each new Event ------------ +bool +Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) +{ + using namespace edm; + + int runId = event.id().run(); + int spillId = event.luminosityBlock(); + + int BadRunFlag = 0; + int BadSpillFlag = 0; + int Bad_Run_Location = 0; + + if((layers_config_ != 1) || (layers_config_ != 2) ) return true; + + for(int iii = 0; iii < Num_BAD_RUNS_CFG2; iii++){ + if((layers_config_ == 1) && (runId == BAD_Runs_CFG1[iii])){ + BadRunFlag = 1; + Bad_Run_Location = iii; + } + + if((layers_config_ == 2) && (runId == BAD_Runs_CFG2[iii])){ + BadRunFlag = 1; + Bad_Run_Location = iii; + } + + } + + if(BadRunFlag == 1){ + auto Bad_Run_Spill_List = Bad_Run_Spill_Array[Bad_Run_Location]; + for(auto Bad_Spill_Iterator : Bad_Run_Spill_List){ + if(spillId == Bad_Spill_Iterator){ + BadSpillFlag = 1; + } + } + } + + if(BadSpillFlag == 1) return false; + return true; +} + +// ------------ method called once each stream before processing any runs, lumis or events ------------ +void +Bad_Spill_Filter::beginStream(edm::StreamID) +{ +} + +// ------------ method called once each stream after processing all runs, lumis and events ------------ +void +Bad_Spill_Filter::endStream() { +} + +// ------------ method called when starting to processes a run ------------ +/* +void +Bad_Spill_Filter::beginRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a run ------------ +/* +void +Bad_Spill_Filter::endRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when starting to processes a luminosity block ------------ +/* +void +Bad_Spill_Filter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a luminosity block ------------ +/* +void +Bad_Spill_Filter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void +Bad_Spill_Filter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} +//define this as a plug-in +DEFINE_FWK_MODULE(Bad_Spill_Filter); diff --git a/RawToDigi/python/hgcaltbdigis_cfi.py b/RawToDigi/python/hgcaltbdigis_cfi.py index 530a1d1..507ddb1 100644 --- a/RawToDigi/python/hgcaltbdigis_cfi.py +++ b/RawToDigi/python/hgcaltbdigis_cfi.py @@ -8,3 +8,8 @@ ) +BadSpillFilter = cms.EDFilter("Bad_Spill_Filter", + layers_config = cms.int32(-1) + ) + + diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 5fab182..d3abf2c 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,7 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '/afs/cern.ch/user/r/rchatter/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -144,15 +144,19 @@ if(options.configuration == "-1"): + process.BadSpillFilter.layers_config = cms.int32(-1) process.LayerSumAnalyzer.layers_config = cms.int32(-1) process.hgcaltbrechits.layers_config = cms.int32(-1) elif(options.configuration == "0"): + process.BadSpillFilter.layers_config = cms.int32(0) process.LayerSumAnalyzer.layers_config = cms.int32(0) process.hgcaltbrechits.layers_config = cms.int32(0) elif(options.configuration == "1"): + process.BadSpillFilter.layers_config = cms.int32(1) process.LayerSumAnalyzer.layers_config = cms.int32(1) process.hgcaltbrechits.layers_config = cms.int32(1) elif(options.configuration == "2"): + process.BadSpillFilter.layers_config = cms.int32(2) process.LayerSumAnalyzer.layers_config = cms.int32(2) process.hgcaltbrechits.layers_config = cms.int32(2) @@ -174,7 +178,7 @@ if (options.chainSequence == 1): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter) elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): From 25fb4e0b2f63e882f497b795951269109f365438 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 21 Nov 2016 10:00:03 +0100 Subject: [PATCH 071/297] [position resolution] remove cartesian coordinates --- DataFormats/interface/HGCalTBRecHit.h | 2 +- DataFormats/src/HGCalTBRecHit.cc | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index 2403d2e..56d61ed 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -17,7 +17,6 @@ class HGCalTBRecHit : public CaloRecHit { public: - double* cartesian_coordinates; typedef DetId key_type; enum Flags { @@ -31,6 +30,7 @@ class HGCalTBRecHit : public CaloRecHit // by default a recHit is greated with no flag // HGCalTBRecHit(const DetId& id, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC HGCalTBRecHit(const DetId& id, float energy, float energyLow, float energyHigh, float time, uint32_t flags = 0); // when constructing from digis using 2 gains for the ADC + /// get the id HGCalTBDetId id() const { diff --git a/DataFormats/src/HGCalTBRecHit.cc b/DataFormats/src/HGCalTBRecHit.cc index 676fee0..5f1697a 100644 --- a/DataFormats/src/HGCalTBRecHit.cc +++ b/DataFormats/src/HGCalTBRecHit.cc @@ -13,19 +13,8 @@ HGCalTBRecHit::HGCalTBRecHit(const DetId& id, float energy, float energyLow, flo _energyLow(energyLow), _energyHigh(energyHigh) { - cartesian_coordinates = new double[3]; } -void HGCalTBRecHit::setCartesianCoordinates(double x, double y, double z){ - cartesian_coordinates[0] = x; - cartesian_coordinates[1] = y; - cartesian_coordinates[2] = z; -} - -double HGCalTBRecHit::getCartesianCoordinate(int index){ - assert(index<=2); - return cartesian_coordinates[index]; -} std::ostream& operator<<(std::ostream& s, const HGCalTBRecHit& hit) { From ddfb8991bd17f5e8aca9d9e38bd64d5541b6634b Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Mon, 21 Nov 2016 12:47:05 +0100 Subject: [PATCH 072/297] Bug fixes to BadSpillFilter. Tested to work for CERN CFG:2. Update with CFG 1 shortly. --- RawToDigi/plugins/Bad_Spill_Filter.cc | 13 ++++++++++--- Reco/plugins/HGCalTBRecHitProducer.cc | 9 +++++++++ test_cfg_newEB.py | 13 +++++++------ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc index 1994f7e..fbe142c 100644 --- a/RawToDigi/plugins/Bad_Spill_Filter.cc +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -53,7 +53,8 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { virtual void endStream() override; int layers_config_; char buffer[1024]; - int m_run, tmp_run, m_spill; + int m_run, tmp_run, m_spill, tmp_spill; + int spill_counter = 0; const static int Num_BAD_RUNS_CFG1 = 98; const static int Num_BAD_RUNS_CFG2 = 98; @@ -153,12 +154,11 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) int runId = event.id().run(); int spillId = event.luminosityBlock(); - int BadRunFlag = 0; int BadSpillFlag = 0; int Bad_Run_Location = 0; - if((layers_config_ != 1) || (layers_config_ != 2) ) return true; + if((layers_config_ != 1) && (layers_config_ != 2) ) return true; for(int iii = 0; iii < Num_BAD_RUNS_CFG2; iii++){ if((layers_config_ == 1) && (runId == BAD_Runs_CFG1[iii])){ @@ -177,12 +177,19 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) auto Bad_Run_Spill_List = Bad_Run_Spill_Array[Bad_Run_Location]; for(auto Bad_Spill_Iterator : Bad_Run_Spill_List){ if(spillId == Bad_Spill_Iterator){ + if(tmp_spill != spillId) spill_counter = 0; + if(spill_counter == 0){ + cout< +using namespace std; + HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) : outputCollectionName(cfg.getParameter("OutputCollectionName")), _digisToken(consumes(cfg.getParameter("digiCollection"))), @@ -41,6 +43,13 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS edm::Handle digisHandle; event.getByToken(_digisToken, digisHandle); +#ifdef DEBUG + int runId = event.id().run(); + int spillId = event.luminosityBlock(); + cout< runMap; + + +#endif \ No newline at end of file diff --git a/DataFormats/src/classes.h b/DataFormats/src/classes.h index b706b1e..dfaadfb 100644 --- a/DataFormats/src/classes.h +++ b/DataFormats/src/classes.h @@ -2,6 +2,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" #include "HGCal/DataFormats/interface/HGCalTBTrackCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" #include "DataFormats/Common/interface/RefProd.h" #include "DataFormats/Common/interface/Wrapper.h" @@ -20,6 +21,9 @@ struct dictionary { SKIROC2DigiCollection _SR2DC; edm::Wrapper _theSR2DC; + RunData _aRunData; + edm::Wrapper _aRunDataWrapper; + HGCalTBTrack _aTrack; std::vector _HGCTBTRackVect; // edm::Wrapper< HGCalTBTrackCollection > _HGCTBTrackProd; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index 1bfca74..811e8c6 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -13,7 +13,9 @@ - + + + diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 336ab92..6fbc2b1 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -1,10 +1,5 @@ -#include -#include -#include -#include "stdlib.h" #include "HGCal/RawToDigi/plugins/HGCalTBTextSource.h" -#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" -#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + using namespace std; //#define DEBUG /** @@ -13,6 +8,31 @@ T 0x0072D911 0xBEC20B15 T 0x0072D93F 0xBED19F54 T 0x0072D96E 0xBED19F56 T 0x0072 0x118F11BD 0x1081108D 0x11A511B7 0x118A108C 0x119311F2 0x119F1195 0x109E109E 0x1083108D 0x118D11F2 0x11FD1198 0x11881195 0x118D1196 0x11911190 0x1193118A 0x1088109F 0x118C118A */ +void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { + //perform the loop and fill configuredRuns + + char fragment[100]; + + int readCounter = 0; + int _run = 0; double _energy = 0, _layerThickness = 0; std::string _runType = ""; + + while (map_file.is_open() && !map_file.eof()) { + readCounter++; + map_file >> fragment; + if (readCounter <= 4) continue; //skip the header + else if (readCounter % 4 == 1) _run = atoi(fragment); + else if (readCounter % 4 == 2) _energy = atof(fragment); + else if (readCounter % 4 == 3) _runType = (std::string)fragment; + else if (readCounter % 4 == 0) { + _layerThickness = atof(fragment); + //store + configuredRuns[_run].energy = _energy; + configuredRuns[_run].runType = _runType; + configuredRuns[_run].layerThickness = _layerThickness; + } + } +} + bool HGCalTBTextSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) { if (!(fileNames().size())) return false; // need a file... @@ -118,8 +138,24 @@ bool HGCalTBTextSource::readLines() return !m_lines.empty(); } -void HGCalTBTextSource::produce(edm::Event & e) +void HGCalTBTextSource::produce(edm::Event & event) { + //add energy and configuration here + std::auto_ptr rd(new RunData); + if (configuredRuns.find(m_run) != configuredRuns.end()) { + rd->energy = configuredRuns[m_run].energy; + rd->layerThickness = configuredRuns[m_run].layerThickness; + rd->runType = configuredRuns[m_run].runType; + rd->run = m_run; + } else { + rd->energy = -1; + rd->layerThickness = -1; + rd->runType = "-1"; + rd->run = -1; + } + event.put(std::move(rd), "RunData"); + + std::auto_ptr bare_product(new FEDRawDataCollection()); // here we parse the data std::vector skiwords; @@ -137,7 +173,7 @@ void HGCalTBTextSource::produce(edm::Event & e) size_t len = sizeof(uint16_t) * skiwords.size(); fed.resize(len); memcpy(fed.data(), &(skiwords[0]), len); - e.put(bare_product); + event.put(bare_product); } @@ -148,6 +184,7 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.setComment("TEST"); desc.addUntracked("run", 101); desc.addUntracked >("fileNames"); + desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); descriptions.add("source", desc); } diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 303cf06..cd54a48 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -3,11 +3,15 @@ #include "FWCore/Sources/interface/ProducerSourceFromFiles.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include #include #include -#include +#include +#include +#include "stdlib.h" /** * \class HGCalTBTextSource HGCal/RawToDigi/plugins/HGCalTBTextSource.h * @@ -16,6 +20,11 @@ * \todo replace c-like scanf with c++ versions * \todo change run and fed IDs (now are hardcoded) */ + + +//to the EDM::Event via auxiliary information + + class HGCalTBTextSource : public edm::ProducerSourceFromFiles { @@ -29,6 +38,15 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles m_sourceId = pset.getUntrackedParameter("fed", 1000); /// \todo check and read from file? produces(); + produces("RunData"); + + //find and fill the configured runs + runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); + std::fstream map_file; + map_file.open(runEnergyMapFile.c_str(), std::fstream::in); + fillConfiguredRuns(map_file); + map_file.close(); + } virtual ~HGCalTBTextSource() @@ -42,10 +60,13 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles private: int currentFileIndex; //index of the current file int newFileIndex; + void fillConfiguredRuns(std::fstream& map_file); bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); bool readHeader(void); bool readLines(void); + runMap configuredRuns; + std::string runEnergyMapFile; std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; diff --git a/RawToDigi/python/hgcaltbdigis_cfi.py b/RawToDigi/python/hgcaltbdigis_cfi.py index 530a1d1..fc50313 100644 --- a/RawToDigi/python/hgcaltbdigis_cfi.py +++ b/RawToDigi/python/hgcaltbdigis_cfi.py @@ -2,6 +2,7 @@ hgcaltbdigis = cms.EDProducer("HGCalTBRawToDigi", InputLabel=cms.InputTag("source"), ### + #InputLabel=cms.InputTag("test"), ### fedId=cms.untracked.int32(1000), ## list of FEDs should be know from the setup electronicsMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"), ### electronicsMap written by hand diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 238d099..34d332a 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -55,6 +55,7 @@ class SensorHitMap { public: SensorHitMap(); + ~SensorHitMap(); void setZ(double z); void setSensorSize(int s); //reduces the information from the Rechit towards what is necessary for the impact point calculation @@ -92,6 +93,8 @@ class ParticleTrack{ std::pair positionFromLineFitTGraphErrors(double z); TF1* ROOTpol_x; TF1* ROOTpol_y; + TGraph* tmp_graph_x; + TGraph* tmp_graph_y; }; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index d6bc6cd..0554ffe 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -24,6 +24,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition #include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" @@ -41,7 +42,6 @@ double Layer_Z_Positions[17] = {0.0, 1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; //by this convention the first entry is not considered as the layers numbering starts at 1 - int nLayers = 8; int SensorSize = 128; /**********/ @@ -59,18 +59,26 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer fs; - edm::EDGetToken HGCalTBRecHitCollection_; + edm::EDGetTokenT HGCalTBRecHitCollection_; + edm::EDGetTokenT RunDataToken; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; bool make2DGraphs; int successfulFitCounter, failedFitCounter; - double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram - - //stuff to be written to objects at the end - std::map >deviations; - + double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram, those are defined globally + + //stuff to be written to objects at the end, first is the energy, second the layer thickness and third the layer int + std::map > > >deviations; + + //helper variables that are set within the event loop, i.e. are defined per event + int evId, run, layer; + double energy, layerThickness; + std::map Sensors; + std::map Tracks; + std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_v; + double x_predicted, y_predicted, x_true, y_true, layerZ, deviation; }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -78,6 +86,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS // initialization usesResource("TFileService"); HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + RunDataToken= consumes(iConfig.getParameter("RUNDATA")); //read the weighting method to obtain the central hit point std::string methodString = iConfig.getParameter("weightingMethod"); @@ -105,6 +114,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS min_deviation = pow(10., 12); max_deviation = -1.; + }//constructor ends here Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { @@ -113,20 +123,30 @@ Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { // ------------ method called for each event ------------ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { + + //get the relevant event information + evId = event.id().event(); + edm::Handle rd; + event.getByToken(RunDataToken, rd); + run = rd->run; + energy = rd->energy; + layerThickness = rd->layerThickness; + if (run == -1) { + std::cout<<"Run is not in configuration file - is ignored."< Rechits; event.getByToken(HGCalTBRecHitCollection_, Rechits); - int evId = event.id().event(); - + //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer - std::map Sensors; for(auto Rechit : *Rechits) { - int layer = (Rechit.id()).layer(); + layer = (Rechit.id()).layer(); if ( Sensors.find(layer) == Sensors.end() ) { - SensorHitMap* newSensor = new SensorHitMap(); - newSensor->setZ(Layer_Z_Positions[layer]); - newSensor->setSensorSize(SensorSize); - Sensors[layer] = newSensor; + Sensors[layer] = new SensorHitMap(); + Sensors[layer]->setZ(Layer_Z_Positions[layer]); + Sensors[layer]->setSensorSize(SensorSize); } Sensors[layer]->addHit(Rechit); } @@ -140,6 +160,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E it->second->calculateCenterPosition(weightingMethod); } + //step 3: fill particle tracks std::map Tracks; //the integer index indicates which layer is omitted in the track calculation @@ -152,9 +173,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->fitTrack(fittingMethod); } - std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_v; - double x_predicted, y_predicted, x_true, y_true, layerZ, deviation; - + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (int i=1; i<=nLayers; i++) { layerZ = Sensors[i]->getZ(); x_predicted = Tracks[i]->calculatePositionXY(layerZ).first; @@ -172,7 +191,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deviation = pow(x_predicted - x_true, 2); deviation += pow(y_predicted - y_true, 2); deviation = sqrt(deviation); - deviations[i].push_back(deviation); + //deviations[energy][layerThickness][i].push_back(deviation); //update the deviations on the fly min_deviation = min_deviation > deviation ? deviation: min_deviation; @@ -187,10 +206,28 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } if (make2DGraphs) { - fs->make(Form("predicted_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); - fs->make(Form("true_points_event_%s", std::to_string(evId).c_str()), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); + std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); + fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); + fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); } + //Todo: 1. cleanup to avoid memory leak for many events, try to install cmssw on local machine for that!!! + //2. look at Andre's weighting/fitting + + //clear: + //loop over entries and delete manually by hand before clearing the maps + + + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + delete (*it).second; + }; Sensors.clear(); + + + for(std::map::iterator it=Tracks.begin(); it!=Tracks.end(); it++) { + delete (*it).second; + }; Tracks.clear(); + + x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); }// analyze ends here @@ -203,7 +240,11 @@ void Position_Resolution_Analyzer::endJob() { std::cout<<"Successful fits: "< > > >deviations; + //loop over everything and make for each energy and absorber thickness one histogram: + /* TH2D* deviationHistogram = this->fs->make("positionDeviations", "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); @@ -211,7 +252,7 @@ void Position_Resolution_Analyzer::endJob() { for(int j=0; j<(int)deviations[i].size(); j++) deviationHistogram->Fill(i, deviations[i][j]); std::cout<<"Done"<::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + delete *hit; + } + Hits.clear(); +} + void SensorHitMap::setSensorSize(int s) { sensorSize = s; } @@ -33,12 +40,11 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { //Rechit.setCartesianCoordinates(iux, ivy, Layer_Z_Positions[layer]); //in cm, is not really necessary - HitTriple* hit = new HitTriple; - hit->ID = ID; - hit->x = iux; - hit->y = ivy; - hit->I = energy; - Hits.push_back(hit); + Hits.push_back(new HitTriple); + Hits[Hits.size()-1]->ID = ID; + Hits[Hits.size()-1]->x = iux; + Hits[Hits.size()-1]->y = ivy; + Hits[Hits.size()-1]->I = energy; //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds 30 if (energyHigh <= 30.0) { //TODO: make a threshold @@ -132,10 +138,14 @@ void SensorHitMap::poweredWeighting(int exponent) { ParticleTrack::ParticleTrack(){ lastAppliedMethod = DEFAULTFITTING; ROOTpol_x = ROOTpol_y = 0; + tmp_graph_x = tmp_graph_y = 0; }; -ParticleTrack::~ParticleTrack(){ +ParticleTrack::~ParticleTrack(){ + delete ROOTpol_x; + delete ROOTpol_y; + x.clear(); x_err.clear(); y.clear(); y_err.clear(); z.clear(); z_err.clear(); }; void ParticleTrack::addFitPoint(SensorHitMap* sensor){ @@ -176,18 +186,24 @@ std::pair ParticleTrack::calculatePositionXY(double z) { //private functions void ParticleTrack::lineFitTGraphErrors(){ + if (ROOTpol_x == 0) { + delete ROOTpol_x; ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } if (ROOTpol_y == 0) { + delete ROOTpol_y; ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); } - TGraph* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros - TGraph* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); + + tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros + tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); tmp_graph_x->Fit(ROOTpol_x, "Q"); tmp_graph_y->Fit(ROOTpol_y, "Q"); + delete tmp_graph_x; + delete tmp_graph_y; }; std::pair ParticleTrack::positionFromLineFitTGraphErrors(double z) { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 160cc78..085a47c 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,7 +6,9 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + #'/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', #use this for eos + '/user/data/Testbeam/September2016/', #use this for running on pclcd + #'/home/home1/institut_3a/quast/TestBeamSeptember2016/', #use this for running on lx3a03 VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -68,7 +70,7 @@ options.output = "test_output.root" -options.maxEvents = 1 +options.maxEvents = -1 options.parseArguments() @@ -105,7 +107,9 @@ process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED - fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + runEnergyMapFile = cms.untracked.string("CondObjects/data/runEnergies.txt"), + fileNames=cms.untracked.vstring( + ["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,run) for run in range(options.runNumber, options.runNumber+3)]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED nSpills=cms.untracked.uint32(options.nSpills), ) @@ -124,6 +128,7 @@ process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") process.position_resolution_analyzer.make2DGraphs = True #only for debugging + process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) From 22af465a9cf750ee7bb88a547c5a0d1653a123f2 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 21 Nov 2016 17:50:49 +0100 Subject: [PATCH 074/297] [position resolution] sort output histograms by energy, layer thickness and run number --- Reco/plugins/Position_Resolution_Analyzer.cc | 37 +++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 0554ffe..8c45ebe 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -34,6 +34,7 @@ #include "TFile.h" #include "TH2D.h" #include "TGraph2D.h" +//#include "TFileDirectory.h" @@ -69,8 +70,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer > > >deviations; + //stuff to be written to objects at the end, first is the energy, second the layer thickness, third the run and last the layer int + std::map > > > >deviations; //helper variables that are set within the event loop, i.e. are defined per event int evId, run, layer; @@ -191,7 +192,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deviation = pow(x_predicted - x_true, 2); deviation += pow(y_predicted - y_true, 2); deviation = sqrt(deviation); - //deviations[energy][layerThickness][i].push_back(deviation); + deviations[energy][layerThickness][run][i].push_back(deviation); //update the deviations on the fly min_deviation = min_deviation > deviation ? deviation: min_deviation; @@ -243,16 +244,26 @@ void Position_Resolution_Analyzer::endJob() { std::cout<<"Making deviation TH2D(s)... "< > > >deviations; - //loop over everything and make for each energy and absorber thickness one histogram: - /* - TH2D* deviationHistogram = this->fs->make("positionDeviations", "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); - deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); - deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); - for(int i=1; i<=nLayers; i++) - for(int j=0; j<(int)deviations[i].size(); j++) - deviationHistogram->Fill(i, deviations[i][j]); - std::cout<<"Done"< > > > >::iterator it1; + TFileDirectory subDir1; + std::map > > >::iterator it2; + TFileDirectory subDir2; + std::map > >::iterator it3; + + for (it1=deviations.begin(); it1!=deviations.end(); it1++) { + subDir1 = this->fs->mkdir(std::to_string((*it1).first).c_str()); + for (it2=(*it1).second.begin(); it2!=(*it1).second.end(); it2++) { + subDir2 = subDir1.mkdir(std::to_string((*it2).first).c_str()); + for (it3=(*it2).second.begin(); it3!=(*it2).second.end(); it3++) { + TH2D* deviationHistogram = subDir2.make(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); + deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); + deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); + for(int i=1; i<=nLayers; i++) + for(int j=0; j<(int)(*it3).second[i].size(); j++) + deviationHistogram->Fill(i, (*it3).second[i][j]); + } + } + } std::cout<<"*************************************************"< Date: Mon, 21 Nov 2016 12:47:05 +0100 Subject: [PATCH 075/297] Bug fixes to BadSpillFilter. Tested to work for CERN CFG:2. Update with CFG 1 shortly. Conflicts: RawToDigi/plugins/Bad_Spill_Filter.cc test_cfg_newEB.py --- RawToDigi/plugins/Bad_Spill_Filter.cc | 249 ++++++++++++++++++++++++++ Reco/plugins/HGCalTBRecHitProducer.cc | 9 + test_cfg_newEB.py | 14 +- 3 files changed, 265 insertions(+), 7 deletions(-) create mode 100644 RawToDigi/plugins/Bad_Spill_Filter.cc diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc new file mode 100644 index 0000000..fbe142c --- /dev/null +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -0,0 +1,249 @@ +// -*- C++ -*- +// +// Package: UserCode/Bad_Spill_Filter +// Class: Bad_Spill_Filter +// +/**\class Bad_Spill_Filter Bad_Spill_Filter.cc UserCode/Bad_Spill_Filter/plugins/Bad_Spill_Filter.cc + + Description: [one line class summary] + + Implementation: + [Notes on implementation] +*/ +// +// Original Author: Rajdeep Mohan Chatterjee +// Created: Fri, 18 Nov 2016 12:57:18 GMT +// +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDFilter.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" +#include +#include +#include +#include +#include +// +// class declaration +// + +using namespace std; + +class Bad_Spill_Filter : public edm::stream::EDFilter<> { + public: + explicit Bad_Spill_Filter(const edm::ParameterSet&); + ~Bad_Spill_Filter(); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + virtual void beginStream(edm::StreamID) override; + virtual bool filter(edm::Event&, const edm::EventSetup&) override; + virtual void endStream() override; + int layers_config_; + char buffer[1024]; + int m_run, tmp_run, m_spill, tmp_spill; + int spill_counter = 0; + const static int Num_BAD_RUNS_CFG1 = 98; + const static int Num_BAD_RUNS_CFG2 = 98; + + int BAD_Runs_CFG1[Num_BAD_RUNS_CFG1] = {0}; + int BAD_Runs_CFG2[Num_BAD_RUNS_CFG2] = {0}; +// int Bad_Runs_CFG2[BAD_RUNS_CFG2] = {1202, 1203, 1204, 1206, 1208, 1214, 1215, 1216, 1217, 1219, 1220, 1221, 1222, 1223, 1179, 1180, 1181, 1185, 1186, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1197, 1199, 1122, 1123, 1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1137, 1138, 1141, 1144, 1145, 1146, 1150, 1248, 1249, 1250, 1251, 1253, 1254, 1257, 1260, 1261, 1263, 1264, 1267, 1291, 1292, 1294, 1295, 1296, 1298, 1299, 1301, 1302, 1303, 1305, 1307, 1308, 1309, 1227, 1228, 1233, 1235, 1240, 1242, 1243, 1244, 1246, 1247, 1154, 1156, 1157, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1172, 1173}; + + std::array< std::vector , Num_BAD_RUNS_CFG2> Bad_Run_Spill_Array; + FILE* m_file; + string name_CFG1 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt"; + string name_CFG2 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt"; + //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + + // ----------member data --------------------------- +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +Bad_Spill_Filter::Bad_Spill_Filter(const edm::ParameterSet& iConfig) +{ + //now do what ever initialization is needed + int counter = 0; + int run_counter = 0; + layers_config_ = iConfig.getParameter("layers_config"); + if(layers_config_ == 1) m_file = fopen(name_CFG1.c_str(),"r"); + else if(layers_config_ == 2) m_file = fopen(name_CFG2.c_str(),"r"); + + if (m_file == 0) { + if(layers_config_ == 1) cout< 0){ + if(m_run != tmp_run){ + run_counter++; + BAD_Runs_CFG2[run_counter] = m_run; + Bad_Run_Spill_Array[run_counter].push_back(m_spill); + tmp_run = m_run; + } + else{ + Bad_Run_Spill_Array[run_counter].push_back(m_spill); + } + } + + counter++; + } + + + +} + + +Bad_Spill_Filter::~Bad_Spill_Filter() +{ + + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called on each new Event ------------ +bool +Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) +{ + using namespace edm; + + int runId = event.id().run(); + int spillId = event.luminosityBlock(); + int BadRunFlag = 0; + int BadSpillFlag = 0; + int Bad_Run_Location = 0; + + if((layers_config_ != 1) && (layers_config_ != 2) ) return true; + + for(int iii = 0; iii < Num_BAD_RUNS_CFG2; iii++){ + if((layers_config_ == 1) && (runId == BAD_Runs_CFG1[iii])){ + BadRunFlag = 1; + Bad_Run_Location = iii; + } + + if((layers_config_ == 2) && (runId == BAD_Runs_CFG2[iii])){ + BadRunFlag = 1; + Bad_Run_Location = iii; + } + + } + + if(BadRunFlag == 1){ + auto Bad_Run_Spill_List = Bad_Run_Spill_Array[Bad_Run_Location]; + for(auto Bad_Spill_Iterator : Bad_Run_Spill_List){ + if(spillId == Bad_Spill_Iterator){ + if(tmp_spill != spillId) spill_counter = 0; + if(spill_counter == 0){ + cout< +using namespace std; + HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) : outputCollectionName(cfg.getParameter("OutputCollectionName")), _digisToken(consumes(cfg.getParameter("digiCollection"))), @@ -41,6 +43,13 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS edm::Handle digisHandle; event.getByToken(_digisToken, digisHandle); +#ifdef DEBUG + int runId = event.id().run(); + int spillId = event.luminosityBlock(); + cout< Date: Mon, 21 Nov 2016 18:43:33 +0100 Subject: [PATCH 077/297] fix for bad spill rejection --- CondObjects/data/Bad_Run_Spill_CFG2.txt | 466 ++++++++++++++++++++++++ RawToDigi/python/hgcaltbdigis_cfi.py | 3 + 2 files changed, 469 insertions(+) create mode 100644 CondObjects/data/Bad_Run_Spill_CFG2.txt diff --git a/CondObjects/data/Bad_Run_Spill_CFG2.txt b/CondObjects/data/Bad_Run_Spill_CFG2.txt new file mode 100644 index 0000000..9c97261 --- /dev/null +++ b/CondObjects/data/Bad_Run_Spill_CFG2.txt @@ -0,0 +1,466 @@ + +1202 5 + +1202 13 + +1203 2 + +1203 11 + +1204 2 + +1206 8 + +1208 2 + +1208 6 + +1214 4 + +1214 12 + +1215 8 + +1216 12 + +1217 12 + +1217 14 + +1219 6 + +1219 14 + +1220 7 + +1221 2 + +1221 7 + +1221 12 + +1222 3 + +1223 12 + +1179 2 + +1179 11 + +1179 12 + +1179 13 + +1180 11 + +1181 3 + +1181 4 + +1185 1 + +1185 7 + +1185 9 + +1186 10 + +1188 11 + +1188 13 + +1189 8 + +1190 8 + +1190 13 + +1191 6 + +1191 10 + +1192 10 + +1193 2 + +1194 9 + +1194 11 + +1194 12 + +1195 12 + +1197 1 + +1197 2 + +1197 8 + +1197 10 + +1197 14 + +1199 8 + +1122 11 + +1123 7 + +1123 12 + +1124 1 + +1124 5 + +1124 13 + +1125 10 + +1126 9 + +1128 13 + +1129 13 + +1130 6 + +1130 8 + +1130 11 + +1130 14 + +1131 1 + +1131 2 + +1131 3 + +1131 4 + +1131 5 + +1131 6 + +1131 7 + +1131 8 + +1131 9 + +1131 10 + +1131 11 + +1131 12 + +1131 13 + +1131 14 + +1132 1 + +1132 2 + +1132 3 + +1132 4 + +1132 5 + +1132 6 + +1132 7 + +1132 8 + +1132 9 + +1132 10 + +1132 11 + +1132 12 + +1132 13 + +1132 14 + +1133 1 + +1133 2 + +1133 3 + +1133 4 + +1133 5 + +1133 6 + +1133 7 + +1133 8 + +1133 9 + +1133 10 + +1133 11 + +1133 12 + +1133 13 + +1133 14 + +1134 1 + +1134 2 + +1134 3 + +1134 4 + +1134 5 + +1134 6 + +1134 7 + +1134 8 + +1134 9 + +1134 10 + +1134 11 + +1134 12 + +1134 13 + +1134 14 + +1137 1 + +1137 2 + +1137 3 + +1137 4 + +1137 5 + +1137 6 + +1137 7 + +1137 8 + +1137 9 + +1137 10 + +1137 11 + +1137 12 + +1137 13 + +1137 14 + +1138 1 + +1138 2 + +1138 3 + +1138 4 + +1138 5 + +1138 6 + +1138 7 + +1138 8 + +1138 9 + +1138 10 + +1138 11 + +1138 12 + +1138 13 + +1138 14 + +1141 4 + +1144 6 + +1145 5 + +1146 9 + +1150 10 + +1150 11 + +1248 12 + +1249 14 + +1250 3 + +1251 8 + +1253 3 + +1253 7 + +1253 13 + +1254 13 + +1257 4 + +1257 10 + +1260 3 + +1260 4 + +1260 8 + +1261 2 + +1263 4 + +1263 11 + +1264 8 + +1267 4 + +1291 9 + +1292 1 + +1292 13 + +1294 10 + +1295 1 + +1296 8 + +1298 5 + +1299 3 + +1299 6 + +1299 11 + +1301 5 + +1302 8 + +1303 12 + +1305 1 + +1307 14 + +1308 5 + +1308 13 + +1309 6 + +1227 6 + +1228 3 + +1228 5 + +1233 11 + +1233 14 + +1235 1 + +1235 9 + +1235 13 + +1240 7 + +1240 14 + +1242 3 + +1242 13 + +1243 1 + +1244 5 + +1246 7 + +1246 10 + +1246 11 + +1247 1 + +1247 4 + +1247 10 + +1247 13 + +1154 5 + +1156 7 + +1157 1 + +1157 4 + +1157 5 + +1161 12 + +1162 12 + +1163 3 + +1163 14 + +1164 2 + +1164 9 + +1165 1 + +1166 4 + +1166 9 + +1167 3 + +1168 2 + +1169 11 + +1172 3 + +1172 4 + +1173 10 diff --git a/RawToDigi/python/hgcaltbdigis_cfi.py b/RawToDigi/python/hgcaltbdigis_cfi.py index 530a1d1..821a2da 100644 --- a/RawToDigi/python/hgcaltbdigis_cfi.py +++ b/RawToDigi/python/hgcaltbdigis_cfi.py @@ -8,3 +8,6 @@ ) +BadSpillFilter = cms.EDFilter("Bad_Spill_Filter", + layers_config = cms.int32(-1) + ) From 883e353e03c53d714d19f7e40309ce46c7c3be28 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 09:07:27 +0100 Subject: [PATCH 078/297] [reader] read file names from external configuration file and loop over them --- RawToDigi/plugins/HGCalTBTextSource.cc | 29 +++++++++++++++++++++----- RawToDigi/plugins/HGCalTBTextSource.h | 8 +++++++ test_cfg_newEB.py | 12 +++++------ 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 6fbc2b1..80e162d 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -9,10 +9,11 @@ T 0x0072D911 0xBEC20B15 T 0x0072D93F 0xBED19F54 T 0x0072D96E 0xBED19F56 T 0x0072 */ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { - //perform the loop and fill configuredRuns + std::string run_prefix; + std::string filePath; + //perform the loop and fill configuredRuns char fragment[100]; - int readCounter = 0; int _run = 0; double _energy = 0, _layerThickness = 0; std::string _runType = ""; @@ -29,19 +30,35 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { configuredRuns[_run].energy = _energy; configuredRuns[_run].runType = _runType; configuredRuns[_run].layerThickness = _layerThickness; + + //add the zeros + if (_run < 10) run_prefix= "00000"; + else if (_run < 100) run_prefix= "0000"; + else if (_run < 1000) run_prefix= "000"; + else if (_run < 10000) run_prefix= "00"; + else if (_run < 100000) run_prefix= "0"; + else run_prefix = "0"; + + + filePath = inputPathFormat; + + filePath.replace(filePath.find(""), 5, run_prefix+std::to_string(_run)); + std::cout<<"Adding "< rd(new RunData); if (configuredRuns.find(m_run) != configuredRuns.end()) { @@ -184,6 +202,7 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.setComment("TEST"); desc.addUntracked("run", 101); desc.addUntracked >("fileNames"); + desc.addUntracked("inputPathFormat"); desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); descriptions.add("source", desc); diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index cd54a48..a57ee27 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -32,6 +32,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles explicit HGCalTBTextSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : edm::ProducerSourceFromFiles(pset, desc, true), currentFileIndex(-1), newFileIndex(0), + inputPathFormat(""), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) { @@ -40,8 +41,13 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles produces(); produces("RunData"); + if (fileNames()[0] != "file:DUMMY") { + _fileNames = fileNames(); + } //find and fill the configured runs runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); + inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); fillConfiguredRuns(map_file); @@ -67,6 +73,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles bool readLines(void); runMap configuredRuns; std::string runEnergyMapFile; + std::string inputPathFormat; + std::vector _fileNames; std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 085a47c..71f640a 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -7,7 +7,7 @@ options.register('dataFolder', #'/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', #use this for eos - '/user/data/Testbeam/September2016/', #use this for running on pclcd + '/user/data/Testbeam/September2016', #use this for running on pclcd #'/home/home1/institut_3a/quast/TestBeamSeptember2016/', #use this for running on lx3a03 VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, @@ -106,10 +106,10 @@ process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file - #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED - runEnergyMapFile = cms.untracked.string("CondObjects/data/runEnergies.txt"), - fileNames=cms.untracked.vstring( - ["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,run) for run in range(options.runNumber, options.runNumber+3)]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + runEnergyMapFile = cms.untracked.string("CondObjects/data/runEnergies.txt"), #the runs from the runEnergyMapFile are automatically added to the fileNames + inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered + #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,run) for run in range(options.runNumber, options.runNumber+3)]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED nSpills=cms.untracked.uint32(options.nSpills), ) @@ -126,7 +126,7 @@ process.position_resolution_analyzer.weightingMethod = cms.string("squaredWeighting") process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") -process.position_resolution_analyzer.make2DGraphs = True #only for debugging +process.position_resolution_analyzer.make2DGraphs = False #only for debugging process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", From 7f81553a92aaefb372b8d5e289c081957bbb1d94 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 11:55:27 +0100 Subject: [PATCH 079/297] [position resolution] externalize parameters (sensorSize, NLayers, LayerZ) into config --- Reco/interface/PositionResolutionHelpers.h | 2 ++ Reco/plugins/Position_Resolution_Analyzer.cc | 22 ++++++++-------- Reco/python/position_resolution_cfi.py | 17 ++++-------- Reco/src/PositionResolutionHelpers.cc | 27 ++++++++++++++++---- test_cfg_newEB.py | 7 ++--- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 34d332a..4d1099a 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -44,6 +44,7 @@ class SensorHitMap { std::pair centralHitPointError; double layerZ; int sensorSize; + double threshold; std::vector Hits; //helpers to obtain the x-y coordinate HGCalTBCellVertices TheCell; @@ -58,6 +59,7 @@ class SensorHitMap { ~SensorHitMap(); void setZ(double z); void setSensorSize(int s); + void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); void subtractPedestals(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 8c45ebe..3628780 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -9,9 +9,7 @@ */ - // system include files -//#include #include #include #include @@ -34,18 +32,8 @@ #include "TFile.h" #include "TH2D.h" #include "TGraph2D.h" -//#include "TFileDirectory.h" - -/**********/ -//all of this should go into a config file - -double Layer_Z_Positions[17] = {0.0, 1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; -//by this convention the first entry is not considered as the layers numbering starts at 1 -int nLayers = 8; -int SensorSize = 128; -/**********/ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { public: @@ -66,6 +54,10 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer Layer_Z_Positions; + int nLayers; + int SensorSize; int successfulFitCounter, failedFitCounter; double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram, those are defined globally @@ -105,6 +97,11 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS else fittingMethod = DEFAULTFITTING; + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); + nLayers = iConfig.getParameter("nLayers"); + SensorSize = iConfig.getParameter("SensorSize"); + Layer_Z_Positions = iConfig.getParameter >("Layer_Z_Positions"); + //making 2DGraphs per event? make2DGraphs = iConfig.getParameter("make2DGraphs"); @@ -146,6 +143,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layer = (Rechit.id()).layer(); if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(); + Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setZ(Layer_Z_Positions[layer]); Sensors[layer]->setSensorSize(SensorSize); } diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 6d10e2d..421234c 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -3,18 +3,11 @@ position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), + pedestalThreshold = cms.double(30.), #-99999 for no threshold-->subtracts the average + Layer_Z_Positions = cms.vdouble([1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8]), + nLayers = cms.int32(8), + SensorSize = cms.int32(128), make2DGraphs = cms.bool(False), - RUNDATA = cms.InputTag("source","RunData","unpack" ), + RUNDATA = cms.InputTag("source","RunData","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )#, - #digiCollection = cms.InputTag('hgcaltbdigis'), - #pedestalLow = cms.string('CondObjects/data/Ped_LowGain_L8.txt'), - #pedestalHigh = cms.string('CondObjects/data/Ped_HighGain_L8.txt'), - #gainLow = cms.string(''), - #gainHigh = cms.string(''), - #LG2HG_CERN = cms.vdouble(10.2, 10.2, 10., 10., 9.8, 8.8, 9.7, 9.7, 9.7, 9.7, 9.8, 9.8, 9.8, 9.8, 9.2, 9.2), - #LG2HG_FNAL = cms.vdouble(1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.), - #adcSaturation = cms.int32(1800), - #mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), - #mapFile_FNAL = cms.string(''), - #layers_config = cms.int32(-1) ) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 105fa68..8ec7739 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -6,6 +6,7 @@ //public functions SensorHitMap::SensorHitMap(){ centralHitPoint = std::make_pair(0., 0.); + threshold = 30.; layerZ = 0; sensorSize = 128; } @@ -25,6 +26,10 @@ void SensorHitMap::setZ(double z) { this->layerZ = z; } +void SensorHitMap::setPedestalThreshold(double t) { + this->threshold = t; +} + double SensorHitMap::getZ() { return this->layerZ; } @@ -46,8 +51,8 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { Hits[Hits.size()-1]->y = ivy; Hits[Hits.size()-1]->I = energy; - //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds 30 - if (energyHigh <= 30.0) { //TODO: make a threshold + //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) + if (energyHigh <= threshold || threshold == -99999) { if (cellTypeCount.find(ID) == cellTypeCount.end()) { cellTypeCount[ID] = 0; pedestalCount[ID] = 0; @@ -105,10 +110,19 @@ std::pair SensorHitMap::getCenterPositionError() { //private functions void SensorHitMap::poweredWeighting(int exponent) { double threshold = 0.0; //TODO: maybe as parameter - double numerator_x, numerator_y, denominator; - numerator_x = numerator_y = denominator = 0; double w; + + bool _debug = (layerZ==2. || layerZ==8.7); + if (_debug) { + std::cout<::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum + std::cout<<"Weight: "<x<<" y: "<<(*hit)->y<::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum denominator += w; @@ -127,7 +141,7 @@ void SensorHitMap::poweredWeighting(int exponent) { } centralHitPointError.first = sqrt(numerator_x/denominator); centralHitPointError.second = sqrt(numerator_y/denominator); -} +}; @@ -149,6 +163,9 @@ ParticleTrack::~ParticleTrack(){ }; void ParticleTrack::addFitPoint(SensorHitMap* sensor){ + if (sensor->getZ()==2. || sensor->getZ()==8.7) + std::cout<<"z = "<getZ()<<" x = "<getCenterPosition().first<<"+/-"<getCenterPositionError().first<<" y = "<getCenterPosition().second<<"+/-"<getCenterPositionError().second<getCenterPosition().first); x_err.push_back(sensor->getCenterPositionError().first); y.push_back(sensor->getCenterPosition().second); diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 71f640a..56814a2 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -70,7 +70,7 @@ options.output = "test_output.root" -options.maxEvents = -1 +options.maxEvents = 29 options.parseArguments() @@ -109,7 +109,7 @@ runEnergyMapFile = cms.untracked.string("CondObjects/data/runEnergies.txt"), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered - #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,run) for run in range(options.runNumber, options.runNumber+3)]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED nSpills=cms.untracked.uint32(options.nSpills), ) @@ -126,7 +126,8 @@ process.position_resolution_analyzer.weightingMethod = cms.string("squaredWeighting") process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") -process.position_resolution_analyzer.make2DGraphs = False #only for debugging +process.position_resolution_analyzer.make2DGraphs = True #only for debugging +process.position_resolution_analyzer.pedestalThreshold = 30#-99999 process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", From 28aacc580d31c3dbd2357a3fc254545b5a90ae20 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 13:09:11 +0100 Subject: [PATCH 080/297] [reader] add comment ('//' at the beginning of the config file) parsing --- RawToDigi/plugins/HGCalTBTextSource.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 80e162d..1d162c9 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -21,7 +21,12 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { readCounter++; map_file >> fragment; if (readCounter <= 4) continue; //skip the header - else if (readCounter % 4 == 1) _run = atoi(fragment); + else if (readCounter % 4 == 1) { + if (((std::string)fragment).find("//") == std::string::npos) //skip comments of form // + _run = atoi(fragment); + else + readCounter = 1; + } else if (readCounter % 4 == 2) _energy = atof(fragment); else if (readCounter % 4 == 3) _runType = (std::string)fragment; else if (readCounter % 4 == 0) { From d4498ef64b133e13e03088404c57ceb37a723871 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 13:32:57 +0100 Subject: [PATCH 081/297] [position resolution] logarithmic weighting --- Reco/interface/PositionResolutionHelpers.h | 7 ++- Reco/plugins/Position_Resolution_Analyzer.cc | 6 ++ Reco/src/PositionResolutionHelpers.cc | 61 +++++++++++++++----- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 4d1099a..89603aa 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -24,7 +24,10 @@ enum WeightingMethod { DEFAULTWEIGHTING, SQUAREDWEIGHTING, - LINEARWEIGHTING + LINEARWEIGHTING, + LOGWEIGHTING_45_10, + LOGWEIGHTING_45_20, + LOGWEIGHTING_35_10 }; enum TrackFittingMethod { @@ -53,6 +56,8 @@ class SensorHitMap { std::map pedestalCount; void poweredWeighting(int exponent); + + void logWeighting(double log_a, double log_b); public: SensorHitMap(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 3628780..8ffd50a 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -87,6 +87,12 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; + else if (methodString == "logWeighting_4.5_1.0") + weightingMethod = LOGWEIGHTING_45_10; + else if (methodString == "logWeighting_4.5_2.0") + weightingMethod = LOGWEIGHTING_45_20; + else if (methodString == "logWeighting_3.5_1.0") + weightingMethod = LOGWEIGHTING_35_10; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 8ec7739..5942a35 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -91,6 +91,15 @@ void SensorHitMap::calculateCenterPosition(WeightingMethod method) { case LINEARWEIGHTING: SensorHitMap::poweredWeighting(1); break; + case LOGWEIGHTING_45_10: + SensorHitMap::logWeighting(4.5, 1.0); + break; + case LOGWEIGHTING_45_20: + SensorHitMap::logWeighting(4.5, 2.0); + break; + case LOGWEIGHTING_35_10: + SensorHitMap::logWeighting(3.5, 1.0); + break; //case NEWMETHOD: //SensorHitMap::newWeightingFunction() //break; @@ -109,33 +118,60 @@ std::pair SensorHitMap::getCenterPositionError() { //private functions void SensorHitMap::poweredWeighting(int exponent) { - double threshold = 0.0; //TODO: maybe as parameter double numerator_x, numerator_y, denominator; double w; - bool _debug = (layerZ==2. || layerZ==8.7); - if (_debug) { - std::cout<::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum - std::cout<<"Weight: "<x<<" y: "<<(*hit)->y<::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum + denominator += w; + numerator_x += w*(*hit)->x; + numerator_y += w*(*hit)->y; + } + centralHitPoint.first = numerator_x/denominator; + centralHitPoint.second = numerator_y/denominator; + + //calculate the RMs + numerator_x = numerator_y = 0.0; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; + numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); + numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } + centralHitPointError.first = sqrt(numerator_x/denominator); + centralHitPointError.second = sqrt(numerator_y/denominator); +}; +void SensorHitMap::logWeighting(double log_a, double log_b) { + double I_max = 0; //determine the 'intensity' maximum first + double I_i = 0; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + I_max += I_i; + } + + double numerator_x, numerator_y, denominator; + double w; numerator_x = numerator_y = denominator = 0; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + if (I_i == 0.) continue; + w = std::max(log_a + log_b*log(I_i/I_max), 0.0); denominator += w; numerator_x += w*(*hit)->x; - numerator_y += w*(*hit)->y; + numerator_y += w*(*hit)->y; } + centralHitPoint.first = numerator_x/denominator; centralHitPoint.second = numerator_y/denominator; //calculate the RMs numerator_x = numerator_y = 0.0; for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - w = (*hit)->I >= threshold ? pow((*hit)->I, exponent) : 0.0; + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + if (I_i == 0.) continue; + w = std::max(log_a + log_b*log(I_i/I_max), 0.0); numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } @@ -163,9 +199,6 @@ ParticleTrack::~ParticleTrack(){ }; void ParticleTrack::addFitPoint(SensorHitMap* sensor){ - if (sensor->getZ()==2. || sensor->getZ()==8.7) - std::cout<<"z = "<getZ()<<" x = "<getCenterPosition().first<<"+/-"<getCenterPositionError().first<<" y = "<getCenterPosition().second<<"+/-"<getCenterPositionError().second<getCenterPosition().first); x_err.push_back(sensor->getCenterPositionError().first); y.push_back(sensor->getCenterPosition().second); From 317a6e6ed2054cff667ccac44c64f5b5920a2194 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 13:47:31 +0100 Subject: [PATCH 082/297] [position resolution] save failed hits counter for each run individually --- Reco/plugins/Position_Resolution_Analyzer.cc | 46 ++++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 8ffd50a..6c01057 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -59,8 +59,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer successfulFitCounter, failedFitCounter; + double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram, those are defined globally for subsequent adding of runs //stuff to be written to objects at the end, first is the energy, second the layer thickness, third the run and last the layer int std::map > > > >deviations; @@ -111,9 +111,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //making 2DGraphs per event? make2DGraphs = iConfig.getParameter("make2DGraphs"); - //initiate some counters that are printed at the end - successfulFitCounter = failedFitCounter = 0; - + //initiate the minimum and maximum values for the deviation min_deviation = pow(10., 12); max_deviation = -1.; @@ -139,6 +137,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::cout<<"Run is not in configuration file - is ignored."< Rechits; @@ -166,7 +167,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } - //step 3: fill particle tracks std::map Tracks; //the integer index indicates which layer is omitted in the track calculation for (int i=1; i<=nLayers; i++) { @@ -185,17 +185,15 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E y_predicted = Tracks[i]->calculatePositionXY(layerZ).second; if (x_predicted==0 && y_predicted==0) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented - failedFitCounter++; + failedFitCounter[run]++; continue; //ignore those cases but count them } - successfulFitCounter++; + successfulFitCounter[run]++; x_true = Sensors[i]->getCenterPosition().first; y_true = Sensors[i]->getCenterPosition().second; - deviation = pow(x_predicted - x_true, 2); - deviation += pow(y_predicted - y_true, 2); - deviation = sqrt(deviation); + deviation = sqrt( pow(x_predicted - x_true, 2) + pow(y_predicted - y_true, 2) ); deviations[energy][layerThickness][run][i].push_back(deviation); //update the deviations on the fly @@ -214,25 +212,18 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); + x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); } - - //Todo: 1. cleanup to avoid memory leak for many events, try to install cmssw on local machine for that!!! - //2. look at Andre's weighting/fitting - - //clear: - //loop over entries and delete manually by hand before clearing the maps - + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; }; Sensors.clear(); - for(std::map::iterator it=Tracks.begin(); it!=Tracks.end(); it++) { delete (*it).second; }; Tracks.clear(); - x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); }// analyze ends here @@ -242,11 +233,16 @@ void Position_Resolution_Analyzer::beginJob() { void Position_Resolution_Analyzer::endJob() { std::cout<<"*************************************************"<::iterator it; + for (it = successfulFitCounter.begin(); it != successfulFitCounter.end(); it++) { + std::cout<<"RUN: "<<(*it).first< > > >deviations; std::map > > > >::iterator it1; TFileDirectory subDir1; @@ -254,11 +250,15 @@ void Position_Resolution_Analyzer::endJob() { TFileDirectory subDir2; std::map > >::iterator it3; + //create subdirectory system for (it1=deviations.begin(); it1!=deviations.end(); it1++) { subDir1 = this->fs->mkdir(std::to_string((*it1).first).c_str()); + std::cout<<"E: "<(*it1).first<<"..."<(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); From ac6e937afaa96443430181a0e9988f83b99b6a90 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 13:55:06 +0100 Subject: [PATCH 083/297] [process setup] set process.MessageLogger.cerr.FwkReport.reportEvery parameter --- test_cfg_newEB.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 56814a2..43b02f3 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -68,9 +68,15 @@ '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') +options.register('reportEvery', + 100, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Frequency of event count print outs on the console') + options.output = "test_output.root" -options.maxEvents = 29 +options.maxEvents = -1 options.parseArguments() @@ -98,6 +104,11 @@ input = cms.untracked.int32(options.maxEvents) ) +#################################### +# Reduces the frequency of event count couts +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = options.reportEvery + #################################### process.load('HGCal.StandardSequences.RawToDigi_cff') process.load('HGCal.StandardSequences.LocalReco_cff') @@ -124,9 +135,9 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') -process.position_resolution_analyzer.weightingMethod = cms.string("squaredWeighting") +process.position_resolution_analyzer.weightingMethod = cms.string("logWeighting_4.5_1.0") process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") -process.position_resolution_analyzer.make2DGraphs = True #only for debugging +process.position_resolution_analyzer.make2DGraphs = False #only for debugging process.position_resolution_analyzer.pedestalThreshold = 30#-99999 From 20161aaa6f6d1aaf6cef10ca427a412da50857a3 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 14:09:21 +0100 Subject: [PATCH 084/297] [position resolution] TGraph2D only for indicated events --- Reco/plugins/Position_Resolution_Analyzer.cc | 31 +++++++++++++------- Reco/python/position_resolution_cfi.py | 2 +- test_cfg_newEB.py | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 6c01057..1275dc7 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -13,6 +13,7 @@ #include #include #include +#include #include #include // user include files @@ -53,7 +54,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer EventsFor2DGraphs; double pedestalThreshold; std::vector Layer_Z_Positions; int nLayers; @@ -109,9 +110,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS Layer_Z_Positions = iConfig.getParameter >("Layer_Z_Positions"); //making 2DGraphs per event? - make2DGraphs = iConfig.getParameter("make2DGraphs"); + EventsFor2DGraphs = iConfig.getParameter >("EventsFor2DGraphs"); - //initiate the minimum and maximum values for the deviation min_deviation = pow(10., 12); max_deviation = -1.; @@ -137,6 +137,15 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::cout<<"Run is not in configuration file - is ignored."<::iterator findPosition = std::find(EventsFor2DGraphs.begin(), EventsFor2DGraphs.end(), evId); + if (findPosition != EventsFor2DGraphs.end()) { + make2DGraphs = true; + EventsFor2DGraphs.erase(findPosition); + } + //initialize new fit counters in case this is a new run: if (successfulFitCounter.find(run) == successfulFitCounter.end()) successfulFitCounter[run] = failedFitCounter[run] = 0; @@ -200,12 +209,14 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E min_deviation = min_deviation > deviation ? deviation: min_deviation; max_deviation = max_deviation < deviation ? deviation: max_deviation; - //store for the two 2D graphs that are written per event - x_predicted_v.push_back(x_predicted); - y_predicted_v.push_back(y_predicted); - x_true_v.push_back(x_true); - y_true_v.push_back(y_true); - layerZ_v.push_back(layerZ); + if (make2DGraphs) { + //store for the two 2D graphs that are written per event + x_predicted_v.push_back(x_predicted); + y_predicted_v.push_back(y_predicted); + x_true_v.push_back(x_true); + y_true_v.push_back(y_true); + layerZ_v.push_back(layerZ); + } } if (make2DGraphs) { @@ -253,7 +264,7 @@ void Position_Resolution_Analyzer::endJob() { //create subdirectory system for (it1=deviations.begin(); it1!=deviations.end(); it1++) { subDir1 = this->fs->mkdir(std::to_string((*it1).first).c_str()); - std::cout<<"E: "<(*it1).first<<"..."< Date: Tue, 22 Nov 2016 14:47:19 +0100 Subject: [PATCH 085/297] [process setup] define command line arguments for the position resolution for extensive tests --- test_cfg_newEB.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index b0b2003..61f0a7f 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -19,6 +19,11 @@ VarParsing.VarParsing.varType.string, 'Result of processing') +options.register('outputPostfix', + 'default', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Postfix to the output file') # options.register('commonPrefix', # '', # VarParsing.VarParsing.multiplicity.singleton, @@ -67,7 +72,6 @@ VarParsing.VarParsing.varType.string, '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') - options.register('reportEvery', 100, VarParsing.VarParsing.multiplicity.singleton, @@ -75,6 +79,28 @@ 'Frequency of event count print outs on the console') +'''Specific options for the position resolution''' + +options.register('weightingMethod', + 'squaredWeighting', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_4.5_1.0, logWeighting_4.5_2.0, logWeighting_3.5_1.0 ' + ) +options.register('fittingMethod', + 'lineTGraphErrors', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Possible arguments are: lineTGraphErrors' + ) +options.register('pedestalThreshold', + 30., + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.float, + 'Threshold for the pedestal subtraction calculation in the position resolution plugin. -99999 corresponds to no thresold.' + ) + + options.output = "test_output.root" options.maxEvents = -1 @@ -135,10 +161,10 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') -process.position_resolution_analyzer.weightingMethod = cms.string("logWeighting_4.5_1.0") -process.position_resolution_analyzer.fittingMethod = cms.string("lineTGraphErrors") +process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) +process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) process.position_resolution_analyzer.EventsFor2DGraphs = [1, 29] #first occuring events with that id are being documented with 2DGraphs -process.position_resolution_analyzer.pedestalThreshold = 30#-99999 +process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", @@ -163,7 +189,7 @@ elif (options.chainSequence == 6): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) elif (options.chainSequence == 7): - process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Position_Resolution.root"%(options.outputFolder,options.runType,options.runNumber))) + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_Position_Resolution_%s.root"%(options.outputFolder,options.runType,options.outputPostfix))) @@ -208,4 +234,4 @@ elif (options.chainSequence == 7): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.position_resolution_analyzer) -process.end = cms.EndPath(process.output) +#process.end = cms.EndPath(process.output) From 08c802a93e2df0ccb45fcbdbb1baeff8c5700358 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 14:48:06 +0100 Subject: [PATCH 086/297] [position resolution] fill configuration file --- CondObjects/data/runEnergies.txt | 72 +++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index 4e3df34..5008939 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -1,3 +1,71 @@ #RUN ENERGY[GeV] RUNTYPE ABSORBERTHICKNESS -1026 150. electron 5.7 -1027 150. electron 5.7 \ No newline at end of file +857 150. electron 5.7 +858 150. electron 5.7 +859 150. electron 5.7 +//860 150. electron 5.7 +//862 150. electron 5.7 +866 70. electron 5.7 +867 70. electron 5.7 +878 70. electron 5.7 +//879 70. electron 5.7 +//880 70. electron 5.7 +920 20. electron 5.7 +921 20. electron 5.7 +922 20. electron 5.7 +//923 20. electron 5.7 +//924 20. electron 5.7 +945 250. electron 5.7 +946 250. electron 5.7 +947 250. electron 5.7 +//948 250. electron 5.7 +//949 250. electron 5.7 +1038 200. electron 5.7 +1039 200. electron 5.7 +1040 200. electron 5.7 +//1041 200. electron 5.7 +//1042 200. electron 5.7 +1069 100. electron 5.7 +1070 100. electron 5.7 +1071 100. electron 5.7 +//1072 100. electron 5.7 +//1073 100. electron 5.7 +1091 32. electron 5.7 +1092 32. electron 5.7 +1093 32. electron 5.7 +//1094 32. electron 5.7 +//1095 32. electron 5.7 +1125 150. electron 25.0 +1126 150. electron 25.0 +1128 150. electron 25.0 +//1129 150. electron 25.0 +//1130 150. electron 25.0 +1168 70. electron 25.0 +1169 70. electron 25.0 +1170 70. electron 25.0 +//1171 70. electron 25.0 +//1172 70. electron 25.0 +1188 200. electron 25.0 +1189 200. electron 25.0 +1190 200. electron 25.0 +//1191 200. electron 25.0 +//1192 200. electron 25.0 +1217 100. electron 25.0 +1218 100. electron 25.0 +1219 100. electron 25.0 +//1220 100. electron 25.0 +//1221 100. electron 25.0 +1240 32. electron 25.0 +1241 32. electron 25.0 +1242 32. electron 25.0 +//1243 32. electron 25.0 +//1244 32. electron 25.0 +1260 20. electron 25.0 +1261 20. electron 25.0 +1262 20. electron 25.0 +//1263 20. electron 25.0 +//1264 20. electron 25.0 +1299 250. electron 25.0 +1300 250. electron 25.0 +1301 250. electron 25.0 +//1302 250. electron 25.0 +//1303 250. electron 25.0 \ No newline at end of file From d2628d4e3e4eb33e70204ccc1fd9c8e23fb0d470 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 14:50:41 +0100 Subject: [PATCH 087/297] [position resolution] comment exception console output --- Reco/src/PositionResolutionHelpers.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 5942a35..0d2331b 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -220,7 +220,7 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ } lastAppliedMethod = method; } catch(cms::Exception& iException) { - std::cout<<"Fitting method has failed with error code "<< iException <<". Attempting the default fitting."< Date: Tue, 22 Nov 2016 15:03:30 +0100 Subject: [PATCH 088/297] for FNAL CERN comparison --- produceWeights/CERNplusFNAL.C | 251 ++++++++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 produceWeights/CERNplusFNAL.C diff --git a/produceWeights/CERNplusFNAL.C b/produceWeights/CERNplusFNAL.C new file mode 100644 index 0000000..19c3848 --- /dev/null +++ b/produceWeights/CERNplusFNAL.C @@ -0,0 +1,251 @@ +#include "TLegend.h" +#include "TLatex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TTree.h" +#include "TChain.h" +#include +#include +#include +#include "TROOT.h" +#include "TSystem.h" + + + +void CERNplusFNAL(){ + gROOT->Reset(); + gROOT->Macro("~/public/setStyle.C"); + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + + int nLayers = 8; + int config = 2; + int iColors[6] = {kRed, kBlue, kGreen+2, kCyan, kRed, kBlue}; + // int energyP[3] = {20, 70, 100, 200, 250}; + + TFile* inF[5]; + inF[0] = TFile::Open("SIM_resolution_layers8_config2.root"); + inF[1] = TFile::Open("DATA_resolution_layers8_config2.root"); + inF[2] = TFile::Open("fromFNAL/Relative_Resolution_BeamEnergy_EMM.root"); + inF[3] = TFile::Open("fromFNAL/Fractional_Response_BeamEnergy_EMM.root"); + inF[4] = TFile::Open("fromFNAL/Response_Linearity_BeamEnergy_EMM.root"); + + + TGraphErrors* tgCfgR2[6]; + TGraphErrors* tgCfgL2[6]; + TGraphErrors* tgCfgS2[6]; + tgCfgR2[0] = (TGraphErrors*)inF[0]->Get("resolution_GeV"); + tgCfgR2[1] = (TGraphErrors*)inF[1]->Get("resolution_GeV"); + tgCfgR2[2] = (TGraphErrors*)inF[2]->Get("Graph_Sim"); + tgCfgR2[3] = (TGraphErrors*)inF[2]->Get("Graph_Data"); + + tgCfgL2[0] = (TGraphErrors*)inF[0]->Get("linerity_GeV"); + tgCfgL2[1] = (TGraphErrors*)inF[1]->Get("linearity_GeV"); + tgCfgL2[2] = (TGraphErrors*)inF[4]->Get("Graph_Sim"); + tgCfgL2[3] = (TGraphErrors*)inF[4]->Get("Graph_Data"); + + tgCfgS2[0] = (TGraphErrors*)inF[0]->Get("mean_GeV"); + tgCfgS2[1] = (TGraphErrors*)inF[1]->Get("mean_GeV"); + tgCfgS2[2] = (TGraphErrors*)inF[3]->Get("Graph_Sim"); + tgCfgS2[3] = (TGraphErrors*)inF[3]->Get("Graph_Data"); + + tgCfgR2[4] = new TGraphErrors(); + tgCfgR2[5] = new TGraphErrors(); + tgCfgL2[4] = new TGraphErrors(); + tgCfgL2[5] = new TGraphErrors(); + tgCfgS2[4] = new TGraphErrors(); + tgCfgS2[5] = new TGraphErrors(); + + for(int iP=0; iP<7; ++iP){ + Double_t xP, yP; + tgCfgR2[2]->GetPoint(iP, xP, yP); + tgCfgR2[4]->SetPoint(iP, xP, yP); + Double_t ey = tgCfgR2[2]->GetErrorY(iP); + tgCfgR2[4]->SetPointError(iP, 0, ey); + + tgCfgR2[3]->GetPoint(iP, xP, yP); + tgCfgR2[5]->SetPoint(iP, xP, yP); + ey = tgCfgR2[3]->GetErrorY(iP); + tgCfgR2[5]->SetPointError(iP, 0, ey); + + tgCfgL2[2]->GetPoint(iP, xP, yP); + tgCfgL2[4]->SetPoint(iP, xP, yP/1000.); + ey = tgCfgL2[2]->GetErrorY(iP); + tgCfgL2[4]->SetPointError(iP, 0, ey/1000.); + + tgCfgL2[3]->GetPoint(iP, xP, yP); + tgCfgL2[5]->SetPoint(iP, xP, yP/1000.); + ey = tgCfgL2[3]->GetErrorY(iP); + tgCfgL2[5]->SetPointError(iP, 0, ey/1000.); + + tgCfgS2[2]->GetPoint(iP, xP, yP); + tgCfgS2[4]->SetPoint(iP, xP, yP); + ey = tgCfgS2[2]->GetErrorY(iP); + tgCfgS2[4]->SetPointError(iP, 0, ey); + + tgCfgS2[3]->GetPoint(iP, xP, yP); + tgCfgS2[5]->SetPoint(iP, xP, yP); + ey = tgCfgS2[3]->GetErrorY(iP); + tgCfgS2[5]->SetPointError(iP, 0, ey); + } + for(iP=0; iP<4; ++iP){ + Double_t xP, yP; + tgCfgR2[0]->GetPoint(iP+2, xP, yP); + tgCfgR2[4]->SetPoint(tgCfgR2[4]->GetN(), xP, yP); + Double_t ey = tgCfgR2[0]->GetErrorY(iP+2); + tgCfgR2[4]->SetPointError(tgCfgR2[4]->GetN()-1, 0, ey); + std::cout << " iP = " << iP << " x = " << xP << " y = " << yP << " eY = " << ey << std::endl; + + tgCfgR2[1]->GetPoint(iP+3, xP, yP); + tgCfgR2[5]->SetPoint(tgCfgR2[5]->GetN(), xP, yP); + ey = tgCfgR2[1]->GetErrorY(iP+3); + tgCfgR2[5]->SetPointError(tgCfgR2[5]->GetN()-1, 0, ey); + + tgCfgL2[0]->GetPoint(iP+2, xP, yP); + tgCfgL2[4]->SetPoint(tgCfgL2[4]->GetN(), xP, yP); + ey = tgCfgL2[0]->GetErrorY(iP+2); + tgCfgL2[4]->SetPointError(tgCfgL2[4]->GetN()-1, 0, ey); + + tgCfgL2[1]->GetPoint(iP+3, xP, yP); + tgCfgL2[5]->SetPoint(tgCfgL2[5]->GetN(), xP, yP); + ey = tgCfgL2[1]->GetErrorY(iP+3); + tgCfgL2[5]->SetPointError(tgCfgL2[5]->GetN()-1, 0, ey); + + tgCfgS2[0]->GetPoint(iP+2, xP, yP); + tgCfgS2[4]->SetPoint(tgCfgS2[4]->GetN(), xP, yP); + ey = tgCfgS2[0]->GetErrorY(iP+2); + tgCfgS2[4]->SetPointError(tgCfgS2[4]->GetN()-1, 0, ey); + + tgCfgS2[1]->GetPoint(iP+3, xP, yP); + tgCfgS2[5]->SetPoint(tgCfgS2[5]->GetN(), xP, yP); + ey = tgCfgS2[1]->GetErrorY(iP+3); + tgCfgS2[5]->SetPointError(tgCfgS2[5]->GetN()-1, 0, ey); + // std::cout << "scale iP = " << iP << " x = " << xP << " y = " << yP << " eY = " << ey << std::endl; + ey = tgCfgS2[5]->GetErrorY(tgCfgS2[5]->GetN()-1); + // std::cout << "scale iP = " << iP << " x = " << xP << " y = " << yP << " eY = " << ey << std::endl; + } + // tgCfgR2[4]->SetPoint(tgCfgR2[4]->GetN(), 400, 5); + // tgCfgR2[5]->SetPoint(tgCfgR2[4]->GetN(), 400, 5); + // tgCfgS2[4]->SetPoint(tgCfgS2[4]->GetN(), 400, 5); + // tgCfgS2[5]->SetPoint(tgCfgS2[4]->GetN(), 400, 5); + // tgCfgL2[4]->SetPoint(tgCfgR2[4]->GetN(), 400, 400); + // tgCfgL2[5]->SetPoint(tgCfgR2[4]->GetN(), 400, 400); + + for(int iT=0; iT<6; ++iT){ + tgCfgR2[iT]->SetMarkerStyle(20); + tgCfgR2[iT]->SetMarkerSize(1); + tgCfgR2[iT]->SetMarkerColor(iColors[iT]); + tgCfgR2[iT]->SetLineColor(iColors[iT]); + tgCfgR2[iT]->SetLineWidth(1); + + tgCfgL2[iT]->SetMarkerStyle(20); + tgCfgL2[iT]->SetMarkerSize(1); + tgCfgL2[iT]->SetMarkerColor(iColors[iT]); + tgCfgL2[iT]->SetLineColor(iColors[iT]); + tgCfgL2[iT]->SetLineWidth(1); + + tgCfgS2[iT]->SetMarkerStyle(20); + tgCfgS2[iT]->SetMarkerSize(1); + tgCfgS2[iT]->SetMarkerColor(iColors[iT]); + tgCfgS2[iT]->SetLineColor(iColors[iT]); + tgCfgS2[iT]->SetLineWidth(1); + } + + std::cout << " ci sono " << std::endl; + + TLegend *legTGM = new TLegend(0.65,0.65,0.85,0.85,NULL,"brNDC"); + legTGM->SetTextFont(42); + legTGM->SetFillColor(kWhite); + legTGM->SetLineColor(kWhite); + legTGM->SetShadowColor(kWhite); + // legTGM->AddEntry(tgCfgR2[0], "CERN sim", "pl"); + // legTGM->AddEntry(tgCfgR2[1], "CERN data", "pl"); + // legTGM->AddEntry(tgCfgR2[2], "FNAL sim", "pl"); + // legTGM->AddEntry(tgCfgR2[3], "FNAL data", "pl"); + legTGM->AddEntry(tgCfgR2[4], "sim combined", "pl"); + legTGM->AddEntry(tgCfgR2[5], "data combined", "pl"); + // legTGM->AddEntry(tgCfg1[2], "data Mip", "l"); + + + gStyle->SetOptFit(1); + TF1* fitReso = new TF1("fitReso", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 2., 300.); + fitReso->SetParName(0, "S"); + fitReso->SetParName(1, "N"); + fitReso->SetParName(2, "C"); + fitReso->SetParLimits(1, 0., 0.16); + + // tgCfgR2[4]->Fit("fitReso", "R"); + fitReso->SetLineColor(kRed); + fitReso->SetLineWidth(2); + + TF1* fitReso_D = new TF1("fitReso_D", "sqrt( pow([0]/sqrt(x), 2.) + pow([1]/x, 2.) + pow([2], 2.))", 2., 300.); + fitReso_D->SetParName(0, "S"); + fitReso_D->SetParName(1, "N"); + fitReso_D->SetParName(2, "C"); + fitReso_D->SetParLimits(1, 0., 0.16); + + // tgCfgR2[5]->Fit("fitReso_D", "R"); + fitReso_D->SetLineColor(kBlue); + fitReso_D->SetLineWidth(2); + + TCanvas* chER = new TCanvas(); + chER->cd(); + tgCfgR2[4]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfgR2[4]->GetYaxis()->SetTitle("#sigma(#SigmaE)/ <#SigmaE>"); + tgCfgR2[4]->GetXaxis()->SetRangeUser(0., 300.); + tgCfgR2[4]->GetYaxis()->SetRangeUser(0., 0.3); + tgCfgR2[4]->Draw("ap"); + tgCfgR2[5]->Draw("p, same"); + // tgCfgR2[0]->Draw("p, same"); + // tgCfgR2[1]->Draw("p, same"); + // tgCfgR2[2]->Draw("p, same"); + // tgCfgR2[3]->Draw("p, same"); + // fitReso_D->Draw("same"); + // fitReso->Draw("same"); + legTGM->Draw("same"); + chER->Print("CERNFNAL/resolution.png", "png"); + chER->Print("CERNFNAL/resolution.root", "root"); + + // + TCanvas* chES = new TCanvas(); + chES->cd(); + tgCfgS2[4]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfgS2[4]->GetYaxis()->SetTitle("<#SigmaE>/ beam energy"); + tgCfgS2[4]->GetXaxis()->SetRangeUser(0., 300.); + tgCfgS2[4]->GetYaxis()->SetRangeUser(0., 1.1); + tgCfgS2[4]->Draw("ap"); + tgCfgS2[5]->Draw("p, same"); + // tgCfgS2[0]->Draw("p, same"); + // tgCfgS2[1]->Draw("p, same"); + // tgCfgS2[2]->Draw("p, same"); + // tgCfgS2[3]->Draw("p, same"); + legTGM->Draw("same"); + chES->Print("CERNFNAL/scale.png", "png"); + chES->Print("CERNFNAL/scale.root", "root"); + + + TCanvas* chEL = new TCanvas(); + chEL->cd(); + tgCfgL2[4]->GetXaxis()->SetTitle("beam energy GeV"); + tgCfgL2[4]->GetYaxis()->SetTitle("<#SigmaE> GeV"); + tgCfgL2[4]->GetXaxis()->SetRangeUser(0., 300.); + tgCfgL2[4]->GetYaxis()->SetRangeUser(0., 300.); + tgCfgL2[4]->Draw("ap"); + tgCfgL2[5]->Draw("p, same"); + // tgCfgL2[0]->Draw("p, same"); + // tgCfgL2[1]->Draw("p, same"); + // tgCfgL2[2]->Draw("p, same"); + // tgCfgL2[3]->Draw("p, same"); + legTGM->Draw("same"); + chEL->Print("CERNFNAL/linearity.png", "png"); + chEL->Print("CERNFNAL/linearity.root", "root"); + + +} From 275a7313a92cc7f338f78ab49812edb255f14edf Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 22 Nov 2016 15:35:08 +0100 Subject: [PATCH 089/297] fixes --- 8layers_cfg2/addAll.sh | 18 ++++++++++ 8layers_cfg2/lancia100GeVAll.sh | 18 ++++++++++ 8layers_cfg2/lancia150GeVAll.sh | 26 ++++++++++++++ 8layers_cfg2/lancia200GeVAll.sh | 21 ++++++++++++ 8layers_cfg2/lancia20GeVAll.sh | 20 +++++++++++ 8layers_cfg2/lancia250GeVAll.sh | 20 +++++++++++ 8layers_cfg2/lancia32GeVAll.sh | 20 +++++++++++ 8layers_cfg2/lancia70GeVAll.sh | 21 ++++++++++++ 8layers_cfg2/lanciaAll.sh | 1 + Reco/plugins/Layer_Sum_Analyzer.cc | 54 +++++++++++++++--------------- 10 files changed, 192 insertions(+), 27 deletions(-) create mode 100644 8layers_cfg2/addAll.sh create mode 100644 8layers_cfg2/lancia100GeVAll.sh create mode 100644 8layers_cfg2/lancia150GeVAll.sh create mode 100644 8layers_cfg2/lancia200GeVAll.sh create mode 100644 8layers_cfg2/lancia20GeVAll.sh create mode 100644 8layers_cfg2/lancia250GeVAll.sh create mode 100644 8layers_cfg2/lancia32GeVAll.sh create mode 100644 8layers_cfg2/lancia70GeVAll.sh diff --git a/8layers_cfg2/addAll.sh b/8layers_cfg2/addAll.sh new file mode 100644 index 0000000..250b107 --- /dev/null +++ b/8layers_cfg2/addAll.sh @@ -0,0 +1,18 @@ +hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_001248_Reco.root /tmp/amartell/output/HGCRun_Output_001249_Reco.root /tmp/amartell/output/HGCRun_Output_001250_Reco.root /tmp/amartell/output/HGCRun_Output_001251_Reco.root /tmp/amartell/output/HGCRun_Output_001253_Reco.root /tmp/amartell/output/HGCRun_Output_001254_Reco.root /tmp/amartell/output/HGCRun_Output_001255_Reco.root /tmp/amartell/output/HGCRun_Output_001256_Reco.root /tmp/amartell/output/HGCRun_Output_001257_Reco.root /tmp/amartell/output/HGCRun_Output_001259_Reco.root /tmp/amartell/output/HGCRun_Output_001260_Reco.root /tmp/amartell/output/HGCRun_Output_001261_Reco.root /tmp/amartell/output/HGCRun_Output_001262_Reco.root /tmp/amartell/output/HGCRun_Output_001263_Reco.root /tmp/amartell/output/HGCRun_Output_001264_Reco.root /tmp/amartell/output/HGCRun_Output_001265_Reco.root /tmp/amartell/output/HGCRun_Output_001266_Reco.root /tmp/amartell/output/HGCRun_Output_001267_Reco.root /tmp/amartell/output/HGCRun_Output_001270_Reco.root + +hadd /tmp/amartell/32GeV.root /tmp/amartell/output/HGCRun_Output_001226_Reco.root /tmp/amartell/output/HGCRun_Output_001227_Reco.root /tmp/amartell/output/HGCRun_Output_001228_Reco.root /tmp/amartell/output/HGCRun_Output_001229_Reco.root /tmp/amartell/output/HGCRun_Output_001230_Reco.root /tmp/amartell/output/HGCRun_Output_001231_Reco.root /tmp/amartell/output/HGCRun_Output_001233_Reco.root /tmp/amartell/output/HGCRun_Output_001235_Reco.root /tmp/amartell/output/HGCRun_Output_001236_Reco.root /tmp/amartell/output/HGCRun_Output_001237_Reco.root /tmp/amartell/output/HGCRun_Output_001238_Reco.root /tmp/amartell/output/HGCRun_Output_001239_Reco.root /tmp/amartell/output/HGCRun_Output_001240_Reco.root /tmp/amartell/output/HGCRun_Output_001241_Reco.root /tmp/amartell/output/HGCRun_Output_001242_Reco.root /tmp/amartell/output/HGCRun_Output_001243_Reco.root /tmp/amartell/output/HGCRun_Output_001244_Reco.root /tmp/amartell/output/HGCRun_Output_001245_Reco.root /tmp/amartell/output/HGCRun_Output_001246_Reco.root /tmp/amartell/output/HGCRun_Output_001247_Reco.root + + +hadd /tmp/amartell/70GeV.root /tmp/amartell/output/HGCRun_Output_001153_Reco.root /tmp/amartell/output/HGCRun_Output_001154_Reco.root /tmp/amartell/output/HGCRun_Output_001155_Reco.root /tmp/amartell/output/HGCRun_Output_001156_Reco.root /tmp/amartell/output/HGCRun_Output_001157_Reco.root /tmp/amartell/output/HGCRun_Output_001158_Reco.root /tmp/amartell/output/HGCRun_Output_001159_Reco.root /tmp/amartell/output/HGCRun_Output_001160_Reco.root /tmp/amartell/output/HGCRun_Output_001161_Reco.root /tmp/amartell/output/HGCRun_Output_001162_Reco.root /tmp/amartell/output/HGCRun_Output_001163_Reco.root /tmp/amartell/output/HGCRun_Output_001164_Reco.root /tmp/amartell/output/HGCRun_Output_001165_Reco.root /tmp/amartell/output/HGCRun_Output_001166_Reco.root /tmp/amartell/output/HGCRun_Output_001167_Reco.root /tmp/amartell/output/HGCRun_Output_001168_Reco.root /tmp/amartell/output/HGCRun_Output_001169_Reco.root /tmp/amartell/output/HGCRun_Output_001170_Reco.root /tmp/amartell/output/HGCRun_Output_001171_Reco.root /tmp/amartell/output/HGCRun_Output_001172_Reco.root /tmp/amartell/output/HGCRun_Output_001173_Reco.root + + +hadd /tmp/amartell/100GeV.root /tmp/amartell/output/HGCRun_Output_001202_Reco.root /tmp/amartell/output/HGCRun_Output_001203_Reco.root /tmp/amartell/output/HGCRun_Output_001204_Reco.root /tmp/amartell/output/HGCRun_Output_001205_Reco.root /tmp/amartell/output/HGCRun_Output_001206_Reco.root /tmp/amartell/output/HGCRun_Output_001207_Reco.root /tmp/amartell/output/HGCRun_Output_001208_Reco.root /tmp/amartell/output/HGCRun_Output_001213_Reco.root /tmp/amartell/output/HGCRun_Output_001214_Reco.root /tmp/amartell/output/HGCRun_Output_001215_Reco.root /tmp/amartell/output/HGCRun_Output_001216_Reco.root /tmp/amartell/output/HGCRun_Output_001217_Reco.root /tmp/amartell/output/HGCRun_Output_001218_Reco.root /tmp/amartell/output/HGCRun_Output_001219_Reco.root /tmp/amartell/output/HGCRun_Output_001220_Reco.root /tmp/amartell/output/HGCRun_Output_001221_Reco.root /tmp/amartell/output/HGCRun_Output_001222_Reco.root /tmp/amartell/output/HGCRun_Output_001223_Reco.root + +hadd /tmp/amartell/150GeV.root /tmp/amartell/output/HGCRun_Output_001122_Reco.root /tmp/amartell/output/HGCRun_Output_001123_Reco.root /tmp/amartell/output/HGCRun_Output_001124_Reco.root /tmp/amartell/output/HGCRun_Output_001125_Reco.root /tmp/amartell/output/HGCRun_Output_001126_Reco.root /tmp/amartell/output/HGCRun_Output_001127_Reco.root /tmp/amartell/output/HGCRun_Output_001128_Reco.root /tmp/amartell/output/HGCRun_Output_001129_Reco.root /tmp/amartell/output/HGCRun_Output_001130_Reco.root /tmp/amartell/output/HGCRun_Output_001131_Reco.root /tmp/amartell/output/HGCRun_Output_001132_Reco.root /tmp/amartell/output/HGCRun_Output_001133_Reco.root /tmp/amartell/output/HGCRun_Output_001134_Reco.root /tmp/amartell/output/HGCRun_Output_001137_Reco.root /tmp/amartell/output/HGCRun_Output_001138_Reco.root /tmp/amartell/output/HGCRun_Output_001141_Reco.root /tmp/amartell/output/HGCRun_Output_001142_Reco.root /tmp/amartell/output/HGCRun_Output_001143_Reco.root /tmp/amartell/output/HGCRun_Output_001144_Reco.root /tmp/amartell/output/HGCRun_Output_001145_Reco.root /tmp/amartell/output/HGCRun_Output_001146_Reco.root /tmp/amartell/output/HGCRun_Output_001147_Reco.root /tmp/amartell/output/HGCRun_Output_001148_Reco.root /tmp/amartell/output/HGCRun_Output_001149_Reco.root /tmp/amartell/output/HGCRun_Output_001150_Reco.root /tmp/amartell/output/HGCRun_Output_001151_Reco.root + + +hadd /tmp/amartell/200GeV.root /tmp/amartell/output/HGCRun_Output_001179_Reco.root /tmp/amartell/output/HGCRun_Output_001180_Reco.root /tmp/amartell/output/HGCRun_Output_001181_Reco.root /tmp/amartell/output/HGCRun_Output_001182_Reco.root /tmp/amartell/output/HGCRun_Output_001183_Reco.root /tmp/amartell/output/HGCRun_Output_001184_Reco.root /tmp/amartell/output/HGCRun_Output_001185_Reco.root /tmp/amartell/output/HGCRun_Output_001186_Reco.root /tmp/amartell/output/HGCRun_Output_001187_Reco.root /tmp/amartell/output/HGCRun_Output_001188_Reco.root /tmp/amartell/output/HGCRun_Output_001189_Reco.root /tmp/amartell/output/HGCRun_Output_001190_Reco.root /tmp/amartell/output/HGCRun_Output_001191_Reco.root /tmp/amartell/output/HGCRun_Output_001192_Reco.root /tmp/amartell/output/HGCRun_Output_001193_Reco.root /tmp/amartell/output/HGCRun_Output_001194_Reco.root /tmp/amartell/output/HGCRun_Output_001195_Reco.root /tmp/amartell/output/HGCRun_Output_001196_Reco.root /tmp/amartell/output/HGCRun_Output_001197_Reco.root /tmp/amartell/output/HGCRun_Output_001198_Reco.root /tmp/amartell/output/HGCRun_Output_001199_Reco.root + + +hadd /tmp/amartell/250GeV.root /tmp/amartell/output/HGCRun_Output_001291_Reco.root /tmp/amartell/output/HGCRun_Output_001292_Reco.root /tmp/amartell/output/HGCRun_Output_001293_Reco.root /tmp/amartell/output/HGCRun_Output_001294_Reco.root /tmp/amartell/output/HGCRun_Output_001295_Reco.root /tmp/amartell/output/HGCRun_Output_001296_Reco.root /tmp/amartell/output/HGCRun_Output_001297_Reco.root /tmp/amartell/output/HGCRun_Output_001298_Reco.root /tmp/amartell/output/HGCRun_Output_001299_Reco.root /tmp/amartell/output/HGCRun_Output_001300_Reco.root /tmp/amartell/output/HGCRun_Output_001301_Reco.root /tmp/amartell/output/HGCRun_Output_001302_Reco.root /tmp/amartell/output/HGCRun_Output_001303_Reco.root /tmp/amartell/output/HGCRun_Output_001304_Reco.root /tmp/amartell/output/HGCRun_Output_001305_Reco.root /tmp/amartell/output/HGCRun_Output_001306_Reco.root /tmp/amartell/output/HGCRun_Output_001307_Reco.root /tmp/amartell/output/HGCRun_Output_001308_Reco.root /tmp/amartell/output/HGCRun_Output_001309_Reco.root /tmp/amartell/output/HGCRun_Output_001310_Reco.root + diff --git a/8layers_cfg2/lancia100GeVAll.sh b/8layers_cfg2/lancia100GeVAll.sh new file mode 100644 index 0000000..4e47269 --- /dev/null +++ b/8layers_cfg2/lancia100GeVAll.sh @@ -0,0 +1,18 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia150GeVAll.sh b/8layers_cfg2/lancia150GeVAll.sh new file mode 100644 index 0000000..0a4c75c --- /dev/null +++ b/8layers_cfg2/lancia150GeVAll.sh @@ -0,0 +1,26 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1122 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1123 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1124 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1125 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1126 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1127 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1128 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1129 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1130 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1131 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1132 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1133 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1134 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1137 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1138 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1141 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1142 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1143 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1144 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1145 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1146 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1147 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1148 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1149 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1150 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1151 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia200GeVAll.sh b/8layers_cfg2/lancia200GeVAll.sh new file mode 100644 index 0000000..ecb28ca --- /dev/null +++ b/8layers_cfg2/lancia200GeVAll.sh @@ -0,0 +1,21 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia20GeVAll.sh b/8layers_cfg2/lancia20GeVAll.sh new file mode 100644 index 0000000..11d688d --- /dev/null +++ b/8layers_cfg2/lancia20GeVAll.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun + diff --git a/8layers_cfg2/lancia250GeVAll.sh b/8layers_cfg2/lancia250GeVAll.sh new file mode 100644 index 0000000..c3ab813 --- /dev/null +++ b/8layers_cfg2/lancia250GeVAll.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia32GeVAll.sh b/8layers_cfg2/lancia32GeVAll.sh new file mode 100644 index 0000000..06d0e9b --- /dev/null +++ b/8layers_cfg2/lancia32GeVAll.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia70GeVAll.sh b/8layers_cfg2/lancia70GeVAll.sh new file mode 100644 index 0000000..0a53926 --- /dev/null +++ b/8layers_cfg2/lancia70GeVAll.sh @@ -0,0 +1,21 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh index bf6d56d..ce63f15 100644 --- a/8layers_cfg2/lanciaAll.sh +++ b/8layers_cfg2/lanciaAll.sh @@ -1,4 +1,5 @@ source lancia100GeV.sh +source lancia150GeV.sh source lancia200GeV.sh source lancia20GeV.sh source lancia250GeV.sh diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 0450aa9..f93a688 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -51,29 +51,29 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD //double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; -//double ADCtoMIP_CERN[16] = {17.32, 17.16, 16.45, 17.39, 17.75, 17.27, 16.55, 16.25, 17.52, 17.18, 17.10, 17.88, 15.87, 16.71, 16.92, 15.72}; -//double ADCtoMIP_CERN[16] = {17.287,16.9493,17.9461,16.5649,17.4171,17.5042,16.1005,16.4102, 1., 1., 1., 1., 1., 1., 1., 1.}; +//TO BE FIXED for FNAL +double ADCtoMIP_FNAL[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43}; double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; -double ADCtoMIP_FNAL[16] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; - +//// for EMM physics list 28 configuration get the calibration factors (1.e-06 GeV) // pion MPV = 55.16; // muon MPV = 51.91; // muon Mean = 63.28; +//using MPV muon +double MIP2ParticleCalib = 0.94; // CERN mpv muon to pion 125GeV EMM physics list +double MIP2GeV_sim = 51.91e-06; //mpv muon EMM pysics list -//500MeV muon/125GeV pion -double MIP2ParticleCalib = 1.147; // CERN mean muon to pion 125GeV EMM physics list -//double MIP2ParticleCalib = 0.94; // CERN mpv muon to pion 125GeV EMM physics list - +//using Mean muon +//double MIP2GeV_sim = 63.28e-06; //mean muon EMM physics list +//double MIP2ParticleCalib = 1.147; // CERN mean muon to pion 125GeV EMM physics list -//double ADCtoMIP[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43};// one MIP is equal to _ADCtoMIP_ ADC Counts -//double LayerWeight[16] = {0.6374029601923652, 0.7392021202456731, 0.6374273268336504, 0.7392021202456731, 0.6374273268336504, 0.8861075434658853, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.0330129666860974, 0.8487578715427883, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714, 1.2714189609610644, 1.5226977107534714};// X0 weights - -//double LayerWeight[16] = {1.4091566745180932, 0.7020676448403224, 0.6054055986179145, 0.7020676448403224, 0.6054055986179145, 0.8415931435769973, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 0.9811186423136724, 0.8061197656138868, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891, 1.2075480996058319, 1.4462036381025891}; +//useless set to 1 +double weights2MIP = 1.; // rescale weights from mean to MPV -double LayerWeight_16L_FNAL[16] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; +//TO BE FIXED for FNAL +double LayerWeight_16L_FNAL[16] = {7.313, 7.313, 7.313, 7.313, 7.905, 8.678, 9.27, 9.27, 9.27, 9.27, 11.242, 12.789, 12.789, 12.789, 12.789, 8.148}; double X0depth_16L_FNAL[16] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}; double LayerWeight_8L_conf1[16] = {33.074, 13.184, 14.17, 9.788, 9.766, 9.766, 16.339, 14.129, 0., 0., 0., 0., 0., 0., 0., 0.}; @@ -82,17 +82,8 @@ double LayerWeight_8L_conf2[16] = {35.866, 30.864, 28.803, 23.095, 20.657, 19.80 double X0depth_8L_conf2[16] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021, 0., 0., 0., 0., 0., 0., 0., 0.}; double weights2GeV = 1.e-03; -double MIP2GeV_sim = 63.28e-06; //mean muon EMM physics list -//double MIP2GeV_sim = 51.91e-06; //mpv muon EMM pysics list - -double weights2MIP = 1.; // rescale weights from mean to MPV - -//double LayerWeight[16] = {0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.0214605968539232, 0.4847555727337982, 1.1420105918768606, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.2625605868997982, 0.6423912113800805, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232, 0.9576624886726451, 1.6643939036429232};// dE/dx weights - -//double LayerSumWeight = 1.; -//const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum -const int CMTHRESHOLD = 2;// anything less than this value is added to the commonmode sum +const int CMTHRESHOLD = 2; // anything less than this value is added to the commonmode sum // applied to all layers sum after commonmode subtraction and the ADC to MIP conversion const double ALLCELLS_THRESHOLD = 50.; @@ -160,6 +151,9 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzermake(Form("Y_L%d", layer+1), "", 2000, -10., 10. ); h_x_y_L[layer] = fs->make(Form("YvsX_L%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); + h_logWx_L[layer] = fs->make(Form("logWX_L%d", layer+1), "", 2000, -10., 10. ); + h_logWy_L[layer] = fs->make(Form("logWY_L%d", layer+1), "", 2000, -10., 10. ); + h_logWx_y_L[layer] = fs->make(Form("logWYvsX_L%d", layer+1), "", 2000, -10., 10., 2000, -10., 10. ); + h_E1oE7_L[layer] = fs->make(Form("h_E1oE7_L%d",layer+1), "", 5000, -5, 5); h_E1oE19_L[layer] = fs->make(Form("h_E1oE19_L%d",layer+1), "", 5000, -5, 5); h_E7oE19_L[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); @@ -381,10 +379,7 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) X0_L[iL] = 0.; } } - } - - - + } }//constructor ends here @@ -666,6 +661,11 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu h_y_L[iL]->Fill(yTmp / e19); h_x_y_L[iL]->Fill(xTmp / e19, yTmp / e19); + shosha.logWeightedPosition19(iL, xTmp, yTmp); + h_logWx_L[iL]->Fill(xTmp); + h_logWy_L[iL]->Fill(yTmp); + h_logWx_y_L[iL]->Fill(xTmp, yTmp); + E1SumL_R += e1; E7SumL_R += e7; E19SumL_R += e19; From 4c0aac8e7e59d010910a37f72229a88b3edbc47b Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 22 Nov 2016 15:36:43 +0100 Subject: [PATCH 090/297] file for MC geometry navigation --- MCanalysis/HGCalTBPlots.C | 1103 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1103 insertions(+) create mode 100644 MCanalysis/HGCalTBPlots.C diff --git a/MCanalysis/HGCalTBPlots.C b/MCanalysis/HGCalTBPlots.C new file mode 100644 index 0000000..fd81034 --- /dev/null +++ b/MCanalysis/HGCalTBPlots.C @@ -0,0 +1,1103 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// Compare plots with and without beamline counters +void PlotHistTBCompare(std::string infile1, std::string infile2, + std::string text, std::string prefix, + int maxMod=16, bool save=false); +// Plot energy distribution in a given layer +void PlotHistTBHitEn(std::string infile, std::string text, std::string prefix, + int type, bool separate, int rebin, int maxMod=16, + bool save=false); +// Plot general TB plots at SIM/Digi/Reco labels +void PlotHistSimDigRec(std::string fname="TBGenSimDigiReco.root", + std::string dirnm="HGCalTBAnalyzer", int type=0, + std::string prefix="EL32", int maxMod=16, + bool save=false); +// Class to manipulate the Tree produced by the analysis code +// HGCTB l1(std::string infile, std::string outfile); +// l1.Loop(std::string calFile, std::string wtFile, unsigned int nLayers, +// float beamE, float cutETotByEBeam, int ntotEvent, int clusterEn, +// int nPrintEvent) + +class HexTopology { + +public : + HexTopology(bool fine); + virtual ~HexTopology() {} + + double cluster(const std::vector& ids, + const std::vector& energy, + unsigned int id, int extent, double EperMIP, double mipthresh); + unsigned int localMax(const std::vector& ids, + const std::vector& energy, + unsigned int layer); + std::vector neighbours(int cell, int extent); + std::pair findRowCol(int cell); +private : + std::vector leftCell, cells, addCell, subCell; + unsigned int nrows; +}; + +///remember geometry in SIM is 90 degree rotated because the rows are clearly nicely arranged this way +///thre are 15 rows in coarse structure +///left cells is the number of cells in all in the previous rows + +HexTopology::HexTopology(bool fine) { + int cellCoarse[15] = {2,5,8,11,12,11,12,11,12,11,12,11,8,5,2}; //cells in a row + int addCoarse[15] = {1,0,1, 0, 1, 0, 1, 0, 1, 0, 1, 0,1,0,1}; + int cellFine[20] = {3,6,9,12,15,16,15,16,15,16,15,16,15,16,15,14,11,8,5,2}; + int addFine[20] = {0,1,0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,1,0,1}; + int fullCoarse(11), fullFine(15); + + int full(0); + if (fine) { + for (int k=0; k<20; ++k) { + cells.push_back(cellFine[k]); addCell.push_back(addFine[k]); + } + full = fullFine; + } else { + for (int k=0; k<15; ++k) { + cells.push_back(cellCoarse[k]); addCell.push_back(addCoarse[k]); + } + full = fullCoarse; + } + leftCell.push_back(0); + nrows = cells.size(); + for (unsigned int k=0; k HexTopology::findRowCol(int cell) { + int row(-1), col(-1); + //cout<<"findRowCol called "<= leftCell[0] && cell < leftCell[nrows]) { + for (unsigned int i=0; i<=nrows; ++i) { + if (cell < leftCell[i]) { + row = i-1; col = cell-leftCell[i-1]-subCell[i-1]-addCell[i-1]; + //cout<<"cell : row : leftCell[i-1] : subCell[i-1] : addCell[i-1] : col : "<(row,col); +} + +std::vector HexTopology::neighbours(int cell, int extent) { + int cols[11] = {0,-1,1,-2,2,-3,3,-4,4,-5,5}; + std::vector listCell; + std::pair rowCol = findRowCol(cell); + if (rowCol.first >= 0) { + int nadd = 2*extent + 1; + int addc = addCell[rowCol.first]; + for (int i = 0; i <= extent; ++i) { + for (int j = 0; j < nadd; ++j) { + int row = rowCol.first + i; + if (row >= 0 && row <= (int)(nrows)) { + int adc = (addc > addCell[row]) ? addc : addCell[row]; + int col = rowCol.second+cols[j]+leftCell[row]+subCell[row]+adc; + if (col >= leftCell[row] && col < leftCell[row+1]) + listCell.push_back(col); + } + if (i > 0) { + int row = rowCol.first - i; + if (row >= 0 && row <= (int)(nrows)) { + int adc = (addc > addCell[row]) ? addc : addCell[row]; + int col = rowCol.second+cols[j]+leftCell[row]+subCell[row]+adc; + if (col >= leftCell[row] && col < leftCell[row+1]) + listCell.push_back(col); + } + } + } + nadd--; + } + } + return listCell; +} + + +//E1 => 0 E7 => 1 E19 => 2 EAll => 7 +double HexTopology::cluster(const std::vector& ids, + const std::vector& energies, + unsigned int id, int extent, double EperMIP, double mipthresh) { + double energy(0); + int cell = id&0xFF; + std::vector listCell = neighbours(cell, extent); + for (unsigned int k=0; k mipthresh) + energy += energies[k]; + } + } + return energy; +} + +unsigned int HexTopology::localMax(const std::vector& ids, + const std::vector& energy, + unsigned int layer) { + float emax(0); + unsigned int idmax(0); + for (unsigned int k=0; k>19)&0x7F)) { + if (energy[k] > emax) { + emax = energy[k]; + idmax = ids[k]; + } + } + } + return idmax; +} +/* +class HGCTB { +public : + TTree *fChain; //!pointer to the analyzed TTree or TChain + Int_t fCurrent; //!current Tree number in a TChain + + // Declaration of leaf types + std::vector *simHitLayEn1E; + std::vector *simHitLayEn2E; + std::vector *simHitLayEn1H; + std::vector *simHitLayEn2H; + Double_t xBeam, yBeam, zBeam, pBeam; + std::vector *simHitCellIdE; + std::vector *simHitCellEnE; + std::vector *simHitCellIdH; + std::vector *simHitCellEnH; + + // List of branches + TBranch *b_simHitLayEn1E; //! + TBranch *b_simHitLayEn2E; //! + TBranch *b_simHitLayEn1H; //! + TBranch *b_simHitLayEn2H; //! + TBranch *b_xBeam; //! + TBranch *b_yBeam; //! + TBranch *b_zBeam; //! + TBranch *b_pBeam; //! + TBranch *b_simHitCellIdE; //! + TBranch *b_simHitCellEnE; //! + TBranch *b_simHitCellIdH; //! + TBranch *b_simHitCellEnH; //! + + HGCTB(std::string inName, std::string outName); + virtual ~HGCTB(); + virtual Int_t Cut(Long64_t entry); + virtual Int_t GetEntry(Long64_t entry); + virtual Long64_t LoadTree(Long64_t entry); + virtual void Init(TTree *tree); + virtual void Loop(std::string calFile, std::string wtFile, + unsigned int nLayers, float beamE, float cutETotByEBeam, + int ntotEvent, int clusterEn=1, int nPrintEvent=100); + virtual Bool_t Notify(); + virtual void Show(Long64_t entry = -1); + std::string outName_; +}; + +HGCTB::HGCTB(std::string inName, std::string outName) : fChain(0), + outName_(outName) { + TFile *file = new TFile(inName.c_str()); + TDirectory *dir = (TDirectory*)file->FindObjectAny("HGCalTBAnalyzer"); + TTree *tree = (TTree*)dir->Get("HGCTB"); + Init(tree); +} + +HGCTB::~HGCTB() { + if (!fChain) return; + delete fChain->GetCurrentFile(); +} + +Int_t HGCTB::GetEntry(Long64_t entry) { + // Read contents of entry. + if (!fChain) return 0; + return fChain->GetEntry(entry); +} + +Long64_t HGCTB::LoadTree(Long64_t entry) { + // Set the environment to read one entry + if (!fChain) return -5; + Long64_t centry = fChain->LoadTree(entry); + if (centry < 0) return centry; + if (!fChain->InheritsFrom(TChain::Class())) return centry; + TChain *chain = (TChain*)fChain; + if (chain->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + Notify(); + } + return centry; +} + +void HGCTB::Init(TTree *tree) { + // The Init() function is called when the selector needs to initialize + // a new tree or chain. Typically here the branch addresses and branch + // pointers of the tree will be set. + // It is normally not necessary to make changes to the generated + // code, but the routine can be extended by the user if needed. + // Init() will be called many times when running on PROOF + // (once per file to be processed). + + // Set object pointer + simHitLayEn1E = 0; + simHitLayEn2E = 0; + simHitLayEn1H = 0; + simHitLayEn2H = 0; + simHitCellIdE = 0; + simHitCellEnE = 0; + simHitCellIdH = 0; + simHitCellEnH = 0; + // Set branch addresses and branch pointers + if (!tree) return; + fChain = tree; + fCurrent = -1; + fChain->SetMakeClass(1); + + fChain->SetBranchAddress("simHitLayEn1E", &simHitLayEn1E, &b_simHitLayEn1E); + fChain->SetBranchAddress("simHitLayEn2E", &simHitLayEn2E, &b_simHitLayEn2E); + fChain->SetBranchAddress("simHitLayEn1H", &simHitLayEn1H, &b_simHitLayEn1H); + fChain->SetBranchAddress("simHitLayEn2H", &simHitLayEn2H, &b_simHitLayEn2H); + fChain->SetBranchAddress("xBeam", &xBeam, &b_xBeam); + fChain->SetBranchAddress("yBeam", &yBeam, &b_yBeam); + fChain->SetBranchAddress("zBeam", &zBeam, &b_zBeam); + fChain->SetBranchAddress("pBeam", &pBeam, &b_pBeam); + fChain->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); + fChain->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); + fChain->SetBranchAddress("simHitCellIdH", &simHitCellIdH, &b_simHitCellIdH); + fChain->SetBranchAddress("simHitCellEnH", &simHitCellEnH, &b_simHitCellEnH); + Notify(); +} + +Bool_t HGCTB::Notify() { + // The Notify() function is called when a new file is opened. This + // can be either for a new TTree in a TChain or when when a new TTree + // is started when using PROOF. It is normally not necessary to make changes + // to the generated code, but the routine can be extended by the + // user if needed. The return value is currently not used. + + return kTRUE; +} + +void HGCTB::Show(Long64_t entry) { + // Print contents of entry. + // If entry is not specified, print current entry + if (!fChain) return; + fChain->Show(entry); +} + +Int_t HGCTB::Cut(Long64_t ) { + // This function may be called from Loop. + // returns 1 if entry is accepted. + // returns -1 otherwise. + return 1; +} + +void HGCTB::Loop(std::string calFile, std::string wtFile, unsigned int nLayers, + float beamE, float cutETotByEBeam, int ntotEvent, + int clusterEn, int nPrintEvent) { + // In a ROOT session, you can do: + // Root > .L HGCTB.C + // Root > HGCTB t + // Root > t.GetEntry(12); // Fill t data members with entry number 12 + // Root > t.Show(); // Show values of entry 12 + // Root > t.Show(16); // Read and show values of entry 16 + // Root > t.Loop(); // Loop on all entries + // + + // This is the loop skeleton where: + // jentry is the global entry number in the chain + // ientry is the entry number in the current Tree + // Note that the argument to GetEntry must be: + // jentry for TChain::GetEntry + // ientry for TTree::GetEntry and TBranch::GetEntry + // + // To read only selected branches, Insert statements like: + // METHOD1: + // fChain->SetBranchStatus("*",0); // disable all branches + // fChain->SetBranchStatus("branchname",1); // activate branchname + // METHOD2: replace line + // fChain->GetEntry(jentry); //read all branches + //by b_branchname->GetEntry(ientry); //read only this branch + + //TFile *f = TFile::Open("TBGenSim_1.root"); + + + if (fChain == 0) return; + + // Read in calibration and layerweights + std::vector calFactor(nLayers,1.0), layerWeight(nLayers,1.0); + ifstream infil1, infil2; + unsigned int line1(0), line2(0); + infil1.open(calFile.c_str()); + if (infil1.is_open()) { + while (!infil1.eof()) { + float MPV; + infil1 >> MPV; + calFactor.push_back(MPV/1.3); + std::cout << line1 << " MPV: calFactor(MIP) = " << MPV << " : " + << calFactor[line1] << std::endl; + line1++; + if (line1 >= nLayers) break; + } + infil1.close(); + } + infil2.open(wtFile.c_str()); + if (infil2.is_open()) { + while (!infil2.eof()) { + float weight; + infil2 >> weight; + layerWeight.push_back(weight); + std::cout << "layerWeight[" << line2 << "] = " << layerWeight[line2] + << std::endl; + line2++; + if (line2 >= nLayers) break; + } + infil2.close(); + } + + //Create histograms + TFile *fout = new TFile(outName_.c_str(), "RECREATE"); + int nbins(40000); + float rangeGeV(0.05); + float eLayerMax= (nLayers > 5) ? rangeGeV/calFactor[5] : rangeGeV/calFactor[nLayers-1]; + TH1F* h_SimHitTotEGeV = new TH1F("h_SimHitTotEdepGeV","",nbins,0.,rangeGeV*nLayers/2); + TH1F* h_SimHitTotEMIP = new TH1F("h_SimHitTotEdepMIP","",nbins,0.,eLayerMax*nLayers/2); + TH1F* h_SimHitTotEtoBE = new TH1F("h_SimHitTotEdeptoBeamE","",nbins,0.,rangeGeV*nLayers/(4*beamE)); + TH1F* h_SimHitTotEtoBEWt = new TH1F("h_SimHitTotEdeptoBeamEWt","",nbins,0.,rangeGeV*nLayers/(4*beamE)); + TH1F* h_SimHitTotEMIPCut = new TH1F("h_SimHitCutTEtoBETotEdepMIP","",nbins,0.,eLayerMax*nLayers/2); + TH1F* h_SimHitTotEMIPCutWt = new TH1F("h_SimHitCutWtTEtoBETotEdepMIP","",nbins,0.,eLayerMax*nLayers/2); + std::vector h_SimHitLayerE, h_SimHitLayerECut, h_SimHitLayerECutWt; + for (unsigned int i=0; iGetEntriesFast(); + if (ntotEvent >= 0 && ntotEvent < nentries) nentries = ntotEvent; + + Long64_t nbytes = 0, nb = 0; + for (Long64_t jentry=0; jentryGetEntry(jentry); nbytes += nb; + // if (Cut(ientry) < 0) continue; + // Fill histograms + if (jentry % nPrintEvent == 0) std::cout << " " << jentry << " Events Processed... " << std::endl; + + float TotEdepGeV(0.), TotEdepMIP(0.), TotEdepGeVWt(0.), TotEdepMIPWt(0.); + std::vector clusterEn2E; + unsigned int nLayMax = (simHitLayEn2E->size() > nLayers) ? nLayers : simHitLayEn2E->size(); + for (unsigned int ilayer=0; ilayerat(ilayer) : clusterE2; + float CaliE = edep/calFactor[ilayer]; + TotEdepGeV += edep; + TotEdepGeVWt += (edep*layerWeight[ilayer]); + TotEdepMIP += CaliE; + TotEdepMIPWt += CaliE*layerWeight[ilayer]; + h_SimHitLayerE[ilayer]->Fill(CaliE); + if (jentry % nPrintEvent == 0) + std::cout << ilayer+1 << " local Max Id : cluster Energy 2 " + << locMaxId << " : " << clusterE2 << " : " + << (*simHitLayEn2E)[ilayer] << std::endl; + } + h_SimHitTotEGeV->Fill(TotEdepGeV); + h_SimHitTotEMIP->Fill(TotEdepMIP); + h_SimHitTotEtoBE->Fill(TotEdepGeV/beamE); + h_SimHitTotEtoBEWt->Fill(TotEdepGeVWt/beamE); + if ((TotEdepGeV/beamE) > cutETotByEBeam) { + h_SimHitTotEMIPCut->Fill(TotEdepMIP); + h_SimHitTotEMIPCutWt->Fill(TotEdepMIPWt); + } + for (unsigned int ilayer=0; ilayerat(ilayer)/calFactor[ilayer]) : (clusterEn2E[ilayer]/calFactor[ilayer]); + if ((TotEdepGeV/beamE) > cutETotByEBeam) { + h_SimHitLayerECut[ilayer]->Fill(CaliE); + h_SimHitLayerECutWt[ilayer]->Fill(CaliE*layerWeight[ilayer]); + } + } + } + fout->cd(); + h_SimHitTotEGeV->Write(); h_SimHitTotEMIP->Write(); + h_SimHitTotEtoBE->Write(); h_SimHitTotEtoBEWt->Write(); + h_SimHitTotEMIPCut->Write(); h_SimHitTotEMIPCutWt->Write(); + for (unsigned int i=0; iWrite(); + h_SimHitLayerECut[i]->Write(); + h_SimHitLayerECutWt[i]->Write(); + } + fout->Write(); fout->Close(); +} + +void PlotHistTBCompare(std::string infile1, std::string infile2, + std::string text, std::string prefix, int maxMod, + bool save) { + + std::string name1[6] = {"BeamP","SimHitEn","SimHitTm","DigiADC","DigiLng", + "RecHitEn"}; + std::string titl1[6] = {"","SIM","SIM","DIGI","DIGI","RECO"}; + std::string xttl1[6] = {"Beam Momentum (GeV/c)", "Energy (GeV)", "Time (ns)", + "ADC", "Layer #", "Energy (GeV)"}; + std::string yttl1[6] = {"Event","Hit","Hit","Hit","Hit"}; + int type1[6] = {0,1,1,0,0,1}; + int rebin[6] = {1,1,5,1,1,1}; + double xmin1[6] = {0,0,0,0,0,0}; + double xmax1[6] = {150,0.01,100.,100,15,1.0}; + std::string name2[2] = {"DigiOcc","RecHitOcc"}; + std::string xttl2[2] = {"x (cm)", "x (cm)"}; + std::string yttl2[2] = {"y (cm)", "y (cm)"}; + std::string name3[5] = {"SimHitLng","SimHitLng1", "SimHitLng2","RecHitLng", + "RecHitLng1"}; + std::string titl3[5] = {"SIM","SIM","SIM","RECO","RECO"}; + std::string xttl3[5] = {"z (cm)","Layer #","Layer #","z (cm)","Layer #"}; + std::string yttl3[5] = {"Mean Energy (GeV)","Mean Energy (Gev)", + "Mean Energy (GeV)","Mean Energy (GeV)", + "Mean Energy (GeV)"}; + double xmin3[5] = {10,0,0,0,0}; + double xmax30[5]= {25,15,15,15,15}; + double xmax31[5]= {25,50,50,50,50}; + std::string name4[2] = {"SimHitLat","RecHitLat"}; + std::string titl4[2] = {"SIM","RECO"}; + std::string xttl4[2] = {"x (mm)", "x (cm)"}; + std::string yttl4[2] = {"y (mm)", "y (cm)"}; + std::string detect[2]= {"HGCalEESensitive","HGCalHEFSensitive"}; + std::string label[2] = {"Without","With"}; + + gStyle->SetCanvasBorderMode(0); gStyle->SetCanvasColor(kWhite); + gStyle->SetPadColor(kWhite); gStyle->SetFillColor(kWhite); + gStyle->SetOptTitle(0); + gStyle->SetOptStat(110); gStyle->SetOptFit(0); + TFile *file1 = new TFile(infile1.c_str()); + TFile *file2 = new TFile(infile2.c_str()); + bool isopen = file2->IsOpen(); + char name[100], namep[100]; + int color[2] = {2,4}; + int marker[2]= {20,21}; + for (int k=0; k<6; ++k) { + if (k == 0) { + sprintf (name, "%s", name1[k].c_str()); + } else { + sprintf (name, "%s%s", name1[k].c_str(), detect[0].c_str()); + } + TH1D* hist1 = (TH1D*)file1->FindObjectAny(name); + if (hist1 != 0) { + TLegend *legend = new TLegend(0.50, 0.70, 0.90, 0.79); + legend->SetFillColor(kWhite); + sprintf (namep, "c_%s%s", name1[k].c_str(), prefix.c_str()); + TCanvas *pad = new TCanvas(namep, namep, 700, 500); + pad->SetRightMargin(0.10); + pad->SetTopMargin(0.10); + if (type1[k] != 0) pad->SetLogy(); + if (rebin[k] > 1) hist1->Rebin(rebin[k]); + hist1->GetXaxis()->SetTitle(xttl1[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl1[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.005); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.005); + hist1->GetYaxis()->SetTitleOffset(1.40); + hist1->GetXaxis()->SetRangeUser(xmin1[k],xmax1[k]); + hist1->SetLineColor(color[0]); + hist1->SetMarkerStyle(marker[0]); + hist1->SetMarkerColor(color[0]); + sprintf (namep, "%s (without beam line)", text.c_str()); + legend->AddEntry(hist1,namep,"lp"); + hist1->Draw(); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[0]); + st1->SetTextColor(color[0]); + st1->SetY1NDC(0.85); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + TPaveText *txt1 = new TPaveText(0.80,0.64,0.90,0.69,"blNDC"); + txt1->SetFillColor(0); + char txt[100]; + sprintf (txt, "%s", titl1[k].c_str()); + txt1->AddText(txt); + txt1->Draw("same"); + pad->Modified(); + pad->Update(); + if (isopen) { + hist1 = (TH1D*)file2->FindObjectAny(name); + if (hist1 != 0) { + if (rebin[k] > 1) hist1->Rebin(rebin[k]); + hist1->GetXaxis()->SetTitle(xttl1[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl1[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.005); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.005); + hist1->GetYaxis()->SetTitleOffset(1.40); + hist1->GetXaxis()->SetRangeUser(xmin1[k],xmax1[k]); + hist1->SetLineColor(color[1]); + hist1->SetMarkerStyle(marker[1]); + hist1->SetMarkerColor(color[1]); + hist1->Draw("sames"); + sprintf (namep, "%s (with beam line)", text.c_str()); + legend->AddEntry(hist1,namep,"lp"); + pad->Update(); + st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[1]); + st1->SetTextColor(color[1]); + st1->SetY1NDC(0.80); st1->SetY2NDC(0.85); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + pad->Modified(); + pad->Update(); + } + legend->Draw("same"); + pad->Update(); + } + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } + + for (int k=0; k<5; ++k) { + sprintf (name, "%s%s", name3[k].c_str(), detect[0].c_str()); + TProfile* hist1 = (TProfile*)file1->FindObjectAny(name); + if (hist1 != 0) { + TLegend *legend = new TLegend(0.50, 0.65, 0.90, 0.73); + legend->SetFillColor(kWhite); + sprintf (namep, "c_%s%s", name3[k].c_str(), prefix.c_str()); + TCanvas *pad = new TCanvas(namep, namep, 700, 500); + pad->SetRightMargin(0.10); + pad->SetTopMargin(0.10); + hist1->GetXaxis()->SetTitle(xttl3[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl3[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.005); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.005); + hist1->GetYaxis()->SetTitleOffset(1.40); + double xmax3 = (maxMod == 4) ? xmax30[k] : xmax31[k]; + hist1->GetXaxis()->SetRangeUser(xmin3[k],xmax3); + hist1->SetLineColor(color[0]); + hist1->SetMarkerStyle(marker[0]); + hist1->SetMarkerColor(color[0]); + sprintf (namep, "%s (without beam line)", text.c_str()); + legend->AddEntry(hist1,namep,"lp"); + hist1->Draw(); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[0]); + st1->SetTextColor(color[0]); + st1->SetY1NDC(0.82); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + TPaveText *txt1 = new TPaveText(0.80,0.59,0.90,0.64,"blNDC"); + txt1->SetFillColor(0); + char txt[100]; + sprintf (txt, "%s", titl3[k].c_str()); + txt1->AddText(txt); + txt1->Draw("same"); + pad->Modified(); + pad->Update(); + if (isopen) { + hist1 = (TProfile*)file2->FindObjectAny(name); + if (hist1 != 0) { + hist1->GetXaxis()->SetTitle(xttl3[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl3[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.005); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.005); + hist1->GetYaxis()->SetTitleOffset(1.40); + double xmax3 = (maxMod == 4) ? xmax30[k] : xmax31[k]; + hist1->GetXaxis()->SetRangeUser(xmin3[k],xmax3); + hist1->SetLineColor(color[1]); + hist1->SetMarkerStyle(marker[1]); + hist1->SetMarkerColor(color[1]); + hist1->Draw("sames"); + sprintf (namep, "%s (with beam line)", text.c_str()); + legend->AddEntry(hist1,namep,"lp"); + pad->Update(); + st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[1]); + st1->SetTextColor(color[1]); + st1->SetY1NDC(0.74); st1->SetY2NDC(0.82); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + pad->Modified(); + pad->Update(); + } + legend->Draw("same"); + pad->Update(); + } + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } + + for (int j=0; j<2; ++j) { + for (int k=0; k<2; ++k) { + sprintf (name, "%s%s", name2[k].c_str(), detect[0].c_str()); + TH2D* hist1(0); + if (j==0) hist1 = (TH2D*)file1->FindObjectAny(name); + else hist1 = (TH2D*)file2->FindObjectAny(name); + if (hist1 != 0) { + TLegend *legend = new TLegend(0.10, 0.86, 0.50, 0.90); + legend->SetFillColor(kWhite); + sprintf (namep, "c_%s%s%s", name2[k].c_str(), prefix.c_str(), + label[j].c_str()); + TCanvas *pad = new TCanvas(namep, namep, 500, 500); + pad->SetRightMargin(0.10); + pad->SetTopMargin(0.10); + hist1->GetXaxis()->SetTitle(xttl2[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl2[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.005); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.005); + hist1->GetYaxis()->SetTitleOffset(1.40); + hist1->SetLineColor(color[j]); + hist1->SetMarkerStyle(marker[j]); + hist1->SetMarkerColor(color[j]); + sprintf (namep, "%s (%s beam line)", text.c_str(), label[j].c_str()); + legend->AddEntry(hist1,namep,"lp"); + hist1->Draw("lego"); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[j]); + st1->SetTextColor(color[j]); + st1->SetY1NDC(0.82); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + TPaveText *txt1 = new TPaveText(0.80,0.76,0.90,0.81,"blNDC"); + txt1->SetFillColor(0); + char txt[100]; + sprintf (txt, "%s", titl3[k].c_str()); + txt1->AddText(txt); + txt1->Draw("same"); + pad->Modified(); + pad->Update(); + legend->Draw("same"); + pad->Update(); + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } + } + + for (int j=0; j<2; ++j) { + for (int k=0; k<2; ++k) { + sprintf (name, "%s%s", name4[k].c_str(), detect[0].c_str()); + TProfile2D* hist1(0); + if (j==0) hist1 = (TProfile2D*)file1->FindObjectAny(name); + else hist1 = (TProfile2D*)file2->FindObjectAny(name); + if (hist1 != 0) { + TLegend *legend = new TLegend(0.10, 0.86, 0.50, 0.90); + legend->SetFillColor(kWhite); + sprintf (namep, "c_%s%s%s", name4[k].c_str(), prefix.c_str(), + label[j].c_str()); + TCanvas *pad = new TCanvas(namep, namep, 500, 500); + pad->SetRightMargin(0.10); + pad->SetTopMargin(0.10); + hist1->GetXaxis()->SetTitle(xttl4[k].c_str()); + hist1->GetYaxis()->SetTitle(yttl4[k].c_str()); + hist1->GetXaxis()->SetLabelOffset(0.001); + hist1->GetXaxis()->SetLabelSize(0.028); + hist1->GetXaxis()->SetTitleOffset(1.40); + hist1->GetYaxis()->SetLabelOffset(0.001); + hist1->GetYaxis()->SetLabelSize(0.028); + hist1->GetYaxis()->SetTitleOffset(1.40); + hist1->SetLineColor(color[j]); + hist1->SetMarkerStyle(marker[j]); + hist1->SetMarkerColor(color[j]); + sprintf (namep, "%s (%s beam line)", text.c_str(), label[j].c_str()); + legend->AddEntry(hist1,namep,"lp"); + hist1->Draw("lego"); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist1->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[j]); + st1->SetTextColor(color[j]); + st1->SetY1NDC(0.82); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + TPaveText *txt1 = new TPaveText(0.80,0.76,0.90,0.81,"blNDC"); + txt1->SetFillColor(0); + char txt[100]; + sprintf (txt, "%s", titl4[k].c_str()); + txt1->AddText(txt); + txt1->Draw("same"); + pad->Modified(); + pad->Update(); + legend->Draw("same"); + pad->Update(); + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } + } +} + +void PlotHistTBHitEn(std::string infile, std::string text, std::string prefix, + int type, bool separate, int rebin, int maxMod, bool save){ + + std::string name1[2] = {"SimHitEnA","SimHitEnB"}; + std::string title[2] = {"SIM Layer","Layer"}; + std::string xtitl[2] = {"Energy (GeV)", "Energy (GeV)"}; + std::string ytitl[2] = {"Tracks","Tracks"}; + std::string detect[2]= {"HGCalEESensitive","HGCalHEFSensitive"}; + std::string label[2] = {"Without","With"}; + int start[2] = {0, 1}; + int nhmax0[2]= {12,4}; + int nhmax1[2]= {48,16}; + int color[6] = {1,2,4,7,6,9}; + int ltype[6] = {1,1,1,1,1,1}; + int mtype[6] = {20,21,22,23,24,33}; + + if (type != 1) type = 0; + gStyle->SetCanvasBorderMode(0); gStyle->SetCanvasColor(kWhite); + gStyle->SetPadColor(kWhite); gStyle->SetFillColor(kWhite); + gStyle->SetOptTitle(0); + gStyle->SetOptStat(1110); gStyle->SetOptFit(0); + TFile *file = new TFile(infile.c_str()); + + for (int k=0; k<2; ++k) { + int nhmax = (maxMod == 4) ? nhmax0[k] : nhmax1[k]; + double dxs = 0.80/nhmax; + if ((dxs > 0.15) || separate) dxs = 0.15; + double dyl = (separate) ? 0.025 : 0.025*nhmax; + double xhi(0.90), yhi(0.81); + TCanvas* pad(0); + TLegend* legend(0); + char name[100], namep[100]; + if (!separate) { + sprintf (namep,"%s%s%s",name1[k].c_str(),prefix.c_str(),label[type].c_str()); + pad = new TCanvas(namep, namep, 700, 500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); pad->SetLogy(); + legend = new TLegend(0.70, yhi-dyl, 0.90, yhi); + legend->SetFillColor(kWhite); + } + TPaveText *text1 = new TPaveText(0.60,yhi-dyl-0.04,0.90,yhi-dyl-0.01,"blNDC"); + text1->SetFillColor(0); + sprintf (namep, "%s (%s beam line)",text.c_str(),label[type].c_str()); + text1->AddText(namep); + bool first(true); + for (int j=0; jFindObjectAny(name); + if (hist != 0) { + if (separate) { + sprintf (namep,"%s%s%s%d",name1[k].c_str(),prefix.c_str(),label[type].c_str(),j); + pad = new TCanvas(namep, namep, 700, 500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); pad->SetLogy(); + legend = new TLegend(0.70, 0.81-dyl, 0.90, 0.81); + legend->SetFillColor(kWhite); + } + int j1 = j%6; + int j2 = (j-j1)/6; + hist->Rebin(rebin); + hist->GetXaxis()->SetTitle(xtitl[k].c_str()); + hist->GetYaxis()->SetTitle(ytitl[k].c_str()); + hist->GetXaxis()->SetLabelOffset(0.005); + hist->GetXaxis()->SetTitleOffset(1.40); + hist->GetYaxis()->SetLabelOffset(0.005); + hist->GetYaxis()->SetTitleOffset(1.40); + hist->SetLineColor(color[j1]); + hist->SetLineStyle(ltype[j2]); + hist->SetMarkerStyle(mtype[j1]); + hist->SetMarkerColor(color[j1]); + double xmax = (maxMod == 4) ? 0.025 : 0.040; + hist->GetXaxis()->SetRangeUser(0.0,xmax); + sprintf (namep, "%s %d",title[k].c_str(),(j+1)); + legend->AddEntry(hist,namep,"lp"); + if (separate || first) hist->Draw(); + else hist->Draw("sames"); + first = false; + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetLineColor(color[j1]); + st1->SetTextColor(color[j1]); + st1->SetY1NDC(0.82); st1->SetY2NDC(0.90); + st1->SetX1NDC(xhi-dxs); st1->SetX2NDC(xhi); + if (!separate) xhi -= dxs; + } + pad->Update(); + if (separate) { + legend->Draw("same"); + text1->Draw("same"); + pad->Update(); + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } + } + if (!separate) { + legend->Draw("same"); + text1->Draw("same"); + pad->Update(); + if (save) { + sprintf (name, "%s.jpg", pad->GetName()); + pad->Print(name); + } + } + } +} + +void PlotHistSimDigRec(std::string fname, std::string text, int type, + std::string prefix, int maxMod, bool save) { + + std::string name1[6] = {"BeamP", "SimHitEnHGCalEESensitive", + "SimHitTmHGCalEESensitive", + "DigiADCHGCalEESensitive", + "DigiLngHGCalEESensitive", + "RecHitEnHGCalEESensitive"}; + std::string name2[1] = {"DigiOccHGCalEESensitive"}; + std::string name3[5] = {"SimHitLngHGCalEESensitive", + "SimHitLng1HGCalEESensitive", + "SimHitLng2HGCalEESensitive", + "RecHitLngHGCalEESensitive", + "RecHitLng1HGCalEESensitive"}; + std::string name4[2] = {"SimHitLatHGCalEESensitive", + "RecHitLatHGCalEESensitive"}; + double xrnglo1[6] = { 0.0,0.0, 0.0, 0.0, 0.0,0.0}; + double xrnghi1[6] = {150.0,0.1,200.0,20.0,50.0,0.1}; + double xrnglo2[1] = {-10.0}; + double xrnghi2[1] = { 10.0}; + double xrnglo3[5] = {10.0, 0.0, 0.0,10.0, 0.0}; + double xrnghi30[5]= {50.0,20.0,20.0,50.0,20.0}; + double xrnghi31[5]= {50.0,50.0,50.0,50.0,20.0}; + double xrnglo4[2] = {-40.0,-10.0}; + double xrnghi4[2] = { 40.0, 10.0}; + int type1[6] = {0,1, 1,1,0,1}; + int type2[6] = {1,1,10,1,1,1}; + std::string xtitl1[6] = {"Beam momentum", "SimHit energy (GeV)", + "Hit time (ns)", "ADC (Digi)", + "Longitudinal profile", "RecHit energy (GeV)"}; + std::string ytitl1[6] = {"Events", "Hits", "Hits", "Hits", " ", "Hits"}; + std::string title1[6] = {"", "SIM", "SIM", "DIGI", "DIGI", "RECO"}; + std::string xtitl3[5] = {"z (mm)", "Layer #", "Layer #", "z (cm)", "Layer #"}; + std::string ytitl3[5] = {"Mean Energy (GeV)", "Mean Energy (GeV)", + "Mean Energy (GeV)", "Mean Energy (GeV)", + "Mean Energy (GeV)"}; + std::string title3[5] = {"SIM", "SIM", "SIM", "RECO", "RECO"}; + std::string xtitl2[1] = {"x (cm)"}; + std::string ytitl2[1] = {"y (cm)"}; + std::string title2[1] = {"Digis"}; + std::string xtitl4[2] = {"x (mm)", "x (cm)"}; + std::string ytitl4[2] = {"y (mm)", "y (cm)"}; + std::string title4[2] = {"SimHits","RecHits"}; + std::string label[2] = {"Without","With"}; + + gStyle->SetCanvasBorderMode(0); gStyle->SetCanvasColor(kWhite); + gStyle->SetPadColor(kWhite); gStyle->SetFillColor(kWhite); + gStyle->SetOptStat(1110); + TFile *file = new TFile(fname.c_str()); + if (file) { + char name[100]; + TPaveText *text1 = new TPaveText(0.15,0.91,0.70,0.95,"blNDC"); + text1->SetFillColor(0); + sprintf (name, "%s (%s beam line)",text.c_str(),label[type].c_str()); + text1->AddText(name); + for (int k=0; k<6; ++k) { + TH1D* hist = (TH1D*)file->FindObjectAny(name1[k].c_str()); + // std::cout << name1[k] << " read out at " << hist << std::endl; + if (hist != 0) { + sprintf (name,"%s%s",prefix.c_str(),name1[k].c_str()); + TCanvas *pad = new TCanvas(name,name,500,500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); + hist->GetYaxis()->SetTitle(ytitl1[k].c_str()); + hist->GetXaxis()->SetTitle(xtitl1[k].c_str()); + hist->SetTitle(title1[k].c_str()); hist->Rebin(type2[k]); + hist->GetXaxis()->SetRangeUser(xrnglo1[k],xrnghi1[k]); + hist->GetYaxis()->SetTitleOffset(1.4); + if (type1[k] == 1) pad->SetLogy(); + hist->Draw(); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetFillColor(0); + st1->SetY1NDC(0.81); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + pad->Modified(); + pad->Update(); + if (save) { + sprintf (name, "c_%s%s.gif", prefix.c_str(), name1[k].c_str()); + pad->Print(name); + } + } + } + for (int k=0; k<5; ++k) { + TProfile* hist = (TProfile*)file->FindObjectAny(name3[k].c_str()); + // std::cout << name3[k] << " read out at " << hist << std::endl; + if (hist != 0) { + sprintf (name,"%s%s",prefix.c_str(),name3[k].c_str()); + TCanvas *pad = new TCanvas(name,name,500,500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); + hist->GetYaxis()->SetTitle(ytitl3[k].c_str()); + hist->GetXaxis()->SetTitle(xtitl3[k].c_str()); + hist->SetMarkerStyle(20); hist->SetMarkerSize(0.8); + hist->SetTitle(title3[k].c_str()); + double xrnghi3 = (maxMod == 4) ? xrnghi30[k] : xrnghi31[k]; + hist->GetXaxis()->SetRangeUser(xrnglo3[k],xrnghi3); + hist->GetYaxis()->SetTitleOffset(1.4); + hist->Draw(); + pad->Update(); + TPaveStats* st1 = (TPaveStats*)hist->GetListOfFunctions()->FindObject("stats"); + if (st1 != NULL) { + st1->SetFillColor(0); + st1->SetY1NDC(0.75); st1->SetY2NDC(0.90); + st1->SetX1NDC(0.65); st1->SetX2NDC(0.90); + } + text1->Draw("same"); + pad->Modified(); + pad->Update(); + if (save) { + sprintf (name, "c_%s%s.gif", prefix.c_str(), name3[k].c_str()); + pad->Print(name); + } + } + } + for (int k=0; k<1; ++k) { + TH2D* hist = (TH2D*)file->FindObjectAny(name2[k].c_str()); + // std::cout << name2[k] << " read out at " << hist << std::endl; + if (hist != 0) { + sprintf (name,"%s%s",prefix.c_str(),name2[k].c_str()); + TCanvas *pad = new TCanvas(name,name,500,500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); + hist->GetYaxis()->SetTitle(ytitl2[k].c_str()); + hist->GetXaxis()->SetTitle(xtitl2[k].c_str()); + hist->GetXaxis()->SetRangeUser(xrnglo2[k],xrnghi2[k]); + hist->GetYaxis()->SetRangeUser(xrnglo2[k],xrnghi2[k]); + hist->SetMarkerStyle(20); hist->SetMarkerSize(0.2); + hist->SetTitle(title2[k].c_str()); + hist->GetXaxis()->SetTitleOffset(1.4); + hist->GetYaxis()->SetTitleOffset(1.4); + hist->Draw(); + text1->Draw("same"); + if (save) { + sprintf (name, "c_%s%s.gif", prefix.c_str(), name2[k].c_str()); + pad->Print(name); + } + } + } + for (int k=0; k<2; ++k) { + TProfile2D* hist = (TProfile2D*)file->FindObjectAny(name4[k].c_str()); + // std::cout << name4[k] << " read out at " << hist << std::endl; + if (hist != 0) { + sprintf (name,"%s%s",prefix.c_str(),name4[k].c_str()); + TCanvas *pad = new TCanvas(name,name,500,500); + pad->SetRightMargin(0.10); pad->SetTopMargin(0.10); + hist->GetYaxis()->SetTitle(ytitl4[k].c_str()); + hist->GetXaxis()->SetTitle(xtitl4[k].c_str()); + hist->GetXaxis()->SetRangeUser(xrnglo4[k],xrnghi4[k]); + hist->GetYaxis()->SetRangeUser(xrnglo4[k],xrnghi4[k]); + hist->SetMarkerStyle(20); hist->SetMarkerSize(0.2); + hist->SetTitle(title4[k].c_str()); + hist->GetXaxis()->SetTitleOffset(1.4); + hist->GetYaxis()->SetTitleOffset(1.4); + hist->Draw(); + text1->Draw("same"); + if (save) { + sprintf (name, "c_%s%s.gif", prefix.c_str(), name2[k].c_str()); + pad->Print(name); + } + } + } + } +} + +void testTopology(bool fine) { + HexTopology ht(fine); + std::string ans; + int cellmax = (fine) ? 239 : 132; + int cell(-1), cellmin(0); + std::cout << "Input Cell: "; + std::cin >> cell; + if (cell >= 0) cellmin = cellmax = cell; + for (cell = cellmin; cell <= cellmax; ++cell) { + for (int ext = 0; ext < 3; ++ext) { + std::vector listCell = ht.neighbours(cell,ext); + std::cout << "Extent " << ext << " for Cell " << cell << " has " + << listCell.size() << " cells" << std::endl; + for (unsigned int k=0; k> ans; + if (ans == "q" || ans == "Q" || ans == "s" || ans == "S") break; + } + if (ans == "q" || ans == "Q") break; + } +} + + +bool inside(double x, double y) { + + const double size(6.185); + const double tan30deg(0.5773502693); + double absx = std::abs(x); + double absy = std::abs(y); + bool flag(false); + + if (absx <= size && absy <= (2.*size*tan30deg)) { + if (absy <= size*tan30deg || absx <= (2.*size - absy/tan30deg)) flag = true; + } + return flag; +} +*/ From 52e253c44ae53846295e4a7459561021f4881e01 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 16:05:05 +0100 Subject: [PATCH 091/297] [position resolution] proper cleanup, fix ROOT memory leak in fitting of linear functions without minimizer option 'F' --- Reco/interface/PositionResolutionHelpers.h | 1 - Reco/plugins/Position_Resolution_Analyzer.cc | 10 +++++--- Reco/src/PositionResolutionHelpers.cc | 24 ++++++++++++-------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 89603aa..f12be96 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -9,7 +9,6 @@ #include "TF1.h" #include "TGraphErrors.h" - #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 1275dc7..e7f666d 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -139,12 +139,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } //check if 2DGraphs are to be made + /* bool make2DGraphs = false; std::vector::iterator findPosition = std::find(EventsFor2DGraphs.begin(), EventsFor2DGraphs.end(), evId); if (findPosition != EventsFor2DGraphs.end()) { make2DGraphs = true; EventsFor2DGraphs.erase(findPosition); - } + }*/ //initialize new fit counters in case this is a new run: if (successfulFitCounter.find(run) == successfulFitCounter.end()) @@ -187,6 +188,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->fitTrack(fittingMethod); } + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (int i=1; i<=nLayers; i++) { layerZ = Sensors[i]->getZ(); @@ -209,6 +211,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E min_deviation = min_deviation > deviation ? deviation: min_deviation; max_deviation = max_deviation < deviation ? deviation: max_deviation; + /* if (make2DGraphs) { //store for the two 2D graphs that are written per event x_predicted_v.push_back(x_predicted); @@ -217,15 +220,16 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E y_true_v.push_back(y_true); layerZ_v.push_back(layerZ); } + */ } - + /* if (make2DGraphs) { std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); } - + */ for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 0d2331b..b7f3f1b 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -236,24 +236,30 @@ std::pair ParticleTrack::calculatePositionXY(double z) { //private functions void ParticleTrack::lineFitTGraphErrors(){ - - if (ROOTpol_x == 0) { + //todo: clear existing Polynomial pointers if existing + if (ROOTpol_x != 0) delete ROOTpol_x; - ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - } - if (ROOTpol_y == 0) { + if (ROOTpol_y != 0) delete ROOTpol_y; - ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - } + + ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + + ROOTpol_x->SetParameter(0, 1); + ROOTpol_x->SetParameter(1, 1); + ROOTpol_y->SetParameter(0, 1); + ROOTpol_y->SetParameter(1, 1); + tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); - tmp_graph_x->Fit(ROOTpol_x, "Q"); - tmp_graph_y->Fit(ROOTpol_y, "Q"); + tmp_graph_x->Fit(ROOTpol_x, "QF"); + tmp_graph_y->Fit(ROOTpol_y, "QF"); delete tmp_graph_x; delete tmp_graph_y; + }; std::pair ParticleTrack::positionFromLineFitTGraphErrors(double z) { From fafd0334d27d2ef295aa527ca39e27b45bd84668 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 16:06:21 +0100 Subject: [PATCH 092/297] [file config] uncomment file names --- CondObjects/data/runEnergies.txt | 57 ++++++++++++++++---------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index 5008939..beb9d12 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -1,71 +1,72 @@ #RUN ENERGY[GeV] RUNTYPE ABSORBERTHICKNESS +1026 200. electron 5.7 857 150. electron 5.7 858 150. electron 5.7 859 150. electron 5.7 -//860 150. electron 5.7 -//862 150. electron 5.7 +860 150. electron 5.7 +862 150. electron 5.7 866 70. electron 5.7 867 70. electron 5.7 878 70. electron 5.7 -//879 70. electron 5.7 -//880 70. electron 5.7 +879 70. electron 5.7 +880 70. electron 5.7 920 20. electron 5.7 921 20. electron 5.7 922 20. electron 5.7 -//923 20. electron 5.7 -//924 20. electron 5.7 +923 20. electron 5.7 +924 20. electron 5.7 945 250. electron 5.7 946 250. electron 5.7 947 250. electron 5.7 -//948 250. electron 5.7 -//949 250. electron 5.7 +948 250. electron 5.7 +949 250. electron 5.7 1038 200. electron 5.7 1039 200. electron 5.7 1040 200. electron 5.7 -//1041 200. electron 5.7 -//1042 200. electron 5.7 +1041 200. electron 5.7 +1042 200. electron 5.7 1069 100. electron 5.7 1070 100. electron 5.7 1071 100. electron 5.7 -//1072 100. electron 5.7 -//1073 100. electron 5.7 +1072 100. electron 5.7 +1073 100. electron 5.7 1091 32. electron 5.7 1092 32. electron 5.7 1093 32. electron 5.7 -//1094 32. electron 5.7 -//1095 32. electron 5.7 +1094 32. electron 5.7 +1095 32. electron 5.7 1125 150. electron 25.0 1126 150. electron 25.0 1128 150. electron 25.0 -//1129 150. electron 25.0 -//1130 150. electron 25.0 +1129 150. electron 25.0 +1130 150. electron 25.0 1168 70. electron 25.0 1169 70. electron 25.0 1170 70. electron 25.0 -//1171 70. electron 25.0 -//1172 70. electron 25.0 +1171 70. electron 25.0 +1172 70. electron 25.0 1188 200. electron 25.0 1189 200. electron 25.0 1190 200. electron 25.0 -//1191 200. electron 25.0 -//1192 200. electron 25.0 +1191 200. electron 25.0 +1192 200. electron 25.0 1217 100. electron 25.0 1218 100. electron 25.0 1219 100. electron 25.0 -//1220 100. electron 25.0 -//1221 100. electron 25.0 +1220 100. electron 25.0 +1221 100. electron 25.0 1240 32. electron 25.0 1241 32. electron 25.0 1242 32. electron 25.0 -//1243 32. electron 25.0 -//1244 32. electron 25.0 +1243 32. electron 25.0 +1244 32. electron 25.0 1260 20. electron 25.0 1261 20. electron 25.0 1262 20. electron 25.0 -//1263 20. electron 25.0 -//1264 20. electron 25.0 +1263 20. electron 25.0 +1264 20. electron 25.0 1299 250. electron 25.0 1300 250. electron 25.0 1301 250. electron 25.0 -//1302 250. electron 25.0 -//1303 250. electron 25.0 \ No newline at end of file +1302 250. electron 25.0 +1303 250. electron 25.0 \ No newline at end of file From 7f352e912f1c3478bb10b7b045c6374816db7580 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 16:11:59 +0100 Subject: [PATCH 093/297] [position resolution] add plugin description --- Reco/plugins/Position_Resolution_Analyzer.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index e7f666d..985a474 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -1,5 +1,9 @@ -/* Write - * a description here! +/* + * Determination of the position resolution of the setup. + * Hits per layer are calculated using dedicated weighting algorithms. + * Hypothetical particle tracks are obtained from all but one layer. + * The predicted position in that layer is then compared to the reconstructed one. + * Thus, for each event and each layer there is one deviation to be calculated and filled into a 2D histogram. */ /** @@ -139,13 +143,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } //check if 2DGraphs are to be made - /* + bool make2DGraphs = false; std::vector::iterator findPosition = std::find(EventsFor2DGraphs.begin(), EventsFor2DGraphs.end(), evId); if (findPosition != EventsFor2DGraphs.end()) { make2DGraphs = true; EventsFor2DGraphs.erase(findPosition); - }*/ + } //initialize new fit counters in case this is a new run: if (successfulFitCounter.find(run) == successfulFitCounter.end()) @@ -211,7 +215,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E min_deviation = min_deviation > deviation ? deviation: min_deviation; max_deviation = max_deviation < deviation ? deviation: max_deviation; - /* if (make2DGraphs) { //store for the two 2D graphs that are written per event x_predicted_v.push_back(x_predicted); @@ -220,16 +223,14 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E y_true_v.push_back(y_true); layerZ_v.push_back(layerZ); } - */ + } - /* if (make2DGraphs) { std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); } - */ for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; @@ -258,7 +259,6 @@ void Position_Resolution_Analyzer::endJob() { std::cout<<"*************************************************"< > > >deviations; std::map > > > >::iterator it1; TFileDirectory subDir1; std::map > > >::iterator it2; From 003402402c0009c0c77959f4564d0f6a845be7d2 Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 22 Nov 2016 16:38:45 +0100 Subject: [PATCH 094/297] cleaning area --- eventualExtra/DumpPlots_Digis.C | 100 ++++++++++++ eventualExtra/Pedestal_Writer.C | 57 +++++++ eventualExtra/SKIROC_RO.txt | 264 ++++++++++++++++++++++++++++++++ eventualExtra/gains.txt | 10 ++ eventualExtra/logbook.txt | 42 +++++ eventualExtra/pedestals.txt | 10 ++ eventualExtra/test_cfg.py | 160 +++++++++++++++++++ 7 files changed, 643 insertions(+) create mode 100644 eventualExtra/DumpPlots_Digis.C create mode 100644 eventualExtra/Pedestal_Writer.C create mode 100644 eventualExtra/SKIROC_RO.txt create mode 100644 eventualExtra/gains.txt create mode 100644 eventualExtra/logbook.txt create mode 100644 eventualExtra/pedestals.txt create mode 100644 eventualExtra/test_cfg.py diff --git a/eventualExtra/DumpPlots_Digis.C b/eventualExtra/DumpPlots_Digis.C new file mode 100644 index 0000000..b00410d --- /dev/null +++ b/eventualExtra/DumpPlots_Digis.C @@ -0,0 +1,100 @@ +#include +#include +#include "TH2Poly.h" +//#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +//#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/src/HGCalTBCellVertices.cc" +#include "HGCal/Geometry/src/HGCalTBTopology.cc" + +void ReverseXAxis (TH1 *h) +{ + h->GetXaxis()->SetLabelOffset(999); + h->GetXaxis()->SetTickLength(0); + + gPad->Update(); + TGaxis *newaxis = new TGaxis(gPad->GetUxmax(), + gPad->GetUymin(), + gPad->GetUxmin(), + gPad->GetUymin(), + h->GetXaxis()->GetXmin(), + h->GetXaxis()->GetXmax(), + 510,"-"); + newaxis->SetLabelOffset(-0.03); + newaxis->SetTitle("X[cm]"); + newaxis->CenterTitle(1); + newaxis->Draw(); +} + + +void DumpPlots_Digis(){ +gStyle->SetOptStat(0); +//gStyle->SetOptTitle(0); + + TCanvas *c1 = new TCanvas("c1", "c1", 600, 600); + c1->Range(0, 0, 1, 1); + c1->SetFillColor(0); + c1->SetBorderMode(0); + c1->SetBorderSize(2); + c1->SetFrameBorderMode(0); + + +char filename[200], dirname[200], histname[200]; +int run = 1; +int adcs= 2; +const int layers = 4; +const int sensorsize = 128; +const int Sensor_Iu = 0; +const int Sensor_Iv = 0; + +HGCalTBTopology IsCellValid; +TFile *F; + +for(int iii=1; iii<=run; iii++){ + for(int kkk=1; kkk<= layers; kkk++){ + + for(int jjj=0;jjjcd("hgcaltbdigisplotter"); + + sprintf(histname,"FullLayer_ADC%i_Layer%i",jjj,kkk); + TH2Poly* Overview_Digis_Layer = (TH2Poly*) F->FindObjectAny(histname); + Overview_Digis_Layer->Scale(1./512,""); + Overview_Digis_Layer->GetYaxis()->SetTitle("Y[cm]"); + Overview_Digis_Layer->GetYaxis()->CenterTitle(1); + Overview_Digis_Layer->Draw("colztext"); + ReverseXAxis(Overview_Digis_Layer); + sprintf(dirname,"/home/rchatter/shervinTest/CMSSW_7_6_3_patch2/src/HGCal/Digis/Run%i/FullLayer_Digis_ADC%i_Layer%i.png",iii,jjj,kkk); + c1->SaveAs(dirname); + + sprintf(histname,"FullLayer_ADC%i_Layer%i_summed",jjj,kkk); + TH1F* Overview_Digis_Layer_Summed = (TH1F*) F->FindObjectAny(histname); + Overview_Digis_Layer_Summed->Draw(); + sprintf(dirname,"/home/rchatter/shervinTest/CMSSW_7_6_3_patch2/src/HGCal/Digis/Run%i/FullLayer_Digis_ADC%i_Layer%i_Summed.png",iii,jjj,kkk); + c1->SaveAs(dirname); + sprintf(histname,"FullLayer_ADC%i_Layer%i_profile",jjj,kkk); + TProfile* Overview_Digis_Layer_Profile = (TProfile*) F->FindObjectAny(histname); + Overview_Digis_Layer_Profile->Draw(); + sprintf(dirname,"/home/rchatter/shervinTest/CMSSW_7_6_3_patch2/src/HGCal/Digis/Run%i/FullLayer_Digis_ADC%i_Layer%i_Profile.png",iii,jjj,kkk); + c1->SaveAs(dirname); + }// loop over adcs ends here + + for(int iv = -7; iv < 8; iv++){ + for(int iu = -7; iu < 8; iu++){ + for(int jjj=0;jjjFindObjectAny(histname); + sprintf(dirname,"/home/rchatter/shervinTest/CMSSW_7_6_3_patch2/src/HGCal/Digis/Run%i/Detailed/Cell_u_%i_v_%i_ADC%i_Layer_%i.png",iii,iu,iv,jjj,kkk); + Cell_Hist_U_V->Draw(); + c1->SaveAs(dirname); + } + }//loop over iu ends here + }//loop over iv ends here + + }//loop over layer ends here + }//loop over run ends her + +} + + diff --git a/eventualExtra/Pedestal_Writer.C b/eventualExtra/Pedestal_Writer.C new file mode 100644 index 0000000..9e70406 --- /dev/null +++ b/eventualExtra/Pedestal_Writer.C @@ -0,0 +1,57 @@ +#include +#include +using namespace std; + +bool ix_iv_valid(int ix, int iv, int sensorSize); + +void Pedestal_Writer(){ + + TFile* F = new TFile("test_DigiAndRechitPlotter_TB_8272.root"); + F->cd("hgcaltbdigisplotter"); + char name[100]; + int nsample =1; + int Code = 0; + int Type = 0; + int Layer = 1; + int SENSOR_IX = 0; + int SENSOR_IV = 0; + int sensorsize = 128; + TH1F* h[1000]; + int counter = 0; + ofstream fs; + fs.open("/home/rchatter/shervinTest/CMSSW_7_6_3_patch2/src/HGCal/Ped_HighGain_Test_8272.txt"); + fs<<"SCHEME_CODE 0"<FindObjectAny(name); + fs<<" "<GetMean()<GetMean()<=-5 && ix<=5); + else if (aiv==1) return (ixc>=-6 && ixc<=5); + else if (aiv==2) return (ixc>=-6 && ixc<=4); + else if (aiv==3) return (ixc>=-7 && ixc<=4); + else if (aiv==4) return (ixc>=-7 && ixc<=3); + else if (aiv==5) return (ixc>=-6 && ixc<=1); + else if (aiv==6) return (ixc>=-5 && ixc<=-1); + else if (aiv==7) return (ixc==-3 || ixc==-4); + else return false; + } + else return false; +} + diff --git a/eventualExtra/SKIROC_RO.txt b/eventualExtra/SKIROC_RO.txt new file mode 100644 index 0000000..b8842ca --- /dev/null +++ b/eventualExtra/SKIROC_RO.txt @@ -0,0 +1,264 @@ + +>rd 82 +0x00 0x00001081 +0x01 0x13C217BF +0x02 0x07B91006 +0x03 0x17C217BF +0x04 0x139617BF +0x05 0x17BE17BE +0x06 0x17BE17BF +0x07 0x0E820E81 +0x08 0x11551439 +0x09 0x112D1CC7 +0x0A 0x10170E85 +0x0B 0x1D050F98 +0x0C 0x07B81DA4 +0x0D 0x14851C59 +0x0E 0x14271284 +0x0F 0x116E12D1 +0x10 0x07A8123C +0x11 0x1F321CFB +0x12 0x17A81C6E +0x13 0x1C971D7C +0x14 0x1D751F6E +0x15 0x0F9417B8 +0x16 0x07AA1FC4 +0x17 0x07A91015 +0x18 0x1F1D1F4E +0x19 0x17A807AB +0x1A 0x11BF1F9B +0x1B 0x17B91FCA +0x1C 0x17AB17DC +0x1D 0x16C50FAF +0x1E 0x0FA417B8 +0x1F 0x16C816AA +0x20 0x07A917AF +0x21 0x11A511E6 +0x22 0x01E711A8 +0x23 0x11E611E7 +0x24 0x11A711E7 +0x25 0x11E711E5 +0x26 0x11E711E7 +0x27 0x01EE01E6 +0x28 0x11E011FC +0x29 0x11F811FF +0x2A 0x11A101E7 +0x2B 0x11CD01EE +0x2C 0x01E711FD +0x2D 0x11A611EF +0x2E 0x11EC11A2 +0x2F 0x11A411E7 +0x30 0x01E411E5 +0x31 0x11F711A1 +0x32 0x11E711AC +0x33 0x11E611EC +0x34 0x11EB11F9 +0x35 0x01E211E4 +0x36 0x01E411FB +0x37 0x01E711A4 +0x38 0x11EA11E8 +0x39 0x11E401E7 +0x3A 0x11A711F5 +0x3B 0x11E711E9 +0x3C 0x11E511E7 +0x3D 0x11E901EA +0x3E 0x01EE11E5 +0x3F 0x11A011E7 +0x40 0x01E711EC +0x41 0x0E6E0E99 +0x42 0x1E9B0E5A +0x43 0x0E590E9B +0x44 0x0E400E9B +0x45 0x0E9B0E9A +0x46 0x0E9B0E9B +0x47 0x1EF61EF9 +0x48 0x0EF50EEF +0x49 0x0EED0EA3 +0x4A 0x0EA61EE7 +0x4B 0x0EF91EAB +0x4C 0x1E990EBF +0x4D 0x0EB30E97 +0x4E 0x0E920E9C +0x4F 0x0E950E9A +0x50 0x1E980E83 +0x51 0x0E8F0F83 +0x52 0x0E980E83 +0x53 0x0F8C0F8C +0x54 0x0F9E0F8B +0x55 0x1F6E0E99 +0x56 0x1E990F91 +0x57 0x1E890F96 +0x58 0x0FB20FB4 +0x59 0x0E981E89 +0x5A 0x0FBF0FB8 +0x5B 0x0E890FA4 +0x5C 0x0E890FAD +0x5D 0x0FB81FAD +0x5E 0x1FE40E89 +0x5F 0x0FAF0FA5 +0x60 0x1E8B0E98 +0x61 0x01980188 +0x62 0x11980197 +0x63 0x019F0198 +0x64 0x018E0198 +0x65 0x01980198 +0x66 0x01980198 +0x67 0x1188118F +0x68 0x01980189 +0x69 0x018E0188 +0x6A 0x018A1189 +0x6B 0x019A118A +0x6C 0x1198019B +0x6D 0x0189018E +0x6E 0x019F018E +0x6F 0x0189018F +0x70 0x119B018D +0x71 0x01980186 +0x72 0x0198018F +0x73 0x019C018F +0x74 0x0187018E +0x75 0x118C019B +0x76 0x119B018F +0x77 0x1198018D +0x78 0x018D0183 +0x79 0x019B1198 +0x7A 0x018D018F +0x7B 0x01980183 +0x7C 0x0198018B +0x7D 0x01871180 +0x7E 0x11850198 +0x7F 0x01850184 +0x80 0x1198019A +0x81 0x000F00FF +DONE +>rd 82 +0x00 0x00001481 +0x01 0x0EB80FE3 +0x02 0x0FE30EE2 +0x03 0x0E9E0FE3 +0x04 0x0EA90FE3 +0x05 0x0FE10FE1 +0x06 0x0FE10FE3 +0x07 0x0F8E0E8C +0x08 0x0FB20F8C +0x09 0x0F9E0F81 +0x0A 0x0F9B0F97 +0x0B 0x0FE10FA7 +0x0C 0x0FE20FB7 +0x0D 0x0FB90FB8 +0x0E 0x0FED0FA2 +0x0F 0x0FAF0FF3 +0x10 0x0FE20FE0 +0x11 0x0FDC0FEC +0x12 0x0FE70FF0 +0x13 0x0FD10F44 +0x14 0x0FC80FD8 +0x15 0x0FF40FE2 +0x16 0x0FE20FD3 +0x17 0x0FE70FD6 +0x18 0x0F480F5B +0x19 0x0FE20FE7 +0x1A 0x0F400F47 +0x1B 0x0FE70FC6 +0x1C 0x0FE70FD9 +0x1D 0x0FC90F4D +0x1E 0x0F460FE7 +0x1F 0x0F510FCA +0x20 0x0FE50FE2 +0x21 0x00E200A9 +0x22 0x00A800E1 +0x23 0x00A700A9 +0x24 0x00B100A8 +0x25 0x00A800A8 +0x26 0x00A800A8 +0x27 0x00A300B4 +0x28 0x00B200A3 +0x29 0x008B00AA +0x2A 0x009D00BD +0x2B 0x00F8009C +0x2C 0x00A800BC +0x2D 0x00B700BD +0x2E 0x00AD00B2 +0x2F 0x0094009A +0x30 0x00B80094 +0x31 0x009300AD +0x32 0x00A800B3 +0x33 0x008F0098 +0x34 0x00A20093 +0x35 0x009300B9 +0x36 0x00B9009E +0x37 0x00A800B5 +0x38 0x009A0098 +0x39 0x00B800A8 +0x3A 0x00B900A2 +0x3B 0x00A80092 +0x3C 0x00B800B3 +0x3D 0x00FB0091 +0x3E 0x00E900A8 +0x3F 0x00BA009F +0x40 0x00A900B9 +0x41 0x1713168D +0x42 0x168D155E +0x43 0x1777168C +0x44 0x176C168C +0x45 0x1684168C +0x46 0x1684168C +0x47 0x168F1688 +0x48 0x153C17E5 +0x49 0x151D17EC +0x4A 0x1508178E +0x4B 0x179B16B6 +0x4C 0x168F1791 +0x4D 0x178B168C +0x4E 0x179E176D +0x4F 0x17761770 +0x50 0x168A1751 +0x51 0x16A216E0 +0x52 0x168E16AA +0x53 0x16F216F7 +0x54 0x16DD16DC +0x55 0x12BD168D +0x56 0x168E16C3 +0x57 0x168B1435 +0x58 0x16491655 +0x59 0x168F168B +0x5A 0x17E61673 +0x5B 0x168E167A +0x5C 0x168B17AC +0x5D 0x17AF1279 +0x5E 0x124C168F +0x5F 0x17B817BA +0x60 0x1688168E +0x61 0x108A1180 +0x62 0x1181119B +0x63 0x118C1181 +0x64 0x10871181 +0x65 0x11811183 +0x66 0x11811181 +0x67 0x10811083 +0x68 0x11841187 +0x69 0x11811184 +0x6A 0x118F118C +0x6B 0x118C1082 +0x6C 0x1181118F +0x6D 0x10831080 +0x6E 0x11801186 +0x6F 0x118E1182 +0x70 0x11821185 +0x71 0x118D1098 +0x72 0x1181108F +0x73 0x118F1180 +0x74 0x108D1184 +0x75 0x11801182 +0x76 0x11821185 +0x77 0x1181108D +0x78 0x10851083 +0x79 0x11831181 +0x7A 0x118D1184 +0x7B 0x11811082 +0x7C 0x1183118C +0x7D 0x108D108F +0x7E 0x10831183 +0x7F 0x10841083 +0x80 0x11811186 +0x81 0x0C0E00FF diff --git a/eventualExtra/gains.txt b/eventualExtra/gains.txt new file mode 100644 index 0000000..54c3cb4 --- /dev/null +++ b/eventualExtra/gains.txt @@ -0,0 +1,10 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 0 0 0 14.5 + 0 1 0 0 0 1 0 15.5 + + 0 1 0 0 0 -1 0 12.5 +# 0 1 0 0 0 -2 0 19.5 + 0 1 0 0 10 8 0 10.5 + 0 1 0 0 -8 5 0 12.9 + 0 1 0 0 -3 2 0 2 diff --git a/eventualExtra/logbook.txt b/eventualExtra/logbook.txt new file mode 100644 index 0000000..eab0b7e --- /dev/null +++ b/eventualExtra/logbook.txt @@ -0,0 +1,42 @@ +# Run events Run_type TRG_type table[mm] TRG_delay[ns] beamType beamEnergy[GeV] Comment +### http://cmsonline.cern.ch/cms-elog/911293 +1536 512 Beam Hardware 32 204.9 electron 32 +1792 512 Pedestal Hardware 32 204.9 electron 32 +2048 512 Beam Hardware 32 204.9 electron 32 # Trigger threshold set higher +2049 512 Pedestal Software 32 204.9 electron 32 # Trigger count got frozen after a few events +2050 512 Pedestal Software 32 204.9 electron 32 # Cable shielded +2051 512 Beam Hardware 32 165.2 electron 32 # length of Photek cable reduced from 33 ft -> 20 ft +### http://cmsonline.cern.ch/cms-elog/911421 +2304 512 Pedestal Software 32 165.2 electron 32 # HV Off +2305 512 Pedesal Software 32 165.2 electron 32 # HV On +2309 115 Beam Hardware 32 165.2 electron 32 +2320 247 Beam Hardware 32 165.2 electron 32 # Improved HV cable +2321 512 Beam Hardware 32 165.2 electron 32 +2322 512 Beam Hardware 32 165.2 electron 32 +2324 1024 Beam Hardware 32 165.2 electron 32 +2325 256 Beam Hardware 32 165.2 electron 32 # tt 35000 worked fine compared to tt 50000 earlier() +#### http://cmsonline.cern.ch/cms-elog/911596 +4096 1024 Pedestal Software 32 165.2 electron 32 # HV On +4098 512 Beam Hardware 32 165.2 electron 32 # HV On: Filter added. Zed Firware changed. Trg_Out -> Si telescope +4100 512 Beam Hardware 48 165.2 electron 32 +4112 512 Beam Hardware 64 165.2 electron 32 +4114 512 Beam Hardware 80 165.2 electron 32 +4118 512 Beam Hardware 96 165.2 electron 32 +4120 512 Beam Hardware 16 165.2 electron 32 +4128 1024 Pedestal Software 16 165.2 electron 32 +4130 512 Beam Hardware 0 165.2 electron 32 +4132 512 Beam Hardware 32 165.2 electron 32 +#### http://cmsonline.cern.ch/cms-elog/911574 +8192 512 Beam Hardware 16 165.2 positron 32 # Delay 16 ns according to yesterday's test run +8194 512 Beam Hardware 16 165.2 positron 32 # positron 32 GeV run +8196 512 Beam Hardware 16 165.2 positron 32 # positron 32 GeV run +8198 512 Beam Hardware 16 165.2 positron 32 # positron 32 GeV run, ended with 128 events due to control access +## added HV filter and metal shield http://cmsonline.cern.ch/cms-elog/911637 +8200 512 Pedestal Software 16 165.2 positron 32 +8208 1024 Pedestal Software 16 165.2 positron 32 +8210 256 Beam Hardware 16 165.2 electron 32 +8231 512 Beam Hardware 16 165.2 electron 32 +8232 512 Beam Hardware 16 165.2 electron 32 +8233 768 Beam Hardware 16 165.2 electron 32 +8240 768 Beam Hardware 16 165.2 electron 32 +#### diff --git a/eventualExtra/pedestals.txt b/eventualExtra/pedestals.txt new file mode 100644 index 0000000..9f770fb --- /dev/null +++ b/eventualExtra/pedestals.txt @@ -0,0 +1,10 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 0 0 0 14.5 + 0 1 0 0 0 1 0 15.5 + + 0 1 0 0 0 -1 0 12.5 +# 0 1 0 0 0 -2 0 19.5 + 0 1 0 0 10 8 0 10.5 + 0 1 0 0 -8 5 0 12.9 + diff --git a/eventualExtra/test_cfg.py b/eventualExtra/test_cfg.py new file mode 100644 index 0000000..54101bc --- /dev/null +++ b/eventualExtra/test_cfg.py @@ -0,0 +1,160 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +import os,sys + +options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' + +options.register('dataFolder', + '/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'folder containing raw text input') + +options.register('outputFolder', + '/tmp/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Result of processing') + +# options.register('commonPrefix', +# '', +# VarParsing.VarParsing.multiplicity.singleton, +# VarParsing.VarParsing.varType.string, +# 'Input file to process') + +options.register('runNumber', + 850, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Input file to process') + +options.register('runType', + 'Unknown', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Type of run: HGCRun for run with beam on, PED for pedestal run, Unknown otherwise') + +options.register('chainSequence', + 0, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + '0: if runType is PED then do Digi, if runType is HGC_Run then do Digi and Reco (not implemented yet); 1: do Digi; 2: only Reco (not implemented yet); 3: Digi + highgain_correlation_cm; 4: event display sequence; 5: highgain_correlation_cm + event display sequence') + +options.register('nSpills', + 15, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Number of spills in run') + +options.register('pedestalsHighGain', + 'CondObjects/data/Ped_HighGain_L8.txt', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to high gain pedestals file') + +options.register('pedestalsLowGain', + 'CondObjects/data/Ped_LowGain_L8.txt', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to low gain pedestals file') + +options.output = "test_output.root" + +options.parseArguments() + +# print options # <--- A better option is to call test_cfg is called with "print" argument e.g. cmsRun test_cfg.py print dataFolder=example1 outputFolder=example2 ... + +if not os.path.isdir(options.dataFolder): + sys.exit("Error: Data folder not found or inaccessible!") + +if not os.path.isdir(options.outputFolder): + os.system("mkdir -p " + options.outputFolder) + +if (options.runType != "PED" and options.runType != "HGCRun"): + sys.exit("Error: only runtypes PED and HGCRun supported for now; given runType was %s"%(options.runType)) + +if (options.runType == "PED"): + if (os.path.isfile(options.pedestalsHighGain) or os.path.isfile(options.pedestalsLowGain)): + sys.exit("Error: Run %d is a pedestals run. The arguments pedestalsHighGain = %s and pedestalsLowGain = %s should be paths that do not lead to an existing file."%(options.runNumber, options.pedestalsHighGain, options.pedestalsLowGain)) + + + +################################ +process = cms.Process("unpack") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + +#################################### +process.load('HGCal.StandardSequences.RawToDigi_cff') +process.load('HGCal.StandardSequences.LocalReco_cff') +process.load('HGCal.StandardSequences.dqm_cff') + + +process.source = cms.Source("HGCalTBTextSource", + run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file + #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + nSpills=cms.untracked.uint32(options.nSpills), +) + + + +###### +process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) +process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) + +process.hgcaltbrechits.pedestalLow = cms.string(options.pedestalsLowGain) +process.hgcaltbrechits.pedestalHigh = cms.string(options.pedestalsHighGain) +process.hgcaltbrechits.gainLow = cms.string('') +process.hgcaltbrechits.gainHigh = cms.string('') + +process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", + dumpPayload=cms.untracked.bool(True)) + +process.dumpDigi = cms.EDAnalyzer("HGCalDigiDump") + + +process.output = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string(options.output) + ) + +# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) +if (options.chainSequence == 1): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Digi.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5 or options.chainSequence == 6): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) +# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco.root") ) +#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Layer.root") ) +#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) + + +########Activate this to produce event displays######################################### +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) + +################Not needed for DQM purposes, produces digi histograms for each channel, and the pedestal txt file needed for Digi->Reco +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) + +################Produces Reco histograms for each channel as well as a scatter plot of the Reco per channel############# +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) + +#################Produces Clusters of Recos(7cells, 19cells and all cells(full hexagons only))################ +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) + +################Miscellaneous############################################################################## +#process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) + +if (options.chainSequence == 1): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) +elif (options.chainSequence == 3): + process.p =cms.Path(process.hgcaltbdigis) +elif (options.chainSequence == 4): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 5): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 6): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_cm_correction) + + +process.end = cms.EndPath(process.output) From 28605d9250cff9cc47379b2150a9acf04b323d9d Mon Sep 17 00:00:00 2001 From: arabella Date: Tue, 22 Nov 2016 16:39:07 +0100 Subject: [PATCH 095/297] final sim samples --- produceWeights/doPlots.C | 116 ++++++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 45 deletions(-) diff --git a/produceWeights/doPlots.C b/produceWeights/doPlots.C index 6610f83..b74e06c 100644 --- a/produceWeights/doPlots.C +++ b/produceWeights/doPlots.C @@ -76,38 +76,40 @@ void doPlots(int nLayer, int energyEle, int config){ if(nLayer == 8 && config == 1){ std::string nameFolder = ""; - if(energyEle == 20) nameFolder = "161101_094655"; - if(energyEle == 35) nameFolder = "161031_180636"; - if(energyEle == 70) nameFolder = "161031_180644"; - if(energyEle == 100) nameFolder = "161101_094708"; - if(energyEle == 200) nameFolder = "161031_180705"; - if(energyEle == 250) nameFolder = "161031_180712"; + if(energyEle == 20) nameFolder = "161116_234146"; + if(energyEle == 32) nameFolder = "161117_101400"; + if(energyEle == 70) nameFolder = "161117_082845"; + if(energyEle == 100) nameFolder = "161116_232458"; + #if(energyEle == 150) nameFolder = "161116_232510"; + if(energyEle == 200) nameFolder = "161116_234226"; + if(energyEle == 250) nameFolder = "161116_234238"; for(int iFo=0; iFo<2; ++iFo){ for(int iF=0; iF<1000; ++iF){ - t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIv3_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIv4_PhysicsList_FTFP_BERT_EMM_beamposition_spread_Momspread_realistic_nosecKapton/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); } } } else if(nLayer == 8 && config == 2){ std::string nameFolder = ""; - if(energyEle == 20) nameFolder = "161108_231750"; - if(energyEle == 32) nameFolder = "161108_231756"; - if(energyEle == 70) nameFolder = "161109_074724"; - if(energyEle == 100) nameFolder = "161108_231811"; - if(energyEle == 200) nameFolder = "161109_130453"; - if(energyEle == 250) nameFolder = "161108_231833"; + if(energyEle == 20) nameFolder = "161119_013149"; + if(energyEle == 32) nameFolder = "161119_013155"; + if(energyEle == 70) nameFolder = "161119_013201"; + if(energyEle == 100) nameFolder = "161119_013207"; + //if(energyEle == 150) nameFolder = ""; + if(energyEle == 200) nameFolder = "161119_013217"; + if(energyEle == 250) nameFolder = "161119_013223"; for(int iFo=0; iFo<2; ++iFo){ for(int iF=0; iF<1000; ++iF){ - t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIIv4_PhysicsList_FTFP_BERT_EMM/mc/CRAB_PrivateMC/crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); + t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/8moduleIIv5_PhysicsList_FTFP_BERT_EMM_beamposition_spread_Momspread_realistic_nosecKapton/mc/CRAB_PrivateMC//crab_Ele%dGeV/"+nameFolder+"/000%d/TBGenSim_%d.root").c_str(), energyEle, iFo, iF)); } } } else{ std::string nameFolder = ""; if(energyEle == 20) nameFolder = "161031_180325"; - if(energyEle == 35) nameFolder = "161031_180332"; + //if(energyEle == 35) nameFolder = "161031_180332"; if(energyEle == 70) nameFolder = "161031_180339"; if(energyEle == 100) nameFolder = "161031_180346"; if(energyEle == 150) nameFolder = "161031_180353"; @@ -125,19 +127,29 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu double totEntries = t->GetEntries(); std::cout << " tree read => entries = " << totEntries << std::endl; - TH1F* enLayer[28]; - TH1F* enLayerCorr[28]; - TH1F* enLayerMip[28]; + TH1F* enLayer_e19[28]; + TH1F* enLayerCorr_e19[28]; + TH1F* enLayerMip_e19[28]; + TH1F* enLayer_eAll[28]; + TH1F* enLayerCorr_eAll[28]; + TH1F* enLayerMip_eAll[28]; for(int i=0; i<28; ++i){ if(nLayer != 28 && i >= 8) continue; - enLayer[i] = new TH1F(Form("enLayer%d", i+1), "", 5000, 0., 0.5); - enLayerCorr[i] = new TH1F(Form("enLayerCorr%d", i+1), "", 5000, 0., 10.); - enLayerMip[i] = new TH1F(Form("enLayerMip%d", i+1), "", 10000, 0., 10000.); + enLayer_e19[i] = new TH1F(Form("enLayer%d_e19", i+1), "", 5000, 0., 0.5); + enLayerCorr_e19[i] = new TH1F(Form("enLayerCorr%d_e19", i+1), "", 5000, 0., 10.); + enLayerMip_e19[i] = new TH1F(Form("enLayerMip%d_e19", i+1), "", 10000, 0., 10000.); + enLayer_eAll[i] = new TH1F(Form("enLayer%d_eAll", i+1), "", 5000, 0., 0.5); + enLayerCorr_eAll[i] = new TH1F(Form("enLayerCorr%d_eAll", i+1), "", 5000, 0., 10.); + enLayerMip_eAll[i] = new TH1F(Form("enLayerMip%d_eAll", i+1), "", 10000, 0., 10000.); } - TH1F* recoEnergy = new TH1F("recoEnergy", "", 5000, 0., 500.); - TH1F* recoEnergyRel = new TH1F("recoEnergyRel", "", 1000, 0., 2.); - TGraphErrors* enLayer_MIP = new TGraphErrors(); + TH1F* recoEnergy_eAll = new TH1F("recoEnergy_eAll", "", 5000, 0., 500.); + TH1F* recoEnergyRel_eAll = new TH1F("recoEnergyRel_eAll", "", 1000, 0., 2.); + TGraphErrors* enLayer_MIP_eAll = new TGraphErrors(); + + TH1F* recoEnergy_e19 = new TH1F("recoEnergy_e19", "", 5000, 0., 500.); + TH1F* recoEnergyRel_e19 = new TH1F("recoEnergyRel_e19", "", 1000, 0., 2.); + TGraphErrors* enLayer_MIP_e19 = new TGraphErrors(); double xBeam, yBeam; std::vector* simHitLayEn2E = 0; @@ -157,7 +169,8 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu t->GetEntry(iE); // std::cout << " simHitLayEn2E->size() = " << simHitLayEn2E->size() << std::endl; if(abs(xBeam) >= 2 || abs(yBeam) >= 2) continue; - float totEnergy = 0.; + float totEnergy_e19 = 0.; + float totEnergy_eAll = 0.; /* for(int iS=0; iSsize(); ++iS){ enLayer[iS]->Fill(simHitLayEn2E->at(iS)); @@ -184,26 +197,33 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu for(int iS=0; iSsize(); ++iS){ unsigned int locMaxId = ht1.localMax( (CellId), (CellE), iS+1); double clusterE19 = ht1.cluster((CellId), (CellE), locMaxId, 2, MIP2GeV_sim, 2); - //double allcell_nomip = ht1.cluster( (CellId), (CellE), locMaxId, 7, EperMIP, 0); - float localE = clusterE19 / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); - //double allcell = ht1.cluster( (CellId), (CellE), locMaxId, 7, MIP2GeV_sim, 2); - //float localE = allcell / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); + float localE_e19 = clusterE19 / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); + + double allcell = ht1.cluster( (CellId), (CellE), locMaxId, 7, MIP2GeV_sim, 2); + float localE_eAll = allcell / G4Escale * ( 1./MIP2GeV_sim * weights2GeV * weights2MIP* dEdX_weights[iS] + 1.); - enLayerCorr[iS]->Fill(localE); - //enLayerMip[iS]->Fill(allcell / G4Escale * 1./MIP2GeV_sim); - enLayerMip[iS]->Fill(clusterE19 / G4Escale * 1./MIP2GeV_sim); - totEnergy += localE; + enLayerCorr_e19[iS]->Fill(localE_e19); + enLayerMip_e19[iS]->Fill(clusterE19 / G4Escale * 1./MIP2GeV_sim); + totEnergy_e19 += localE_e19; + + enLayerCorr_eAll[iS]->Fill(localE_eAll); + enLayerMip_eAll[iS]->Fill(allcell / G4Escale * 1./MIP2GeV_sim); + totEnergy_eAll += localE_eAll; } - recoEnergy->Fill(totEnergy); - recoEnergyRel->Fill(totEnergy/(1.*energyEle)); + recoEnergy_e19->Fill(totEnergy_e19); + recoEnergyRel_e19->Fill(totEnergy_e19/(1.*energyEle)); + recoEnergy_eAll->Fill(totEnergy_eAll); + recoEnergyRel_eAll->Fill(totEnergy_eAll/(1.*energyEle)); } float X0value = 0; for(int i=0; iSetPoint(i+1, X0value, enLayerMip[i]->GetMean()); - enLayer_MIP->SetPointError(i+1, 0, enLayerMip[i]->GetRMS()/enLayerMip[i]->GetEntries()); + enLayer_MIP_eAll->SetPoint(i+1, X0value, enLayerMip_eAll[i]->GetMean()); + enLayer_MIP_eAll->SetPointError(i+1, 0, enLayerMip_eAll[i]->GetRMS()/enLayerMip_eAll[i]->GetEntries()); + enLayer_MIP_e19->SetPoint(i+1, X0value, enLayerMip_e19[i]->GetMean()); + enLayer_MIP_e19->SetPointError(i+1, 0, enLayerMip_e19[i]->GetRMS()/enLayerMip_e19[i]->GetEntries()); } TFile* outF; @@ -213,14 +233,20 @@ t->Add(Form(("root://eoscms.cern.ch//store/group/upgrade/HGCAL/simulation/28modu outF->cd(); for(int i=0; i<28; ++i){ if(nLayer != 28 && i >= 8) continue; - enLayer[i]->Write(); - enLayerCorr[i]->Write(); - enLayerMip[i]->Write(); - } - enLayer_MIP->Write("enLayer_MIP"); - recoEnergy->Write(); - recoEnergyRel->Write(); - outF->Close(); + enLayer_eAll[i]->Write(); + enLayerCorr_eAll[i]->Write(); + enLayerMip_eAll[i]->Write(); + enLayer_e19[i]->Write(); + enLayerCorr_e19[i]->Write(); + enLayerMip_e19[i]->Write(); + } + enLayer_MIP_eAll->Write("enLayer_MIP_eAll"); + recoEnergy_eAll->Write(); + recoEnergyRel_eAll->Write(); + enLayer_MIP_e19->Write("enLayer_MIP_e19"); + recoEnergy_e19->Write(); + recoEnergyRel_e19->Write(); + outF->Close(); } From 6acc217badf801b3c6e0e3dd56820914103131c7 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 27 Oct 2016 09:02:22 +0200 Subject: [PATCH 096/297] conflict solved --- test_cfg_newEB.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index f9f9f5c..eedac1f 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,11 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - #'/afs/cern.ch/work/r/rchatter/Final_Event_Builder/CMSSW_8_0_1/src/HGCal/tmpOut/', - #'/afs/cern.ch/user/a/amartell/public/HGCal/TB_data/' - #'/tmp/amartell/rearrangedTxtFiles/', - '/afs/cern.ch/user/a/amartell/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', - #'~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') From f7bc6ad81d1922b70ded065cddcffe82649a5285 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sat, 29 Oct 2016 18:57:45 +0200 Subject: [PATCH 097/297] Updated README, bug fixes for the event display code to work with the event builder, included Kai-Yu's modification to RecHitPlotter_HighGain_Correlation_CM.cc which is to be run for pedestal runs for noise studies and calibration runs with Pions and muons to evaluate ADC->MIP from fitting single cell Rechits, Finally chainsequences in test_cfg_newEB.py rearreanged 4-> Event Display 5->RecHitPlotter_HighGain_Correlation_CM and 6-> Layer_Sum_Analyzer --- README.txt | 5 +- .../RecHitPlotter_HighGain_Correlation_CM.cc | 462 ++++++++++++++---- Reco/plugins/RecHitPlotter_HighGain_New.cc | 248 ++-------- test_cfg_newEB.py | 13 +- 4 files changed, 445 insertions(+), 283 deletions(-) diff --git a/README.txt b/README.txt index c725354..788cc5c 100644 --- a/README.txt +++ b/README.txt @@ -55,7 +55,10 @@ sh scripts/rearrangeTxtFile.sh input.txt >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun - >> chainSequence=6 to run Layer_Sum_Analyzer + >> chainSequence=1 Runs on Digis produces pedestal files in the path specifienfied under pedestalsHighGain and pedestalsLowGain + >> chainSequence=4 Runs event Display analyzer + >> chainSequence=5 Runs on Recos for each cell of the detector across layers. Use for pion, muon and pedestal run. Correlation across cells as implemented by Kai-Yu are evaluated. + >> chainSequence=6 to run Layer_Sum_Analyzer: Evaluates for each layer as well as summed across layers: Max hit, Max hit + 6 nearest neighbours(7 cells), 19 cells and All cells --- WITH EACH CELL PICKED SUBJECT TO A 2 MIP CUT. Results are available considering only the energy deposited in Silicon, and with dE/dx weights to recover the total energy deposited in the absorbers and the silicon sensors. >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs >> test_cfg_newEB.py to load the reqarranged .txt: diff --git a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc index 7aac108..6aa3fc9 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc @@ -94,18 +94,48 @@ class RecHitPlotter_HighGain_Correlation_CM : public edm::one::EDAnalyzermake(name, title, 2048, 0, 2048, 8000, -4000, 4000); for(int ILayer = 0; ILayer < MAXLAYERS; ILayer++) { - sprintf(name, "Full_Cell_Layer_%i", ILayer); - sprintf(title, "Full Cell Layer %i", ILayer); - Full_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Half_Cell_Layer_%i", ILayer); - sprintf(title, "Half Cell Layer %i", ILayer); - Half_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "MB_Cell_Layer_%i", ILayer); - sprintf(title, "MB Cell Layer %i", ILayer); - MB_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Calib_Pads_Layer_%i", ILayer); - sprintf(title, "Calib Pads Layer %i", ILayer); - Calib_Pads[ILayer] = fs->make(name, title, 1000, -500., 500.); - sprintf(name, "Merged_Cell_Layer_%i", ILayer); - sprintf(title, "Merged Cell Layer %i", ILayer); - Merged_Cell[ILayer] = fs->make(name, title, 1000, -500., 500.); + for(int ISkiroc=1;ISkiroc<3;++ISkiroc){ + //printf("ISkiroc=%d\n",ISkiroc); + sprintf(name, "HighGainCommonModeVsCellArea_%i", ILayer+1); + sprintf(title, "HighGainCommonMode Noise Vs CellArea Layer %i", ILayer+1); + h_Correlation_CellArea[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 1.5); + h_Correlation_CellArea[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Area[cm^{2}]"); + h_Correlation_CellArea[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + h_Correlation_CellArea[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "HighGainCommonModeVsCellPerimeter_%i", ILayer+1); + sprintf(title, "HighGainCommonMode Noise Vs CellPerimeter Layer %i", ILayer+1); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 5.); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Perimeter[cm]"); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + h_Correlation_CellPerimeter[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "LowGainCommonModeVsCellArea_%i", ILayer+1); + sprintf(title, "LowgainCommonMode Noise Vs CellArea Layer %i", ILayer+1); + l_Correlation_CellArea[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 1.5); + l_Correlation_CellArea[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Area[cm^{2}]"); + l_Correlation_CellArea[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + l_Correlation_CellArea[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "LowGainCommonModeVsCellPerimeter_%i", ILayer+1); + sprintf(title, "LoGainCommonMode Noise Vs CellPerimeter Layer %i", ILayer+1); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer] = fs->make(name, title, 1000, 0., 5.); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetXaxis()->SetTitle("Perimeter[cm]"); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->GetYaxis()->SetTitle("Common Mode Noise"); + l_Correlation_CellPerimeter[ISkiroc-1][ILayer]->SetMarkerStyle(20); + + sprintf(name, "H_Full_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Full Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Full_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Half_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Half Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Half_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_MB_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_MB Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_MB_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Calib_Pads_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Calib Pads Layer %i Ski %d", ILayer+1,ISkiroc); + h_Calib_Pads[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "H_Merged_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "H_Merged Cell Layer %i Ski %d", ILayer+1,ISkiroc); + h_Merged_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + + sprintf(name, "L_Full_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Full Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Full_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Half_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Half Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Half_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_MB_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_MB Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_MB_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Calib_Pads_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Calib Pads Layer %i Ski %d", ILayer+1,ISkiroc); + l_Calib_Pads[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + sprintf(name, "L_Merged_Cell_Layer_%i_Ski%d", ILayer+1,ISkiroc); + sprintf(title, "L_Merged Cell Layer %i Ski %d", ILayer+1,ISkiroc); + l_Merged_Cell[ISkiroc-1][ILayer] = fs->make(name, title, 1000, -500., 500.); + } for(int ISkiroc = 1; ISkiroc <= MAXSKIROCS; ISkiroc++) { for(int Channel = 0; Channel < 64; Channel++) { - sprintf(name, "Ski_%i_Channel_%i_Layer_%i", ISkiroc, Channel, ILayer); - sprintf(title, "Ski %i Channel %i Layer %i", ISkiroc, Channel, ILayer); + sprintf(name, "Ski_%i_Channel_%i_Layer_%i", ISkiroc, Channel, ILayer+1); + sprintf(title, "Ski %i Channel %i Layer %i", ISkiroc, Channel, ILayer+1); h_digi_layer_channel[ISkiroc - 1][Channel][ILayer] = fs->make(name, title, 1000, -500., 500.); /* sprintf(name, "Ski_%i_Channel_%i_CM",ISkiroc,Channel); @@ -160,8 +237,59 @@ RecHitPlotter_HighGain_Correlation_CM::RecHitPlotter_HighGain_Correlation_CM(con */ } } + sprintf(name,"h_pre_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"h_pre_CM_correlation_Layer%d",ILayer+1); + h_pre_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + h_pre_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + h_pre_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"h_post_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"h_post_CM_correlation_Layer%d",ILayer+1); + h_post_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + h_post_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + h_post_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_pre_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"l_pre_CM_correlation_Layer%d",ILayer+1); + l_pre_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + l_pre_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + l_pre_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_post_CM_correlation_Layer%d",ILayer+1); + sprintf(title,"l_post_CM_correlation_Layer%d",ILayer+1); + l_post_CM_Final[ILayer] = fs->make(name,title, 128, 0, 128, 128, 0 ,128); + l_post_CM_Final[ILayer] -> GetXaxis()-> SetTitle("Channel"); + l_post_CM_Final[ILayer] -> GetYaxis()-> SetTitle("Channel"); + + //sprintf(name,"h_post_CM_correlation_Layer%d_C",ILayer+1); + //sprintf(title,"h_post_CM_correlation_Layer%d_C",ILayer+1); + //l_pre_CM_Final_Compare[ILayer] = fs->make(name,title, 128, 0, 127, 128, 0 ,127); + //l_pre_CM_Final_Compare[ILayer] -> GetXaxis()-> SetTitle("Channel"); + //l_pre_CM_Final_Compare[ILayer] -> GetYaxis()-> SetTitle("Channel"); } - + sprintf(name,"h_pre_CM_correlation_AllLayers"); + sprintf(title,"h_pre_CM_correlation_AllLayers"); + h_pre_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + h_pre_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + h_pre_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"h_post_CM_correlation_AllLayers"); + sprintf(title,"h_post_CM_correlation_AllLayers"); + h_post_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + h_post_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + h_post_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_pre_CM_correlation_AllLayers"); + sprintf(title,"l_pre_CM_correlation_AllLayers"); + l_pre_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + l_pre_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + l_pre_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); + + sprintf(name,"l_post_CM_correlation_AllLayers"); + sprintf(title,"l_post_CM_correlation_AllLayers"); + l_post_CM_AllLayer_Final = fs->make(name,title, 128*8, 0, 128*8, 128*8, 0 ,128*8); + l_post_CM_AllLayer_Final -> GetXaxis()-> SetTitle("Channel"); + l_post_CM_AllLayer_Final -> GetYaxis()-> SetTitle("Channel"); }//contructor ends here @@ -182,7 +310,6 @@ RecHitPlotter_HighGain_Correlation_CM::~RecHitPlotter_HighGain_Correlation_CM() void RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const edm::EventSetup& setup) { - using namespace edm; edm::Handle Rechits; @@ -190,91 +317,124 @@ RecHitPlotter_HighGain_Correlation_CM::analyze(const edm::Event& event, const ed edm::Handle Rechits1; event.getByToken(HGCalTBRecHitCollection_, Rechits1); - double Average_Pedestal_Per_Event_Full[MAXLAYERS] = {0}; - int Cell_counter[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Half[MAXLAYERS] = {0}; - int Cell_counter_Half[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_MB[MAXLAYERS] = {0}; - int Cell_counter_MB[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Calib_Pad[MAXLAYERS] = {0}; - int Cell_counter_Calib_Pad[MAXLAYERS] = {0}; - double Average_Pedestal_Per_Event_Merged_Cell[MAXLAYERS] = {0}; - int Cell_counter_Merged_Cell[MAXLAYERS] = {0}; + double h_Average_Pedestal_Per_Event_Full[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Full[2][MAXLAYERS] = {{0}}; + int Cell_counter[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Half[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Half[2][MAXLAYERS] = {{0}}; + int Cell_counter_Half[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_MB[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_MB[2][MAXLAYERS] = {{0}}; + int Cell_counter_MB[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Calib_Pad[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Calib_Pad[2][MAXLAYERS] = {{0}}; + int Cell_counter_Calib_Pad[2][MAXLAYERS] = {{0}}; + double h_Average_Pedestal_Per_Event_Merged_Cell[2][MAXLAYERS] = {{0}}; + double l_Average_Pedestal_Per_Event_Merged_Cell[2][MAXLAYERS] = {{0}}; + int Cell_counter_Merged_Cell[2][MAXLAYERS] = {{0}}; for(auto RecHit1 : *Rechits1) { CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit1.id()).layer(), (RecHit1.id()).sensorIU(), (RecHit1.id()).sensorIV(), (RecHit1.id()).iu(), (RecHit1.id()).iv(), sensorsize); uint32_t EID = essource_.emap_.detId2eid(RecHit1.id()); HGCalTBElectronicsId eid(EID); -// if((eid.iskiroc()%2 == 1) && (eid.ichan() == 0 || eid.ichan() == 1 )) continue; -// double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; -// double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); -// Cell_counter++; -// Average_Pedestal_Per_Event_Full += RecHit1.energyHigh(); - if(RecHit1.energyHigh() > 32.) continue; + if(RecHit1.energyHigh() > 30) continue; if((RecHit1.id()).cellType() == 0) { -// Full_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Full[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if((RecHit1.id()).cellType() == 2) { -// Half_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Half[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Half[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if(((RecHit1.id()).cellType() == 3) && ( ((RecHit1.id()).iu() == 4 && (RecHit1.id()).iv() == 3) || ((RecHit1.id()).iu() == -7 && (RecHit1.id()).iv() == 4) || ((RecHit1.id()).iu() == 7 && (RecHit1.id()).iv() == -3) || ((RecHit1.id()).iu() == -4 && (RecHit1.id()).iv() == -3) )) { -// MB_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_MB[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_MB[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if(((RecHit1.id()).cellType() == 3) && (((RecHit1.id()).iu() == -4 && (RecHit1.id()).iv() == 6) || ((RecHit1.id()).iu() == -2 && (RecHit1.id()).iv() == 6) || ((RecHit1.id()).iu() == 4 && (RecHit1.id()).iv() == -7) || ((RecHit1.id()).iu() == 2 && (RecHit1.id()).iv() == -6))) { -// Merged_Cell[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Merged_Cell[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Merged_Cell[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); - } else if((RecHit1.id()).cellType() == 1) { -// Calib_Pads[(RecHit1.id()).layer() - 1]->Fill(RecHit1.energyHigh()); - Cell_counter_Calib_Pad[(RecHit1.id()).layer() - 1]++; - Average_Pedestal_Per_Event_Calib_Pad[(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + Cell_counter[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Full[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Full[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if((RecHit1.id()).cellType() == 2) { + Cell_counter_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Half[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if(((RecHit1.id()).cellType() == 3)){ + Cell_counter_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_MB[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if(((RecHit1.id()).cellType() == 5)) { + Cell_counter_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Merged_Cell[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); + } + else if((RecHit1.id()).cellType() == 1) { + Cell_counter_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1]++; + h_Average_Pedestal_Per_Event_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyHigh(); + l_Average_Pedestal_Per_Event_Calib_Pad[(eid.iskiroc() - 1)%2][(RecHit1.id()).layer() - 1] += RecHit1.energyLow(); } } for(int iii = 0; iii < MAXLAYERS; iii++) { - if(Cell_counter[iii] != 0) Full_Cell[iii]->Fill(Average_Pedestal_Per_Event_Full[iii] / Cell_counter[iii]); - if(Cell_counter_Half[iii] != 0) Half_Cell[iii]->Fill(Average_Pedestal_Per_Event_Half[iii] / Cell_counter_Half[iii]); - if(Cell_counter_MB[iii] != 0) MB_Cell[iii]->Fill(Average_Pedestal_Per_Event_MB[iii] / Cell_counter_MB[iii]); - if(Cell_counter_Merged_Cell[iii] != 0) Merged_Cell[iii]->Fill(Average_Pedestal_Per_Event_Merged_Cell[iii] / Cell_counter_Merged_Cell[iii]); - if(Cell_counter_Calib_Pad[iii] != 0) Calib_Pads[iii]->Fill(Average_Pedestal_Per_Event_Calib_Pad[iii] / Cell_counter_Calib_Pad[iii]); -// cout<Fill(h_Average_Pedestal_Per_Event_Full[ISkiroc][iii] / Cell_counter[ISkiroc][iii]); + if(Cell_counter_Half[ISkiroc][iii] != 0) h_Half_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Half[ISkiroc][iii] / Cell_counter_Half[ISkiroc][iii]); + if(Cell_counter_MB[ISkiroc][iii] != 0) h_MB_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_MB[ISkiroc][iii] / Cell_counter_MB[ISkiroc][iii]); + if(Cell_counter_Merged_Cell[ISkiroc][iii] != 0) h_Merged_Cell[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Merged_Cell[ISkiroc][iii] / Cell_counter_Merged_Cell[ISkiroc][iii]); + if(Cell_counter_Calib_Pad[ISkiroc][iii] != 0) h_Calib_Pads[ISkiroc][iii]->Fill(h_Average_Pedestal_Per_Event_Calib_Pad[ISkiroc][iii] / Cell_counter_Calib_Pad[ISkiroc][iii]); + + if(Cell_counter[ISkiroc][iii] != 0) l_Full_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Full[ISkiroc][iii] / Cell_counter[ISkiroc][iii]); + if(Cell_counter_Half[ISkiroc][iii] != 0) l_Half_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Half[ISkiroc][iii] / Cell_counter_Half[ISkiroc][iii]); + if(Cell_counter_MB[ISkiroc][iii] != 0) l_MB_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_MB[ISkiroc][iii] / Cell_counter_MB[ISkiroc][iii]); + if(Cell_counter_Merged_Cell[ISkiroc][iii] != 0) l_Merged_Cell[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Merged_Cell[ISkiroc][iii] / Cell_counter_Merged_Cell[ISkiroc][iii]); + if(Cell_counter_Calib_Pad[ISkiroc][iii] != 0) l_Calib_Pads[ISkiroc][iii]->Fill(l_Average_Pedestal_Per_Event_Calib_Pad[ISkiroc][iii] / Cell_counter_Calib_Pad[ISkiroc][iii]); + } } for(auto RecHit : *Rechits) { -// if(RecHit.energyHigh() > 32.) continue; if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); -// double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; -// double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); uint32_t EID = essource_.emap_.detId2eid(RecHit.id()); HGCalTBElectronicsId eid(EID); -// TF1* Fit2= (TF1*) h_digi_layer_channel[eid.iskiroc()-1][eid.ichan()]->GetFunction("gaus"); + + if((RecHit.id()).layer() - 1 != pre_Layer){ + if((RecHit.id()).layer() - 1 != 0) Eventnumber=Eventnumber_1; + else Eventnumber_1=Eventnumber; + } + if(!doCommonMode_CM) { h_digi_layer_channel[eid.iskiroc() - 1][eid.ichan()][(RecHit.id()).layer() - 1]->Fill(RecHit.energyHigh()); Noise_2D_Profile->Fill((64 * (eid.iskiroc() - 1) + eid.ichan()), RecHit.energyHigh()); } if(doCommonMode_CM) { AllCells_Ped->Fill(RecHit.energyHigh()); -// cout<Fill(1.579, h_Merged_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(1.09, h_Full_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.978, h_MB_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.545, h_Half_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellArea[ISkiroc][iii]->Fill(0.15, h_Calib_Pads[ISkiroc][iii]->GetRMS()); + + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(5.972, h_Merged_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.894, h_Full_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.47, h_Half_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(4.156, h_MB_Cell[ISkiroc][iii]->GetRMS()); + h_Correlation_CellPerimeter[ISkiroc][iii]->Fill(1.44, h_Calib_Pads[ISkiroc][iii]->GetRMS()); + + l_Correlation_CellArea[ISkiroc][iii]->Fill(1.579, l_Merged_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(1.09, l_Full_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.978, l_MB_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.545, l_Half_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellArea[ISkiroc][iii]->Fill(0.15, l_Calib_Pads[ISkiroc][iii]->GetRMS()); + + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(5.972, l_Merged_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.894, l_Full_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(3.47, l_Half_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(4.156, l_MB_Cell[ISkiroc][iii]->GetRMS()); + l_Correlation_CellPerimeter[ISkiroc][iii]->Fill(1.44, l_Calib_Pads[ISkiroc][iii]->GetRMS()); + } + } + + printf("Eventnumber=%d\n",Eventnumber); + + /* //=========================One Layer Correlation======================== + for(int layer=0;layer<8;layer++){ + if(Eventnumber==0)break; + for(int ChX=0;ChX<128;ChX++){ + // Calculate_Correlation-> Reset(); + for(int ChY=ChX;ChY<128;ChY++){ + double sumxy=0,sumx=0,sumy=0,sumx2=0,sumy2=0; + double correlation=0; + for(int Event=0;EventFill(h_p_Channel[ChX][Event][layer],h_p_Channel[ChY][Event][layer]); + //Calculate_Correlation2->Fill(l_p_Channel[ChX][Event][layer],l_p_Channel[ChY][Event][layer]); + Calculate_Correlation3->Fill(h_A_Channel[ChX][Event][layer],h_A_Channel[ChY][Event][layer]); + //Calculate_Correlation4->Fill(l_A_Channel[ChX][Event][layer],l_A_Channel[ChY][Event][layer]); + + sumxy += h_A_Channel[ChX][Event][layer]*h_A_Channel[ChY][Event][layer]; + sumx += h_A_Channel[ChX][Event][layer]; + sumy += h_A_Channel[ChY][Event][layer]; + sumx2 += pow(h_A_Channel[ChX][Event][layer],2); + sumy2 += pow(h_A_Channel[ChY][Event][layer],2); + } + correlation=((Eventnumber*sumxy)-(sumx*sumy))/(sqrt((Eventnumber*sumx2)-(sumx*sumx))*sqrt((Eventnumber*sumy2)-(sumy*sumy))); + + //h_pre_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation1-> GetCorrelationFactor()); + //l_pre_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation2-> GetCorrelationFactor()); + l_pre_CM_Final_Compare[layer]->Fill(ChX,ChY,correlation); + h_post_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation3-> GetCorrelationFactor()); + //l_post_CM_Final[layer]->Fill(ChX,ChY,Calculate_Correlation4-> GetCorrelationFactor()); + if(ChX!=ChY){ + //h_pre_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation1-> GetCorrelationFactor()); + //l_pre_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation2-> GetCorrelationFactor()); + l_pre_CM_Final_Compare[layer]->Fill(ChY,ChX,correlation); + h_post_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation3-> GetCorrelationFactor()); + //l_post_CM_Final[layer]->Fill(ChY,ChX,Calculate_Correlation4-> GetCorrelationFactor()); + } + //printf("[%d][%d][%d]=%lf\n",ChX,ChY,layer,Calculate_Correlation1-> GetCorrelationFactor()); + //Calculate_Correlation1-> Reset(); + //Calculate_Correlation2-> Reset(); + Calculate_Correlation3-> Reset(); + //Calculate_Correlation4-> Reset(); + } + printf("Finish Channel[%d] Layer[%d]\n",ChX,layer+1); + } + } + //==========================================================================*/ + + //=========================All Layers Correlation=========================== + for(int layer=0;layer<8;++layer){ + if(Eventnumber==0)break; + for(int ChX=0;ChX<128;++ChX){ + // Calculate_Correlation-> Reset(); + for(int layer2=layer;layer2<8;++layer2){ + for(int ChY=ChX;ChY<128;ChY++){ + double sumxy[4]={0},sumx[4]={0},sumy[4]={0},sumx2[4]={0},sumy2[4]={0},correlation[4]={0}; + for(int Event=0;EventFill(h_p_Channel[ChX][Event][layer],h_p_Channel[ChY][Event][layer2]); + //Calculate_Correlation2->Fill(l_p_Channel[ChX][Event][layer],l_p_Channel[ChY][Event][layer2]); + //Calculate_Correlation3->Fill(h_A_Channel[ChX][Event][layer],h_A_Channel[ChY][Event][layer2]); + //Calculate_Correlation4->Fill(l_A_Channel[ChX][Event][layer],l_A_Channel[ChY][Event][layer2]); + for(int type=0;type<4;++type){ + sumxy[type] += ADC_Channel[type][ChX][Event][layer]*ADC_Channel[type][ChY][Event][layer2]; + sumx[type] += ADC_Channel[type][ChX][Event][layer]; + sumy[type] += ADC_Channel[type][ChY][Event][layer2]; + sumx2[type] += pow(ADC_Channel[type][ChX][Event][layer],2); + sumy2[type] += pow(ADC_Channel[type][ChY][Event][layer2],2); + } + } + for(int type=0;type<4;++type){ + correlation[type]=((Eventnumber*sumxy[type])-(sumx[type]*sumy[type]))/(sqrt((Eventnumber*sumx2[type])-(sumx[type]*sumx[type]))*sqrt((Eventnumber*sumy2[type])-(sumy[type]*sumy[type]))); + } + if(layer2==layer){ + h_pre_CM_Final[layer]->Fill(ChX,ChY,correlation[0]); + l_pre_CM_Final[layer]->Fill(ChX,ChY,correlation[1]); + h_post_CM_Final[layer]->Fill(ChX,ChY,correlation[2]); + l_post_CM_Final[layer]->Fill(ChX,ChY,correlation[3]); + if(ChX!=ChY){ + h_pre_CM_Final[layer]->Fill(ChY,ChX,correlation[0]); + l_pre_CM_Final[layer]->Fill(ChY,ChX,correlation[1]); + h_post_CM_Final[layer]->Fill(ChY,ChX,correlation[2]); + l_post_CM_Final[layer]->Fill(ChY,ChX,correlation[3]); + } + } + h_pre_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChX+(layer*128),ChY+(layer2*128),correlation[3]); + if(ChX!=ChY){ + h_pre_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChY+(layer*128),ChX+(layer2*128),correlation[3]); + } + if(layer2!=layer){ + h_pre_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChY+(layer2*128),ChX+(layer*128),correlation[3]); + if(ChX!=ChY){ + h_pre_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[0]); + l_pre_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[1]); + h_post_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[2]); + l_post_CM_AllLayer_Final->Fill(ChX+(layer2*128),ChY+(layer*128),correlation[3]); + } + } + } + } + printf("Finish Channel[%d] Layer[%d]\n",ChX,layer+1); + } + } + //================================================================================================== } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ diff --git a/Reco/plugins/RecHitPlotter_HighGain_New.cc b/Reco/plugins/RecHitPlotter_HighGain_New.cc index 100a6f8..503770d 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_New.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_New.cc @@ -67,8 +67,7 @@ double Return_RMS(double mean_sq, double mean) return sqrt(mean_sq - mean * mean); } bool DoCommonMode = 1; -bool PED = 0; -bool UP = 1; +int Event_multiple = 1; edm::Service fs; class RecHitPlotter_HighGain_New : public edm::one::EDAnalyzer @@ -99,37 +98,9 @@ class RecHitPlotter_HighGain_New : public edm::one::EDAnalyzer CellCentreXY; std::vector>::const_iterator it; const static int NLAYERS = 1; - double Mean_SUM[128] = {0.}; - double Mean_SQ_SUM[128] = {0.}; - double Mean_PROD_SUM[128][128] = { {0.} }; - double Diff_IJ_SUM[128][128] = { {0.} }; - double Mean_i = 0.; - double Mean_j = 0.; - double RMS_i = 0.; - double RMS_j = 0.; - double Correlation = 0.; - double Covariance = 0.; - TH2F *Covar_hist; - TH2F *Correl_hist; - TH2F *DiffIJ_hist; -//TH2D *Covar_hist = new TH2D("Covar_hist","Covar_hist",nphistar_bins-1,phistar_var,nphistar_bins-1,phistar_var); -//TH2D *Correl_hist = new TH2D("Correl_hist","Correl_hist",nphistar_bins-1,phistar_var,nphistar_bins-1,phistar_var); - - int Sensor_Iu = 0; int Sensor_Iv = 0; - double ADC_Chan[128][9000]; - TH1F *h_RecHit_layer_summed[MAXLAYERS]; - TH1F* Sum_Cluster_ADC; - TH1F* Sum_Cluster_Max; - TH1F* AllCells_Ped; - TH1F* AllCells_CM; - TProfile* SKI1_Ped_Event; - TProfile* SKI2_Ped_Event; - TH1F* CG_X; - TH1F* CG_Y; char name[50], title[50]; - double ExtrapolateZ = 20.;// distance along Z the tracks are extrapolated by(in cm) to hit the first layer. }; // @@ -148,25 +119,6 @@ RecHitPlotter_HighGain_New::RecHitPlotter_HighGain_New(const edm::ParameterSet& //now do what ever initialization is needed HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); //Booking 2 "hexagonal" histograms to display the sum of Rechits and the Occupancy(Hit > 5 GeV) in 1 sensor in 1 layer. To include all layers soon. Also the 1D Rechits per cell in a sensor is booked here. - Covar_hist = fs->make("Covar_hist", "Covar_hist", 128, 0, 128, 128, 0, 128); - Correl_hist = fs->make("Correl_hist", "Correl_hist", 128, 0, 128, 128, 0, 128); - DiffIJ_hist = fs->make("DiffIJ_hist", "DiffIJ_hist", 128, 0, 128, 128, 0, 128); - CG_X = fs->make("CG_X", "CG X[cm]", 100, -5, 5); - CG_Y = fs->make("CG_Y", "CG Y[cm]", 100, -5, 5); - AllCells_Ped = fs->make("AllCells_Ped", "AllCells_Ped", 500, -250, 250); - AllCells_CM = fs->make("AllCells_CM", "AllCells_CM", 500, -250, 250); - SKI1_Ped_Event = fs->make("SKI1_Ped_Event", "Profile per event of pedestal for SKI1", 5000, 1, 5000, 0, 400); - SKI2_Ped_Event = fs->make("SKI2_Ped_Event", "Profile per event of pedestal for SKI2", 5000, 1, 5000, 0, 400); - Sum_Cluster_ADC = fs->make("Sum_Cluster_ADC", "Sum_Cluster_ADC", 1000, -4000., 4000.); - Sum_Cluster_Max = fs->make("Sum_Cluster_Max", "Sum_Cluster_Max", 1000, -4000., 4000.); - for(int nlayers = 0; nlayers < MAXLAYERS; nlayers++) { - sprintf(name, "FullLayer_RecHits_Layer%i_Summed", nlayers + 1); - sprintf(title, "Sum of RecHits Layer%i Summed over the cells", nlayers + 1); - h_RecHit_layer_summed[nlayers] = fs->make(name, title, 4000, -2000., 2000.); - h_RecHit_layer_summed[nlayers]->GetXaxis()->SetTitle("RecHits[GeV]"); - }//loop over layers end here - - }//contructor ends here @@ -219,12 +171,8 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet edm::Handle Rechits1; event.getByToken(HGCalTBRecHitCollection_, Rechits1); - double Average_Pedestal_Per_Event1_Full = 0, Average_Pedestal_Per_Event1_Half = 0, Average_Pedestal_Per_Event2_Full = 0, Average_Pedestal_Per_Event2_Half = 0; - int Cell_counter1_Full = 0, Cell_counter2_Full = 0, Cell_counter1_Half = 0, Cell_counter2_Half = 0; - double iux_Max = 0., iyy_Max = 0.; - int ADC_TMP = 0; - - int Sum_Cluster_Tmp = 0; + double Average_Pedestal_Per_Event_Full = 0, Average_Pedestal_Per_Event_Half = 0, Average_Pedestal_Per_Event_MB = 0, Average_Pedestal_Per_Event_Merged = 0; + int Cell_counter_Full = 0, Cell_counter_Half = 0, Cell_counter_MB = 0, Cell_counter_Merged = 0; /* for(auto Track : *Tracks) { @@ -234,100 +182,57 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet for(auto RecHit1 : *Rechits1) { CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit1.id()).layer(), (RecHit1.id()).sensorIU(), (RecHit1.id()).sensorIV(), (RecHit1.id()).iu(), (RecHit1.id()).iv(), sensorsize); - double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; - double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); - if((RecHit1.energyHigh() > ADC_TMP)) { - ADC_TMP = RecHit1.energyHigh(); - iux_Max = iux; - iyy_Max = iyy; - } - if(RecHit1.energyHigh() > 20.) continue; -// if(UP && fabs(iux - iux_Max) > 0. && fabs(iyy - iyy_Max) > 0. && RecHit1.energyHigh()< 2000000.){ - if(((RecHit1.id()).cellType() == 0) || ((RecHit1.id()).cellType() == 5)) { + if(RecHit1.energyHigh() > 30.) continue; - if(( iyy >= -0.25 )) { - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - } - - if((iyy <= -0.5)) { - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - } + if(((RecHit1.id()).cellType() == 0) || ((RecHit1.id()).cellType() == 4)) { - /* - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - */ - } + Cell_counter_Full++; + Average_Pedestal_Per_Event_Full += RecHit1.energyHigh(); - if(((RecHit1.id()).cellType() == 2) || ((RecHit1.id()).cellType() == 3) || ((RecHit1.id()).cellType() == 4) ) { - - if(((iyy >= -0.25 ))) { - Cell_counter1_Half++; - Average_Pedestal_Per_Event1_Half += RecHit1.energyHigh(); - } - if(((iyy <= -0.5))) { - Cell_counter2_Half++; - Average_Pedestal_Per_Event2_Half += RecHit1.energyHigh(); - } } -// } + if((RecHit1.id()).cellType() == 5) { + Cell_counter_Merged++; + Average_Pedestal_Per_Event_Merged += RecHit1.energyHigh(); + + } - if(!UP) { - if(((RecHit1.id()).cellType() == 0)) { + if((RecHit1.id()).cellType() == 3) { - if((iux <= -0.25 && iux >= -3.25) && (iyy <= -0.25 && iyy >= -5.25 ) && (RecHit1.id()).cellType() == 0) { - Cell_counter1_Full++; - Average_Pedestal_Per_Event1_Full += RecHit1.energyHigh(); - } + Cell_counter_MB++; + Average_Pedestal_Per_Event_MB += RecHit1.energyHigh(); - if((iux >= -0.25 && iux <= 3.25) && (iyy <= -0.25 && iyy >= -5.25 ) && (RecHit1.id()).cellType() == 0) { - Cell_counter2_Full++; - Average_Pedestal_Per_Event2_Full += RecHit1.energyHigh(); - } - } - - if(((RecHit1.id()).cellType() == 2) || ((RecHit1.id()).cellType() == 3) || ((RecHit1.id()).cellType() == 4) ) { + } - if((iux <= 0.25 && iyy >= -0.25 ) || (iux < -0.5) ) { - Cell_counter1_Half++; - Average_Pedestal_Per_Event1_Half += RecHit1.energyHigh(); - } - if((iux >= 0.25 && iyy <= -0.5) || (iux >= 0.5) ) { - Cell_counter2_Half++; - Average_Pedestal_Per_Event2_Half += RecHit1.energyHigh(); - } - } + if((RecHit1.id()).cellType() == 2) { + Cell_counter_Half++; + Average_Pedestal_Per_Event_Half += RecHit1.energyHigh(); + } - } - if(ADC_TMP > 50.) { - CG_X->Fill(iux_Max); - CG_Y->Fill(iyy_Max); - Sum_Cluster_Max->Fill(ADC_TMP); -// cout<SetName(name); + h_RecHit_layer[iLayer -1]->SetTitle(title); + InitTH2Poly(*h_RecHit_layer[iLayer -1]); + } } - TH2Poly *h_RecHit_layer[MAXLAYERS]; - int evId = event.id().event() - 1; - int iLayer = (evId % (MAXLAYERS * EVENTSPERSPILL)) / (EVENTSPERSPILL); - cout << endl << " iLayer= " << iLayer << endl; - h_RecHit_layer[iLayer] = fs->make(); - sprintf(name, "FullLayer_ADC%i_Layer%i_Event%i", 0, iLayer + 1, evId); - sprintf(title, "ADC counts in Layer%i", iLayer + 1); - h_RecHit_layer[iLayer]->SetName(name); - h_RecHit_layer[iLayer]->SetTitle(title); - InitTH2Poly(*h_RecHit_layer[iLayer]); + for(auto RecHit : *Rechits) { + if(((evId - 1)%Event_multiple) != 0) continue; + if(!IsCellValid.iu_iv_valid((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize)) continue; int n_layer = (RecHit.id()).layer(); CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots((RecHit.id()).layer(), (RecHit.id()).sensorIU(), (RecHit.id()).sensorIV(), (RecHit.id()).iu(), (RecHit.id()).iv(), sensorsize); @@ -335,76 +240,29 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); uint32_t EID = essource_.emap_.detId2eid(RecHit.id()); HGCalTBElectronicsId eid(EID); - AllCells_Ped->Fill(RecHit.energyHigh()); - if(RecHit.energyHigh() > 55) cout << endl << " Energy= " << RecHit.energyHigh() << " u= " << iux << " v= " << iyy << " event number= " << event.id().event() << endl; -// if((RecHit.id()).iu() == 4 && (RecHit.id()).iv() == 2) continue; if(!DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh()); + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy()); } - if(((RecHit.id()).cellType() == 0 ) || ((RecHit.id()).cellType() == 5) ) { - if((iyy >= -0.25 ) ) { - if(!PED && DoCommonMode) { - if((RecHit.id()).cellType() == 0) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))) ); - - } - Sum_Cluster_Tmp += (RecHit.energyHigh()); - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Full / (Cell_counter1_Full))); - } -// Sum_Cluster_ADC->Fill(RecHit.energyHigh()- (Average_Pedestal_Per_Event1_Full/(Cell_counter1_Full))); -// CG_X->Fill(iux); -// CG_Y->Fill(iyy); - } else if(( iyy < -0.50 )) { - if(!PED && DoCommonMode) { - if((RecHit.id()).cellType() == 0) h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))) ); - Sum_Cluster_Tmp += (RecHit.energyHigh()); - - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Full / (Cell_counter2_Full))); - } -// Sum_Cluster_ADC->Fill(RecHit.energyHigh()- (Average_Pedestal_Per_Event2_Full/(Cell_counter2_Full))); -// CG_X->Fill(iux); -// CG_Y->Fill(iyy); + else{//If Common mode subtraction is enabled + if(((RecHit.id()).cellType() == 0 ) || ((RecHit.id()).cellType() == 4) ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, (RecHit.energy() - (Average_Pedestal_Per_Event_Full / (Cell_counter_Full))) ); } - } - if((RecHit.id()).cellType() == 1 ) { - if(!PED) h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh()); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh()); + if((RecHit.id()).cellType() == 1 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy()); } - } - if(((RecHit.id()).cellType() != 5) && ((RecHit.id()).cellType() != 1) && ((RecHit.id()).cellType() != 0)) { - if((iyy >= -0.25 ) ) { - if(!PED && DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / Cell_counter1_Half) ); - - } -// h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / Cell_counter1_Half)); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event1_Half / (Cell_counter1_Half))); - } - } - if(( iyy < -0.50 )) { - if(!PED && DoCommonMode) { - h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / Cell_counter2_Half) ); - - } - h_RecHit_layer_summed[n_layer - 1]->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / Cell_counter2_Half)); - if(DoCommonMode) { - AllCells_CM->Fill(RecHit.energyHigh() - (Average_Pedestal_Per_Event2_Half / (Cell_counter2_Half))); - } - } - - } - } - - if(Sum_Cluster_Tmp > 2. ) Sum_Cluster_ADC->Fill(Sum_Cluster_Tmp); + if((RecHit.id()).cellType() != 2 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Half / Cell_counter_Half) ); + } + if((RecHit.id()).cellType() != 3 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_MB/Cell_counter_MB) ); + } + if((RecHit.id()).cellType() != 5 ) { + h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Merged/Cell_counter_Merged) ); + } + + }//else common mode condition + }//Rechits loop ends here }//analyze method ends here diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index eedac1f..ab7c99b 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -135,11 +135,14 @@ # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Digi.root"%(options.outputFolder,options.runType,options.runNumber))) -elif (options.chainSequence == 3 or options.chainSequence == 4 or options.chainSequence == 5 or options.chainSequence == 6): +elif (options.chainSequence == 3): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Unpacker_Digi_Check.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 4): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_EventDisplay.root"%(options.outputFolder,options.runType,options.runNumber))) +elif (options.chainSequence == 5): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco.root"%(options.outputFolder,options.runType,options.runNumber))) -# process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco.root") ) -#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Layer.root") ) -#process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Cluster.root") ) +elif (options.chainSequence == 6): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) @@ -182,7 +185,7 @@ elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) elif (options.chainSequence == 6): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) elif (options.chainSequence == 7): From fbc250207552803000b5c3519e30acb91b20531e Mon Sep 17 00:00:00 2001 From: vieri Date: Mon, 31 Oct 2016 15:09:46 +0100 Subject: [PATCH 098/297] inew analyzer for correlation studies --- .../plugins/Layer_Sum_Analyzer_Correlation.cc | 318 ++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 Reco/plugins/Layer_Sum_Analyzer_Correlation.cc diff --git a/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc b/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc new file mode 100644 index 0000000..c85e4b1 --- /dev/null +++ b/Reco/plugins/Layer_Sum_Analyzer_Correlation.cc @@ -0,0 +1,318 @@ +/* Need full layer, 7 cell cluster, and 19 cell cluster histograms for each layer + * also need each for all layers summed + * use ADC to MIP conversion of 1 MIP = 10 ADC Counts */ + +/** + @Author: Ryan Quinn + 7 July 2016 + quinn@physics.umn.edu + + With modifications by + Shin-Shan Eiko Yu and Vieri Candelise +*/ + + + +// system include files +#include +#include +#include "TH2Poly.h" +#include "TProfile.h" +#include "TH1F.h" +#include "TF1.h" +#include +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" +#include "HGCal/Geometry/interface/HGCalTBSpillParameters.h" + +// chooses which particle to look at. Inverts threshold filtering. +// if nothing is selected, electrons are the default + +double Layer_Z[16] = {1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8}; +double ADCtoMIP[16] = {1.}; +double LayerWeight[16] = {1.}; +double LayerSumWeight = 1.; +const int CMTHRESHOLD = 30;// anything less than this value is added to the commonmode sum +const int LGCMTHRESHOLD =3; // common-mode noise for low-gain (need to be double checked, Eiko) + +// applied to all layers sum after commonmode subtraction and the ADC to MIP conversion +const double PION_ALLCELLS_THRESHOLD = 15.; +const double PION_7CELLS_THRESHOLD = -100.; +const double PION_19CELLS_THRESHOLD = -100.; + +const int NTYPES=6; +const int NCHIPS=2; +const int NCHANS=64; + +using namespace std; + +class Layer_Sum_Analyzer_Correlation : public edm::one::EDAnalyzer +{ + +public: + explicit Layer_Sum_Analyzer_Correlation(const edm::ParameterSet&); + ~Layer_Sum_Analyzer_Correlation(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + + bool ELECTRONS; + bool PIONS; + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + edm::EDGetToken HGCalTBRecHitCollection_; + struct { + HGCalElectronicsMap emap_; + } essource_; + string mapfile_ = "HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"; + int sensorsize = 128; + std::vector> CellXY; + std::pair CellCentreXY; + HGCalTBCellVertices TheCell; + double maxdist = (1 + sqrt (3) / 2) * HGCAL_TB_CELL::FULL_CELL_SIDE; + + // added by Eiko and Vieri + TH2F *HighGain_LowGain_2D_lct[MAXLAYERS][NCHIPS][NTYPES]; + TProfile *pf_HighGain_LowGain_2D_cmremoved_lct[MAXLAYERS][NCHIPS][NTYPES]; + TProfile *pf_HighGain_LowGain_2D_lcc[MAXLAYERS][NCHIPS][NCHANS]; + TProfile *pf_HighGain_LowGain_2D_cmremoved_lcc[MAXLAYERS][NCHIPS][NCHANS]; + + int SPILL = 0, EVENT = 0, LAYER = 0; + + map Time_Stamp; + map Delta_Time_Stamp; + double Time_Temp = 0.; +}; + + + +Layer_Sum_Analyzer_Correlation::Layer_Sum_Analyzer_Correlation(const edm::ParameterSet& iConfig) +{ + + // check if it's an electron or pion beam + if(iConfig.getParameter("particleType")=="electron") + { + ELECTRONS=true; + PIONS=false; + } + else if(iConfig.getParameter("particleType")=="pion") + { + ELECTRONS=false; + PIONS=true; + } + + if(ELECTRONS)std::cout << "running on electron sample" << std::endl; + if(PIONS)std::cout << "running on pion sample" << std::endl; + + // initialization + usesResource("TFileService"); + edm::Service fs; + HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + + //booking the histos + for(int layer = 0; layer < MAXLAYERS; layer++) { + stringstream name, sevenname, nineteenname, Xname, Yname, X_Y_name; + + for(int ik = 0; ik < NCHIPS; ik++){ + for(int ij= 0; ij < NCHANS; ij++){ + stringstream name3; + name3 << "pf_HighGain_LowGain_2D_lcc" << layer+1 << Form("%02i",ik+1) << Form("%02i",ij); + pf_HighGain_LowGain_2D_lcc[layer][ik][ij] = fs->make(name3.str().c_str(), name3.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_lcc[layer][ik][ij] -> Sumw2(); + stringstream name4; + name4 << "pf_HighGain_LowGain_2D_cmremoved_lcc" << layer+1 << Form("%02i",ik+1) << Form("%02i",ij); + pf_HighGain_LowGain_2D_cmremoved_lcc[layer][ik][ij] = fs->make(name4.str().c_str(), name4.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_cmremoved_lcc[layer][ik][ij] -> Sumw2(); + } // end of loop over channels, 0-63 + for(int im= 0; im < NTYPES; im++){ + stringstream name3; + name3 << "HighGain_LowGain_2D_lct" << layer+1 << Form("%02i",ik+1) << Form("%02i",im); + HighGain_LowGain_2D_lct[layer][ik][im] = fs->make(name3.str().c_str(), name3.str().c_str(),4000,0,4000,4000,0,4000); + HighGain_LowGain_2D_lct[layer][ik][im] -> Sumw2(); + + stringstream name4; + name4 << "pf_HighGain_LowGain_2D_cmremoved_lct" << layer+1 << Form("%02i",ik+1) << Form("%02i",im); + pf_HighGain_LowGain_2D_cmremoved_lct[layer][ik][im] = fs->make(name4.str().c_str(), name4.str().c_str(),4000,0,4000); + pf_HighGain_LowGain_2D_cmremoved_lct[layer][ik][im] -> Sumw2(); + + } // end of loop over types + } // end loop over skirocs + } // end of loop over layers +}//constructor ends here + +Layer_Sum_Analyzer_Correlation::~Layer_Sum_Analyzer_Correlation() +{ + + // do anything here that needs to be done at desctruction time + // (e.g. close files, deallocate resources etc.) + +} + +// ------------ method called for each event ------------ +void +Layer_Sum_Analyzer_Correlation::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + + + if(((event.id()).event() - 1) % (EVENTSPERSPILL * MAXLAYERS) == 0 && (event.id()).event() != 1) { + SPILL++; + } + LAYER = (((event.id()).event() - 1) / EVENTSPERSPILL) % MAXLAYERS; + EVENT = ((event.id()).event() - 1) % EVENTSPERSPILL + EVENTSPERSPILL * SPILL; + if(EVENT == 1) { + Time_Temp = event.time().value(); + Time_Stamp[EVENT] = Time_Temp; + Delta_Time_Stamp[EVENT] = 0.; + } else { + Time_Stamp[EVENT] = event.time().value(); + Delta_Time_Stamp[EVENT] = event.time().value() - Time_Temp; + Time_Temp = event.time().value(); + } + //opening Rechits + edm::Handle Rechits; + event.getByToken(HGCalTBRecHitCollection_, Rechits); + + // looping over each rechit to fill histogram + //bool FIRST(1); + double commonmode,max, max_x, max_y; + commonmode=max = max_x = max_y = 0.; + int cm_num=0; + + // added by Eiko for high/low gain + double commonmode_HG[MAXLAYERS][NCHIPS][NTYPES], commonmode_LG[MAXLAYERS][NCHIPS][NTYPES]; + int cm_num_HG[MAXLAYERS][NCHIPS][NTYPES]; + int cm_num_LG[MAXLAYERS][NCHIPS][NTYPES]; + + for(int il=0; ilFill(Rechit.energyLow(),Rechit.energyHigh()); + pf_HighGain_LowGain_2D_lcc[n_layer][skiroc_chip][chan]->Fill(Rechit.energyLow(),Rechit.energyHigh()); + + if((Rechit.id()).cellType() != 0) continue; + + if((Rechit.energyHigh()) / ADCtoMIP[LAYER] <= CMTHRESHOLD) { + commonmode_HG[n_layer][skiroc_chip][type] += Rechit.energyHigh(); + cm_num_HG[n_layer][skiroc_chip][type]++; + commonmode += Rechit.energyHigh(); + cm_num++; + } + if((Rechit.energyLow())/ADCtoMIP[LAYER] <= LGCMTHRESHOLD){ + commonmode_LG[n_layer][skiroc_chip][type] += Rechit.energyLow(); + cm_num_LG[n_layer][skiroc_chip][type]++; + } + }//Rechit loop ends here + + commonmode = cm_num ==0? 0: commonmode/cm_num; + for(int il=0; il Date: Wed, 16 Nov 2016 23:44:54 +0100 Subject: [PATCH 099/297] Added log Energy weighted position of the 19 cell cluster for each layer X_Layer%d_log and Y_Layer%d_log --- Reco/plugins/Layer_Sum_Analyzer.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index f93a688..f408153 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -189,6 +189,7 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer fs; @@ -265,8 +266,7 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_E7oE19_L_dw[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); // } - - + h_eAll_all = fs->make("h_eAll_all", "", 40010, -10, 40000); h_e7_all = fs->make("h_e7_all", "", 40010, -10, 40000); h_e19_all = fs->make("h_e19_all", "", 40010, -10, 40000); @@ -479,7 +479,6 @@ Layer_Sum_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setu }//Rechit loop ends here // std::cout << " >>> found commonmode = " << commonmode << std::endl; - for(int iL=0; iL Date: Sun, 20 Nov 2016 19:48:31 +0100 Subject: [PATCH 100/297] Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi --- RawToDigi/plugins/Bad_Spill_Filter.cc | 17 +++++++++++++++-- test_cfg_newEB.py | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc index fbe142c..d9ba3d5 100644 --- a/RawToDigi/plugins/Bad_Spill_Filter.cc +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -53,8 +53,7 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { virtual void endStream() override; int layers_config_; char buffer[1024]; - int m_run, tmp_run, m_spill, tmp_spill; - int spill_counter = 0; + int m_run, tmp_run, m_spill; const static int Num_BAD_RUNS_CFG1 = 98; const static int Num_BAD_RUNS_CFG2 = 98; @@ -154,11 +153,19 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) int runId = event.id().run(); int spillId = event.luminosityBlock(); +<<<<<<< HEAD +======= + +>>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi int BadRunFlag = 0; int BadSpillFlag = 0; int Bad_Run_Location = 0; +<<<<<<< HEAD if((layers_config_ != 1) && (layers_config_ != 2) ) return true; +======= + if((layers_config_ != 1) || (layers_config_ != 2) ) return true; +>>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi for(int iii = 0; iii < Num_BAD_RUNS_CFG2; iii++){ if((layers_config_ == 1) && (runId == BAD_Runs_CFG1[iii])){ @@ -177,19 +184,25 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) auto Bad_Run_Spill_List = Bad_Run_Spill_Array[Bad_Run_Location]; for(auto Bad_Spill_Iterator : Bad_Run_Spill_List){ if(spillId == Bad_Spill_Iterator){ +<<<<<<< HEAD if(tmp_spill != spillId) spill_counter = 0; if(spill_counter == 0){ cout<>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi BadSpillFlag = 1; } } } if(BadSpillFlag == 1) return false; +<<<<<<< HEAD +======= +>>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi return true; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index ab7c99b..ad8e5ae 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -6,7 +6,7 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', - '~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '/afs/cern.ch/user/r/rchatter/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') @@ -181,7 +181,7 @@ if (options.chainSequence == 1): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter) elif (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): From e0f4689eca55e0aa6cdd1710ca69ced14efbc9f1 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Mon, 21 Nov 2016 12:47:05 +0100 Subject: [PATCH 101/297] Bug fixes to BadSpillFilter. Tested to work for CERN CFG:2. Update with CFG 1 shortly. --- RawToDigi/plugins/Bad_Spill_Filter.cc | 17 ++--------------- test_cfg_newEB.py | 18 +++++++++--------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc index d9ba3d5..cbce059 100644 --- a/RawToDigi/plugins/Bad_Spill_Filter.cc +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -53,7 +53,8 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { virtual void endStream() override; int layers_config_; char buffer[1024]; - int m_run, tmp_run, m_spill; + int m_run, tmp_run, m_spill, tmp_spill; + int spill_counter = 0; const static int Num_BAD_RUNS_CFG1 = 98; const static int Num_BAD_RUNS_CFG2 = 98; @@ -153,19 +154,12 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) int runId = event.id().run(); int spillId = event.luminosityBlock(); -<<<<<<< HEAD -======= ->>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi int BadRunFlag = 0; int BadSpillFlag = 0; int Bad_Run_Location = 0; -<<<<<<< HEAD if((layers_config_ != 1) && (layers_config_ != 2) ) return true; -======= - if((layers_config_ != 1) || (layers_config_ != 2) ) return true; ->>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi for(int iii = 0; iii < Num_BAD_RUNS_CFG2; iii++){ if((layers_config_ == 1) && (runId == BAD_Runs_CFG1[iii])){ @@ -184,25 +178,18 @@ Bad_Spill_Filter::filter(edm::Event& event, const edm::EventSetup& setup) auto Bad_Run_Spill_List = Bad_Run_Spill_Array[Bad_Run_Location]; for(auto Bad_Spill_Iterator : Bad_Run_Spill_List){ if(spillId == Bad_Spill_Iterator){ -<<<<<<< HEAD if(tmp_spill != spillId) spill_counter = 0; if(spill_counter == 0){ cout<>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi BadSpillFlag = 1; } } } if(BadSpillFlag == 1) return false; -<<<<<<< HEAD - -======= ->>>>>>> Added Bad Spill Filters for CERN config1 and 2(Still testing). process.BadSpillFilter after digi return true; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index ad8e5ae..3eda84a 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -4,15 +4,15 @@ import os,sys options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' - +#Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', - '/afs/cern.ch/user/r/rchatter/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', + '/afs/cern.ch/work/r/rchatter/public/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') options.register('outputFolder', - '/tmp/amartell/output/', + '/tmp/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') @@ -178,19 +178,19 @@ ################Miscellaneous############################################################################## #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) +#Using chain sequence 3 only for testing purposes. if (options.chainSequence == 1): process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) elif (options.chainSequence == 4): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) elif (options.chainSequence == 6): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.LayerSumAnalyzer) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.LayerSumAnalyzer) elif (options.chainSequence == 7): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits) - + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) if (options.chainSequence == 7): process.end = cms.EndPath(process.output) From 59b79861df97f79ffe1878ab53228a84654b7fec Mon Sep 17 00:00:00 2001 From: Arnaud Steen Date: Tue, 22 Nov 2016 18:06:51 +0100 Subject: [PATCH 102/297] update HGCalTBTopology which use ElectronicsMap in getNeighbouringCells instead of hard-coding; ClusterProducer modified accordingly --- Geometry/BuildFile.xml | 1 + Geometry/interface/HGCalTBTopology.h | 4 +- Geometry/src/HGCalTBTopology.cc | 47 +++++++---------------- Reco/plugins/HGCalTBClusterProducer.cc | 27 ++++++------- Reco/plugins/HGCalTBClusterProducer.h | 4 +- Reco/python/hgcaltbclusterproducer_cfi.py | 4 +- 6 files changed, 33 insertions(+), 54 deletions(-) diff --git a/Geometry/BuildFile.xml b/Geometry/BuildFile.xml index 31f3bc7..9909260 100644 --- a/Geometry/BuildFile.xml +++ b/Geometry/BuildFile.xml @@ -2,4 +2,5 @@ + diff --git a/Geometry/interface/HGCalTBTopology.h b/Geometry/interface/HGCalTBTopology.h index dbcfcf5..4d1a71f 100644 --- a/Geometry/interface/HGCalTBTopology.h +++ b/Geometry/interface/HGCalTBTopology.h @@ -1,6 +1,7 @@ #ifndef HGCAL_GEOMETRY_HGCALTBTOPOLOGY_H #define HGCAL_GEOMETRY_HGCALTBTOPOLOGY_H 1 +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "set" /** \class HGCalTBTopology @@ -17,8 +18,7 @@ class HGCalTBTopology // valid sensorSizes are 128 and 256 bool iu_iv_valid(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorSize) const; double Cell_Area(int cell_type) const;//returns area in cm*cm - std::set getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, bool reverseLayer=false) const; - int getCellType( int u, int v, int sensorSize, bool reverseLayer=false) const; + std::set getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, const HGCalElectronicsMap &) const; }; #endif diff --git a/Geometry/src/HGCalTBTopology.cc b/Geometry/src/HGCalTBTopology.cc index 8415b3b..400f219 100644 --- a/Geometry/src/HGCalTBTopology.cc +++ b/Geometry/src/HGCalTBTopology.cc @@ -46,31 +46,7 @@ double HGCalTBTopology::Cell_Area(int cell_type) const else return -1.; //signifies an invalid cell type } -int HGCalTBTopology::getCellType( int iu, int iv, int sensorSize, bool reversedLayer ) const -{ - int aiu=abs(iu); - int aiv=abs(iv); - int asum=abs(iu+iv); - if( sensorSize==128 ){ - if( ((iu==2 && iv == -4) || (iu==-1 && iv == 2)) && reversedLayer==false ) - return 4;//calib pad - else if( ((iu==-2 && iv == 4) || (iu==1 && iv == -2)) && reversedLayer==true) - return 4;//calib pad - - else if( (aiu+aiv>=6) && (aiu==1||aiu>=5) && (aiv==1||aiv>=5) && (asum==1||asum>=5) ) - return 2;//half hex - else if( (iu==-3&&iv==-4) || (iu==-7&&iv==4) || (iu==4&&iv==3) || (iu==7&&iv==-3) || - (iu==-4&&iv==-3) || (iu==-7&&iv==3) || (iu==3&&iv==4) || (iu==7&&iv==-4) ) //no hit should be found in these anyway - return 3;//mouse bite - else if( (iu==2&&iv==-6) || (iu==-4&&iv==7) || (iu==-3&&iv==7) || (iu==4&&iv==-6) || - (iu==3&&iv==-7) || (iu==-4&&iv==6) || (iu==-2&&iv==6) || (iu==4&&iv==-7) ) //no hit should be found in these anyway - return 5; //merged cell - else return 0; - } - else return -1; -} - -std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, bool reversedLayer) const +std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, const HGCalElectronicsMap& emap) const { int layer=detid.layer(); std::set detids; @@ -81,15 +57,18 @@ std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId de int iV=detid.sensorIV(); int iu=detid.iu()+u; int iv=detid.iv()+v; - bool validCoord = iu_iv_valid( layer, iU, iV, iu, iv, sensorSize); - if( !validCoord ) continue; - int cellType=getCellType( iu, iv, sensorSize, reversedLayer); - HGCalTBDetId did( layer, iU, iV, iu, iv, cellType); - detids.insert(did); - if( cellType==4 ){// 4 is outer calib pad; need also to include inner calib pad - cellType=1; - HGCalTBDetId didbis( layer, iU, iV, iu, iv, cellType); - detids.insert(didbis); + if( iu_iv_valid( layer, iU, iV, iu, iv, sensorSize)!=true ) + continue; + for(unsigned int cellType=0; cellType<6; cellType++){ + HGCalTBDetId did( layer, iU, iV, iu, iv, cellType ); + if( emap.existsDetId(did)==true ){ + detids.insert(did); + if( cellType==1 ){ + HGCalTBDetId didbis( layer, iU, iV, iu, iv, 4); + detids.insert(didbis); + } + break; + } } } } diff --git a/Reco/plugins/HGCalTBClusterProducer.cc b/Reco/plugins/HGCalTBClusterProducer.cc index 10a0ad7..b6f438e 100644 --- a/Reco/plugins/HGCalTBClusterProducer.cc +++ b/Reco/plugins/HGCalTBClusterProducer.cc @@ -1,12 +1,13 @@ #include "HGCal/Reco/plugins/HGCalTBClusterProducer.h" #include "HGCal/Geometry/interface/HGCalTBTopology.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" - +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" #include #include #include HGCalTBClusterProducer::HGCalTBClusterProducer(const edm::ParameterSet& cfg) : + _elecMapFile(cfg.getUntrackedParameter("ElectronicMapFile",std::string("HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"))), _outputCollectionName(cfg.getParameter("OutputCollectionName")), _rechitToken(consumes(cfg.getParameter("rechitCollection"))), _runDynamicCluster(cfg.getUntrackedParameter("runDynamicCluster",true)), @@ -27,13 +28,7 @@ HGCalTBClusterProducer::HGCalTBClusterProducer(const edm::ParameterSet& cfg) : sum+=2.14; vec.push_back( sum ); //cern config 1 (5X0->15X0) is default _layerZPositions = cfg.getUntrackedParameter< std::vector >("LayerZPositions",vec); - - std::vector vb; - for(unsigned int i=0; i<_layerZPositions.size(); i++) - if( i%2 == 0 ) vb.push_back(i); - _reversedLayers = cfg.getUntrackedParameter< std::vector >("reversedLayers",vb); - //by default even layers are reversed (for 8 layers cern config: layers 5 and 7 are reversed) - + produces (_outputCollectionName); if( _runCluster7 ){ std::ostringstream os( std::ostringstream::ate ); @@ -47,6 +42,13 @@ HGCalTBClusterProducer::HGCalTBClusterProducer(const edm::ParameterSet& cfg) : _outputCollectionName19=os.str(); produces (_outputCollectionName19); } + + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_elecMapFile); + if (!io.load(fip.fullPath(), _elecMap)) { + throw cms::Exception("Unable to load electronics map"); + } + } void HGCalTBClusterProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) @@ -88,9 +90,6 @@ void HGCalTBClusterProducer::produce(edm::Event& event, const edm::EventSetup& i clusters19->push_back(cluster); } } - // std::cout << "number of clusters = " << clusters->size() << std::endl; - // std::cout << "number of clusters7 = " << clusters7->size() << std::endl; - // std::cout << "number of clusters19 = " << clusters19->size() << std::endl; if( _runDynamicCluster ) event.put(clusters, _outputCollectionName); if( _runCluster7 ) @@ -132,7 +131,6 @@ void HGCalTBClusterProducer::createDynamicClusters(HGCalTBRecHitCollection rechi cluster.setEnergyLow(energyLow); cluster.setEnergyHigh(energyHigh); cluster.setEnergy(energy); - // std::cout << "layer = " << cluster.layer() << "\t cluster energy = " << energy << "\t nhit = " << clusterDetIDs.size() << std::endl; for( std::vector::iterator jt=clusterDetIDs.begin(); jt!=clusterDetIDs.end(); ++jt) cluster.addHitAndFraction( (*jt), (*rechits.find(*jt)).energy()/energy ); @@ -147,8 +145,7 @@ void HGCalTBClusterProducer::buildCluster( HGCalTBRecHitCollection rechits, { HGCalTBTopology top; HGCalTBDetId detID=clusterDetIDs.back(); - bool reversedlayer = std::find( _reversedLayers.begin(), _reversedLayers.end(), detID.layer() )==_reversedLayers.end() ? false : true ; - std::set neighbors=top.getNeighboringCellsDetID( detID, _sensorSize , _maxTransverse, reversedlayer ); + std::set neighbors=top.getNeighboringCellsDetID( detID, _sensorSize , _maxTransverse, _elecMap ); for( std::set::const_iterator it=neighbors.begin(); it!=neighbors.end(); ++it){ if( std::find(temp.begin(), temp.end(), (*it))!=temp.end() || rechits.find(*it)==rechits.end() ) continue; @@ -180,7 +177,7 @@ void HGCalTBClusterProducer::createSeededClusters(HGCalTBRecHitCollection rechit float y = CellCentreXY.second*seed.energy(); float z = _layerZPositions.at( seed.id().layer()-1 ); - std::set neighbors=top.getNeighboringCellsDetID( seed.id(), _sensorSize , _maxTransverse ); + std::set neighbors=top.getNeighboringCellsDetID( seed.id(), _sensorSize , _maxTransverse, _elecMap ); for( std::set::iterator jt=neighbors.begin(); jt!=neighbors.end(); ++jt){ if( rechits.find(*jt) != rechits.end() ){ HGCalTBRecHit hit=(*rechits.find(*jt)); diff --git a/Reco/plugins/HGCalTBClusterProducer.h b/Reco/plugins/HGCalTBClusterProducer.h index d8a876b..720462d 100644 --- a/Reco/plugins/HGCalTBClusterProducer.h +++ b/Reco/plugins/HGCalTBClusterProducer.h @@ -16,6 +16,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include @@ -26,10 +27,12 @@ class HGCalTBClusterProducer : public edm::EDProducer HGCalTBClusterProducer(const edm::ParameterSet&); virtual void produce(edm::Event&, const edm::EventSetup&); private: + std::string _elecMapFile; std::string _outputCollectionName; std::string _outputCollectionName7; std::string _outputCollectionName19; edm::EDGetTokenT _rechitToken; + HGCalElectronicsMap _elecMap; bool _runDynamicCluster; bool _runCluster7; @@ -39,7 +42,6 @@ class HGCalTBClusterProducer : public edm::EDProducer double _minEnergy; std::vector _layerZPositions; - std::vector _reversedLayers; void buildCluster(HGCalTBRecHitCollection rechits, std::vector &temp, std::vector &clusterDetIDs); void createDynamicClusters(HGCalTBRecHitCollection rechits, std::vector &clusterCol); diff --git a/Reco/python/hgcaltbclusterproducer_cfi.py b/Reco/python/hgcaltbclusterproducer_cfi.py index 98a4c9a..3b0dfb0 100644 --- a/Reco/python/hgcaltbclusterproducer_cfi.py +++ b/Reco/python/hgcaltbclusterproducer_cfi.py @@ -1,10 +1,10 @@ import FWCore.ParameterSet.Config as cms hgcaltbclusters = cms.EDProducer("HGCalTBClusterProducer", + ElectronicMapFile = cms.untracked.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), OutputCollectionName = cms.string(''), rechitCollection = cms.InputTag('hgcaltbrechits',"","unpack"), LayerZPositions= cms.untracked.vdouble(0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4),#cern config 2 #LayerZPositions= cms.untracked.vdouble(0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92),#cern config 1 - reversedLayers = cms.untracked.vint32(5,7), - minEnergy = cms.untracked.double(0) + minEnergy = cms.untracked.double(100) ) From 62f04008f278073ba7aad3949cb5761dd5770826 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 22 Nov 2016 18:55:06 +0100 Subject: [PATCH 103/297] [position resolution] generalize fitting to polynomial functions (pol2, pol3 explicitly allowed now), absolute paths in config --- Reco/interface/PositionResolutionHelpers.h | 8 +++--- Reco/plugins/Position_Resolution_Analyzer.cc | 4 +++ Reco/src/PositionResolutionHelpers.cc | 28 ++++++++++---------- test_cfg_newEB.py | 12 +++++---- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index f12be96..f136a7a 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -31,7 +31,9 @@ enum WeightingMethod { enum TrackFittingMethod { DEFAULTFITTING, - LINEFITTGRAPHERRORS + LINEFITTGRAPHERRORS, + POL2TGRAPHERRORS, + POL3TGRAPHERRORS }; struct HitTriple { @@ -95,8 +97,8 @@ class ParticleTrack{ TrackFittingMethod lastAppliedMethod; //different fit functions - void lineFitTGraphErrors(); - std::pair positionFromLineFitTGraphErrors(double z); + void polFitTGraphErrors(int degree); + std::pair positionFromPolFitTGraphErrors(double z); TF1* ROOTpol_x; TF1* ROOTpol_y; TGraph* tmp_graph_x; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 985a474..1be47b9 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -105,6 +105,10 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS methodString = iConfig.getParameter("fittingMethod"); if (methodString == "lineTGraphErrors") fittingMethod = LINEFITTGRAPHERRORS; + else if (methodString == "pol2TGraphErrors") + fittingMethod = POL2TGRAPHERRORS; + else if (methodString == "pol3TGraphErrors") + fittingMethod = POL3TGRAPHERRORS; else fittingMethod = DEFAULTFITTING; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index b7f3f1b..43f2276 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -212,7 +212,13 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ try { switch(method) { case LINEFITTGRAPHERRORS: - lineFitTGraphErrors(); + polFitTGraphErrors(1); + break; + case POL2TGRAPHERRORS: + polFitTGraphErrors(2); + break; + case POL3TGRAPHERRORS: + polFitTGraphErrors(3); break; default: lastAppliedMethod = DEFAULTFITTING; @@ -228,29 +234,25 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ std::pair ParticleTrack::calculatePositionXY(double z) { switch(lastAppliedMethod) { case LINEFITTGRAPHERRORS: - return positionFromLineFitTGraphErrors(z); + case POL2TGRAPHERRORS: + case POL3TGRAPHERRORS: + return positionFromPolFitTGraphErrors(z); default: return std::make_pair(0.,0.); } } //private functions -void ParticleTrack::lineFitTGraphErrors(){ +void ParticleTrack::polFitTGraphErrors(int degree){ //todo: clear existing Polynomial pointers if existing if (ROOTpol_x != 0) delete ROOTpol_x; if (ROOTpol_y != 0) delete ROOTpol_y; - ROOTpol_x = new TF1("ROOTpol_x", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - ROOTpol_y = new TF1("ROOTpol_y", "pol1", *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - + ROOTpol_x = new TF1("ROOTpol_x", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + ROOTpol_y = new TF1("ROOTpol_y", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - ROOTpol_x->SetParameter(0, 1); - ROOTpol_x->SetParameter(1, 1); - ROOTpol_y->SetParameter(0, 1); - ROOTpol_y->SetParameter(1, 1); - tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); @@ -262,12 +264,10 @@ void ParticleTrack::lineFitTGraphErrors(){ }; -std::pair ParticleTrack::positionFromLineFitTGraphErrors(double z) { +std::pair ParticleTrack::positionFromPolFitTGraphErrors(double z) { return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); } - - //debug function void SensorHitMap::printHits() { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 61f0a7f..99d7749 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -3,6 +3,8 @@ import os,sys +repoFolder = "/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/" + options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' options.register('dataFolder', @@ -55,13 +57,13 @@ 'Number of spills in run') options.register('pedestalsHighGain', - 'CondObjects/data/Ped_HighGain_L8.txt', + repoFolder+'CondObjects/data/Ped_HighGain_L8.txt', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Path to high gain pedestals file') options.register('pedestalsLowGain', - 'CondObjects/data/Ped_LowGain_L8.txt', + repoFolder+'CondObjects/data/Ped_LowGain_L8.txt', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Path to low gain pedestals file') @@ -91,7 +93,7 @@ 'lineTGraphErrors', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Possible arguments are: lineTGraphErrors' + 'Possible arguments are: lineTGraphErrors, pol2TGraphErrors, pol3TGraphErrors' ) options.register('pedestalThreshold', 30., @@ -106,6 +108,7 @@ options.parseArguments() + # print options # <--- A better option is to call test_cfg is called with "print" argument e.g. cmsRun test_cfg.py print dataFolder=example1 outputFolder=example2 ... if not os.path.isdir(options.dataFolder): @@ -140,10 +143,9 @@ process.load('HGCal.StandardSequences.LocalReco_cff') process.load('HGCal.StandardSequences.dqm_cff') - process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file - runEnergyMapFile = cms.untracked.string("CondObjects/data/runEnergies.txt"), #the runs from the runEnergyMapFile are automatically added to the fileNames + runEnergyMapFile = cms.untracked.string(repoFolder+"CondObjects/data/runEnergies.txt"), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED From 2588cc098591ed252e50dcfe6b8d9c903dcd7827 Mon Sep 17 00:00:00 2001 From: Arnaud Steen Date: Tue, 22 Nov 2016 19:18:37 +0100 Subject: [PATCH 104/297] debug existsDetID in HGCalElectronicsMap.cc in order to return true when the detid is actually existing (inverse was done before) --- CondObjects/src/HGCalElectronicsMap.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CondObjects/src/HGCalElectronicsMap.cc b/CondObjects/src/HGCalElectronicsMap.cc index 34aa2f0..ac04345 100644 --- a/CondObjects/src/HGCalElectronicsMap.cc +++ b/CondObjects/src/HGCalElectronicsMap.cc @@ -21,7 +21,7 @@ bool HGCalElectronicsMap::MapEntry::operator<(const HGCalElectronicsMap::MapEnt bool HGCalElectronicsMap::existsDetId(DetId did) const { DetIdMatch x(did.rawId()); - return std::find_if(m_map.begin(), m_map.end(), x) == m_map.end(); + return std::find_if(m_map.begin(), m_map.end(), x) != m_map.end(); } bool HGCalElectronicsMap::existsEId(uint32_t eid) const From 94d73de4bc809c7bf3212205e5f906fdc158af80 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 23 Nov 2016 10:00:50 +0100 Subject: [PATCH 105/297] [luigi] increase binning of output TH2D to 10000 --- Reco/plugins/Position_Resolution_Analyzer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 1be47b9..85f49a0 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -278,7 +278,7 @@ void Position_Resolution_Analyzer::endJob() { subDir2 = subDir1.mkdir(std::to_string((*it2).first).c_str()); for (it3=(*it2).second.begin(); it3!=(*it2).second.end(); it3++) { std::cout<<" R: "<<(*it3).first<<"..."<(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 1000, min_deviation, max_deviation); + TH2D* deviationHistogram = subDir2.make(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 10000, min_deviation, max_deviation); deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); for(int i=1; i<=nLayers; i++) From 8d233ee0ee36ef95bcab6d0467a754fffda69849 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 23 Nov 2016 23:27:42 +0100 Subject: [PATCH 106/297] [position resolution] prevent divisions by zero --- Reco/src/PositionResolutionHelpers.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 43f2276..c4b8e72 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -128,6 +128,10 @@ void SensorHitMap::poweredWeighting(int exponent) { numerator_x += w*(*hit)->x; numerator_y += w*(*hit)->y; } + + //prevent divisions through zero + if (denominator == 0.0) denominator = 1.0; + centralHitPoint.first = numerator_x/denominator; centralHitPoint.second = numerator_y/denominator; @@ -163,6 +167,9 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { numerator_y += w*(*hit)->y; } + //prevent divisions through zero + if (denominator == 0.0) denominator = 1.0; + centralHitPoint.first = numerator_x/denominator; centralHitPoint.second = numerator_y/denominator; From 6b8725c74710b855e9787f8915d18176922fd45d Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 23 Nov 2016 23:34:31 +0100 Subject: [PATCH 107/297] [position resolution] adjust a,b test parameters in log weighting --- Reco/interface/PositionResolutionHelpers.h | 6 +++--- Reco/plugins/Position_Resolution_Analyzer.cc | 12 ++++++------ Reco/src/PositionResolutionHelpers.cc | 14 +++++++------- test_cfg_newEB.py | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index f136a7a..fdd265d 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -24,9 +24,9 @@ enum WeightingMethod { DEFAULTWEIGHTING, SQUAREDWEIGHTING, LINEARWEIGHTING, - LOGWEIGHTING_45_10, - LOGWEIGHTING_45_20, - LOGWEIGHTING_35_10 + LOGWEIGHTING_50_10, + LOGWEIGHTING_50_05, + LOGWEIGHTING_70_10 }; enum TrackFittingMethod { diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 85f49a0..1d6cbe0 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -92,12 +92,12 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; - else if (methodString == "logWeighting_4.5_1.0") - weightingMethod = LOGWEIGHTING_45_10; - else if (methodString == "logWeighting_4.5_2.0") - weightingMethod = LOGWEIGHTING_45_20; - else if (methodString == "logWeighting_3.5_1.0") - weightingMethod = LOGWEIGHTING_35_10; + else if (methodString == "logWeighting_5.0_1.0") + weightingMethod = LOGWEIGHTING_50_10; + else if (methodString == "logWeighting_5.0_0.5") + weightingMethod = LOGWEIGHTING_50_05; + else if (methodString == "logWeighting_7.0_1.0") + weightingMethod = LOGWEIGHTING_70_10; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index c4b8e72..8e70d42 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -91,14 +91,14 @@ void SensorHitMap::calculateCenterPosition(WeightingMethod method) { case LINEARWEIGHTING: SensorHitMap::poweredWeighting(1); break; - case LOGWEIGHTING_45_10: - SensorHitMap::logWeighting(4.5, 1.0); + case LOGWEIGHTING_50_10: + SensorHitMap::logWeighting(5.0, 1.0); break; - case LOGWEIGHTING_45_20: - SensorHitMap::logWeighting(4.5, 2.0); + case LOGWEIGHTING_50_05: + SensorHitMap::logWeighting(5.0, 0.5); break; - case LOGWEIGHTING_35_10: - SensorHitMap::logWeighting(3.5, 1.0); + case LOGWEIGHTING_70_10: + SensorHitMap::logWeighting(7.0, 1.0); break; //case NEWMETHOD: //SensorHitMap::newWeightingFunction() @@ -169,7 +169,7 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { //prevent divisions through zero if (denominator == 0.0) denominator = 1.0; - + centralHitPoint.first = numerator_x/denominator; centralHitPoint.second = numerator_y/denominator; diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 99d7749..74f3333 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -87,7 +87,7 @@ 'squaredWeighting', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_4.5_1.0, logWeighting_4.5_2.0, logWeighting_3.5_1.0 ' + 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_5.0_1.0, logWeighting_5.0_0.5, logWeighting_7.0_1.0 ' ) options.register('fittingMethod', 'lineTGraphErrors', From 99df28a6943a5a30f8d83a72af291e9e68249672 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 25 Nov 2016 09:34:51 +0100 Subject: [PATCH 108/297] [position resolution] add ADC_per_MIP for each layer --- Reco/interface/PositionResolutionHelpers.h | 2 ++ Reco/plugins/Position_Resolution_Analyzer.cc | 3 +++ Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index fdd265d..0c39ce0 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -49,6 +49,7 @@ class SensorHitMap { double layerZ; int sensorSize; double threshold; + double ADC_per_MIP; std::vector Hits; //helpers to obtain the x-y coordinate HGCalTBCellVertices TheCell; @@ -64,6 +65,7 @@ class SensorHitMap { SensorHitMap(); ~SensorHitMap(); void setZ(double z); + void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 1d6cbe0..c2f513a 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -61,6 +61,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer EventsFor2DGraphs; double pedestalThreshold; std::vector Layer_Z_Positions; + std::vector ADC_per_MIP; int nLayers; int SensorSize; @@ -116,6 +117,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS nLayers = iConfig.getParameter("nLayers"); SensorSize = iConfig.getParameter("SensorSize"); Layer_Z_Positions = iConfig.getParameter >("Layer_Z_Positions"); + ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); //making 2DGraphs per event? EventsFor2DGraphs = iConfig.getParameter >("EventsFor2DGraphs"); @@ -170,6 +172,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setZ(Layer_Z_Positions[layer]); + Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } Sensors[layer]->addHit(Rechit); diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index ba98a4f..c71d125 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -5,6 +5,7 @@ fittingMethod = cms.string('lineTGraphErrors'), pedestalThreshold = cms.double(30.), #-99999 for no threshold-->subtracts the average Layer_Z_Positions = cms.vdouble([1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8]), + ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), nLayers = cms.int32(8), SensorSize = cms.int32(128), EventsFor2DGraphs = cms.vint32([1]), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 8e70d42..d41209b 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -8,6 +8,7 @@ SensorHitMap::SensorHitMap(){ centralHitPoint = std::make_pair(0., 0.); threshold = 30.; layerZ = 0; + ADC_per_MIP = 1.; sensorSize = 128; } @@ -26,6 +27,10 @@ void SensorHitMap::setZ(double z) { this->layerZ = z; } +void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { + this->ADC_per_MIP = ADC_per_MIP; +} + void SensorHitMap::setPedestalThreshold(double t) { this->threshold = t; } From 94918b8451e75bd9e3ad45a9e36aebed2a6f480a Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 25 Nov 2016 10:40:28 +0100 Subject: [PATCH 109/297] [position resolution] remove variation in fitting method (fix to line fits), common mode subtraction analogous to the LayerSumAnalyzer --- Reco/interface/PositionResolutionHelpers.h | 11 ++--- Reco/plugins/Position_Resolution_Analyzer.cc | 2 +- Reco/python/position_resolution_cfi.py | 2 +- Reco/src/PositionResolutionHelpers.cc | 45 +++++++++++--------- test_cfg_newEB.py | 11 +---- 5 files changed, 35 insertions(+), 36 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 0c39ce0..1c94602 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -38,7 +38,8 @@ enum TrackFittingMethod { struct HitTriple { double x; double y; - double I; + double I; //intensity that is input to the weight calculation + double E; //actual energy of the hit int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction }; @@ -48,14 +49,14 @@ class SensorHitMap { std::pair centralHitPointError; double layerZ; int sensorSize; - double threshold; + double CM_threshold; double ADC_per_MIP; std::vector Hits; //helpers to obtain the x-y coordinate HGCalTBCellVertices TheCell; std::pair CellCenterXY; - std::map cellTypeCount; - std::map pedestalCount; + int CM_cells_count; + double CM_sum; void poweredWeighting(int exponent); @@ -70,7 +71,7 @@ class SensorHitMap { void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); - void subtractPedestals(); + void subtractCM(); void calculateCenterPosition(WeightingMethod method); double getZ(); std::pair getCenterPosition(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index c2f513a..922c748 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -181,7 +181,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract pedestals first - it->second->subtractPedestals(); + it->second->subtractCM(); //now calculate the center positions for each layer it->second->calculateCenterPosition(weightingMethod); diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index c71d125..d2c30ca 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -3,7 +3,7 @@ position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), - pedestalThreshold = cms.double(30.), #-99999 for no threshold-->subtracts the average + pedestalThreshold = cms.double(2.), Layer_Z_Positions = cms.vdouble([1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8]), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), nLayers = cms.int32(8), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index d41209b..c4db973 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -6,10 +6,13 @@ //public functions SensorHitMap::SensorHitMap(){ centralHitPoint = std::make_pair(0., 0.); - threshold = 30.; + CM_threshold = 30.; layerZ = 0; ADC_per_MIP = 1.; sensorSize = 128; + + CM_cells_count = 0; + CM_sum = 0; } SensorHitMap::~SensorHitMap(){ @@ -32,7 +35,7 @@ void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { } void SensorHitMap::setPedestalThreshold(double t) { - this->threshold = t; + this->CM_threshold = t; } double SensorHitMap::getZ() { @@ -45,8 +48,11 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { double iux = CellCenterXY.first; double ivy = CellCenterXY.second; int ID = (Rechit.id()).cellType(); - double energy = Rechit.energy(); //input to centrum calculation ? - double energyHigh = Rechit.energyHigh(); //used for pedestal subtraction analogous to the event display + + if (ID!=0 && ID!=1 && ID!=4) //filter cells that do not have either 0, 1, 4 as ID + return; + + double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also calcu //Rechit.setCartesianCoordinates(iux, ivy, Layer_Z_Positions[layer]); //in cm, is not really necessary @@ -55,32 +61,31 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { Hits[Hits.size()-1]->x = iux; Hits[Hits.size()-1]->y = ivy; Hits[Hits.size()-1]->I = energy; + Hits[Hits.size()-1]->E = energy; //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) - if (energyHigh <= threshold || threshold == -99999) { - if (cellTypeCount.find(ID) == cellTypeCount.end()) { - cellTypeCount[ID] = 0; - pedestalCount[ID] = 0; - } - cellTypeCount[ID] += 1; - pedestalCount[ID] += energyHigh; + if (energy <= CM_threshold && (ID==0 || ID==4)) { //also analogous to the implementation in the LayerSumAnalyzer + CM_cells_count++; + CM_sum += energy; } } -void SensorHitMap::subtractPedestals() { +void SensorHitMap::subtractCM() { + double cm_subtraction = CM_sum/CM_cells_count; + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin switch((*hit)->ID) { case 0: case 4: - (*hit)->I -= (pedestalCount[0]+pedestalCount[4])/(cellTypeCount[0]+cellTypeCount[4]); - case 2: - (*hit)->I -= pedestalCount[2]/cellTypeCount[2]; - case 3: - (*hit)->I -= pedestalCount[3]/cellTypeCount[3]; - case 5: - (*hit)->I -= pedestalCount[5]/cellTypeCount[5]; - case 1: + // we want: - all cells that were input to the cm (common mode) calculation get weight 0 + // - all the others are corrected by the cm + if ((*hit)->E > CM_threshold) { + (*hit)->I -= cm_subtraction; + } else { + (*hit)->I = 0; + } + break; default: continue; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 74f3333..3c64849 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -89,17 +89,11 @@ VarParsing.VarParsing.varType.string, 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_5.0_1.0, logWeighting_5.0_0.5, logWeighting_7.0_1.0 ' ) -options.register('fittingMethod', - 'lineTGraphErrors', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Possible arguments are: lineTGraphErrors, pol2TGraphErrors, pol3TGraphErrors' - ) options.register('pedestalThreshold', - 30., + 2., VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.float, - 'Threshold for the pedestal subtraction calculation in the position resolution plugin. -99999 corresponds to no thresold.' + 'Threshold for the pedestal subtraction calculation in the position resolution plugin. Unit is MIP.' ) @@ -164,7 +158,6 @@ process.hgcaltbrechits.gainHigh = cms.string('') process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) -process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) process.position_resolution_analyzer.EventsFor2DGraphs = [1, 29] #first occuring events with that id are being documented with 2DGraphs process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) From 001677b8fbd8dc1adb9047792f9a6f4b4b57df97 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 25 Nov 2016 16:06:28 +0100 Subject: [PATCH 110/297] [position resolution] add predicted position vs deviation histograms --- Reco/interface/PositionResolutionHelpers.h | 4 ++ Reco/plugins/Position_Resolution_Analyzer.cc | 63 +++++++++++++------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 1c94602..d6e51f1 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -43,6 +43,10 @@ struct HitTriple { int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction }; +struct DeviationTriple { + double deviation, predicted_x, predicted_y; +}; + class SensorHitMap { private: std::pair centralHitPoint; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 922c748..db6e3e8 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -69,7 +69,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer > > > >deviations; + std::map > > > >deviations; //helper variables that are set within the event loop, i.e. are defined per event int evId, run, layer; @@ -180,7 +180,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { - //subtract pedestals first + //subtract common first it->second->subtractCM(); //now calculate the center positions for each layer @@ -201,10 +201,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position - for (int i=1; i<=nLayers; i++) { - layerZ = Sensors[i]->getZ(); - x_predicted = Tracks[i]->calculatePositionXY(layerZ).first; - y_predicted = Tracks[i]->calculatePositionXY(layerZ).second; + for (int layer=1; layer<=nLayers; layer++) { + layerZ = Sensors[layer]->getZ(); + x_predicted = Tracks[layer]->calculatePositionXY(layerZ).first; + y_predicted = Tracks[layer]->calculatePositionXY(layerZ).second; if (x_predicted==0 && y_predicted==0) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented failedFitCounter[run]++; @@ -212,15 +212,22 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } successfulFitCounter[run]++; - x_true = Sensors[i]->getCenterPosition().first; - y_true = Sensors[i]->getCenterPosition().second; - - deviation = sqrt( pow(x_predicted - x_true, 2) + pow(y_predicted - y_true, 2) ); - deviations[energy][layerThickness][run][i].push_back(deviation); - - //update the deviations on the fly - min_deviation = min_deviation > deviation ? deviation: min_deviation; - max_deviation = max_deviation < deviation ? deviation: max_deviation; + x_true = Sensors[layer]->getCenterPosition().first; + y_true = Sensors[layer]->getCenterPosition().second; + + DeviationTriple this_deviation; + this_deviation.deviation = sqrt( pow(x_predicted - x_true, 2) + pow(y_predicted - y_true, 2) ); + //DEBUG + if (this_deviation.deviation > 12. && abs(x_predicted) < 6. && abs(y_predicted) < 6.) + std::cout<<"layer: "< this_deviation.deviation ? this_deviation.deviation: min_deviation; + max_deviation = max_deviation < this_deviation.deviation ? this_deviation.deviation: max_deviation; if (make2DGraphs) { //store for the two 2D graphs that are written per event @@ -254,6 +261,8 @@ void Position_Resolution_Analyzer::beginJob() { } void Position_Resolution_Analyzer::endJob() { + //optained information are not processed into according ROOT objects for final storage + std::cout<<"*************************************************"< > > > >::iterator it1; + std::cout< > > > >::iterator it1; TFileDirectory subDir1; - std::map > > >::iterator it2; + std::map > > >::iterator it2; TFileDirectory subDir2; - std::map > >::iterator it3; + std::map > >::iterator it3; //create subdirectory system for (it1=deviations.begin(); it1!=deviations.end(); it1++) { @@ -284,9 +293,19 @@ void Position_Resolution_Analyzer::endJob() { TH2D* deviationHistogram = subDir2.make(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 10000, min_deviation, max_deviation); deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); - for(int i=1; i<=nLayers; i++) - for(int j=0; j<(int)(*it3).second[i].size(); j++) - deviationHistogram->Fill(i, (*it3).second[i][j]); + for(int i=1; i<=nLayers; i++) { + TH2D* deviationOverPosition_x = subDir2.make(("x_layer_"+std::to_string(i)+"__run_"+std::to_string((*it3).first)).c_str(), "", 16, -4.0, 4.0, 600, 0.0, 12.); + TH2D* deviationOverPosition_y = subDir2.make(("y_layer_"+std::to_string(i)+"__run_"+std::to_string((*it3).first)).c_str(), "", 16, -4.0, 4.0, 600, 0.0, 12.); + deviationOverPosition_x->GetXaxis()->SetTitle("x_{pred.} [cm]"); + deviationOverPosition_x->GetYaxis()->SetTitle("dev_{x-y} [cm]"); + deviationOverPosition_y->GetXaxis()->SetTitle("y_{pred.} [cm]"); + deviationOverPosition_y->GetYaxis()->SetTitle("dev_{x-y} [cm]"); + for(int j=0; j<(int)(*it3).second[i].size(); j++){ + deviationHistogram->Fill(i, (*it3).second[i][j].deviation); + deviationOverPosition_x->Fill((*it3).second[i][j].predicted_x, (*it3).second[i][j].deviation); + deviationOverPosition_y->Fill((*it3).second[i][j].predicted_y, (*it3).second[i][j].deviation); + } + } } } } From 196017d8310c7330b2a76fcfce802139ac1a9940 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 25 Nov 2016 17:07:43 +0100 Subject: [PATCH 111/297] [position resolution] infrastructure to indicate consideration method for mean position calculation --- Reco/interface/PositionResolutionHelpers.h | 23 +++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 15 +++++- Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 57 +++++++++++++++----- test_cfg_newEB.py | 10 +++- 5 files changed, 83 insertions(+), 23 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index d6e51f1..7edc945 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -16,9 +16,12 @@ #include "FWCore/Utilities/interface/Exception.h" -// -// class declaration -// +enum ConsiderationMethod { + CONSIDERALL, + CONSIDERSEVEN, + CONSIDERNINETEEN, + CONSIDERCLUSTERS +}; enum WeightingMethod { DEFAULTWEIGHTING, @@ -36,7 +39,7 @@ enum TrackFittingMethod { POL3TGRAPHERRORS }; -struct HitTriple { +struct HitData { double x; double y; double I; //intensity that is input to the weight calculation double E; //actual energy of the hit @@ -47,6 +50,9 @@ struct DeviationTriple { double deviation, predicted_x, predicted_y; }; +// +// class declarations +// class SensorHitMap { private: std::pair centralHitPoint; @@ -55,15 +61,18 @@ class SensorHitMap { int sensorSize; double CM_threshold; double ADC_per_MIP; - std::vector Hits; + std::vector Hits; //those are all the hits in the layer + std::vector HitsForPositioning; + HitData* mostSignificantHit; + //helpers to obtain the x-y coordinate HGCalTBCellVertices TheCell; std::pair CellCenterXY; int CM_cells_count; double CM_sum; + void fillHitsForPositioningByRadius(double R); void poweredWeighting(int exponent); - void logWeighting(double log_a, double log_b); public: @@ -76,7 +85,7 @@ class SensorHitMap { //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); void subtractCM(); - void calculateCenterPosition(WeightingMethod method); + void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); double getZ(); std::pair getCenterPosition(); std::pair getCenterPositionError(); //calculated via RMS diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index db6e3e8..0a842c1 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -56,8 +56,10 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer HGCalTBRecHitCollection_; edm::EDGetTokenT RunDataToken; + ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; + std::vector EventsFor2DGraphs; double pedestalThreshold; std::vector Layer_Z_Positions; @@ -87,6 +89,17 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + //read the cell consideration option to calculate the central hit point + std::string considerationMethod = iConfig.getParameter("considerationMethod"); + if (considerationMethod == "all") + considerationMethod = CONSIDERALL; + else if (considerationMethod == "closest7") + considerationMethod = CONSIDERSEVEN; + else if (considerationMethod == "closest19") + considerationMethod = CONSIDERNINETEEN; + else if(considerationMethod == "clusters") + considerationMethod = CONSIDERCLUSTERS; + //read the weighting method to obtain the central hit point std::string methodString = iConfig.getParameter("weightingMethod"); if (methodString == "squaredWeighting") @@ -184,7 +197,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E it->second->subtractCM(); //now calculate the center positions for each layer - it->second->calculateCenterPosition(weightingMethod); + it->second->calculateCenterPosition(considerationMethod, weightingMethod); } diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index d2c30ca..8495160 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", + considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), pedestalThreshold = cms.double(2.), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index c4db973..6e7417a 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -5,6 +5,8 @@ //public functions SensorHitMap::SensorHitMap(){ + mostSignificantHit = NULL; //will point to the most significant hit + centralHitPoint = std::make_pair(0., 0.); CM_threshold = 30.; layerZ = 0; @@ -16,7 +18,7 @@ SensorHitMap::SensorHitMap(){ } SensorHitMap::~SensorHitMap(){ - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ delete *hit; } Hits.clear(); @@ -54,14 +56,16 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also calcu - //Rechit.setCartesianCoordinates(iux, ivy, Layer_Z_Positions[layer]); //in cm, is not really necessary - - Hits.push_back(new HitTriple); + Hits.push_back(new HitData); Hits[Hits.size()-1]->ID = ID; Hits[Hits.size()-1]->x = iux; Hits[Hits.size()-1]->y = ivy; Hits[Hits.size()-1]->I = energy; Hits[Hits.size()-1]->E = energy; + + if (mostSignificantHit==NULL || energy < mostSignificantHit->E) { + mostSignificantHit = Hits[Hits.size()-1]; + } //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) if (energy <= CM_threshold && (ID==0 || ID==4)) { //also analogous to the implementation in the LayerSumAnalyzer @@ -73,7 +77,7 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { void SensorHitMap::subtractCM() { double cm_subtraction = CM_sum/CM_cells_count; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin switch((*hit)->ID) { case 0: @@ -92,9 +96,25 @@ void SensorHitMap::subtractCM() { } } +void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod) { + switch(considerationMethod){ + case CONSIDERALL: + SensorHitMap::fillHitsForPositioningByRadius(-1.); + break; + case CONSIDERSEVEN: + SensorHitMap::fillHitsForPositioningByRadius(2.); //TODO: Parameter + break; + case CONSIDERNINETEEN: + SensorHitMap::fillHitsForPositioningByRadius(3); //TODO: Parameter + break; + case CONSIDERCLUSTERS: + //TODO: implement! + default: + SensorHitMap::fillHitsForPositioningByRadius(-1.); + break; + } -void SensorHitMap::calculateCenterPosition(WeightingMethod method) { - switch(method){ + switch(weightingMethod){ case SQUAREDWEIGHTING: SensorHitMap::poweredWeighting(2); break; @@ -127,12 +147,23 @@ std::pair SensorHitMap::getCenterPositionError() { //private functions +void SensorHitMap::fillHitsForPositioningByRadius(double R) { + HitsForPositioning.clear(); + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (R == -1.) { + HitsForPositioning.push_back(*hit); + continue; + } + + } +} + void SensorHitMap::poweredWeighting(int exponent) { double numerator_x, numerator_y, denominator; double w; numerator_x = numerator_y = denominator = 0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum denominator += w; numerator_x += w*(*hit)->x; @@ -147,7 +178,7 @@ void SensorHitMap::poweredWeighting(int exponent) { //calculate the RMs numerator_x = numerator_y = 0.0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); @@ -159,7 +190,7 @@ void SensorHitMap::poweredWeighting(int exponent) { void SensorHitMap::logWeighting(double log_a, double log_b) { double I_max = 0; //determine the 'intensity' maximum first double I_i = 0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; I_max += I_i; } @@ -168,7 +199,7 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { double w; numerator_x = numerator_y = denominator = 0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; if (I_i == 0.) continue; w = std::max(log_a + log_b*log(I_i/I_max), 0.0); @@ -185,7 +216,7 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { //calculate the RMs numerator_x = numerator_y = 0.0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; if (I_i == 0.) continue; w = std::max(log_a + log_b*log(I_i/I_max), 0.0); @@ -288,7 +319,7 @@ std::pair ParticleTrack::positionFromPolFitTGraphErrors(double z //debug function void SensorHitMap::printHits() { - for(std::vector::iterator it=Hits.begin(); it!=Hits.end(); it++){ + for(std::vector::iterator it=Hits.begin(); it!=Hits.end(); it++){ std::cout<<(*it)->x<<" "<<(*it)->y<<" "<<(*it)->I< Date: Sat, 26 Nov 2016 14:08:25 +0100 Subject: [PATCH 112/297] [position resolution] implement N closest methods for position calculation consideration with radial distance sorting --- Reco/interface/PositionResolutionHelpers.h | 3 +- Reco/plugins/Position_Resolution_Analyzer.cc | 12 +++--- Reco/src/PositionResolutionHelpers.cc | 43 ++++++++++++++++---- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 7edc945..5e1302f 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -12,6 +12,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //e.g. to get the cell's dimensions #include "FWCore/Utilities/interface/Exception.h" @@ -71,7 +72,7 @@ class SensorHitMap { int CM_cells_count; double CM_sum; - void fillHitsForPositioningByRadius(double R); + void considerNClosest(int N_considered); void poweredWeighting(int exponent); void logWeighting(double log_a, double log_b); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 0a842c1..d904e52 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -90,18 +90,18 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS RunDataToken= consumes(iConfig.getParameter("RUNDATA")); //read the cell consideration option to calculate the central hit point - std::string considerationMethod = iConfig.getParameter("considerationMethod"); - if (considerationMethod == "all") + std::string methodString = iConfig.getParameter("considerationMethod"); + if (methodString == "all") considerationMethod = CONSIDERALL; - else if (considerationMethod == "closest7") + else if (methodString == "closest7") considerationMethod = CONSIDERSEVEN; - else if (considerationMethod == "closest19") + else if (methodString == "closest19") considerationMethod = CONSIDERNINETEEN; - else if(considerationMethod == "clusters") + else if(methodString == "clusters") considerationMethod = CONSIDERCLUSTERS; //read the weighting method to obtain the central hit point - std::string methodString = iConfig.getParameter("weightingMethod"); + methodString = iConfig.getParameter("weightingMethod"); if (methodString == "squaredWeighting") weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 6e7417a..192e0e4 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -99,18 +99,20 @@ void SensorHitMap::subtractCM() { void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod) { switch(considerationMethod){ case CONSIDERALL: - SensorHitMap::fillHitsForPositioningByRadius(-1.); + SensorHitMap::considerNClosest(-1); break; case CONSIDERSEVEN: - SensorHitMap::fillHitsForPositioningByRadius(2.); //TODO: Parameter + //analogous to the LayerSumAnalyzer (25.11.16) + SensorHitMap::considerNClosest(7); break; case CONSIDERNINETEEN: - SensorHitMap::fillHitsForPositioningByRadius(3); //TODO: Parameter + //analogous to the LayerSumAnalyzer (25.11.16) + SensorHitMap::considerNClosest(19); break; case CONSIDERCLUSTERS: //TODO: implement! default: - SensorHitMap::fillHitsForPositioningByRadius(-1.); + SensorHitMap::considerNClosest(-1.); break; } @@ -147,15 +149,40 @@ std::pair SensorHitMap::getCenterPositionError() { //private functions -void SensorHitMap::fillHitsForPositioningByRadius(double R) { +void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! + //better: ranking by radial distance and then take the closest ones HitsForPositioning.clear(); + if (N_considered < 0) { + HitsForPositioning = Hits; + return; + } + + //calculate radial distance for all pairs to the most significant hit + std::vector> to_sort; for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (R == -1.) { - HitsForPositioning.push_back(*hit); - continue; + double current_radius = sqrt(pow((*hit)->x - mostSignificantHit->x,2) + pow((*hit)->y - mostSignificantHit->y,2)); + if (current_radius == 0.) continue; + to_sort.push_back(std::make_pair(current_radius, (*hit))); + } + + //sort the hits by their radial distance + std::sort(to_sort.begin(), to_sort.end(), + [](const std::pair& a, const std::pair b){ + return a.first < b.first; } + ); + int considerCounter = 0; + for (std::vector>::iterator sorted_hit = to_sort.begin(); + sorted_hit != to_sort.end(); sorted_hit++) { + if (considerCounter == N_considered){ + break; + } + considerCounter++; + HitsForPositioning.push_back((*sorted_hit).second); } + //additional cleanup to be safe + to_sort.clear(); } void SensorHitMap::poweredWeighting(int exponent) { From 410ca5c8e10c1a33f74f6edbe872fe60cbaae57b Mon Sep 17 00:00:00 2001 From: thorben quast Date: Sat, 26 Nov 2016 15:24:28 +0100 Subject: [PATCH 113/297] [bad spill filter] externalize paths to config files --- RawToDigi/plugins/Bad_Spill_Filter.cc | 8 +++++--- RawToDigi/python/hgcaltbdigis_cfi.py | 4 +++- test_cfg_newEB.py | 8 ++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc index 51fd61e..3ea91fe 100644 --- a/RawToDigi/plugins/Bad_Spill_Filter.cc +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -63,9 +63,9 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { // int Bad_Runs_CFG2[98] = {1202, 1203, 1204, 1206, 1208, 1214, 1215, 1216, 1217, 1219, 1220, 1221, 1222, 1223, 1179, 1180, 1181, 1185, 1186, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1197, 1199, 1122, 1123, 1124, 1125, 1126, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1137, 1138, 1141, 1144, 1145, 1146, 1150, 1248, 1249, 1250, 1251, 1253, 1254, 1257, 1260, 1261, 1263, 1264, 1267, 1291, 1292, 1294, 1295, 1296, 1298, 1299, 1301, 1302, 1303, 1305, 1307, 1308, 1309, 1227, 1228, 1233, 1235, 1240, 1242, 1243, 1244, 1246, 1247, 1154, 1156, 1157, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1172, 1173}; std::array< std::vector , Num_BAD_RUNS_CFG> Bad_Run_Spill_Array; - FILE* m_file; - string name_CFG1 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt"; - string name_CFG2 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt"; + FILE* m_file; + string name_CFG1; + string name_CFG2; //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; @@ -91,6 +91,8 @@ Bad_Spill_Filter::Bad_Spill_Filter(const edm::ParameterSet& iConfig) bool Not_Filled_Once = true; int run_counter = 0; layers_config_ = iConfig.getParameter("layers_config"); + name_CFG1 = iConfig.getParameter("configFile1"); + name_CFG2 = iConfig.getParameter("configFile2"); if(layers_config_ == 1) m_file = fopen(name_CFG1.c_str(),"r"); else if(layers_config_ == 2) m_file = fopen(name_CFG2.c_str(),"r"); diff --git a/RawToDigi/python/hgcaltbdigis_cfi.py b/RawToDigi/python/hgcaltbdigis_cfi.py index df37c12..51dac12 100644 --- a/RawToDigi/python/hgcaltbdigis_cfi.py +++ b/RawToDigi/python/hgcaltbdigis_cfi.py @@ -10,5 +10,7 @@ ) BadSpillFilter = cms.EDFilter("Bad_Spill_Filter", - layers_config = cms.int32(-1) + layers_config = cms.int32(-1), + configFile1 = cms.string("/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt"), + configFile2 = cms.string("/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt") ) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index db3ad42..6f7595d 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -102,7 +102,7 @@ ) -options.maxEvents = -1 +options.maxEvents = 3000 options.parseArguments() @@ -153,6 +153,10 @@ ###### +process.BadSpillFilter.configFile1 = "%s/CondObjects/data/Bad_Run_Spill_CFG1.txt" % repoFolder +process.BadSpillFilter.configFile2 = "%s/CondObjects/data/Bad_Run_Spill_CFG2.txt" % repoFolder + + process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) @@ -243,7 +247,7 @@ elif (options.chainSequence == 7): process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) elif (options.chainSequence == 8): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.position_resolution_analyzer) + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) # example for running display : From 3042f8d951dcd0c7d3bd7ff601aa4ab67aa48122 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Sat, 26 Nov 2016 16:22:46 +0100 Subject: [PATCH 114/297] [position resolution] fix sign in most significant hit calculation + division by zero case in cm subtraction --- Reco/plugins/Position_Resolution_Analyzer.cc | 5 +++-- Reco/src/PositionResolutionHelpers.cc | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index d904e52..b2dae79 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -84,6 +84,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerSetOptStat(); + // initialization usesResource("TFileService"); HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); @@ -231,8 +232,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E DeviationTriple this_deviation; this_deviation.deviation = sqrt( pow(x_predicted - x_true, 2) + pow(y_predicted - y_true, 2) ); //DEBUG - if (this_deviation.deviation > 12. && abs(x_predicted) < 6. && abs(y_predicted) < 6.) - std::cout<<"layer: "< 1000.) + std::cout<<" layer: "<I = energy; Hits[Hits.size()-1]->E = energy; - if (mostSignificantHit==NULL || energy < mostSignificantHit->E) { + if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { mostSignificantHit = Hits[Hits.size()-1]; } //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) - if (energy <= CM_threshold && (ID==0 || ID==4)) { //also analogous to the implementation in the LayerSumAnalyzer + if (energy <= CM_threshold) { //also analogous to the implementation in the LayerSumAnalyzer CM_cells_count++; CM_sum += energy; } } void SensorHitMap::subtractCM() { - double cm_subtraction = CM_sum/CM_cells_count; + double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin @@ -161,7 +161,6 @@ void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! std::vector> to_sort; for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ double current_radius = sqrt(pow((*hit)->x - mostSignificantHit->x,2) + pow((*hit)->y - mostSignificantHit->y,2)); - if (current_radius == 0.) continue; to_sort.push_back(std::make_pair(current_radius, (*hit))); } @@ -221,6 +220,7 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; I_max += I_i; } + double numerator_x, numerator_y, denominator; double w; From f482979daff90d5e67c21dfef12017b73b2b5b88 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Sat, 26 Nov 2016 16:34:28 +0100 Subject: [PATCH 115/297] [position resolution] update cm subtraction formula with max(x, 0) statement --- Reco/src/PositionResolutionHelpers.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 0df6b4f..384ccf1 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -85,9 +85,9 @@ void SensorHitMap::subtractCM() { // we want: - all cells that were input to the cm (common mode) calculation get weight 0 // - all the others are corrected by the cm if ((*hit)->E > CM_threshold) { - (*hit)->I -= cm_subtraction; + (*hit)->I = (*hit)->I - cm_subtraction; } else { - (*hit)->I = 0; + (*hit)->I = std::max((*hit)->I - cm_subtraction, 0.); } break; default: From c9ddf710149fe8c0667aee831dc354f427217fb6 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 28 Nov 2016 11:37:48 +0100 Subject: [PATCH 116/297] [position resolution] add cluster consideration in position calculation --- Reco/interface/PositionResolutionHelpers.h | 12 ++- Reco/plugins/Position_Resolution_Analyzer.cc | 55 ++++++++++-- Reco/python/position_resolution_cfi.py | 5 +- Reco/src/PositionResolutionHelpers.cc | 89 ++++++++++++-------- 4 files changed, 118 insertions(+), 43 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 5e1302f..9b26784 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -11,6 +11,8 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" #include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //e.g. to get the cell's dimensions @@ -21,7 +23,9 @@ enum ConsiderationMethod { CONSIDERALL, CONSIDERSEVEN, CONSIDERNINETEEN, - CONSIDERCLUSTERS + CONSIDERCLUSTERSALL, + CONSIDERCLUSTERSSEVEN, + CONSIDERCLUSTERSNINETEEN }; enum WeightingMethod { @@ -62,7 +66,8 @@ class SensorHitMap { int sensorSize; double CM_threshold; double ADC_per_MIP; - std::vector Hits; //those are all the hits in the layer + std::map Hits; //those are all the hits in the layer + std::map> clusterIndexes; std::vector HitsForPositioning; HitData* mostSignificantHit; @@ -72,7 +77,9 @@ class SensorHitMap { int CM_cells_count; double CM_sum; + bool filterByCellType(HitData* hit); void considerNClosest(int N_considered); + void considerClusters(int N_considered); void poweredWeighting(int exponent); void logWeighting(double log_a, double log_b); @@ -85,6 +92,7 @@ class SensorHitMap { void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); + void addClusterHit(HGCalTBDetId hit, int N_considered); void subtractCM(); void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); double getZ(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index b2dae79..d26c530 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -30,6 +30,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition #include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" @@ -53,7 +54,11 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer fs; - edm::EDGetTokenT HGCalTBRecHitCollection_; + edm::EDGetTokenT HGCalTBRecHitCollection_Token; + edm::EDGetToken HGCalTBClusterCollection_Token; + edm::EDGetToken HGCalTBClusterCollection7_Token; + edm::EDGetToken HGCalTBClusterCollection19_Token; + edm::EDGetTokenT RunDataToken; ConsiderationMethod considerationMethod; @@ -87,8 +92,11 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS // initialization usesResource("TFileService"); - HGCalTBRecHitCollection_ = consumes(iConfig.getParameter("HGCALTBRECHITS")); + HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); //read the cell consideration option to calculate the central hit point std::string methodString = iConfig.getParameter("considerationMethod"); @@ -98,8 +106,12 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS considerationMethod = CONSIDERSEVEN; else if (methodString == "closest19") considerationMethod = CONSIDERNINETEEN; - else if(methodString == "clusters") - considerationMethod = CONSIDERCLUSTERS; + else if(methodString == "clustersAll") + considerationMethod = CONSIDERCLUSTERSALL; + else if(methodString == "clusters7") + considerationMethod = CONSIDERCLUSTERSSEVEN; + else if(methodString == "clusters19") + considerationMethod = CONSIDERCLUSTERSNINETEEN; //read the weighting method to obtain the central hit point methodString = iConfig.getParameter("weightingMethod"); @@ -177,9 +189,19 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //opening Rechits edm::Handle Rechits; - event.getByToken(HGCalTBRecHitCollection_, Rechits); - + event.getByToken(HGCalTBRecHitCollection_Token, Rechits); + + //opening Clusters (made from all, closest 7, closest 9) + edm::Handle clusters; + edm::Handle clusters7; + edm::Handle clusters19; + event.getByToken(HGCalTBClusterCollection_Token, clusters); + event.getByToken(HGCalTBClusterCollection7_Token, clusters7); + event.getByToken(HGCalTBClusterCollection19_Token, clusters19); + + //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer + //fill the rechits: for(auto Rechit : *Rechits) { layer = (Rechit.id()).layer(); if ( Sensors.find(layer) == Sensors.end() ) { @@ -192,6 +214,26 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->addHit(Rechit); } + //fill the hits from the cluster collections + for( auto cluster : *clusters ){ + layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->addClusterHit((*it).first, -1); + } + } + for( auto cluster : *clusters7 ){ + layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->addClusterHit((*it).first, 7); + } + } + for( auto cluster : *clusters19 ){ + layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->addClusterHit((*it).first, 19); + } + } + //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract common first @@ -213,7 +255,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->fitTrack(fittingMethod); } - //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (int layer=1; layer<=nLayers; layer++) { layerZ = Sensors[layer]->getZ(); diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 8495160..909967e 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -11,5 +11,8 @@ SensorSize = cms.int32(128), EventsFor2DGraphs = cms.vint32([1]), RUNDATA = cms.InputTag("source","RunData","unpack" ), - HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )#, + HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), + HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), + HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ), + HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" ) ) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 384ccf1..90690ba 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -18,8 +18,8 @@ SensorHitMap::SensorHitMap(){ } SensorHitMap::~SensorHitMap(){ - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - delete *hit; + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + delete (*hit).second; } Hits.clear(); } @@ -45,26 +45,26 @@ double SensorHitMap::getZ() { } //reduces the information from the Rechit towards what is necessary for the impact point calculation +//here all hits independent from the cellType are included void SensorHitMap::addHit(HGCalTBRecHit Rechit) { + int uniqueID = (Rechit.id()).rawId(); + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); double iux = CellCenterXY.first; double ivy = CellCenterXY.second; int ID = (Rechit.id()).cellType(); - if (ID!=0 && ID!=1 && ID!=4) //filter cells that do not have either 0, 1, 4 as ID - return; - double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also calcu - Hits.push_back(new HitData); - Hits[Hits.size()-1]->ID = ID; - Hits[Hits.size()-1]->x = iux; - Hits[Hits.size()-1]->y = ivy; - Hits[Hits.size()-1]->I = energy; - Hits[Hits.size()-1]->E = energy; + Hits[uniqueID] = new HitData; + Hits[uniqueID]->ID = ID; + Hits[uniqueID]->x = iux; + Hits[uniqueID]->y = ivy; + Hits[uniqueID]->I = energy; + Hits[uniqueID]->E = energy; if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { - mostSignificantHit = Hits[Hits.size()-1]; + mostSignificantHit = Hits[uniqueID]; } //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) @@ -74,20 +74,25 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { } } +void SensorHitMap::addClusterHit(HGCalTBDetId hit, int N_considered) { + int uniqueID = hit.rawId(); + clusterIndexes[N_considered].push_back(uniqueID); +} + void SensorHitMap::subtractCM() { double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin - switch((*hit)->ID) { + switch((*hit).second->ID) { case 0: case 4: // we want: - all cells that were input to the cm (common mode) calculation get weight 0 // - all the others are corrected by the cm - if ((*hit)->E > CM_threshold) { - (*hit)->I = (*hit)->I - cm_subtraction; + if ((*hit).second->E > CM_threshold) { + (*hit).second->I = (*hit).second->I - cm_subtraction; } else { - (*hit)->I = std::max((*hit)->I - cm_subtraction, 0.); + (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); } break; default: @@ -109,8 +114,15 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth //analogous to the LayerSumAnalyzer (25.11.16) SensorHitMap::considerNClosest(19); break; - case CONSIDERCLUSTERS: - //TODO: implement! + case CONSIDERCLUSTERSALL: + SensorHitMap::considerClusters(-1); + break; + case CONSIDERCLUSTERSSEVEN: + SensorHitMap::considerClusters(7); + break; + case CONSIDERCLUSTERSNINETEEN: + SensorHitMap::considerClusters(19); + break; default: SensorHitMap::considerNClosest(-1.); break; @@ -148,20 +160,32 @@ std::pair SensorHitMap::getCenterPositionError() { } -//private functions +//private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) +bool SensorHitMap::filterByCellType(HitData* hit) { + if (hit->ID!=0 && hit->ID!=1 && hit->ID!=4) //filter cells that do not have either 0, 1, 4 as ID + return true; + + return false; +} + + void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! //better: ranking by radial distance and then take the closest ones HitsForPositioning.clear(); if (N_considered < 0) { - HitsForPositioning = Hits; + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second)) continue; + HitsForPositioning.push_back((*hit).second); + } return; } //calculate radial distance for all pairs to the most significant hit std::vector> to_sort; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - double current_radius = sqrt(pow((*hit)->x - mostSignificantHit->x,2) + pow((*hit)->y - mostSignificantHit->y,2)); - to_sort.push_back(std::make_pair(current_radius, (*hit))); + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second)) continue; + double current_radius = sqrt(pow((*hit).second->x - mostSignificantHit->x,2) + pow((*hit).second->y - mostSignificantHit->y,2)); + to_sort.push_back(std::make_pair(current_radius, (*hit).second)); } //sort the hits by their radial distance @@ -184,6 +208,13 @@ void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! to_sort.clear(); } +void SensorHitMap::considerClusters(int N_considered) { + for (std::vector::iterator clusterIndex = clusterIndexes[N_considered].begin(); + clusterIndex != clusterIndexes[N_considered].end(); clusterIndex++){ + HitsForPositioning.push_back(Hits[*clusterIndex]); + } +} + void SensorHitMap::poweredWeighting(int exponent) { double numerator_x, numerator_y, denominator; double w; @@ -243,7 +274,7 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { //calculate the RMs numerator_x = numerator_y = 0.0; - for(std::vector::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; if (I_i == 0.) continue; w = std::max(log_a + log_b*log(I_i/I_max), 0.0); @@ -343,11 +374,3 @@ std::pair ParticleTrack::positionFromPolFitTGraphErrors(double z return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); } -//debug function -void SensorHitMap::printHits() { - - for(std::vector::iterator it=Hits.begin(); it!=Hits.end(); it++){ - std::cout<<(*it)->x<<" "<<(*it)->y<<" "<<(*it)->I< Date: Mon, 28 Nov 2016 16:55:09 +0100 Subject: [PATCH 117/297] [position resolution] different z positions for the two configurations, config2 (25X0) still incomplete --- Reco/plugins/Position_Resolution_Analyzer.cc | 21 ++++++++++++++------ Reco/python/position_resolution_cfi.py | 2 +- test_cfg_newEB.py | 6 ++++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index d26c530..18d6971 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -38,9 +38,10 @@ #include "TFile.h" #include "TH2D.h" #include "TGraph2D.h" - - - + +double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; +double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; + class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { public: explicit Position_Resolution_Analyzer(const edm::ParameterSet&); @@ -69,6 +70,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer Layer_Z_Positions; std::vector ADC_per_MIP; + int LayersConfig; int nLayers; int SensorSize; @@ -139,10 +141,16 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS else fittingMethod = DEFAULTFITTING; + //read the layer configuration + LayersConfig = iConfig.getParameter("layers_config"); + if (LayersConfig == 1) Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); + if (LayersConfig == 2) Layer_Z_Positions = std::vector(config2Positions, config2Positions + sizeof(config2Positions)/sizeof(double)); + else Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); + + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); - nLayers = iConfig.getParameter("nLayers"); SensorSize = iConfig.getParameter("SensorSize"); - Layer_Z_Positions = iConfig.getParameter >("Layer_Z_Positions"); + nLayers = iConfig.getParameter("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); //making 2DGraphs per event? @@ -208,6 +216,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setZ(Layer_Z_Positions[layer]); + std::cout<<"layer: "<setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -292,8 +301,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E y_true_v.push_back(y_true); layerZ_v.push_back(layerZ); } - } + if (make2DGraphs) { std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 909967e..8666b46 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -5,7 +5,7 @@ weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), pedestalThreshold = cms.double(2.), - Layer_Z_Positions = cms.vdouble([1.2, 2., 3.5, 4.3, 5.8, 6.3, 8.7, 9.5, 11.4, 12.2, 13.8, 14.6, 16.6, 17.4, 20., 20.8]), + layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), nLayers = cms.int32(8), SensorSize = cms.int32(128), diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 6f7595d..d28309c 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -102,7 +102,7 @@ ) -options.maxEvents = 3000 +options.maxEvents = -1 options.parseArguments() @@ -168,7 +168,7 @@ process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) -process.position_resolution_analyzer.EventsFor2DGraphs = [1, 29] #first occuring events with that id are being documented with 2DGraphs +process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", @@ -213,10 +213,12 @@ process.BadSpillFilter.layers_config = cms.int32(1) process.LayerSumAnalyzer.layers_config = cms.int32(1) process.hgcaltbrechits.layers_config = cms.int32(1) + process.position_resolution_analyzer.layers_config = cms.int32(1) elif(options.configuration == "2"): process.BadSpillFilter.layers_config = cms.int32(2) process.LayerSumAnalyzer.layers_config = cms.int32(2) process.hgcaltbrechits.layers_config = cms.int32(2) + process.position_resolution_analyzer.layers_config = cms.int32(2) ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) From 8f701461995065ffc3163fa9042f6a80b4cbaa3b Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 28 Nov 2016 17:19:23 +0100 Subject: [PATCH 118/297] [position resolution] output format is Ttree --- Reco/interface/PositionResolutionHelpers.h | 4 - Reco/plugins/Position_Resolution_Analyzer.cc | 107 +++++++------------ 2 files changed, 36 insertions(+), 75 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 9b26784..20f3d66 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -51,10 +51,6 @@ struct HitData { int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction }; -struct DeviationTriple { - double deviation, predicted_x, predicted_y; -}; - // // class declarations // diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 18d6971..320db8a 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -38,6 +38,7 @@ #include "TFile.h" #include "TH2D.h" #include "TGraph2D.h" +#include "TTree.h" double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; @@ -75,18 +76,18 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer successfulFitCounter, failedFitCounter; - double min_deviation, max_deviation; //minimum and maximum value of the deviations for the 2D histogram, those are defined globally for subsequent adding of runs - //stuff to be written to objects at the end, first is the energy, second the layer thickness, third the run and last the layer int - std::map > > > >deviations; //helper variables that are set within the event loop, i.e. are defined per event - int evId, run, layer; - double energy, layerThickness; std::map Sensors; std::map Tracks; std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_v; - double x_predicted, y_predicted, x_true, y_true, layerZ, deviation; + + //stuff to be written to the tree + TTree* outTree; + int evId, run, layer; + double energy, layerThickness; + double x_predicted, y_predicted, x_true, y_true, deltaX, deltaY, layerZ, deviation; }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -156,9 +157,23 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //making 2DGraphs per event? EventsFor2DGraphs = iConfig.getParameter >("EventsFor2DGraphs"); - //initiate the minimum and maximum values for the deviation - min_deviation = pow(10., 12); - max_deviation = -1.; + //initialize tree and set Branch addresses + outTree = fs->make("deviations", "deviations"); + outTree->Branch("eventId", &evId, "eventId/I"); + outTree->Branch("run", &run, "run/I"); + outTree->Branch("layer", &layer, "layer/I"); + outTree->Branch("energy", &energy, "energy/D"); + outTree->Branch("layerThickness", &layerThickness, "layerThickness/D"); + outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); + outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); + outTree->Branch("x_true", &x_true, "x_true/D"); + outTree->Branch("y_true", &y_true, "y_true/D"); + outTree->Branch("deltaX", &deltaX, "deltaX/D"); + outTree->Branch("deltaY", &deltaY, "deltaY/D"); + outTree->Branch("layerZ", &layerZ, "layerZ/D"); + outTree->Branch("deviation", &deviation, "deviation/D"); + // double energy, layerThickness; + // double x_predicted, y_predicted, x_true, y_true, deltaX, deltaY, layerZ, deviation; }//constructor ends here @@ -169,11 +184,11 @@ Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { // ------------ method called for each event ------------ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { + edm::Handle rd; //get the relevant event information - evId = event.id().event(); - edm::Handle rd; event.getByToken(RunDataToken, rd); + evId = event.id().event(); run = rd->run; energy = rd->energy; layerThickness = rd->layerThickness; @@ -183,7 +198,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } //check if 2DGraphs are to be made - bool make2DGraphs = false; std::vector::iterator findPosition = std::find(EventsFor2DGraphs.begin(), EventsFor2DGraphs.end(), evId); if (findPosition != EventsFor2DGraphs.end()) { @@ -216,7 +230,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setZ(Layer_Z_Positions[layer]); - std::cout<<"layer: "<setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -269,6 +282,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layerZ = Sensors[layer]->getZ(); x_predicted = Tracks[layer]->calculatePositionXY(layerZ).first; y_predicted = Tracks[layer]->calculatePositionXY(layerZ).second; + if (x_predicted==0 && y_predicted==0) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented failedFitCounter[run]++; @@ -279,20 +293,19 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E x_true = Sensors[layer]->getCenterPosition().first; y_true = Sensors[layer]->getCenterPosition().second; - DeviationTriple this_deviation; - this_deviation.deviation = sqrt( pow(x_predicted - x_true, 2) + pow(y_predicted - y_true, 2) ); + deltaX = x_predicted - x_true; + deltaY = y_predicted - y_true; + deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); + //DEBUG - if (this_deviation.deviation > 1000.) + if (deviation > 1000.) std::cout<<" layer: "<Fill(); + //update the deviations maxima on the fly - min_deviation = min_deviation > this_deviation.deviation ? this_deviation.deviation: min_deviation; - max_deviation = max_deviation < this_deviation.deviation ? this_deviation.deviation: max_deviation; - if (make2DGraphs) { //store for the two 2D graphs that are written per event x_predicted_v.push_back(x_predicted); @@ -326,54 +339,6 @@ void Position_Resolution_Analyzer::beginJob() { void Position_Resolution_Analyzer::endJob() { //optained information are not processed into according ROOT objects for final storage - - std::cout<<"*************************************************"<::iterator it; - for (it = successfulFitCounter.begin(); it != successfulFitCounter.end(); it++) { - std::cout<<"RUN: "<<(*it).first< > > > >::iterator it1; - TFileDirectory subDir1; - std::map > > >::iterator it2; - TFileDirectory subDir2; - std::map > >::iterator it3; - - //create subdirectory system - for (it1=deviations.begin(); it1!=deviations.end(); it1++) { - subDir1 = this->fs->mkdir(std::to_string((*it1).first).c_str()); - std::cout<<"E: "<<(*it1).first<<"..."<(("run_"+std::to_string((*it3).first)).c_str(), "", nLayers, 0.5, nLayers+0.5, 10000, min_deviation, max_deviation); - deviationHistogram->GetXaxis()->SetTitle("n_{Layer}"); - deviationHistogram->GetYaxis()->SetTitle("deviation_{x-y} [cm]"); - for(int i=1; i<=nLayers; i++) { - TH2D* deviationOverPosition_x = subDir2.make(("x_layer_"+std::to_string(i)+"__run_"+std::to_string((*it3).first)).c_str(), "", 16, -4.0, 4.0, 600, 0.0, 12.); - TH2D* deviationOverPosition_y = subDir2.make(("y_layer_"+std::to_string(i)+"__run_"+std::to_string((*it3).first)).c_str(), "", 16, -4.0, 4.0, 600, 0.0, 12.); - deviationOverPosition_x->GetXaxis()->SetTitle("x_{pred.} [cm]"); - deviationOverPosition_x->GetYaxis()->SetTitle("dev_{x-y} [cm]"); - deviationOverPosition_y->GetXaxis()->SetTitle("y_{pred.} [cm]"); - deviationOverPosition_y->GetYaxis()->SetTitle("dev_{x-y} [cm]"); - for(int j=0; j<(int)(*it3).second[i].size(); j++){ - deviationHistogram->Fill(i, (*it3).second[i][j].deviation); - deviationOverPosition_x->Fill((*it3).second[i][j].predicted_x, (*it3).second[i][j].deviation); - deviationOverPosition_y->Fill((*it3).second[i][j].predicted_y, (*it3).second[i][j].deviation); - } - } - } - } - } - std::cout<<"*************************************************"< Date: Mon, 28 Nov 2016 17:29:41 +0100 Subject: [PATCH 119/297] [input] layerThicknes information --> configuration index (1/2, e.g.) --- DataFormats/interface/HGCalTBRunData.h | 6 +++--- RawToDigi/plugins/HGCalTBTextSource.cc | 10 +++++----- Reco/plugins/Position_Resolution_Analyzer.cc | 11 ++++------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index a63d8a6..e6bff74 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -3,11 +3,11 @@ #include struct RunData { - explicit RunData(int r, double e, double lt, std::string rt): run(r), energy(e), layerThickness(lt), runType(rt) {}; - RunData(): run(0), energy(0), layerThickness(0), runType(""){}; + explicit RunData(int config, int r, double e, std::string rt): configuration(config), run(r), energy(e), runType(rt) {}; + RunData(): configuration(0), run(0), energy(0), runType(""){}; + int configuration; int run; double energy; - double layerThickness; std::string runType; }; diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 1d162c9..e21af5e 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -15,7 +15,7 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { //perform the loop and fill configuredRuns char fragment[100]; int readCounter = 0; - int _run = 0; double _energy = 0, _layerThickness = 0; std::string _runType = ""; + int _run = 0, _configuration = 0; double _energy = 0; std::string _runType = ""; while (map_file.is_open() && !map_file.eof()) { readCounter++; @@ -30,11 +30,11 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { else if (readCounter % 4 == 2) _energy = atof(fragment); else if (readCounter % 4 == 3) _runType = (std::string)fragment; else if (readCounter % 4 == 0) { - _layerThickness = atof(fragment); + _configuration = atoi(fragment); //store configuredRuns[_run].energy = _energy; configuredRuns[_run].runType = _runType; - configuredRuns[_run].layerThickness = _layerThickness; + configuredRuns[_run].configuration = _configuration; //add the zeros if (_run < 10) run_prefix= "00000"; @@ -167,12 +167,12 @@ void HGCalTBTextSource::produce(edm::Event & event) std::auto_ptr rd(new RunData); if (configuredRuns.find(m_run) != configuredRuns.end()) { rd->energy = configuredRuns[m_run].energy; - rd->layerThickness = configuredRuns[m_run].layerThickness; + rd->configuration = configuredRuns[m_run].configuration; rd->runType = configuredRuns[m_run].runType; rd->run = m_run; } else { rd->energy = -1; - rd->layerThickness = -1; + rd->configuration = -1; rd->runType = "-1"; rd->run = -1; } diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 320db8a..5a5f560 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -85,8 +85,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzermake("deviations", "deviations"); + outTree->Branch("configuration", &configuration, "configuration/I"); outTree->Branch("eventId", &evId, "eventId/I"); outTree->Branch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); - outTree->Branch("layerThickness", &layerThickness, "layerThickness/D"); outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); outTree->Branch("x_true", &x_true, "x_true/D"); @@ -172,9 +172,6 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("deltaY", &deltaY, "deltaY/D"); outTree->Branch("layerZ", &layerZ, "layerZ/D"); outTree->Branch("deviation", &deviation, "deviation/D"); - // double energy, layerThickness; - // double x_predicted, y_predicted, x_true, y_true, deltaX, deltaY, layerZ, deviation; - }//constructor ends here @@ -188,10 +185,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //get the relevant event information event.getByToken(RunDataToken, rd); + configuration = rd->configuration; evId = event.id().event(); run = rd->run; energy = rd->energy; - layerThickness = rd->layerThickness; if (run == -1) { std::cout<<"Run is not in configuration file - is ignored."< Date: Mon, 28 Nov 2016 17:50:01 +0100 Subject: [PATCH 120/297] [position resolution] radial distance criterion for N closest with at least N (N=7,19) --- Reco/src/PositionResolutionHelpers.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 90690ba..b94a7c5 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -195,15 +195,20 @@ void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! } ); + double maxDist = 0; + if (N_considered == 7) maxDist = (0.5 + sqrt(3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; + else if (N_considered == 7) maxDist = (0.5 + sqrt(3) * 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; + int considerCounter = 0; for (std::vector>::iterator sorted_hit = to_sort.begin(); sorted_hit != to_sort.end(); sorted_hit++) { - if (considerCounter == N_considered){ + if ((*sorted_hit).first > maxDist && considerCounter >= N_considered){ //fill at least Nconsider but also mind radial distance break; } considerCounter++; HitsForPositioning.push_back((*sorted_hit).second); } + //additional cleanup to be safe to_sort.clear(); } From eebf90fbdb175ae392bb5ef039a73e3bfa1017c8 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 28 Nov 2016 17:50:53 +0100 Subject: [PATCH 121/297] [position resolution] update file list for position resolution study (config 1) --- CondObjects/data/runEnergies.txt | 178 ++++++++++++++++++------------- 1 file changed, 106 insertions(+), 72 deletions(-) diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index beb9d12..d109198 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -1,72 +1,106 @@ -#RUN ENERGY[GeV] RUNTYPE ABSORBERTHICKNESS -1026 200. electron 5.7 -857 150. electron 5.7 -858 150. electron 5.7 -859 150. electron 5.7 -860 150. electron 5.7 -862 150. electron 5.7 -866 70. electron 5.7 -867 70. electron 5.7 -878 70. electron 5.7 -879 70. electron 5.7 -880 70. electron 5.7 -920 20. electron 5.7 -921 20. electron 5.7 -922 20. electron 5.7 -923 20. electron 5.7 -924 20. electron 5.7 -945 250. electron 5.7 -946 250. electron 5.7 -947 250. electron 5.7 -948 250. electron 5.7 -949 250. electron 5.7 -1038 200. electron 5.7 -1039 200. electron 5.7 -1040 200. electron 5.7 -1041 200. electron 5.7 -1042 200. electron 5.7 -1069 100. electron 5.7 -1070 100. electron 5.7 -1071 100. electron 5.7 -1072 100. electron 5.7 -1073 100. electron 5.7 -1091 32. electron 5.7 -1092 32. electron 5.7 -1093 32. electron 5.7 -1094 32. electron 5.7 -1095 32. electron 5.7 -1125 150. electron 25.0 -1126 150. electron 25.0 -1128 150. electron 25.0 -1129 150. electron 25.0 -1130 150. electron 25.0 -1168 70. electron 25.0 -1169 70. electron 25.0 -1170 70. electron 25.0 -1171 70. electron 25.0 -1172 70. electron 25.0 -1188 200. electron 25.0 -1189 200. electron 25.0 -1190 200. electron 25.0 -1191 200. electron 25.0 -1192 200. electron 25.0 -1217 100. electron 25.0 -1218 100. electron 25.0 -1219 100. electron 25.0 -1220 100. electron 25.0 -1221 100. electron 25.0 -1240 32. electron 25.0 -1241 32. electron 25.0 -1242 32. electron 25.0 -1243 32. electron 25.0 -1244 32. electron 25.0 -1260 20. electron 25.0 -1261 20. electron 25.0 -1262 20. electron 25.0 -1263 20. electron 25.0 -1264 20. electron 25.0 -1299 250. electron 25.0 -1300 250. electron 25.0 -1301 250. electron 25.0 -1302 250. electron 25.0 -1303 250. electron 25.0 \ No newline at end of file +#RUN ENERGY[GeV] RUNTYPE CONFIGURATION +1026 200. electron 1 +852 150. electron 1 +853 150. electron 1 +854 150. electron 1 +855 150. electron 1 +856 150. electron 1 +857 150. electron 1 +858 150. electron 1 +859 150. electron 1 +860 150. electron 1 +862 150. electron 1 +866 70. electron 1 +867 70. electron 1 +878 70. electron 1 +879 70. electron 1 +880 70. electron 1 +881 70. electron 1 +882 70. electron 1 +887 70. electron 1 +888 70. electron 1 +920 20. electron 1 +921 20. electron 1 +922 20. electron 1 +923 20. electron 1 +924 20. electron 1 +925 20. electron 1 +926 20. electron 1 +927 20. electron 1 +928 20. electron 1 +929 20. electron 1 +944 250. electron 1 +945 250. electron 1 +946 250. electron 1 +947 250. electron 1 +948 250. electron 1 +949 250. electron 1 +950 250. electron 1 +951 250. electron 1 +952 250. electron 1 +953 250. electron 1 +1026 200. electron 1 +1027 200. electron 1 +1028 200. electron 1 +1029 200. electron 1 +1030 200. electron 1 +1038 200. electron 1 +1039 200. electron 1 +1040 200. electron 1 +1041 200. electron 1 +1042 200. electron 1 +1051 100. electron 1 +1052 100. electron 1 +1053 100. electron 1 +1054 100. electron 1 +1056 100. electron 1 +1069 100. electron 1 +1070 100. electron 1 +1071 100. electron 1 +1072 100. electron 1 +1073 100. electron 1 +1088 32. electron 1 +1089 32. electron 1 +1091 32. electron 1 +1092 32. electron 1 +1093 32. electron 1 +1094 32. electron 1 +1095 32. electron 1 +1098 32. electron 1 +1099 32. electron 1 +1100 32. electron 1 +1125 150. electron 2 +//1126 150. electron 2 +//1128 150. electron 2 +//1129 150. electron 2 +//1130 150. electron 2 +//1168 70. electron 2 +//1169 70. electron 2 +//1170 70. electron 2 +//1171 70. electron 2 +//1172 70. electron 2 +//1188 200. electron 2 +//1189 200. electron 2 +//1190 200. electron 2 +//1191 200. electron 2 +//1192 200. electron 2 +//1217 100. electron 2 +//1218 100. electron 2 +//1219 100. electron 2 +//1220 100. electron 2 +//1221 100. electron 2 +//1240 32. electron 2 +//1241 32. electron 2 +//1242 32. electron 2 +//1243 32. electron 2 +//1244 32. electron 2 +//1260 20. electron 2 +//1261 20. electron 2 +//1262 20. electron 2 +//1263 20. electron 2 +//1264 20. electron 2 +//1299 250. electron 2 +//1300 250. electron 2 +//1301 250. electron 2 +//1302 250. electron 2 +//1303 250. electron 2 \ No newline at end of file From 3a544704fc3fcb643ac5b301f5c1fe2ae02d9d1e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 30 Nov 2016 09:59:09 +0100 Subject: [PATCH 122/297] [position resolution] add X0 depth of each layer w.r.t. the origin to the output tree (untested commit) --- Reco/interface/PositionResolutionHelpers.h | 8 ++-- Reco/plugins/Position_Resolution_Analyzer.cc | 50 +++++++++++++------- Reco/src/PositionResolutionHelpers.cc | 15 ++++-- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 20f3d66..1731bd4 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -58,7 +58,8 @@ class SensorHitMap { private: std::pair centralHitPoint; std::pair centralHitPointError; - double layerZ; + double layerZ_cm; + double layerZ_X0; int sensorSize; double CM_threshold; double ADC_per_MIP; @@ -82,7 +83,7 @@ class SensorHitMap { public: SensorHitMap(); ~SensorHitMap(); - void setZ(double z); + void setZ(double z_cm); void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); @@ -91,7 +92,8 @@ class SensorHitMap { void addClusterHit(HGCalTBDetId hit, int N_considered); void subtractCM(); void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); - double getZ(); + double getZ_cm(); + double getZ_X0(); std::pair getCenterPosition(); std::pair getCenterPositionError(); //calculated via RMS diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 5a5f560..63e950b 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -40,8 +40,13 @@ #include "TGraph2D.h" #include "TTree.h" -double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; -double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; +//configuration1: +double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm +double X0depth_8L_conf1[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer + +//configuration2: +double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm +double X0depth_8L_conf2[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { public: @@ -70,6 +75,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer EventsFor2DGraphs; double pedestalThreshold; std::vector Layer_Z_Positions; + std::vector Layer_Z_X0s; std::vector ADC_per_MIP; int LayersConfig; int nLayers; @@ -81,13 +87,13 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer Sensors; std::map Tracks; - std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_v; + std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_cm_v; //stuff to be written to the tree TTree* outTree; int configuration, evId, run, layer; double energy; - double x_predicted, y_predicted, x_true, y_true, deltaX, deltaY, layerZ, deviation; + double x_predicted, y_predicted, x_true, y_true, deltaX, deltaY, layerZ_cm, layerZ_X0, deviation; }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -144,10 +150,16 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //read the layer configuration LayersConfig = iConfig.getParameter("layers_config"); - if (LayersConfig == 1) Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); - if (LayersConfig == 2) Layer_Z_Positions = std::vector(config2Positions, config2Positions + sizeof(config2Positions)/sizeof(double)); - else Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); - + if (LayersConfig == 1) { + Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(X0depth_8L_conf1, X0depth_8L_conf1 + sizeof(X0depth_8L_conf1)/sizeof(double)); + } if (LayersConfig == 2) { + Layer_Z_Positions = std::vector(config2Positions, config2Positions + sizeof(config2Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(X0depth_8L_conf2, X0depth_8L_conf2 + sizeof(X0depth_8L_conf2)/sizeof(double)); + } else { + Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(X0depth_8L_conf1, X0depth_8L_conf1 + sizeof(X0depth_8L_conf1)/sizeof(double)); + } pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); @@ -170,7 +182,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("y_true", &y_true, "y_true/D"); outTree->Branch("deltaX", &deltaX, "deltaX/D"); outTree->Branch("deltaY", &deltaY, "deltaY/D"); - outTree->Branch("layerZ", &layerZ, "layerZ/D"); + outTree->Branch("layerZ_cm", &layerZ_cm, "layerZ_cm/D"); + outTree->Branch("layerZ_X0", &layerZ_X0, "layerZ_X0/D"); outTree->Branch("deviation", &deviation, "deviation/D"); }//constructor ends here @@ -226,7 +239,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setZ(Layer_Z_Positions[layer]); + Sensors[layer]->setZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon in cm, second argument: position in radiation lengths Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -275,10 +288,11 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position - for (int layer=1; layer<=nLayers; layer++) { - layerZ = Sensors[layer]->getZ(); - x_predicted = Tracks[layer]->calculatePositionXY(layerZ).first; - y_predicted = Tracks[layer]->calculatePositionXY(layerZ).second; + for (layer=1; layer<=nLayers; layer++) { + layerZ_cm = Sensors[layer]->getZ_cm(); + layerZ_X0 = Sensors[layer]->getZ_X0(); + x_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm).first; + y_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm).second; if (x_predicted==0 && y_predicted==0) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented @@ -309,15 +323,15 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E y_predicted_v.push_back(y_predicted); x_true_v.push_back(x_true); y_true_v.push_back(y_true); - layerZ_v.push_back(layerZ); + layerZ_cm_v.push_back(layerZ_cm); } } if (make2DGraphs) { std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); - fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_v[0])); - fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_v[0])); - x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_v.clear(); + fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_cm_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_cm_v[0])); + fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_cm_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_cm_v[0])); + x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_cm_v.clear(); } for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index b94a7c5..9a3046e 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -9,7 +9,8 @@ SensorHitMap::SensorHitMap(){ centralHitPoint = std::make_pair(0., 0.); CM_threshold = 30.; - layerZ = 0; + layerZ_cm = 0; + layerZ_X0 = 0; ADC_per_MIP = 1.; sensorSize = 128; @@ -28,8 +29,9 @@ void SensorHitMap::setSensorSize(int s) { sensorSize = s; } -void SensorHitMap::setZ(double z) { - this->layerZ = z; +void SensorHitMap::setZ(double z_cm, double z_X0) { + this->layerZ_cm = z_cm; + this->layerZ_X0 = z_X0; } void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { @@ -40,10 +42,13 @@ void SensorHitMap::setPedestalThreshold(double t) { this->CM_threshold = t; } -double SensorHitMap::getZ() { - return this->layerZ; +double SensorHitMap::getZ_cm() { + return this->layerZ_cm; } +double SensorHitMap::getZ_X0() { + return this->layerZ_X0; +} //reduces the information from the Rechit towards what is necessary for the impact point calculation //here all hits independent from the cellType are included void SensorHitMap::addHit(HGCalTBRecHit Rechit) { From 927b5256ffbbea48681de0a72b8664493697005e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 30 Nov 2016 10:07:52 +0100 Subject: [PATCH 123/297] [position resolution] write std dev of center position to the tree (untested commit) --- Reco/plugins/Position_Resolution_Analyzer.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 63e950b..00e34c2 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -93,7 +93,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("x_predicted", &x_predicted, "x_predicted/D"); outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); outTree->Branch("x_true", &x_true, "x_true/D"); + outTree->Branch("x_true_err", &x_true_err, "x_true_err/D"); outTree->Branch("y_true", &y_true, "y_true/D"); + outTree->Branch("y_true_err", &y_true_err, "y_true_err/D"); outTree->Branch("deltaX", &deltaX, "deltaX/D"); outTree->Branch("deltaY", &deltaY, "deltaY/D"); outTree->Branch("layerZ_cm", &layerZ_cm, "layerZ_cm/D"); @@ -302,7 +304,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E successfulFitCounter[run]++; x_true = Sensors[layer]->getCenterPosition().first; + x_true_err = Sensors[layer]->getCenterPositionError().first; y_true = Sensors[layer]->getCenterPosition().second; + y_true_err = Sensors[layer]->getCenterPositionError().second; deltaX = x_predicted - x_true; deltaY = y_predicted - y_true; From 5671f38bae9c766a119a8d01b8f4e70a50fd0f80 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 30 Nov 2016 10:33:28 +0100 Subject: [PATCH 124/297] [position resolution] infrastructure to write out uncertainties of predicted/fitted position in each layer (untested commit) --- Reco/interface/PositionResolutionHelpers.h | 4 ++- Reco/plugins/Position_Resolution_Analyzer.cc | 27 +++++++++++++------- Reco/src/PositionResolutionHelpers.cc | 23 +++++++++++++++-- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 1731bd4..b7e12d9 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -109,6 +109,7 @@ class ParticleTrack{ void addFitPoint(SensorHitMap* sensor); void fitTrack(TrackFittingMethod method); std::pair calculatePositionXY(double z); + std::pair calculatePositionErrorXY(double z); private: //general information, the fit points std::vector x; @@ -121,7 +122,8 @@ class ParticleTrack{ //different fit functions void polFitTGraphErrors(int degree); - std::pair positionFromPolFitTGraphErrors(double z); + std::pair positionFromPolFitTGraphErrors(int degree, double z); + std::pair positionErrorFromPolFitTGraphErrors(int degree, double z); TF1* ROOTpol_x; TF1* ROOTpol_y; TGraph* tmp_graph_x; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 00e34c2..890eed2 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -93,7 +93,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); + outTree->Branch("x_predicted_err", &x_predicted_err, "x_predicted_err/D"); outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); + outTree->Branch("y_predicted_err", &y_predicted_err, "y_predicted_err/D"); outTree->Branch("x_true", &x_true, "x_true/D"); outTree->Branch("x_true_err", &x_true_err, "x_true_err/D"); outTree->Branch("y_true", &y_true, "y_true/D"); @@ -293,20 +295,27 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E for (layer=1; layer<=nLayers; layer++) { layerZ_cm = Sensors[layer]->getZ_cm(); layerZ_X0 = Sensors[layer]->getZ_X0(); - x_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm).first; - y_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm).second; - - if (x_predicted==0 && y_predicted==0) { + + std::pair position_predicted = calculatePositionXY(layerZ_cm); + x_predicted = Tracks[layer]->position_predicted.first; + y_predicted = Tracks[layer]->position_predicted.second; + std::pair position_error_predicted = calculatePositionErrorXY(layerZ_cm); + x_predicted_err = position_error_predicted.first; + y_predicted_err = position_error_predicted.second; + + if (!(x_predicted!=0 || y_predicted!=0 || x_predicted_err!=0 || y_predicted_err!=0)) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented failedFitCounter[run]++; continue; //ignore those cases but count them } successfulFitCounter[run]++; - x_true = Sensors[layer]->getCenterPosition().first; - x_true_err = Sensors[layer]->getCenterPositionError().first; - y_true = Sensors[layer]->getCenterPosition().second; - y_true_err = Sensors[layer]->getCenterPositionError().second; + std::pair position_true = Sensors[layer]->getCenterPosition(); + x_true = position_true.first; + y_true = position_true.second; + std::pair position_error_true = Sensors[layer]->getCenterPositionError(); + x_true_err = position_error_true.first; + y_true_err = position_error_true.second; deltaX = x_predicted - x_true; deltaY = y_predicted - y_true; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 9a3046e..310214a 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -350,9 +350,23 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ std::pair ParticleTrack::calculatePositionXY(double z) { switch(lastAppliedMethod) { case LINEFITTGRAPHERRORS: + return positionFromPolFitTGraphErrors(1, z); case POL2TGRAPHERRORS: + return positionFromPolFitTGraphErrors(2, z); case POL3TGRAPHERRORS: - return positionFromPolFitTGraphErrors(z); + return positionFromPolFitTGraphErrors(3, z); + default: + return std::make_pair(0.,0.); + } +} +std::pair ParticleTrack::calculatePositionErrorXY(double z) { + switch(lastAppliedMethod) { + case LINEFITTGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(1, z); + case POL2TGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(2, z); + case POL3TGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(3, z); default: return std::make_pair(0.,0.); } @@ -380,7 +394,12 @@ void ParticleTrack::polFitTGraphErrors(int degree){ }; -std::pair ParticleTrack::positionFromPolFitTGraphErrors(double z) { +std::pair ParticleTrack::positionFromPolFitTGraphErrors(int degree, double z) { return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); } +std::pair ParticleTrack::positionErrorFromPolFitTGraphErrors(int degree, double z) { + //TODO + return std::make_pair(1.0, 1.0); +} + From be22b23df8c9efe4c5d40cb34d702c668cddcfe1 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 30 Nov 2016 10:59:34 +0100 Subject: [PATCH 125/297] [position resolution] errors in track fits additionally weighted depending on the energy deposited in that layer (untested commit) --- Reco/interface/PositionResolutionHelpers.h | 6 +++ Reco/plugins/Position_Resolution_Analyzer.cc | 6 +++ Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 55 ++++++++++++++------ test_cfg_newEB.py | 8 ++- 5 files changed, 58 insertions(+), 18 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index b7e12d9..3a4eebf 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -74,6 +74,8 @@ class SensorHitMap { int CM_cells_count; double CM_sum; + double totalWeight; //equivalent to the denominator in the according weighting method + bool filterByCellType(HitData* hit); void considerNClosest(int N_considered); void considerClusters(int N_considered); @@ -92,6 +94,7 @@ class SensorHitMap { void addClusterHit(HGCalTBDetId hit, int N_considered); void subtractCM(); void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); + double getTotalWeight(); double getZ_cm(); double getZ_X0(); std::pair getCenterPosition(); @@ -107,10 +110,12 @@ class ParticleTrack{ ParticleTrack(); ~ParticleTrack(); void addFitPoint(SensorHitMap* sensor); + void weightFitPoints(); void fitTrack(TrackFittingMethod method); std::pair calculatePositionXY(double z); std::pair calculatePositionErrorXY(double z); private: + int N_points; //cross check, should be identical to x.size() etc. //general information, the fit points std::vector x; std::vector x_err; @@ -118,6 +123,7 @@ class ParticleTrack{ std::vector y_err; std::vector z; std::vector z_err; + std::vector weights; TrackFittingMethod lastAppliedMethod; //different fit functions diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 890eed2..52de2ea 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -71,6 +71,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer EventsFor2DGraphs; double pedestalThreshold; @@ -161,6 +162,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS Layer_Z_X0s = std::vector(X0depth_8L_conf1, X0depth_8L_conf1 + sizeof(X0depth_8L_conf1)/sizeof(double)); } + performFitPointWeighting = iConfig.getParameter("fitPointWeighting"); + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); nLayers = iConfig.getParameter("nLayers"); @@ -288,6 +291,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if (i==j) continue; Tracks[i]->addFitPoint(Sensors[j]); } + if (performFitPointWeighting) { + Tracks[i]->weightFitPoints(); + } Tracks[i]->fitTrack(fittingMethod); } diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 8666b46..68a2849 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -4,6 +4,7 @@ considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), + fitPointWeighting = cms.bool(False), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 310214a..2629772 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -16,6 +16,8 @@ SensorHitMap::SensorHitMap(){ CM_cells_count = 0; CM_sum = 0; + + totalWeight = 1.; } SensorHitMap::~SensorHitMap(){ @@ -226,22 +228,22 @@ void SensorHitMap::considerClusters(int N_considered) { } void SensorHitMap::poweredWeighting(int exponent) { - double numerator_x, numerator_y, denominator; + double numerator_x, numerator_y; double w; - numerator_x = numerator_y = denominator = 0; + numerator_x = numerator_y = totalWeight = 0; for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum - denominator += w; + totalWeight += w; numerator_x += w*(*hit)->x; numerator_y += w*(*hit)->y; } //prevent divisions through zero - if (denominator == 0.0) denominator = 1.0; + if (totalWeight == 0.0) totalWeight = 1.0; - centralHitPoint.first = numerator_x/denominator; - centralHitPoint.second = numerator_y/denominator; + centralHitPoint.first = numerator_x/totalWeight; + centralHitPoint.second = numerator_y/totalWeight; //calculate the RMs numerator_x = numerator_y = 0.0; @@ -250,8 +252,8 @@ void SensorHitMap::poweredWeighting(int exponent) { numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } - centralHitPointError.first = sqrt(numerator_x/denominator); - centralHitPointError.second = sqrt(numerator_y/denominator); + centralHitPointError.first = sqrt(numerator_x/totalWeight); + centralHitPointError.second = sqrt(numerator_y/totalWeight); }; void SensorHitMap::logWeighting(double log_a, double log_b) { @@ -263,24 +265,24 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { } - double numerator_x, numerator_y, denominator; + double numerator_x, numerator_y; double w; - numerator_x = numerator_y = denominator = 0; + numerator_x = numerator_y = totalWeight = 0; for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; if (I_i == 0.) continue; w = std::max(log_a + log_b*log(I_i/I_max), 0.0); - denominator += w; + totalWeight += w; numerator_x += w*(*hit)->x; numerator_y += w*(*hit)->y; } //prevent divisions through zero - if (denominator == 0.0) denominator = 1.0; + if (totalWeight == 0.0) totalWeight = 1.0; - centralHitPoint.first = numerator_x/denominator; - centralHitPoint.second = numerator_y/denominator; + centralHitPoint.first = numerator_x/totalWeight; + centralHitPoint.second = numerator_y/totalWeight; //calculate the RMs numerator_x = numerator_y = 0.0; @@ -291,11 +293,13 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } - centralHitPointError.first = sqrt(numerator_x/denominator); - centralHitPointError.second = sqrt(numerator_y/denominator); + centralHitPointError.first = sqrt(numerator_x/totalWeight); + centralHitPointError.second = sqrt(numerator_y/totalWeight); }; - +double SensorHitMap::getTotalWeight() { + return this->totalWeight; +}; //**** Particle Tracks ****// @@ -306,6 +310,7 @@ ParticleTrack::ParticleTrack(){ ROOTpol_x = ROOTpol_y = 0; tmp_graph_x = tmp_graph_y = 0; + N_points = 0; }; ParticleTrack::~ParticleTrack(){ @@ -315,14 +320,30 @@ ParticleTrack::~ParticleTrack(){ }; void ParticleTrack::addFitPoint(SensorHitMap* sensor){ + N_points++; x.push_back(sensor->getCenterPosition().first); x_err.push_back(sensor->getCenterPositionError().first); y.push_back(sensor->getCenterPosition().second); y_err.push_back(sensor->getCenterPositionError().second); z.push_back(sensor->getZ()); z_err.push_back(0.0); + weights.push_back(sensor->getTotalWeight()); }; +void ParticleTrack::weightFitPoints() { + //we want to assure that the sum of weights is conserved to not majorly influence the goodness of the fit + double nom_x, nom_y, denom_x, denom_y = 0.; + for (int i=0; i Date: Wed, 30 Nov 2016 11:36:09 +0100 Subject: [PATCH 126/297] bugfixes from previous commits --- Reco/interface/PositionResolutionHelpers.h | 2 +- Reco/plugins/Position_Resolution_Analyzer.cc | 18 +++++++++--------- Reco/src/PositionResolutionHelpers.cc | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 3a4eebf..01fb5d6 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -85,7 +85,7 @@ class SensorHitMap { public: SensorHitMap(); ~SensorHitMap(); - void setZ(double z_cm); + void setZ(double z_cm, double z_X0); void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 52de2ea..8bee3bd 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -42,11 +42,11 @@ //configuration1: double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm -double X0depth_8L_conf1[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer +double config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer //configuration2: double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm -double X0depth_8L_conf2[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer +double config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { public: @@ -153,13 +153,13 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS LayersConfig = iConfig.getParameter("layers_config"); if (LayersConfig == 1) { Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); - Layer_Z_X0s = std::vector(X0depth_8L_conf1, X0depth_8L_conf1 + sizeof(X0depth_8L_conf1)/sizeof(double)); + Layer_Z_X0s = std::vector(config1X0Depths, config1X0Depths + sizeof(config1X0Depths)/sizeof(double)); } if (LayersConfig == 2) { Layer_Z_Positions = std::vector(config2Positions, config2Positions + sizeof(config2Positions)/sizeof(double)); - Layer_Z_X0s = std::vector(X0depth_8L_conf2, X0depth_8L_conf2 + sizeof(X0depth_8L_conf2)/sizeof(double)); + Layer_Z_X0s = std::vector(config2X0Depths, config2X0Depths + sizeof(config2X0Depths)/sizeof(double)); } else { Layer_Z_Positions = std::vector(config1Positions, config1Positions + sizeof(config1Positions)/sizeof(double)); - Layer_Z_X0s = std::vector(X0depth_8L_conf1, X0depth_8L_conf1 + sizeof(X0depth_8L_conf1)/sizeof(double)); + Layer_Z_X0s = std::vector(config1X0Depths, config1X0Depths + sizeof(config1X0Depths)/sizeof(double)); } performFitPointWeighting = iConfig.getParameter("fitPointWeighting"); @@ -302,10 +302,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layerZ_cm = Sensors[layer]->getZ_cm(); layerZ_X0 = Sensors[layer]->getZ_X0(); - std::pair position_predicted = calculatePositionXY(layerZ_cm); - x_predicted = Tracks[layer]->position_predicted.first; - y_predicted = Tracks[layer]->position_predicted.second; - std::pair position_error_predicted = calculatePositionErrorXY(layerZ_cm); + std::pair position_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm); + x_predicted = position_predicted.first; + y_predicted = position_predicted.second; + std::pair position_error_predicted = Tracks[layer]->calculatePositionErrorXY(layerZ_cm); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 2629772..d5299cc 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -325,23 +325,23 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ x_err.push_back(sensor->getCenterPositionError().first); y.push_back(sensor->getCenterPosition().second); y_err.push_back(sensor->getCenterPositionError().second); - z.push_back(sensor->getZ()); + z.push_back(sensor->getZ_cm()); z_err.push_back(0.0); weights.push_back(sensor->getTotalWeight()); }; void ParticleTrack::weightFitPoints() { //we want to assure that the sum of weights is conserved to not majorly influence the goodness of the fit - double nom_x, nom_y, denom_x, denom_y = 0.; + double nom_x=0.; double nom_y=0.; double denom_x=0.; double denom_y=0.; for (int i=0; i Date: Wed, 30 Nov 2016 12:34:59 +0100 Subject: [PATCH 127/297] [position resolution] add fitting error calculation generically including correlation of parameters, different weighting options for fit points --- Reco/interface/PositionResolutionHelpers.h | 17 ++++-- Reco/plugins/Position_Resolution_Analyzer.cc | 24 ++++++--- Reco/python/position_resolution_cfi.py | 2 +- Reco/src/PositionResolutionHelpers.cc | 54 +++++++++++++++----- test_cfg_newEB.py | 8 +-- 5 files changed, 78 insertions(+), 27 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 01fb5d6..a5fb456 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -8,6 +8,7 @@ #include "TF1.h" #include "TGraphErrors.h" +#include "TFitResult.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" @@ -44,6 +45,14 @@ enum TrackFittingMethod { POL3TGRAPHERRORS }; +enum FitPointWeightingMethod { + NONE, + LINEAR, + SQUARED, + LOGARITHMIC, + EXPONENTIAL +}; + struct HitData { double x; double y; double I; //intensity that is input to the weight calculation @@ -110,7 +119,7 @@ class ParticleTrack{ ParticleTrack(); ~ParticleTrack(); void addFitPoint(SensorHitMap* sensor); - void weightFitPoints(); + void weightFitPoints(FitPointWeightingMethod method); void fitTrack(TrackFittingMethod method); std::pair calculatePositionXY(double z); std::pair calculatePositionErrorXY(double z); @@ -132,9 +141,9 @@ class ParticleTrack{ std::pair positionErrorFromPolFitTGraphErrors(int degree, double z); TF1* ROOTpol_x; TF1* ROOTpol_y; - TGraph* tmp_graph_x; - TGraph* tmp_graph_y; + TFitResultPtr fit_result_x; + TFitResultPtr fit_result_y; }; - +double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m); #endif diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 8bee3bd..7f073b8 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -71,7 +71,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer EventsFor2DGraphs; double pedestalThreshold; @@ -149,6 +149,21 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS else fittingMethod = DEFAULTFITTING; + //read the fit point weighting technique: + methodString = iConfig.getParameter("fitPointWeightingMethod"); + if (methodString == "none") + fitPointWeightingMethod = NONE; + else if (methodString == "linear") + fitPointWeightingMethod = LINEAR; + else if (methodString == "squared") + fitPointWeightingMethod = SQUARED; + else if (methodString == "logarithmic") + fitPointWeightingMethod = LOGARITHMIC; + else if (methodString == "exponential") + fitPointWeightingMethod = EXPONENTIAL; + else + fitPointWeightingMethod = NONE; + //read the layer configuration LayersConfig = iConfig.getParameter("layers_config"); if (LayersConfig == 1) { @@ -162,8 +177,6 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS Layer_Z_X0s = std::vector(config1X0Depths, config1X0Depths + sizeof(config1X0Depths)/sizeof(double)); } - performFitPointWeighting = iConfig.getParameter("fitPointWeighting"); - pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); nLayers = iConfig.getParameter("nLayers"); @@ -291,9 +304,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if (i==j) continue; Tracks[i]->addFitPoint(Sensors[j]); } - if (performFitPointWeighting) { - Tracks[i]->weightFitPoints(); - } + + Tracks[i]->weightFitPoints(fitPointWeightingMethod); Tracks[i]->fitTrack(fittingMethod); } diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 68a2849..fe811f3 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -4,7 +4,7 @@ considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), - fitPointWeighting = cms.bool(False), + fitPointWeightingMethod = cms.string('none'), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index d5299cc..9e9cccd 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -308,7 +308,6 @@ double SensorHitMap::getTotalWeight() { ParticleTrack::ParticleTrack(){ lastAppliedMethod = DEFAULTFITTING; ROOTpol_x = ROOTpol_y = 0; - tmp_graph_x = tmp_graph_y = 0; N_points = 0; }; @@ -330,18 +329,24 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ weights.push_back(sensor->getTotalWeight()); }; -void ParticleTrack::weightFitPoints() { +void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { + //calculate the sum of all weights first + double sum_Weights = 0.0; + for (int i=0; iFit(ROOTpol_x, "QF"); - tmp_graph_y->Fit(ROOTpol_y, "QF"); + fit_result_x = tmp_graph_x->Fit(ROOTpol_x, "QFS"); //for some ROOT versions, the option 'S' is essential to retrieve the fit results object + fit_result_y = tmp_graph_y->Fit(ROOTpol_y, "QFS"); delete tmp_graph_x; delete tmp_graph_y; @@ -420,7 +425,32 @@ std::pair ParticleTrack::positionFromPolFitTGraphErrors(int degr } std::pair ParticleTrack::positionErrorFromPolFitTGraphErrors(int degree, double z) { - //TODO - return std::make_pair(1.0, 1.0); + double err_x = 0.; double err_y = 0.; + for (int i=0; i<=degree; i++){ + err_x += pow( ROOTpol_x->GetParError(i) * pow(z, i) ,2); + err_y += pow( ROOTpol_y->GetParError(i) * pow(z, i) ,2); + + for (int j=i+1; j<=degree; j++) { + err_x += 2*fit_result_x->Correlation(i, j) * ROOTpol_x->GetParError(i) * ROOTpol_x->GetParError(j) * fabs(pow(z, i+j)); + err_y += 2*fit_result_y->Correlation(i, j) * ROOTpol_y->GetParError(i) * ROOTpol_y->GetParError(j) * fabs(pow(z, i+j)); + } + } + return std::make_pair(err_x, err_y); } +double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m) { + switch(m) { + case NONE: + return 1.0; + case LINEAR: + return 1.0/(1.0+w/sum_w); + case SQUARED: + return pow(1.0/(1.0+w/sum_w) ,2); + case LOGARITHMIC: + return 1.0/(1.0+log(1.0+w/sum_w)); + case EXPONENTIAL: + return exp(-w/sum_w); + default: + return 1.0; + } +} \ No newline at end of file diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index be0841e..3070176 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -100,10 +100,10 @@ VarParsing.VarParsing.varType.float, 'Threshold for the pedestal subtraction calculation in the position resolution plugin. Unit is MIP.' ) -options.register('fitPointWeighting', - False, +options.register('fitPointWeightingMethod', + "none", VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.float, + VarParsing.VarParsing.varType.string, 'Fit points (one per layer) in the track fit are linearly weighted according to the deposited energy (in MIPs)' ) @@ -173,7 +173,7 @@ process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) -process.position_resolution_analyzer.fitPointWeighting = cms.bool(options.fitPointWeighting) +process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs From d1c3485fe14315a924361a2aa25b8700d5cc5943 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 30 Nov 2016 12:56:56 +0100 Subject: [PATCH 128/297] [position resolution] write out summed weights per layer and all layers in fit --- Reco/interface/PositionResolutionHelpers.h | 1 + Reco/plugins/Position_Resolution_Analyzer.cc | 9 +++++++-- Reco/src/PositionResolutionHelpers.cc | 10 +++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index a5fb456..05ac79b 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -123,6 +123,7 @@ class ParticleTrack{ void fitTrack(TrackFittingMethod method); std::pair calculatePositionXY(double z); std::pair calculatePositionErrorXY(double z); + double getSumOfWeights(); private: int N_points; //cross check, should be identical to x.size() etc. //general information, the fit points diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 7f073b8..943a328 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -94,6 +94,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); + outTree->Branch("layerWeight", &layerWeight, "layerWeight/D"); + outTree->Branch("sumFitWeights", &sumFitWeights, "sumFitWeights/D"); outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); outTree->Branch("x_predicted_err", &x_predicted_err, "x_predicted_err/D"); outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); @@ -304,7 +307,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if (i==j) continue; Tracks[i]->addFitPoint(Sensors[j]); } - Tracks[i]->weightFitPoints(fitPointWeightingMethod); Tracks[i]->fitTrack(fittingMethod); } @@ -338,7 +340,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deltaX = x_predicted - x_true; deltaY = y_predicted - y_true; deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); - + + sumFitWeights = Tracks[layer]->getSumOfWeights(); + layerWeight = Sensors[layer]->getTotalWeight(); + //DEBUG if (deviation > 1000.) std::cout<<" layer: "< ParticleTrack::positionErrorFromPolFitTGraphErrors(int return std::make_pair(err_x, err_y); } +double ParticleTrack::getSumOfWeights() { //returns the original weights (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) + double sum_Weights = 0.0; + for (int i=0; i Date: Wed, 30 Nov 2016 17:09:50 +0100 Subject: [PATCH 129/297] [position resolution] comment cell type requirement, reduce number of new weight calculation --- Reco/interface/PositionResolutionHelpers.h | 2 +- Reco/src/PositionResolutionHelpers.cc | 49 ++++++++++------------ 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 05ac79b..96b2e7b 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -85,7 +85,7 @@ class SensorHitMap { double totalWeight; //equivalent to the denominator in the according weighting method - bool filterByCellType(HitData* hit); + bool filterByCellType(int ID); void considerNClosest(int N_considered); void considerClusters(int N_considered); void poweredWeighting(int exponent); diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 62e5c87..4b610df 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -61,6 +61,8 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { double ivy = CellCenterXY.second; int ID = (Rechit.id()).cellType(); + if (filterByCellType(ID)) return; //returns true so far TODO + double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also calcu Hits[uniqueID] = new HitData; @@ -90,20 +92,13 @@ void SensorHitMap::subtractCM() { double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - //analogous treatment of pedestals as in the RecHitPlotter_HighGain_New plugin - switch((*hit).second->ID) { - case 0: - case 4: - // we want: - all cells that were input to the cm (common mode) calculation get weight 0 - // - all the others are corrected by the cm - if ((*hit).second->E > CM_threshold) { - (*hit).second->I = (*hit).second->I - cm_subtraction; - } else { - (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); - } - break; - default: - continue; + if (filterByCellType((*hit).second->ID)) continue; + // we want: - all cells that were input to the cm (common mode) calculation get weight 0 + // - all the others are corrected by the cm + if ((*hit).second->E > CM_threshold) { + (*hit).second->I = (*hit).second->I - cm_subtraction; + } else { + (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); } } } @@ -168,20 +163,20 @@ std::pair SensorHitMap::getCenterPositionError() { //private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) -bool SensorHitMap::filterByCellType(HitData* hit) { - if (hit->ID!=0 && hit->ID!=1 && hit->ID!=4) //filter cells that do not have either 0, 1, 4 as ID - return true; - +bool SensorHitMap::filterByCellType(int ID) { + /* + if (ID!=0 && ID!=1 && ID!=4) //filter cells that do not have either 0, 1, 4 as ID + return true; //TODO!!! + */ return false; } - void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! //better: ranking by radial distance and then take the closest ones HitsForPositioning.clear(); if (N_considered < 0) { for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second)) continue; + if (filterByCellType((*hit).second->ID)) continue; HitsForPositioning.push_back((*hit).second); } return; @@ -190,7 +185,7 @@ void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! //calculate radial distance for all pairs to the most significant hit std::vector> to_sort; for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second)) continue; + if (filterByCellType((*hit).second->ID)) continue; double current_radius = sqrt(pow((*hit).second->x - mostSignificantHit->x,2) + pow((*hit).second->y - mostSignificantHit->y,2)); to_sort.push_back(std::make_pair(current_radius, (*hit).second)); } @@ -337,16 +332,18 @@ void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { } //we want to assure that the sum of weights is conserved to not majorly influence the goodness of the fit - double nom_x=0.; double nom_y=0.; double denom_x=0.; double denom_y=0.; + double nom_x=0.; double nom_y=0.; double denom_x=0.; double denom_y=0.; double new_weight = 1.0; for (int i=0; i Date: Wed, 30 Nov 2016 17:12:33 +0100 Subject: [PATCH 130/297] [position resolution] cosmetics in function definition placements --- Reco/src/PositionResolutionHelpers.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 4b610df..6d1dfba 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -161,6 +161,9 @@ std::pair SensorHitMap::getCenterPositionError() { return centralHitPointError; } +double SensorHitMap::getTotalWeight() { + return this->totalWeight; +}; //private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) bool SensorHitMap::filterByCellType(int ID) { @@ -292,10 +295,6 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { centralHitPointError.second = sqrt(numerator_y/totalWeight); }; -double SensorHitMap::getTotalWeight() { - return this->totalWeight; -}; - //**** Particle Tracks ****// @@ -395,6 +394,14 @@ std::pair ParticleTrack::calculatePositionErrorXY(double z) { } } +double ParticleTrack::getSumOfWeights() { //returns the original weights (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) + double sum_Weights = 0.0; + for (int i=0; i ParticleTrack::positionErrorFromPolFitTGraphErrors(int return std::make_pair(err_x, err_y); } -double ParticleTrack::getSumOfWeights() { //returns the original weights (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) - double sum_Weights = 0.0; - for (int i=0; i Date: Wed, 30 Nov 2016 18:15:37 +0100 Subject: [PATCH 131/297] [positon resolution] write out coordinates of closest cells w.r.t. true and predicted impact --- Reco/interface/PositionResolutionHelpers.h | 1 + Reco/plugins/Position_Resolution_Analyzer.cc | 17 +++++++++++++++- Reco/src/PositionResolutionHelpers.cc | 21 ++++++++++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 96b2e7b..23e4628 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -108,6 +108,7 @@ class SensorHitMap { double getZ_X0(); std::pair getCenterPosition(); std::pair getCenterPositionError(); //calculated via RMS + std::pair getCenterOfClosestCell(std::pair X_ref); //debug void printHits(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 943a328..c2e6b2f 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -95,7 +95,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("layerWeight", &layerWeight, "layerWeight/D"); outTree->Branch("sumFitWeights", &sumFitWeights, "sumFitWeights/D"); outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); + outTree->Branch("x_predicted_to_closest_cell", &x_predicted_to_closest_cell, "x_predicted_to_closest_cell/D"); outTree->Branch("x_predicted_err", &x_predicted_err, "x_predicted_err/D"); outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); + outTree->Branch("y_predicted_to_closest_cell", &y_predicted_to_closest_cell, "y_predicted_to_closest_cell/D"); outTree->Branch("y_predicted_err", &y_predicted_err, "y_predicted_err/D"); outTree->Branch("x_true", &x_true, "x_true/D"); + outTree->Branch("x_true_to_closest_cell", &x_true_to_closest_cell, "x_true_to_closest_cell/D"); outTree->Branch("x_true_err", &x_true_err, "x_true_err/D"); outTree->Branch("y_true", &y_true, "y_true/D"); + outTree->Branch("y_true_to_closest_cell", &y_true_to_closest_cell, "y_true_to_closest_cell/D"); outTree->Branch("y_true_err", &y_true_err, "y_true_err/D"); outTree->Branch("deltaX", &deltaX, "deltaX/D"); outTree->Branch("deltaY", &deltaY, "deltaY/D"); @@ -319,6 +324,11 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::pair position_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm); x_predicted = position_predicted.first; y_predicted = position_predicted.second; + + std::pair position_predicted_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_predicted); + x_predicted_to_closest_cell = position_predicted_to_closest_cell.first; + y_predicted_to_closest_cell = position_predicted_to_closest_cell.second; + std::pair position_error_predicted = Tracks[layer]->calculatePositionErrorXY(layerZ_cm); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; @@ -333,6 +343,11 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::pair position_true = Sensors[layer]->getCenterPosition(); x_true = position_true.first; y_true = position_true.second; + + std::pair position_true_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_true); + x_true_to_closest_cell = position_true_to_closest_cell.first; + y_true_to_closest_cell = position_true_to_closest_cell.second; + std::pair position_error_true = Sensors[layer]->getCenterPositionError(); x_true_err = position_error_true.first; y_true_err = position_error_true.second; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 6d1dfba..4305b03 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -8,7 +8,7 @@ SensorHitMap::SensorHitMap(){ mostSignificantHit = NULL; //will point to the most significant hit centralHitPoint = std::make_pair(0., 0.); - CM_threshold = 30.; + CM_threshold = 2.; layerZ_cm = 0; layerZ_X0 = 0; ADC_per_MIP = 1.; @@ -76,7 +76,7 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { mostSignificantHit = Hits[uniqueID]; } - //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 30. if not set in the setPedestalThreshold) + //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 2. if not set in the setPedestalThreshold) if (energy <= CM_threshold) { //also analogous to the implementation in the LayerSumAnalyzer CM_cells_count++; CM_sum += energy; @@ -161,10 +161,27 @@ std::pair SensorHitMap::getCenterPositionError() { return centralHitPointError; } +std::pair SensorHitMap::getCenterOfClosestCell(std::pair X_ref) { + std::vector> to_sort; + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second->ID)) continue; + double current_radius = sqrt(pow((*hit).second->x - X_ref.first,2) + pow((*hit).second->y - X_ref.second,2)); + to_sort.push_back(std::make_pair(current_radius, (*hit).second)); + } + //sort the hits by their radial distance + std::sort(to_sort.begin(), to_sort.end(), + [](const std::pair& a, const std::pair b){ + return a.first < b.first; + } + ); + return std::make_pair(to_sort[0].second->x, to_sort[0].second->y); +} + double SensorHitMap::getTotalWeight() { return this->totalWeight; }; + //private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) bool SensorHitMap::filterByCellType(int ID) { /* From c5722859dfeaf2e2bd4cdf62a53cc8de42f076c9 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 2 Dec 2016 17:58:21 +0100 Subject: [PATCH 132/297] [position resolution] do not set total weight to 1 if no entries contribute --- Reco/src/PositionResolutionHelpers.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 4305b03..d9fb9e7 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -8,6 +8,7 @@ SensorHitMap::SensorHitMap(){ mostSignificantHit = NULL; //will point to the most significant hit centralHitPoint = std::make_pair(0., 0.); + centralHitPointError = std::make_pair(sqrt(12.), sqrt(12.)); CM_threshold = 2.; layerZ_cm = 0; layerZ_X0 = 0; @@ -255,7 +256,9 @@ void SensorHitMap::poweredWeighting(int exponent) { } //prevent divisions through zero - if (totalWeight == 0.0) totalWeight = 1.0; + if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired + return; //defaults are preserved + } centralHitPoint.first = numerator_x/totalWeight; centralHitPoint.second = numerator_y/totalWeight; @@ -294,7 +297,9 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { } //prevent divisions through zero - if (totalWeight == 0.0) totalWeight = 1.0; + if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired + return; //defaults are preserved + } centralHitPoint.first = numerator_x/totalWeight; centralHitPoint.second = numerator_y/totalWeight; From 67f3f34013b50055543127c46fb02044559626a1 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 5 Dec 2016 16:03:12 +0100 Subject: [PATCH 133/297] [position resolution] use total intensity for point reweighting --- Reco/interface/PositionResolutionHelpers.h | 2 ++ Reco/src/PositionResolutionHelpers.cc | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 23e4628..c13ee27 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -84,6 +84,7 @@ class SensorHitMap { double CM_sum; double totalWeight; //equivalent to the denominator in the according weighting method + double totalIntensity; bool filterByCellType(int ID); void considerNClosest(int N_considered); @@ -103,6 +104,7 @@ class SensorHitMap { void addClusterHit(HGCalTBDetId hit, int N_considered); void subtractCM(); void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); + double getTotalIntensity(); double getTotalWeight(); double getZ_cm(); double getZ_X0(); diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index d9fb9e7..b3aa3cb 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -19,6 +19,7 @@ SensorHitMap::SensorHitMap(){ CM_sum = 0; totalWeight = 1.; + totalIntensity = 0.; } SensorHitMap::~SensorHitMap(){ @@ -72,6 +73,7 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { Hits[uniqueID]->y = ivy; Hits[uniqueID]->I = energy; Hits[uniqueID]->E = energy; + totalIntensity += energy; if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { mostSignificantHit = Hits[uniqueID]; @@ -90,6 +92,7 @@ void SensorHitMap::addClusterHit(HGCalTBDetId hit, int N_considered) { } void SensorHitMap::subtractCM() { + totalIntensity = 0.; double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ @@ -101,6 +104,7 @@ void SensorHitMap::subtractCM() { } else { (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); } + totalIntensity += (*hit).second->I; } } @@ -178,6 +182,10 @@ std::pair SensorHitMap::getCenterOfClosestCell(std::pairx, to_sort[0].second->y); } +double SensorHitMap::getTotalIntensity() { + return this->totalIntensity; +} + double SensorHitMap::getTotalWeight() { return this->totalWeight; }; @@ -186,7 +194,7 @@ double SensorHitMap::getTotalWeight() { //private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) bool SensorHitMap::filterByCellType(int ID) { /* - if (ID!=0 && ID!=1 && ID!=4) //filter cells that do not have either 0, 1, 4 as ID + if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation return true; //TODO!!! */ return false; @@ -342,7 +350,7 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ y_err.push_back(sensor->getCenterPositionError().second); z.push_back(sensor->getZ_cm()); z_err.push_back(0.0); - weights.push_back(sensor->getTotalWeight()); + weights.push_back(sensor->getTotalIntensity()); }; void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { From 7a3d3b10dd4f9a71284a3943984c750848e491ad Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 6 Dec 2016 11:52:24 +0100 Subject: [PATCH 134/297] [position resolution] scan more configurations for a,b in log weighting --- Reco/interface/PositionResolutionHelpers.h | 12 +++++++-- Reco/plugins/Position_Resolution_Analyzer.cc | 18 +++++++++++-- Reco/src/PositionResolutionHelpers.cc | 27 ++++++++++++++++++-- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index c13ee27..c9a9b6d 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -29,13 +29,21 @@ enum ConsiderationMethod { CONSIDERCLUSTERSNINETEEN }; + enum WeightingMethod { DEFAULTWEIGHTING, SQUAREDWEIGHTING, LINEARWEIGHTING, + LOGWEIGHTING_30_10, + LOGWEIGHTING_30_15, + LOGWEIGHTING_40_10, + LOGWEIGHTING_40_15, LOGWEIGHTING_50_10, - LOGWEIGHTING_50_05, - LOGWEIGHTING_70_10 + LOGWEIGHTING_50_15, + LOGWEIGHTING_60_10, + LOGWEIGHTING_60_15, + LOGWEIGHTING_70_10, + LOGWEIGHTING_70_15 }; enum TrackFittingMethod { diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index c2e6b2f..b61caad 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -131,12 +131,26 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; + else if (methodString == "logWeighting_3.0_1.0") + weightingMethod = LOGWEIGHTING_30_10; + else if (methodString == "logWeighting_3.0_1.5") + weightingMethod = LOGWEIGHTING_30_15; + else if (methodString == "logWeighting_4.0_1.0") + weightingMethod = LOGWEIGHTING_40_10; + else if (methodString == "logWeighting_4.0_1.5") + weightingMethod = LOGWEIGHTING_40_15; else if (methodString == "logWeighting_5.0_1.0") weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.0_0.5") - weightingMethod = LOGWEIGHTING_50_05; + else if (methodString == "logWeighting_5.0_1.5") + weightingMethod = LOGWEIGHTING_50_15; + else if (methodString == "logWeighting_6.0_1.0") + weightingMethod = LOGWEIGHTING_60_10; + else if (methodString == "logWeighting_6.0_1.5") + weightingMethod = LOGWEIGHTING_60_15; else if (methodString == "logWeighting_7.0_1.0") weightingMethod = LOGWEIGHTING_70_10; + else if (methodString == "logWeighting_7.0_1.5") + weightingMethod = LOGWEIGHTING_70_15; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index b3aa3cb..7ed4de5 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -142,15 +142,36 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth case LINEARWEIGHTING: SensorHitMap::poweredWeighting(1); break; + case LOGWEIGHTING_30_10: + SensorHitMap::logWeighting(3.0, 1.0); + break; + case LOGWEIGHTING_30_15: + SensorHitMap::logWeighting(3.0, 1.5); + break; + case LOGWEIGHTING_40_10: + SensorHitMap::logWeighting(4.0, 1.0); + break; + case LOGWEIGHTING_40_15: + SensorHitMap::logWeighting(4.0, 1.5); + break; case LOGWEIGHTING_50_10: SensorHitMap::logWeighting(5.0, 1.0); break; - case LOGWEIGHTING_50_05: - SensorHitMap::logWeighting(5.0, 0.5); + case LOGWEIGHTING_50_15: + SensorHitMap::logWeighting(5.0, 1.5); + break; + case LOGWEIGHTING_60_10: + SensorHitMap::logWeighting(6.0, 1.0); + break; + case LOGWEIGHTING_60_15: + SensorHitMap::logWeighting(6.0, 1.5); break; case LOGWEIGHTING_70_10: SensorHitMap::logWeighting(7.0, 1.0); break; + case LOGWEIGHTING_70_15: + SensorHitMap::logWeighting(7.0, 1.5); + break; //case NEWMETHOD: //SensorHitMap::newWeightingFunction() //break; @@ -295,7 +316,9 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { double w; numerator_x = numerator_y = totalWeight = 0; + int counter = 0; for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + counter++; I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; if (I_i == 0.) continue; w = std::max(log_a + log_b*log(I_i/I_max), 0.0); From be270050ff4145015f5d4d0ecc483f0252801bb7 Mon Sep 17 00:00:00 2001 From: arabella Date: Thu, 8 Dec 2016 13:26:17 +0100 Subject: [PATCH 135/297] cfg for bad spill filter Conflicts: RawToDigi/plugins/Bad_Spill_Filter.cc RawToDigi/python/hgcaltbdigis_cfi.py --- RawToDigi/plugins/Bad_Spill_Filter.cc | 16 ++++++++-------- RawToDigi/python/hgcaltbdigis_cfi.py | 4 +++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/RawToDigi/plugins/Bad_Spill_Filter.cc b/RawToDigi/plugins/Bad_Spill_Filter.cc index 51fd61e..861a6ac 100644 --- a/RawToDigi/plugins/Bad_Spill_Filter.cc +++ b/RawToDigi/plugins/Bad_Spill_Filter.cc @@ -52,6 +52,7 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { virtual bool filter(edm::Event&, const edm::EventSetup&) override; virtual void endStream() override; int layers_config_; + std::string name_CFG_; char buffer[1024]; int m_run, tmp_run, m_spill, tmp_spill; int spill_counter = 0; @@ -64,8 +65,6 @@ class Bad_Spill_Filter : public edm::stream::EDFilter<> { std::array< std::vector , Num_BAD_RUNS_CFG> Bad_Run_Spill_Array; FILE* m_file; - string name_CFG1 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt"; - string name_CFG2 = "/afs/cern.ch/work/r/rchatter/newTextInputFormat_Working/CMSSW_8_0_1/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt"; //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; @@ -91,14 +90,15 @@ Bad_Spill_Filter::Bad_Spill_Filter(const edm::ParameterSet& iConfig) bool Not_Filled_Once = true; int run_counter = 0; layers_config_ = iConfig.getParameter("layers_config"); - if(layers_config_ == 1) m_file = fopen(name_CFG1.c_str(),"r"); - else if(layers_config_ == 2) m_file = fopen(name_CFG2.c_str(),"r"); + if(layers_config_ == 1) name_CFG_ = iConfig.getParameter("nameCFG1"); + else if(layers_config_ == 2) name_CFG_ = iConfig.getParameter("nameCFG2"); + m_file = fopen(name_CFG_.c_str(),"r"); if (m_file == 0) { - if(layers_config_ == 1) cout< Date: Thu, 8 Dec 2016 15:13:52 +0100 Subject: [PATCH 136/297] update to latest config --- 8layers_cfg1/addAll.sh | 14 + 8layers_cfg1/lancia100GeVAll.sh | 23 + 8layers_cfg1/lancia150GeVAll.sh | 20 + 8layers_cfg1/lancia200GeVAll.sh | 22 + 8layers_cfg1/lancia20GeVAll.sh | 19 + 8layers_cfg1/lancia250GeVAll.sh | 24 + 8layers_cfg1/lancia32GeVAll.sh | 20 + 8layers_cfg1/lancia70GeVAll.sh | 22 + 8layers_cfg1/lanciaAll.sh | 13 +- 8layers_cfg2/lancia100GeVAll.sh | 36 +- 8layers_cfg2/lancia150GeVAll.sh | 52 +- 8layers_cfg2/lancia200GeVAll.sh | 42 +- 8layers_cfg2/lancia20GeVAll.sh | 38 +- 8layers_cfg2/lancia250GeVAll.sh | 40 +- 8layers_cfg2/lancia32GeVAll.sh | 40 +- 8layers_cfg2/lancia70GeVAll.sh | 42 +- 8layers_cfg2/lanciaAll.sh | 14 +- .../data/PED_HighGain_L8_RN1024_cfg1.txt | 1018 +++++++++++++++++ .../data/PED_HighGain_L8_RN1174_cfg2.txt | 1018 +++++++++++++++++ .../data/PED_LowGain_L8_RN1024_cfg1.txt | 1018 +++++++++++++++++ .../data/PED_LowGain_L8_RN1174_cfg2.txt | 1018 +++++++++++++++++ Reco/plugins/Layer_Sum_Analyzer.cc | 93 +- Reco/src/ShowerShape.cc | 36 +- test_cfg_newEB.py | 15 +- 24 files changed, 4483 insertions(+), 214 deletions(-) create mode 100644 8layers_cfg1/addAll.sh create mode 100644 8layers_cfg1/lancia100GeVAll.sh create mode 100644 8layers_cfg1/lancia150GeVAll.sh create mode 100644 8layers_cfg1/lancia200GeVAll.sh create mode 100644 8layers_cfg1/lancia20GeVAll.sh create mode 100644 8layers_cfg1/lancia250GeVAll.sh create mode 100644 8layers_cfg1/lancia32GeVAll.sh create mode 100644 8layers_cfg1/lancia70GeVAll.sh create mode 100644 CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt create mode 100644 CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt create mode 100644 CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt create mode 100644 CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt diff --git a/8layers_cfg1/addAll.sh b/8layers_cfg1/addAll.sh new file mode 100644 index 0000000..5e91643 --- /dev/null +++ b/8layers_cfg1/addAll.sh @@ -0,0 +1,14 @@ +hadd /tmp/amartell/20GeV.root /tmp/amartell/output/HGCRun_Output_000916_Reco.root /tmp/amartell/output/HGCRun_Output_000917_Reco.root /tmp/amartell/output/HGCRun_Output_000918_Reco.root /tmp/amartell/output/HGCRun_Output_000919_Reco.root /tmp/amartell/output/HGCRun_Output_000920_Reco.root /tmp/amartell/output/HGCRun_Output_000921_Reco.root /tmp/amartell/output/HGCRun_Output_000922_Reco.root /tmp/amartell/output/HGCRun_Output_000923_Reco.root /tmp/amartell/output/HGCRun_Output_000924_Reco.root /tmp/amartell/output/HGCRun_Output_000925_Reco.root /tmp/amartell/output/HGCRun_Output_000926_Reco.root /tmp/amartell/output/HGCRun_Output_000927_Reco.root /tmp/amartell/output/HGCRun_Output_000928_Reco.root /tmp/amartell/output/HGCRun_Output_000929_Reco.root /tmp/amartell/output/HGCRun_Output_000930_Reco.root /tmp/amartell/output/HGCRun_Output_000931_Reco.root /tmp/amartell/output/HGCRun_Output_000932_Reco.root /tmp/amartell/output/HGCRun_Output_000933_Reco.root /tmp/amartell/output/HGCRun_Output_000934_Reco.root + +hadd /tmp/amartell/32GeV.root /tmp/amartell/output/HGCRun_Output_001087_Reco.root /tmp/amartell/output/HGCRun_Output_001088_Reco.root /tmp/amartell/output/HGCRun_Output_001089_Reco.root /tmp/amartell/output/HGCRun_Output_001091_Reco.root /tmp/amartell/output/HGCRun_Output_001092_Reco.root /tmp/amartell/output/HGCRun_Output_001093_Reco.root /tmp/amartell/output/HGCRun_Output_001094_Reco.root /tmp/amartell/output/HGCRun_Output_001095_Reco.root /tmp/amartell/output/HGCRun_Output_001096_Reco.root /tmp/amartell/output/HGCRun_Output_001097_Reco.root /tmp/amartell/output/HGCRun_Output_001098_Reco.root /tmp/amartell/output/HGCRun_Output_001099_Reco.root /tmp/amartell/output/HGCRun_Output_001100_Reco.root /tmp/amartell/output/HGCRun_Output_001101_Reco.root /tmp/amartell/output/HGCRun_Output_001102_Reco.root /tmp/amartell/output/HGCRun_Output_001103_Reco.root /tmp/amartell/output/HGCRun_Output_001104_Reco.root /tmp/amartell/output/HGCRun_Output_001105_Reco.root /tmp/amartell/output/HGCRun_Output_001106_Reco.root /tmp/amartell/output/HGCRun_Output_001107_Reco.root + +hadd /tmp/amartell/70GeV.root /tmp/amartell/output/HGCRun_Output_000865_Reco.root /tmp/amartell/output/HGCRun_Output_000866_Reco.root /tmp/amartell/output/HGCRun_Output_000867_Reco.root /tmp/amartell/output/HGCRun_Output_000868_Reco.root /tmp/amartell/output/HGCRun_Output_000869_Reco.root /tmp/amartell/output/HGCRun_Output_000870_Reco.root /tmp/amartell/output/HGCRun_Output_000872_Reco.root /tmp/amartell/output/HGCRun_Output_000873_Reco.root /tmp/amartell/output/HGCRun_Output_000874_Reco.root /tmp/amartell/output/HGCRun_Output_000875_Reco.root /tmp/amartell/output/HGCRun_Output_000876_Reco.root /tmp/amartell/output/HGCRun_Output_000877_Reco.root /tmp/amartell/output/HGCRun_Output_000878_Reco.root /tmp/amartell/output/HGCRun_Output_000879_Reco.root /tmp/amartell/output/HGCRun_Output_000880_Reco.root /tmp/amartell/output/HGCRun_Output_000881_Reco.root /tmp/amartell/output/HGCRun_Output_000882_Reco.root /tmp/amartell/output/HGCRun_Output_000883_Reco.root /tmp/amartell/output/HGCRun_Output_000884_Reco.root /tmp/amartell/output/HGCRun_Output_000887_Reco.root /tmp/amartell/output/HGCRun_Output_000888_Reco.root /tmp/amartell/output/HGCRun_Output_000889_Reco.root + +hadd /tmp/amartell/100GeV.root /tmp/amartell/output/HGCRun_Output_001051_Reco.root /tmp/amartell/output/HGCRun_Output_001052_Reco.root /tmp/amartell/output/HGCRun_Output_001053_Reco.root /tmp/amartell/output/HGCRun_Output_001054_Reco.root /tmp/amartell/output/HGCRun_Output_001055_Reco.root /tmp/amartell/output/HGCRun_Output_001056_Reco.root /tmp/amartell/output/HGCRun_Output_001057_Reco.root /tmp/amartell/output/HGCRun_Output_001058_Reco.root /tmp/amartell/output/HGCRun_Output_001059_Reco.root /tmp/amartell/output/HGCRun_Output_001060_Reco.root /tmp/amartell/output/HGCRun_Output_001061_Reco.root /tmp/amartell/output/HGCRun_Output_001062_Reco.root /tmp/amartell/output/HGCRun_Output_001063_Reco.root /tmp/amartell/output/HGCRun_Output_001064_Reco.root /tmp/amartell/output/HGCRun_Output_001065_Reco.root /tmp/amartell/output/HGCRun_Output_001066_Reco.root /tmp/amartell/output/HGCRun_Output_001067_Reco.root /tmp/amartell/output/HGCRun_Output_001068_Reco.root /tmp/amartell/output/HGCRun_Output_001069_Reco.root /tmp/amartell/output/HGCRun_Output_001070_Reco.root /tmp/amartell/output/HGCRun_Output_001071_Reco.root /tmp/amartell/output/HGCRun_Output_001072_Reco.root /tmp/amartell/output/HGCRun_Output_001073_Reco.root + + +hadd /tmp/amartell/150GeV.root /tmp/amartell/output/HGCRun_Output_000843_Reco.root /tmp/amartell/output/HGCRun_Output_000844_Reco.root /tmp/amartell/output/HGCRun_Output_000845_Reco.root /tmp/amartell/output/HGCRun_Output_000846_Reco.root /tmp/amartell/output/HGCRun_Output_000847_Reco.root /tmp/amartell/output/HGCRun_Output_000848_Reco.root /tmp/amartell/output/HGCRun_Output_000849_Reco.root /tmp/amartell/output/HGCRun_Output_000850_Reco.root /tmp/amartell/output/HGCRun_Output_000851_Reco.root /tmp/amartell/output/HGCRun_Output_000852_Reco.root /tmp/amartell/output/HGCRun_Output_000853_Reco.root /tmp/amartell/output/HGCRun_Output_000854_Reco.root /tmp/amartell/output/HGCRun_Output_000855_Reco.root /tmp/amartell/output/HGCRun_Output_000856_Reco.root /tmp/amartell/output/HGCRun_Output_000857_Reco.root /tmp/amartell/output/HGCRun_Output_000858_Reco.root /tmp/amartell/output/HGCRun_Output_000859_Reco.root /tmp/amartell/output/HGCRun_Output_000860_Reco.root /tmp/amartell/output/HGCRun_Output_000861_Reco.root /tmp/amartell/output/HGCRun_Output_000862_Reco.root + +hadd /tmp/amartell/200GeV.root /tmp/amartell/output/HGCRun_Output_001026_Reco.root /tmp/amartell/output/HGCRun_Output_001027_Reco.root /tmp/amartell/output/HGCRun_Output_001028_Reco.root /tmp/amartell/output/HGCRun_Output_001029_Reco.root /tmp/amartell/output/HGCRun_Output_001030_Reco.root /tmp/amartell/output/HGCRun_Output_001031_Reco.root /tmp/amartell/output/HGCRun_Output_001032_Reco.root /tmp/amartell/output/HGCRun_Output_001033_Reco.root /tmp/amartell/output/HGCRun_Output_001034_Reco.root /tmp/amartell/output/HGCRun_Output_001035_Reco.root /tmp/amartell/output/HGCRun_Output_001036_Reco.root /tmp/amartell/output/HGCRun_Output_001037_Reco.root /tmp/amartell/output/HGCRun_Output_001038_Reco.root /tmp/amartell/output/HGCRun_Output_001039_Reco.root /tmp/amartell/output/HGCRun_Output_001040_Reco.root /tmp/amartell/output/HGCRun_Output_001041_Reco.root /tmp/amartell/output/HGCRun_Output_001042_Reco.root /tmp/amartell/output/HGCRun_Output_001043_Reco.root /tmp/amartell/output/HGCRun_Output_001044_Reco.root /tmp/amartell/output/HGCRun_Output_001045_Reco.root /tmp/amartell/output/HGCRun_Output_001046_Reco.root /tmp/amartell/output/HGCRun_Output_001047_Reco.root + +hadd /tmp/amartell/250GeV.root /tmp/amartell/output/HGCRun_Output_000937_Reco.root /tmp/amartell/output/HGCRun_Output_000938_Reco.root /tmp/amartell/output/HGCRun_Output_000939_Reco.root /tmp/amartell/output/HGCRun_Output_000940_Reco.root /tmp/amartell/output/HGCRun_Output_000941_Reco.root /tmp/amartell/output/HGCRun_Output_000942_Reco.root /tmp/amartell/output/HGCRun_Output_000943_Reco.root /tmp/amartell/output/HGCRun_Output_000944_Reco.root /tmp/amartell/output/HGCRun_Output_000945_Reco.root /tmp/amartell/output/HGCRun_Output_000946_Reco.root /tmp/amartell/output/HGCRun_Output_000947_Reco.root /tmp/amartell/output/HGCRun_Output_000948_Reco.root /tmp/amartell/output/HGCRun_Output_000949_Reco.root /tmp/amartell/output/HGCRun_Output_000950_Reco.root /tmp/amartell/output/HGCRun_Output_000951_Reco.root /tmp/amartell/output/HGCRun_Output_000952_Reco.root /tmp/amartell/output/HGCRun_Output_000953_Reco.root /tmp/amartell/output/HGCRun_Output_000954_Reco.root /tmp/amartell/output/HGCRun_Output_000955_Reco.root /tmp/amartell/output/HGCRun_Output_000956_Reco.root /tmp/amartell/output/HGCRun_Output_000957_Reco.root /tmp/amartell/output/HGCRun_Output_000959_Reco.root /tmp/amartell/output/HGCRun_Output_000960_Reco.root /tmp/amartell/output/HGCRun_Output_000961_Reco.root diff --git a/8layers_cfg1/lancia100GeVAll.sh b/8layers_cfg1/lancia100GeVAll.sh new file mode 100644 index 0000000..96fcda1 --- /dev/null +++ b/8layers_cfg1/lancia100GeVAll.sh @@ -0,0 +1,23 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1051 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1052 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1053 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1054 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1055 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1056 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1057 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1058 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1059 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1060 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1061 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1062 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1063 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1064 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1065 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1066 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1067 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1068 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1069 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1070 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1071 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1072 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1073 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia150GeVAll.sh b/8layers_cfg1/lancia150GeVAll.sh new file mode 100644 index 0000000..85b7765 --- /dev/null +++ b/8layers_cfg1/lancia150GeVAll.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=843 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=844 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=845 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=846 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=847 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=848 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=849 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=850 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=851 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=852 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=853 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=854 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=855 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=856 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=857 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=858 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=859 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=860 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=861 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=862 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia200GeVAll.sh b/8layers_cfg1/lancia200GeVAll.sh new file mode 100644 index 0000000..5739f42 --- /dev/null +++ b/8layers_cfg1/lancia200GeVAll.sh @@ -0,0 +1,22 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1026 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1027 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1028 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1029 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1030 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1031 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1032 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1033 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1034 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1035 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1036 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1037 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1038 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1039 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1040 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1041 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1042 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1043 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1044 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1045 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1046 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1047 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia20GeVAll.sh b/8layers_cfg1/lancia20GeVAll.sh new file mode 100644 index 0000000..bbf1bf4 --- /dev/null +++ b/8layers_cfg1/lancia20GeVAll.sh @@ -0,0 +1,19 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=916 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=917 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=918 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=919 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=920 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=921 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=922 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=923 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=924 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=925 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=926 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=927 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=928 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=929 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=930 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=931 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=932 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=933 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=934 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lancia250GeVAll.sh b/8layers_cfg1/lancia250GeVAll.sh new file mode 100644 index 0000000..aa4ab01 --- /dev/null +++ b/8layers_cfg1/lancia250GeVAll.sh @@ -0,0 +1,24 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=937 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=938 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=939 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=940 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=941 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=942 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=943 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=944 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=945 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=946 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=947 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=948 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=949 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=950 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=951 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=952 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=953 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=954 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=955 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=956 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=957 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=959 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=960 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=961 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia32GeVAll.sh b/8layers_cfg1/lancia32GeVAll.sh new file mode 100644 index 0000000..fc6aefc --- /dev/null +++ b/8layers_cfg1/lancia32GeVAll.sh @@ -0,0 +1,20 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1087 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1088 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1089 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1091 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1092 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1093 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1094 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1095 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1096 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1097 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1098 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1099 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1100 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1101 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1102 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1103 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1104 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1105 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1106 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=1107 configuration=1 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg1/lancia70GeVAll.sh b/8layers_cfg1/lancia70GeVAll.sh new file mode 100644 index 0000000..0369d1e --- /dev/null +++ b/8layers_cfg1/lancia70GeVAll.sh @@ -0,0 +1,22 @@ +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=865 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=866 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=867 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=868 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=869 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=870 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=872 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=873 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=874 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=875 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=876 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=877 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=878 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=879 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=880 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=881 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=882 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=883 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=884 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=887 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=888 configuration=1 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt runNumber=889 configuration=1 runType=HGCRun diff --git a/8layers_cfg1/lanciaAll.sh b/8layers_cfg1/lanciaAll.sh index 1fb1012..7644143 100644 --- a/8layers_cfg1/lanciaAll.sh +++ b/8layers_cfg1/lanciaAll.sh @@ -1,7 +1,8 @@ -source lancia100GeV.sh -source lancia200GeV.sh -source lancia20GeV.sh -source lancia250GeV.sh -source lancia32GeV.sh -source lancia70GeV.sh +source lancia100GeVAll.sh +source lancia150GeVAll.sh +source lancia200GeVAll.sh +source lancia20GeVAll.sh +source lancia250GeVAll.sh +source lancia32GeVAll.sh +source lancia70GeVAll.sh diff --git a/8layers_cfg2/lancia100GeVAll.sh b/8layers_cfg2/lancia100GeVAll.sh index 4e47269..b329cc3 100644 --- a/8layers_cfg2/lancia100GeVAll.sh +++ b/8layers_cfg2/lancia100GeVAll.sh @@ -1,18 +1,18 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1202 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1203 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1204 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1205 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1206 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1207 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1208 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1213 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1214 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1215 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1216 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1217 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1218 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1219 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1220 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1221 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1222 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1202 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1203 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1204 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1205 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1206 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1207 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1208 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1213 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1214 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1215 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1216 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1217 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1218 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1219 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1220 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1221 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1222 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1223 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia150GeVAll.sh b/8layers_cfg2/lancia150GeVAll.sh index 0a4c75c..f1e9dad 100644 --- a/8layers_cfg2/lancia150GeVAll.sh +++ b/8layers_cfg2/lancia150GeVAll.sh @@ -1,26 +1,26 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1122 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1123 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1124 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1125 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1126 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1127 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1128 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1129 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1130 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1131 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1132 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1133 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1134 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1137 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1138 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1141 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1142 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1143 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1144 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1145 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1146 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1147 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1148 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1149 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1150 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1151 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1122 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1123 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1124 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1125 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1126 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1127 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1128 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1129 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1130 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1131 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1132 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1133 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1134 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1137 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1138 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1141 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1142 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1143 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1144 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1145 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1146 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1147 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1148 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1149 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1150 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1151 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia200GeVAll.sh b/8layers_cfg2/lancia200GeVAll.sh index ecb28ca..3ea8c7f 100644 --- a/8layers_cfg2/lancia200GeVAll.sh +++ b/8layers_cfg2/lancia200GeVAll.sh @@ -1,21 +1,21 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1179 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1180 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1181 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1182 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1183 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1184 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1185 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1186 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1187 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1188 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1189 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1190 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1191 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1192 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1193 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1194 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1195 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1196 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1197 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1198 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1179 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1180 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1181 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1182 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1183 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1184 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1185 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1186 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1187 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1188 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1189 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1190 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1191 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1192 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1193 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1194 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1195 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1196 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1197 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1198 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1199 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia20GeVAll.sh b/8layers_cfg2/lancia20GeVAll.sh index 11d688d..9a87e74 100644 --- a/8layers_cfg2/lancia20GeVAll.sh +++ b/8layers_cfg2/lancia20GeVAll.sh @@ -1,20 +1,20 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1248 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1249 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1250 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1251 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1253 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1254 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1255 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1256 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1257 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1259 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1260 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1261 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1262 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1263 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1264 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1265 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1266 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1267 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1270 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1248 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1249 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1250 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1251 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1253 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1254 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1255 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1256 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1257 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1259 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1260 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1261 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1262 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1263 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1264 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1265 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1266 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1267 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1270 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia250GeVAll.sh b/8layers_cfg2/lancia250GeVAll.sh index c3ab813..4de33d5 100644 --- a/8layers_cfg2/lancia250GeVAll.sh +++ b/8layers_cfg2/lancia250GeVAll.sh @@ -1,20 +1,20 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1291 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1292 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1293 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1294 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1295 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1296 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1297 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1298 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1299 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1300 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1301 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1302 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1303 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1304 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1305 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1306 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1307 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1308 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1309 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1310 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1291 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1292 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1293 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1294 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1295 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1296 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1297 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1298 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1299 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1300 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1301 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1302 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1303 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1304 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1305 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1306 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1307 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1308 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1309 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1310 configuration=2 runType=HGCRun diff --git a/8layers_cfg2/lancia32GeVAll.sh b/8layers_cfg2/lancia32GeVAll.sh index 06d0e9b..131f427 100644 --- a/8layers_cfg2/lancia32GeVAll.sh +++ b/8layers_cfg2/lancia32GeVAll.sh @@ -1,20 +1,20 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1226 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1227 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1228 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1229 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1230 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1231 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1233 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1235 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1236 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1237 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1238 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1239 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1240 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1241 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1242 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1243 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1244 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1245 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1246 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1226 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1227 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1228 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1229 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1230 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1231 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1233 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1235 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1236 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1237 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1238 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1239 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1240 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1241 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1242 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1243 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1244 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1245 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1246 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1247 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lancia70GeVAll.sh b/8layers_cfg2/lancia70GeVAll.sh index 0a53926..60e58af 100644 --- a/8layers_cfg2/lancia70GeVAll.sh +++ b/8layers_cfg2/lancia70GeVAll.sh @@ -1,21 +1,21 @@ -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1153 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1154 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1155 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1156 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1157 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1158 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1159 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1160 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1161 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1162 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1163 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1164 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1165 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1166 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1167 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1168 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1169 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1170 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1171 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1172 configuration=2 runType=HGCRun -cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=../CondObjects/data/Ped_LowGain_L8.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1153 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1154 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1155 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1156 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1157 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1158 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1159 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1160 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1161 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1162 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1163 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1164 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1165 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1166 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1167 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1168 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1169 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1170 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1171 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1172 configuration=2 runType=HGCRun +cmsRun ../test_cfg_newEB.py chainSequence=6 pedestalsHighGain=../CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt pedestalsLowGain=../CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt runNumber=1173 configuration=2 runType=HGCRun \ No newline at end of file diff --git a/8layers_cfg2/lanciaAll.sh b/8layers_cfg2/lanciaAll.sh index ce63f15..34aa9ec 100644 --- a/8layers_cfg2/lanciaAll.sh +++ b/8layers_cfg2/lanciaAll.sh @@ -1,8 +1,8 @@ -source lancia100GeV.sh -source lancia150GeV.sh -source lancia200GeV.sh -source lancia20GeV.sh -source lancia250GeV.sh -source lancia32GeV.sh -source lancia70GeV.sh +source lancia100GeVAll.sh +source lancia150GeVAll.sh +source lancia200GeVAll.sh +source lancia20GeVAll.sh +source lancia250GeVAll.sh +source lancia32GeVAll.sh +source lancia70GeVAll.sh diff --git a/CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt b/CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt new file mode 100644 index 0000000..652649a --- /dev/null +++ b/CondObjects/data/PED_HighGain_L8_RN1024_cfg1.txt @@ -0,0 +1,1018 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 4 -7 5 257.096 + 0 1 0 0 4 -5 0 255.858 + 0 1 0 0 4 -4 0 247.7 + 0 1 0 0 5 -5 0 247.247 + 0 1 0 0 4 -3 0 234.806 + 0 1 0 0 5 -6 2 239.157 + 0 1 0 0 3 -3 0 242.416 + 0 1 0 0 4 -2 0 230.623 + 0 1 0 0 3 -2 0 233.747 + 0 1 0 0 5 -2 0 239.767 + 0 1 0 0 3 -1 0 230.59 + 0 1 0 0 5 -3 0 226.852 + 0 1 0 0 2 -1 0 226.248 + 0 1 0 0 5 -4 0 224.835 + 0 1 0 0 3 -5 0 229.173 + 0 1 0 0 6 -4 0 230.133 + 0 1 0 0 3 -4 0 223.913 + 0 1 0 0 6 -5 2 231.601 + 0 1 0 0 2 -3 0 221.294 + 0 1 0 0 7 -3 3 235.909 + 0 1 0 0 2 -2 0 228.109 + 0 1 0 0 6 -3 0 233.175 + 0 1 0 0 1 -1 0 230.248 + 0 1 0 0 4 -1 0 230.535 + 0 1 0 0 1 0 0 233.71 + 0 1 0 0 3 0 0 237.588 + 0 1 0 0 -1 2 1 244.823 + 0 1 0 0 4 0 0 239.457 + 0 1 0 0 6 -2 0 256.72 + 0 1 0 0 0 1 0 260.026 + 0 1 0 0 5 -1 0 264.788 + 0 1 0 0 2 0 0 254.014 + 0 1 0 0 6 -1 2 261.44 + 0 1 0 0 2 1 0 264.884 + 0 1 0 0 5 0 0 253.466 + 0 1 0 0 1 1 0 255.362 + 0 1 0 0 4 1 0 249.786 + 0 1 0 0 0 2 0 251.282 + 0 1 0 0 5 1 2 242.899 + 0 1 0 0 -1 2 4 249.472 + 0 1 0 0 3 2 0 247.153 + 0 1 0 0 -2 4 0 246.342 + 0 1 0 0 3 1 0 245.183 + 0 1 0 0 -1 3 0 241.601 + 0 1 0 0 2 2 0 244.398 + 0 1 0 0 -1 4 0 241.2 + 0 1 0 0 4 2 0 243.79 + 0 1 0 0 -3 6 0 233.836 + 0 1 0 0 3 3 0 244.898 + 0 1 0 0 -2 5 0 249.769 + 0 1 0 0 4 3 3 244.713 + 0 1 0 0 0 3 0 246.272 + 0 1 0 0 2 4 0 251.888 + 0 1 0 0 1 2 0 251.627 + 0 1 0 0 2 3 0 260.342 + 0 1 0 0 1 3 0 256.273 + 0 1 0 0 1 4 0 263.52 + 0 1 0 0 -2 6 5 254.92 + 0 1 0 0 1 5 2 265.823 + 0 1 0 0 -1 6 2 258.2 + 0 1 0 0 0 5 0 252.093 + 0 1 0 0 -1 5 0 244.303 + 0 1 0 0 0 4 0 251.487 + 0 1 0 0 -4 6 5 272.249 + 0 1 0 0 -4 5 0 269.836 + 0 1 0 0 -4 4 0 264.56 + 0 1 0 0 -5 5 0 271.128 + 0 1 0 0 -4 3 0 262.063 + 0 1 0 0 -5 6 2 256.079 + 0 1 0 0 -3 3 0 242.341 + 0 1 0 0 -4 2 0 249.456 + 0 1 0 0 -3 2 0 242.871 + 0 1 0 0 -5 2 0 242.57 + 0 1 0 0 -3 1 0 238.382 + 0 1 0 0 -5 3 0 241.265 + 0 1 0 0 -2 1 0 234.65 + 0 1 0 0 -6 5 2 236.269 + 0 1 0 0 -3 5 0 238.29 + 0 1 0 0 -5 4 0 238.192 + 0 1 0 0 -3 4 0 241.566 + 0 1 0 0 -6 4 0 238.597 + 0 1 0 0 -2 3 0 240.833 + 0 1 0 0 -7 4 3 240.943 + 0 1 0 0 -2 2 0 236.373 + 0 1 0 0 -6 3 0 240.648 + 0 1 0 0 -1 1 0 237.333 + 0 1 0 0 -4 1 0 238.765 + 0 1 0 0 -1 0 0 246.507 + 0 1 0 0 -3 0 0 242.198 + 0 1 0 0 0 0 0 245.163 + 0 1 0 0 -4 0 0 247.606 + 0 1 0 0 1 -2 0 255.067 + 0 1 0 0 -6 2 0 251.174 + 0 1 0 0 0 -1 0 266.702 + 0 1 0 0 -5 1 0 270.781 + 0 1 0 0 -2 0 0 275.604 + 0 1 0 0 -6 1 2 280.392 + 0 1 0 0 -2 -1 0 275.04 + 0 1 0 0 -5 0 0 263.43 + 0 1 0 0 -1 -1 0 277.569 + 0 1 0 0 -4 -1 0 259.061 + 0 1 0 0 0 -2 0 261.227 + 0 1 0 0 -5 -1 2 257.418 + 0 1 0 0 2 -4 1 257.578 + 0 1 0 0 -3 -2 0 256.396 + 0 1 0 0 2 -4 4 247.334 + 0 1 0 0 -3 -1 0 241.574 + 0 1 0 0 1 -3 0 248.662 + 0 1 0 0 -2 -2 0 245.817 + 0 1 0 0 1 -4 0 244.158 + 0 1 0 0 -4 -2 0 245.485 + 0 1 0 0 3 -6 0 241.324 + 0 1 0 0 -3 -3 0 250.757 + 0 1 0 0 2 -5 0 236.865 + 0 1 0 0 -3 -4 3 247.272 + 0 1 0 0 0 -3 0 249.617 + 0 1 0 0 -2 -4 0 251.119 + 0 1 0 0 -1 -2 0 248.372 + 0 1 0 0 -2 -3 0 252.203 + 0 1 0 0 -1 -3 0 252.808 + 0 1 0 0 -1 -4 0 260.826 + 0 1 0 0 3 -7 5 261.902 + 0 1 0 0 -1 -5 2 265.455 + 0 1 0 0 1 -6 2 264.29 + 0 1 0 0 0 -5 0 269.106 + 0 1 0 0 1 -5 0 269.793 + 0 1 0 0 0 -4 0 266.283 + 0 2 0 0 4 -7 5 258.823 + 0 2 0 0 4 -5 0 260.252 + 0 2 0 0 4 -4 0 257.942 + 0 2 0 0 5 -5 0 262.188 + 0 2 0 0 4 -3 0 251.042 + 0 2 0 0 5 -6 2 253.618 + 0 2 0 0 3 -3 0 242.893 + 0 2 0 0 4 -2 0 243.947 + 0 2 0 0 3 -2 0 234.804 + 0 2 0 0 5 -2 0 240.638 + 0 2 0 0 3 -1 0 241.317 + 0 2 0 0 5 -3 0 239.046 + 0 2 0 0 2 -1 0 233.651 + 0 2 0 0 5 -4 0 237.893 + 0 2 0 0 3 -5 0 233.187 + 0 2 0 0 6 -4 0 234.528 + 0 2 0 0 3 -4 0 230.778 + 0 2 0 0 6 -5 2 237.122 + 0 2 0 0 2 -3 0 237.62 + 0 2 0 0 7 -3 3 235.27 + 0 2 0 0 2 -2 0 231.822 + 0 2 0 0 6 -3 0 232.275 + 0 2 0 0 1 -1 0 237.186 + 0 2 0 0 4 -1 0 247.468 + 0 2 0 0 1 0 0 244.05 + 0 2 0 0 3 0 0 243.272 + 0 2 0 0 -1 2 1 248.822 + 0 2 0 0 4 0 0 257.719 + 0 2 0 0 6 -2 0 252.232 + 0 2 0 0 0 1 0 258.207 + 0 2 0 0 5 -1 0 262.621 + 0 2 0 0 2 0 0 265.659 + 0 2 0 0 6 -1 2 270.072 + 0 2 0 0 2 1 0 271.011 + 0 2 0 0 5 0 0 264.098 + 0 2 0 0 1 1 0 267.266 + 0 2 0 0 4 1 0 258.097 + 0 2 0 0 0 2 0 256.365 + 0 2 0 0 5 1 2 250.28 + 0 2 0 0 -1 2 4 248.298 + 0 2 0 0 3 2 0 246.259 + 0 2 0 0 -2 4 0 243.069 + 0 2 0 0 3 1 0 242.78 + 0 2 0 0 -1 3 0 242.478 + 0 2 0 0 2 2 0 244.824 + 0 2 0 0 -1 4 0 241.036 + 0 2 0 0 4 2 0 242.284 + 0 2 0 0 -3 6 0 248.041 + 0 2 0 0 3 3 0 237.972 + 0 2 0 0 -2 5 0 236.936 + 0 2 0 0 4 3 3 237.316 + 0 2 0 0 0 3 0 242.953 + 0 2 0 0 2 4 0 246.848 + 0 2 0 0 1 2 0 240.637 + 0 2 0 0 2 3 0 251.025 + 0 2 0 0 1 3 0 253.63 + 0 2 0 0 1 4 0 253.834 + 0 2 0 0 -2 6 5 261.702 + 0 2 0 0 1 5 2 258.657 + 0 2 0 0 -1 6 2 260.156 + 0 2 0 0 0 5 0 260.448 + 0 2 0 0 -1 5 0 258.767 + 0 2 0 0 0 4 0 256.118 + 0 2 0 0 -4 6 5 305.787 + 0 2 0 0 -4 5 0 305.506 + 0 2 0 0 -4 4 0 301.453 + 0 2 0 0 -5 5 0 293.642 + 0 2 0 0 -4 3 0 298.608 + 0 2 0 0 -5 6 2 287.388 + 0 2 0 0 -3 3 0 286.357 + 0 2 0 0 -4 2 0 288.665 + 0 2 0 0 -3 2 0 282.752 + 0 2 0 0 -5 2 0 274.909 + 0 2 0 0 -3 1 0 276.41 + 0 2 0 0 -5 3 0 280.81 + 0 2 0 0 -2 1 0 276.642 + 0 2 0 0 -6 5 2 275.073 + 0 2 0 0 -3 5 0 268.873 + 0 2 0 0 -5 4 0 274.666 + 0 2 0 0 -3 4 0 270.257 + 0 2 0 0 -6 4 0 276.786 + 0 2 0 0 -2 3 0 262.396 + 0 2 0 0 -7 4 3 275.781 + 0 2 0 0 -2 2 0 280.447 + 0 2 0 0 -6 3 0 273.123 + 0 2 0 0 -1 1 0 281.169 + 0 2 0 0 -4 1 0 275.966 + 0 2 0 0 -1 0 0 278.577 + 0 2 0 0 -3 0 0 274.467 + 0 2 0 0 0 0 0 278.734 + 0 2 0 0 -4 0 0 281.873 + 0 2 0 0 1 -2 0 284.713 + 0 2 0 0 -6 2 0 297.704 + 0 2 0 0 0 -1 0 311.243 + 0 2 0 0 -5 1 0 303.133 + 0 2 0 0 -2 0 0 311.681 + 0 2 0 0 -6 1 2 312.982 + 0 2 0 0 -2 -1 0 309.823 + 0 2 0 0 -5 0 0 303.224 + 0 2 0 0 -1 -1 0 296.119 + 0 2 0 0 -4 -1 0 297.494 + 0 2 0 0 0 -2 0 298.831 + 0 2 0 0 -5 -1 2 290.931 + 0 2 0 0 2 -4 1 292.296 + 0 2 0 0 -3 -2 0 279.442 + 0 2 0 0 2 -4 4 286.767 + 0 2 0 0 -3 -1 0 286.208 + 0 2 0 0 1 -3 0 280.597 + 0 2 0 0 -2 -2 0 282.462 + 0 2 0 0 1 -4 0 275.244 + 0 2 0 0 -4 -2 0 276.311 + 0 2 0 0 3 -6 0 278.841 + 0 2 0 0 -3 -3 0 279.773 + 0 2 0 0 2 -5 0 280.24 + 0 2 0 0 -3 -4 3 279.099 + 0 2 0 0 0 -3 0 276.377 + 0 2 0 0 -2 -4 0 275.973 + 0 2 0 0 -1 -2 0 286.742 + 0 2 0 0 -2 -3 0 288.059 + 0 2 0 0 -1 -3 0 292.482 + 0 2 0 0 -1 -4 0 289.243 + 0 2 0 0 3 -7 5 297.685 + 0 2 0 0 -1 -5 2 299.475 + 0 2 0 0 1 -6 2 299.18 + 0 2 0 0 0 -5 0 308.257 + 0 2 0 0 1 -5 0 305.025 + 0 2 0 0 0 -4 0 302.546 + 0 3 0 0 4 -7 5 279.143 + 0 3 0 0 4 -5 0 275.027 + 0 3 0 0 4 -4 0 280.624 + 0 3 0 0 5 -5 0 283.285 + 0 3 0 0 4 -3 0 276.326 + 0 3 0 0 5 -6 2 279.478 + 0 3 0 0 3 -3 0 264.537 + 0 3 0 0 4 -2 0 269.574 + 0 3 0 0 3 -2 0 265.971 + 0 3 0 0 5 -2 0 269.085 + 0 3 0 0 3 -1 0 266.072 + 0 3 0 0 5 -3 0 253.664 + 0 3 0 0 2 -1 0 258.853 + 0 3 0 0 5 -4 0 260.923 + 0 3 0 0 3 -5 0 258.054 + 0 3 0 0 6 -4 0 255.586 + 0 3 0 0 3 -4 0 256.356 + 0 3 0 0 6 -5 2 256.357 + 0 3 0 0 2 -3 0 258.078 + 0 3 0 0 7 -3 3 259.473 + 0 3 0 0 2 -2 0 251.008 + 0 3 0 0 6 -3 0 256.123 + 0 3 0 0 1 -1 0 255.373 + 0 3 0 0 4 -1 0 266.064 + 0 3 0 0 1 0 0 259.757 + 0 3 0 0 3 0 0 261.464 + 0 3 0 0 -1 2 1 255.007 + 0 3 0 0 4 0 0 271.221 + 0 3 0 0 6 -2 0 277.272 + 0 3 0 0 0 1 0 284.688 + 0 3 0 0 5 -1 0 283.692 + 0 3 0 0 2 0 0 289.102 + 0 3 0 0 6 -1 2 283.572 + 0 3 0 0 2 1 0 285.687 + 0 3 0 0 5 0 0 281.415 + 0 3 0 0 1 1 0 278.818 + 0 3 0 0 4 1 0 280.438 + 0 3 0 0 0 2 0 274.86 + 0 3 0 0 5 1 2 265.171 + 0 3 0 0 -1 2 4 257.72 + 0 3 0 0 3 2 0 266.417 + 0 3 0 0 -2 4 0 256.163 + 0 3 0 0 3 1 0 248.409 + 0 3 0 0 -1 3 0 248.794 + 0 3 0 0 2 2 0 251.63 + 0 3 0 0 -1 4 0 251.64 + 0 3 0 0 4 2 0 251.403 + 0 3 0 0 -3 6 0 249.917 + 0 3 0 0 3 3 0 250.043 + 0 3 0 0 -2 5 0 240.222 + 0 3 0 0 4 3 3 247.55 + 0 3 0 0 0 3 0 255.171 + 0 3 0 0 2 4 0 251.776 + 0 3 0 0 1 2 0 257.373 + 0 3 0 0 2 3 0 251.979 + 0 3 0 0 1 3 0 254.238 + 0 3 0 0 1 4 0 265.109 + 0 3 0 0 -2 6 5 271.057 + 0 3 0 0 1 5 2 274.71 + 0 3 0 0 -1 6 2 272.154 + 0 3 0 0 0 5 0 283.705 + 0 3 0 0 -1 5 0 283.332 + 0 3 0 0 0 4 0 278.207 + 0 3 0 0 -4 6 5 293.605 + 0 3 0 0 -4 5 0 279.905 + 0 3 0 0 -4 4 0 290.678 + 0 3 0 0 -5 5 0 278.638 + 0 3 0 0 -4 3 0 275.308 + 0 3 0 0 -5 6 2 283.663 + 0 3 0 0 -3 3 0 268.911 + 0 3 0 0 -4 2 0 268.919 + 0 3 0 0 -3 2 0 265.272 + 0 3 0 0 -5 2 0 263.773 + 0 3 0 0 -3 1 0 260.072 + 0 3 0 0 -5 3 0 268.329 + 0 3 0 0 -2 1 0 254.19 + 0 3 0 0 -6 5 2 258.947 + 0 3 0 0 -3 5 0 265.397 + 0 3 0 0 -5 4 0 262.619 + 0 3 0 0 -3 4 0 265.445 + 0 3 0 0 -6 4 0 264.643 + 0 3 0 0 -2 3 0 261.506 + 0 3 0 0 -7 4 3 260.408 + 0 3 0 0 -2 2 0 262.867 + 0 3 0 0 -6 3 0 260.609 + 0 3 0 0 -1 1 0 267.332 + 0 3 0 0 -4 1 0 268.601 + 0 3 0 0 -1 0 0 267.146 + 0 3 0 0 -3 0 0 268.089 + 0 3 0 0 0 0 0 277.167 + 0 3 0 0 -4 0 0 274.589 + 0 3 0 0 1 -2 0 276.302 + 0 3 0 0 -6 2 0 281.581 + 0 3 0 0 0 -1 0 283.85 + 0 3 0 0 -5 1 0 293.324 + 0 3 0 0 -2 0 0 291.667 + 0 3 0 0 -6 1 2 300.97 + 0 3 0 0 -2 -1 0 300.909 + 0 3 0 0 -5 0 0 292.234 + 0 3 0 0 -1 -1 0 294.138 + 0 3 0 0 -4 -1 0 287.816 + 0 3 0 0 0 -2 0 277.871 + 0 3 0 0 -5 -1 2 279.44 + 0 3 0 0 2 -4 1 277.221 + 0 3 0 0 -3 -2 0 267.457 + 0 3 0 0 2 -4 4 275.856 + 0 3 0 0 -3 -1 0 269.5 + 0 3 0 0 1 -3 0 274.233 + 0 3 0 0 -2 -2 0 264.722 + 0 3 0 0 1 -4 0 262.244 + 0 3 0 0 -4 -2 0 268.47 + 0 3 0 0 3 -6 0 260.07 + 0 3 0 0 -3 -3 0 268.211 + 0 3 0 0 2 -5 0 267.822 + 0 3 0 0 -3 -4 3 268.462 + 0 3 0 0 0 -3 0 265.752 + 0 3 0 0 -2 -4 0 269.423 + 0 3 0 0 -1 -2 0 267.272 + 0 3 0 0 -2 -3 0 278.452 + 0 3 0 0 -1 -3 0 270.552 + 0 3 0 0 -1 -4 0 283.389 + 0 3 0 0 3 -7 5 284.775 + 0 3 0 0 -1 -5 2 301.698 + 0 3 0 0 1 -6 2 287.819 + 0 3 0 0 0 -5 0 294.217 + 0 3 0 0 1 -5 0 292.711 + 0 3 0 0 0 -4 0 287.448 + 0 4 0 0 4 -7 5 271.708 + 0 4 0 0 4 -5 0 271.997 + 0 4 0 0 4 -4 0 261.889 + 0 4 0 0 5 -5 0 261.584 + 0 4 0 0 4 -3 0 257.371 + 0 4 0 0 5 -6 2 253.322 + 0 4 0 0 3 -3 0 248.508 + 0 4 0 0 4 -2 0 247.528 + 0 4 0 0 3 -2 0 243.336 + 0 4 0 0 5 -2 0 254.602 + 0 4 0 0 3 -1 0 245.988 + 0 4 0 0 5 -3 0 246.198 + 0 4 0 0 2 -1 0 235.691 + 0 4 0 0 5 -4 0 242.512 + 0 4 0 0 3 -5 0 247.377 + 0 4 0 0 6 -4 0 238.423 + 0 4 0 0 3 -4 0 244.017 + 0 4 0 0 6 -5 2 241.479 + 0 4 0 0 2 -3 0 239.171 + 0 4 0 0 7 -3 3 245.021 + 0 4 0 0 2 -2 0 237.41 + 0 4 0 0 6 -3 0 244.28 + 0 4 0 0 1 -1 0 247.96 + 0 4 0 0 4 -1 0 244.874 + 0 4 0 0 1 0 0 248.615 + 0 4 0 0 3 0 0 250.699 + 0 4 0 0 -1 2 1 257.42 + 0 4 0 0 4 0 0 250.237 + 0 4 0 0 6 -2 0 267.914 + 0 4 0 0 0 1 0 264.497 + 0 4 0 0 5 -1 0 277.262 + 0 4 0 0 2 0 0 267.516 + 0 4 0 0 6 -1 2 282.34 + 0 4 0 0 2 1 0 273.842 + 0 4 0 0 5 0 0 275.51 + 0 4 0 0 1 1 0 267.433 + 0 4 0 0 4 1 0 268.009 + 0 4 0 0 0 2 0 266.504 + 0 4 0 0 5 1 2 269.918 + 0 4 0 0 -1 2 4 260.168 + 0 4 0 0 3 2 0 253.568 + 0 4 0 0 -2 4 0 265.56 + 0 4 0 0 3 1 0 256.012 + 0 4 0 0 -1 3 0 250.03 + 0 4 0 0 2 2 0 253.774 + 0 4 0 0 -1 4 0 249.401 + 0 4 0 0 4 2 0 256.111 + 0 4 0 0 -3 6 0 255.523 + 0 4 0 0 3 3 0 254.503 + 0 4 0 0 -2 5 0 257.872 + 0 4 0 0 4 3 3 251.277 + 0 4 0 0 0 3 0 262.283 + 0 4 0 0 2 4 0 254.865 + 0 4 0 0 1 2 0 255.939 + 0 4 0 0 2 3 0 262.29 + 0 4 0 0 1 3 0 264.137 + 0 4 0 0 1 4 0 260.548 + 0 4 0 0 -2 6 5 272.902 + 0 4 0 0 1 5 2 273.225 + 0 4 0 0 -1 6 2 266.035 + 0 4 0 0 0 5 0 279.725 + 0 4 0 0 -1 5 0 266.222 + 0 4 0 0 0 4 0 267.649 + 0 4 0 0 -4 6 5 266.453 + 0 4 0 0 -4 5 0 259.587 + 0 4 0 0 -4 4 0 261.743 + 0 4 0 0 -5 5 0 263.958 + 0 4 0 0 -4 3 0 259.966 + 0 4 0 0 -5 6 2 245.792 + 0 4 0 0 -3 3 0 246.043 + 0 4 0 0 -4 2 0 236.558 + 0 4 0 0 -3 2 0 239.902 + 0 4 0 0 -5 2 0 238.35 + 0 4 0 0 -3 1 0 235.842 + 0 4 0 0 -5 3 0 231.863 + 0 4 0 0 -2 1 0 230.811 + 0 4 0 0 -6 5 2 233.349 + 0 4 0 0 -3 5 0 222.058 + 0 4 0 0 -5 4 0 234.843 + 0 4 0 0 -3 4 0 233.952 + 0 4 0 0 -6 4 0 233.722 + 0 4 0 0 -2 3 0 233.29 + 0 4 0 0 -7 4 3 231.646 + 0 4 0 0 -2 2 0 227.487 + 0 4 0 0 -6 3 0 233.483 + 0 4 0 0 -1 1 0 234.893 + 0 4 0 0 -4 1 0 236.072 + 0 4 0 0 -1 0 0 231.829 + 0 4 0 0 -3 0 0 237.783 + 0 4 0 0 0 0 0 238.463 + 0 4 0 0 -4 0 0 243.831 + 0 4 0 0 1 -2 0 242.463 + 0 4 0 0 -6 2 0 251.356 + 0 4 0 0 0 -1 0 256.75 + 0 4 0 0 -5 1 0 261.486 + 0 4 0 0 -2 0 0 263.043 + 0 4 0 0 -6 1 2 259.736 + 0 4 0 0 -2 -1 0 263.665 + 0 4 0 0 -5 0 0 262.649 + 0 4 0 0 -1 -1 0 258.706 + 0 4 0 0 -4 -1 0 251.908 + 0 4 0 0 0 -2 0 253.851 + 0 4 0 0 -5 -1 2 251.285 + 0 4 0 0 2 -4 1 248.509 + 0 4 0 0 -3 -2 0 245.124 + 0 4 0 0 2 -4 4 248.475 + 0 4 0 0 -3 -1 0 245.278 + 0 4 0 0 1 -3 0 236.595 + 0 4 0 0 -2 -2 0 238.386 + 0 4 0 0 1 -4 0 247.473 + 0 4 0 0 -4 -2 0 244.323 + 0 4 0 0 3 -6 0 235.545 + 0 4 0 0 -3 -3 0 239.442 + 0 4 0 0 2 -5 0 244.053 + 0 4 0 0 -3 -4 3 238.805 + 0 4 0 0 0 -3 0 240.913 + 0 4 0 0 -2 -4 0 247.826 + 0 4 0 0 -1 -2 0 245.944 + 0 4 0 0 -2 -3 0 251.768 + 0 4 0 0 -1 -3 0 253.208 + 0 4 0 0 -1 -4 0 265.676 + 0 4 0 0 3 -7 5 262.633 + 0 4 0 0 -1 -5 2 265.009 + 0 4 0 0 1 -6 2 262.406 + 0 4 0 0 0 -5 0 261.751 + 0 4 0 0 1 -5 0 255.905 + 0 4 0 0 0 -4 0 255.343 + 0 5 0 0 -3 7 5 262.692 + 0 5 0 0 -1 5 0 256.445 + 0 5 0 0 0 4 0 259.291 + 0 5 0 0 0 5 0 253.127 + 0 5 0 0 1 3 0 247.808 + 0 5 0 0 -1 6 2 249.264 + 0 5 0 0 0 3 0 258.144 + 0 5 0 0 2 2 0 245.856 + 0 5 0 0 1 2 0 236.757 + 0 5 0 0 3 2 0 247.028 + 0 5 0 0 2 1 0 237.612 + 0 5 0 0 2 3 0 236.472 + 0 5 0 0 1 1 0 239.08 + 0 5 0 0 1 4 0 237.453 + 0 5 0 0 -2 5 0 232.81 + 0 5 0 0 2 4 0 234.048 + 0 5 0 0 -1 4 0 232.61 + 0 5 0 0 1 5 2 236.882 + 0 5 0 0 -1 3 0 238.686 + 0 5 0 0 4 3 3 245.655 + 0 5 0 0 0 2 0 237.263 + 0 5 0 0 3 3 0 234.374 + 0 5 0 0 0 1 0 235.266 + 0 5 0 0 3 1 0 243.121 + 0 5 0 0 1 0 0 246.04 + 0 5 0 0 3 0 0 244.86 + 0 5 0 0 1 -2 1 254.136 + 0 5 0 0 4 0 0 244.151 + 0 5 0 0 4 2 0 257.558 + 0 5 0 0 1 -1 0 263.278 + 0 5 0 0 4 1 0 264.954 + 0 5 0 0 2 0 0 266.37 + 0 5 0 0 5 1 2 266.747 + 0 5 0 0 3 -1 0 264.406 + 0 5 0 0 5 0 0 266.796 + 0 5 0 0 2 -1 0 264.212 + 0 5 0 0 5 -1 0 256.213 + 0 5 0 0 2 -2 0 249.925 + 0 5 0 0 6 -1 2 250.697 + 0 5 0 0 1 -2 4 250.736 + 0 5 0 0 5 -2 0 247.804 + 0 5 0 0 2 -4 0 238.572 + 0 5 0 0 4 -1 0 245.969 + 0 5 0 0 2 -3 0 248.206 + 0 5 0 0 4 -2 0 242.287 + 0 5 0 0 3 -4 0 247.112 + 0 5 0 0 6 -2 0 242.787 + 0 5 0 0 3 -6 0 237.149 + 0 5 0 0 6 -3 0 242.88 + 0 5 0 0 3 -5 0 242.09 + 0 5 0 0 7 -3 3 241.236 + 0 5 0 0 3 -3 0 241.583 + 0 5 0 0 6 -4 0 252.924 + 0 5 0 0 3 -2 0 245.982 + 0 5 0 0 5 -3 0 247.26 + 0 5 0 0 4 -3 0 250.041 + 0 5 0 0 5 -4 0 248.755 + 0 5 0 0 4 -6 5 254.115 + 0 5 0 0 6 -5 2 260.132 + 0 5 0 0 5 -6 2 264.667 + 0 5 0 0 5 -5 0 262.288 + 0 5 0 0 4 -5 0 271.502 + 0 5 0 0 4 -4 0 262.425 + 0 5 0 0 2 -6 5 271.619 + 0 5 0 0 1 -5 0 265.942 + 0 5 0 0 0 -4 0 273.24 + 0 5 0 0 0 -5 0 255.086 + 0 5 0 0 -1 -3 0 251.156 + 0 5 0 0 1 -6 2 255.514 + 0 5 0 0 0 -3 0 246.981 + 0 5 0 0 -2 -2 0 243.002 + 0 5 0 0 -1 -2 0 238.601 + 0 5 0 0 -3 -2 0 237.023 + 0 5 0 0 -2 -1 0 236.706 + 0 5 0 0 -2 -3 0 238.617 + 0 5 0 0 -1 -1 0 235.923 + 0 5 0 0 -1 -5 2 231.426 + 0 5 0 0 2 -5 0 235.37 + 0 5 0 0 -1 -4 0 234.34 + 0 5 0 0 1 -4 0 233.607 + 0 5 0 0 -2 -4 0 228.827 + 0 5 0 0 1 -3 0 237.033 + 0 5 0 0 -3 -4 3 237.717 + 0 5 0 0 0 -2 0 230.953 + 0 5 0 0 -3 -3 0 227.168 + 0 5 0 0 0 -1 0 236.713 + 0 5 0 0 -3 -1 0 233.287 + 0 5 0 0 -1 0 0 234.278 + 0 5 0 0 -3 0 0 240.858 + 0 5 0 0 0 0 0 248.545 + 0 5 0 0 -4 0 0 245.415 + 0 5 0 0 -1 2 0 251.667 + 0 5 0 0 -4 -2 0 253.662 + 0 5 0 0 -1 1 0 253.058 + 0 5 0 0 -4 -1 0 255.999 + 0 5 0 0 -2 0 0 263.665 + 0 5 0 0 -5 -1 2 265.508 + 0 5 0 0 -3 1 0 266.329 + 0 5 0 0 -5 0 0 259.701 + 0 5 0 0 -2 1 0 254.282 + 0 5 0 0 -5 1 0 258.877 + 0 5 0 0 -2 2 0 252.868 + 0 5 0 0 -6 1 2 245.793 + 0 5 0 0 -2 4 1 241.688 + 0 5 0 0 -5 2 0 240.64 + 0 5 0 0 -2 4 4 236.485 + 0 5 0 0 -4 1 0 241.785 + 0 5 0 0 -2 3 0 241.613 + 0 5 0 0 -4 2 0 235.301 + 0 5 0 0 -3 4 0 242.266 + 0 5 0 0 -6 2 0 238.245 + 0 5 0 0 -3 6 0 242.496 + 0 5 0 0 -6 3 0 235.157 + 0 5 0 0 -3 5 0 238.503 + 0 5 0 0 -7 4 3 240.844 + 0 5 0 0 -3 3 0 245.909 + 0 5 0 0 -6 4 0 249.594 + 0 5 0 0 -3 2 0 245.873 + 0 5 0 0 -5 3 0 250.849 + 0 5 0 0 -4 3 0 253.102 + 0 5 0 0 -5 4 0 261.658 + 0 5 0 0 -4 7 5 258.517 + 0 5 0 0 -6 5 2 263.688 + 0 5 0 0 -5 6 2 263.681 + 0 5 0 0 -5 5 0 262.325 + 0 5 0 0 -4 5 0 263.948 + 0 5 0 0 -4 4 0 258.796 + 0 6 0 0 4 -7 5 263.074 + 0 6 0 0 5 -6 2 264.007 + 0 6 0 0 4 -4 0 255.531 + 0 6 0 0 5 -5 0 255.964 + 0 6 0 0 4 -3 0 250.293 + 0 6 0 0 4 -5 0 250.726 + 0 6 0 0 3 -3 0 242.478 + 0 6 0 0 5 -4 0 240.825 + 0 6 0 0 3 -2 0 240.402 + 0 6 0 0 6 -4 0 235.428 + 0 6 0 0 3 -1 0 237.235 + 0 6 0 0 4 -2 0 237.181 + 0 6 0 0 2 -1 0 237.921 + 0 6 0 0 5 -2 0 239.522 + 0 6 0 0 3 -5 0 236.042 + 0 6 0 0 5 -3 0 237.113 + 0 6 0 0 3 -4 0 235.434 + 0 6 0 0 6 -5 2 231.466 + 0 6 0 0 2 -3 0 229.833 + 0 6 0 0 7 -3 3 229.987 + 0 6 0 0 2 -2 0 234.796 + 0 6 0 0 6 -3 0 235.766 + 0 6 0 0 2 -4 1 233.817 + 0 6 0 0 4 -1 0 244.612 + 0 6 0 0 1 -1 0 234.868 + 0 6 0 0 3 0 0 235.773 + 0 6 0 0 1 0 0 241.367 + 0 6 0 0 4 0 0 244.667 + 0 6 0 0 6 -2 0 254.524 + 0 6 0 0 0 1 0 266.884 + 0 6 0 0 5 -1 0 273.118 + 0 6 0 0 2 0 0 265.985 + 0 6 0 0 6 -1 2 264.446 + 0 6 0 0 2 1 0 262.378 + 0 6 0 0 5 0 0 264.54 + 0 6 0 0 1 1 0 253.34 + 0 6 0 0 4 1 0 260.673 + 0 6 0 0 0 2 0 253.331 + 0 6 0 0 5 1 2 254.858 + 0 6 0 0 -1 2 4 248.778 + 0 6 0 0 3 2 0 246.318 + 0 6 0 0 -2 4 0 244.958 + 0 6 0 0 3 1 0 249.783 + 0 6 0 0 -1 3 0 244.337 + 0 6 0 0 2 2 0 241.153 + 0 6 0 0 -1 4 0 243.871 + 0 6 0 0 4 2 0 243.005 + 0 6 0 0 -3 6 0 239.604 + 0 6 0 0 3 3 0 239.322 + 0 6 0 0 -2 5 0 242.338 + 0 6 0 0 4 3 3 237.973 + 0 6 0 0 0 3 0 249.871 + 0 6 0 0 2 4 0 241.982 + 0 6 0 0 1 2 0 248.146 + 0 6 0 0 2 3 0 254.942 + 0 6 0 0 1 3 0 251.473 + 0 6 0 0 1 4 0 252.157 + 0 6 0 0 -1 5 0 268.576 + 0 6 0 0 1 5 2 255.34 + 0 6 0 0 -2 6 5 268.58 + 0 6 0 0 0 5 0 259.681 + 0 6 0 0 -1 6 2 261.68 + 0 6 0 0 0 4 0 256.462 + 0 6 0 0 -4 6 5 266.258 + 0 6 0 0 -5 6 2 271.389 + 0 6 0 0 -4 4 0 267.371 + 0 6 0 0 -5 5 0 256.034 + 0 6 0 0 -4 3 0 257.798 + 0 6 0 0 -4 5 0 252.512 + 0 6 0 0 -3 3 0 253.364 + 0 6 0 0 -6 5 2 250.628 + 0 6 0 0 -3 2 0 247.542 + 0 6 0 0 -5 4 0 241 + 0 6 0 0 -3 1 0 240.202 + 0 6 0 0 -4 2 0 233.91 + 0 6 0 0 -2 1 0 242.273 + 0 6 0 0 -5 2 0 241.641 + 0 6 0 0 -3 5 0 244.778 + 0 6 0 0 -5 3 0 232.037 + 0 6 0 0 -3 4 0 243.935 + 0 6 0 0 -6 4 0 241.502 + 0 6 0 0 -2 3 0 238.819 + 0 6 0 0 -7 4 3 235.007 + 0 6 0 0 -2 2 0 237.917 + 0 6 0 0 -6 3 0 238.629 + 0 6 0 0 -1 2 1 246.066 + 0 6 0 0 -4 1 0 242.548 + 0 6 0 0 -1 1 0 237.823 + 0 6 0 0 -3 0 0 240.723 + 0 6 0 0 -1 0 0 250.344 + 0 6 0 0 -4 0 0 253.738 + 0 6 0 0 0 0 0 253.184 + 0 6 0 0 -6 2 0 262.932 + 0 6 0 0 0 -1 0 278.068 + 0 6 0 0 -5 1 0 269.072 + 0 6 0 0 -2 0 0 263.359 + 0 6 0 0 -6 1 2 263.419 + 0 6 0 0 -2 -1 0 270.244 + 0 6 0 0 -5 0 0 264.242 + 0 6 0 0 -1 -1 0 266.646 + 0 6 0 0 -4 -1 0 269.624 + 0 6 0 0 0 -2 0 257.034 + 0 6 0 0 -5 -1 2 257.952 + 0 6 0 0 1 -2 0 255.137 + 0 6 0 0 -3 -2 0 250.044 + 0 6 0 0 2 -4 4 252.752 + 0 6 0 0 -3 -1 0 250.104 + 0 6 0 0 1 -3 0 252.971 + 0 6 0 0 -2 -2 0 243.403 + 0 6 0 0 1 -4 0 251.543 + 0 6 0 0 -4 -2 0 246.267 + 0 6 0 0 3 -6 0 251.767 + 0 6 0 0 -3 -3 0 251.366 + 0 6 0 0 2 -5 0 250.474 + 0 6 0 0 -4 -3 3 244.153 + 0 6 0 0 0 -3 0 253.194 + 0 6 0 0 -2 -4 0 248.982 + 0 6 0 0 -1 -2 0 261.015 + 0 6 0 0 -2 -3 0 259.993 + 0 6 0 0 -1 -3 0 258.898 + 0 6 0 0 -1 -4 0 257.604 + 0 6 0 0 1 -5 0 266.107 + 0 6 0 0 -1 -5 2 271.002 + 0 6 0 0 2 -6 5 263.659 + 0 6 0 0 0 -5 0 272.423 + 0 6 0 0 1 -6 2 271.188 + 0 6 0 0 0 -4 0 263.677 + 0 7 0 0 -3 7 5 275.293 + 0 7 0 0 -1 5 0 278.828 + 0 7 0 0 0 4 0 269.619 + 0 7 0 0 0 5 0 262.01 + 0 7 0 0 1 3 0 266.073 + 0 7 0 0 -1 6 2 258.414 + 0 7 0 0 0 3 0 247.847 + 0 7 0 0 2 2 0 255.112 + 0 7 0 0 1 2 0 255.232 + 0 7 0 0 3 2 0 247.674 + 0 7 0 0 2 1 0 247.677 + 0 7 0 0 2 3 0 254.09 + 0 7 0 0 1 1 0 246.366 + 0 7 0 0 1 4 0 243.222 + 0 7 0 0 -2 5 0 243.296 + 0 7 0 0 2 4 0 246.385 + 0 7 0 0 -1 4 0 246.569 + 0 7 0 0 1 5 2 247.407 + 0 7 0 0 -1 3 0 248.212 + 0 7 0 0 4 3 3 250.24 + 0 7 0 0 0 2 0 247.854 + 0 7 0 0 3 3 0 246.436 + 0 7 0 0 0 1 0 251.822 + 0 7 0 0 3 1 0 247.732 + 0 7 0 0 1 0 0 250.965 + 0 7 0 0 3 0 0 255.298 + 0 7 0 0 1 -2 1 257.345 + 0 7 0 0 4 0 0 262.661 + 0 7 0 0 4 2 0 266.507 + 0 7 0 0 1 -1 0 268.098 + 0 7 0 0 4 1 0 284.559 + 0 7 0 0 2 0 0 274.65 + 0 7 0 0 5 1 2 278.632 + 0 7 0 0 3 -1 0 282.89 + 0 7 0 0 5 0 0 273.33 + 0 7 0 0 2 -1 0 273.803 + 0 7 0 0 5 -1 0 275.836 + 0 7 0 0 2 -2 0 261.914 + 0 7 0 0 6 -1 2 265.777 + 0 7 0 0 1 -2 4 267.3 + 0 7 0 0 5 -2 0 258.916 + 0 7 0 0 2 -4 0 254.436 + 0 7 0 0 4 -1 0 256.99 + 0 7 0 0 2 -3 0 252.835 + 0 7 0 0 4 -2 0 259.826 + 0 7 0 0 3 -4 0 258.061 + 0 7 0 0 6 -2 0 250.42 + 0 7 0 0 3 -6 0 250.407 + 0 7 0 0 6 -3 0 249.998 + 0 7 0 0 3 -5 0 250.448 + 0 7 0 0 7 -3 3 256.312 + 0 7 0 0 3 -3 0 253.407 + 0 7 0 0 6 -4 0 262.241 + 0 7 0 0 3 -2 0 262.248 + 0 7 0 0 5 -3 0 260.882 + 0 7 0 0 4 -3 0 265.986 + 0 7 0 0 5 -4 0 268.355 + 0 7 0 0 4 -6 5 271.377 + 0 7 0 0 6 -5 2 264.805 + 0 7 0 0 5 -6 2 277.405 + 0 7 0 0 5 -5 0 273.011 + 0 7 0 0 4 -5 0 267.485 + 0 7 0 0 4 -4 0 266.092 + 0 7 0 0 2 -6 5 283.562 + 0 7 0 0 1 -5 0 279.192 + 0 7 0 0 0 -4 0 277.728 + 0 7 0 0 0 -5 0 278.988 + 0 7 0 0 -1 -3 0 272.207 + 0 7 0 0 1 -6 2 268.49 + 0 7 0 0 0 -3 0 254.097 + 0 7 0 0 -2 -2 0 258.12 + 0 7 0 0 -1 -2 0 259.605 + 0 7 0 0 -3 -2 0 256.201 + 0 7 0 0 -2 -1 0 257.444 + 0 7 0 0 -2 -3 0 249.428 + 0 7 0 0 -1 -1 0 247.482 + 0 7 0 0 -1 -5 2 248.067 + 0 7 0 0 2 -5 0 253.808 + 0 7 0 0 -1 -4 0 251.981 + 0 7 0 0 1 -4 0 245.817 + 0 7 0 0 -2 -4 0 247.068 + 0 7 0 0 1 -3 0 252.634 + 0 7 0 0 -3 -4 3 249.25 + 0 7 0 0 0 -2 0 250.111 + 0 7 0 0 -3 -3 0 256.163 + 0 7 0 0 0 -1 0 257.119 + 0 7 0 0 -3 -1 0 256.668 + 0 7 0 0 -1 0 0 262.675 + 0 7 0 0 -3 0 0 257.237 + 0 7 0 0 0 0 0 258.701 + 0 7 0 0 -4 0 0 264.97 + 0 7 0 0 -1 2 0 269.072 + 0 7 0 0 -4 -2 0 275.327 + 0 7 0 0 -1 1 0 282.257 + 0 7 0 0 -4 -1 0 282.666 + 0 7 0 0 -2 0 0 283.243 + 0 7 0 0 -5 -1 2 283.825 + 0 7 0 0 -3 1 0 290.692 + 0 7 0 0 -5 0 0 287.815 + 0 7 0 0 -2 1 0 279.71 + 0 7 0 0 -5 1 0 278.347 + 0 7 0 0 -2 2 0 278.497 + 0 7 0 0 -6 1 2 269.372 + 0 7 0 0 -2 4 1 274.298 + 0 7 0 0 -5 2 0 267.724 + 0 7 0 0 -2 4 4 261.843 + 0 7 0 0 -4 1 0 261.803 + 0 7 0 0 -2 3 0 261.062 + 0 7 0 0 -4 2 0 261.087 + 0 7 0 0 -3 4 0 261.912 + 0 7 0 0 -6 2 0 260.865 + 0 7 0 0 -3 6 0 256.962 + 0 7 0 0 -6 3 0 260.033 + 0 7 0 0 -3 5 0 260.108 + 0 7 0 0 -7 4 3 259.763 + 0 7 0 0 -3 3 0 264.163 + 0 7 0 0 -6 4 0 269.022 + 0 7 0 0 -3 2 0 265.901 + 0 7 0 0 -5 3 0 261.113 + 0 7 0 0 -4 3 0 268.098 + 0 7 0 0 -5 4 0 269 + 0 7 0 0 -4 7 5 277.385 + 0 7 0 0 -6 5 2 280.352 + 0 7 0 0 -5 6 2 282.082 + 0 7 0 0 -5 5 0 276.831 + 0 7 0 0 -4 5 0 283.024 + 0 7 0 0 -4 4 0 281.73 + 0 8 0 0 4 -7 5 279.283 + 0 8 0 0 4 -5 0 277.484 + 0 8 0 0 4 -4 0 275.538 + 0 8 0 0 5 -5 0 277.552 + 0 8 0 0 4 -3 0 272.722 + 0 8 0 0 5 -6 2 267.248 + 0 8 0 0 3 -3 0 265.585 + 0 8 0 0 4 -2 0 261.478 + 0 8 0 0 3 -2 0 259.824 + 0 8 0 0 5 -2 0 256.189 + 0 8 0 0 3 -1 0 254.335 + 0 8 0 0 5 -3 0 253.092 + 0 8 0 0 2 -1 0 255.362 + 0 8 0 0 5 -4 0 253.152 + 0 8 0 0 3 -5 0 247.558 + 0 8 0 0 6 -4 0 247.506 + 0 8 0 0 3 -4 0 251.328 + 0 8 0 0 6 -5 2 250.428 + 0 8 0 0 2 -3 0 248.663 + 0 8 0 0 7 -3 3 254.363 + 0 8 0 0 2 -2 0 255.526 + 0 8 0 0 6 -3 0 249.334 + 0 8 0 0 1 -1 0 259.531 + 0 8 0 0 4 -1 0 255.256 + 0 8 0 0 1 0 0 255.349 + 0 8 0 0 3 0 0 263.595 + 0 8 0 0 -1 2 1 264.585 + 0 8 0 0 4 0 0 270.907 + 0 8 0 0 6 -2 0 267.585 + 0 8 0 0 0 1 0 276.732 + 0 8 0 0 5 -1 0 282.779 + 0 8 0 0 2 0 0 284.797 + 0 8 0 0 6 -1 2 295.723 + 0 8 0 0 2 1 0 281.91 + 0 8 0 0 5 0 0 284.707 + 0 8 0 0 1 1 0 285.818 + 0 8 0 0 4 1 0 274.536 + 0 8 0 0 0 2 0 275.418 + 0 8 0 0 5 1 2 276.287 + 0 8 0 0 -1 2 4 271.328 + 0 8 0 0 3 2 0 268.353 + 0 8 0 0 -2 4 0 266.538 + 0 8 0 0 3 1 0 270.213 + 0 8 0 0 -1 3 0 260.993 + 0 8 0 0 2 2 0 265.278 + 0 8 0 0 -1 4 0 271.405 + 0 8 0 0 4 2 0 271.728 + 0 8 0 0 -3 6 0 260.791 + 0 8 0 0 3 3 0 258.578 + 0 8 0 0 -2 5 0 265.632 + 0 8 0 0 4 3 3 268.241 + 0 8 0 0 0 3 0 267.801 + 0 8 0 0 2 4 0 271.18 + 0 8 0 0 1 2 0 265.121 + 0 8 0 0 2 3 0 272.039 + 0 8 0 0 1 3 0 274.837 + 0 8 0 0 1 4 0 273.734 + 0 8 0 0 -2 6 5 281.168 + 0 8 0 0 1 5 2 284.593 + 0 8 0 0 -1 6 2 288.606 + 0 8 0 0 0 5 0 285.736 + 0 8 0 0 -1 5 0 280.333 + 0 8 0 0 0 4 0 282.821 + 0 8 0 0 -4 6 5 257.471 + 0 8 0 0 -4 5 0 266.812 + 0 8 0 0 -4 4 0 256.02 + 0 8 0 0 -5 5 0 256.446 + 0 8 0 0 -4 3 0 254.058 + 0 8 0 0 -5 6 2 245.018 + 0 8 0 0 -3 3 0 244.113 + 0 8 0 0 -4 2 0 239.51 + 0 8 0 0 -3 2 0 240.435 + 0 8 0 0 -5 2 0 238.004 + 0 8 0 0 -3 1 0 235.727 + 0 8 0 0 -5 3 0 224.951 + 0 8 0 0 -2 1 0 231.044 + 0 8 0 0 -6 5 2 231.261 + 0 8 0 0 -3 5 0 227.653 + 0 8 0 0 -5 4 0 232.777 + 0 8 0 0 -3 4 0 228.528 + 0 8 0 0 -6 4 0 236.283 + 0 8 0 0 -2 3 0 231.157 + 0 8 0 0 -7 4 3 229.118 + 0 8 0 0 -2 2 0 231.235 + 0 8 0 0 -6 3 0 230.628 + 0 8 0 0 -1 1 0 228.192 + 0 8 0 0 -4 1 0 233.795 + 0 8 0 0 -1 0 0 236.835 + 0 8 0 0 -3 0 0 234.849 + 0 8 0 0 0 0 0 247.967 + 0 8 0 0 -4 0 0 239.716 + 0 8 0 0 1 -2 0 246.036 + 0 8 0 0 -6 2 0 254.108 + 0 8 0 0 0 -1 0 251.74 + 0 8 0 0 -5 1 0 255.846 + 0 8 0 0 -2 0 0 254.749 + 0 8 0 0 -6 1 2 264.418 + 0 8 0 0 -2 -1 0 262.923 + 0 8 0 0 -5 0 0 249.502 + 0 8 0 0 -1 -1 0 255.308 + 0 8 0 0 -4 -1 0 258.729 + 0 8 0 0 0 -2 0 243.442 + 0 8 0 0 -5 -1 2 239.78 + 0 8 0 0 2 -4 1 238.877 + 0 8 0 0 -3 -2 0 236.268 + 0 8 0 0 2 -4 4 238.785 + 0 8 0 0 -3 -1 0 241.235 + 0 8 0 0 1 -3 0 243.638 + 0 8 0 0 -2 -2 0 234.003 + 0 8 0 0 1 -4 0 232.853 + 0 8 0 0 -4 -2 0 228.674 + 0 8 0 0 3 -6 0 230.059 + 0 8 0 0 -3 -3 0 242.191 + 0 8 0 0 2 -5 0 226.576 + 0 8 0 0 -3 -4 3 231.714 + 0 8 0 0 0 -3 0 237.351 + 0 8 0 0 -2 -4 0 239.113 + 0 8 0 0 -1 -2 0 245.198 + 0 8 0 0 -2 -3 0 242.993 + 0 8 0 0 -1 -3 0 239.529 + 0 8 0 0 -1 -4 0 243.641 + 0 8 0 0 3 -7 5 244.243 + 0 8 0 0 -1 -5 2 252.884 + 0 8 0 0 1 -6 2 249.387 + 0 8 0 0 0 -5 0 256.127 + 0 8 0 0 1 -5 0 248.618 + 0 8 0 0 0 -4 0 256.551 diff --git a/CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt b/CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt new file mode 100644 index 0000000..4603574 --- /dev/null +++ b/CondObjects/data/PED_HighGain_L8_RN1174_cfg2.txt @@ -0,0 +1,1018 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 4 -7 5 258.082 + 0 1 0 0 4 -5 0 256.093 + 0 1 0 0 4 -4 0 247.947 + 0 1 0 0 5 -5 0 246.967 + 0 1 0 0 4 -3 0 234.9 + 0 1 0 0 5 -6 2 238.912 + 0 1 0 0 3 -3 0 242.602 + 0 1 0 0 4 -2 0 230.306 + 0 1 0 0 3 -2 0 233.827 + 0 1 0 0 5 -2 0 239.682 + 0 1 0 0 3 -1 0 230.803 + 0 1 0 0 5 -3 0 226.706 + 0 1 0 0 2 -1 0 226.663 + 0 1 0 0 5 -4 0 225.244 + 0 1 0 0 3 -5 0 229.84 + 0 1 0 0 6 -4 0 230.539 + 0 1 0 0 3 -4 0 224.395 + 0 1 0 0 6 -5 2 231.867 + 0 1 0 0 2 -3 0 221.994 + 0 1 0 0 7 -3 3 236.385 + 0 1 0 0 2 -2 0 229.07 + 0 1 0 0 6 -3 0 233.912 + 0 1 0 0 1 -1 0 231.237 + 0 1 0 0 4 -1 0 231.238 + 0 1 0 0 1 0 0 234.433 + 0 1 0 0 3 0 0 238.465 + 0 1 0 0 -1 2 1 244.875 + 0 1 0 0 4 0 0 240.343 + 0 1 0 0 6 -2 0 257.755 + 0 1 0 0 0 1 0 261.176 + 0 1 0 0 5 -1 0 266.033 + 0 1 0 0 2 0 0 255.166 + 0 1 0 0 6 -1 2 262.129 + 0 1 0 0 2 1 0 266.064 + 0 1 0 0 5 0 0 254.411 + 0 1 0 0 1 1 0 256.459 + 0 1 0 0 4 1 0 250.921 + 0 1 0 0 0 2 0 252.443 + 0 1 0 0 5 1 2 243.541 + 0 1 0 0 -1 2 4 250.396 + 0 1 0 0 3 2 0 248.157 + 0 1 0 0 -2 4 0 247.4 + 0 1 0 0 3 1 0 246.206 + 0 1 0 0 -1 3 0 242.723 + 0 1 0 0 2 2 0 245.512 + 0 1 0 0 -1 4 0 242.491 + 0 1 0 0 4 2 0 245.119 + 0 1 0 0 -3 6 0 235.144 + 0 1 0 0 3 3 0 246.257 + 0 1 0 0 -2 5 0 251.167 + 0 1 0 0 4 3 3 245.743 + 0 1 0 0 0 3 0 247.445 + 0 1 0 0 2 4 0 253.252 + 0 1 0 0 1 2 0 252.977 + 0 1 0 0 2 3 0 261.901 + 0 1 0 0 1 3 0 257.502 + 0 1 0 0 1 4 0 265.003 + 0 1 0 0 -2 6 5 256.727 + 0 1 0 0 1 5 2 266.749 + 0 1 0 0 -1 6 2 259.326 + 0 1 0 0 0 5 0 254.024 + 0 1 0 0 -1 5 0 246.235 + 0 1 0 0 0 4 0 253.522 + 0 1 0 0 -4 6 5 274.083 + 0 1 0 0 -4 5 0 271.218 + 0 1 0 0 -4 4 0 265.943 + 0 1 0 0 -5 5 0 272.509 + 0 1 0 0 -4 3 0 263.351 + 0 1 0 0 -5 6 2 256.679 + 0 1 0 0 -3 3 0 243.468 + 0 1 0 0 -4 2 0 250.54 + 0 1 0 0 -3 2 0 243.971 + 0 1 0 0 -5 2 0 243.58 + 0 1 0 0 -3 1 0 239.309 + 0 1 0 0 -5 3 0 242.23 + 0 1 0 0 -2 1 0 235.655 + 0 1 0 0 -6 5 2 236.804 + 0 1 0 0 -3 5 0 239.7 + 0 1 0 0 -5 4 0 239.557 + 0 1 0 0 -3 4 0 242.803 + 0 1 0 0 -6 4 0 239.769 + 0 1 0 0 -2 3 0 241.954 + 0 1 0 0 -7 4 3 241.696 + 0 1 0 0 -2 2 0 237.65 + 0 1 0 0 -6 3 0 241.893 + 0 1 0 0 -1 1 0 238.416 + 0 1 0 0 -4 1 0 239.685 + 0 1 0 0 -1 0 0 247.533 + 0 1 0 0 -3 0 0 243.179 + 0 1 0 0 0 0 0 246.233 + 0 1 0 0 -4 0 0 248.637 + 0 1 0 0 1 -2 0 256.552 + 0 1 0 0 -6 2 0 252.268 + 0 1 0 0 0 -1 0 268.235 + 0 1 0 0 -5 1 0 272.046 + 0 1 0 0 -2 0 0 276.996 + 0 1 0 0 -6 1 2 281.288 + 0 1 0 0 -2 -1 0 276.235 + 0 1 0 0 -5 0 0 264.805 + 0 1 0 0 -1 -1 0 278.823 + 0 1 0 0 -4 -1 0 260.234 + 0 1 0 0 0 -2 0 262.613 + 0 1 0 0 -5 -1 2 258.077 + 0 1 0 0 2 -4 1 257.827 + 0 1 0 0 -3 -2 0 257.399 + 0 1 0 0 2 -4 4 248.594 + 0 1 0 0 -3 -1 0 242.505 + 0 1 0 0 1 -3 0 249.863 + 0 1 0 0 -2 -2 0 246.818 + 0 1 0 0 1 -4 0 245.354 + 0 1 0 0 -4 -2 0 246.458 + 0 1 0 0 3 -6 0 242.567 + 0 1 0 0 -3 -3 0 251.701 + 0 1 0 0 2 -5 0 238.041 + 0 1 0 0 -3 -4 3 247.802 + 0 1 0 0 0 -3 0 250.771 + 0 1 0 0 -2 -4 0 251.913 + 0 1 0 0 -1 -2 0 249.425 + 0 1 0 0 -2 -3 0 253.278 + 0 1 0 0 -1 -3 0 253.757 + 0 1 0 0 -1 -4 0 261.822 + 0 1 0 0 3 -7 5 263.362 + 0 1 0 0 -1 -5 2 266.203 + 0 1 0 0 1 -6 2 265.192 + 0 1 0 0 0 -5 0 270.595 + 0 1 0 0 1 -5 0 271.334 + 0 1 0 0 0 -4 0 267.652 + 0 2 0 0 4 -7 5 258.069 + 0 2 0 0 4 -5 0 259.183 + 0 2 0 0 4 -4 0 256.986 + 0 2 0 0 5 -5 0 261.071 + 0 2 0 0 4 -3 0 249.958 + 0 2 0 0 5 -6 2 252.69 + 0 2 0 0 3 -3 0 241.828 + 0 2 0 0 4 -2 0 242.585 + 0 2 0 0 3 -2 0 233.711 + 0 2 0 0 5 -2 0 239.109 + 0 2 0 0 3 -1 0 240.12 + 0 2 0 0 5 -3 0 237.75 + 0 2 0 0 2 -1 0 232.636 + 0 2 0 0 5 -4 0 236.769 + 0 2 0 0 3 -5 0 232.379 + 0 2 0 0 6 -4 0 233.562 + 0 2 0 0 3 -4 0 230.31 + 0 2 0 0 6 -5 2 236.479 + 0 2 0 0 2 -3 0 237.157 + 0 2 0 0 7 -3 3 234.573 + 0 2 0 0 2 -2 0 231.395 + 0 2 0 0 6 -3 0 231.606 + 0 2 0 0 1 -1 0 236.936 + 0 2 0 0 4 -1 0 247.07 + 0 2 0 0 1 0 0 243.882 + 0 2 0 0 3 0 0 242.973 + 0 2 0 0 -1 2 1 248.643 + 0 2 0 0 4 0 0 257.398 + 0 2 0 0 6 -2 0 251.97 + 0 2 0 0 0 1 0 258.325 + 0 2 0 0 5 -1 0 262.678 + 0 2 0 0 2 0 0 265.646 + 0 2 0 0 6 -1 2 270.224 + 0 2 0 0 2 1 0 271.414 + 0 2 0 0 5 0 0 264.138 + 0 2 0 0 1 1 0 267.517 + 0 2 0 0 4 1 0 258.288 + 0 2 0 0 0 2 0 256.55 + 0 2 0 0 5 1 2 250.547 + 0 2 0 0 -1 2 4 248.442 + 0 2 0 0 3 2 0 246.579 + 0 2 0 0 -2 4 0 243.317 + 0 2 0 0 3 1 0 242.942 + 0 2 0 0 -1 3 0 242.709 + 0 2 0 0 2 2 0 245.195 + 0 2 0 0 -1 4 0 241.343 + 0 2 0 0 4 2 0 242.765 + 0 2 0 0 -3 6 0 248.608 + 0 2 0 0 3 3 0 238.47 + 0 2 0 0 -2 5 0 237.372 + 0 2 0 0 4 3 3 237.707 + 0 2 0 0 0 3 0 243.477 + 0 2 0 0 2 4 0 247.23 + 0 2 0 0 1 2 0 241.088 + 0 2 0 0 2 3 0 251.371 + 0 2 0 0 1 3 0 253.998 + 0 2 0 0 1 4 0 254.262 + 0 2 0 0 -2 6 5 262.441 + 0 2 0 0 1 5 2 258.838 + 0 2 0 0 -1 6 2 260.679 + 0 2 0 0 0 5 0 261.166 + 0 2 0 0 -1 5 0 259.615 + 0 2 0 0 0 4 0 256.767 + 0 2 0 0 -4 6 5 306.637 + 0 2 0 0 -4 5 0 306.061 + 0 2 0 0 -4 4 0 301.882 + 0 2 0 0 -5 5 0 294.233 + 0 2 0 0 -4 3 0 298.961 + 0 2 0 0 -5 6 2 287.59 + 0 2 0 0 -3 3 0 286.549 + 0 2 0 0 -4 2 0 288.868 + 0 2 0 0 -3 2 0 283.029 + 0 2 0 0 -5 2 0 275.247 + 0 2 0 0 -3 1 0 276.744 + 0 2 0 0 -5 3 0 281.136 + 0 2 0 0 -2 1 0 276.83 + 0 2 0 0 -6 5 2 275.208 + 0 2 0 0 -3 5 0 268.963 + 0 2 0 0 -5 4 0 275.003 + 0 2 0 0 -3 4 0 270.723 + 0 2 0 0 -6 4 0 277.139 + 0 2 0 0 -2 3 0 262.637 + 0 2 0 0 -7 4 3 276.027 + 0 2 0 0 -2 2 0 280.709 + 0 2 0 0 -6 3 0 273.441 + 0 2 0 0 -1 1 0 281.325 + 0 2 0 0 -4 1 0 276.272 + 0 2 0 0 -1 0 0 278.805 + 0 2 0 0 -3 0 0 274.538 + 0 2 0 0 0 0 0 279.046 + 0 2 0 0 -4 0 0 281.954 + 0 2 0 0 1 -2 0 285.185 + 0 2 0 0 -6 2 0 298.008 + 0 2 0 0 0 -1 0 311.54 + 0 2 0 0 -5 1 0 303.409 + 0 2 0 0 -2 0 0 312.103 + 0 2 0 0 -6 1 2 313.248 + 0 2 0 0 -2 -1 0 310.127 + 0 2 0 0 -5 0 0 303.581 + 0 2 0 0 -1 -1 0 296.41 + 0 2 0 0 -4 -1 0 297.502 + 0 2 0 0 0 -2 0 299.008 + 0 2 0 0 -5 -1 2 290.825 + 0 2 0 0 2 -4 1 292.007 + 0 2 0 0 -3 -2 0 279.437 + 0 2 0 0 2 -4 4 287.066 + 0 2 0 0 -3 -1 0 286.16 + 0 2 0 0 1 -3 0 280.622 + 0 2 0 0 -2 -2 0 282.642 + 0 2 0 0 1 -4 0 275.322 + 0 2 0 0 -4 -2 0 276.314 + 0 2 0 0 3 -6 0 279.102 + 0 2 0 0 -3 -3 0 279.819 + 0 2 0 0 2 -5 0 280.431 + 0 2 0 0 -3 -4 3 279.097 + 0 2 0 0 0 -3 0 276.356 + 0 2 0 0 -2 -4 0 276.025 + 0 2 0 0 -1 -2 0 286.877 + 0 2 0 0 -2 -3 0 288.077 + 0 2 0 0 -1 -3 0 292.629 + 0 2 0 0 -1 -4 0 289.118 + 0 2 0 0 3 -7 5 297.872 + 0 2 0 0 -1 -5 2 299.501 + 0 2 0 0 1 -6 2 299.398 + 0 2 0 0 0 -5 0 308.558 + 0 2 0 0 1 -5 0 305.392 + 0 2 0 0 0 -4 0 302.821 + 0 3 0 0 4 -7 5 277.947 + 0 3 0 0 4 -5 0 273.045 + 0 3 0 0 4 -4 0 278.908 + 0 3 0 0 5 -5 0 280.973 + 0 3 0 0 4 -3 0 274.37 + 0 3 0 0 5 -6 2 277.469 + 0 3 0 0 3 -3 0 262.321 + 0 3 0 0 4 -2 0 266.554 + 0 3 0 0 3 -2 0 263.491 + 0 3 0 0 5 -2 0 266.442 + 0 3 0 0 3 -1 0 263.802 + 0 3 0 0 5 -3 0 251.109 + 0 3 0 0 2 -1 0 256.841 + 0 3 0 0 5 -4 0 258.766 + 0 3 0 0 3 -5 0 256.41 + 0 3 0 0 6 -4 0 253.536 + 0 3 0 0 3 -4 0 254.921 + 0 3 0 0 6 -5 2 254.745 + 0 3 0 0 2 -3 0 256.841 + 0 3 0 0 7 -3 3 257.745 + 0 3 0 0 2 -2 0 249.843 + 0 3 0 0 6 -3 0 255.115 + 0 3 0 0 1 -1 0 254.59 + 0 3 0 0 4 -1 0 264.933 + 0 3 0 0 1 0 0 258.876 + 0 3 0 0 3 0 0 260.663 + 0 3 0 0 -1 2 1 254.294 + 0 3 0 0 4 0 0 270.69 + 0 3 0 0 6 -2 0 276.807 + 0 3 0 0 0 1 0 284.636 + 0 3 0 0 5 -1 0 283.606 + 0 3 0 0 2 0 0 289.283 + 0 3 0 0 6 -1 2 283.376 + 0 3 0 0 2 1 0 285.662 + 0 3 0 0 5 0 0 281.368 + 0 3 0 0 1 1 0 278.947 + 0 3 0 0 4 1 0 280.646 + 0 3 0 0 0 2 0 274.786 + 0 3 0 0 5 1 2 264.46 + 0 3 0 0 -1 2 4 257.869 + 0 3 0 0 3 2 0 266.306 + 0 3 0 0 -2 4 0 256.248 + 0 3 0 0 3 1 0 248.506 + 0 3 0 0 -1 3 0 248.665 + 0 3 0 0 2 2 0 251.863 + 0 3 0 0 -1 4 0 251.75 + 0 3 0 0 4 2 0 251.553 + 0 3 0 0 -3 6 0 250.278 + 0 3 0 0 3 3 0 250.416 + 0 3 0 0 -2 5 0 240.512 + 0 3 0 0 4 3 3 246.701 + 0 3 0 0 0 3 0 255.377 + 0 3 0 0 2 4 0 252.167 + 0 3 0 0 1 2 0 257.581 + 0 3 0 0 2 3 0 252.292 + 0 3 0 0 1 3 0 254.486 + 0 3 0 0 1 4 0 265.6 + 0 3 0 0 -2 6 5 271.759 + 0 3 0 0 1 5 2 274.764 + 0 3 0 0 -1 6 2 272.411 + 0 3 0 0 0 5 0 284.538 + 0 3 0 0 -1 5 0 284.215 + 0 3 0 0 0 4 0 277.921 + 0 3 0 0 -4 6 5 294.017 + 0 3 0 0 -4 5 0 279.979 + 0 3 0 0 -4 4 0 290.842 + 0 3 0 0 -5 5 0 278.781 + 0 3 0 0 -4 3 0 275.084 + 0 3 0 0 -5 6 2 283.217 + 0 3 0 0 -3 3 0 268.741 + 0 3 0 0 -4 2 0 268.44 + 0 3 0 0 -3 2 0 264.936 + 0 3 0 0 -5 2 0 263.398 + 0 3 0 0 -3 1 0 259.559 + 0 3 0 0 -5 3 0 267.918 + 0 3 0 0 -2 1 0 253.74 + 0 3 0 0 -6 5 2 258.228 + 0 3 0 0 -3 5 0 265.048 + 0 3 0 0 -5 4 0 262.264 + 0 3 0 0 -3 4 0 265.077 + 0 3 0 0 -6 4 0 264.335 + 0 3 0 0 -2 3 0 261.196 + 0 3 0 0 -7 4 3 259.886 + 0 3 0 0 -2 2 0 262.428 + 0 3 0 0 -6 3 0 260.255 + 0 3 0 0 -1 1 0 266.96 + 0 3 0 0 -4 1 0 268.254 + 0 3 0 0 -1 0 0 266.777 + 0 3 0 0 -3 0 0 267.777 + 0 3 0 0 0 0 0 277.198 + 0 3 0 0 -4 0 0 274.417 + 0 3 0 0 1 -2 0 276.216 + 0 3 0 0 -6 2 0 281.559 + 0 3 0 0 0 -1 0 284.077 + 0 3 0 0 -5 1 0 293.515 + 0 3 0 0 -2 0 0 291.972 + 0 3 0 0 -6 1 2 301.315 + 0 3 0 0 -2 -1 0 301.354 + 0 3 0 0 -5 0 0 292.295 + 0 3 0 0 -1 -1 0 294.068 + 0 3 0 0 -4 -1 0 287.776 + 0 3 0 0 0 -2 0 277.687 + 0 3 0 0 -5 -1 2 278.874 + 0 3 0 0 2 -4 1 276.688 + 0 3 0 0 -3 -2 0 267.059 + 0 3 0 0 2 -4 4 275.683 + 0 3 0 0 -3 -1 0 269.236 + 0 3 0 0 1 -3 0 273.897 + 0 3 0 0 -2 -2 0 264 + 0 3 0 0 1 -4 0 261.829 + 0 3 0 0 -4 -2 0 267.922 + 0 3 0 0 3 -6 0 259.584 + 0 3 0 0 -3 -3 0 267.674 + 0 3 0 0 2 -5 0 267.463 + 0 3 0 0 -3 -4 3 267.557 + 0 3 0 0 0 -3 0 265.098 + 0 3 0 0 -2 -4 0 268.916 + 0 3 0 0 -1 -2 0 266.888 + 0 3 0 0 -2 -3 0 277.95 + 0 3 0 0 -1 -3 0 270.208 + 0 3 0 0 -1 -4 0 282.853 + 0 3 0 0 3 -7 5 284.853 + 0 3 0 0 -1 -5 2 301.705 + 0 3 0 0 1 -6 2 287.871 + 0 3 0 0 0 -5 0 294.44 + 0 3 0 0 1 -5 0 292.877 + 0 3 0 0 0 -4 0 287.507 + 0 4 0 0 4 -7 5 272.768 + 0 4 0 0 4 -5 0 272.585 + 0 4 0 0 4 -4 0 262.376 + 0 4 0 0 5 -5 0 262.029 + 0 4 0 0 4 -3 0 257.673 + 0 4 0 0 5 -6 2 253.357 + 0 4 0 0 3 -3 0 248.802 + 0 4 0 0 4 -2 0 247.626 + 0 4 0 0 3 -2 0 243.652 + 0 4 0 0 5 -2 0 254.824 + 0 4 0 0 3 -1 0 246.212 + 0 4 0 0 5 -3 0 246.549 + 0 4 0 0 2 -1 0 235.992 + 0 4 0 0 5 -4 0 243.028 + 0 4 0 0 3 -5 0 247.941 + 0 4 0 0 6 -4 0 238.839 + 0 4 0 0 3 -4 0 244.663 + 0 4 0 0 6 -5 2 241.635 + 0 4 0 0 2 -3 0 239.626 + 0 4 0 0 7 -3 3 245.386 + 0 4 0 0 2 -2 0 238.158 + 0 4 0 0 6 -3 0 244.91 + 0 4 0 0 1 -1 0 248.692 + 0 4 0 0 4 -1 0 245.655 + 0 4 0 0 1 0 0 249.524 + 0 4 0 0 3 0 0 251.534 + 0 4 0 0 -1 2 1 257.708 + 0 4 0 0 4 0 0 250.94 + 0 4 0 0 6 -2 0 268.905 + 0 4 0 0 0 1 0 265.5 + 0 4 0 0 5 -1 0 278.288 + 0 4 0 0 2 0 0 268.685 + 0 4 0 0 6 -1 2 283.152 + 0 4 0 0 2 1 0 274.871 + 0 4 0 0 5 0 0 276.618 + 0 4 0 0 1 1 0 268.528 + 0 4 0 0 4 1 0 269.359 + 0 4 0 0 0 2 0 267.658 + 0 4 0 0 5 1 2 270.779 + 0 4 0 0 -1 2 4 261.159 + 0 4 0 0 3 2 0 254.808 + 0 4 0 0 -2 4 0 266.959 + 0 4 0 0 3 1 0 257.179 + 0 4 0 0 -1 3 0 251.26 + 0 4 0 0 2 2 0 254.959 + 0 4 0 0 -1 4 0 250.597 + 0 4 0 0 4 2 0 257.298 + 0 4 0 0 -3 6 0 256.899 + 0 4 0 0 3 3 0 255.665 + 0 4 0 0 -2 5 0 259.328 + 0 4 0 0 4 3 3 252.307 + 0 4 0 0 0 3 0 263.506 + 0 4 0 0 2 4 0 256.122 + 0 4 0 0 1 2 0 257.207 + 0 4 0 0 2 3 0 263.754 + 0 4 0 0 1 3 0 265.423 + 0 4 0 0 1 4 0 261.975 + 0 4 0 0 -2 6 5 274.951 + 0 4 0 0 1 5 2 274.205 + 0 4 0 0 -1 6 2 267.117 + 0 4 0 0 0 5 0 281.442 + 0 4 0 0 -1 5 0 267.811 + 0 4 0 0 0 4 0 269.13 + 0 4 0 0 -4 6 5 268.213 + 0 4 0 0 -4 5 0 260.907 + 0 4 0 0 -4 4 0 263.173 + 0 4 0 0 -5 5 0 265.201 + 0 4 0 0 -4 3 0 261.257 + 0 4 0 0 -5 6 2 246.613 + 0 4 0 0 -3 3 0 247.337 + 0 4 0 0 -4 2 0 237.69 + 0 4 0 0 -3 2 0 240.968 + 0 4 0 0 -5 2 0 239.559 + 0 4 0 0 -3 1 0 236.948 + 0 4 0 0 -5 3 0 232.986 + 0 4 0 0 -2 1 0 231.851 + 0 4 0 0 -6 5 2 234.104 + 0 4 0 0 -3 5 0 223.214 + 0 4 0 0 -5 4 0 236.097 + 0 4 0 0 -3 4 0 234.917 + 0 4 0 0 -6 4 0 234.738 + 0 4 0 0 -2 3 0 234.29 + 0 4 0 0 -7 4 3 232.274 + 0 4 0 0 -2 2 0 228.512 + 0 4 0 0 -6 3 0 234.882 + 0 4 0 0 -1 1 0 236.035 + 0 4 0 0 -4 1 0 237.264 + 0 4 0 0 -1 0 0 232.943 + 0 4 0 0 -3 0 0 238.758 + 0 4 0 0 0 0 0 239.681 + 0 4 0 0 -4 0 0 244.904 + 0 4 0 0 1 -2 0 243.68 + 0 4 0 0 -6 2 0 252.943 + 0 4 0 0 0 -1 0 258.041 + 0 4 0 0 -5 1 0 262.78 + 0 4 0 0 -2 0 0 264.356 + 0 4 0 0 -6 1 2 260.588 + 0 4 0 0 -2 -1 0 264.882 + 0 4 0 0 -5 0 0 264.007 + 0 4 0 0 -1 -1 0 260.053 + 0 4 0 0 -4 -1 0 252.99 + 0 4 0 0 0 -2 0 255.036 + 0 4 0 0 -5 -1 2 251.864 + 0 4 0 0 2 -4 1 248.989 + 0 4 0 0 -3 -2 0 246.243 + 0 4 0 0 2 -4 4 249.642 + 0 4 0 0 -3 -1 0 246.34 + 0 4 0 0 1 -3 0 237.727 + 0 4 0 0 -2 -2 0 239.4 + 0 4 0 0 1 -4 0 248.662 + 0 4 0 0 -4 -2 0 245.127 + 0 4 0 0 3 -6 0 236.87 + 0 4 0 0 -3 -3 0 240.266 + 0 4 0 0 2 -5 0 245.196 + 0 4 0 0 -3 -4 3 239.501 + 0 4 0 0 0 -3 0 241.948 + 0 4 0 0 -2 -4 0 248.825 + 0 4 0 0 -1 -2 0 247.042 + 0 4 0 0 -2 -3 0 252.76 + 0 4 0 0 -1 -3 0 254.343 + 0 4 0 0 -1 -4 0 266.645 + 0 4 0 0 3 -7 5 264.122 + 0 4 0 0 -1 -5 2 265.692 + 0 4 0 0 1 -6 2 263.081 + 0 4 0 0 0 -5 0 263.072 + 0 4 0 0 1 -5 0 257.086 + 0 4 0 0 0 -4 0 256.52 + 0 5 0 0 -3 7 5 261.774 + 0 5 0 0 -1 5 0 255.372 + 0 5 0 0 0 4 0 258.298 + 0 5 0 0 0 5 0 251.697 + 0 5 0 0 1 3 0 246.477 + 0 5 0 0 -1 6 2 248.364 + 0 5 0 0 0 3 0 256.933 + 0 5 0 0 2 2 0 244.205 + 0 5 0 0 1 2 0 235.384 + 0 5 0 0 3 2 0 245.597 + 0 5 0 0 2 1 0 236.404 + 0 5 0 0 2 3 0 235.063 + 0 5 0 0 1 1 0 238.095 + 0 5 0 0 1 4 0 236.387 + 0 5 0 0 -2 5 0 232.014 + 0 5 0 0 2 4 0 233.181 + 0 5 0 0 -1 4 0 231.775 + 0 5 0 0 1 5 2 236.312 + 0 5 0 0 -1 3 0 237.805 + 0 5 0 0 4 3 3 244.942 + 0 5 0 0 0 2 0 236.689 + 0 5 0 0 3 3 0 233.614 + 0 5 0 0 0 1 0 234.722 + 0 5 0 0 3 1 0 242.593 + 0 5 0 0 1 0 0 245.573 + 0 5 0 0 3 0 0 244.153 + 0 5 0 0 1 -2 1 254.061 + 0 5 0 0 4 0 0 243.728 + 0 5 0 0 4 2 0 256.981 + 0 5 0 0 1 -1 0 263.219 + 0 5 0 0 4 1 0 264.723 + 0 5 0 0 2 0 0 266.473 + 0 5 0 0 5 1 2 266.738 + 0 5 0 0 3 -1 0 264.505 + 0 5 0 0 5 0 0 266.883 + 0 5 0 0 2 -1 0 264.039 + 0 5 0 0 5 -1 0 256.399 + 0 5 0 0 2 -2 0 249.702 + 0 5 0 0 6 -1 2 250.673 + 0 5 0 0 1 -2 4 250.74 + 0 5 0 0 5 -2 0 247.826 + 0 5 0 0 2 -4 0 238.239 + 0 5 0 0 4 -1 0 245.841 + 0 5 0 0 2 -3 0 247.86 + 0 5 0 0 4 -2 0 242.138 + 0 5 0 0 3 -4 0 246.962 + 0 5 0 0 6 -2 0 242.762 + 0 5 0 0 3 -6 0 236.936 + 0 5 0 0 6 -3 0 242.851 + 0 5 0 0 3 -5 0 242.097 + 0 5 0 0 7 -3 3 241.276 + 0 5 0 0 3 -3 0 241.458 + 0 5 0 0 6 -4 0 252.951 + 0 5 0 0 3 -2 0 245.855 + 0 5 0 0 5 -3 0 247.266 + 0 5 0 0 4 -3 0 250.059 + 0 5 0 0 5 -4 0 248.877 + 0 5 0 0 4 -6 5 254.023 + 0 5 0 0 6 -5 2 260.325 + 0 5 0 0 5 -6 2 264.877 + 0 5 0 0 5 -5 0 262.625 + 0 5 0 0 4 -5 0 271.931 + 0 5 0 0 4 -4 0 262.837 + 0 5 0 0 2 -6 5 271.983 + 0 5 0 0 1 -5 0 266.427 + 0 5 0 0 0 -4 0 273.544 + 0 5 0 0 0 -5 0 255.518 + 0 5 0 0 -1 -3 0 251.357 + 0 5 0 0 1 -6 2 255.998 + 0 5 0 0 0 -3 0 247.035 + 0 5 0 0 -2 -2 0 243.183 + 0 5 0 0 -1 -2 0 238.577 + 0 5 0 0 -3 -2 0 237.082 + 0 5 0 0 -2 -1 0 236.684 + 0 5 0 0 -2 -3 0 238.742 + 0 5 0 0 -1 -1 0 235.97 + 0 5 0 0 -1 -5 2 231.482 + 0 5 0 0 2 -5 0 235.303 + 0 5 0 0 -1 -4 0 234.615 + 0 5 0 0 1 -4 0 233.898 + 0 5 0 0 -2 -4 0 228.914 + 0 5 0 0 1 -3 0 237.025 + 0 5 0 0 -3 -4 3 237.864 + 0 5 0 0 0 -2 0 230.981 + 0 5 0 0 -3 -3 0 227.299 + 0 5 0 0 0 -1 0 236.578 + 0 5 0 0 -3 -1 0 233.248 + 0 5 0 0 -1 0 0 234.437 + 0 5 0 0 -3 0 0 241.042 + 0 5 0 0 0 0 0 248.588 + 0 5 0 0 -4 0 0 245.377 + 0 5 0 0 -1 2 0 251.717 + 0 5 0 0 -4 -2 0 254.022 + 0 5 0 0 -1 1 0 253.312 + 0 5 0 0 -4 -1 0 256.271 + 0 5 0 0 -2 0 0 263.953 + 0 5 0 0 -5 -1 2 265.957 + 0 5 0 0 -3 1 0 266.529 + 0 5 0 0 -5 0 0 259.967 + 0 5 0 0 -2 1 0 254.428 + 0 5 0 0 -5 1 0 259.082 + 0 5 0 0 -2 2 0 252.892 + 0 5 0 0 -6 1 2 245.94 + 0 5 0 0 -2 4 1 241.648 + 0 5 0 0 -5 2 0 240.393 + 0 5 0 0 -2 4 4 236.346 + 0 5 0 0 -4 1 0 241.81 + 0 5 0 0 -2 3 0 241.433 + 0 5 0 0 -4 2 0 234.998 + 0 5 0 0 -3 4 0 242.124 + 0 5 0 0 -6 2 0 237.844 + 0 5 0 0 -3 6 0 242.481 + 0 5 0 0 -6 3 0 234.998 + 0 5 0 0 -3 5 0 238.222 + 0 5 0 0 -7 4 3 240.664 + 0 5 0 0 -3 3 0 245.57 + 0 5 0 0 -6 4 0 249.213 + 0 5 0 0 -3 2 0 245.771 + 0 5 0 0 -5 3 0 250.731 + 0 5 0 0 -4 3 0 253.009 + 0 5 0 0 -5 4 0 261.527 + 0 5 0 0 -4 7 5 258.554 + 0 5 0 0 -6 5 2 263.764 + 0 5 0 0 -5 6 2 263.908 + 0 5 0 0 -5 5 0 262.46 + 0 5 0 0 -4 5 0 264.226 + 0 5 0 0 -4 4 0 258.885 + 0 6 0 0 4 -7 5 262.403 + 0 6 0 0 5 -6 2 263.668 + 0 6 0 0 4 -4 0 254.838 + 0 6 0 0 5 -5 0 254.95 + 0 6 0 0 4 -3 0 249.681 + 0 6 0 0 4 -5 0 249.604 + 0 6 0 0 3 -3 0 241.482 + 0 6 0 0 5 -4 0 239.723 + 0 6 0 0 3 -2 0 239.434 + 0 6 0 0 6 -4 0 234.322 + 0 6 0 0 3 -1 0 236.4 + 0 6 0 0 4 -2 0 236.408 + 0 6 0 0 2 -1 0 237.126 + 0 6 0 0 5 -2 0 238.724 + 0 6 0 0 3 -5 0 235.459 + 0 6 0 0 5 -3 0 236.44 + 0 6 0 0 3 -4 0 234.856 + 0 6 0 0 6 -5 2 230.903 + 0 6 0 0 2 -3 0 229.086 + 0 6 0 0 7 -3 3 229.303 + 0 6 0 0 2 -2 0 234.273 + 0 6 0 0 6 -3 0 235.271 + 0 6 0 0 2 -4 1 233.691 + 0 6 0 0 4 -1 0 244.072 + 0 6 0 0 1 -1 0 234.421 + 0 6 0 0 3 0 0 235.415 + 0 6 0 0 1 0 0 240.953 + 0 6 0 0 4 0 0 244.32 + 0 6 0 0 6 -2 0 254.423 + 0 6 0 0 0 1 0 266.584 + 0 6 0 0 5 -1 0 272.918 + 0 6 0 0 2 0 0 265.93 + 0 6 0 0 6 -1 2 264.529 + 0 6 0 0 2 1 0 262.432 + 0 6 0 0 5 0 0 264.608 + 0 6 0 0 1 1 0 253.248 + 0 6 0 0 4 1 0 260.549 + 0 6 0 0 0 2 0 253.199 + 0 6 0 0 5 1 2 254.82 + 0 6 0 0 -1 2 4 248.48 + 0 6 0 0 3 2 0 246.084 + 0 6 0 0 -2 4 0 244.683 + 0 6 0 0 3 1 0 249.532 + 0 6 0 0 -1 3 0 244.168 + 0 6 0 0 2 2 0 240.906 + 0 6 0 0 -1 4 0 243.678 + 0 6 0 0 4 2 0 242.913 + 0 6 0 0 -3 6 0 239.405 + 0 6 0 0 3 3 0 239.329 + 0 6 0 0 -2 5 0 242.268 + 0 6 0 0 4 3 3 237.978 + 0 6 0 0 0 3 0 249.728 + 0 6 0 0 2 4 0 241.869 + 0 6 0 0 1 2 0 248.066 + 0 6 0 0 2 3 0 254.966 + 0 6 0 0 1 3 0 251.246 + 0 6 0 0 1 4 0 251.928 + 0 6 0 0 -1 5 0 268.517 + 0 6 0 0 1 5 2 255.518 + 0 6 0 0 -2 6 5 268.713 + 0 6 0 0 0 5 0 260.107 + 0 6 0 0 -1 6 2 261.984 + 0 6 0 0 0 4 0 256.712 + 0 6 0 0 -4 6 5 266.018 + 0 6 0 0 -5 6 2 271.293 + 0 6 0 0 -4 4 0 266.903 + 0 6 0 0 -5 5 0 255.877 + 0 6 0 0 -4 3 0 257.392 + 0 6 0 0 -4 5 0 252.107 + 0 6 0 0 -3 3 0 253.077 + 0 6 0 0 -6 5 2 250.347 + 0 6 0 0 -3 2 0 247.151 + 0 6 0 0 -5 4 0 240.475 + 0 6 0 0 -3 1 0 239.758 + 0 6 0 0 -4 2 0 233.605 + 0 6 0 0 -2 1 0 242.097 + 0 6 0 0 -5 2 0 241.349 + 0 6 0 0 -3 5 0 244.184 + 0 6 0 0 -5 3 0 231.752 + 0 6 0 0 -3 4 0 243.357 + 0 6 0 0 -6 4 0 241.06 + 0 6 0 0 -2 3 0 238.357 + 0 6 0 0 -7 4 3 234.764 + 0 6 0 0 -2 2 0 237.607 + 0 6 0 0 -6 3 0 238.406 + 0 6 0 0 -1 2 1 245.876 + 0 6 0 0 -4 1 0 242.411 + 0 6 0 0 -1 1 0 237.444 + 0 6 0 0 -3 0 0 240.524 + 0 6 0 0 -1 0 0 249.897 + 0 6 0 0 -4 0 0 253.556 + 0 6 0 0 0 0 0 252.626 + 0 6 0 0 -6 2 0 262.671 + 0 6 0 0 0 -1 0 278.022 + 0 6 0 0 -5 1 0 268.971 + 0 6 0 0 -2 0 0 263.187 + 0 6 0 0 -6 1 2 263.332 + 0 6 0 0 -2 -1 0 269.991 + 0 6 0 0 -5 0 0 263.985 + 0 6 0 0 -1 -1 0 266.457 + 0 6 0 0 -4 -1 0 269.152 + 0 6 0 0 0 -2 0 256.638 + 0 6 0 0 -5 -1 2 257.588 + 0 6 0 0 1 -2 0 254.94 + 0 6 0 0 -3 -2 0 249.525 + 0 6 0 0 2 -4 4 252.353 + 0 6 0 0 -3 -1 0 249.565 + 0 6 0 0 1 -3 0 252.493 + 0 6 0 0 -2 -2 0 242.89 + 0 6 0 0 1 -4 0 250.974 + 0 6 0 0 -4 -2 0 245.415 + 0 6 0 0 3 -6 0 251.383 + 0 6 0 0 -3 -3 0 250.722 + 0 6 0 0 2 -5 0 250.163 + 0 6 0 0 -4 -3 3 243.688 + 0 6 0 0 0 -3 0 252.64 + 0 6 0 0 -2 -4 0 248.268 + 0 6 0 0 -1 -2 0 260.435 + 0 6 0 0 -2 -3 0 259.385 + 0 6 0 0 -1 -3 0 258.336 + 0 6 0 0 -1 -4 0 257.017 + 0 6 0 0 1 -5 0 265.749 + 0 6 0 0 -1 -5 2 270.847 + 0 6 0 0 2 -6 5 263.384 + 0 6 0 0 0 -5 0 272.178 + 0 6 0 0 1 -6 2 271.197 + 0 6 0 0 0 -4 0 263.435 + 0 7 0 0 -3 7 5 274.387 + 0 7 0 0 -1 5 0 278.076 + 0 7 0 0 0 4 0 268.642 + 0 7 0 0 0 5 0 261.12 + 0 7 0 0 1 3 0 265.134 + 0 7 0 0 -1 6 2 257.582 + 0 7 0 0 0 3 0 246.772 + 0 7 0 0 2 2 0 253.798 + 0 7 0 0 1 2 0 254.239 + 0 7 0 0 3 2 0 246.333 + 0 7 0 0 2 1 0 246.542 + 0 7 0 0 2 3 0 252.947 + 0 7 0 0 1 1 0 245.477 + 0 7 0 0 1 4 0 242.387 + 0 7 0 0 -2 5 0 242.683 + 0 7 0 0 2 4 0 245.506 + 0 7 0 0 -1 4 0 245.996 + 0 7 0 0 1 5 2 246.812 + 0 7 0 0 -1 3 0 247.769 + 0 7 0 0 4 3 3 249.489 + 0 7 0 0 0 2 0 247.368 + 0 7 0 0 3 3 0 245.769 + 0 7 0 0 0 1 0 251.607 + 0 7 0 0 3 1 0 247.212 + 0 7 0 0 1 0 0 250.83 + 0 7 0 0 3 0 0 254.971 + 0 7 0 0 1 -2 1 257.262 + 0 7 0 0 4 0 0 262.42 + 0 7 0 0 4 2 0 266.254 + 0 7 0 0 1 -1 0 268.172 + 0 7 0 0 4 1 0 284.561 + 0 7 0 0 2 0 0 274.678 + 0 7 0 0 5 1 2 278.709 + 0 7 0 0 3 -1 0 282.973 + 0 7 0 0 5 0 0 273.288 + 0 7 0 0 2 -1 0 273.792 + 0 7 0 0 5 -1 0 275.908 + 0 7 0 0 2 -2 0 261.946 + 0 7 0 0 6 -1 2 265.795 + 0 7 0 0 1 -2 4 267.324 + 0 7 0 0 5 -2 0 258.852 + 0 7 0 0 2 -4 0 254.405 + 0 7 0 0 4 -1 0 256.717 + 0 7 0 0 2 -3 0 252.863 + 0 7 0 0 4 -2 0 259.918 + 0 7 0 0 3 -4 0 257.973 + 0 7 0 0 6 -2 0 250.432 + 0 7 0 0 3 -6 0 250.455 + 0 7 0 0 6 -3 0 249.95 + 0 7 0 0 3 -5 0 250.552 + 0 7 0 0 7 -3 3 256.285 + 0 7 0 0 3 -3 0 253.268 + 0 7 0 0 6 -4 0 262.145 + 0 7 0 0 3 -2 0 262.234 + 0 7 0 0 5 -3 0 260.912 + 0 7 0 0 4 -3 0 266.108 + 0 7 0 0 5 -4 0 268.413 + 0 7 0 0 4 -6 5 271.475 + 0 7 0 0 6 -5 2 265.078 + 0 7 0 0 5 -6 2 277.742 + 0 7 0 0 5 -5 0 273.337 + 0 7 0 0 4 -5 0 267.867 + 0 7 0 0 4 -4 0 266.473 + 0 7 0 0 2 -6 5 283.598 + 0 7 0 0 1 -5 0 279.072 + 0 7 0 0 0 -4 0 277.898 + 0 7 0 0 0 -5 0 278.938 + 0 7 0 0 -1 -3 0 272.296 + 0 7 0 0 1 -6 2 268.648 + 0 7 0 0 0 -3 0 253.938 + 0 7 0 0 -2 -2 0 258.265 + 0 7 0 0 -1 -2 0 259.646 + 0 7 0 0 -3 -2 0 256.072 + 0 7 0 0 -2 -1 0 257.449 + 0 7 0 0 -2 -3 0 249.371 + 0 7 0 0 -1 -1 0 247.419 + 0 7 0 0 -1 -5 2 248.096 + 0 7 0 0 2 -5 0 253.906 + 0 7 0 0 -1 -4 0 251.907 + 0 7 0 0 1 -4 0 245.847 + 0 7 0 0 -2 -4 0 247.281 + 0 7 0 0 1 -3 0 252.56 + 0 7 0 0 -3 -4 3 249.416 + 0 7 0 0 0 -2 0 250.011 + 0 7 0 0 -3 -3 0 256.25 + 0 7 0 0 0 -1 0 257.192 + 0 7 0 0 -3 -1 0 256.651 + 0 7 0 0 -1 0 0 262.595 + 0 7 0 0 -3 0 0 257.233 + 0 7 0 0 0 0 0 258.589 + 0 7 0 0 -4 0 0 264.885 + 0 7 0 0 -1 2 0 269.034 + 0 7 0 0 -4 -2 0 275.572 + 0 7 0 0 -1 1 0 282.377 + 0 7 0 0 -4 -1 0 282.979 + 0 7 0 0 -2 0 0 283.227 + 0 7 0 0 -5 -1 2 283.916 + 0 7 0 0 -3 1 0 290.765 + 0 7 0 0 -5 0 0 287.784 + 0 7 0 0 -2 1 0 279.7 + 0 7 0 0 -5 1 0 278.457 + 0 7 0 0 -2 2 0 278.493 + 0 7 0 0 -6 1 2 269.481 + 0 7 0 0 -2 4 1 274.385 + 0 7 0 0 -5 2 0 267.568 + 0 7 0 0 -2 4 4 261.759 + 0 7 0 0 -4 1 0 261.767 + 0 7 0 0 -2 3 0 260.923 + 0 7 0 0 -4 2 0 260.976 + 0 7 0 0 -3 4 0 261.946 + 0 7 0 0 -6 2 0 260.787 + 0 7 0 0 -3 6 0 257.082 + 0 7 0 0 -6 3 0 259.731 + 0 7 0 0 -3 5 0 260.081 + 0 7 0 0 -7 4 3 259.682 + 0 7 0 0 -3 3 0 263.925 + 0 7 0 0 -6 4 0 268.811 + 0 7 0 0 -3 2 0 265.634 + 0 7 0 0 -5 3 0 260.902 + 0 7 0 0 -4 3 0 268.169 + 0 7 0 0 -5 4 0 268.723 + 0 7 0 0 -4 7 5 277.233 + 0 7 0 0 -6 5 2 280.276 + 0 7 0 0 -5 6 2 282.137 + 0 7 0 0 -5 5 0 276.85 + 0 7 0 0 -4 5 0 283.106 + 0 7 0 0 -4 4 0 281.57 + 0 8 0 0 4 -7 5 280.192 + 0 8 0 0 4 -5 0 278.254 + 0 8 0 0 4 -4 0 276.296 + 0 8 0 0 5 -5 0 278.277 + 0 8 0 0 4 -3 0 273.548 + 0 8 0 0 5 -6 2 267.902 + 0 8 0 0 3 -3 0 266.354 + 0 8 0 0 4 -2 0 262.096 + 0 8 0 0 3 -2 0 260.419 + 0 8 0 0 5 -2 0 257.048 + 0 8 0 0 3 -1 0 254.902 + 0 8 0 0 5 -3 0 253.921 + 0 8 0 0 2 -1 0 255.952 + 0 8 0 0 5 -4 0 253.849 + 0 8 0 0 3 -5 0 248.278 + 0 8 0 0 6 -4 0 248.173 + 0 8 0 0 3 -4 0 251.944 + 0 8 0 0 6 -5 2 250.943 + 0 8 0 0 2 -3 0 249.491 + 0 8 0 0 7 -3 3 254.893 + 0 8 0 0 2 -2 0 256.348 + 0 8 0 0 6 -3 0 250.148 + 0 8 0 0 1 -1 0 260.396 + 0 8 0 0 4 -1 0 255.989 + 0 8 0 0 1 0 0 256.314 + 0 8 0 0 3 0 0 264.495 + 0 8 0 0 -1 2 1 265.294 + 0 8 0 0 4 0 0 271.755 + 0 8 0 0 6 -2 0 268.556 + 0 8 0 0 0 1 0 277.739 + 0 8 0 0 5 -1 0 283.78 + 0 8 0 0 2 0 0 285.743 + 0 8 0 0 6 -1 2 296.467 + 0 8 0 0 2 1 0 282.694 + 0 8 0 0 5 0 0 285.735 + 0 8 0 0 1 1 0 286.784 + 0 8 0 0 4 1 0 275.34 + 0 8 0 0 0 2 0 276.373 + 0 8 0 0 5 1 2 276.772 + 0 8 0 0 -1 2 4 272.396 + 0 8 0 0 3 2 0 269.23 + 0 8 0 0 -2 4 0 267.397 + 0 8 0 0 3 1 0 271.047 + 0 8 0 0 -1 3 0 261.825 + 0 8 0 0 2 2 0 266.228 + 0 8 0 0 -1 4 0 272.257 + 0 8 0 0 4 2 0 272.613 + 0 8 0 0 -3 6 0 261.854 + 0 8 0 0 3 3 0 259.573 + 0 8 0 0 -2 5 0 266.399 + 0 8 0 0 4 3 3 269.019 + 0 8 0 0 0 3 0 268.627 + 0 8 0 0 2 4 0 272.096 + 0 8 0 0 1 2 0 266.071 + 0 8 0 0 2 3 0 272.983 + 0 8 0 0 1 3 0 275.741 + 0 8 0 0 1 4 0 274.679 + 0 8 0 0 -2 6 5 282.468 + 0 8 0 0 1 5 2 285.235 + 0 8 0 0 -1 6 2 289.116 + 0 8 0 0 0 5 0 286.701 + 0 8 0 0 -1 5 0 281.342 + 0 8 0 0 0 4 0 283.845 + 0 8 0 0 -4 6 5 258.495 + 0 8 0 0 -4 5 0 267.493 + 0 8 0 0 -4 4 0 256.726 + 0 8 0 0 -5 5 0 257.236 + 0 8 0 0 -4 3 0 254.797 + 0 8 0 0 -5 6 2 245.57 + 0 8 0 0 -3 3 0 244.863 + 0 8 0 0 -4 2 0 240.292 + 0 8 0 0 -3 2 0 240.973 + 0 8 0 0 -5 2 0 238.745 + 0 8 0 0 -3 1 0 236.407 + 0 8 0 0 -5 3 0 225.593 + 0 8 0 0 -2 1 0 231.537 + 0 8 0 0 -6 5 2 231.654 + 0 8 0 0 -3 5 0 228.352 + 0 8 0 0 -5 4 0 233.48 + 0 8 0 0 -3 4 0 229.199 + 0 8 0 0 -6 4 0 236.977 + 0 8 0 0 -2 3 0 231.797 + 0 8 0 0 -7 4 3 229.663 + 0 8 0 0 -2 2 0 231.722 + 0 8 0 0 -6 3 0 231.195 + 0 8 0 0 -1 1 0 228.736 + 0 8 0 0 -4 1 0 234.234 + 0 8 0 0 -1 0 0 237.425 + 0 8 0 0 -3 0 0 235.702 + 0 8 0 0 0 0 0 248.577 + 0 8 0 0 -4 0 0 240.417 + 0 8 0 0 1 -2 0 246.662 + 0 8 0 0 -6 2 0 254.881 + 0 8 0 0 0 -1 0 252.598 + 0 8 0 0 -5 1 0 256.692 + 0 8 0 0 -2 0 0 255.468 + 0 8 0 0 -6 1 2 265.048 + 0 8 0 0 -2 -1 0 263.546 + 0 8 0 0 -5 0 0 250.39 + 0 8 0 0 -1 -1 0 256.139 + 0 8 0 0 -4 -1 0 259.343 + 0 8 0 0 0 -2 0 244.092 + 0 8 0 0 -5 -1 2 240.156 + 0 8 0 0 2 -4 1 239.252 + 0 8 0 0 -3 -2 0 236.992 + 0 8 0 0 2 -4 4 239.438 + 0 8 0 0 -3 -1 0 242.027 + 0 8 0 0 1 -3 0 244.416 + 0 8 0 0 -2 -2 0 234.688 + 0 8 0 0 1 -4 0 233.558 + 0 8 0 0 -4 -2 0 229.446 + 0 8 0 0 3 -6 0 230.738 + 0 8 0 0 -3 -3 0 242.887 + 0 8 0 0 2 -5 0 227.229 + 0 8 0 0 -3 -4 3 232.158 + 0 8 0 0 0 -3 0 238.005 + 0 8 0 0 -2 -4 0 239.723 + 0 8 0 0 -1 -2 0 245.881 + 0 8 0 0 -2 -3 0 243.58 + 0 8 0 0 -1 -3 0 239.992 + 0 8 0 0 -1 -4 0 244.353 + 0 8 0 0 3 -7 5 245.26 + 0 8 0 0 -1 -5 2 253.538 + 0 8 0 0 1 -6 2 249.856 + 0 8 0 0 0 -5 0 256.842 + 0 8 0 0 1 -5 0 249.354 + 0 8 0 0 0 -4 0 257.281 diff --git a/CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt b/CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt new file mode 100644 index 0000000..f50a904 --- /dev/null +++ b/CondObjects/data/PED_LowGain_L8_RN1024_cfg1.txt @@ -0,0 +1,1018 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 4 -7 5 268.158 + 0 1 0 0 4 -5 0 265.576 + 0 1 0 0 4 -4 0 260.838 + 0 1 0 0 5 -5 0 256.276 + 0 1 0 0 4 -3 0 250.518 + 0 1 0 0 5 -6 2 252.865 + 0 1 0 0 3 -3 0 249.482 + 0 1 0 0 4 -2 0 246.178 + 0 1 0 0 3 -2 0 247.428 + 0 1 0 0 5 -2 0 249.743 + 0 1 0 0 3 -1 0 253.52 + 0 1 0 0 5 -3 0 239.258 + 0 1 0 0 2 -1 0 243.812 + 0 1 0 0 5 -4 0 244.674 + 0 1 0 0 3 -5 0 247.349 + 0 1 0 0 6 -4 0 242.646 + 0 1 0 0 3 -4 0 243.211 + 0 1 0 0 6 -5 2 239.08 + 0 1 0 0 2 -3 0 246 + 0 1 0 0 7 -3 3 246.6 + 0 1 0 0 2 -2 0 241.4 + 0 1 0 0 6 -3 0 247.087 + 0 1 0 0 1 -1 0 236.258 + 0 1 0 0 4 -1 0 239.667 + 0 1 0 0 1 0 0 252.553 + 0 1 0 0 3 0 0 257.076 + 0 1 0 0 -1 2 1 254.515 + 0 1 0 0 4 0 0 260.417 + 0 1 0 0 6 -2 0 262.202 + 0 1 0 0 0 1 0 264.086 + 0 1 0 0 5 -1 0 275.812 + 0 1 0 0 2 0 0 264.939 + 0 1 0 0 6 -1 2 274.592 + 0 1 0 0 2 1 0 276.059 + 0 1 0 0 5 0 0 265.44 + 0 1 0 0 1 1 0 272.49 + 0 1 0 0 4 1 0 261.965 + 0 1 0 0 0 2 0 262.048 + 0 1 0 0 5 1 2 258.191 + 0 1 0 0 -1 2 4 249.127 + 0 1 0 0 3 2 0 256.762 + 0 1 0 0 -2 4 0 263.864 + 0 1 0 0 3 1 0 250.977 + 0 1 0 0 -1 3 0 253.604 + 0 1 0 0 2 2 0 252.843 + 0 1 0 0 -1 4 0 250.112 + 0 1 0 0 4 2 0 249.538 + 0 1 0 0 -3 6 0 256.712 + 0 1 0 0 3 3 0 251.79 + 0 1 0 0 -2 5 0 255.934 + 0 1 0 0 4 3 3 260.401 + 0 1 0 0 0 3 0 269.526 + 0 1 0 0 2 4 0 261.122 + 0 1 0 0 1 2 0 268.3 + 0 1 0 0 2 3 0 272.548 + 0 1 0 0 1 3 0 264.114 + 0 1 0 0 1 4 0 267.962 + 0 1 0 0 -2 6 5 271.95 + 0 1 0 0 1 5 2 265.413 + 0 1 0 0 -1 6 2 269.522 + 0 1 0 0 0 5 0 266.061 + 0 1 0 0 -1 5 0 264.328 + 0 1 0 0 0 4 0 260.703 + 0 1 0 0 -4 6 5 277.083 + 0 1 0 0 -4 5 0 275.985 + 0 1 0 0 -4 4 0 271.335 + 0 1 0 0 -5 5 0 272.337 + 0 1 0 0 -4 3 0 264.244 + 0 1 0 0 -5 6 2 264.187 + 0 1 0 0 -3 3 0 258.041 + 0 1 0 0 -4 2 0 258.493 + 0 1 0 0 -3 2 0 255.162 + 0 1 0 0 -5 2 0 252.238 + 0 1 0 0 -3 1 0 252.795 + 0 1 0 0 -5 3 0 250.607 + 0 1 0 0 -2 1 0 240.952 + 0 1 0 0 -6 5 2 250.878 + 0 1 0 0 -3 5 0 251.192 + 0 1 0 0 -5 4 0 252.982 + 0 1 0 0 -3 4 0 239.012 + 0 1 0 0 -6 4 0 253.125 + 0 1 0 0 -2 3 0 238.606 + 0 1 0 0 -7 4 3 248.491 + 0 1 0 0 -2 2 0 246.034 + 0 1 0 0 -6 3 0 250.488 + 0 1 0 0 -1 1 0 248.949 + 0 1 0 0 -4 1 0 252.705 + 0 1 0 0 -1 0 0 250.002 + 0 1 0 0 -3 0 0 253.696 + 0 1 0 0 0 0 0 255.208 + 0 1 0 0 -4 0 0 260.869 + 0 1 0 0 1 -2 0 261.56 + 0 1 0 0 -6 2 0 262.889 + 0 1 0 0 0 -1 0 276.832 + 0 1 0 0 -5 1 0 272.109 + 0 1 0 0 -2 0 0 280.949 + 0 1 0 0 -6 1 2 282.129 + 0 1 0 0 -2 -1 0 282.724 + 0 1 0 0 -5 0 0 276.506 + 0 1 0 0 -1 -1 0 276.022 + 0 1 0 0 -4 -1 0 267.07 + 0 1 0 0 0 -2 0 268.279 + 0 1 0 0 -5 -1 2 264.919 + 0 1 0 0 2 -4 1 260.336 + 0 1 0 0 -3 -2 0 261.478 + 0 1 0 0 2 -4 4 256.304 + 0 1 0 0 -3 -1 0 260.665 + 0 1 0 0 1 -3 0 256.073 + 0 1 0 0 -2 -2 0 263.103 + 0 1 0 0 1 -4 0 260.736 + 0 1 0 0 -4 -2 0 256.516 + 0 1 0 0 3 -6 0 255.529 + 0 1 0 0 -3 -3 0 250.951 + 0 1 0 0 2 -5 0 260.225 + 0 1 0 0 -3 -4 3 252.442 + 0 1 0 0 0 -3 0 258.968 + 0 1 0 0 -2 -4 0 255.813 + 0 1 0 0 -1 -2 0 262.505 + 0 1 0 0 -2 -3 0 263.35 + 0 1 0 0 -1 -3 0 262.079 + 0 1 0 0 -1 -4 0 269.822 + 0 1 0 0 3 -7 5 267.034 + 0 1 0 0 -1 -5 2 278.372 + 0 1 0 0 1 -6 2 280.983 + 0 1 0 0 0 -5 0 272.678 + 0 1 0 0 1 -5 0 271.965 + 0 1 0 0 0 -4 0 274.423 + 0 2 0 0 4 -7 5 267.203 + 0 2 0 0 4 -5 0 260.144 + 0 2 0 0 4 -4 0 259.303 + 0 2 0 0 5 -5 0 258.504 + 0 2 0 0 4 -3 0 251.78 + 0 2 0 0 5 -6 2 251.311 + 0 2 0 0 3 -3 0 245.428 + 0 2 0 0 4 -2 0 248.659 + 0 2 0 0 3 -2 0 251.222 + 0 2 0 0 5 -2 0 245.007 + 0 2 0 0 3 -1 0 243.451 + 0 2 0 0 5 -3 0 243.523 + 0 2 0 0 2 -1 0 243.22 + 0 2 0 0 5 -4 0 241.811 + 0 2 0 0 3 -5 0 234.958 + 0 2 0 0 6 -4 0 238.153 + 0 2 0 0 3 -4 0 242.865 + 0 2 0 0 6 -5 2 241.849 + 0 2 0 0 2 -3 0 243.602 + 0 2 0 0 7 -3 3 243.953 + 0 2 0 0 2 -2 0 238.714 + 0 2 0 0 6 -3 0 232.417 + 0 2 0 0 1 -1 0 237.431 + 0 2 0 0 4 -1 0 239.243 + 0 2 0 0 1 0 0 241.412 + 0 2 0 0 3 0 0 247.52 + 0 2 0 0 -1 2 1 246.118 + 0 2 0 0 4 0 0 253.937 + 0 2 0 0 6 -2 0 256.022 + 0 2 0 0 0 1 0 262.147 + 0 2 0 0 5 -1 0 261.55 + 0 2 0 0 2 0 0 264.486 + 0 2 0 0 6 -1 2 265.706 + 0 2 0 0 2 1 0 259.381 + 0 2 0 0 5 0 0 260.877 + 0 2 0 0 1 1 0 267.462 + 0 2 0 0 4 1 0 261.708 + 0 2 0 0 0 2 0 262.184 + 0 2 0 0 5 1 2 253.087 + 0 2 0 0 -1 2 4 251.081 + 0 2 0 0 3 2 0 251.077 + 0 2 0 0 -2 4 0 242.337 + 0 2 0 0 3 1 0 246.01 + 0 2 0 0 -1 3 0 242.592 + 0 2 0 0 2 2 0 244.703 + 0 2 0 0 -1 4 0 246.585 + 0 2 0 0 4 2 0 236.419 + 0 2 0 0 -3 6 0 241.309 + 0 2 0 0 3 3 0 249.422 + 0 2 0 0 -2 5 0 240.568 + 0 2 0 0 4 3 3 248.217 + 0 2 0 0 0 3 0 247.433 + 0 2 0 0 2 4 0 257.482 + 0 2 0 0 1 2 0 247.984 + 0 2 0 0 2 3 0 248.833 + 0 2 0 0 1 3 0 255.039 + 0 2 0 0 1 4 0 252.474 + 0 2 0 0 -2 6 5 260.922 + 0 2 0 0 1 5 2 263.649 + 0 2 0 0 -1 6 2 258.952 + 0 2 0 0 0 5 0 259.27 + 0 2 0 0 -1 5 0 256.363 + 0 2 0 0 0 4 0 258.095 + 0 2 0 0 -4 6 5 304.795 + 0 2 0 0 -4 5 0 312.176 + 0 2 0 0 -4 4 0 302.234 + 0 2 0 0 -5 5 0 301.079 + 0 2 0 0 -4 3 0 297.283 + 0 2 0 0 -5 6 2 285.782 + 0 2 0 0 -3 3 0 282.074 + 0 2 0 0 -4 2 0 288.173 + 0 2 0 0 -3 2 0 292.646 + 0 2 0 0 -5 2 0 288.543 + 0 2 0 0 -3 1 0 276.795 + 0 2 0 0 -5 3 0 279.675 + 0 2 0 0 -2 1 0 281.943 + 0 2 0 0 -6 5 2 276.072 + 0 2 0 0 -3 5 0 280.987 + 0 2 0 0 -5 4 0 279.686 + 0 2 0 0 -3 4 0 273.546 + 0 2 0 0 -6 4 0 277.57 + 0 2 0 0 -2 3 0 279.817 + 0 2 0 0 -7 4 3 275.89 + 0 2 0 0 -2 2 0 284.467 + 0 2 0 0 -6 3 0 279.572 + 0 2 0 0 -1 1 0 278.517 + 0 2 0 0 -4 1 0 286.054 + 0 2 0 0 -1 0 0 284.701 + 0 2 0 0 -3 0 0 289.171 + 0 2 0 0 0 0 0 288.439 + 0 2 0 0 -4 0 0 285.603 + 0 2 0 0 1 -2 0 302.483 + 0 2 0 0 -6 2 0 301.022 + 0 2 0 0 0 -1 0 306.548 + 0 2 0 0 -5 1 0 308.318 + 0 2 0 0 -2 0 0 297.947 + 0 2 0 0 -6 1 2 309.561 + 0 2 0 0 -2 -1 0 310.301 + 0 2 0 0 -5 0 0 301.892 + 0 2 0 0 -1 -1 0 299.278 + 0 2 0 0 -4 -1 0 298.406 + 0 2 0 0 0 -2 0 300.147 + 0 2 0 0 -5 -1 2 292.808 + 0 2 0 0 2 -4 1 293.322 + 0 2 0 0 -3 -2 0 283.007 + 0 2 0 0 2 -4 4 286.825 + 0 2 0 0 -3 -1 0 289.13 + 0 2 0 0 1 -3 0 279.072 + 0 2 0 0 -2 -2 0 288.602 + 0 2 0 0 1 -4 0 289.97 + 0 2 0 0 -4 -2 0 282.423 + 0 2 0 0 3 -6 0 290.832 + 0 2 0 0 -3 -3 0 286.678 + 0 2 0 0 2 -5 0 284.002 + 0 2 0 0 -3 -4 3 285.64 + 0 2 0 0 0 -3 0 276.447 + 0 2 0 0 -2 -4 0 281.561 + 0 2 0 0 -1 -2 0 291.049 + 0 2 0 0 -2 -3 0 294.514 + 0 2 0 0 -1 -3 0 291.716 + 0 2 0 0 -1 -4 0 295.413 + 0 2 0 0 3 -7 5 295.038 + 0 2 0 0 -1 -5 2 295.69 + 0 2 0 0 1 -6 2 303.167 + 0 2 0 0 0 -5 0 303.776 + 0 2 0 0 1 -5 0 304.821 + 0 2 0 0 0 -4 0 304.462 + 0 3 0 0 4 -7 5 282 + 0 3 0 0 4 -5 0 284.517 + 0 3 0 0 4 -4 0 284.527 + 0 3 0 0 5 -5 0 281.053 + 0 3 0 0 4 -3 0 286.408 + 0 3 0 0 5 -6 2 281.975 + 0 3 0 0 3 -3 0 275.814 + 0 3 0 0 4 -2 0 274.201 + 0 3 0 0 3 -2 0 276.545 + 0 3 0 0 5 -2 0 270.253 + 0 3 0 0 3 -1 0 269.098 + 0 3 0 0 5 -3 0 262.42 + 0 3 0 0 2 -1 0 257.493 + 0 3 0 0 5 -4 0 266.267 + 0 3 0 0 3 -5 0 260.932 + 0 3 0 0 6 -4 0 266.341 + 0 3 0 0 3 -4 0 267.337 + 0 3 0 0 6 -5 2 256.125 + 0 3 0 0 2 -3 0 264.759 + 0 3 0 0 7 -3 3 260.596 + 0 3 0 0 2 -2 0 268.942 + 0 3 0 0 6 -3 0 261.717 + 0 3 0 0 1 -1 0 261.515 + 0 3 0 0 4 -1 0 262.956 + 0 3 0 0 1 0 0 270.853 + 0 3 0 0 3 0 0 278.666 + 0 3 0 0 -1 2 1 262.522 + 0 3 0 0 4 0 0 271.418 + 0 3 0 0 6 -2 0 289.995 + 0 3 0 0 0 1 0 286.951 + 0 3 0 0 5 -1 0 280.477 + 0 3 0 0 2 0 0 287.736 + 0 3 0 0 6 -1 2 295.834 + 0 3 0 0 2 1 0 295.008 + 0 3 0 0 5 0 0 286.239 + 0 3 0 0 1 1 0 274.6 + 0 3 0 0 4 1 0 273.668 + 0 3 0 0 0 2 0 273.873 + 0 3 0 0 5 1 2 277.077 + 0 3 0 0 -1 2 4 271.647 + 0 3 0 0 3 2 0 255.609 + 0 3 0 0 -2 4 0 264.504 + 0 3 0 0 3 1 0 262.682 + 0 3 0 0 -1 3 0 259.863 + 0 3 0 0 2 2 0 252.764 + 0 3 0 0 -1 4 0 266.858 + 0 3 0 0 4 2 0 254.773 + 0 3 0 0 -3 6 0 253.337 + 0 3 0 0 3 3 0 266.882 + 0 3 0 0 -2 5 0 255.317 + 0 3 0 0 4 3 3 256.044 + 0 3 0 0 0 3 0 258.678 + 0 3 0 0 2 4 0 266.413 + 0 3 0 0 1 2 0 258.912 + 0 3 0 0 2 3 0 262.551 + 0 3 0 0 1 3 0 259.708 + 0 3 0 0 1 4 0 273.407 + 0 3 0 0 -2 6 5 273.217 + 0 3 0 0 1 5 2 277.378 + 0 3 0 0 -1 6 2 276.813 + 0 3 0 0 0 5 0 283.708 + 0 3 0 0 -1 5 0 286.596 + 0 3 0 0 0 4 0 279.8 + 0 3 0 0 -4 6 5 286.83 + 0 3 0 0 -4 5 0 283.974 + 0 3 0 0 -4 4 0 283.618 + 0 3 0 0 -5 5 0 285.032 + 0 3 0 0 -4 3 0 273.877 + 0 3 0 0 -5 6 2 272.59 + 0 3 0 0 -3 3 0 267.059 + 0 3 0 0 -4 2 0 260.097 + 0 3 0 0 -3 2 0 267.19 + 0 3 0 0 -5 2 0 265.822 + 0 3 0 0 -3 1 0 264.998 + 0 3 0 0 -5 3 0 267.651 + 0 3 0 0 -2 1 0 271.332 + 0 3 0 0 -6 5 2 262.322 + 0 3 0 0 -3 5 0 260.723 + 0 3 0 0 -5 4 0 265.429 + 0 3 0 0 -3 4 0 256.636 + 0 3 0 0 -6 4 0 263.394 + 0 3 0 0 -2 3 0 263.664 + 0 3 0 0 -7 4 3 259.894 + 0 3 0 0 -2 2 0 255.228 + 0 3 0 0 -6 3 0 265.782 + 0 3 0 0 -1 1 0 270.327 + 0 3 0 0 -4 1 0 268.608 + 0 3 0 0 -1 0 0 268.858 + 0 3 0 0 -3 0 0 262.892 + 0 3 0 0 0 0 0 279.445 + 0 3 0 0 -4 0 0 272.435 + 0 3 0 0 1 -2 0 280.923 + 0 3 0 0 -6 2 0 279.966 + 0 3 0 0 0 -1 0 279.955 + 0 3 0 0 -5 1 0 290.638 + 0 3 0 0 -2 0 0 289.957 + 0 3 0 0 -6 1 2 293.013 + 0 3 0 0 -2 -1 0 297.053 + 0 3 0 0 -5 0 0 288.677 + 0 3 0 0 -1 -1 0 287.913 + 0 3 0 0 -4 -1 0 281.03 + 0 3 0 0 0 -2 0 278.221 + 0 3 0 0 -5 -1 2 275.127 + 0 3 0 0 2 -4 1 283.928 + 0 3 0 0 -3 -2 0 275.22 + 0 3 0 0 2 -4 4 270.041 + 0 3 0 0 -3 -1 0 267.748 + 0 3 0 0 1 -3 0 269.53 + 0 3 0 0 -2 -2 0 265.298 + 0 3 0 0 1 -4 0 271.956 + 0 3 0 0 -4 -2 0 268.231 + 0 3 0 0 3 -6 0 262.268 + 0 3 0 0 -3 -3 0 265.166 + 0 3 0 0 2 -5 0 272.816 + 0 3 0 0 -3 -4 3 266.096 + 0 3 0 0 0 -3 0 267.592 + 0 3 0 0 -2 -4 0 274.07 + 0 3 0 0 -1 -2 0 267.137 + 0 3 0 0 -2 -3 0 268.099 + 0 3 0 0 -1 -3 0 267.898 + 0 3 0 0 -1 -4 0 286.123 + 0 3 0 0 3 -7 5 286.429 + 0 3 0 0 -1 -5 2 284.407 + 0 3 0 0 1 -6 2 285.563 + 0 3 0 0 0 -5 0 291.705 + 0 3 0 0 1 -5 0 291.959 + 0 3 0 0 0 -4 0 283.875 + 0 4 0 0 4 -7 5 278.538 + 0 4 0 0 4 -5 0 269.505 + 0 4 0 0 4 -4 0 266.991 + 0 4 0 0 5 -5 0 259.939 + 0 4 0 0 4 -3 0 265.032 + 0 4 0 0 5 -6 2 261.213 + 0 4 0 0 3 -3 0 258.902 + 0 4 0 0 4 -2 0 264.433 + 0 4 0 0 3 -2 0 257.194 + 0 4 0 0 5 -2 0 251.82 + 0 4 0 0 3 -1 0 251.282 + 0 4 0 0 5 -3 0 250.509 + 0 4 0 0 2 -1 0 251.697 + 0 4 0 0 5 -4 0 248.484 + 0 4 0 0 3 -5 0 252.993 + 0 4 0 0 6 -4 0 252.958 + 0 4 0 0 3 -4 0 255.141 + 0 4 0 0 6 -5 2 246.455 + 0 4 0 0 2 -3 0 244.792 + 0 4 0 0 7 -3 3 253.074 + 0 4 0 0 2 -2 0 247.216 + 0 4 0 0 6 -3 0 249.968 + 0 4 0 0 1 -1 0 245.653 + 0 4 0 0 4 -1 0 256.796 + 0 4 0 0 1 0 0 254.983 + 0 4 0 0 3 0 0 258.215 + 0 4 0 0 -1 2 1 255.059 + 0 4 0 0 4 0 0 259.613 + 0 4 0 0 6 -2 0 268.986 + 0 4 0 0 0 1 0 270.842 + 0 4 0 0 5 -1 0 269.022 + 0 4 0 0 2 0 0 276.436 + 0 4 0 0 6 -1 2 283.301 + 0 4 0 0 2 1 0 278.673 + 0 4 0 0 5 0 0 276.155 + 0 4 0 0 1 1 0 275.318 + 0 4 0 0 4 1 0 275.677 + 0 4 0 0 0 2 0 264.68 + 0 4 0 0 5 1 2 269.709 + 0 4 0 0 -1 2 4 262.257 + 0 4 0 0 3 2 0 262.777 + 0 4 0 0 -2 4 0 259.338 + 0 4 0 0 3 1 0 253.395 + 0 4 0 0 -1 3 0 256.924 + 0 4 0 0 2 2 0 250.262 + 0 4 0 0 -1 4 0 260.083 + 0 4 0 0 4 2 0 261.969 + 0 4 0 0 -3 6 0 256.842 + 0 4 0 0 3 3 0 264.29 + 0 4 0 0 -2 5 0 273.02 + 0 4 0 0 4 3 3 262.337 + 0 4 0 0 0 3 0 265.664 + 0 4 0 0 2 4 0 263.313 + 0 4 0 0 1 2 0 266.596 + 0 4 0 0 2 3 0 268.072 + 0 4 0 0 1 3 0 266.813 + 0 4 0 0 1 4 0 281.825 + 0 4 0 0 -2 6 5 271.985 + 0 4 0 0 1 5 2 275.732 + 0 4 0 0 -1 6 2 278.551 + 0 4 0 0 0 5 0 276.046 + 0 4 0 0 -1 5 0 270.734 + 0 4 0 0 0 4 0 274.126 + 0 4 0 0 -4 6 5 271.86 + 0 4 0 0 -4 5 0 262.788 + 0 4 0 0 -4 4 0 271.728 + 0 4 0 0 -5 5 0 262.873 + 0 4 0 0 -4 3 0 263.827 + 0 4 0 0 -5 6 2 257.581 + 0 4 0 0 -3 3 0 255.661 + 0 4 0 0 -4 2 0 245.287 + 0 4 0 0 -3 2 0 247.509 + 0 4 0 0 -5 2 0 246.502 + 0 4 0 0 -3 1 0 249.117 + 0 4 0 0 -5 3 0 246.413 + 0 4 0 0 -2 1 0 248.841 + 0 4 0 0 -6 5 2 240.029 + 0 4 0 0 -3 5 0 245.942 + 0 4 0 0 -5 4 0 243.019 + 0 4 0 0 -3 4 0 245.83 + 0 4 0 0 -6 4 0 233.11 + 0 4 0 0 -2 3 0 248.498 + 0 4 0 0 -7 4 3 248.945 + 0 4 0 0 -2 2 0 251.458 + 0 4 0 0 -6 3 0 242.867 + 0 4 0 0 -1 1 0 237.938 + 0 4 0 0 -4 1 0 246.668 + 0 4 0 0 -1 0 0 252.98 + 0 4 0 0 -3 0 0 248.181 + 0 4 0 0 0 0 0 248.666 + 0 4 0 0 -4 0 0 254.288 + 0 4 0 0 1 -2 0 255.018 + 0 4 0 0 -6 2 0 251.863 + 0 4 0 0 0 -1 0 266.708 + 0 4 0 0 -5 1 0 265.351 + 0 4 0 0 -2 0 0 271.011 + 0 4 0 0 -6 1 2 268.609 + 0 4 0 0 -2 -1 0 271.673 + 0 4 0 0 -5 0 0 264.243 + 0 4 0 0 -1 -1 0 267.314 + 0 4 0 0 -4 -1 0 261.407 + 0 4 0 0 0 -2 0 260.472 + 0 4 0 0 -5 -1 2 259.275 + 0 4 0 0 2 -4 1 254.839 + 0 4 0 0 -3 -2 0 252.898 + 0 4 0 0 2 -4 4 255.927 + 0 4 0 0 -3 -1 0 249.196 + 0 4 0 0 1 -3 0 250.924 + 0 4 0 0 -2 -2 0 253.398 + 0 4 0 0 1 -4 0 252.104 + 0 4 0 0 -4 -2 0 262.697 + 0 4 0 0 3 -6 0 251.427 + 0 4 0 0 -3 -3 0 247.185 + 0 4 0 0 2 -5 0 253.515 + 0 4 0 0 -3 -4 3 241.988 + 0 4 0 0 0 -3 0 253.298 + 0 4 0 0 -2 -4 0 255.034 + 0 4 0 0 -1 -2 0 250.977 + 0 4 0 0 -2 -3 0 256.043 + 0 4 0 0 -1 -3 0 261.502 + 0 4 0 0 -1 -4 0 268.002 + 0 4 0 0 3 -7 5 261.892 + 0 4 0 0 -1 -5 2 275.325 + 0 4 0 0 1 -6 2 266.635 + 0 4 0 0 0 -5 0 263.51 + 0 4 0 0 1 -5 0 264.541 + 0 4 0 0 0 -4 0 262.354 + 0 5 0 0 -3 7 5 270.148 + 0 5 0 0 -1 5 0 268.893 + 0 5 0 0 0 4 0 274.188 + 0 5 0 0 0 5 0 261.031 + 0 5 0 0 1 3 0 259.032 + 0 5 0 0 -1 6 2 259.767 + 0 5 0 0 0 3 0 264.776 + 0 5 0 0 2 2 0 257.772 + 0 5 0 0 1 2 0 257.997 + 0 5 0 0 3 2 0 253.284 + 0 5 0 0 2 1 0 255.837 + 0 5 0 0 2 3 0 254.786 + 0 5 0 0 1 1 0 253.908 + 0 5 0 0 1 4 0 245.005 + 0 5 0 0 -2 5 0 252.263 + 0 5 0 0 2 4 0 255.746 + 0 5 0 0 -1 4 0 252.077 + 0 5 0 0 1 5 2 241.403 + 0 5 0 0 -1 3 0 247.877 + 0 5 0 0 4 3 3 250.451 + 0 5 0 0 0 2 0 245.28 + 0 5 0 0 3 3 0 254.906 + 0 5 0 0 0 1 0 253.067 + 0 5 0 0 3 1 0 254.394 + 0 5 0 0 1 0 0 250.621 + 0 5 0 0 3 0 0 257.799 + 0 5 0 0 1 -2 1 255.162 + 0 5 0 0 4 0 0 264.794 + 0 5 0 0 4 2 0 264.621 + 0 5 0 0 1 -1 0 273.798 + 0 5 0 0 4 1 0 282.36 + 0 5 0 0 2 0 0 271.14 + 0 5 0 0 5 1 2 271.216 + 0 5 0 0 3 -1 0 276.728 + 0 5 0 0 5 0 0 278.448 + 0 5 0 0 2 -1 0 277.918 + 0 5 0 0 5 -1 0 265.571 + 0 5 0 0 2 -2 0 254.289 + 0 5 0 0 6 -1 2 257.575 + 0 5 0 0 1 -2 4 257.175 + 0 5 0 0 5 -2 0 254.428 + 0 5 0 0 2 -4 0 262.579 + 0 5 0 0 4 -1 0 262.796 + 0 5 0 0 2 -3 0 247.549 + 0 5 0 0 4 -2 0 252.622 + 0 5 0 0 3 -4 0 254.076 + 0 5 0 0 6 -2 0 256.845 + 0 5 0 0 3 -6 0 252.815 + 0 5 0 0 6 -3 0 263.752 + 0 5 0 0 3 -5 0 252.699 + 0 5 0 0 7 -3 3 255.558 + 0 5 0 0 3 -3 0 259.399 + 0 5 0 0 6 -4 0 251.801 + 0 5 0 0 3 -2 0 251.761 + 0 5 0 0 5 -3 0 265.332 + 0 5 0 0 4 -3 0 268.243 + 0 5 0 0 5 -4 0 267.625 + 0 5 0 0 4 -6 5 269.598 + 0 5 0 0 6 -5 2 271.617 + 0 5 0 0 5 -6 2 269.899 + 0 5 0 0 5 -5 0 262.297 + 0 5 0 0 4 -5 0 270.769 + 0 5 0 0 4 -4 0 264.166 + 0 5 0 0 2 -6 5 269.391 + 0 5 0 0 1 -5 0 269.329 + 0 5 0 0 0 -4 0 269.548 + 0 5 0 0 0 -5 0 266.731 + 0 5 0 0 -1 -3 0 258.959 + 0 5 0 0 1 -6 2 256.677 + 0 5 0 0 0 -3 0 260.29 + 0 5 0 0 -2 -2 0 264.442 + 0 5 0 0 -1 -2 0 257.065 + 0 5 0 0 -3 -2 0 251.803 + 0 5 0 0 -2 -1 0 250.207 + 0 5 0 0 -2 -3 0 249.512 + 0 5 0 0 -1 -1 0 246.523 + 0 5 0 0 -1 -5 2 249.028 + 0 5 0 0 2 -5 0 248.227 + 0 5 0 0 -1 -4 0 251.562 + 0 5 0 0 1 -4 0 254.103 + 0 5 0 0 -2 -4 0 247.188 + 0 5 0 0 1 -3 0 245.798 + 0 5 0 0 -3 -4 3 253.36 + 0 5 0 0 0 -2 0 246.924 + 0 5 0 0 -3 -3 0 242.958 + 0 5 0 0 0 -1 0 242.951 + 0 5 0 0 -3 -1 0 248.121 + 0 5 0 0 -1 0 0 250.574 + 0 5 0 0 -3 0 0 253.757 + 0 5 0 0 0 0 0 247.824 + 0 5 0 0 -4 0 0 259.493 + 0 5 0 0 -1 2 0 263.012 + 0 5 0 0 -4 -2 0 260.605 + 0 5 0 0 -1 1 0 272.284 + 0 5 0 0 -4 -1 0 267.878 + 0 5 0 0 -2 0 0 272.937 + 0 5 0 0 -5 -1 2 271.273 + 0 5 0 0 -3 1 0 266.502 + 0 5 0 0 -5 0 0 271.09 + 0 5 0 0 -2 1 0 263.425 + 0 5 0 0 -5 1 0 257.562 + 0 5 0 0 -2 2 0 259.152 + 0 5 0 0 -6 1 2 253.666 + 0 5 0 0 -2 4 1 253.403 + 0 5 0 0 -5 2 0 252.256 + 0 5 0 0 -2 4 4 249.315 + 0 5 0 0 -4 1 0 254.931 + 0 5 0 0 -2 3 0 260.468 + 0 5 0 0 -4 2 0 245.688 + 0 5 0 0 -3 4 0 245.299 + 0 5 0 0 -6 2 0 254.635 + 0 5 0 0 -3 6 0 250.046 + 0 5 0 0 -6 3 0 253.845 + 0 5 0 0 -3 5 0 249.735 + 0 5 0 0 -7 4 3 254.265 + 0 5 0 0 -3 3 0 253.861 + 0 5 0 0 -6 4 0 255.153 + 0 5 0 0 -3 2 0 259.127 + 0 5 0 0 -5 3 0 259.345 + 0 5 0 0 -4 3 0 261.384 + 0 5 0 0 -5 4 0 261.089 + 0 5 0 0 -4 7 5 272.359 + 0 5 0 0 -6 5 2 273.721 + 0 5 0 0 -5 6 2 267.718 + 0 5 0 0 -5 5 0 264.894 + 0 5 0 0 -4 5 0 271.788 + 0 5 0 0 -4 4 0 264.63 + 0 6 0 0 4 -7 5 264.418 + 0 6 0 0 5 -6 2 259.352 + 0 6 0 0 4 -4 0 260.544 + 0 6 0 0 5 -5 0 257.855 + 0 6 0 0 4 -3 0 249.82 + 0 6 0 0 4 -5 0 249.074 + 0 6 0 0 3 -3 0 243.99 + 0 6 0 0 5 -4 0 235.998 + 0 6 0 0 3 -2 0 240.261 + 0 6 0 0 6 -4 0 234.757 + 0 6 0 0 3 -1 0 239.502 + 0 6 0 0 4 -2 0 238.036 + 0 6 0 0 2 -1 0 234.462 + 0 6 0 0 5 -2 0 240.447 + 0 6 0 0 3 -5 0 225.666 + 0 6 0 0 5 -3 0 234.377 + 0 6 0 0 3 -4 0 234.019 + 0 6 0 0 6 -5 2 237.229 + 0 6 0 0 2 -3 0 236.237 + 0 6 0 0 7 -3 3 226.889 + 0 6 0 0 2 -2 0 238.452 + 0 6 0 0 6 -3 0 237.794 + 0 6 0 0 2 -4 1 231.377 + 0 6 0 0 4 -1 0 242.905 + 0 6 0 0 1 -1 0 235.229 + 0 6 0 0 3 0 0 246.346 + 0 6 0 0 1 0 0 247.409 + 0 6 0 0 4 0 0 240.188 + 0 6 0 0 6 -2 0 246.812 + 0 6 0 0 0 1 0 255.035 + 0 6 0 0 5 -1 0 261.24 + 0 6 0 0 2 0 0 263.038 + 0 6 0 0 6 -1 2 263.14 + 0 6 0 0 2 1 0 259.088 + 0 6 0 0 5 0 0 262.768 + 0 6 0 0 1 1 0 260.521 + 0 6 0 0 4 1 0 257.425 + 0 6 0 0 0 2 0 250.74 + 0 6 0 0 5 1 2 245.935 + 0 6 0 0 -1 2 4 251.31 + 0 6 0 0 3 2 0 245.387 + 0 6 0 0 -2 4 0 240.867 + 0 6 0 0 3 1 0 252.675 + 0 6 0 0 -1 3 0 240.13 + 0 6 0 0 2 2 0 242.22 + 0 6 0 0 -1 4 0 235.858 + 0 6 0 0 4 2 0 244.791 + 0 6 0 0 -3 6 0 233.502 + 0 6 0 0 3 3 0 237.449 + 0 6 0 0 -2 5 0 240.356 + 0 6 0 0 4 3 3 247.033 + 0 6 0 0 0 3 0 246.653 + 0 6 0 0 2 4 0 244.601 + 0 6 0 0 1 2 0 247.882 + 0 6 0 0 2 3 0 243.523 + 0 6 0 0 1 3 0 255.308 + 0 6 0 0 1 4 0 251.446 + 0 6 0 0 -1 5 0 252.403 + 0 6 0 0 1 5 2 256.468 + 0 6 0 0 -2 6 5 255.852 + 0 6 0 0 0 5 0 261.545 + 0 6 0 0 -1 6 2 254.04 + 0 6 0 0 0 4 0 254.856 + 0 6 0 0 -4 6 5 265.821 + 0 6 0 0 -5 6 2 271.728 + 0 6 0 0 -4 4 0 262.544 + 0 6 0 0 -5 5 0 260.057 + 0 6 0 0 -4 3 0 261.14 + 0 6 0 0 -4 5 0 258.826 + 0 6 0 0 -3 3 0 247.803 + 0 6 0 0 -6 5 2 253.902 + 0 6 0 0 -3 2 0 250.44 + 0 6 0 0 -5 4 0 253.523 + 0 6 0 0 -3 1 0 254.431 + 0 6 0 0 -4 2 0 252.426 + 0 6 0 0 -2 1 0 251.155 + 0 6 0 0 -5 2 0 242.028 + 0 6 0 0 -3 5 0 244.808 + 0 6 0 0 -5 3 0 243.682 + 0 6 0 0 -3 4 0 244.696 + 0 6 0 0 -6 4 0 245.098 + 0 6 0 0 -2 3 0 246.232 + 0 6 0 0 -7 4 3 254.428 + 0 6 0 0 -2 2 0 243.023 + 0 6 0 0 -6 3 0 246.872 + 0 6 0 0 -1 2 1 248.986 + 0 6 0 0 -4 1 0 254.675 + 0 6 0 0 -1 1 0 244.003 + 0 6 0 0 -3 0 0 256.778 + 0 6 0 0 -1 0 0 253.378 + 0 6 0 0 -4 0 0 249.21 + 0 6 0 0 0 0 0 255.096 + 0 6 0 0 -6 2 0 267.388 + 0 6 0 0 0 -1 0 264.313 + 0 6 0 0 -5 1 0 266.135 + 0 6 0 0 -2 0 0 268.009 + 0 6 0 0 -6 1 2 282.662 + 0 6 0 0 -2 -1 0 269.644 + 0 6 0 0 -5 0 0 272.738 + 0 6 0 0 -1 -1 0 268.484 + 0 6 0 0 -4 -1 0 264.148 + 0 6 0 0 0 -2 0 253.016 + 0 6 0 0 -5 -1 2 257.94 + 0 6 0 0 1 -2 0 260.152 + 0 6 0 0 -3 -2 0 247.507 + 0 6 0 0 2 -4 4 253.004 + 0 6 0 0 -3 -1 0 259.485 + 0 6 0 0 1 -3 0 252.11 + 0 6 0 0 -2 -2 0 247.084 + 0 6 0 0 1 -4 0 249.082 + 0 6 0 0 -4 -2 0 258.188 + 0 6 0 0 3 -6 0 254.019 + 0 6 0 0 -3 -3 0 259.455 + 0 6 0 0 2 -5 0 256.925 + 0 6 0 0 -4 -3 3 251.569 + 0 6 0 0 0 -3 0 260.363 + 0 6 0 0 -2 -4 0 248.704 + 0 6 0 0 -1 -2 0 250.762 + 0 6 0 0 -2 -3 0 261.183 + 0 6 0 0 -1 -3 0 269.848 + 0 6 0 0 -1 -4 0 267.222 + 0 6 0 0 1 -5 0 264.897 + 0 6 0 0 -1 -5 2 266.15 + 0 6 0 0 2 -6 5 271.33 + 0 6 0 0 0 -5 0 268.991 + 0 6 0 0 1 -6 2 261.578 + 0 6 0 0 0 -4 0 260.856 + 0 7 0 0 -3 7 5 282.206 + 0 7 0 0 -1 5 0 273.332 + 0 7 0 0 0 4 0 278.042 + 0 7 0 0 0 5 0 278.389 + 0 7 0 0 1 3 0 266.452 + 0 7 0 0 -1 6 2 267.57 + 0 7 0 0 0 3 0 265.025 + 0 7 0 0 2 2 0 264.473 + 0 7 0 0 1 2 0 257.22 + 0 7 0 0 3 2 0 261.184 + 0 7 0 0 2 1 0 259.137 + 0 7 0 0 2 3 0 253.258 + 0 7 0 0 1 1 0 253.088 + 0 7 0 0 1 4 0 256.451 + 0 7 0 0 -2 5 0 256.405 + 0 7 0 0 2 4 0 256.167 + 0 7 0 0 -1 4 0 250.053 + 0 7 0 0 1 5 2 254.253 + 0 7 0 0 -1 3 0 253.213 + 0 7 0 0 4 3 3 254.933 + 0 7 0 0 0 2 0 255.195 + 0 7 0 0 3 3 0 249.534 + 0 7 0 0 0 1 0 254.213 + 0 7 0 0 3 1 0 250.679 + 0 7 0 0 1 0 0 261.795 + 0 7 0 0 3 0 0 263.331 + 0 7 0 0 1 -2 1 261.734 + 0 7 0 0 4 0 0 259.922 + 0 7 0 0 4 2 0 265.77 + 0 7 0 0 1 -1 0 272.553 + 0 7 0 0 4 1 0 277.302 + 0 7 0 0 2 0 0 280.465 + 0 7 0 0 5 1 2 281.933 + 0 7 0 0 3 -1 0 285.378 + 0 7 0 0 5 0 0 269.087 + 0 7 0 0 2 -1 0 281.262 + 0 7 0 0 5 -1 0 276.696 + 0 7 0 0 2 -2 0 271.598 + 0 7 0 0 6 -1 2 268.503 + 0 7 0 0 1 -2 4 264.983 + 0 7 0 0 5 -2 0 260.002 + 0 7 0 0 2 -4 0 260.71 + 0 7 0 0 4 -1 0 257.835 + 0 7 0 0 2 -3 0 260.723 + 0 7 0 0 4 -2 0 261.256 + 0 7 0 0 3 -4 0 266.542 + 0 7 0 0 6 -2 0 264.987 + 0 7 0 0 3 -6 0 257.651 + 0 7 0 0 6 -3 0 263.741 + 0 7 0 0 3 -5 0 257.011 + 0 7 0 0 7 -3 3 262.73 + 0 7 0 0 3 -3 0 255.825 + 0 7 0 0 6 -4 0 267.326 + 0 7 0 0 3 -2 0 265.626 + 0 7 0 0 5 -3 0 266.194 + 0 7 0 0 4 -3 0 268.863 + 0 7 0 0 5 -4 0 265.727 + 0 7 0 0 4 -6 5 280.466 + 0 7 0 0 6 -5 2 273.746 + 0 7 0 0 5 -6 2 272.478 + 0 7 0 0 5 -5 0 273.904 + 0 7 0 0 4 -5 0 276.715 + 0 7 0 0 4 -4 0 275.08 + 0 7 0 0 2 -6 5 287.493 + 0 7 0 0 1 -5 0 281.453 + 0 7 0 0 0 -4 0 277.303 + 0 7 0 0 0 -5 0 272.714 + 0 7 0 0 -1 -3 0 273.953 + 0 7 0 0 1 -6 2 268.885 + 0 7 0 0 0 -3 0 263.823 + 0 7 0 0 -2 -2 0 267.981 + 0 7 0 0 -1 -2 0 266.207 + 0 7 0 0 -3 -2 0 263.415 + 0 7 0 0 -2 -1 0 260.338 + 0 7 0 0 -2 -3 0 257.556 + 0 7 0 0 -1 -1 0 254.527 + 0 7 0 0 -1 -5 2 256.409 + 0 7 0 0 2 -5 0 257.526 + 0 7 0 0 -1 -4 0 258.636 + 0 7 0 0 1 -4 0 260.967 + 0 7 0 0 -2 -4 0 259.648 + 0 7 0 0 1 -3 0 253.208 + 0 7 0 0 -3 -4 3 258.663 + 0 7 0 0 0 -2 0 257.549 + 0 7 0 0 -3 -3 0 261.007 + 0 7 0 0 0 -1 0 260.572 + 0 7 0 0 -3 -1 0 258.74 + 0 7 0 0 -1 0 0 257.319 + 0 7 0 0 -3 0 0 265.132 + 0 7 0 0 0 0 0 266.91 + 0 7 0 0 -4 0 0 271.616 + 0 7 0 0 -1 2 0 272.515 + 0 7 0 0 -4 -2 0 276.896 + 0 7 0 0 -1 1 0 278.632 + 0 7 0 0 -4 -1 0 281.507 + 0 7 0 0 -2 0 0 276.414 + 0 7 0 0 -5 -1 2 288.064 + 0 7 0 0 -3 1 0 284.493 + 0 7 0 0 -5 0 0 282.168 + 0 7 0 0 -2 1 0 289.333 + 0 7 0 0 -5 1 0 283.328 + 0 7 0 0 -2 2 0 270.555 + 0 7 0 0 -6 1 2 272.605 + 0 7 0 0 -2 4 1 263.858 + 0 7 0 0 -5 2 0 264.736 + 0 7 0 0 -2 4 4 260.577 + 0 7 0 0 -4 1 0 259.379 + 0 7 0 0 -2 3 0 262.942 + 0 7 0 0 -4 2 0 261.163 + 0 7 0 0 -3 4 0 262.463 + 0 7 0 0 -6 2 0 265.453 + 0 7 0 0 -3 6 0 269.069 + 0 7 0 0 -6 3 0 263.853 + 0 7 0 0 -3 5 0 258.538 + 0 7 0 0 -7 4 3 266.825 + 0 7 0 0 -3 3 0 254.525 + 0 7 0 0 -6 4 0 268.484 + 0 7 0 0 -3 2 0 268.447 + 0 7 0 0 -5 3 0 269.419 + 0 7 0 0 -4 3 0 272.894 + 0 7 0 0 -5 4 0 278.485 + 0 7 0 0 -4 7 5 279.738 + 0 7 0 0 -6 5 2 276.878 + 0 7 0 0 -5 6 2 270.767 + 0 7 0 0 -5 5 0 281.987 + 0 7 0 0 -4 5 0 282.255 + 0 7 0 0 -4 4 0 280.43 + 0 8 0 0 4 -7 5 283.575 + 0 8 0 0 4 -5 0 282.476 + 0 8 0 0 4 -4 0 274.385 + 0 8 0 0 5 -5 0 275.432 + 0 8 0 0 4 -3 0 275.311 + 0 8 0 0 5 -6 2 279.762 + 0 8 0 0 3 -3 0 265.088 + 0 8 0 0 4 -2 0 262.283 + 0 8 0 0 3 -2 0 268.16 + 0 8 0 0 5 -2 0 266.082 + 0 8 0 0 3 -1 0 261.739 + 0 8 0 0 5 -3 0 261.417 + 0 8 0 0 2 -1 0 256.007 + 0 8 0 0 5 -4 0 260.234 + 0 8 0 0 3 -5 0 262.581 + 0 8 0 0 6 -4 0 259.152 + 0 8 0 0 3 -4 0 259.322 + 0 8 0 0 6 -5 2 258.405 + 0 8 0 0 2 -3 0 259.538 + 0 8 0 0 7 -3 3 254.409 + 0 8 0 0 2 -2 0 263.557 + 0 8 0 0 6 -3 0 252.827 + 0 8 0 0 1 -1 0 277.405 + 0 8 0 0 4 -1 0 255.42 + 0 8 0 0 1 0 0 266.989 + 0 8 0 0 3 0 0 268.531 + 0 8 0 0 -1 2 1 270.142 + 0 8 0 0 4 0 0 276.243 + 0 8 0 0 6 -2 0 271.465 + 0 8 0 0 0 1 0 282.186 + 0 8 0 0 5 -1 0 282.654 + 0 8 0 0 2 0 0 292.772 + 0 8 0 0 6 -1 2 288.906 + 0 8 0 0 2 1 0 286.269 + 0 8 0 0 5 0 0 283.26 + 0 8 0 0 1 1 0 287.277 + 0 8 0 0 4 1 0 274.612 + 0 8 0 0 0 2 0 284.667 + 0 8 0 0 5 1 2 274.274 + 0 8 0 0 -1 2 4 265.46 + 0 8 0 0 3 2 0 275.139 + 0 8 0 0 -2 4 0 278.072 + 0 8 0 0 3 1 0 268.83 + 0 8 0 0 -1 3 0 265.311 + 0 8 0 0 2 2 0 259.988 + 0 8 0 0 -1 4 0 268.837 + 0 8 0 0 4 2 0 274.158 + 0 8 0 0 -3 6 0 272.588 + 0 8 0 0 3 3 0 265.365 + 0 8 0 0 -2 5 0 269.106 + 0 8 0 0 4 3 3 267.542 + 0 8 0 0 0 3 0 274.154 + 0 8 0 0 2 4 0 270.829 + 0 8 0 0 1 2 0 272.909 + 0 8 0 0 2 3 0 275.964 + 0 8 0 0 1 3 0 279.683 + 0 8 0 0 1 4 0 282.438 + 0 8 0 0 -2 6 5 282.959 + 0 8 0 0 1 5 2 285.983 + 0 8 0 0 -1 6 2 283.187 + 0 8 0 0 0 5 0 276.504 + 0 8 0 0 -1 5 0 275.752 + 0 8 0 0 0 4 0 286.002 + 0 8 0 0 -4 6 5 265.577 + 0 8 0 0 -4 5 0 260.296 + 0 8 0 0 -4 4 0 254.838 + 0 8 0 0 -5 5 0 254.348 + 0 8 0 0 -4 3 0 249.499 + 0 8 0 0 -5 6 2 258.933 + 0 8 0 0 -3 3 0 253.983 + 0 8 0 0 -4 2 0 246.64 + 0 8 0 0 -3 2 0 242.163 + 0 8 0 0 -5 2 0 243.341 + 0 8 0 0 -3 1 0 242.925 + 0 8 0 0 -5 3 0 243.645 + 0 8 0 0 -2 1 0 244.483 + 0 8 0 0 -6 5 2 239.035 + 0 8 0 0 -3 5 0 241.19 + 0 8 0 0 -5 4 0 239.092 + 0 8 0 0 -3 4 0 244.468 + 0 8 0 0 -6 4 0 237.873 + 0 8 0 0 -2 3 0 245.744 + 0 8 0 0 -7 4 3 241.373 + 0 8 0 0 -2 2 0 237.643 + 0 8 0 0 -6 3 0 237.803 + 0 8 0 0 -1 1 0 236.801 + 0 8 0 0 -4 1 0 242.407 + 0 8 0 0 -1 0 0 241.56 + 0 8 0 0 -3 0 0 242.752 + 0 8 0 0 0 0 0 246.342 + 0 8 0 0 -4 0 0 251.172 + 0 8 0 0 1 -2 0 247.441 + 0 8 0 0 -6 2 0 250.755 + 0 8 0 0 0 -1 0 262.325 + 0 8 0 0 -5 1 0 257.173 + 0 8 0 0 -2 0 0 260.191 + 0 8 0 0 -6 1 2 263.785 + 0 8 0 0 -2 -1 0 263.974 + 0 8 0 0 -5 0 0 257.811 + 0 8 0 0 -1 -1 0 249.818 + 0 8 0 0 -4 -1 0 255.928 + 0 8 0 0 0 -2 0 252.558 + 0 8 0 0 -5 -1 2 246.543 + 0 8 0 0 2 -4 1 242.171 + 0 8 0 0 -3 -2 0 241.523 + 0 8 0 0 2 -4 4 253.427 + 0 8 0 0 -3 -1 0 241.745 + 0 8 0 0 1 -3 0 246.167 + 0 8 0 0 -2 -2 0 244.889 + 0 8 0 0 1 -4 0 241.01 + 0 8 0 0 -4 -2 0 239.69 + 0 8 0 0 3 -6 0 233.213 + 0 8 0 0 -3 -3 0 240.588 + 0 8 0 0 2 -5 0 236.55 + 0 8 0 0 -3 -4 3 236.688 + 0 8 0 0 0 -3 0 241.213 + 0 8 0 0 -2 -4 0 249.636 + 0 8 0 0 -1 -2 0 250.056 + 0 8 0 0 -2 -3 0 242.567 + 0 8 0 0 -1 -3 0 247.438 + 0 8 0 0 -1 -4 0 249.198 + 0 8 0 0 3 -7 5 255.226 + 0 8 0 0 -1 -5 2 260.353 + 0 8 0 0 1 -6 2 255.352 + 0 8 0 0 0 -5 0 264.72 + 0 8 0 0 1 -5 0 261.436 + 0 8 0 0 0 -4 0 259.898 diff --git a/CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt b/CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt new file mode 100644 index 0000000..d1be7f7 --- /dev/null +++ b/CondObjects/data/PED_LowGain_L8_RN1174_cfg2.txt @@ -0,0 +1,1018 @@ +SCHEME_CODE 0 +# CODE LAYER SENSOR_IX SENSOR_IV IX IV TYPE VALUE + 0 1 0 0 4 -7 5 268.007 + 0 1 0 0 4 -5 0 265.301 + 0 1 0 0 4 -4 0 260.394 + 0 1 0 0 5 -5 0 255.926 + 0 1 0 0 4 -3 0 250.033 + 0 1 0 0 5 -6 2 252.359 + 0 1 0 0 3 -3 0 249.012 + 0 1 0 0 4 -2 0 245.724 + 0 1 0 0 3 -2 0 247.039 + 0 1 0 0 5 -2 0 249.349 + 0 1 0 0 3 -1 0 253.069 + 0 1 0 0 5 -3 0 238.814 + 0 1 0 0 2 -1 0 243.468 + 0 1 0 0 5 -4 0 244.394 + 0 1 0 0 3 -5 0 247.049 + 0 1 0 0 6 -4 0 242.378 + 0 1 0 0 3 -4 0 242.881 + 0 1 0 0 6 -5 2 238.776 + 0 1 0 0 2 -3 0 245.708 + 0 1 0 0 7 -3 3 246.315 + 0 1 0 0 2 -2 0 241.192 + 0 1 0 0 6 -3 0 246.802 + 0 1 0 0 1 -1 0 235.986 + 0 1 0 0 4 -1 0 239.417 + 0 1 0 0 1 0 0 252.317 + 0 1 0 0 3 0 0 256.911 + 0 1 0 0 -1 2 1 254.18 + 0 1 0 0 4 0 0 260.155 + 0 1 0 0 6 -2 0 262.026 + 0 1 0 0 0 1 0 263.98 + 0 1 0 0 5 -1 0 275.634 + 0 1 0 0 2 0 0 264.767 + 0 1 0 0 6 -1 2 274.369 + 0 1 0 0 2 1 0 275.925 + 0 1 0 0 5 0 0 265.234 + 0 1 0 0 1 1 0 272.252 + 0 1 0 0 4 1 0 261.759 + 0 1 0 0 0 2 0 261.803 + 0 1 0 0 5 1 2 257.889 + 0 1 0 0 -1 2 4 248.872 + 0 1 0 0 3 2 0 256.527 + 0 1 0 0 -2 4 0 263.708 + 0 1 0 0 3 1 0 250.782 + 0 1 0 0 -1 3 0 253.389 + 0 1 0 0 2 2 0 252.67 + 0 1 0 0 -1 4 0 249.987 + 0 1 0 0 4 2 0 249.389 + 0 1 0 0 -3 6 0 256.512 + 0 1 0 0 3 3 0 251.55 + 0 1 0 0 -2 5 0 255.814 + 0 1 0 0 4 3 3 260.149 + 0 1 0 0 0 3 0 269.254 + 0 1 0 0 2 4 0 260.932 + 0 1 0 0 1 2 0 268.079 + 0 1 0 0 2 3 0 272.382 + 0 1 0 0 1 3 0 263.965 + 0 1 0 0 1 4 0 267.856 + 0 1 0 0 -2 6 5 271.861 + 0 1 0 0 1 5 2 265.321 + 0 1 0 0 -1 6 2 269.408 + 0 1 0 0 0 5 0 266.108 + 0 1 0 0 -1 5 0 264.385 + 0 1 0 0 0 4 0 260.809 + 0 1 0 0 -4 6 5 277.026 + 0 1 0 0 -4 5 0 275.917 + 0 1 0 0 -4 4 0 271.189 + 0 1 0 0 -5 5 0 272.267 + 0 1 0 0 -4 3 0 264.191 + 0 1 0 0 -5 6 2 263.945 + 0 1 0 0 -3 3 0 257.86 + 0 1 0 0 -4 2 0 258.303 + 0 1 0 0 -3 2 0 255.011 + 0 1 0 0 -5 2 0 252.068 + 0 1 0 0 -3 1 0 252.573 + 0 1 0 0 -5 3 0 250.479 + 0 1 0 0 -2 1 0 240.757 + 0 1 0 0 -6 5 2 250.62 + 0 1 0 0 -3 5 0 251.115 + 0 1 0 0 -5 4 0 252.934 + 0 1 0 0 -3 4 0 238.937 + 0 1 0 0 -6 4 0 253.006 + 0 1 0 0 -2 3 0 238.518 + 0 1 0 0 -7 4 3 248.308 + 0 1 0 0 -2 2 0 245.991 + 0 1 0 0 -6 3 0 250.39 + 0 1 0 0 -1 1 0 248.936 + 0 1 0 0 -4 1 0 252.548 + 0 1 0 0 -1 0 0 249.892 + 0 1 0 0 -3 0 0 253.504 + 0 1 0 0 0 0 0 254.989 + 0 1 0 0 -4 0 0 260.739 + 0 1 0 0 1 -2 0 261.528 + 0 1 0 0 -6 2 0 262.733 + 0 1 0 0 0 -1 0 276.756 + 0 1 0 0 -5 1 0 272.018 + 0 1 0 0 -2 0 0 280.848 + 0 1 0 0 -6 1 2 281.965 + 0 1 0 0 -2 -1 0 282.649 + 0 1 0 0 -5 0 0 276.397 + 0 1 0 0 -1 -1 0 275.969 + 0 1 0 0 -4 -1 0 267.006 + 0 1 0 0 0 -2 0 268.178 + 0 1 0 0 -5 -1 2 264.79 + 0 1 0 0 2 -4 1 260.176 + 0 1 0 0 -3 -2 0 261.328 + 0 1 0 0 2 -4 4 256.296 + 0 1 0 0 -3 -1 0 260.496 + 0 1 0 0 1 -3 0 255.907 + 0 1 0 0 -2 -2 0 262.932 + 0 1 0 0 1 -4 0 260.584 + 0 1 0 0 -4 -2 0 256.331 + 0 1 0 0 3 -6 0 255.393 + 0 1 0 0 -3 -3 0 250.843 + 0 1 0 0 2 -5 0 260.082 + 0 1 0 0 -3 -4 3 252.237 + 0 1 0 0 0 -3 0 258.814 + 0 1 0 0 -2 -4 0 255.558 + 0 1 0 0 -1 -2 0 262.356 + 0 1 0 0 -2 -3 0 263.174 + 0 1 0 0 -1 -3 0 261.841 + 0 1 0 0 -1 -4 0 269.611 + 0 1 0 0 3 -7 5 266.955 + 0 1 0 0 -1 -5 2 278.165 + 0 1 0 0 1 -6 2 280.777 + 0 1 0 0 0 -5 0 272.626 + 0 1 0 0 1 -5 0 271.928 + 0 1 0 0 0 -4 0 274.405 + 0 2 0 0 4 -7 5 266.988 + 0 2 0 0 4 -5 0 259.834 + 0 2 0 0 4 -4 0 259.005 + 0 2 0 0 5 -5 0 258.07 + 0 2 0 0 4 -3 0 251.325 + 0 2 0 0 5 -6 2 250.952 + 0 2 0 0 3 -3 0 245.036 + 0 2 0 0 4 -2 0 248.178 + 0 2 0 0 3 -2 0 250.673 + 0 2 0 0 5 -2 0 244.438 + 0 2 0 0 3 -1 0 242.928 + 0 2 0 0 5 -3 0 242.877 + 0 2 0 0 2 -1 0 242.653 + 0 2 0 0 5 -4 0 241.239 + 0 2 0 0 3 -5 0 234.453 + 0 2 0 0 6 -4 0 237.646 + 0 2 0 0 3 -4 0 242.388 + 0 2 0 0 6 -5 2 241.322 + 0 2 0 0 2 -3 0 243.174 + 0 2 0 0 7 -3 3 243.512 + 0 2 0 0 2 -2 0 238.248 + 0 2 0 0 6 -3 0 231.965 + 0 2 0 0 1 -1 0 237.057 + 0 2 0 0 4 -1 0 238.812 + 0 2 0 0 1 0 0 241.146 + 0 2 0 0 3 0 0 247.288 + 0 2 0 0 -1 2 1 245.8 + 0 2 0 0 4 0 0 253.66 + 0 2 0 0 6 -2 0 255.813 + 0 2 0 0 0 1 0 262.007 + 0 2 0 0 5 -1 0 261.347 + 0 2 0 0 2 0 0 264.375 + 0 2 0 0 6 -1 2 265.586 + 0 2 0 0 2 1 0 259.335 + 0 2 0 0 5 0 0 260.681 + 0 2 0 0 1 1 0 267.289 + 0 2 0 0 4 1 0 261.597 + 0 2 0 0 0 2 0 262.077 + 0 2 0 0 5 1 2 252.864 + 0 2 0 0 -1 2 4 250.825 + 0 2 0 0 3 2 0 250.909 + 0 2 0 0 -2 4 0 242.103 + 0 2 0 0 3 1 0 245.718 + 0 2 0 0 -1 3 0 242.342 + 0 2 0 0 2 2 0 244.418 + 0 2 0 0 -1 4 0 246.297 + 0 2 0 0 4 2 0 236.165 + 0 2 0 0 -3 6 0 241.218 + 0 2 0 0 3 3 0 249.173 + 0 2 0 0 -2 5 0 240.348 + 0 2 0 0 4 3 3 247.982 + 0 2 0 0 0 3 0 247.278 + 0 2 0 0 2 4 0 257.333 + 0 2 0 0 1 2 0 247.789 + 0 2 0 0 2 3 0 248.576 + 0 2 0 0 1 3 0 254.885 + 0 2 0 0 1 4 0 252.347 + 0 2 0 0 -2 6 5 260.816 + 0 2 0 0 1 5 2 263.506 + 0 2 0 0 -1 6 2 258.907 + 0 2 0 0 0 5 0 259.262 + 0 2 0 0 -1 5 0 256.448 + 0 2 0 0 0 4 0 258.148 + 0 2 0 0 -4 6 5 304.696 + 0 2 0 0 -4 5 0 311.978 + 0 2 0 0 -4 4 0 301.995 + 0 2 0 0 -5 5 0 300.853 + 0 2 0 0 -4 3 0 297.079 + 0 2 0 0 -5 6 2 285.415 + 0 2 0 0 -3 3 0 281.783 + 0 2 0 0 -4 2 0 287.928 + 0 2 0 0 -3 2 0 292.287 + 0 2 0 0 -5 2 0 288.244 + 0 2 0 0 -3 1 0 276.414 + 0 2 0 0 -5 3 0 279.348 + 0 2 0 0 -2 1 0 281.69 + 0 2 0 0 -6 5 2 275.74 + 0 2 0 0 -3 5 0 280.672 + 0 2 0 0 -5 4 0 279.442 + 0 2 0 0 -3 4 0 273.281 + 0 2 0 0 -6 4 0 277.353 + 0 2 0 0 -2 3 0 279.53 + 0 2 0 0 -7 4 3 275.592 + 0 2 0 0 -2 2 0 284.25 + 0 2 0 0 -6 3 0 279.294 + 0 2 0 0 -1 1 0 278.219 + 0 2 0 0 -4 1 0 285.805 + 0 2 0 0 -1 0 0 284.461 + 0 2 0 0 -3 0 0 288.795 + 0 2 0 0 0 0 0 288.118 + 0 2 0 0 -4 0 0 285.295 + 0 2 0 0 1 -2 0 302.291 + 0 2 0 0 -6 2 0 300.811 + 0 2 0 0 0 -1 0 306.245 + 0 2 0 0 -5 1 0 308.082 + 0 2 0 0 -2 0 0 297.692 + 0 2 0 0 -6 1 2 309.302 + 0 2 0 0 -2 -1 0 310.131 + 0 2 0 0 -5 0 0 301.618 + 0 2 0 0 -1 -1 0 298.993 + 0 2 0 0 -4 -1 0 298.092 + 0 2 0 0 0 -2 0 299.868 + 0 2 0 0 -5 -1 2 292.553 + 0 2 0 0 2 -4 1 292.858 + 0 2 0 0 -3 -2 0 282.688 + 0 2 0 0 2 -4 4 286.509 + 0 2 0 0 -3 -1 0 288.797 + 0 2 0 0 1 -3 0 278.71 + 0 2 0 0 -2 -2 0 288.359 + 0 2 0 0 1 -4 0 289.705 + 0 2 0 0 -4 -2 0 282.144 + 0 2 0 0 3 -6 0 290.629 + 0 2 0 0 -3 -3 0 286.375 + 0 2 0 0 2 -5 0 283.707 + 0 2 0 0 -3 -4 3 285.357 + 0 2 0 0 0 -3 0 276.189 + 0 2 0 0 -2 -4 0 281.252 + 0 2 0 0 -1 -2 0 290.778 + 0 2 0 0 -2 -3 0 294.209 + 0 2 0 0 -1 -3 0 291.452 + 0 2 0 0 -1 -4 0 295.053 + 0 2 0 0 3 -7 5 294.716 + 0 2 0 0 -1 -5 2 295.257 + 0 2 0 0 1 -6 2 302.94 + 0 2 0 0 0 -5 0 303.485 + 0 2 0 0 1 -5 0 304.63 + 0 2 0 0 0 -4 0 304.248 + 0 3 0 0 4 -7 5 281.09 + 0 3 0 0 4 -5 0 283.451 + 0 3 0 0 4 -4 0 283.408 + 0 3 0 0 5 -5 0 279.722 + 0 3 0 0 4 -3 0 285.131 + 0 3 0 0 5 -6 2 280.582 + 0 3 0 0 3 -3 0 274.368 + 0 3 0 0 4 -2 0 272.461 + 0 3 0 0 3 -2 0 274.783 + 0 3 0 0 5 -2 0 268.493 + 0 3 0 0 3 -1 0 267.418 + 0 3 0 0 5 -3 0 260.648 + 0 3 0 0 2 -1 0 255.714 + 0 3 0 0 5 -4 0 264.53 + 0 3 0 0 3 -5 0 259.282 + 0 3 0 0 6 -4 0 264.66 + 0 3 0 0 3 -4 0 265.708 + 0 3 0 0 6 -5 2 254.459 + 0 3 0 0 2 -3 0 263.292 + 0 3 0 0 7 -3 3 259.054 + 0 3 0 0 2 -2 0 267.42 + 0 3 0 0 6 -3 0 260.118 + 0 3 0 0 1 -1 0 260.077 + 0 3 0 0 4 -1 0 261.381 + 0 3 0 0 1 0 0 269.225 + 0 3 0 0 3 0 0 277.228 + 0 3 0 0 -1 2 1 261.021 + 0 3 0 0 4 0 0 270.016 + 0 3 0 0 6 -2 0 288.82 + 0 3 0 0 0 1 0 285.782 + 0 3 0 0 5 -1 0 279.298 + 0 3 0 0 2 0 0 286.656 + 0 3 0 0 6 -1 2 294.835 + 0 3 0 0 2 1 0 294.004 + 0 3 0 0 5 0 0 285.015 + 0 3 0 0 1 1 0 273.388 + 0 3 0 0 4 1 0 272.495 + 0 3 0 0 0 2 0 272.497 + 0 3 0 0 5 1 2 275.603 + 0 3 0 0 -1 2 4 270.321 + 0 3 0 0 3 2 0 254.158 + 0 3 0 0 -2 4 0 262.933 + 0 3 0 0 3 1 0 261.082 + 0 3 0 0 -1 3 0 258.301 + 0 3 0 0 2 2 0 251.232 + 0 3 0 0 -1 4 0 265.347 + 0 3 0 0 4 2 0 253.248 + 0 3 0 0 -3 6 0 251.85 + 0 3 0 0 3 3 0 265.42 + 0 3 0 0 -2 5 0 253.838 + 0 3 0 0 4 3 3 254.363 + 0 3 0 0 0 3 0 257.125 + 0 3 0 0 2 4 0 265.002 + 0 3 0 0 1 2 0 257.398 + 0 3 0 0 2 3 0 261.188 + 0 3 0 0 1 3 0 258.219 + 0 3 0 0 1 4 0 272.011 + 0 3 0 0 -2 6 5 271.94 + 0 3 0 0 1 5 2 275.899 + 0 3 0 0 -1 6 2 275.549 + 0 3 0 0 0 5 0 282.565 + 0 3 0 0 -1 5 0 285.574 + 0 3 0 0 0 4 0 278.592 + 0 3 0 0 -4 6 5 286.316 + 0 3 0 0 -4 5 0 283.157 + 0 3 0 0 -4 4 0 282.846 + 0 3 0 0 -5 5 0 284.29 + 0 3 0 0 -4 3 0 272.895 + 0 3 0 0 -5 6 2 271.572 + 0 3 0 0 -3 3 0 266.053 + 0 3 0 0 -4 2 0 258.967 + 0 3 0 0 -3 2 0 265.985 + 0 3 0 0 -5 2 0 264.637 + 0 3 0 0 -3 1 0 263.83 + 0 3 0 0 -5 3 0 266.457 + 0 3 0 0 -2 1 0 270.048 + 0 3 0 0 -6 5 2 261.03 + 0 3 0 0 -3 5 0 259.473 + 0 3 0 0 -5 4 0 264.147 + 0 3 0 0 -3 4 0 255.414 + 0 3 0 0 -6 4 0 262.197 + 0 3 0 0 -2 3 0 262.324 + 0 3 0 0 -7 4 3 258.613 + 0 3 0 0 -2 2 0 253.966 + 0 3 0 0 -6 3 0 264.525 + 0 3 0 0 -1 1 0 269.195 + 0 3 0 0 -4 1 0 267.422 + 0 3 0 0 -1 0 0 267.623 + 0 3 0 0 -3 0 0 261.74 + 0 3 0 0 0 0 0 278.501 + 0 3 0 0 -4 0 0 271.411 + 0 3 0 0 1 -2 0 280.025 + 0 3 0 0 -6 2 0 279.114 + 0 3 0 0 0 -1 0 279.197 + 0 3 0 0 -5 1 0 290.001 + 0 3 0 0 -2 0 0 289.423 + 0 3 0 0 -6 1 2 292.519 + 0 3 0 0 -2 -1 0 296.544 + 0 3 0 0 -5 0 0 287.983 + 0 3 0 0 -1 -1 0 287.082 + 0 3 0 0 -4 -1 0 280.207 + 0 3 0 0 0 -2 0 277.294 + 0 3 0 0 -5 -1 2 274.137 + 0 3 0 0 2 -4 1 282.849 + 0 3 0 0 -3 -2 0 274.202 + 0 3 0 0 2 -4 4 269.042 + 0 3 0 0 -3 -1 0 266.692 + 0 3 0 0 1 -3 0 268.462 + 0 3 0 0 -2 -2 0 264.127 + 0 3 0 0 1 -4 0 270.773 + 0 3 0 0 -4 -2 0 267.138 + 0 3 0 0 3 -6 0 261.158 + 0 3 0 0 -3 -3 0 264.079 + 0 3 0 0 2 -5 0 271.761 + 0 3 0 0 -3 -4 3 264.882 + 0 3 0 0 0 -3 0 266.564 + 0 3 0 0 -2 -4 0 272.973 + 0 3 0 0 -1 -2 0 266.136 + 0 3 0 0 -2 -3 0 267.084 + 0 3 0 0 -1 -3 0 266.81 + 0 3 0 0 -1 -4 0 285.288 + 0 3 0 0 3 -7 5 285.667 + 0 3 0 0 -1 -5 2 283.883 + 0 3 0 0 1 -6 2 284.983 + 0 3 0 0 0 -5 0 291.108 + 0 3 0 0 1 -5 0 291.402 + 0 3 0 0 0 -4 0 283.363 + 0 4 0 0 4 -7 5 278.656 + 0 4 0 0 4 -5 0 269.564 + 0 4 0 0 4 -4 0 266.97 + 0 4 0 0 5 -5 0 259.923 + 0 4 0 0 4 -3 0 264.902 + 0 4 0 0 5 -6 2 261.049 + 0 4 0 0 3 -3 0 258.728 + 0 4 0 0 4 -2 0 264.252 + 0 4 0 0 3 -2 0 256.988 + 0 4 0 0 5 -2 0 251.709 + 0 4 0 0 3 -1 0 251.12 + 0 4 0 0 5 -3 0 250.294 + 0 4 0 0 2 -1 0 251.487 + 0 4 0 0 5 -4 0 248.32 + 0 4 0 0 3 -5 0 252.833 + 0 4 0 0 6 -4 0 252.805 + 0 4 0 0 3 -4 0 255.056 + 0 4 0 0 6 -5 2 246.31 + 0 4 0 0 2 -3 0 244.599 + 0 4 0 0 7 -3 3 252.948 + 0 4 0 0 2 -2 0 247.177 + 0 4 0 0 6 -3 0 249.847 + 0 4 0 0 1 -1 0 245.554 + 0 4 0 0 4 -1 0 256.748 + 0 4 0 0 1 0 0 254.941 + 0 4 0 0 3 0 0 258.223 + 0 4 0 0 -1 2 1 254.942 + 0 4 0 0 4 0 0 259.505 + 0 4 0 0 6 -2 0 269.077 + 0 4 0 0 0 1 0 270.861 + 0 4 0 0 5 -1 0 269.133 + 0 4 0 0 2 0 0 276.626 + 0 4 0 0 6 -1 2 283.427 + 0 4 0 0 2 1 0 278.816 + 0 4 0 0 5 0 0 276.3 + 0 4 0 0 1 1 0 275.411 + 0 4 0 0 4 1 0 275.863 + 0 4 0 0 0 2 0 264.668 + 0 4 0 0 5 1 2 269.763 + 0 4 0 0 -1 2 4 262.346 + 0 4 0 0 3 2 0 262.829 + 0 4 0 0 -2 4 0 259.437 + 0 4 0 0 3 1 0 253.383 + 0 4 0 0 -1 3 0 256.913 + 0 4 0 0 2 2 0 250.244 + 0 4 0 0 -1 4 0 260.058 + 0 4 0 0 4 2 0 262.014 + 0 4 0 0 -3 6 0 256.903 + 0 4 0 0 3 3 0 264.358 + 0 4 0 0 -2 5 0 273.123 + 0 4 0 0 4 3 3 262.329 + 0 4 0 0 0 3 0 265.742 + 0 4 0 0 2 4 0 263.379 + 0 4 0 0 1 2 0 266.632 + 0 4 0 0 2 3 0 268.178 + 0 4 0 0 1 3 0 267.039 + 0 4 0 0 1 4 0 281.954 + 0 4 0 0 -2 6 5 272.228 + 0 4 0 0 1 5 2 275.835 + 0 4 0 0 -1 6 2 278.757 + 0 4 0 0 0 5 0 276.375 + 0 4 0 0 -1 5 0 271.062 + 0 4 0 0 0 4 0 274.507 + 0 4 0 0 -4 6 5 272.098 + 0 4 0 0 -4 5 0 262.976 + 0 4 0 0 -4 4 0 271.868 + 0 4 0 0 -5 5 0 262.827 + 0 4 0 0 -4 3 0 263.834 + 0 4 0 0 -5 6 2 257.417 + 0 4 0 0 -3 3 0 255.592 + 0 4 0 0 -4 2 0 245.197 + 0 4 0 0 -3 2 0 247.447 + 0 4 0 0 -5 2 0 246.359 + 0 4 0 0 -3 1 0 248.962 + 0 4 0 0 -5 3 0 246.32 + 0 4 0 0 -2 1 0 248.618 + 0 4 0 0 -6 5 2 239.913 + 0 4 0 0 -3 5 0 245.838 + 0 4 0 0 -5 4 0 242.933 + 0 4 0 0 -3 4 0 245.708 + 0 4 0 0 -6 4 0 233.031 + 0 4 0 0 -2 3 0 248.341 + 0 4 0 0 -7 4 3 248.801 + 0 4 0 0 -2 2 0 251.382 + 0 4 0 0 -6 3 0 242.762 + 0 4 0 0 -1 1 0 237.79 + 0 4 0 0 -4 1 0 246.665 + 0 4 0 0 -1 0 0 252.898 + 0 4 0 0 -3 0 0 248.086 + 0 4 0 0 0 0 0 248.541 + 0 4 0 0 -4 0 0 254.191 + 0 4 0 0 1 -2 0 254.989 + 0 4 0 0 -6 2 0 251.899 + 0 4 0 0 0 -1 0 266.86 + 0 4 0 0 -5 1 0 265.398 + 0 4 0 0 -2 0 0 271.028 + 0 4 0 0 -6 1 2 268.843 + 0 4 0 0 -2 -1 0 271.801 + 0 4 0 0 -5 0 0 264.366 + 0 4 0 0 -1 -1 0 267.346 + 0 4 0 0 -4 -1 0 261.384 + 0 4 0 0 0 -2 0 260.467 + 0 4 0 0 -5 -1 2 259.118 + 0 4 0 0 2 -4 1 254.745 + 0 4 0 0 -3 -2 0 252.807 + 0 4 0 0 2 -4 4 255.885 + 0 4 0 0 -3 -1 0 249.141 + 0 4 0 0 1 -3 0 250.844 + 0 4 0 0 -2 -2 0 253.332 + 0 4 0 0 1 -4 0 251.992 + 0 4 0 0 -4 -2 0 262.597 + 0 4 0 0 3 -6 0 251.425 + 0 4 0 0 -3 -3 0 247.033 + 0 4 0 0 2 -5 0 253.491 + 0 4 0 0 -3 -4 3 241.923 + 0 4 0 0 0 -3 0 253.273 + 0 4 0 0 -2 -4 0 254.976 + 0 4 0 0 -1 -2 0 250.971 + 0 4 0 0 -2 -3 0 255.954 + 0 4 0 0 -1 -3 0 261.56 + 0 4 0 0 -1 -4 0 268.116 + 0 4 0 0 3 -7 5 262.068 + 0 4 0 0 -1 -5 2 275.493 + 0 4 0 0 1 -6 2 266.795 + 0 4 0 0 0 -5 0 263.758 + 0 4 0 0 1 -5 0 264.87 + 0 4 0 0 0 -4 0 262.627 + 0 5 0 0 -3 7 5 269.827 + 0 5 0 0 -1 5 0 268.435 + 0 5 0 0 0 4 0 273.716 + 0 5 0 0 0 5 0 260.432 + 0 5 0 0 1 3 0 258.348 + 0 5 0 0 -1 6 2 259.164 + 0 5 0 0 0 3 0 264.162 + 0 5 0 0 2 2 0 257.072 + 0 5 0 0 1 2 0 257.285 + 0 5 0 0 3 2 0 252.593 + 0 5 0 0 2 1 0 255.04 + 0 5 0 0 2 3 0 254.045 + 0 5 0 0 1 1 0 253.248 + 0 5 0 0 1 4 0 244.333 + 0 5 0 0 -2 5 0 251.593 + 0 5 0 0 2 4 0 255.043 + 0 5 0 0 -1 4 0 251.43 + 0 5 0 0 1 5 2 240.708 + 0 5 0 0 -1 3 0 247.142 + 0 5 0 0 4 3 3 249.833 + 0 5 0 0 0 2 0 244.593 + 0 5 0 0 3 3 0 254.203 + 0 5 0 0 0 1 0 252.49 + 0 5 0 0 3 1 0 253.924 + 0 5 0 0 1 0 0 250.111 + 0 5 0 0 3 0 0 257.243 + 0 5 0 0 1 -2 1 254.766 + 0 5 0 0 4 0 0 264.353 + 0 5 0 0 4 2 0 264.139 + 0 5 0 0 1 -1 0 273.542 + 0 5 0 0 4 1 0 282.023 + 0 5 0 0 2 0 0 271.068 + 0 5 0 0 5 1 2 271.105 + 0 5 0 0 3 -1 0 276.633 + 0 5 0 0 5 0 0 278.288 + 0 5 0 0 2 -1 0 277.647 + 0 5 0 0 5 -1 0 265.378 + 0 5 0 0 2 -2 0 253.867 + 0 5 0 0 6 -1 2 257.147 + 0 5 0 0 1 -2 4 256.811 + 0 5 0 0 5 -2 0 254.029 + 0 5 0 0 2 -4 0 262.098 + 0 5 0 0 4 -1 0 262.387 + 0 5 0 0 2 -3 0 247.046 + 0 5 0 0 4 -2 0 252.225 + 0 5 0 0 3 -4 0 253.572 + 0 5 0 0 6 -2 0 256.35 + 0 5 0 0 3 -6 0 252.251 + 0 5 0 0 6 -3 0 263.212 + 0 5 0 0 3 -5 0 252.112 + 0 5 0 0 7 -3 3 255.007 + 0 5 0 0 3 -3 0 258.936 + 0 5 0 0 6 -4 0 251.315 + 0 5 0 0 3 -2 0 251.309 + 0 5 0 0 5 -3 0 265.087 + 0 5 0 0 4 -3 0 267.9 + 0 5 0 0 5 -4 0 267.355 + 0 5 0 0 4 -6 5 269.32 + 0 5 0 0 6 -5 2 271.349 + 0 5 0 0 5 -6 2 269.758 + 0 5 0 0 5 -5 0 262.358 + 0 5 0 0 4 -5 0 270.823 + 0 5 0 0 4 -4 0 264.377 + 0 5 0 0 2 -6 5 269.381 + 0 5 0 0 1 -5 0 269.308 + 0 5 0 0 0 -4 0 269.542 + 0 5 0 0 0 -5 0 266.612 + 0 5 0 0 -1 -3 0 258.758 + 0 5 0 0 1 -6 2 256.518 + 0 5 0 0 0 -3 0 259.988 + 0 5 0 0 -2 -2 0 264.217 + 0 5 0 0 -1 -2 0 256.731 + 0 5 0 0 -3 -2 0 251.432 + 0 5 0 0 -2 -1 0 249.728 + 0 5 0 0 -2 -3 0 249.129 + 0 5 0 0 -1 -1 0 246.075 + 0 5 0 0 -1 -5 2 248.59 + 0 5 0 0 2 -5 0 247.73 + 0 5 0 0 -1 -4 0 251.174 + 0 5 0 0 1 -4 0 253.738 + 0 5 0 0 -2 -4 0 246.737 + 0 5 0 0 1 -3 0 245.433 + 0 5 0 0 -3 -4 3 252.955 + 0 5 0 0 0 -2 0 246.488 + 0 5 0 0 -3 -3 0 242.514 + 0 5 0 0 0 -1 0 242.514 + 0 5 0 0 -3 -1 0 247.648 + 0 5 0 0 -1 0 0 250.176 + 0 5 0 0 -3 0 0 253.41 + 0 5 0 0 0 0 0 247.438 + 0 5 0 0 -4 0 0 259.137 + 0 5 0 0 -1 2 0 262.717 + 0 5 0 0 -4 -2 0 260.481 + 0 5 0 0 -1 1 0 272.188 + 0 5 0 0 -4 -1 0 267.805 + 0 5 0 0 -2 0 0 272.974 + 0 5 0 0 -5 -1 2 271.337 + 0 5 0 0 -3 1 0 266.557 + 0 5 0 0 -5 0 0 271.044 + 0 5 0 0 -2 1 0 263.289 + 0 5 0 0 -5 1 0 257.317 + 0 5 0 0 -2 2 0 258.973 + 0 5 0 0 -6 1 2 253.403 + 0 5 0 0 -2 4 1 252.991 + 0 5 0 0 -5 2 0 251.873 + 0 5 0 0 -2 4 4 248.864 + 0 5 0 0 -4 1 0 254.643 + 0 5 0 0 -2 3 0 260.052 + 0 5 0 0 -4 2 0 245.232 + 0 5 0 0 -3 4 0 244.822 + 0 5 0 0 -6 2 0 254.172 + 0 5 0 0 -3 6 0 249.729 + 0 5 0 0 -6 3 0 253.458 + 0 5 0 0 -3 5 0 249.313 + 0 5 0 0 -7 4 3 253.857 + 0 5 0 0 -3 3 0 253.416 + 0 5 0 0 -6 4 0 254.75 + 0 5 0 0 -3 2 0 258.804 + 0 5 0 0 -5 3 0 259.132 + 0 5 0 0 -4 3 0 261.22 + 0 5 0 0 -5 4 0 260.966 + 0 5 0 0 -4 7 5 272.311 + 0 5 0 0 -6 5 2 273.739 + 0 5 0 0 -5 6 2 267.776 + 0 5 0 0 -5 5 0 264.894 + 0 5 0 0 -4 5 0 271.758 + 0 5 0 0 -4 4 0 264.649 + 0 6 0 0 4 -7 5 264.256 + 0 6 0 0 5 -6 2 259.159 + 0 6 0 0 4 -4 0 260.177 + 0 6 0 0 5 -5 0 257.409 + 0 6 0 0 4 -3 0 249.415 + 0 6 0 0 4 -5 0 248.502 + 0 6 0 0 3 -3 0 243.435 + 0 6 0 0 5 -4 0 235.39 + 0 6 0 0 3 -2 0 239.663 + 0 6 0 0 6 -4 0 234.162 + 0 6 0 0 3 -1 0 239.042 + 0 6 0 0 4 -2 0 237.521 + 0 6 0 0 2 -1 0 233.91 + 0 6 0 0 5 -2 0 239.937 + 0 6 0 0 3 -5 0 225.155 + 0 6 0 0 5 -3 0 233.877 + 0 6 0 0 3 -4 0 233.586 + 0 6 0 0 6 -5 2 236.738 + 0 6 0 0 2 -3 0 235.713 + 0 6 0 0 7 -3 3 226.376 + 0 6 0 0 2 -2 0 237.982 + 0 6 0 0 6 -3 0 237.363 + 0 6 0 0 2 -4 1 230.973 + 0 6 0 0 4 -1 0 242.504 + 0 6 0 0 1 -1 0 234.742 + 0 6 0 0 3 0 0 245.963 + 0 6 0 0 1 0 0 247.031 + 0 6 0 0 4 0 0 239.893 + 0 6 0 0 6 -2 0 246.529 + 0 6 0 0 0 1 0 254.758 + 0 6 0 0 5 -1 0 261.012 + 0 6 0 0 2 0 0 262.927 + 0 6 0 0 6 -1 2 263.102 + 0 6 0 0 2 1 0 258.97 + 0 6 0 0 5 0 0 262.718 + 0 6 0 0 1 1 0 260.291 + 0 6 0 0 4 1 0 257.187 + 0 6 0 0 0 2 0 250.512 + 0 6 0 0 5 1 2 245.678 + 0 6 0 0 -1 2 4 251.063 + 0 6 0 0 3 2 0 245.102 + 0 6 0 0 -2 4 0 240.544 + 0 6 0 0 3 1 0 252.406 + 0 6 0 0 -1 3 0 239.857 + 0 6 0 0 2 2 0 241.91 + 0 6 0 0 -1 4 0 235.525 + 0 6 0 0 4 2 0 244.525 + 0 6 0 0 -3 6 0 233.167 + 0 6 0 0 3 3 0 237.166 + 0 6 0 0 -2 5 0 240.069 + 0 6 0 0 4 3 3 246.759 + 0 6 0 0 0 3 0 246.332 + 0 6 0 0 2 4 0 244.265 + 0 6 0 0 1 2 0 247.55 + 0 6 0 0 2 3 0 243.292 + 0 6 0 0 1 3 0 254.948 + 0 6 0 0 1 4 0 251.176 + 0 6 0 0 -1 5 0 252.229 + 0 6 0 0 1 5 2 256.364 + 0 6 0 0 -2 6 5 255.724 + 0 6 0 0 0 5 0 261.502 + 0 6 0 0 -1 6 2 254.094 + 0 6 0 0 0 4 0 254.911 + 0 6 0 0 -4 6 5 265.483 + 0 6 0 0 -5 6 2 271.338 + 0 6 0 0 -4 4 0 262.273 + 0 6 0 0 -5 5 0 259.699 + 0 6 0 0 -4 3 0 260.777 + 0 6 0 0 -4 5 0 258.355 + 0 6 0 0 -3 3 0 247.398 + 0 6 0 0 -6 5 2 253.561 + 0 6 0 0 -3 2 0 249.997 + 0 6 0 0 -5 4 0 252.986 + 0 6 0 0 -3 1 0 254.032 + 0 6 0 0 -4 2 0 251.96 + 0 6 0 0 -2 1 0 250.652 + 0 6 0 0 -5 2 0 241.532 + 0 6 0 0 -3 5 0 244.24 + 0 6 0 0 -5 3 0 243.132 + 0 6 0 0 -3 4 0 244.214 + 0 6 0 0 -6 4 0 244.624 + 0 6 0 0 -2 3 0 245.841 + 0 6 0 0 -7 4 3 254.007 + 0 6 0 0 -2 2 0 242.593 + 0 6 0 0 -6 3 0 246.494 + 0 6 0 0 -1 2 1 248.649 + 0 6 0 0 -4 1 0 254.313 + 0 6 0 0 -1 1 0 243.615 + 0 6 0 0 -3 0 0 256.399 + 0 6 0 0 -1 0 0 253.024 + 0 6 0 0 -4 0 0 248.917 + 0 6 0 0 0 0 0 254.634 + 0 6 0 0 -6 2 0 267.133 + 0 6 0 0 0 -1 0 264.118 + 0 6 0 0 -5 1 0 265.918 + 0 6 0 0 -2 0 0 267.742 + 0 6 0 0 -6 1 2 282.494 + 0 6 0 0 -2 -1 0 269.451 + 0 6 0 0 -5 0 0 272.441 + 0 6 0 0 -1 -1 0 268.244 + 0 6 0 0 -4 -1 0 263.892 + 0 6 0 0 0 -2 0 252.637 + 0 6 0 0 -5 -1 2 257.572 + 0 6 0 0 1 -2 0 259.842 + 0 6 0 0 -3 -2 0 247.194 + 0 6 0 0 2 -4 4 252.716 + 0 6 0 0 -3 -1 0 259.147 + 0 6 0 0 1 -3 0 251.777 + 0 6 0 0 -2 -2 0 246.598 + 0 6 0 0 1 -4 0 248.73 + 0 6 0 0 -4 -2 0 257.793 + 0 6 0 0 3 -6 0 253.753 + 0 6 0 0 -3 -3 0 259.064 + 0 6 0 0 2 -5 0 256.566 + 0 6 0 0 -4 -3 3 251.112 + 0 6 0 0 0 -3 0 260.003 + 0 6 0 0 -2 -4 0 248.273 + 0 6 0 0 -1 -2 0 250.349 + 0 6 0 0 -2 -3 0 260.738 + 0 6 0 0 -1 -3 0 269.454 + 0 6 0 0 -1 -4 0 266.839 + 0 6 0 0 1 -5 0 264.638 + 0 6 0 0 -1 -5 2 265.974 + 0 6 0 0 2 -6 5 271.178 + 0 6 0 0 0 -5 0 268.833 + 0 6 0 0 1 -6 2 261.431 + 0 6 0 0 0 -4 0 260.625 + 0 7 0 0 -3 7 5 282.087 + 0 7 0 0 -1 5 0 273.119 + 0 7 0 0 0 4 0 277.698 + 0 7 0 0 0 5 0 278.062 + 0 7 0 0 1 3 0 266.159 + 0 7 0 0 -1 6 2 267.236 + 0 7 0 0 0 3 0 264.588 + 0 7 0 0 2 2 0 263.915 + 0 7 0 0 1 2 0 256.757 + 0 7 0 0 3 2 0 260.574 + 0 7 0 0 2 1 0 258.647 + 0 7 0 0 2 3 0 252.713 + 0 7 0 0 1 1 0 252.576 + 0 7 0 0 1 4 0 255.928 + 0 7 0 0 -2 5 0 255.993 + 0 7 0 0 2 4 0 255.71 + 0 7 0 0 -1 4 0 249.699 + 0 7 0 0 1 5 2 253.792 + 0 7 0 0 -1 3 0 252.882 + 0 7 0 0 4 3 3 254.488 + 0 7 0 0 0 2 0 254.889 + 0 7 0 0 3 3 0 249.148 + 0 7 0 0 0 1 0 253.926 + 0 7 0 0 3 1 0 250.429 + 0 7 0 0 1 0 0 261.641 + 0 7 0 0 3 0 0 263.082 + 0 7 0 0 1 -2 1 261.495 + 0 7 0 0 4 0 0 259.697 + 0 7 0 0 4 2 0 265.567 + 0 7 0 0 1 -1 0 272.531 + 0 7 0 0 4 1 0 277.377 + 0 7 0 0 2 0 0 280.488 + 0 7 0 0 5 1 2 282.031 + 0 7 0 0 3 -1 0 285.473 + 0 7 0 0 5 0 0 269.053 + 0 7 0 0 2 -1 0 281.214 + 0 7 0 0 5 -1 0 276.673 + 0 7 0 0 2 -2 0 271.593 + 0 7 0 0 6 -1 2 268.527 + 0 7 0 0 1 -2 4 264.871 + 0 7 0 0 5 -2 0 259.871 + 0 7 0 0 2 -4 0 260.541 + 0 7 0 0 4 -1 0 257.593 + 0 7 0 0 2 -3 0 260.549 + 0 7 0 0 4 -2 0 261.1 + 0 7 0 0 3 -4 0 266.378 + 0 7 0 0 6 -2 0 264.808 + 0 7 0 0 3 -6 0 257.476 + 0 7 0 0 6 -3 0 263.553 + 0 7 0 0 3 -5 0 256.867 + 0 7 0 0 7 -3 3 262.54 + 0 7 0 0 3 -3 0 255.618 + 0 7 0 0 6 -4 0 267.142 + 0 7 0 0 3 -2 0 265.506 + 0 7 0 0 5 -3 0 266.033 + 0 7 0 0 4 -3 0 268.848 + 0 7 0 0 5 -4 0 265.686 + 0 7 0 0 4 -6 5 280.519 + 0 7 0 0 6 -5 2 273.824 + 0 7 0 0 5 -6 2 272.595 + 0 7 0 0 5 -5 0 274.111 + 0 7 0 0 4 -5 0 276.962 + 0 7 0 0 4 -4 0 275.376 + 0 7 0 0 2 -6 5 287.492 + 0 7 0 0 1 -5 0 281.4 + 0 7 0 0 0 -4 0 277.28 + 0 7 0 0 0 -5 0 272.654 + 0 7 0 0 -1 -3 0 273.89 + 0 7 0 0 1 -6 2 268.731 + 0 7 0 0 0 -3 0 263.57 + 0 7 0 0 -2 -2 0 267.825 + 0 7 0 0 -1 -2 0 266.029 + 0 7 0 0 -3 -2 0 263.147 + 0 7 0 0 -2 -1 0 260.041 + 0 7 0 0 -2 -3 0 257.295 + 0 7 0 0 -1 -1 0 254.286 + 0 7 0 0 -1 -5 2 256.251 + 0 7 0 0 2 -5 0 257.337 + 0 7 0 0 -1 -4 0 258.361 + 0 7 0 0 1 -4 0 260.723 + 0 7 0 0 -2 -4 0 259.488 + 0 7 0 0 1 -3 0 253.019 + 0 7 0 0 -3 -4 3 258.481 + 0 7 0 0 0 -2 0 257.387 + 0 7 0 0 -3 -3 0 260.831 + 0 7 0 0 0 -1 0 260.379 + 0 7 0 0 -3 -1 0 258.542 + 0 7 0 0 -1 0 0 257.155 + 0 7 0 0 -3 0 0 264.939 + 0 7 0 0 0 0 0 266.776 + 0 7 0 0 -4 0 0 271.558 + 0 7 0 0 -1 2 0 272.354 + 0 7 0 0 -4 -2 0 276.918 + 0 7 0 0 -1 1 0 278.728 + 0 7 0 0 -4 -1 0 281.614 + 0 7 0 0 -2 0 0 276.448 + 0 7 0 0 -5 -1 2 288.166 + 0 7 0 0 -3 1 0 284.571 + 0 7 0 0 -5 0 0 282.209 + 0 7 0 0 -2 1 0 289.342 + 0 7 0 0 -5 1 0 283.343 + 0 7 0 0 -2 2 0 270.507 + 0 7 0 0 -6 1 2 272.45 + 0 7 0 0 -2 4 1 263.714 + 0 7 0 0 -5 2 0 264.631 + 0 7 0 0 -2 4 4 260.541 + 0 7 0 0 -4 1 0 259.206 + 0 7 0 0 -2 3 0 262.841 + 0 7 0 0 -4 2 0 260.979 + 0 7 0 0 -3 4 0 262.333 + 0 7 0 0 -6 2 0 265.289 + 0 7 0 0 -3 6 0 268.985 + 0 7 0 0 -6 3 0 263.687 + 0 7 0 0 -3 5 0 258.397 + 0 7 0 0 -7 4 3 266.669 + 0 7 0 0 -3 3 0 254.331 + 0 7 0 0 -6 4 0 268.284 + 0 7 0 0 -3 2 0 268.228 + 0 7 0 0 -5 3 0 269.333 + 0 7 0 0 -4 3 0 272.772 + 0 7 0 0 -5 4 0 278.379 + 0 7 0 0 -4 7 5 279.668 + 0 7 0 0 -6 5 2 276.812 + 0 7 0 0 -5 6 2 270.876 + 0 7 0 0 -5 5 0 282.019 + 0 7 0 0 -4 5 0 282.31 + 0 7 0 0 -4 4 0 280.454 + 0 8 0 0 4 -7 5 283.901 + 0 8 0 0 4 -5 0 282.748 + 0 8 0 0 4 -4 0 274.701 + 0 8 0 0 5 -5 0 275.733 + 0 8 0 0 4 -3 0 275.592 + 0 8 0 0 5 -6 2 279.988 + 0 8 0 0 3 -3 0 265.289 + 0 8 0 0 4 -2 0 262.449 + 0 8 0 0 3 -2 0 268.397 + 0 8 0 0 5 -2 0 266.277 + 0 8 0 0 3 -1 0 261.9 + 0 8 0 0 5 -3 0 261.551 + 0 8 0 0 2 -1 0 256.183 + 0 8 0 0 5 -4 0 260.451 + 0 8 0 0 3 -5 0 262.738 + 0 8 0 0 6 -4 0 259.256 + 0 8 0 0 3 -4 0 259.435 + 0 8 0 0 6 -5 2 258.566 + 0 8 0 0 2 -3 0 259.707 + 0 8 0 0 7 -3 3 254.559 + 0 8 0 0 2 -2 0 263.789 + 0 8 0 0 6 -3 0 253.007 + 0 8 0 0 1 -1 0 277.684 + 0 8 0 0 4 -1 0 255.644 + 0 8 0 0 1 0 0 267.217 + 0 8 0 0 3 0 0 268.86 + 0 8 0 0 -1 2 1 270.457 + 0 8 0 0 4 0 0 276.581 + 0 8 0 0 6 -2 0 271.771 + 0 8 0 0 0 1 0 282.565 + 0 8 0 0 5 -1 0 283.067 + 0 8 0 0 2 0 0 293.119 + 0 8 0 0 6 -1 2 289.271 + 0 8 0 0 2 1 0 286.669 + 0 8 0 0 5 0 0 283.59 + 0 8 0 0 1 1 0 287.632 + 0 8 0 0 4 1 0 274.931 + 0 8 0 0 0 2 0 285.038 + 0 8 0 0 5 1 2 274.488 + 0 8 0 0 -1 2 4 265.778 + 0 8 0 0 3 2 0 275.513 + 0 8 0 0 -2 4 0 278.308 + 0 8 0 0 3 1 0 269.222 + 0 8 0 0 -1 3 0 265.623 + 0 8 0 0 2 2 0 260.341 + 0 8 0 0 -1 4 0 269.13 + 0 8 0 0 4 2 0 274.468 + 0 8 0 0 -3 6 0 272.923 + 0 8 0 0 3 3 0 265.631 + 0 8 0 0 -2 5 0 269.399 + 0 8 0 0 4 3 3 267.94 + 0 8 0 0 0 3 0 274.392 + 0 8 0 0 2 4 0 271.137 + 0 8 0 0 1 2 0 273.183 + 0 8 0 0 2 3 0 276.313 + 0 8 0 0 1 3 0 280.034 + 0 8 0 0 1 4 0 282.792 + 0 8 0 0 -2 6 5 283.269 + 0 8 0 0 1 5 2 286.314 + 0 8 0 0 -1 6 2 283.44 + 0 8 0 0 0 5 0 276.887 + 0 8 0 0 -1 5 0 276.196 + 0 8 0 0 0 4 0 286.543 + 0 8 0 0 -4 6 5 265.778 + 0 8 0 0 -4 5 0 260.499 + 0 8 0 0 -4 4 0 255.081 + 0 8 0 0 -5 5 0 254.493 + 0 8 0 0 -4 3 0 249.663 + 0 8 0 0 -5 6 2 259.049 + 0 8 0 0 -3 3 0 254.206 + 0 8 0 0 -4 2 0 246.813 + 0 8 0 0 -3 2 0 242.299 + 0 8 0 0 -5 2 0 243.468 + 0 8 0 0 -3 1 0 242.998 + 0 8 0 0 -5 3 0 243.745 + 0 8 0 0 -2 1 0 244.523 + 0 8 0 0 -6 5 2 239.073 + 0 8 0 0 -3 5 0 241.275 + 0 8 0 0 -5 4 0 239.187 + 0 8 0 0 -3 4 0 244.551 + 0 8 0 0 -6 4 0 237.923 + 0 8 0 0 -2 3 0 245.856 + 0 8 0 0 -7 4 3 241.402 + 0 8 0 0 -2 2 0 237.657 + 0 8 0 0 -6 3 0 237.845 + 0 8 0 0 -1 1 0 236.894 + 0 8 0 0 -4 1 0 242.524 + 0 8 0 0 -1 0 0 241.671 + 0 8 0 0 -3 0 0 242.867 + 0 8 0 0 0 0 0 246.46 + 0 8 0 0 -4 0 0 251.501 + 0 8 0 0 1 -2 0 247.587 + 0 8 0 0 -6 2 0 250.963 + 0 8 0 0 0 -1 0 262.619 + 0 8 0 0 -5 1 0 257.478 + 0 8 0 0 -2 0 0 260.469 + 0 8 0 0 -6 1 2 264.04 + 0 8 0 0 -2 -1 0 264.248 + 0 8 0 0 -5 0 0 258.131 + 0 8 0 0 -1 -1 0 250.18 + 0 8 0 0 -4 -1 0 256.173 + 0 8 0 0 0 -2 0 252.768 + 0 8 0 0 -5 -1 2 246.683 + 0 8 0 0 2 -4 1 242.364 + 0 8 0 0 -3 -2 0 241.675 + 0 8 0 0 2 -4 4 253.673 + 0 8 0 0 -3 -1 0 241.954 + 0 8 0 0 1 -3 0 246.378 + 0 8 0 0 -2 -2 0 245.092 + 0 8 0 0 1 -4 0 241.237 + 0 8 0 0 -4 -2 0 239.892 + 0 8 0 0 3 -6 0 233.333 + 0 8 0 0 -3 -3 0 240.795 + 0 8 0 0 2 -5 0 236.668 + 0 8 0 0 -3 -4 3 236.812 + 0 8 0 0 0 -3 0 241.402 + 0 8 0 0 -2 -4 0 249.678 + 0 8 0 0 -1 -2 0 250.205 + 0 8 0 0 -2 -3 0 242.789 + 0 8 0 0 -1 -3 0 247.562 + 0 8 0 0 -1 -4 0 249.444 + 0 8 0 0 3 -7 5 255.421 + 0 8 0 0 -1 -5 2 260.654 + 0 8 0 0 1 -6 2 255.563 + 0 8 0 0 0 -5 0 265.013 + 0 8 0 0 1 -5 0 261.733 + 0 8 0 0 0 -4 0 260.19 diff --git a/Reco/plugins/Layer_Sum_Analyzer.cc b/Reco/plugins/Layer_Sum_Analyzer.cc index 08568ce..5cf808b 100644 --- a/Reco/plugins/Layer_Sum_Analyzer.cc +++ b/Reco/plugins/Layer_Sum_Analyzer.cc @@ -53,7 +53,9 @@ const bool PIONS(0);// uses > PION_*CELLS_THRESHOLD and < *CELLS_THRESHOLD //TO BE FIXED for FNAL double ADCtoMIP_FNAL[16] = {16.02,16.85,15.36,14.73,10.66,15.64,16.52,14.24,10.07,14.42,16.14,17.33,16.61,16.84,15.79,16.43}; -double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; +//double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; +double ADCtoMIP_CERN[16] = {17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66}; + //// for EMM physics list 28 configuration get the calibration factors (1.e-06 GeV) @@ -130,9 +132,9 @@ class Layer_Sum_Analyzer : public edm::one::EDAnalyzer fs; @@ -266,7 +267,8 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) h_E7oE19_L_dw[layer] = fs->make(Form("h_E7oE19_L%d",layer+1), "", 5000, -5, 5); // } - + + h_eAll_all = fs->make("h_eAll_all", "", 40010, -10, 40000); h_e7_all = fs->make("h_e7_all", "", 40010, -10, 40000); h_e19_all = fs->make("h_e19_all", "", 40010, -10, 40000); @@ -352,34 +354,37 @@ Layer_Sum_Analyzer::Layer_Sum_Analyzer(const edm::ParameterSet& iConfig) return; } - for(int iL=0; iL("mapFile_FNAL"); } else{ - ADCtoMIP[iL] = ADCtoMIP_CERN[iL]; - ADCtoMIPup[iL] = ADCtoMIP_CERN[iL] * 1.05; - ADCtoMIPdw[iL] = ADCtoMIP_CERN[iL] * 0.95; mapfile_ = iConfig.getParameter("mapFile_CERN"); - if(layers_config_ == 1){ - Weights_L[iL] = LayerWeight_8L_conf1[iL]; - X0_L[iL] = X0depth_8L_conf1[iL]; - } - if(layers_config_ == 2){ - Weights_L[iL] = LayerWeight_8L_conf2[iL]; - X0_L[iL] = X0depth_8L_conf2[iL]; - } - if(layers_config_ == -1){ - Weights_L[iL] = 1.; - X0_L[iL] = 0.; + for(int iL=0; iL>> found commonmode = " << commonmode << std::endl; + for(int iL=0; iL>> normal " << std::endl; - ShowerShape shosha(Rechits, ADCtoMIP, commonmode, CMTHRESHOLD, max, max_x, max_y); + ShowerShape shosha(mapfile_, Rechits, ADCtoMIP, commonmode, CMTHRESHOLD, max, max_x, max_y); // std::cout << " >>> up " << std::endl; - ShowerShape shosha_up(Rechits, ADCtoMIPup, commonmode, CMTHRESHOLD, max, max_x, max_y); + ShowerShape shosha_up(mapfile_, Rechits, ADCtoMIPup, commonmode, CMTHRESHOLD, max, max_x, max_y); // std::cout << " >>> down " << std::endl; - ShowerShape shosha_dw(Rechits, ADCtoMIPdw, commonmode, CMTHRESHOLD, max, max_x, max_y); + ShowerShape shosha_dw(mapfile_, Rechits, ADCtoMIPdw, commonmode, CMTHRESHOLD, max, max_x, max_y); float E1SumL_R = 0.; float E7SumL_R = 0.; @@ -767,10 +773,19 @@ Layer_Sum_Analyzer::beginJob() throw cms::Exception("Unable to load electronics map"); } - for(int iii = 0; iii < MAXLAYERS; iii++){ - ADCtoMIP[iii] = ADCtoMIP[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs - ADCtoMIPup[iii] = ADCtoMIPup[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs - ADCtoMIPdw[iii] = ADCtoMIPdw[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + if(layers_config_ != 0){ + for(int iii = 0; iii < MAXSKIROCS; iii++){ + ADCtoMIP[iii] = ADCtoMIP[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPup[iii] = ADCtoMIPup[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPdw[iii] = ADCtoMIPdw[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + } + } + else{ + for(int iii = 0; iii < MAXLAYERS; iii++){ + ADCtoMIP[iii] = ADCtoMIP[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPup[iii] = ADCtoMIPup[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + ADCtoMIPdw[iii] = ADCtoMIPdw[iii] * MIP2ParticleCalib; // Converting response to 120 GeV protons to MIPs + } } /* for(int iii= 0; iii<16;iii++){ diff --git a/Reco/src/ShowerShape.cc b/Reco/src/ShowerShape.cc index 5b4aad2..a14a48b 100644 --- a/Reco/src/ShowerShape.cc +++ b/Reco/src/ShowerShape.cc @@ -73,13 +73,18 @@ class ShowerShape void eccentricity(int layer, float &ratio) {ratio = eccentr[layer]; return;}; - ShowerShape(edm::Handle Rechits_, double ADCtoMIP_[MAXLAYERS], double commonmode_[MAXLAYERS], int CMTHRESHOLD, double maxE[MAXLAYERS], double maxX[MAXLAYERS], double maxY[MAXLAYERS]); + ShowerShape(std::string _mapFile, edm::Handle Rechits_, double ADCtoMIP_[MAXSKIROCS], double commonmode_[MAXLAYERS], int CMTHRESHOLD, double maxE[MAXLAYERS], double maxX[MAXLAYERS], double maxY[MAXLAYERS]); ~ShowerShape(); private: // ----------member data --------------------------- + struct { + HGCalElectronicsMap emap_; + } essource_; + + edm::Handle Rechits; int sensorsize = 128; @@ -94,7 +99,7 @@ class ShowerShape double maxdist_fourthNB = (0.5 + sqrt(3) * 3.) * HGCAL_TB_CELL::FULL_CELL_SIDE; - double ADCtoMIP[MAXLAYERS]; + double ADCtoMIP[MAXSKIROCS]; double commonmode[MAXLAYERS]; double maxE[MAXLAYERS], maxX[MAXLAYERS], maxY[MAXLAYERS]; @@ -131,23 +136,32 @@ class ShowerShape //eccentricity float eccentr[MAXLAYERS]; + }; -ShowerShape::ShowerShape(edm::Handle Rechits_, double ADCtoMIP_[MAXLAYERS], double commonmode_[MAXLAYERS], int CMTHRESHOLD_, +ShowerShape::ShowerShape(std::string _mapFile, edm::Handle Rechits_, double ADCtoMIP_[MAXSKIROCS], double commonmode_[MAXLAYERS], int CMTHRESHOLD_, double maxE_[MAXLAYERS], double maxX_[MAXLAYERS], double maxY_[MAXLAYERS]) { Rechits = Rechits_; CMTHRESHOLD = CMTHRESHOLD_; - for(int i=0; i Date: Thu, 8 Dec 2016 15:15:28 +0100 Subject: [PATCH 137/297] path to bad spill file --- RawToDigi/python/hgcaltbdigis_cfi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RawToDigi/python/hgcaltbdigis_cfi.py b/RawToDigi/python/hgcaltbdigis_cfi.py index d9b078d..c448f2f 100644 --- a/RawToDigi/python/hgcaltbdigis_cfi.py +++ b/RawToDigi/python/hgcaltbdigis_cfi.py @@ -10,6 +10,6 @@ BadSpillFilter = cms.EDFilter("Bad_Spill_Filter", layers_config = cms.int32(-1), - nameCFG1 = cms.string('../CondObjects/data/Bad_Run_Spill_CFG1.txt'), - nameCFG2 = cms.string('../CondObjects/data/Bad_Run_Spill_CFG2.txt') + nameCFG1 = cms.string('CondObjects/data/Bad_Run_Spill_CFG1.txt'), + nameCFG2 = cms.string('CondObjects/data/Bad_Run_Spill_CFG2.txt') ) From ec68f0849f42fb7d24ab6eef377c9b40b051f395 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 12 Dec 2016 14:40:57 +0100 Subject: [PATCH 138/297] [positionr resolution] remove invalid run from runEnergies file --- CondObjects/data/runEnergies.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index d109198..3944004 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -60,7 +60,6 @@ 1072 100. electron 1 1073 100. electron 1 1088 32. electron 1 -1089 32. electron 1 1091 32. electron 1 1092 32. electron 1 1093 32. electron 1 From 782db794d3bb4e5444e254db5a536b55381041a3 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 13 Dec 2016 15:23:53 +0100 Subject: [PATCH 139/297] [position resolution] remove double occurence of run 1026 in configuration --- CondObjects/data/runEnergies.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index 3944004..c7b180b 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -39,7 +39,6 @@ 951 250. electron 1 952 250. electron 1 953 250. electron 1 -1026 200. electron 1 1027 200. electron 1 1028 200. electron 1 1029 200. electron 1 From f8f97c11a8de27467b4bef0dec73d7425c67ca56 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 14 Dec 2016 14:39:07 +0100 Subject: [PATCH 140/297] [position resolution] event selection based on sum of energies of clusters and all cells, rename weights to energies in track points --- Reco/interface/PositionResolutionHelpers.h | 12 ++-- Reco/plugins/Position_Resolution_Analyzer.cc | 45 +++++++++++-- Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 71 ++++++++++++-------- test_cfg_newEB.py | 5 +- 5 files changed, 92 insertions(+), 42 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index c9a9b6d..9223971 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -92,7 +92,8 @@ class SensorHitMap { double CM_sum; double totalWeight; //equivalent to the denominator in the according weighting method - double totalIntensity; + double totalEnergy; + std::map totalClusterEnergy; bool filterByCellType(int ID); void considerNClosest(int N_considered); @@ -109,10 +110,11 @@ class SensorHitMap { void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); - void addClusterHit(HGCalTBDetId hit, int N_considered); + void registerClusterHit(HGCalTBDetId hit, int N_considered); void subtractCM(); void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); - double getTotalIntensity(); + double getTotalEnergy(); + double getTotalClusterEnergy(int N_considered); double getTotalWeight(); double getZ_cm(); double getZ_X0(); @@ -134,7 +136,7 @@ class ParticleTrack{ void fitTrack(TrackFittingMethod method); std::pair calculatePositionXY(double z); std::pair calculatePositionErrorXY(double z); - double getSumOfWeights(); + double getSumOfEnergies(); private: int N_points; //cross check, should be identical to x.size() etc. //general information, the fit points @@ -144,7 +146,7 @@ class ParticleTrack{ std::vector y_err; std::vector z; std::vector z_err; - std::vector weights; + std::vector Energies; TrackFittingMethod lastAppliedMethod; //different fit functions diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index b61caad..88bd4fd 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -82,6 +82,12 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer successfulFitCounter, failedFitCounter; @@ -198,6 +204,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS nLayers = iConfig.getParameter("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); + totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); + //making 2DGraphs per event? EventsFor2DGraphs = iConfig.getParameter >("EventsFor2DGraphs"); @@ -228,6 +236,10 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("layerZ_X0", &layerZ_X0, "layerZ_X0/D"); outTree->Branch("deviation", &deviation, "deviation/D"); + + ClusterVetoCounter = 0; + HitsVetoCounter = 0; + CommonVetoCounter = 0; }//constructor ends here Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { @@ -273,7 +285,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E event.getByToken(HGCalTBClusterCollection7_Token, clusters7); event.getByToken(HGCalTBClusterCollection19_Token, clusters19); - //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer //fill the rechits: for(auto Rechit : *Rechits) { @@ -292,22 +303,39 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E for( auto cluster : *clusters ){ layer = cluster.layer(); for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->addClusterHit((*it).first, -1); + Sensors[layer]->registerClusterHit((*it).first, -1); } } for( auto cluster : *clusters7 ){ layer = cluster.layer(); for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->addClusterHit((*it).first, 7); + Sensors[layer]->registerClusterHit((*it).first, 7); } } for( auto cluster : *clusters19 ){ layer = cluster.layer(); for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->addClusterHit((*it).first, 19); + Sensors[layer]->registerClusterHit((*it).first, 19); } } + //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must + //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) + double sumEnergy = 0., sumClusterEnergy = 0.; + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + sumEnergy += it->second->getTotalEnergy(); + sumClusterEnergy += it->second->getTotalClusterEnergy(-1); + } + + if(sumEnergy < totalEnergyThreshold) HitsVetoCounter+=1; //make this energy dependent! + if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; + if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { + CommonVetoCounter+=1; + return; + } + + + //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract common first @@ -318,6 +346,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } + //step 3: fill particle tracks std::map Tracks; //the integer index indicates which layer is omitted in the track calculation for (int i=1; i<=nLayers; i++) { @@ -330,6 +359,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->fitTrack(fittingMethod); } + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (layer=1; layer<=nLayers; layer++) { layerZ_cm = Sensors[layer]->getZ_cm(); @@ -370,7 +400,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deltaY = y_predicted - y_true; deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); - sumFitWeights = Tracks[layer]->getSumOfWeights(); + sumFitWeights = Tracks[layer]->getSumOfEnergies(); layerWeight = Sensors[layer]->getTotalWeight(); //DEBUG @@ -414,7 +444,10 @@ void Position_Resolution_Analyzer::beginJob() { } void Position_Resolution_Analyzer::endJob() { - //optained information are not processed into according ROOT objects for final storage + std::cout<<"ClusterVetos: "<ID = ID; @@ -73,7 +73,7 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { Hits[uniqueID]->y = ivy; Hits[uniqueID]->I = energy; Hits[uniqueID]->E = energy; - totalIntensity += energy; + totalEnergy += energy; if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { mostSignificantHit = Hits[uniqueID]; @@ -86,13 +86,19 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { } } -void SensorHitMap::addClusterHit(HGCalTBDetId hit, int N_considered) { +void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //requires that all hits have been added to the layer int uniqueID = hit.rawId(); + + if (totalClusterEnergy.find(N_considered) == totalClusterEnergy.end()) { + totalClusterEnergy[N_considered] = 0; + } + totalClusterEnergy[N_considered] += Hits[uniqueID]->E; + clusterIndexes[N_considered].push_back(uniqueID); } void SensorHitMap::subtractCM() { - totalIntensity = 0.; + totalEnergy = 0.; double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ @@ -104,7 +110,7 @@ void SensorHitMap::subtractCM() { } else { (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); } - totalIntensity += (*hit).second->I; + totalEnergy += (*hit).second->I; } } @@ -203,8 +209,12 @@ std::pair SensorHitMap::getCenterOfClosestCell(std::pairx, to_sort[0].second->y); } -double SensorHitMap::getTotalIntensity() { - return this->totalIntensity; +double SensorHitMap::getTotalEnergy() { + return this->totalEnergy; +} + +double SensorHitMap::getTotalClusterEnergy(int N_considered) { + return this->totalClusterEnergy[N_considered]; } double SensorHitMap::getTotalWeight() { @@ -212,16 +222,19 @@ double SensorHitMap::getTotalWeight() { }; -//private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) +//private functions + +//only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) +//TODO bool SensorHitMap::filterByCellType(int ID) { /* if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation - return true; //TODO!!! + return true; //TODO */ return false; } -void SensorHitMap::considerNClosest(int N_considered) { //TODO!!! +void SensorHitMap::considerNClosest(int N_considered) { //better: ranking by radial distance and then take the closest ones HitsForPositioning.clear(); if (N_considered < 0) { @@ -373,27 +386,27 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ y_err.push_back(sensor->getCenterPositionError().second); z.push_back(sensor->getZ_cm()); z_err.push_back(0.0); - weights.push_back(sensor->getTotalIntensity()); + Energies.push_back(sensor->getTotalEnergy()); }; void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { - //calculate the sum of all weights first - double sum_Weights = 0.0; + //calculate the sum of all Energies first + double sum_Energies = 0.0; for (int i=0; i ParticleTrack::calculatePositionErrorXY(double z) { } } -double ParticleTrack::getSumOfWeights() { //returns the original weights (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) - double sum_Weights = 0.0; +double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) + double sum_Energies = 0.0; for (int i=0; i ParticleTrack::positionErrorFromPolFitTGraphErrors(int } -double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m) { +double weightToFitPointWeight(double e, double sum_e, FitPointWeightingMethod m) { switch(m) { case NONE: return 1.0; case LINEAR: - return 1.0/(1.0+w/sum_w); + return 1.0/(1.0+e/sum_e); case SQUARED: - return pow(1.0/(1.0+w/sum_w) ,2); + return pow(1.0/(1.0+e/sum_e) ,2); case LOGARITHMIC: - return 1.0/(1.0+log(1.0+w/sum_w)); + return 1.0/(1.0+log(1.0+e/sum_e)); case EXPONENTIAL: - return exp(-w/sum_w); + return exp(-e/sum_e); default: return 1.0; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 3070176..46b18fc 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -9,14 +9,14 @@ #Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', #'/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', #use this for eos - '/user/data/Testbeam/September2016', #use this for running on pclcd + '/home/data/Testbeam/September2016', #use this for running on pclcd #'/home/home1/institut_3a/quast/TestBeamSeptember2016/', #use this for running on lx3a03 VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') options.register('outputFolder', - '~/outputs/', + '/home/outputs/Testbeam/September2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') @@ -174,6 +174,7 @@ process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) +process.position_resolution_analyzer.totalEnergyThreshold = 1000. process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs From 4e870ff64fcb4f233f1e9c5fabaf15a7b8f7d719 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 14 Dec 2016 16:07:18 +0100 Subject: [PATCH 141/297] [position resolution] write out energy sums into tree to externalize event selection into plotting step --- Reco/plugins/Position_Resolution_Analyzer.cc | 6 ++++-- test_cfg_newEB.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 88bd4fd..e831361 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -100,7 +100,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); outTree->Branch("layerWeight", &layerWeight, "layerWeight/D"); + outTree->Branch("sumEnergy", &sumEnergy, "sumEnergy/D"); + outTree->Branch("sumClusterEnergy", &sumClusterEnergy, "sumClusterEnergy/D"); outTree->Branch("sumFitWeights", &sumFitWeights, "sumFitWeights/D"); outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); outTree->Branch("x_predicted_to_closest_cell", &x_predicted_to_closest_cell, "x_predicted_to_closest_cell/D"); @@ -321,7 +323,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) - double sumEnergy = 0., sumClusterEnergy = 0.; + sumEnergy = 0., sumClusterEnergy = 0.; for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { sumEnergy += it->second->getTotalEnergy(); sumClusterEnergy += it->second->getTotalClusterEnergy(-1); diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 46b18fc..6782ec1 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -174,7 +174,7 @@ process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) -process.position_resolution_analyzer.totalEnergyThreshold = 1000. +process.position_resolution_analyzer.totalEnergyThreshold = -1000. process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs From a7637e15710f19c2840c2ade5104baf31c78513c Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 11:25:00 +0100 Subject: [PATCH 142/297] [position resolution] add event counter to the tree --- Reco/plugins/Position_Resolution_Analyzer.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index e831361..963483d 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -98,7 +98,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer(config1X0Depths, config1X0Depths + sizeof(config1X0Depths)/sizeof(double)); } + eventCounter = 0; + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); nLayers = iConfig.getParameter("nLayers"); @@ -212,7 +214,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //initialize tree and set Branch addresses outTree = fs->make("deviations", "deviations"); outTree->Branch("configuration", &configuration, "configuration/I"); - outTree->Branch("eventId", &evId, "eventId/I"); + outTree->Branch("eventId", &evId, "eventId/I"); //event ID as it comes from the reader + outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration of this analysis w.r.t. the individual events outTree->Branch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); @@ -256,6 +259,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E event.getByToken(RunDataToken, rd); configuration = rd->configuration; evId = event.id().event(); + eventCounter++; run = rd->run; energy = rd->energy; if (run == -1) { From f710c351557373991fc056d5d6e851115d4438fb Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 12:10:09 +0100 Subject: [PATCH 143/297] [position resolution] write common mode sum and counters to tree, set all cells below threshold to zero energy --- Reco/interface/PositionResolutionHelpers.h | 2 +- Reco/plugins/Position_Resolution_Analyzer.cc | 18 +++++++++++++----- Reco/src/PositionResolutionHelpers.cc | 12 +++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 9223971..f0e618b 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -111,7 +111,7 @@ class SensorHitMap { //reduces the information from the Rechit towards what is necessary for the impact point calculation void addHit(HGCalTBRecHit Rechit); void registerClusterHit(HGCalTBDetId hit, int N_considered); - void subtractCM(); + std::pair subtractCM(); //returns the sum of Common mode noise and the number of cells that enter the calculation void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); double getTotalEnergy(); double getTotalClusterEnergy(int N_considered); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 963483d..bfd20c3 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -100,9 +100,11 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer CM_tmp; //will write the subtract_CM() return values for each layer }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -218,7 +220,11 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration of this analysis w.r.t. the individual events outTree->Branch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); - outTree->Branch("energy", &energy, "energy/D"); + outTree->Branch("energy", &energy, "energy/D"); //electron energy in GeV + outTree->Branch("CM_sum", &CM_sum, "CM_sum/D"); + outTree->Branch("CM_cells_count", &CM_cells_count, "CM_cells_count/D"); + outTree->Branch("layerEnergy", &layerEnergy, "layerEnergy/D"); + outTree->Branch("layerClusterEnergy", &layerClusterEnergy, "layerClusterEnergy/D"); outTree->Branch("layerWeight", &layerWeight, "layerWeight/D"); outTree->Branch("sumEnergy", &sumEnergy, "sumEnergy/D"); outTree->Branch("sumClusterEnergy", &sumClusterEnergy, "sumClusterEnergy/D"); @@ -341,15 +347,15 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } - //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract common first - it->second->subtractCM(); + CM_tmp = it->second->subtractCM(); + CM_cells_count = CM_tmp.first; + CM_sum = CM_tmp.second; //now calculate the center positions for each layer it->second->calculateCenterPosition(considerationMethod, weightingMethod); - } @@ -407,6 +413,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); sumFitWeights = Tracks[layer]->getSumOfEnergies(); + layerEnergy = Sensors[layer]->getTotalEnergy(); + layerClusterEnergy = Sensors[layer]->getTotalClusterEnergy(-1); layerWeight = Sensors[layer]->getTotalWeight(); //DEBUG diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index db13f80..e43891c 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -6,7 +6,7 @@ //public functions SensorHitMap::SensorHitMap(){ mostSignificantHit = NULL; //will point to the most significant hit - + centralHitPoint = std::make_pair(0., 0.); centralHitPointError = std::make_pair(sqrt(12.), sqrt(12.)); CM_threshold = 2.; @@ -16,7 +16,7 @@ SensorHitMap::SensorHitMap(){ sensorSize = 128; CM_cells_count = 0; - CM_sum = 0; + CM_sum = 0.; totalWeight = 1.; totalEnergy = 0.; @@ -97,7 +97,7 @@ void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //r clusterIndexes[N_considered].push_back(uniqueID); } -void SensorHitMap::subtractCM() { +std::pair SensorHitMap::subtractCM() { totalEnergy = 0.; double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; @@ -106,12 +106,14 @@ void SensorHitMap::subtractCM() { // we want: - all cells that were input to the cm (common mode) calculation get weight 0 // - all the others are corrected by the cm if ((*hit).second->E > CM_threshold) { - (*hit).second->I = (*hit).second->I - cm_subtraction; - } else { (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); + } else { + (*hit).second->I = 0.;//std::max((*hit).second->I - cm_subtraction, 0.); //everything below the given threshold is set to zero } totalEnergy += (*hit).second->I; } + + return std::make_pair(CM_cells_count, CM_sum); } void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod) { From 233136285edbfe9019c7120676236505ec3ec613 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 12:59:12 +0100 Subject: [PATCH 144/297] [position resolution] only consider cell types '0' --- Reco/src/PositionResolutionHelpers.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index e43891c..2efa07c 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -230,9 +230,17 @@ double SensorHitMap::getTotalWeight() { //TODO bool SensorHitMap::filterByCellType(int ID) { /* - if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation - return true; //TODO + ID = 0 : full cell, + ID = 1 : calibration pad, + ID = 2 : half cell, + ID = 3 : mouse bite cell, + ID = 4 : outer calibration pad cell, + ID = 5 : merged cell */ + + if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation + return true; + return false; } From ce515b09171ceaa131063624fadc40be68e67415 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 13:06:36 +0100 Subject: [PATCH 145/297] [position resolution] stronger influence of layer points with higher energy --- Reco/src/PositionResolutionHelpers.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 2efa07c..68e2c15 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -524,11 +524,11 @@ double weightToFitPointWeight(double e, double sum_e, FitPointWeightingMethod m) case NONE: return 1.0; case LINEAR: - return 1.0/(1.0+e/sum_e); + return 1.0/(0.01+e/sum_e); case SQUARED: - return pow(1.0/(1.0+e/sum_e) ,2); + return 1.0/(0.01+pow(e/sum_e),2); case LOGARITHMIC: - return 1.0/(1.0+log(1.0+e/sum_e)); + return 1.0/(0.01+log(1.0+e/sum_e)); case EXPONENTIAL: return exp(-e/sum_e); default: From a1936acb246e7727e84afa0a1ca4461b1ee2bffa Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 13:07:16 +0100 Subject: [PATCH 146/297] [position resolution] stronger influence of layer points with higher energy --- Reco/src/PositionResolutionHelpers.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 68e2c15..5c4d098 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -526,7 +526,7 @@ double weightToFitPointWeight(double e, double sum_e, FitPointWeightingMethod m) case LINEAR: return 1.0/(0.01+e/sum_e); case SQUARED: - return 1.0/(0.01+pow(e/sum_e),2); + return 1.0/(0.01+pow(e/sum_e,2)); case LOGARITHMIC: return 1.0/(0.01+log(1.0+e/sum_e)); case EXPONENTIAL: From 26595975f3f7b099495b45d2b3b8e7ed93d48e5a Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 15 Dec 2016 14:08:33 +0100 Subject: [PATCH 147/297] [position resolution] make sure unique IDs of hits correspond to not filtered cells to prevent segmentation fault when registering cluster hits --- Reco/src/PositionResolutionHelpers.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 5c4d098..3ef88b3 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -89,6 +89,8 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //requires that all hits have been added to the layer int uniqueID = hit.rawId(); + if(Hits.find(uniqueID) == Hits.end()) return; //if cluster hit does not represent a valid cell type, do not add it + if (totalClusterEnergy.find(N_considered) == totalClusterEnergy.end()) { totalClusterEnergy[N_considered] = 0; } @@ -237,7 +239,7 @@ bool SensorHitMap::filterByCellType(int ID) { ID = 4 : outer calibration pad cell, ID = 5 : merged cell */ - + if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation return true; From 5ae09061881ce7b7c6586937c9405c9abb131e0f Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 21 Dec 2016 16:07:02 +0100 Subject: [PATCH 148/297] [position resolution] extend helpers by extinction between own and aligned coordinatess, without explicit indication of alignment (global) parameters, they are equivalent --- Reco/interface/PositionResolutionHelpers.h | 15 +- Reco/plugins/MillepedeNTupelizer.cc | 423 +++++++++++++++++++ Reco/plugins/Position_Resolution_Analyzer.cc | 9 +- Reco/src/PositionResolutionHelpers.cc | 50 ++- 4 files changed, 476 insertions(+), 21 deletions(-) create mode 100644 Reco/plugins/MillepedeNTupelizer.cc diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index f0e618b..eac46ba 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -74,9 +74,11 @@ struct HitData { class SensorHitMap { private: std::pair centralHitPoint; + double centralHitZ; std::pair centralHitPointError; - double layerZ_cm; + double layerLabZ; double layerZ_X0; + double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; //alignment parameters int sensorSize; double CM_threshold; double ADC_per_MIP; @@ -104,7 +106,8 @@ class SensorHitMap { public: SensorHitMap(); ~SensorHitMap(); - void setZ(double z_cm, double z_X0); + void setLabZ(double z_cm, double z_X0); + void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); @@ -116,10 +119,12 @@ class SensorHitMap { double getTotalEnergy(); double getTotalClusterEnergy(int N_considered); double getTotalWeight(); - double getZ_cm(); + double getLabZ(); double getZ_X0(); - std::pair getCenterPosition(); - std::pair getCenterPositionError(); //calculated via RMS + double getIntrinsicHitZPosition(); + std::pair getHitPosition(); //returns central hit in layer's own frame + std::pair getLabHitPosition(); //returns central hit in lab frame + std::pair getHitPositionError(); //calculated via RMS std::pair getCenterOfClosestCell(std::pair X_ref); //debug diff --git a/Reco/plugins/MillepedeNTupelizer.cc b/Reco/plugins/MillepedeNTupelizer.cc new file mode 100644 index 0000000..6917477 --- /dev/null +++ b/Reco/plugins/MillepedeNTupelizer.cc @@ -0,0 +1,423 @@ +/* + * Write out residuals and derivatives to pass forward to millepede. + */ + +/** + @Author: Thorben Quast + 21 Dec 2016 + thorben.quast@cern.ch / thorben.quast@rwth-aachen.de +*/ + + +// system include files +#include +#include +#include +#include +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "TFile.h" +#include "TTree.h" + +//configuration1: +double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm + +//configuration2: +double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm + +class MillepedeNTupelizer : public edm::one::EDAnalyzer { + public: + explicit MillepedeNTupelizer(const edm::ParameterSet&); + ~MillepedeNTupelizer(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + edm::Service fs; + edm::EDGetTokenT HGCalTBRecHitCollection_Token; + edm::EDGetToken HGCalTBClusterCollection_Token; + edm::EDGetToken HGCalTBClusterCollection7_Token; + edm::EDGetToken HGCalTBClusterCollection19_Token; + + edm::EDGetTokenT RunDataToken; + + ConsiderationMethod considerationMethod; + WeightingMethod weightingMethod; + TrackFittingMethod fittingMethod; + FitPointWeightingMethod fitPointWeightingMethod; + + double pedestalThreshold; + std::vector Layer_Z_Positions; + std::vector ADC_per_MIP; + int LayersConfig; + int nLayers; + int SensorSize; + + double totalEnergyThreshold; + + int ClusterVetoCounter; + int HitsVetoCounter; + int CommonVetoCounter; + + //helper variables that are set within the event loop, i.e. are defined per event + std::map Sensors; + ParticleTrack* Track; + + //stuff to be written to the tree + TTree* outTree; + int configuration, evId, eventCounter, run; //eventCounter: counts the events in this analysis run to match information within ove event to each other + double energy; + + //initial global parameters, corresponding to obtained value from preceding iteration + //placeholders, should be defined per layer in the according class! + double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; + + double** residuals; + double** errors; + double*** derivatives; +}; + +MillepedeNTupelizer::MillepedeNTupelizer(const edm::ParameterSet& iConfig) { + + // initialization + usesResource("TFileService"); + HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); + RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); + + //read the cell consideration option to calculate the central hit point + std::string methodString = iConfig.getParameter("considerationMethod"); + if (methodString == "all") + considerationMethod = CONSIDERALL; + else if (methodString == "closest7") + considerationMethod = CONSIDERSEVEN; + else if (methodString == "closest19") + considerationMethod = CONSIDERNINETEEN; + else if(methodString == "clustersAll") + considerationMethod = CONSIDERCLUSTERSALL; + else if(methodString == "clusters7") + considerationMethod = CONSIDERCLUSTERSSEVEN; + else if(methodString == "clusters19") + considerationMethod = CONSIDERCLUSTERSNINETEEN; + + //read the weighting method to obtain the central hit point + methodString = iConfig.getParameter("weightingMethod"); + if (methodString == "squaredWeighting") + weightingMethod = SQUAREDWEIGHTING; + else if (methodString == "linearWeighting") + weightingMethod = LINEARWEIGHTING; + else if (methodString == "logWeighting_3.0_1.0") + weightingMethod = LOGWEIGHTING_30_10; + else if (methodString == "logWeighting_3.0_1.5") + weightingMethod = LOGWEIGHTING_30_15; + else if (methodString == "logWeighting_4.0_1.0") + weightingMethod = LOGWEIGHTING_40_10; + else if (methodString == "logWeighting_4.0_1.5") + weightingMethod = LOGWEIGHTING_40_15; + else if (methodString == "logWeighting_5.0_1.0") + weightingMethod = LOGWEIGHTING_50_10; + else if (methodString == "logWeighting_5.0_1.5") + weightingMethod = LOGWEIGHTING_50_15; + else if (methodString == "logWeighting_6.0_1.0") + weightingMethod = LOGWEIGHTING_60_10; + else if (methodString == "logWeighting_6.0_1.5") + weightingMethod = LOGWEIGHTING_60_15; + else if (methodString == "logWeighting_7.0_1.0") + weightingMethod = LOGWEIGHTING_70_10; + else if (methodString == "logWeighting_7.0_1.5") + weightingMethod = LOGWEIGHTING_70_15; + else + weightingMethod = DEFAULTWEIGHTING; + + //read the track fitting method + methodString = iConfig.getParameter("fittingMethod"); + if (methodString == "lineTGraphErrors") + fittingMethod = LINEFITTGRAPHERRORS; + else if (methodString == "pol2TGraphErrors") + fittingMethod = POL2TGRAPHERRORS; + else if (methodString == "pol3TGraphErrors") + fittingMethod = POL3TGRAPHERRORS; + else + fittingMethod = DEFAULTFITTING; + + //read the fit point weighting technique: + methodString = iConfig.getParameter("fitPointWeightingMethod"); + if (methodString == "none") + fitPointWeightingMethod = NONE; + else if (methodString == "linear") + fitPointWeightingMethod = LINEAR; + else if (methodString == "squared") + fitPointWeightingMethod = SQUARED; + else if (methodString == "logarithmic") + fitPointWeightingMethod = LOGARITHMIC; + else if (methodString == "exponential") + fitPointWeightingMethod = EXPONENTIAL; + else + fitPointWeightingMethod = NONE; + + //read the layer configuration + LayersConfig = iConfig.getParameter("layers_config"); + if (LayersConfig == 1) { + Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + } if (LayersConfig == 2) { + Layer_Z_Positions = std::vector(_config2Positions, _config2Positions + sizeof(_config2Positions)/sizeof(double)); + } else { + Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + } + + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); + SensorSize = iConfig.getParameter("SensorSize"); + nLayers = iConfig.getParameter("nLayers"); + ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); + + totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); + + eventCounter = 0; + residuals = new double*[nLayers]; + errors = new double*[nLayers]; + derivatives = new double**[nLayers]; + for (int i=0; imake("millepede", "millepede"); + outTree->Branch("configuration", &configuration, "configuration/I"); + outTree->Branch("eventId", &evId, "eventId/I"); //event ID as it comes from the reader + outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration of this analysis w.r.t. the individual events + outTree->Branch("run", &run, "run/I"); + outTree->Branch("energy", &energy, "energy/D"); //electron energy in GeV s + + std::string coordinates[3] = {"x", "y", "z"}; + //1-4 are local parameters + std::string parameters[10] = {"mx", "bx", "my", "by", "dalpha", "dbeta", "dgamma", "dx0", "dy0", "dz0"}; + for (int i=0; iBranch(("residuals_layer_"+std::to_string(i+1)+"_"+coordinates[j]).c_str(), &residuals[i][j]); + outTree->Branch(("errors_layer_"+std::to_string(i+1)+"_"+coordinates[j]).c_str(), &errors[i][j]); + for (int k=0; k<10; k++) { + outTree->Branch(("derivatives_layer_"+std::to_string(i+1)+"_"+coordinates[j]+"_"+parameters[k]).c_str(), &derivatives[i][j][k]); + } + } + } + + + ClusterVetoCounter = 0; + HitsVetoCounter = 0; + CommonVetoCounter = 0; + + + d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; + //possibly: read from millepede output file if procedure is iterated + +}//constructor ends here + +MillepedeNTupelizer::~MillepedeNTupelizer() { + return; +} + +// ------------ method called for each event ------------ +void MillepedeNTupelizer::analyze(const edm::Event& event, const edm::EventSetup& setup) { + edm::Handle rd; + + //get the relevant event information + event.getByToken(RunDataToken, rd); + configuration = rd->configuration; + evId = event.id().event(); + eventCounter++; + run = rd->run; + energy = rd->energy; + if (run == -1) { + std::cout<<"Run is not in configuration file - is ignored."< Rechits; + event.getByToken(HGCalTBRecHitCollection_Token, Rechits); + + //opening Clusters (made from all, closest 7, closest 9) + edm::Handle clusters; + edm::Handle clusters7; + edm::Handle clusters19; + event.getByToken(HGCalTBClusterCollection_Token, clusters); + event.getByToken(HGCalTBClusterCollection7_Token, clusters7); + event.getByToken(HGCalTBClusterCollection19_Token, clusters19); + + //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer + //fill the rechits: + for(auto Rechit : *Rechits) { + int layer = (Rechit.id()).layer(); + if ( Sensors.find(layer) == Sensors.end() ) { + Sensors[layer] = new SensorHitMap(); + Sensors[layer]->setPedestalThreshold(pedestalThreshold); + Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar + Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); + Sensors[layer]->setSensorSize(SensorSize); + } + Sensors[layer]->addHit(Rechit); + } + + //fill the hits from the cluster collections + for( auto cluster : *clusters ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, -1); + } + } + for( auto cluster : *clusters7 ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, 7); + } + } + for( auto cluster : *clusters19 ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, 19); + } + } + + //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must + //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) + double sumEnergy = 0., sumClusterEnergy = 0.; + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + sumEnergy += it->second->getTotalEnergy(); + sumClusterEnergy += it->second->getTotalClusterEnergy(-1); + } + + if(sumEnergy < totalEnergyThreshold) HitsVetoCounter+=1; //make this energy dependent! + if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; + if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { + CommonVetoCounter+=1; + return; + } + + + //step 2: calculate impact point with technique indicated as the argument + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + //subtract common first + it->second->subtractCM(); + //now calculate the center positions for each layer + it->second->calculateCenterPosition(considerationMethod, weightingMethod); + } + + + //step 3: fill particle tracks + Track = new ParticleTrack(); + for (int i=1; i<=nLayers; i++) { + Track->addFitPoint(Sensors[i]); + } + Track->weightFitPoints(fitPointWeightingMethod); + Track->fitTrack(fittingMethod); + + + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position + for (int layer=1; layer<=nLayers; layer++) { + double layer_labZ = Sensors[layer]->getLabZ(); + double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); + + std::pair position_predicted = Track->calculatePositionXY(layer_labZ+intrinsic_z); + double x_predicted = position_predicted.first; + double y_predicted = position_predicted.second; + + std::pair position_true = Sensors[layer]->getLabHitPosition(); //should be distinguished into intrinsic position (in frame of sensor) and the lab frame + //later will require to perform according transformation with angles and displacements + double x_true = position_true.first; + double y_true = position_true.second; + + + residuals[layer-1][0] = x_true - x_predicted; + residuals[layer-1][1] = y_true - y_predicted; + residuals[layer-1][2] = 0.0; + + errors[layer-1][0] = 1.2/sqrt(12.); + errors[layer-1][1] = 1.2/sqrt(12.); + errors[layer-1][2] = 0.1; + + derivatives[layer-1][0][0] = intrinsic_z + layer_labZ; + derivatives[layer-1][0][1] = 1.; + derivatives[layer-1][0][2] = (intrinsic_z + layer_labZ)*d_alpha; + derivatives[layer-1][0][3] = d_alpha; + derivatives[layer-1][0][4] = y_predicted; + derivatives[layer-1][0][5] = 0.; + derivatives[layer-1][0][6] = intrinsic_z; + derivatives[layer-1][0][7] = 1.; + derivatives[layer-1][0][8] = 0.; + derivatives[layer-1][0][9] = 0.; + + derivatives[layer-1][1][0] = -d_alpha*(intrinsic_z + layer_labZ); + derivatives[layer-1][1][1] = -d_alpha; + derivatives[layer-1][1][2] = intrinsic_z + layer_labZ; + derivatives[layer-1][1][3] = 1.; + derivatives[layer-1][1][4] = -x_predicted; + derivatives[layer-1][1][5] = intrinsic_z; + derivatives[layer-1][1][6] = 0.; + derivatives[layer-1][1][7] = 0.; + derivatives[layer-1][1][8] = 1.; + derivatives[layer-1][1][9] = 0.; + + derivatives[layer-1][2][0] = -d_gamma*(intrinsic_z + layer_labZ); + derivatives[layer-1][2][1] = -d_gamma; + derivatives[layer-1][2][2] = -d_beta*(intrinsic_z + layer_labZ); + derivatives[layer-1][2][3] = -d_beta; + derivatives[layer-1][2][4] = 0.; + derivatives[layer-1][2][5] = -y_predicted; + derivatives[layer-1][2][6] = -x_predicted; + derivatives[layer-1][2][7] = 0.; + derivatives[layer-1][2][8] = 0.; + derivatives[layer-1][2][9] = 1.; + + } + outTree->Fill(); + + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + delete (*it).second; + }; Sensors.clear(); + delete Track; + +}// analyze ends here + +void MillepedeNTupelizer::beginJob() { +} + +void MillepedeNTupelizer::endJob() { + std::cout<<"ClusterVetos: "<setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon in cm, second argument: position in radiation lengths + Sensors[layer]->setLabZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -374,7 +375,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (layer=1; layer<=nLayers; layer++) { - layerZ_cm = Sensors[layer]->getZ_cm(); + layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 = Sensors[layer]->getZ_X0(); std::pair position_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm); @@ -396,7 +397,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } successfulFitCounter[run]++; - std::pair position_true = Sensors[layer]->getCenterPosition(); + std::pair position_true = Sensors[layer]->getLabHitPosition(); x_true = position_true.first; y_true = position_true.second; @@ -404,7 +405,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E x_true_to_closest_cell = position_true_to_closest_cell.first; y_true_to_closest_cell = position_true_to_closest_cell.second; - std::pair position_error_true = Sensors[layer]->getCenterPositionError(); + std::pair position_error_true = Sensors[layer]->getHitPositionError(); x_true_err = position_error_true.first; y_true_err = position_error_true.second; diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 3ef88b3..7abc65d 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -8,13 +8,16 @@ SensorHitMap::SensorHitMap(){ mostSignificantHit = NULL; //will point to the most significant hit centralHitPoint = std::make_pair(0., 0.); + centralHitZ = 0; centralHitPointError = std::make_pair(sqrt(12.), sqrt(12.)); CM_threshold = 2.; - layerZ_cm = 0; + layerLabZ = 0; layerZ_X0 = 0; ADC_per_MIP = 1.; sensorSize = 128; + d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; + CM_cells_count = 0; CM_sum = 0.; @@ -33,11 +36,20 @@ void SensorHitMap::setSensorSize(int s) { sensorSize = s; } -void SensorHitMap::setZ(double z_cm, double z_X0) { - this->layerZ_cm = z_cm; +void SensorHitMap::setLabZ(double z_cm, double z_X0) { + this->layerLabZ = z_cm; this->layerZ_X0 = z_X0; } +void SensorHitMap::setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0) { + this->d_alpha = d_alpha; + this->d_beta = d_beta; + this->d_gamma = d_gamma; + this->d_x0 = d_x0; + this->d_y0 = d_y0; + this->d_z0 = d_z0; +} + void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { this->ADC_per_MIP = ADC_per_MIP; } @@ -46,8 +58,12 @@ void SensorHitMap::setPedestalThreshold(double t) { this->CM_threshold = t; } -double SensorHitMap::getZ_cm() { - return this->layerZ_cm; +double SensorHitMap::getLabZ() { + return this->layerLabZ + this->d_z0; +} + +double SensorHitMap::getIntrinsicHitZPosition() { + return this->centralHitZ; } double SensorHitMap::getZ_X0() { @@ -188,12 +204,22 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth default: SensorHitMap::poweredWeighting(2); } + + centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; } -std::pair SensorHitMap::getCenterPosition() { +std::pair SensorHitMap::getHitPosition() { return centralHitPoint; } -std::pair SensorHitMap::getCenterPositionError() { + +std::pair SensorHitMap::getLabHitPosition() { + double x_lab = centralHitPoint.first + d_alpha * centralHitPoint.second + d_x0; + double y_lab = - d_alpha * centralHitPoint.first + centralHitPoint.second + d_y0; + + return std::make_pair(x_lab, y_lab); +} + +std::pair SensorHitMap::getHitPositionError() { return centralHitPointError; } @@ -392,11 +418,11 @@ ParticleTrack::~ParticleTrack(){ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ N_points++; - x.push_back(sensor->getCenterPosition().first); - x_err.push_back(sensor->getCenterPositionError().first); - y.push_back(sensor->getCenterPosition().second); - y_err.push_back(sensor->getCenterPositionError().second); - z.push_back(sensor->getZ_cm()); + x.push_back(sensor->getHitPosition().first); + x_err.push_back(sensor->getHitPositionError().first); + y.push_back(sensor->getHitPosition().second); + y_err.push_back(sensor->getHitPositionError().second); + z.push_back(sensor->getLabZ()); z_err.push_back(0.0); Energies.push_back(sensor->getTotalEnergy()); }; From 1f40cec460c2795c081b0d76b59c685695dd31c8 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 21 Dec 2016 16:07:42 +0100 Subject: [PATCH 149/297] [alignment] add plugin to write ntuples as input to millepede for alignment study --- Reco/python/millepede_ntupelizer_cfi.py | 19 +++++++++++++++++++ StandardSequences/python/LocalReco_cff.py | 1 + test_cfg_newEB.py | 11 ++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 Reco/python/millepede_ntupelizer_cfi.py diff --git a/Reco/python/millepede_ntupelizer_cfi.py b/Reco/python/millepede_ntupelizer_cfi.py new file mode 100644 index 0000000..549dd58 --- /dev/null +++ b/Reco/python/millepede_ntupelizer_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +millepede_ntupelizer = cms.EDAnalyzer("MillepedeNTupelizer", + considerationMethod = cms.string('all'), + weightingMethod = cms.string('squaredWeighting'), + fittingMethod = cms.string('lineTGraphErrors'), + fitPointWeightingMethod = cms.string('none'), + pedestalThreshold = cms.double(2.), + layers_config = cms.int32(1), + ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), + nLayers = cms.int32(8), + SensorSize = cms.int32(128), + totalEnergyThreshold = cms.double(1000.), + RUNDATA = cms.InputTag("source","RunData","unpack" ), + HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), + HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), + HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ), + HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" ) + ) diff --git a/StandardSequences/python/LocalReco_cff.py b/StandardSequences/python/LocalReco_cff.py index 4ae4413..9186c7d 100644 --- a/StandardSequences/python/LocalReco_cff.py +++ b/StandardSequences/python/LocalReco_cff.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms from HGCal.Reco.hgcaltbrechitproducer_cfi import * +from HGCal.Reco.millepede_ntupelizer_cfi import * from HGCal.Reco.position_resolution_cfi import * from HGCal.Reco.hgcaltbclusterproducer_cfi import * diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 6782ec1..61e32d9 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -178,6 +178,12 @@ process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs +process.millepede_ntupelizer.considerationMethod = cms.string(options.considerationMethod) +process.millepede_ntupelizer.weightingMethod = cms.string(options.weightingMethod) +process.millepede_ntupelizer.pedestalThreshold = cms.double(options.pedestalThreshold) +process.millepede_ntupelizer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) +process.millepede_ntupelizer.totalEnergyThreshold = -1000. + process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) @@ -206,6 +212,8 @@ process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Display_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) elif (options.chainSequence == 8): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_Position_Resolution_%s.root"%(options.outputFolder,options.runType,options.outputPostfix))) +elif (options.chainSequence == 9): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_MillepedeNTuple_%s.root"%(options.outputFolder,options.runType,options.outputPostfix))) if(options.configuration == "-1"): @@ -257,7 +265,8 @@ process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) elif (options.chainSequence == 8): process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) - +elif (options.chainSequence == 9): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_ntupelizer) # example for running display : # cmsRun test_cfg_newEB.py runNumber=1291 runType=HGCRun nSpills=1 dataFolder='./' pedestalsHighGain="./CondObjects/data/pedHighGain1200.txt" pedestalsLowGain="./CondObjects/data/pedLowGain1200.txt" chainSequence=7 maxEvents=10 From 452f3d4f7faa7c02831ed58dd8ac22d72553e103 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 9 Jan 2017 10:40:07 +0100 Subject: [PATCH 150/297] [alignment] add C++ mille functionality to cmssw framework to write necessary binary files --- Reco/interface/Mille.h | 56 +++++++++++ Reco/src/Mille.cc | 208 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 264 insertions(+) create mode 100644 Reco/interface/Mille.h create mode 100644 Reco/src/Mille.cc diff --git a/Reco/interface/Mille.h b/Reco/interface/Mille.h new file mode 100644 index 0000000..19764fb --- /dev/null +++ b/Reco/interface/Mille.h @@ -0,0 +1,56 @@ +#ifndef MILLE_H +#define MILLE_H + +#include + +/** + * \class Mille + * + * Class to write a C binary (cf. below) file of a given name and to fill it + * with information used as input to **pede**. + * Use its member functions \c mille(), \c special(), \c kill() and \c end() + * as you would use the fortran \ref mille.f90 "MILLE" + * and its entry points \c MILLSP, \c KILLE and \c ENDLE. + * + * For debugging purposes constructor flags enable switching to text output and/or + * to write also derivatives and labels which are ==0. + * But note that **pede** will not be able to read text output and has not been tested with + * derivatives/labels ==0. + * + * \author : Gero Flucke + * date : October 2006 + * $Revision: 1.3 $ + * $Date: 2007/04/16 17:47:38 $ + * (last update by $Author: flucke $) + */ + +/// Class to write C binary file. +class Mille +{ + public: + Mille(const char *outFileName, bool asBinary = true, bool writeZero = false); + ~Mille(); + + void mille(int NLC, const float *derLc, int NGL, const float *derGl, + const int *label, float rMeas, float sigma); + void special(int nSpecial, const float *floatings, const int *integers); + void kill(); + void end(); + + private: + void newSet(); + bool checkBufferSize(int nLocal, int nGlobal); + + std::ofstream myOutFile; ///< C-binary for output + bool myAsBinary; ///< if false output as text + bool myWriteZero; ///< if true also write out derivatives/labels ==0 + /// buffer size for ints and floats + enum {myBufferSize = 5000}; ///< buffer size for ints and floats + int myBufferInt[myBufferSize]; ///< to collect labels etc. + float myBufferFloat[myBufferSize]; ///< to collect derivatives etc. + int myBufferPos; ///< position in buffer + bool myHasSpecial; ///< if true, special(..) already called for this record + /// largest label allowed: 2^31 - 1 + enum {myMaxLabel = (0xFFFFFFFF - (1 << 31))}; +}; +#endif diff --git a/Reco/src/Mille.cc b/Reco/src/Mille.cc new file mode 100644 index 0000000..16275f8 --- /dev/null +++ b/Reco/src/Mille.cc @@ -0,0 +1,208 @@ +/** + * \file + * Create Millepede-II C-binary record. + * + * \author : Gero Flucke + * date : October 2006 + * $Revision: 1.3 $ + * $Date: 2007/04/16 17:47:38 $ + * (last update by $Author: flucke $) + */ + +#include "HGCal/Reco/interface/Mille.h" + +#include +#include + +//___________________________________________________________________________ + +/// Opens outFileName (by default as binary file). +/** + * \param[in] outFileName file name + * \param[in] asBinary flag for binary + * \param[in] writeZero flag for keeping of zeros + */ +Mille::Mille(const char *outFileName, bool asBinary, bool writeZero) : + myOutFile(outFileName, (asBinary ? (std::ios::binary | std::ios::out) : std::ios::out)), + myAsBinary(asBinary), myWriteZero(writeZero), myBufferPos(-1), myHasSpecial(false) +{ + // Instead myBufferPos(-1), myHasSpecial(false) and the following two lines + // we could call newSet() and kill()... + myBufferInt[0] = 0; + myBufferFloat[0] = 0.; + + if (!myOutFile.is_open()) { + std::cerr << "Mille::Mille: Could not open " << outFileName + << " as output file." << std::endl; + } +} + +//___________________________________________________________________________ +/// Closes file. +Mille::~Mille() +{ + myOutFile.close(); +} + +//___________________________________________________________________________ +/// Add measurement to buffer. +/** + * \param[in] NLC number of local derivatives + * \param[in] derLc local derivatives + * \param[in] NGL number of global derivatives + * \param[in] derGl global derivatives + * \param[in] label global labels + * \param[in] rMeas measurement (residuum) + * \param[in] sigma error + */ +void Mille::mille(int NLC, const float *derLc, + int NGL, const float *derGl, const int *label, + float rMeas, float sigma) +{ + if (sigma <= 0.) return; + if (myBufferPos == -1) this->newSet(); // start, e.g. new track + if (!this->checkBufferSize(NLC, NGL)) return; + + // first store measurement + ++myBufferPos; + myBufferFloat[myBufferPos] = rMeas; + myBufferInt [myBufferPos] = 0; + + // store local derivatives and local 'lables' 1,...,NLC + for (int i = 0; i < NLC; ++i) { + if (derLc[i] || myWriteZero) { // by default store only non-zero derivatives + ++myBufferPos; + myBufferFloat[myBufferPos] = derLc[i]; // local derivatives + myBufferInt [myBufferPos] = i+1; // index of local parameter + } + } + + // store uncertainty of measurement in between locals and globals + ++myBufferPos; + myBufferFloat[myBufferPos] = sigma; + myBufferInt [myBufferPos] = 0; + + // store global derivatives and their labels + for (int i = 0; i < NGL; ++i) { + if (derGl[i] || myWriteZero) { // by default store only non-zero derivatives + if ((label[i] > 0 || myWriteZero) && label[i] <= myMaxLabel) { // and for valid labels + ++myBufferPos; + myBufferFloat[myBufferPos] = derGl[i]; // global derivatives + myBufferInt [myBufferPos] = label[i]; // index of global parameter + } else { + std::cerr << "Mille::mille: Invalid label " << label[i] + << " <= 0 or > " << myMaxLabel << std::endl; + } + } + } +} + +//___________________________________________________________________________ +/// Add special data to buffer. +/** + * \param[in] nSpecial number of floats/ints + * \param[in] floatings floats + * \param[in] integers ints + */ +void Mille::special(int nSpecial, const float *floatings, const int *integers) +{ + if (nSpecial == 0) return; + if (myBufferPos == -1) this->newSet(); // start, e.g. new track + if (myHasSpecial) { + std::cerr << "Mille::special: Special values already stored for this record." + << std::endl; + return; + } + if (!this->checkBufferSize(nSpecial, 0)) return; + myHasSpecial = true; // after newSet() (Note: MILLSP sets to buffer position...) + + // myBufferFloat[.] | myBufferInt[.] + // ------------------------------------ + // 0.0 | 0 + // -float(nSpecial) | 0 + // The above indicates special data, following are nSpecial floating and nSpecial integer data. + + ++myBufferPos; // zero pair + myBufferFloat[myBufferPos] = 0.; + myBufferInt [myBufferPos] = 0; + + ++myBufferPos; // nSpecial and zero + myBufferFloat[myBufferPos] = -nSpecial; // automatic conversion to float + myBufferInt [myBufferPos] = 0; + + for (int i = 0; i < nSpecial; ++i) { + ++myBufferPos; + myBufferFloat[myBufferPos] = floatings[i]; + myBufferInt [myBufferPos] = integers[i]; + } +} + +//___________________________________________________________________________ +/// Reset buffers, i.e. kill derivatives accumulated for current set. +void Mille::kill() +{ + myBufferPos = -1; +} + +//___________________________________________________________________________ +/// Write buffer (set of derivatives with same local parameters) to file. +void Mille::end() +{ + if (myBufferPos > 0) { // only if anything stored... + const int numWordsToWrite = (myBufferPos + 1)*2; + + if (myAsBinary) { + myOutFile.write(reinterpret_cast(&numWordsToWrite), + sizeof(numWordsToWrite)); + myOutFile.write(reinterpret_cast(myBufferFloat), + (myBufferPos+1) * sizeof(myBufferFloat[0])); + myOutFile.write(reinterpret_cast(myBufferInt), + (myBufferPos+1) * sizeof(myBufferInt[0])); + } else { + myOutFile << numWordsToWrite << "\n"; + for (int i = 0; i < myBufferPos+1; ++i) { + myOutFile << myBufferFloat[i] << " "; + } + myOutFile << "\n"; + + for (int i = 0; i < myBufferPos+1; ++i) { + myOutFile << myBufferInt[i] << " "; + } + myOutFile << "\n"; + } + } + myBufferPos = -1; // reset buffer for next set of derivatives +} + +//___________________________________________________________________________ +/// Initialize for new set of locals, e.g. new track. +void Mille::newSet() +{ + myBufferPos = 0; + myHasSpecial = false; + myBufferFloat[0] = 0.0; + myBufferInt [0] = 0; // position 0 used as error counter +} + +//___________________________________________________________________________ +/// Enough space for next nLocal + nGlobal derivatives incl. measurement? +/** + * \param[in] nLocal number of local derivatives + * \param[in] nGlobal number of global derivatives + * \return true if sufficient space available (else false) + */ +bool Mille::checkBufferSize(int nLocal, int nGlobal) +{ + if (myBufferPos + nLocal + nGlobal + 2 >= myBufferSize) { + ++(myBufferInt[0]); // increase error count + std::cerr << "Mille::checkBufferSize: Buffer too short (" + << myBufferSize << ")," + << "\n need space for nLocal (" << nLocal<< ")" + << "/nGlobal (" << nGlobal << ") local/global derivatives, " + << myBufferPos + 1 << " already stored!" + << std::endl; + return false; + } else { + return true; + } +} From 0c1956f3a05e0e6b963a6b6ade273e61ef87d86e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 9 Jan 2017 10:41:09 +0100 Subject: [PATCH 151/297] [alignment] rename mille binary writer module, output is a binary file instead of ROOT TTree --- CondObjects/data/runEnergies.txt | 136 +++---- Reco/plugins/MillepedeBinaryWriter.cc | 418 ++++++++++++++++++++++ Reco/python/millepede_binarywriter_cfi.py | 20 ++ StandardSequences/python/LocalReco_cff.py | 2 +- test_cfg_newEB.py | 15 +- 5 files changed, 514 insertions(+), 77 deletions(-) create mode 100644 Reco/plugins/MillepedeBinaryWriter.cc create mode 100644 Reco/python/millepede_binarywriter_cfi.py diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt index c7b180b..c4ddc2a 100644 --- a/CondObjects/data/runEnergies.txt +++ b/CondObjects/data/runEnergies.txt @@ -1,73 +1,73 @@ #RUN ENERGY[GeV] RUNTYPE CONFIGURATION -1026 200. electron 1 -852 150. electron 1 -853 150. electron 1 -854 150. electron 1 -855 150. electron 1 -856 150. electron 1 -857 150. electron 1 -858 150. electron 1 -859 150. electron 1 -860 150. electron 1 -862 150. electron 1 -866 70. electron 1 -867 70. electron 1 -878 70. electron 1 -879 70. electron 1 -880 70. electron 1 -881 70. electron 1 -882 70. electron 1 -887 70. electron 1 -888 70. electron 1 -920 20. electron 1 -921 20. electron 1 -922 20. electron 1 -923 20. electron 1 -924 20. electron 1 -925 20. electron 1 -926 20. electron 1 -927 20. electron 1 -928 20. electron 1 -929 20. electron 1 +//852 150. electron 1 +//853 150. electron 1 +//854 150. electron 1 +//855 150. electron 1 +//856 150. electron 1 +//857 150. electron 1 +//858 150. electron 1 +//859 150. electron 1 +//860 150. electron 1 +//862 150. electron 1 +//866 70. electron 1 +//867 70. electron 1 +//878 70. electron 1 +//879 70. electron 1 +//880 70. electron 1 +//881 70. electron 1 +//882 70. electron 1 +//887 70. electron 1 +//888 70. electron 1 +//920 20. electron 1 +//921 20. electron 1 +//922 20. electron 1 +//923 20. electron 1 +//924 20. electron 1 +//925 20. electron 1 +//926 20. electron 1 +//927 20. electron 1 +//928 20. electron 1 +//929 20. electron 1 944 250. electron 1 -945 250. electron 1 -946 250. electron 1 -947 250. electron 1 -948 250. electron 1 -949 250. electron 1 -950 250. electron 1 -951 250. electron 1 -952 250. electron 1 -953 250. electron 1 -1027 200. electron 1 -1028 200. electron 1 -1029 200. electron 1 -1030 200. electron 1 -1038 200. electron 1 -1039 200. electron 1 -1040 200. electron 1 -1041 200. electron 1 -1042 200. electron 1 -1051 100. electron 1 -1052 100. electron 1 -1053 100. electron 1 -1054 100. electron 1 -1056 100. electron 1 -1069 100. electron 1 -1070 100. electron 1 -1071 100. electron 1 -1072 100. electron 1 -1073 100. electron 1 -1088 32. electron 1 -1091 32. electron 1 -1092 32. electron 1 -1093 32. electron 1 -1094 32. electron 1 -1095 32. electron 1 -1098 32. electron 1 -1099 32. electron 1 -1100 32. electron 1 -1125 150. electron 2 +//945 250. electron 1 +//946 250. electron 1 +//947 250. electron 1 +//948 250. electron 1 +//949 250. electron 1 +//950 250. electron 1 +//951 250. electron 1 +//952 250. electron 1 +//953 250. electron 1 +//1026 200. electron 1 +//1027 200. electron 1 +//1028 200. electron 1 +//1029 200. electron 1 +//1030 200. electron 1 +//1038 200. electron 1 +//1039 200. electron 1 +//1040 200. electron 1 +//1041 200. electron 1 +//1042 200. electron 1 +//1051 100. electron 1 +//1052 100. electron 1 +//1053 100. electron 1 +//1054 100. electron 1 +//1056 100. electron 1 +//1069 100. electron 1 +//1070 100. electron 1 +//1071 100. electron 1 +//1072 100. electron 1 +//1073 100. electron 1 +//1088 32. electron 1 +//1091 32. electron 1 +//1092 32. electron 1 +//1093 32. electron 1 +//1094 32. electron 1 +//1095 32. electron 1 +//1098 32. electron 1 +//1099 32. electron 1 +//1100 32. electron 1 +//1125 150. electron 2 //1126 150. electron 2 //1128 150. electron 2 //1129 150. electron 2 diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc new file mode 100644 index 0000000..f1d547f --- /dev/null +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -0,0 +1,418 @@ +/* + * Write out residuals and derivatives to pass forward to millepede. + */ + +/** + @Author: Thorben Quast + 21 Dec 2016 + thorben.quast@cern.ch / thorben.quast@rwth-aachen.de +*/ + + +// system include files +#include +#include +#include +#include +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/Reco/interface/Mille.h" + + +//configuration1: +double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm + +//configuration2: +double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm + +class MillepedeBinaryWriter : public edm::one::EDAnalyzer { + public: + explicit MillepedeBinaryWriter(const edm::ParameterSet&); + ~MillepedeBinaryWriter(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + // ----------member data --------------------------- + edm::EDGetTokenT HGCalTBRecHitCollection_Token; + edm::EDGetToken HGCalTBClusterCollection_Token; + edm::EDGetToken HGCalTBClusterCollection7_Token; + edm::EDGetToken HGCalTBClusterCollection19_Token; + + edm::EDGetTokenT RunDataToken; + + ConsiderationMethod considerationMethod; + WeightingMethod weightingMethod; + TrackFittingMethod fittingMethod; + FitPointWeightingMethod fitPointWeightingMethod; + + double pedestalThreshold; + std::vector Layer_Z_Positions; + std::vector ADC_per_MIP; + int LayersConfig; + int nLayers; + int SensorSize; + + double totalEnergyThreshold; + + int ClusterVetoCounter; + int HitsVetoCounter; + int CommonVetoCounter; + + //helper variables that are set within the event loop, i.e. are defined per event + std::map Sensors; + ParticleTrack* Track; + + int configuration, evId, eventCounter, run; //eventCounter: counts the events in this analysis run to match information within ove event to each other + double energy; + + //initial global parameters, corresponding to obtained value from preceding iteration + //placeholders, should be defined per layer in the according class! + double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; + + double** residuals; + double** errors; + double*** derivatives; + + Mille* mille; + +}; + +MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { + + // initialization + HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); + RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); + + //read the cell consideration option to calculate the central hit point + std::string methodString = iConfig.getParameter("considerationMethod"); + if (methodString == "all") + considerationMethod = CONSIDERALL; + else if (methodString == "closest7") + considerationMethod = CONSIDERSEVEN; + else if (methodString == "closest19") + considerationMethod = CONSIDERNINETEEN; + else if(methodString == "clustersAll") + considerationMethod = CONSIDERCLUSTERSALL; + else if(methodString == "clusters7") + considerationMethod = CONSIDERCLUSTERSSEVEN; + else if(methodString == "clusters19") + considerationMethod = CONSIDERCLUSTERSNINETEEN; + + //read the weighting method to obtain the central hit point + methodString = iConfig.getParameter("weightingMethod"); + if (methodString == "squaredWeighting") + weightingMethod = SQUAREDWEIGHTING; + else if (methodString == "linearWeighting") + weightingMethod = LINEARWEIGHTING; + else if (methodString == "logWeighting_3.0_1.0") + weightingMethod = LOGWEIGHTING_30_10; + else if (methodString == "logWeighting_3.0_1.5") + weightingMethod = LOGWEIGHTING_30_15; + else if (methodString == "logWeighting_4.0_1.0") + weightingMethod = LOGWEIGHTING_40_10; + else if (methodString == "logWeighting_4.0_1.5") + weightingMethod = LOGWEIGHTING_40_15; + else if (methodString == "logWeighting_5.0_1.0") + weightingMethod = LOGWEIGHTING_50_10; + else if (methodString == "logWeighting_5.0_1.5") + weightingMethod = LOGWEIGHTING_50_15; + else if (methodString == "logWeighting_6.0_1.0") + weightingMethod = LOGWEIGHTING_60_10; + else if (methodString == "logWeighting_6.0_1.5") + weightingMethod = LOGWEIGHTING_60_15; + else if (methodString == "logWeighting_7.0_1.0") + weightingMethod = LOGWEIGHTING_70_10; + else if (methodString == "logWeighting_7.0_1.5") + weightingMethod = LOGWEIGHTING_70_15; + else + weightingMethod = DEFAULTWEIGHTING; + + //read the track fitting method + methodString = iConfig.getParameter("fittingMethod"); + if (methodString == "lineTGraphErrors") + fittingMethod = LINEFITTGRAPHERRORS; + else if (methodString == "pol2TGraphErrors") + fittingMethod = POL2TGRAPHERRORS; + else if (methodString == "pol3TGraphErrors") + fittingMethod = POL3TGRAPHERRORS; + else + fittingMethod = DEFAULTFITTING; + + //read the fit point weighting technique: + methodString = iConfig.getParameter("fitPointWeightingMethod"); + if (methodString == "none") + fitPointWeightingMethod = NONE; + else if (methodString == "linear") + fitPointWeightingMethod = LINEAR; + else if (methodString == "squared") + fitPointWeightingMethod = SQUARED; + else if (methodString == "logarithmic") + fitPointWeightingMethod = LOGARITHMIC; + else if (methodString == "exponential") + fitPointWeightingMethod = EXPONENTIAL; + else + fitPointWeightingMethod = NONE; + + //read the layer configuration + LayersConfig = iConfig.getParameter("layers_config"); + if (LayersConfig == 1) { + Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + } if (LayersConfig == 2) { + Layer_Z_Positions = std::vector(_config2Positions, _config2Positions + sizeof(_config2Positions)/sizeof(double)); + } else { + Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + } + + + mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); + + pedestalThreshold = iConfig.getParameter("pedestalThreshold"); + SensorSize = iConfig.getParameter("SensorSize"); + nLayers = iConfig.getParameter("nLayers"); + ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); + + totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); + + eventCounter = 0; + residuals = new double*[nLayers]; + errors = new double*[nLayers]; + derivatives = new double**[nLayers]; + for (int i=0; i rd; + + //get the relevant event information + event.getByToken(RunDataToken, rd); + configuration = rd->configuration; + evId = event.id().event(); + eventCounter++; + run = rd->run; + energy = rd->energy; + if (run == -1) { + std::cout<<"Run is not in configuration file - is ignored."< Rechits; + event.getByToken(HGCalTBRecHitCollection_Token, Rechits); + + //opening Clusters (made from all, closest 7, closest 9) + edm::Handle clusters; + edm::Handle clusters7; + edm::Handle clusters19; + event.getByToken(HGCalTBClusterCollection_Token, clusters); + event.getByToken(HGCalTBClusterCollection7_Token, clusters7); + event.getByToken(HGCalTBClusterCollection19_Token, clusters19); + + //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer + //fill the rechits: + for(auto Rechit : *Rechits) { + int layer = (Rechit.id()).layer(); + if ( Sensors.find(layer) == Sensors.end() ) { + Sensors[layer] = new SensorHitMap(); + Sensors[layer]->setPedestalThreshold(pedestalThreshold); + Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar + Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); + Sensors[layer]->setSensorSize(SensorSize); + } + Sensors[layer]->addHit(Rechit); + } + + //fill the hits from the cluster collections + for( auto cluster : *clusters ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, -1); + } + } + for( auto cluster : *clusters7 ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, 7); + } + } + for( auto cluster : *clusters19 ){ + int layer = cluster.layer(); + for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ + Sensors[layer]->registerClusterHit((*it).first, 19); + } + } + + //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must + //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) + double sumEnergy = 0., sumClusterEnergy = 0.; + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + sumEnergy += it->second->getTotalEnergy(); + sumClusterEnergy += it->second->getTotalClusterEnergy(-1); + } + + if(sumEnergy < totalEnergyThreshold) HitsVetoCounter+=1; //make this energy dependent! + if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; + if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { + CommonVetoCounter+=1; + return; + } + + + //step 2: calculate impact point with technique indicated as the argument + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + //subtract common first + it->second->subtractCM(); + //now calculate the center positions for each layer + it->second->calculateCenterPosition(considerationMethod, weightingMethod); + } + + + //step 3: fill particle tracks + Track = new ParticleTrack(); + for (int i=1; i<=nLayers; i++) { + Track->addFitPoint(Sensors[i]); + } + Track->weightFitPoints(fitPointWeightingMethod); + Track->fitTrack(fittingMethod); + + int NLC = 4; + int NGL = 6; + float rMeas = 0.; + float sigma = 0.; + float *derLc = new float[NLC]; + float *derGl = new float[NGL]; + int *label = new int[NGL]; + + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position + for (int layer=1; layer<=nLayers; layer++) { + double layer_labZ = Sensors[layer]->getLabZ(); + double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); + + std::pair position_predicted = Track->calculatePositionXY(layer_labZ+intrinsic_z); + double x_predicted = position_predicted.first; + double y_predicted = position_predicted.second; + + std::pair position_true = Sensors[layer]->getLabHitPosition(); //should be distinguished into intrinsic position (in frame of sensor) and the lab frame + //later will require to perform according transformation with angles and displacements + double x_true = position_true.first; + double y_true = position_true.second; + + derLc[0] = derivatives[layer-1][0][0] = intrinsic_z + layer_labZ; + derLc[1] = derivatives[layer-1][0][1] = 1.; + derLc[2] = derivatives[layer-1][0][2] = (intrinsic_z + layer_labZ)*d_alpha; + derLc[3] = derivatives[layer-1][0][3] = d_alpha; + derGl[0] = derivatives[layer-1][0][4] = y_predicted; + derGl[1] = derivatives[layer-1][0][5] = 0.; + derGl[2] = derivatives[layer-1][0][6] = intrinsic_z; + derGl[3] = derivatives[layer-1][0][7] = 1.; + derGl[4] = derivatives[layer-1][0][8] = 0.; + derGl[5] = derivatives[layer-1][0][9] = 0.; + label[0] = layer*100 + 11; + label[1] = layer*100 + 12; + label[2] = layer*100 + 13; + label[3] = layer*100 + 21; + label[4] = layer*100 + 22; + label[5] = layer*100 + 23; + rMeas = residuals[layer-1][0] = x_true - x_predicted; + sigma = errors[layer-1][0] = 1.2/sqrt(12.); + mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + + derLc[0] = derivatives[layer-1][1][0] = -d_alpha*(intrinsic_z + layer_labZ); + derLc[1] = derivatives[layer-1][1][1] = -d_alpha; + derLc[2] = derivatives[layer-1][1][2] = intrinsic_z + layer_labZ; + derLc[3] = derivatives[layer-1][1][3] = 1.; + derGl[0] = derivatives[layer-1][1][4] = -x_predicted; + derGl[1] = derivatives[layer-1][1][5] = intrinsic_z; + derGl[2] = derivatives[layer-1][1][6] = 0.; + derGl[3] = derivatives[layer-1][1][7] = 0.; + derGl[4] = derivatives[layer-1][1][8] = 1.; + derGl[5] = derivatives[layer-1][1][9] = 0.; + rMeas = residuals[layer-1][1] = y_true - y_predicted; + sigma = errors[layer-1][1] = 1.2/sqrt(12.); + mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + + derLc[0] = derivatives[layer-1][2][0] = -d_gamma*(intrinsic_z + layer_labZ); + derLc[1] = derivatives[layer-1][2][1] = -d_gamma; + derLc[2] = derivatives[layer-1][2][2] = -d_beta*(intrinsic_z + layer_labZ); + derLc[3] = derivatives[layer-1][2][3] = -d_beta; + derGl[0] = derivatives[layer-1][2][4] = 0.; + derGl[1] = derivatives[layer-1][2][5] = -y_predicted; + derGl[2] = derivatives[layer-1][2][6] = -x_predicted; + derGl[3] = derivatives[layer-1][2][7] = 0.; + derGl[4] = derivatives[layer-1][2][8] = 0.; + derGl[5] = derivatives[layer-1][2][9] = 1.; + rMeas = residuals[layer-1][2] = 0.0; + sigma = errors[layer-1][2] = 0.1; + mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + } + mille->end(); + + + delete derLc; delete derGl; delete label; + + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + delete (*it).second; + }; Sensors.clear(); + delete Track; + +}// analyze ends here + +void MillepedeBinaryWriter::beginJob() { +} + +void MillepedeBinaryWriter::endJob() { + mille->kill(); + delete mille; + std::cout<<"ClusterVetos: "< Date: Mon, 9 Jan 2017 10:55:20 +0100 Subject: [PATCH 152/297] [alignment] delete old files --- Reco/plugins/MillepedeNTupelizer.cc | 423 ------------------------ Reco/python/millepede_ntupelizer_cfi.py | 19 -- 2 files changed, 442 deletions(-) delete mode 100644 Reco/plugins/MillepedeNTupelizer.cc delete mode 100644 Reco/python/millepede_ntupelizer_cfi.py diff --git a/Reco/plugins/MillepedeNTupelizer.cc b/Reco/plugins/MillepedeNTupelizer.cc deleted file mode 100644 index 6917477..0000000 --- a/Reco/plugins/MillepedeNTupelizer.cc +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Write out residuals and derivatives to pass forward to millepede. - */ - -/** - @Author: Thorben Quast - 21 Dec 2016 - thorben.quast@cern.ch / thorben.quast@rwth-aachen.de -*/ - - -// system include files -#include -#include -#include -#include -#include -#include -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/one/EDAnalyzer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition -#include "HGCal/Reco/interface/PositionResolutionHelpers.h" -#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" -#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" -#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" - -#include "TFile.h" -#include "TTree.h" - -//configuration1: -double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm - -//configuration2: -double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm - -class MillepedeNTupelizer : public edm::one::EDAnalyzer { - public: - explicit MillepedeNTupelizer(const edm::ParameterSet&); - ~MillepedeNTupelizer(); - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - private: - virtual void beginJob() override; - void analyze(const edm::Event& , const edm::EventSetup&) override; - virtual void endJob() override; - - // ----------member data --------------------------- - edm::Service fs; - edm::EDGetTokenT HGCalTBRecHitCollection_Token; - edm::EDGetToken HGCalTBClusterCollection_Token; - edm::EDGetToken HGCalTBClusterCollection7_Token; - edm::EDGetToken HGCalTBClusterCollection19_Token; - - edm::EDGetTokenT RunDataToken; - - ConsiderationMethod considerationMethod; - WeightingMethod weightingMethod; - TrackFittingMethod fittingMethod; - FitPointWeightingMethod fitPointWeightingMethod; - - double pedestalThreshold; - std::vector Layer_Z_Positions; - std::vector ADC_per_MIP; - int LayersConfig; - int nLayers; - int SensorSize; - - double totalEnergyThreshold; - - int ClusterVetoCounter; - int HitsVetoCounter; - int CommonVetoCounter; - - //helper variables that are set within the event loop, i.e. are defined per event - std::map Sensors; - ParticleTrack* Track; - - //stuff to be written to the tree - TTree* outTree; - int configuration, evId, eventCounter, run; //eventCounter: counts the events in this analysis run to match information within ove event to each other - double energy; - - //initial global parameters, corresponding to obtained value from preceding iteration - //placeholders, should be defined per layer in the according class! - double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; - - double** residuals; - double** errors; - double*** derivatives; -}; - -MillepedeNTupelizer::MillepedeNTupelizer(const edm::ParameterSet& iConfig) { - - // initialization - usesResource("TFileService"); - HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); - RunDataToken= consumes(iConfig.getParameter("RUNDATA")); - HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); - HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); - HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); - - //read the cell consideration option to calculate the central hit point - std::string methodString = iConfig.getParameter("considerationMethod"); - if (methodString == "all") - considerationMethod = CONSIDERALL; - else if (methodString == "closest7") - considerationMethod = CONSIDERSEVEN; - else if (methodString == "closest19") - considerationMethod = CONSIDERNINETEEN; - else if(methodString == "clustersAll") - considerationMethod = CONSIDERCLUSTERSALL; - else if(methodString == "clusters7") - considerationMethod = CONSIDERCLUSTERSSEVEN; - else if(methodString == "clusters19") - considerationMethod = CONSIDERCLUSTERSNINETEEN; - - //read the weighting method to obtain the central hit point - methodString = iConfig.getParameter("weightingMethod"); - if (methodString == "squaredWeighting") - weightingMethod = SQUAREDWEIGHTING; - else if (methodString == "linearWeighting") - weightingMethod = LINEARWEIGHTING; - else if (methodString == "logWeighting_3.0_1.0") - weightingMethod = LOGWEIGHTING_30_10; - else if (methodString == "logWeighting_3.0_1.5") - weightingMethod = LOGWEIGHTING_30_15; - else if (methodString == "logWeighting_4.0_1.0") - weightingMethod = LOGWEIGHTING_40_10; - else if (methodString == "logWeighting_4.0_1.5") - weightingMethod = LOGWEIGHTING_40_15; - else if (methodString == "logWeighting_5.0_1.0") - weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.0_1.5") - weightingMethod = LOGWEIGHTING_50_15; - else if (methodString == "logWeighting_6.0_1.0") - weightingMethod = LOGWEIGHTING_60_10; - else if (methodString == "logWeighting_6.0_1.5") - weightingMethod = LOGWEIGHTING_60_15; - else if (methodString == "logWeighting_7.0_1.0") - weightingMethod = LOGWEIGHTING_70_10; - else if (methodString == "logWeighting_7.0_1.5") - weightingMethod = LOGWEIGHTING_70_15; - else - weightingMethod = DEFAULTWEIGHTING; - - //read the track fitting method - methodString = iConfig.getParameter("fittingMethod"); - if (methodString == "lineTGraphErrors") - fittingMethod = LINEFITTGRAPHERRORS; - else if (methodString == "pol2TGraphErrors") - fittingMethod = POL2TGRAPHERRORS; - else if (methodString == "pol3TGraphErrors") - fittingMethod = POL3TGRAPHERRORS; - else - fittingMethod = DEFAULTFITTING; - - //read the fit point weighting technique: - methodString = iConfig.getParameter("fitPointWeightingMethod"); - if (methodString == "none") - fitPointWeightingMethod = NONE; - else if (methodString == "linear") - fitPointWeightingMethod = LINEAR; - else if (methodString == "squared") - fitPointWeightingMethod = SQUARED; - else if (methodString == "logarithmic") - fitPointWeightingMethod = LOGARITHMIC; - else if (methodString == "exponential") - fitPointWeightingMethod = EXPONENTIAL; - else - fitPointWeightingMethod = NONE; - - //read the layer configuration - LayersConfig = iConfig.getParameter("layers_config"); - if (LayersConfig == 1) { - Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); - } if (LayersConfig == 2) { - Layer_Z_Positions = std::vector(_config2Positions, _config2Positions + sizeof(_config2Positions)/sizeof(double)); - } else { - Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); - } - - pedestalThreshold = iConfig.getParameter("pedestalThreshold"); - SensorSize = iConfig.getParameter("SensorSize"); - nLayers = iConfig.getParameter("nLayers"); - ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); - - totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); - - eventCounter = 0; - residuals = new double*[nLayers]; - errors = new double*[nLayers]; - derivatives = new double**[nLayers]; - for (int i=0; imake("millepede", "millepede"); - outTree->Branch("configuration", &configuration, "configuration/I"); - outTree->Branch("eventId", &evId, "eventId/I"); //event ID as it comes from the reader - outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration of this analysis w.r.t. the individual events - outTree->Branch("run", &run, "run/I"); - outTree->Branch("energy", &energy, "energy/D"); //electron energy in GeV s - - std::string coordinates[3] = {"x", "y", "z"}; - //1-4 are local parameters - std::string parameters[10] = {"mx", "bx", "my", "by", "dalpha", "dbeta", "dgamma", "dx0", "dy0", "dz0"}; - for (int i=0; iBranch(("residuals_layer_"+std::to_string(i+1)+"_"+coordinates[j]).c_str(), &residuals[i][j]); - outTree->Branch(("errors_layer_"+std::to_string(i+1)+"_"+coordinates[j]).c_str(), &errors[i][j]); - for (int k=0; k<10; k++) { - outTree->Branch(("derivatives_layer_"+std::to_string(i+1)+"_"+coordinates[j]+"_"+parameters[k]).c_str(), &derivatives[i][j][k]); - } - } - } - - - ClusterVetoCounter = 0; - HitsVetoCounter = 0; - CommonVetoCounter = 0; - - - d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; - //possibly: read from millepede output file if procedure is iterated - -}//constructor ends here - -MillepedeNTupelizer::~MillepedeNTupelizer() { - return; -} - -// ------------ method called for each event ------------ -void MillepedeNTupelizer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - edm::Handle rd; - - //get the relevant event information - event.getByToken(RunDataToken, rd); - configuration = rd->configuration; - evId = event.id().event(); - eventCounter++; - run = rd->run; - energy = rd->energy; - if (run == -1) { - std::cout<<"Run is not in configuration file - is ignored."< Rechits; - event.getByToken(HGCalTBRecHitCollection_Token, Rechits); - - //opening Clusters (made from all, closest 7, closest 9) - edm::Handle clusters; - edm::Handle clusters7; - edm::Handle clusters19; - event.getByToken(HGCalTBClusterCollection_Token, clusters); - event.getByToken(HGCalTBClusterCollection7_Token, clusters7); - event.getByToken(HGCalTBClusterCollection19_Token, clusters19); - - //step 1: Reduce the information to energy deposits/hits in x,y per sensor/layer - //fill the rechits: - for(auto Rechit : *Rechits) { - int layer = (Rechit.id()).layer(); - if ( Sensors.find(layer) == Sensors.end() ) { - Sensors[layer] = new SensorHitMap(); - Sensors[layer]->setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar - Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); - Sensors[layer]->setSensorSize(SensorSize); - } - Sensors[layer]->addHit(Rechit); - } - - //fill the hits from the cluster collections - for( auto cluster : *clusters ){ - int layer = cluster.layer(); - for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->registerClusterHit((*it).first, -1); - } - } - for( auto cluster : *clusters7 ){ - int layer = cluster.layer(); - for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->registerClusterHit((*it).first, 7); - } - } - for( auto cluster : *clusters19 ){ - int layer = cluster.layer(); - for( std::vector< std::pair >::const_iterator it=cluster.hitsAndFractions().begin(); it!=cluster.hitsAndFractions().end(); ++it ){ - Sensors[layer]->registerClusterHit((*it).first, 19); - } - } - - //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must - //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) - double sumEnergy = 0., sumClusterEnergy = 0.; - for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { - sumEnergy += it->second->getTotalEnergy(); - sumClusterEnergy += it->second->getTotalClusterEnergy(-1); - } - - if(sumEnergy < totalEnergyThreshold) HitsVetoCounter+=1; //make this energy dependent! - if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; - if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { - CommonVetoCounter+=1; - return; - } - - - //step 2: calculate impact point with technique indicated as the argument - for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { - //subtract common first - it->second->subtractCM(); - //now calculate the center positions for each layer - it->second->calculateCenterPosition(considerationMethod, weightingMethod); - } - - - //step 3: fill particle tracks - Track = new ParticleTrack(); - for (int i=1; i<=nLayers; i++) { - Track->addFitPoint(Sensors[i]); - } - Track->weightFitPoints(fitPointWeightingMethod); - Track->fitTrack(fittingMethod); - - - //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position - for (int layer=1; layer<=nLayers; layer++) { - double layer_labZ = Sensors[layer]->getLabZ(); - double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); - - std::pair position_predicted = Track->calculatePositionXY(layer_labZ+intrinsic_z); - double x_predicted = position_predicted.first; - double y_predicted = position_predicted.second; - - std::pair position_true = Sensors[layer]->getLabHitPosition(); //should be distinguished into intrinsic position (in frame of sensor) and the lab frame - //later will require to perform according transformation with angles and displacements - double x_true = position_true.first; - double y_true = position_true.second; - - - residuals[layer-1][0] = x_true - x_predicted; - residuals[layer-1][1] = y_true - y_predicted; - residuals[layer-1][2] = 0.0; - - errors[layer-1][0] = 1.2/sqrt(12.); - errors[layer-1][1] = 1.2/sqrt(12.); - errors[layer-1][2] = 0.1; - - derivatives[layer-1][0][0] = intrinsic_z + layer_labZ; - derivatives[layer-1][0][1] = 1.; - derivatives[layer-1][0][2] = (intrinsic_z + layer_labZ)*d_alpha; - derivatives[layer-1][0][3] = d_alpha; - derivatives[layer-1][0][4] = y_predicted; - derivatives[layer-1][0][5] = 0.; - derivatives[layer-1][0][6] = intrinsic_z; - derivatives[layer-1][0][7] = 1.; - derivatives[layer-1][0][8] = 0.; - derivatives[layer-1][0][9] = 0.; - - derivatives[layer-1][1][0] = -d_alpha*(intrinsic_z + layer_labZ); - derivatives[layer-1][1][1] = -d_alpha; - derivatives[layer-1][1][2] = intrinsic_z + layer_labZ; - derivatives[layer-1][1][3] = 1.; - derivatives[layer-1][1][4] = -x_predicted; - derivatives[layer-1][1][5] = intrinsic_z; - derivatives[layer-1][1][6] = 0.; - derivatives[layer-1][1][7] = 0.; - derivatives[layer-1][1][8] = 1.; - derivatives[layer-1][1][9] = 0.; - - derivatives[layer-1][2][0] = -d_gamma*(intrinsic_z + layer_labZ); - derivatives[layer-1][2][1] = -d_gamma; - derivatives[layer-1][2][2] = -d_beta*(intrinsic_z + layer_labZ); - derivatives[layer-1][2][3] = -d_beta; - derivatives[layer-1][2][4] = 0.; - derivatives[layer-1][2][5] = -y_predicted; - derivatives[layer-1][2][6] = -x_predicted; - derivatives[layer-1][2][7] = 0.; - derivatives[layer-1][2][8] = 0.; - derivatives[layer-1][2][9] = 1.; - - } - outTree->Fill(); - - for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { - delete (*it).second; - }; Sensors.clear(); - delete Track; - -}// analyze ends here - -void MillepedeNTupelizer::beginJob() { -} - -void MillepedeNTupelizer::endJob() { - std::cout<<"ClusterVetos: "< Date: Mon, 9 Jan 2017 16:34:36 +0100 Subject: [PATCH 153/297] [runs] use different run files for position resolution and alignment tasks --- CondObjects/data/runEnergiesAlignment.txt | 16 ++++ CondObjects/data/runEnergiesFull.txt | 104 ++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 CondObjects/data/runEnergiesAlignment.txt create mode 100644 CondObjects/data/runEnergiesFull.txt diff --git a/CondObjects/data/runEnergiesAlignment.txt b/CondObjects/data/runEnergiesAlignment.txt new file mode 100644 index 0000000..9611f88 --- /dev/null +++ b/CondObjects/data/runEnergiesAlignment.txt @@ -0,0 +1,16 @@ +#RUN ENERGY[GeV] RUNTYPE CONFIGURATION +944 250. electron 1 +945 250. electron 1 +946 250. electron 1 +947 250. electron 1 +948 250. electron 1 +949 250. electron 1 +950 250. electron 1 +951 250. electron 1 +952 250. electron 1 +953 250. electron 1 +//1299 250. electron 2 +//1300 250. electron 2 +//1301 250. electron 2 +//1302 250. electron 2 +//1303 250. electron 2 \ No newline at end of file diff --git a/CondObjects/data/runEnergiesFull.txt b/CondObjects/data/runEnergiesFull.txt new file mode 100644 index 0000000..c4ddc2a --- /dev/null +++ b/CondObjects/data/runEnergiesFull.txt @@ -0,0 +1,104 @@ +#RUN ENERGY[GeV] RUNTYPE CONFIGURATION +//852 150. electron 1 +//853 150. electron 1 +//854 150. electron 1 +//855 150. electron 1 +//856 150. electron 1 +//857 150. electron 1 +//858 150. electron 1 +//859 150. electron 1 +//860 150. electron 1 +//862 150. electron 1 +//866 70. electron 1 +//867 70. electron 1 +//878 70. electron 1 +//879 70. electron 1 +//880 70. electron 1 +//881 70. electron 1 +//882 70. electron 1 +//887 70. electron 1 +//888 70. electron 1 +//920 20. electron 1 +//921 20. electron 1 +//922 20. electron 1 +//923 20. electron 1 +//924 20. electron 1 +//925 20. electron 1 +//926 20. electron 1 +//927 20. electron 1 +//928 20. electron 1 +//929 20. electron 1 +944 250. electron 1 +//945 250. electron 1 +//946 250. electron 1 +//947 250. electron 1 +//948 250. electron 1 +//949 250. electron 1 +//950 250. electron 1 +//951 250. electron 1 +//952 250. electron 1 +//953 250. electron 1 +//1026 200. electron 1 +//1027 200. electron 1 +//1028 200. electron 1 +//1029 200. electron 1 +//1030 200. electron 1 +//1038 200. electron 1 +//1039 200. electron 1 +//1040 200. electron 1 +//1041 200. electron 1 +//1042 200. electron 1 +//1051 100. electron 1 +//1052 100. electron 1 +//1053 100. electron 1 +//1054 100. electron 1 +//1056 100. electron 1 +//1069 100. electron 1 +//1070 100. electron 1 +//1071 100. electron 1 +//1072 100. electron 1 +//1073 100. electron 1 +//1088 32. electron 1 +//1091 32. electron 1 +//1092 32. electron 1 +//1093 32. electron 1 +//1094 32. electron 1 +//1095 32. electron 1 +//1098 32. electron 1 +//1099 32. electron 1 +//1100 32. electron 1 +//1125 150. electron 2 +//1126 150. electron 2 +//1128 150. electron 2 +//1129 150. electron 2 +//1130 150. electron 2 +//1168 70. electron 2 +//1169 70. electron 2 +//1170 70. electron 2 +//1171 70. electron 2 +//1172 70. electron 2 +//1188 200. electron 2 +//1189 200. electron 2 +//1190 200. electron 2 +//1191 200. electron 2 +//1192 200. electron 2 +//1217 100. electron 2 +//1218 100. electron 2 +//1219 100. electron 2 +//1220 100. electron 2 +//1221 100. electron 2 +//1240 32. electron 2 +//1241 32. electron 2 +//1242 32. electron 2 +//1243 32. electron 2 +//1244 32. electron 2 +//1260 20. electron 2 +//1261 20. electron 2 +//1262 20. electron 2 +//1263 20. electron 2 +//1264 20. electron 2 +//1299 250. electron 2 +//1300 250. electron 2 +//1301 250. electron 2 +//1302 250. electron 2 +//1303 250. electron 2 \ No newline at end of file From 4cf32531b7d0e54d07ed627303eef993a697672e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 9 Jan 2017 16:35:38 +0100 Subject: [PATCH 154/297] [position resolution] preliminary alignment from pede parameter file prior to pull calculation --- CondObjects/data/runEnergies.txt | 104 ------------------- Reco/interface/PositionResolutionHelpers.h | 3 + Reco/plugins/Position_Resolution_Analyzer.cc | 8 +- Reco/python/position_resolution_cfi.py | 1 + Reco/src/PositionResolutionHelpers.cc | 35 ++++++- test_cfg_newEB.py | 16 ++- 6 files changed, 59 insertions(+), 108 deletions(-) delete mode 100644 CondObjects/data/runEnergies.txt diff --git a/CondObjects/data/runEnergies.txt b/CondObjects/data/runEnergies.txt deleted file mode 100644 index c4ddc2a..0000000 --- a/CondObjects/data/runEnergies.txt +++ /dev/null @@ -1,104 +0,0 @@ -#RUN ENERGY[GeV] RUNTYPE CONFIGURATION -//852 150. electron 1 -//853 150. electron 1 -//854 150. electron 1 -//855 150. electron 1 -//856 150. electron 1 -//857 150. electron 1 -//858 150. electron 1 -//859 150. electron 1 -//860 150. electron 1 -//862 150. electron 1 -//866 70. electron 1 -//867 70. electron 1 -//878 70. electron 1 -//879 70. electron 1 -//880 70. electron 1 -//881 70. electron 1 -//882 70. electron 1 -//887 70. electron 1 -//888 70. electron 1 -//920 20. electron 1 -//921 20. electron 1 -//922 20. electron 1 -//923 20. electron 1 -//924 20. electron 1 -//925 20. electron 1 -//926 20. electron 1 -//927 20. electron 1 -//928 20. electron 1 -//929 20. electron 1 -944 250. electron 1 -//945 250. electron 1 -//946 250. electron 1 -//947 250. electron 1 -//948 250. electron 1 -//949 250. electron 1 -//950 250. electron 1 -//951 250. electron 1 -//952 250. electron 1 -//953 250. electron 1 -//1026 200. electron 1 -//1027 200. electron 1 -//1028 200. electron 1 -//1029 200. electron 1 -//1030 200. electron 1 -//1038 200. electron 1 -//1039 200. electron 1 -//1040 200. electron 1 -//1041 200. electron 1 -//1042 200. electron 1 -//1051 100. electron 1 -//1052 100. electron 1 -//1053 100. electron 1 -//1054 100. electron 1 -//1056 100. electron 1 -//1069 100. electron 1 -//1070 100. electron 1 -//1071 100. electron 1 -//1072 100. electron 1 -//1073 100. electron 1 -//1088 32. electron 1 -//1091 32. electron 1 -//1092 32. electron 1 -//1093 32. electron 1 -//1094 32. electron 1 -//1095 32. electron 1 -//1098 32. electron 1 -//1099 32. electron 1 -//1100 32. electron 1 -//1125 150. electron 2 -//1126 150. electron 2 -//1128 150. electron 2 -//1129 150. electron 2 -//1130 150. electron 2 -//1168 70. electron 2 -//1169 70. electron 2 -//1170 70. electron 2 -//1171 70. electron 2 -//1172 70. electron 2 -//1188 200. electron 2 -//1189 200. electron 2 -//1190 200. electron 2 -//1191 200. electron 2 -//1192 200. electron 2 -//1217 100. electron 2 -//1218 100. electron 2 -//1219 100. electron 2 -//1220 100. electron 2 -//1221 100. electron 2 -//1240 32. electron 2 -//1241 32. electron 2 -//1242 32. electron 2 -//1243 32. electron 2 -//1244 32. electron 2 -//1260 20. electron 2 -//1261 20. electron 2 -//1262 20. electron 2 -//1263 20. electron 2 -//1264 20. electron 2 -//1299 250. electron 2 -//1300 250. electron 2 -//1301 250. electron 2 -//1302 250. electron 2 -//1303 250. electron 2 \ No newline at end of file diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index eac46ba..534034d 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "TF1.h" #include "TGraphErrors.h" @@ -68,6 +69,8 @@ struct HitData { int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction }; +void parseAlignmentFile(std::map &alignmentParameters, std::string path); + // // class declarations // diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 3225c1c..64eba90 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -68,6 +68,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer RunDataToken; + std::map alignmentParameters; + ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; @@ -247,6 +249,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("layerZ_X0", &layerZ_X0, "layerZ_X0/D"); outTree->Branch("deviation", &deviation, "deviation/D"); + parseAlignmentFile(alignmentParameters, iConfig.getParameter("alignmentParameterFile")); ClusterVetoCounter = 0; HitsVetoCounter = 0; @@ -305,7 +308,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar + Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], alignmentParameters[100*layer + 13], + alignmentParameters[100*layer + 21], alignmentParameters[100*layer + 22], alignmentParameters[100*layer + 23]); + std::cout<<"Setting alignment parameters for layer "<setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 19c9be7..6ce49c7 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", + alignmentParameterFile = cms.string(''), considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), fittingMethod = cms.string('lineTGraphErrors'), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 7abc65d..c2bf45b 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -1,6 +1,38 @@ #include "HGCal/Reco/interface/PositionResolutionHelpers.h" +//**** Parsing of alignment values ****// +void parseAlignmentFile(std::map &alignmentParameters, std::string path) { + std::cout<<"PARSING"<> fragment; + if (std::string(fragment)=="111") readCounter = 0; //first parameter is read out + + if (readCounter==0) currentParameter = atoi(fragment); + if (readCounter==1) currentParameter = alignmentParameters[currentParameter] = atof(fragment); + if (readCounter==4) readCounter = -1; + } + + if (readCounter==-2) { + for (int i=1; i<= 8; i++) { + alignmentParameters[i*100+11] = 0; + alignmentParameters[i*100+12] = 0; + alignmentParameters[i*100+13] = 0; + alignmentParameters[i*100+21] = 0; + alignmentParameters[i*100+22] = 0; + alignmentParameters[i*100+23] = 0; + } + } + +} + //**** Sensor Hit Maps ****// //public functions @@ -62,7 +94,7 @@ double SensorHitMap::getLabZ() { return this->layerLabZ + this->d_z0; } -double SensorHitMap::getIntrinsicHitZPosition() { +double SensorHitMap::getIntrinsicHitZPosition() { //this value is always zero if rotational angles are all zero return this->centralHitZ; } @@ -205,6 +237,7 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth SensorHitMap::poweredWeighting(2); } + //set the displacement in z w.r.t. the rotational angles only centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 7263bbd..bf54413 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -82,6 +82,12 @@ '''Specific options for the position resolution''' +options.register('alignmentParameterFile', + "", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Alignment parameter file as obtained from the pede framework.' + ) options.register('considerationMethod', 'all', VarParsing.VarParsing.multiplicity.singleton, @@ -107,6 +113,7 @@ 'Fit points (one per layer) in the track fit are linearly weighted according to the deposited energy (in MIPs)' ) + options.maxEvents = -1 options.parseArguments() @@ -146,9 +153,13 @@ process.load('HGCal.StandardSequences.LocalReco_cff') process.load('HGCal.StandardSequences.dqm_cff') +pathToRunEnergyFile = repoFolder+"CondObjects/data/runEnergiesFull.txt" +if (options.chainSequence == 9): + pathToRunEnergyFile = repoFolder+"CondObjects/data/runEnergiesAlignment.txt" + process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file - runEnergyMapFile = cms.untracked.string(repoFolder+"CondObjects/data/runEnergies.txt"), #the runs from the runEnergyMapFile are automatically added to the fileNames + runEnergyMapFile = cms.untracked.string(pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED @@ -170,6 +181,7 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') +process.position_resolution_analyzer.alignmentParameterFile = cms.string(options.alignmentParameterFile) process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) @@ -196,7 +208,7 @@ process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string(options.output) ) - + # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): From a7b1c9afe473ab22e2af51e74bd25b9c70b389aa Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 9 Jan 2017 18:12:05 +0100 Subject: [PATCH 155/297] [alignment] choose orthogonal run numbers for alignment --- CondObjects/data/runEnergiesAlignment.txt | 23 ++-- CondObjects/data/runEnergiesFull.txt | 134 +++++++++++----------- 2 files changed, 75 insertions(+), 82 deletions(-) diff --git a/CondObjects/data/runEnergiesAlignment.txt b/CondObjects/data/runEnergiesAlignment.txt index 9611f88..25744e2 100644 --- a/CondObjects/data/runEnergiesAlignment.txt +++ b/CondObjects/data/runEnergiesAlignment.txt @@ -1,16 +1,9 @@ #RUN ENERGY[GeV] RUNTYPE CONFIGURATION -944 250. electron 1 -945 250. electron 1 -946 250. electron 1 -947 250. electron 1 -948 250. electron 1 -949 250. electron 1 -950 250. electron 1 -951 250. electron 1 -952 250. electron 1 -953 250. electron 1 -//1299 250. electron 2 -//1300 250. electron 2 -//1301 250. electron 2 -//1302 250. electron 2 -//1303 250. electron 2 \ No newline at end of file +954 250. electron 1 +955 250. electron 1 +956 250. electron 1 +957 250. electron 1 +958 250. electron 1 +959 250. electron 1 +960 250. electron 1 +961 250. electron 1 \ No newline at end of file diff --git a/CondObjects/data/runEnergiesFull.txt b/CondObjects/data/runEnergiesFull.txt index c4ddc2a..87dae7d 100644 --- a/CondObjects/data/runEnergiesFull.txt +++ b/CondObjects/data/runEnergiesFull.txt @@ -1,72 +1,72 @@ #RUN ENERGY[GeV] RUNTYPE CONFIGURATION -//852 150. electron 1 -//853 150. electron 1 -//854 150. electron 1 -//855 150. electron 1 -//856 150. electron 1 -//857 150. electron 1 -//858 150. electron 1 -//859 150. electron 1 -//860 150. electron 1 -//862 150. electron 1 -//866 70. electron 1 -//867 70. electron 1 -//878 70. electron 1 -//879 70. electron 1 -//880 70. electron 1 -//881 70. electron 1 -//882 70. electron 1 -//887 70. electron 1 -//888 70. electron 1 -//920 20. electron 1 -//921 20. electron 1 -//922 20. electron 1 -//923 20. electron 1 -//924 20. electron 1 -//925 20. electron 1 -//926 20. electron 1 -//927 20. electron 1 -//928 20. electron 1 -//929 20. electron 1 +852 150. electron 1 +853 150. electron 1 +854 150. electron 1 +855 150. electron 1 +856 150. electron 1 +857 150. electron 1 +858 150. electron 1 +859 150. electron 1 +860 150. electron 1 +862 150. electron 1 +866 70. electron 1 +867 70. electron 1 +878 70. electron 1 +879 70. electron 1 +880 70. electron 1 +881 70. electron 1 +882 70. electron 1 +887 70. electron 1 +888 70. electron 1 +920 20. electron 1 +921 20. electron 1 +922 20. electron 1 +923 20. electron 1 +924 20. electron 1 +925 20. electron 1 +926 20. electron 1 +927 20. electron 1 +928 20. electron 1 +929 20. electron 1 944 250. electron 1 -//945 250. electron 1 -//946 250. electron 1 -//947 250. electron 1 -//948 250. electron 1 -//949 250. electron 1 -//950 250. electron 1 -//951 250. electron 1 -//952 250. electron 1 -//953 250. electron 1 -//1026 200. electron 1 -//1027 200. electron 1 -//1028 200. electron 1 -//1029 200. electron 1 -//1030 200. electron 1 -//1038 200. electron 1 -//1039 200. electron 1 -//1040 200. electron 1 -//1041 200. electron 1 -//1042 200. electron 1 -//1051 100. electron 1 -//1052 100. electron 1 -//1053 100. electron 1 -//1054 100. electron 1 -//1056 100. electron 1 -//1069 100. electron 1 -//1070 100. electron 1 -//1071 100. electron 1 -//1072 100. electron 1 -//1073 100. electron 1 -//1088 32. electron 1 -//1091 32. electron 1 -//1092 32. electron 1 -//1093 32. electron 1 -//1094 32. electron 1 -//1095 32. electron 1 -//1098 32. electron 1 -//1099 32. electron 1 -//1100 32. electron 1 +945 250. electron 1 +946 250. electron 1 +947 250. electron 1 +948 250. electron 1 +949 250. electron 1 +950 250. electron 1 +951 250. electron 1 +952 250. electron 1 +953 250. electron 1 +1026 200. electron 1 +1027 200. electron 1 +1028 200. electron 1 +1029 200. electron 1 +1030 200. electron 1 +1038 200. electron 1 +1039 200. electron 1 +1040 200. electron 1 +1041 200. electron 1 +1042 200. electron 1 +1051 100. electron 1 +1052 100. electron 1 +1053 100. electron 1 +1054 100. electron 1 +1056 100. electron 1 +1069 100. electron 1 +1070 100. electron 1 +1071 100. electron 1 +1072 100. electron 1 +1073 100. electron 1 +1088 32. electron 1 +1091 32. electron 1 +1092 32. electron 1 +1093 32. electron 1 +1094 32. electron 1 +1095 32. electron 1 +1098 32. electron 1 +1099 32. electron 1 +1100 32. electron 1 //1125 150. electron 2 //1126 150. electron 2 //1128 150. electron 2 From ed7f76af4caa85a7e9451c061772e996d8005b3c Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 9 Jan 2017 18:12:44 +0100 Subject: [PATCH 156/297] [alignment] adjust derivatives towards the assumption of non-preceding alignment --- Reco/plugins/MillepedeBinaryWriter.cc | 100 ++++++++++++-------------- Reco/src/PositionResolutionHelpers.cc | 1 - 2 files changed, 45 insertions(+), 56 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index f1d547f..abdb512 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -36,7 +36,8 @@ double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.9 //configuration2: double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm - + + class MillepedeBinaryWriter : public edm::one::EDAnalyzer { public: explicit MillepedeBinaryWriter(const edm::ParameterSet&); @@ -85,10 +86,6 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer("totalEnergyThreshold"); eventCounter = 0; - residuals = new double*[nLayers]; - errors = new double*[nLayers]; - derivatives = new double**[nLayers]; - for (int i=0; isetPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(0., 0., 0., 0., 0., 0.); //Todo: read from file or similar Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -296,7 +282,6 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet return; } - //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract common first @@ -305,7 +290,6 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet it->second->calculateCenterPosition(considerationMethod, weightingMethod); } - //step 3: fill particle tracks Track = new ParticleTrack(); for (int i=1; i<=nLayers; i++) { @@ -336,53 +320,59 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet double x_true = position_true.first; double y_true = position_true.second; - derLc[0] = derivatives[layer-1][0][0] = intrinsic_z + layer_labZ; - derLc[1] = derivatives[layer-1][0][1] = 1.; - derLc[2] = derivatives[layer-1][0][2] = (intrinsic_z + layer_labZ)*d_alpha; - derLc[3] = derivatives[layer-1][0][3] = d_alpha; - derGl[0] = derivatives[layer-1][0][4] = y_predicted; - derGl[1] = derivatives[layer-1][0][5] = 0.; - derGl[2] = derivatives[layer-1][0][6] = intrinsic_z; - derGl[3] = derivatives[layer-1][0][7] = 1.; - derGl[4] = derivatives[layer-1][0][8] = 0.; - derGl[5] = derivatives[layer-1][0][9] = 0.; + derLc[0] = layer_labZ; + derLc[1] = 1.; + derLc[2] = 0.; + derLc[3] = 0.; + + derGl[0] = y_predicted; + derGl[1] = 0.; + derGl[2] = 0.; + derGl[3] = 1.; + derGl[4] = 0.; + derGl[5] = 0.; label[0] = layer*100 + 11; label[1] = layer*100 + 12; label[2] = layer*100 + 13; label[3] = layer*100 + 21; label[4] = layer*100 + 22; label[5] = layer*100 + 23; - rMeas = residuals[layer-1][0] = x_true - x_predicted; - sigma = errors[layer-1][0] = 1.2/sqrt(12.); + rMeas = x_true - x_predicted; + sigma = 1.2/sqrt(12.); mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); - derLc[0] = derivatives[layer-1][1][0] = -d_alpha*(intrinsic_z + layer_labZ); - derLc[1] = derivatives[layer-1][1][1] = -d_alpha; - derLc[2] = derivatives[layer-1][1][2] = intrinsic_z + layer_labZ; - derLc[3] = derivatives[layer-1][1][3] = 1.; - derGl[0] = derivatives[layer-1][1][4] = -x_predicted; - derGl[1] = derivatives[layer-1][1][5] = intrinsic_z; - derGl[2] = derivatives[layer-1][1][6] = 0.; - derGl[3] = derivatives[layer-1][1][7] = 0.; - derGl[4] = derivatives[layer-1][1][8] = 1.; - derGl[5] = derivatives[layer-1][1][9] = 0.; - rMeas = residuals[layer-1][1] = y_true - y_predicted; - sigma = errors[layer-1][1] = 1.2/sqrt(12.); + + derLc[0] = 0.; + derLc[1] = 0.; + derLc[2] = layer_labZ; + derLc[3] = 1.; + + derGl[0] = -x_predicted; + derGl[1] = 0.; + derGl[2] = 0.; + derGl[3] = 0.; + derGl[4] = 1.; + derGl[5] = 0.; + rMeas = y_true - y_predicted; + sigma = 1.2/sqrt(12.); mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); - derLc[0] = derivatives[layer-1][2][0] = -d_gamma*(intrinsic_z + layer_labZ); - derLc[1] = derivatives[layer-1][2][1] = -d_gamma; - derLc[2] = derivatives[layer-1][2][2] = -d_beta*(intrinsic_z + layer_labZ); - derLc[3] = derivatives[layer-1][2][3] = -d_beta; - derGl[0] = derivatives[layer-1][2][4] = 0.; - derGl[1] = derivatives[layer-1][2][5] = -y_predicted; - derGl[2] = derivatives[layer-1][2][6] = -x_predicted; - derGl[3] = derivatives[layer-1][2][7] = 0.; - derGl[4] = derivatives[layer-1][2][8] = 0.; - derGl[5] = derivatives[layer-1][2][9] = 1.; - rMeas = residuals[layer-1][2] = 0.0; - sigma = errors[layer-1][2] = 0.1; + + derLc[0] = 0.; + derLc[1] = 0.; + derLc[2] = 0.; + derLc[3] = 0.; + + derGl[0] = 0.; + derGl[1] = -y_predicted; + derGl[2] = x_predicted; + derGl[3] = 0.; + derGl[4] = 0.; + derGl[5] = 1.; + rMeas = 0.0; + sigma = 0.1; mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + } mille->end(); diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index c2bf45b..63ef6cb 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -30,7 +30,6 @@ void parseAlignmentFile(std::map &alignmentParameters, std::string alignmentParameters[i*100+23] = 0; } } - } //**** Sensor Hit Maps ****// From 1a1c1fab8d06b01dd77ff8add1e11cad0c1189c3 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 10 Jan 2017 16:00:02 +0100 Subject: [PATCH 157/297] [position resolution] take lab coordinates for lab positions --- Reco/src/PositionResolutionHelpers.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 63ef6cb..9626489 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -3,7 +3,7 @@ //**** Parsing of alignment values ****// void parseAlignmentFile(std::map &alignmentParameters, std::string path) { - std::cout<<"PARSING"<getHitPosition().first); + x.push_back(sensor->getLabHitPosition().first); x_err.push_back(sensor->getHitPositionError().first); - y.push_back(sensor->getHitPosition().second); + y.push_back(sensor->getLabHitPosition().second); y_err.push_back(sensor->getHitPositionError().second); z.push_back(sensor->getLabZ()); z_err.push_back(0.0); From 5a6d79dc0e43ef2594ecc1361b16b63c7575cb86 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 10 Jan 2017 16:11:23 +0100 Subject: [PATCH 158/297] [position resolution] lab y coordinate for track points --- Reco/src/PositionResolutionHelpers.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 9626489..c202cb0 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -454,7 +454,7 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ x_err.push_back(sensor->getHitPositionError().first); y.push_back(sensor->getLabHitPosition().second); y_err.push_back(sensor->getHitPositionError().second); - z.push_back(sensor->getLabZ()); + z.push_back(sensor->getLabZ()+sensor->getIntrinsicHitZPosition()); z_err.push_back(0.0); Energies.push_back(sensor->getTotalEnergy()); }; From 7227d96ac3e593369b7518ae80e779b117bc7d3e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 11 Jan 2017 10:40:09 +0100 Subject: [PATCH 159/297] [position resolution] remove 2DGraph option from the PositionResolutionAnalyzer --- Reco/plugins/Position_Resolution_Analyzer.cc | 41 +++----------------- Reco/python/position_resolution_cfi.py | 1 - test_cfg_newEB.py | 1 - 3 files changed, 5 insertions(+), 38 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 64eba90..bd45cbe 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -36,8 +36,6 @@ #include "TStyle.h" #include "TFile.h" -#include "TH2D.h" -#include "TGraph2D.h" #include "TTree.h" //configuration1: @@ -68,14 +66,13 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer RunDataToken; - std::map alignmentParameters; + std::map alignmentParameters; //all entries are set to zero if no valid file is given ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; FitPointWeightingMethod fitPointWeightingMethod; - std::vector EventsFor2DGraphs; double pedestalThreshold; std::vector Layer_Z_Positions; std::vector Layer_Z_X0s; @@ -96,7 +93,6 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer Sensors; std::map Tracks; - std::vector x_predicted_v,y_predicted_v, x_true_v, y_true_v, layerZ_cm_v; //stuff to be written to the tree TTree* outTree; @@ -212,9 +208,6 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); - //making 2DGraphs per event? - EventsFor2DGraphs = iConfig.getParameter >("EventsFor2DGraphs"); - //initialize tree and set Branch addresses outTree = fs->make("deviations", "deviations"); outTree->Branch("configuration", &configuration, "configuration/I"); @@ -276,14 +269,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E return; } - //check if 2DGraphs are to be made - bool make2DGraphs = false; - std::vector::iterator findPosition = std::find(EventsFor2DGraphs.begin(), EventsFor2DGraphs.end(), evId); - if (findPosition != EventsFor2DGraphs.end()) { - make2DGraphs = true; - EventsFor2DGraphs.erase(findPosition); - } - //initialize new fit counters in case this is a new run: if (successfulFitCounter.find(run) == successfulFitCounter.end()) successfulFitCounter[run] = failedFitCounter[run] = 0; @@ -308,10 +293,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], alignmentParameters[100*layer + 13], - alignmentParameters[100*layer + 21], alignmentParameters[100*layer + 22], alignmentParameters[100*layer + 23]); - std::cout<<"Setting alignment parameters for layer "<setAlignmentParameters(0.0, 0.0, 0.0, + alignmentParameters[100*layer + 11], 0.0, 0.0); + Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -432,22 +417,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //fill the tree outTree->Fill(); - //update the deviations maxima on the fly - if (make2DGraphs) { - //store for the two 2D graphs that are written per event - x_predicted_v.push_back(x_predicted); - y_predicted_v.push_back(y_predicted); - x_true_v.push_back(x_true); - y_true_v.push_back(y_true); - layerZ_cm_v.push_back(layerZ_cm); - } - } - - if (make2DGraphs) { - std::string graphIdentifier = "run_" + std::to_string(run) + "event_" + std::to_string(evId); - fs->make(("predicted_points_" + graphIdentifier).c_str(), "", layerZ_cm_v.size(), &(x_predicted_v[0]), &(y_predicted_v[0]), &(layerZ_cm_v[0])); - fs->make(("true_points_" + graphIdentifier).c_str(), "", layerZ_cm_v.size(), &(x_true_v[0]), &(y_true_v[0]), &(layerZ_cm_v[0])); - x_predicted_v.clear(); y_predicted_v.clear(); x_true_v.clear(); y_true_v.clear(); layerZ_cm_v.clear(); } for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 6ce49c7..b397693 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -12,7 +12,6 @@ nLayers = cms.int32(8), SensorSize = cms.int32(128), totalEnergyThreshold = cms.double(1000.), - EventsFor2DGraphs = cms.vint32([1]), RUNDATA = cms.InputTag("source","RunData","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index bf54413..8c65b75 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -187,7 +187,6 @@ process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) process.position_resolution_analyzer.totalEnergyThreshold = -1000. -process.position_resolution_analyzer.EventsFor2DGraphs = [] #first occuring events with that id are being documented with 2DGraphs process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) From dd50153b1cfe0db1b62b38841dc439ff05297cc9 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 11 Jan 2017 10:56:10 +0100 Subject: [PATCH 160/297] [text input] externalize runEnergy files, indicate via options --- CondObjects/data/runEnergiesAlignment.txt | 9 -- CondObjects/data/runEnergiesFull.txt | 104 ---------------------- test_cfg_newEB.py | 15 ++-- 3 files changed, 9 insertions(+), 119 deletions(-) delete mode 100644 CondObjects/data/runEnergiesAlignment.txt delete mode 100644 CondObjects/data/runEnergiesFull.txt diff --git a/CondObjects/data/runEnergiesAlignment.txt b/CondObjects/data/runEnergiesAlignment.txt deleted file mode 100644 index 25744e2..0000000 --- a/CondObjects/data/runEnergiesAlignment.txt +++ /dev/null @@ -1,9 +0,0 @@ -#RUN ENERGY[GeV] RUNTYPE CONFIGURATION -954 250. electron 1 -955 250. electron 1 -956 250. electron 1 -957 250. electron 1 -958 250. electron 1 -959 250. electron 1 -960 250. electron 1 -961 250. electron 1 \ No newline at end of file diff --git a/CondObjects/data/runEnergiesFull.txt b/CondObjects/data/runEnergiesFull.txt deleted file mode 100644 index 87dae7d..0000000 --- a/CondObjects/data/runEnergiesFull.txt +++ /dev/null @@ -1,104 +0,0 @@ -#RUN ENERGY[GeV] RUNTYPE CONFIGURATION -852 150. electron 1 -853 150. electron 1 -854 150. electron 1 -855 150. electron 1 -856 150. electron 1 -857 150. electron 1 -858 150. electron 1 -859 150. electron 1 -860 150. electron 1 -862 150. electron 1 -866 70. electron 1 -867 70. electron 1 -878 70. electron 1 -879 70. electron 1 -880 70. electron 1 -881 70. electron 1 -882 70. electron 1 -887 70. electron 1 -888 70. electron 1 -920 20. electron 1 -921 20. electron 1 -922 20. electron 1 -923 20. electron 1 -924 20. electron 1 -925 20. electron 1 -926 20. electron 1 -927 20. electron 1 -928 20. electron 1 -929 20. electron 1 -944 250. electron 1 -945 250. electron 1 -946 250. electron 1 -947 250. electron 1 -948 250. electron 1 -949 250. electron 1 -950 250. electron 1 -951 250. electron 1 -952 250. electron 1 -953 250. electron 1 -1026 200. electron 1 -1027 200. electron 1 -1028 200. electron 1 -1029 200. electron 1 -1030 200. electron 1 -1038 200. electron 1 -1039 200. electron 1 -1040 200. electron 1 -1041 200. electron 1 -1042 200. electron 1 -1051 100. electron 1 -1052 100. electron 1 -1053 100. electron 1 -1054 100. electron 1 -1056 100. electron 1 -1069 100. electron 1 -1070 100. electron 1 -1071 100. electron 1 -1072 100. electron 1 -1073 100. electron 1 -1088 32. electron 1 -1091 32. electron 1 -1092 32. electron 1 -1093 32. electron 1 -1094 32. electron 1 -1095 32. electron 1 -1098 32. electron 1 -1099 32. electron 1 -1100 32. electron 1 -//1125 150. electron 2 -//1126 150. electron 2 -//1128 150. electron 2 -//1129 150. electron 2 -//1130 150. electron 2 -//1168 70. electron 2 -//1169 70. electron 2 -//1170 70. electron 2 -//1171 70. electron 2 -//1172 70. electron 2 -//1188 200. electron 2 -//1189 200. electron 2 -//1190 200. electron 2 -//1191 200. electron 2 -//1192 200. electron 2 -//1217 100. electron 2 -//1218 100. electron 2 -//1219 100. electron 2 -//1220 100. electron 2 -//1221 100. electron 2 -//1240 32. electron 2 -//1241 32. electron 2 -//1242 32. electron 2 -//1243 32. electron 2 -//1244 32. electron 2 -//1260 20. electron 2 -//1261 20. electron 2 -//1262 20. electron 2 -//1263 20. electron 2 -//1264 20. electron 2 -//1299 250. electron 2 -//1300 250. electron 2 -//1301 250. electron 2 -//1302 250. electron 2 -//1303 250. electron 2 \ No newline at end of file diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 8c65b75..3514ff7 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -38,6 +38,12 @@ VarParsing.VarParsing.varType.int, 'Input file to process') +options.register('pathToRunEnergyFile', + '/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + '(Absolute) path to the file that indicates the runs to run the analysis on.') + options.register('runType', 'Unknown', VarParsing.VarParsing.multiplicity.singleton, @@ -153,16 +159,13 @@ process.load('HGCal.StandardSequences.LocalReco_cff') process.load('HGCal.StandardSequences.dqm_cff') -pathToRunEnergyFile = repoFolder+"CondObjects/data/runEnergiesFull.txt" -if (options.chainSequence == 9): - pathToRunEnergyFile = repoFolder+"CondObjects/data/runEnergiesAlignment.txt" process.source = cms.Source("HGCalTBTextSource", - run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file - runEnergyMapFile = cms.untracked.string(pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames + run=cms.untracked.int32(options.runNumber), # + runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered - #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) nSpills=cms.untracked.uint32(options.nSpills), ) From 8fff334d78b09afb5d6329867316b073c3b98a5b Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 11 Jan 2017 11:42:51 +0100 Subject: [PATCH 161/297] [alignment] remove unnecessary 'per event' information from run file --- Reco/plugins/MillepedeBinaryWriter.cc | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index abdb512..0c4b9cb 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -79,15 +79,9 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer Sensors; ParticleTrack* Track; - int configuration, evId, eventCounter, run; //eventCounter: counts the events in this analysis run to match information within ove event to each other - double energy; + int run; - //initial global parameters, corresponding to obtained value from preceding iteration - //placeholders, should be defined per layer in the according class! - double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; - Mille* mille; - }; MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { @@ -189,16 +183,10 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); - eventCounter = 0; - ClusterVetoCounter = 0; HitsVetoCounter = 0; CommonVetoCounter = 0; - - d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; - - }//constructor ends here MillepedeBinaryWriter::~MillepedeBinaryWriter() { @@ -211,11 +199,9 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet //get the relevant event information event.getByToken(RunDataToken, rd); - configuration = rd->configuration; - evId = event.id().event(); - eventCounter++; + run = rd->run; - energy = rd->energy; + if (run == -1) { std::cout<<"Run is not in configuration file - is ignored."< Date: Wed, 11 Jan 2017 14:34:07 +0100 Subject: [PATCH 162/297] [alignment] translation in x and y simultaneously --- Reco/plugins/MillepedeBinaryWriter.cc | 100 ++++++++++++-------------- 1 file changed, 47 insertions(+), 53 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 0c4b9cb..0366cc0 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -82,6 +82,10 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); } - - mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); - pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); nLayers = iConfig.getParameter("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); + + mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); + NLC = 4; + NGLperLayer = 2; + NGL = nLayers*NGLperLayer; + rMeas = 0.; + sigma = 0.; + derLc = new float[NLC]; + derGl = new float[NGL]; + label = new int[NGL]; + + for (int l=1; l<=nLayers; l++) { + label[(l-1)*NGLperLayer + 0] = l*100 + 11; + label[(l-1)*NGLperLayer + 1] = l*100 + 12; + } ClusterVetoCounter = 0; HitsVetoCounter = 0; @@ -284,13 +300,6 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet Track->weightFitPoints(fitPointWeightingMethod); Track->fitTrack(fittingMethod); - int NLC = 4; - int NGL = 6; - float rMeas = 0.; - float sigma = 0.; - float *derLc = new float[NLC]; - float *derGl = new float[NGL]; - int *label = new int[NGL]; //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position for (int layer=1; layer<=nLayers; layer++) { @@ -301,70 +310,54 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet double x_predicted = position_predicted.first; double y_predicted = position_predicted.second; - std::pair position_true = Sensors[layer]->getLabHitPosition(); //should be distinguished into intrinsic position (in frame of sensor) and the lab frame - //later will require to perform according transformation with angles and displacements + //std::pair position_predicted_err = Track->calculatePositionErrorXY(layer_labZ+intrinsic_z); + //double x_predicted_err = position_predicted_err.first; + //double y_predicted_err = position_predicted_err.second; + + std::pair position_true = Sensors[layer]->getHitPosition(); double x_true = position_true.first; double y_true = position_true.second; - + + //std::pair position_true_err = Sensors[layer]->getHitPositionError(); + Sensors[layer]->getHitPositionError(); + //double x_true_err = position_true_err.first; + //double y_true_err = position_true_err.second; + + //step5: calculate the necessary derivatives for Mille and fill them into the binary file + //reset all global parameters: + for (int k=0; kmille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + //the y-coordinate derLc[0] = 0.; derLc[1] = 0.; derLc[2] = layer_labZ; derLc[3] = 1.; - derGl[0] = -x_predicted; - derGl[1] = 0.; - derGl[2] = 0.; - derGl[3] = 0.; - derGl[4] = 1.; - derGl[5] = 0.; - rMeas = y_true - y_predicted; - sigma = 1.2/sqrt(12.); - mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + derGl[(layer-1)*NGLperLayer+0] = 0.; + derGl[(layer-1)*NGLperLayer+1] = 1.; - - derLc[0] = 0.; - derLc[1] = 0.; - derLc[2] = 0.; - derLc[3] = 0.; - - derGl[0] = 0.; - derGl[1] = -y_predicted; - derGl[2] = x_predicted; - derGl[3] = 0.; - derGl[4] = 0.; - derGl[5] = 1.; - rMeas = 0.0; - sigma = 0.1; + rMeas = y_true - y_predicted; + sigma = 0.334; mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); - } mille->end(); - - delete derLc; delete derGl; delete label; - for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; }; Sensors.clear(); @@ -378,6 +371,7 @@ void MillepedeBinaryWriter::beginJob() { void MillepedeBinaryWriter::endJob() { mille->kill(); delete mille; + delete derLc; delete derGl; delete label; std::cout<<"ClusterVetos: "< Date: Wed, 11 Jan 2017 14:46:56 +0100 Subject: [PATCH 163/297] [positionResolution] fix layer indexing in z position assignment --- Reco/plugins/Position_Resolution_Analyzer.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index bd45cbe..78515e8 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -103,6 +103,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer CM_tmp; //will write the subtract_CM() return values for each layer + }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -255,13 +256,14 @@ Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { // ------------ method called for each event ------------ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { + eventCounter++; + edm::Handle rd; //get the relevant event information event.getByToken(RunDataToken, rd); configuration = rd->configuration; evId = event.id().event(); - eventCounter++; run = rd->run; energy = rd->energy; if (run == -1) { @@ -292,10 +294,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setLabZ(Layer_Z_Positions[layer], Layer_Z_X0s[layer]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, - alignmentParameters[100*layer + 11], 0.0, 0.0); + alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); @@ -410,8 +412,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layerWeight = Sensors[layer]->getTotalWeight(); //DEBUG - if (deviation > 1000.) + if (deviation > 1000.) { + std::cout<<"Event: "< Date: Thu, 12 Jan 2017 12:28:40 +0100 Subject: [PATCH 164/297] [position resolution] analytical computation of straight line 'tracks' --- Reco/interface/PositionResolutionHelpers.h | 32 ++++++ Reco/plugins/Position_Resolution_Analyzer.cc | 4 +- Reco/python/position_resolution_cfi.py | 2 +- Reco/src/PositionResolutionHelpers.cc | 109 ++++++++++++++++++- 4 files changed, 139 insertions(+), 8 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 534034d..6e7c294 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -49,6 +49,7 @@ enum WeightingMethod { enum TrackFittingMethod { DEFAULTFITTING, + LINEFITANALYTICAL, LINEFITTGRAPHERRORS, POL2TGRAPHERRORS, POL3TGRAPHERRORS @@ -74,6 +75,31 @@ void parseAlignmentFile(std::map &alignmentParameters, std::string // // class declarations // + +//class that performs an analytical straight line fit +class LineFitter { + private: + std::vector _x; + std::vector _y; + std::vector _sigma_y; + double _S, _S_x, _S_xx, _S_xy, _S_y; + public: + LineFitter(std::vector x, std::vector y, std::vector sigma_y); + void addPoint(double x, double y, double sigma_y); + void fit(); + bool converged(); + double getM(); + double getMError(); + double getB(); + double getBError(); + double getMBCovariance(); + + double eval(double x); + double evalError(double x); +}; + + + class SensorHitMap { private: std::pair centralHitPoint; @@ -158,6 +184,12 @@ class ParticleTrack{ TrackFittingMethod lastAppliedMethod; //different fit functions + void analyticalStraightLineFit(); + std::pair positionFromAnalyticalStraightLine(double z); + std::pair positionFromAnalyticalStraightLineErrors(double z); + LineFitter* linefit_x; + LineFitter* linefit_y; + void polFitTGraphErrors(int degree); std::pair positionFromPolFitTGraphErrors(int degree, double z); std::pair positionErrorFromPolFitTGraphErrors(int degree, double z); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 78515e8..e29d5a7 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -163,7 +163,9 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //read the track fitting method methodString = iConfig.getParameter("fittingMethod"); - if (methodString == "lineTGraphErrors") + if (methodString == "lineAnalytical") + fittingMethod = LINEFITANALYTICAL; + else if (methodString == "lineTGraphErrors") fittingMethod = LINEFITTGRAPHERRORS; else if (methodString == "pol2TGraphErrors") fittingMethod = POL2TGRAPHERRORS; diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index b397693..fe6ac24 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -4,7 +4,7 @@ alignmentParameterFile = cms.string(''), considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), - fittingMethod = cms.string('lineTGraphErrors'), + fittingMethod = cms.string('lineAnalytical'), fitPointWeightingMethod = cms.string('none'), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index c202cb0..59cff40 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -32,6 +32,72 @@ void parseAlignmentFile(std::map &alignmentParameters, std::string } } +//**** Line Fiting Class ****// + +LineFitter::LineFitter(std::vector x, std::vector y, std::vector sigma_y) { + if (x.size() != y.size()) { + std::cout<<"LineFitter class: x and y vectors have different dimension!"< 0.); +} +double LineFitter::getM() { + return (_S*_S_xy-_S_x*_S_y)/(_S*_S_xx-_S_x*_S_x); +} +double LineFitter::getMError() { + return sqrt(_S/(_S*_S_xx-_S_x*_S_x)); +} +double LineFitter::getB() { + return (_S_xx*_S_y-_S_x*_S_xy)/(_S*_S_xx-_S_x*_S_x); +} +double LineFitter::getBError() { + return sqrt(_S_xx/(_S*_S_xx-_S_x*_S_x)); +} +double LineFitter::getMBCovariance() { + return - _S_x/(_S*_S_xx-_S_x*_S_x); +} + +double LineFitter::eval(double x) { + return this->getB() + x * this->getM(); +}; +double LineFitter::evalError(double x) { + return sqrt(pow(this->getBError(), 2) + pow(x*this->getMError(),2) + 2*fabs(x)*this->getMBCovariance()); +}; + + //**** Sensor Hit Maps ****// //public functions @@ -437,7 +503,8 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { //public functions ParticleTrack::ParticleTrack(){ lastAppliedMethod = DEFAULTFITTING; - ROOTpol_x = ROOTpol_y = 0; + ROOTpol_x = ROOTpol_y = NULL; + linefit_x = linefit_y = NULL; N_points = 0; }; @@ -445,6 +512,8 @@ ParticleTrack::ParticleTrack(){ ParticleTrack::~ParticleTrack(){ delete ROOTpol_x; delete ROOTpol_y; + delete linefit_x; + delete linefit_y; x.clear(); x_err.clear(); y.clear(); y_err.clear(); z.clear(); z_err.clear(); }; @@ -485,6 +554,9 @@ void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { void ParticleTrack::fitTrack(TrackFittingMethod method){ try { switch(method) { + case LINEFITANALYTICAL: + analyticalStraightLineFit(); + break; case LINEFITTGRAPHERRORS: polFitTGraphErrors(1); break; @@ -507,6 +579,8 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ std::pair ParticleTrack::calculatePositionXY(double z) { switch(lastAppliedMethod) { + case LINEFITANALYTICAL: + return positionFromAnalyticalStraightLine(z); case LINEFITTGRAPHERRORS: return positionFromPolFitTGraphErrors(1, z); case POL2TGRAPHERRORS: @@ -519,6 +593,8 @@ std::pair ParticleTrack::calculatePositionXY(double z) { } std::pair ParticleTrack::calculatePositionErrorXY(double z) { switch(lastAppliedMethod) { + case LINEFITANALYTICAL: + return positionFromAnalyticalStraightLineErrors(z); case LINEFITTGRAPHERRORS: return positionErrorFromPolFitTGraphErrors(1, z); case POL2TGRAPHERRORS: @@ -539,11 +615,33 @@ double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e } //private functions +void ParticleTrack::analyticalStraightLineFit() { + if (linefit_x != NULL) + delete linefit_x; + if (linefit_y != NULL) + delete linefit_y; + + linefit_x = new LineFitter(z, x, x_err); + linefit_y = new LineFitter(z, y, y_err); + linefit_x->fit(); + linefit_y->fit(); + + polFitTGraphErrors(1); +}; + +std::pair ParticleTrack::positionFromAnalyticalStraightLine(double z) { + return std::make_pair(linefit_x->eval(z), linefit_y->eval(z)); +}; +std::pair ParticleTrack::positionFromAnalyticalStraightLineErrors(double z) { + return std::make_pair(linefit_x->evalError(z), linefit_y->evalError(z)); +}; + + + void ParticleTrack::polFitTGraphErrors(int degree){ - //todo: clear existing Polynomial pointers if existing - if (ROOTpol_x != 0) + if (ROOTpol_x != NULL) delete ROOTpol_x; - if (ROOTpol_y != 0) + if (ROOTpol_y != NULL) delete ROOTpol_y; ROOTpol_x = new TF1("ROOTpol_x", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); @@ -557,7 +655,6 @@ void ParticleTrack::polFitTGraphErrors(int degree){ delete tmp_graph_x; delete tmp_graph_y; - }; std::pair ParticleTrack::positionFromPolFitTGraphErrors(int degree, double z) { @@ -575,7 +672,7 @@ std::pair ParticleTrack::positionErrorFromPolFitTGraphErrors(int err_y += 2*fit_result_y->Correlation(i, j) * ROOTpol_y->GetParError(i) * ROOTpol_y->GetParError(j) * fabs(pow(z, i+j)); } } - return std::make_pair(err_x, err_y); + return std::make_pair(sqrt(err_x), sqrt(err_y)); } From 2c9d58711a0b49970beacc75875adc45559831b5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 12 Jan 2017 13:19:32 +0100 Subject: [PATCH 165/297] [alignment] use analytical straight line in residual calculation --- Reco/plugins/MillepedeBinaryWriter.cc | 4 +++- Reco/python/millepede_binarywriter_cfi.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 0366cc0..be3fdf4 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -143,7 +143,9 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { //read the track fitting method methodString = iConfig.getParameter("fittingMethod"); - if (methodString == "lineTGraphErrors") + if (methodString == "lineAnalytical") + fittingMethod = LINEFITANALYTICAL; + else if (methodString == "lineTGraphErrors") fittingMethod = LINEFITTGRAPHERRORS; else if (methodString == "pol2TGraphErrors") fittingMethod = POL2TGRAPHERRORS; diff --git a/Reco/python/millepede_binarywriter_cfi.py b/Reco/python/millepede_binarywriter_cfi.py index ff1cb60..1764b6e 100644 --- a/Reco/python/millepede_binarywriter_cfi.py +++ b/Reco/python/millepede_binarywriter_cfi.py @@ -4,7 +4,7 @@ binaryFile = cms.string('~/millebin.bin'), considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), - fittingMethod = cms.string('lineTGraphErrors'), + fittingMethod = cms.string('lineAnalytical'), fitPointWeightingMethod = cms.string('none'), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), From ac2ab9663a8783dac51790323f3ef142237a1372 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 12 Jan 2017 14:54:41 +0100 Subject: [PATCH 166/297] [track fitting] return 0 for all values when analytical solution of straight line track is not found --- Reco/interface/PositionResolutionHelpers.h | 2 +- Reco/src/PositionResolutionHelpers.cc | 24 ++++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 6e7c294..e53afd9 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -82,7 +82,7 @@ class LineFitter { std::vector _x; std::vector _y; std::vector _sigma_y; - double _S, _S_x, _S_xx, _S_xy, _S_y; + double _S, _S_x, _S_xx, _S_xy, _S_y, _Delta; public: LineFitter(std::vector x, std::vector y, std::vector sigma_y); void addPoint(double x, double y, double sigma_y); diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 59cff40..7069da4 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -60,7 +60,7 @@ void LineFitter::fit() { if (_x.size()==0 || _y.size()==0 || _sigma_y.size()==0) { std::cout<<"One of the input vectors has zero dimension!"< 0.); + return (_Delta > 0.); } double LineFitter::getM() { - return (_S*_S_xy-_S_x*_S_y)/(_S*_S_xx-_S_x*_S_x); + return (_S*_S_xy-_S_x*_S_y)/_Delta; } double LineFitter::getMError() { - return sqrt(_S/(_S*_S_xx-_S_x*_S_x)); + return sqrt(_S/_Delta); } double LineFitter::getB() { - return (_S_xx*_S_y-_S_x*_S_xy)/(_S*_S_xx-_S_x*_S_x); + return (_S_xx*_S_y-_S_x*_S_xy)/_Delta; } double LineFitter::getBError() { - return sqrt(_S_xx/(_S*_S_xx-_S_x*_S_x)); + return sqrt(_S_xx/_Delta); } double LineFitter::getMBCovariance() { - return - _S_x/(_S*_S_xx-_S_x*_S_x); + return - _S_x/_Delta; } double LineFitter::eval(double x) { - return this->getB() + x * this->getM(); + if (!converged()) return 0; + else + return this->getB() + x * this->getM(); }; double LineFitter::evalError(double x) { - return sqrt(pow(this->getBError(), 2) + pow(x*this->getMError(),2) + 2*fabs(x)*this->getMBCovariance()); + if (!converged()) return 0; + else + return sqrt(pow(this->getBError(), 2) + pow(x*this->getMError(),2) + 2*fabs(x)*this->getMBCovariance()); }; From 047cf72b479b4d2fcb637e8a1eb9c6a1fb63d81c Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 12 Jan 2017 18:10:03 +0100 Subject: [PATCH 167/297] [alignment] add rotation w.r.t. z-axis --- Reco/plugins/MillepedeBinaryWriter.cc | 11 ++++++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 6 +++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index be3fdf4..1569299 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -28,7 +28,7 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -#include "HGCal/Reco/interface/Mille.h" +#include "Alignment/MillePedeAlignmentAlgorithm/src/Mille.h" //configuration1: @@ -56,7 +56,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer RunDataToken; - + ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; TrackFittingMethod fittingMethod; @@ -188,7 +188,7 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); NLC = 4; - NGLperLayer = 2; + NGLperLayer = 3; NGL = nLayers*NGLperLayer; rMeas = 0.; sigma = 0.; @@ -199,6 +199,7 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { for (int l=1; l<=nLayers; l++) { label[(l-1)*NGLperLayer + 0] = l*100 + 11; label[(l-1)*NGLperLayer + 1] = l*100 + 12; + label[(l-1)*NGLperLayer + 2] = l*100 + 21; } ClusterVetoCounter = 0; @@ -245,6 +246,8 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, + 0.0, 0.0, 0.0); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); } @@ -339,6 +342,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+0] = 1.; derGl[(layer-1)*NGLperLayer+1] = 0.; + derGl[(layer-1)*NGLperLayer+2] = y_predicted; rMeas = x_true - x_predicted; sigma = 0.334; @@ -353,6 +357,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+0] = 0.; derGl[(layer-1)*NGLperLayer+1] = 1.; + derGl[(layer-1)*NGLperLayer+2] = -x_predicted; rMeas = y_true - y_predicted; sigma = 0.334; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index e29d5a7..c68b05b 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -298,7 +298,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, + Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 21], 0.0, 0.0, alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); @@ -404,8 +404,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E x_true_err = position_error_true.first; y_true_err = position_error_true.second; - deltaX = x_predicted - x_true; - deltaY = y_predicted - y_true; + deltaX = x_true - x_predicted; + deltaY = y_true - y_predicted; deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); sumFitWeights = Tracks[layer]->getSumOfEnergies(); From 9c3b86f98e13f58578b5bb55a869441f66b15b67 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 12 Jan 2017 18:15:57 +0100 Subject: [PATCH 168/297] [alignment] remove own Mille files --- Reco/interface/Mille.h | 56 ----------- Reco/src/Mille.cc | 208 ----------------------------------------- 2 files changed, 264 deletions(-) delete mode 100644 Reco/interface/Mille.h delete mode 100644 Reco/src/Mille.cc diff --git a/Reco/interface/Mille.h b/Reco/interface/Mille.h deleted file mode 100644 index 19764fb..0000000 --- a/Reco/interface/Mille.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef MILLE_H -#define MILLE_H - -#include - -/** - * \class Mille - * - * Class to write a C binary (cf. below) file of a given name and to fill it - * with information used as input to **pede**. - * Use its member functions \c mille(), \c special(), \c kill() and \c end() - * as you would use the fortran \ref mille.f90 "MILLE" - * and its entry points \c MILLSP, \c KILLE and \c ENDLE. - * - * For debugging purposes constructor flags enable switching to text output and/or - * to write also derivatives and labels which are ==0. - * But note that **pede** will not be able to read text output and has not been tested with - * derivatives/labels ==0. - * - * \author : Gero Flucke - * date : October 2006 - * $Revision: 1.3 $ - * $Date: 2007/04/16 17:47:38 $ - * (last update by $Author: flucke $) - */ - -/// Class to write C binary file. -class Mille -{ - public: - Mille(const char *outFileName, bool asBinary = true, bool writeZero = false); - ~Mille(); - - void mille(int NLC, const float *derLc, int NGL, const float *derGl, - const int *label, float rMeas, float sigma); - void special(int nSpecial, const float *floatings, const int *integers); - void kill(); - void end(); - - private: - void newSet(); - bool checkBufferSize(int nLocal, int nGlobal); - - std::ofstream myOutFile; ///< C-binary for output - bool myAsBinary; ///< if false output as text - bool myWriteZero; ///< if true also write out derivatives/labels ==0 - /// buffer size for ints and floats - enum {myBufferSize = 5000}; ///< buffer size for ints and floats - int myBufferInt[myBufferSize]; ///< to collect labels etc. - float myBufferFloat[myBufferSize]; ///< to collect derivatives etc. - int myBufferPos; ///< position in buffer - bool myHasSpecial; ///< if true, special(..) already called for this record - /// largest label allowed: 2^31 - 1 - enum {myMaxLabel = (0xFFFFFFFF - (1 << 31))}; -}; -#endif diff --git a/Reco/src/Mille.cc b/Reco/src/Mille.cc deleted file mode 100644 index 16275f8..0000000 --- a/Reco/src/Mille.cc +++ /dev/null @@ -1,208 +0,0 @@ -/** - * \file - * Create Millepede-II C-binary record. - * - * \author : Gero Flucke - * date : October 2006 - * $Revision: 1.3 $ - * $Date: 2007/04/16 17:47:38 $ - * (last update by $Author: flucke $) - */ - -#include "HGCal/Reco/interface/Mille.h" - -#include -#include - -//___________________________________________________________________________ - -/// Opens outFileName (by default as binary file). -/** - * \param[in] outFileName file name - * \param[in] asBinary flag for binary - * \param[in] writeZero flag for keeping of zeros - */ -Mille::Mille(const char *outFileName, bool asBinary, bool writeZero) : - myOutFile(outFileName, (asBinary ? (std::ios::binary | std::ios::out) : std::ios::out)), - myAsBinary(asBinary), myWriteZero(writeZero), myBufferPos(-1), myHasSpecial(false) -{ - // Instead myBufferPos(-1), myHasSpecial(false) and the following two lines - // we could call newSet() and kill()... - myBufferInt[0] = 0; - myBufferFloat[0] = 0.; - - if (!myOutFile.is_open()) { - std::cerr << "Mille::Mille: Could not open " << outFileName - << " as output file." << std::endl; - } -} - -//___________________________________________________________________________ -/// Closes file. -Mille::~Mille() -{ - myOutFile.close(); -} - -//___________________________________________________________________________ -/// Add measurement to buffer. -/** - * \param[in] NLC number of local derivatives - * \param[in] derLc local derivatives - * \param[in] NGL number of global derivatives - * \param[in] derGl global derivatives - * \param[in] label global labels - * \param[in] rMeas measurement (residuum) - * \param[in] sigma error - */ -void Mille::mille(int NLC, const float *derLc, - int NGL, const float *derGl, const int *label, - float rMeas, float sigma) -{ - if (sigma <= 0.) return; - if (myBufferPos == -1) this->newSet(); // start, e.g. new track - if (!this->checkBufferSize(NLC, NGL)) return; - - // first store measurement - ++myBufferPos; - myBufferFloat[myBufferPos] = rMeas; - myBufferInt [myBufferPos] = 0; - - // store local derivatives and local 'lables' 1,...,NLC - for (int i = 0; i < NLC; ++i) { - if (derLc[i] || myWriteZero) { // by default store only non-zero derivatives - ++myBufferPos; - myBufferFloat[myBufferPos] = derLc[i]; // local derivatives - myBufferInt [myBufferPos] = i+1; // index of local parameter - } - } - - // store uncertainty of measurement in between locals and globals - ++myBufferPos; - myBufferFloat[myBufferPos] = sigma; - myBufferInt [myBufferPos] = 0; - - // store global derivatives and their labels - for (int i = 0; i < NGL; ++i) { - if (derGl[i] || myWriteZero) { // by default store only non-zero derivatives - if ((label[i] > 0 || myWriteZero) && label[i] <= myMaxLabel) { // and for valid labels - ++myBufferPos; - myBufferFloat[myBufferPos] = derGl[i]; // global derivatives - myBufferInt [myBufferPos] = label[i]; // index of global parameter - } else { - std::cerr << "Mille::mille: Invalid label " << label[i] - << " <= 0 or > " << myMaxLabel << std::endl; - } - } - } -} - -//___________________________________________________________________________ -/// Add special data to buffer. -/** - * \param[in] nSpecial number of floats/ints - * \param[in] floatings floats - * \param[in] integers ints - */ -void Mille::special(int nSpecial, const float *floatings, const int *integers) -{ - if (nSpecial == 0) return; - if (myBufferPos == -1) this->newSet(); // start, e.g. new track - if (myHasSpecial) { - std::cerr << "Mille::special: Special values already stored for this record." - << std::endl; - return; - } - if (!this->checkBufferSize(nSpecial, 0)) return; - myHasSpecial = true; // after newSet() (Note: MILLSP sets to buffer position...) - - // myBufferFloat[.] | myBufferInt[.] - // ------------------------------------ - // 0.0 | 0 - // -float(nSpecial) | 0 - // The above indicates special data, following are nSpecial floating and nSpecial integer data. - - ++myBufferPos; // zero pair - myBufferFloat[myBufferPos] = 0.; - myBufferInt [myBufferPos] = 0; - - ++myBufferPos; // nSpecial and zero - myBufferFloat[myBufferPos] = -nSpecial; // automatic conversion to float - myBufferInt [myBufferPos] = 0; - - for (int i = 0; i < nSpecial; ++i) { - ++myBufferPos; - myBufferFloat[myBufferPos] = floatings[i]; - myBufferInt [myBufferPos] = integers[i]; - } -} - -//___________________________________________________________________________ -/// Reset buffers, i.e. kill derivatives accumulated for current set. -void Mille::kill() -{ - myBufferPos = -1; -} - -//___________________________________________________________________________ -/// Write buffer (set of derivatives with same local parameters) to file. -void Mille::end() -{ - if (myBufferPos > 0) { // only if anything stored... - const int numWordsToWrite = (myBufferPos + 1)*2; - - if (myAsBinary) { - myOutFile.write(reinterpret_cast(&numWordsToWrite), - sizeof(numWordsToWrite)); - myOutFile.write(reinterpret_cast(myBufferFloat), - (myBufferPos+1) * sizeof(myBufferFloat[0])); - myOutFile.write(reinterpret_cast(myBufferInt), - (myBufferPos+1) * sizeof(myBufferInt[0])); - } else { - myOutFile << numWordsToWrite << "\n"; - for (int i = 0; i < myBufferPos+1; ++i) { - myOutFile << myBufferFloat[i] << " "; - } - myOutFile << "\n"; - - for (int i = 0; i < myBufferPos+1; ++i) { - myOutFile << myBufferInt[i] << " "; - } - myOutFile << "\n"; - } - } - myBufferPos = -1; // reset buffer for next set of derivatives -} - -//___________________________________________________________________________ -/// Initialize for new set of locals, e.g. new track. -void Mille::newSet() -{ - myBufferPos = 0; - myHasSpecial = false; - myBufferFloat[0] = 0.0; - myBufferInt [0] = 0; // position 0 used as error counter -} - -//___________________________________________________________________________ -/// Enough space for next nLocal + nGlobal derivatives incl. measurement? -/** - * \param[in] nLocal number of local derivatives - * \param[in] nGlobal number of global derivatives - * \return true if sufficient space available (else false) - */ -bool Mille::checkBufferSize(int nLocal, int nGlobal) -{ - if (myBufferPos + nLocal + nGlobal + 2 >= myBufferSize) { - ++(myBufferInt[0]); // increase error count - std::cerr << "Mille::checkBufferSize: Buffer too short (" - << myBufferSize << ")," - << "\n need space for nLocal (" << nLocal<< ")" - << "/nGlobal (" << nGlobal << ") local/global derivatives, " - << myBufferPos + 1 << " already stored!" - << std::endl; - return false; - } else { - return true; - } -} From 47d43dc7135634e86e9c759546492df41ee5d177 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 13 Jan 2017 10:22:27 +0100 Subject: [PATCH 169/297] [alignment] user residual width as errors for millepede input --- Reco/plugins/MillepedeBinaryWriter.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 1569299..0ac3805 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -30,13 +30,18 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "Alignment/MillePedeAlignmentAlgorithm/src/Mille.h" - + +/*************/ +/* Some hard coded numbers: */ //configuration1: double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm - //configuration2: double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm - + +double sigma_res_x[] = {0.2, 0.15, 0.15, 0.15, 0.17, 0.18, 0.21, 0.25}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) +double sigma_res_y[] = {0.21, 0.16, 0.16, 0.16, 0.18, 0.18, 0.21, 0.26}; //width of residuals in y dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) + +/*************/ class MillepedeBinaryWriter : public edm::one::EDAnalyzer { public: @@ -345,7 +350,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+2] = y_predicted; rMeas = x_true - x_predicted; - sigma = 0.334; + sigma = sigma_res_x[layer-1]; mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); @@ -360,7 +365,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+2] = -x_predicted; rMeas = y_true - y_predicted; - sigma = 0.334; + sigma = sigma_res_y[layer-1]; mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); } mille->end(); From 220fcf77aef93c9b83e1d63d898b6a5f109c09dd Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 18 Jan 2017 18:20:47 +0100 Subject: [PATCH 170/297] [position resolution + alignment] reorganise helpers, basic infrastructure and necessary information for Gbl tracks --- Reco/BuildFile.xml | 1 + Reco/interface/Mille.h | 56 ++ Reco/interface/PositionResolutionHelpers.h | 166 +---- Reco/interface/Sensors.h | 115 ++++ Reco/interface/Tracks.h | 89 +++ Reco/plugins/MillepedeBinaryWriter.cc | 29 +- Reco/plugins/Position_Resolution_Analyzer.cc | 22 +- Reco/src/Mille.cc | 208 +++++++ Reco/src/PositionResolutionHelpers.cc | 598 +------------------ Reco/src/Sensors.cc | 410 +++++++++++++ Reco/src/Tracks.cc | 212 +++++++ 11 files changed, 1126 insertions(+), 780 deletions(-) create mode 100644 Reco/interface/Mille.h create mode 100644 Reco/interface/Sensors.h create mode 100644 Reco/interface/Tracks.h create mode 100644 Reco/src/Mille.cc create mode 100644 Reco/src/Sensors.cc create mode 100644 Reco/src/Tracks.cc diff --git a/Reco/BuildFile.xml b/Reco/BuildFile.xml index 2d09ff4..4eac406 100644 --- a/Reco/BuildFile.xml +++ b/Reco/BuildFile.xml @@ -3,6 +3,7 @@ + diff --git a/Reco/interface/Mille.h b/Reco/interface/Mille.h new file mode 100644 index 0000000..19764fb --- /dev/null +++ b/Reco/interface/Mille.h @@ -0,0 +1,56 @@ +#ifndef MILLE_H +#define MILLE_H + +#include + +/** + * \class Mille + * + * Class to write a C binary (cf. below) file of a given name and to fill it + * with information used as input to **pede**. + * Use its member functions \c mille(), \c special(), \c kill() and \c end() + * as you would use the fortran \ref mille.f90 "MILLE" + * and its entry points \c MILLSP, \c KILLE and \c ENDLE. + * + * For debugging purposes constructor flags enable switching to text output and/or + * to write also derivatives and labels which are ==0. + * But note that **pede** will not be able to read text output and has not been tested with + * derivatives/labels ==0. + * + * \author : Gero Flucke + * date : October 2006 + * $Revision: 1.3 $ + * $Date: 2007/04/16 17:47:38 $ + * (last update by $Author: flucke $) + */ + +/// Class to write C binary file. +class Mille +{ + public: + Mille(const char *outFileName, bool asBinary = true, bool writeZero = false); + ~Mille(); + + void mille(int NLC, const float *derLc, int NGL, const float *derGl, + const int *label, float rMeas, float sigma); + void special(int nSpecial, const float *floatings, const int *integers); + void kill(); + void end(); + + private: + void newSet(); + bool checkBufferSize(int nLocal, int nGlobal); + + std::ofstream myOutFile; ///< C-binary for output + bool myAsBinary; ///< if false output as text + bool myWriteZero; ///< if true also write out derivatives/labels ==0 + /// buffer size for ints and floats + enum {myBufferSize = 5000}; ///< buffer size for ints and floats + int myBufferInt[myBufferSize]; ///< to collect labels etc. + float myBufferFloat[myBufferSize]; ///< to collect derivatives etc. + int myBufferPos; ///< position in buffer + bool myHasSpecial; ///< if true, special(..) already called for this record + /// largest label allowed: 2^31 - 1 + enum {myMaxLabel = (0xFFFFFFFF - (1 << 31))}; +}; +#endif diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index e53afd9..078d64d 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -1,5 +1,5 @@ -#ifndef HGCAL_RECO_PARTICLETRACK_H -#define HGCAL_RECO_PARTICLETRACK_H +#ifndef HGCAL_RECO_RESHELPERS_H +#define HGCAL_RECO_RESHELPERS_H #include #include @@ -11,64 +11,6 @@ #include "TGraphErrors.h" #include "TFitResult.h" -#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" -#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" -#include "HGCal/DataFormats/interface/HGCalTBDetId.h" -#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //e.g. to get the cell's dimensions - -#include "FWCore/Utilities/interface/Exception.h" - - -enum ConsiderationMethod { - CONSIDERALL, - CONSIDERSEVEN, - CONSIDERNINETEEN, - CONSIDERCLUSTERSALL, - CONSIDERCLUSTERSSEVEN, - CONSIDERCLUSTERSNINETEEN -}; - - -enum WeightingMethod { - DEFAULTWEIGHTING, - SQUAREDWEIGHTING, - LINEARWEIGHTING, - LOGWEIGHTING_30_10, - LOGWEIGHTING_30_15, - LOGWEIGHTING_40_10, - LOGWEIGHTING_40_15, - LOGWEIGHTING_50_10, - LOGWEIGHTING_50_15, - LOGWEIGHTING_60_10, - LOGWEIGHTING_60_15, - LOGWEIGHTING_70_10, - LOGWEIGHTING_70_15 -}; - -enum TrackFittingMethod { - DEFAULTFITTING, - LINEFITANALYTICAL, - LINEFITTGRAPHERRORS, - POL2TGRAPHERRORS, - POL3TGRAPHERRORS -}; - -enum FitPointWeightingMethod { - NONE, - LINEAR, - SQUARED, - LOGARITHMIC, - EXPONENTIAL -}; - -struct HitData { - double x; double y; - double I; //intensity that is input to the weight calculation - double E; //actual energy of the hit - int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction -}; void parseAlignmentFile(std::map &alignmentParameters, std::string path); @@ -98,106 +40,4 @@ class LineFitter { double evalError(double x); }; - - -class SensorHitMap { - private: - std::pair centralHitPoint; - double centralHitZ; - std::pair centralHitPointError; - double layerLabZ; - double layerZ_X0; - double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; //alignment parameters - int sensorSize; - double CM_threshold; - double ADC_per_MIP; - std::map Hits; //those are all the hits in the layer - std::map> clusterIndexes; - std::vector HitsForPositioning; - HitData* mostSignificantHit; - - //helpers to obtain the x-y coordinate - HGCalTBCellVertices TheCell; - std::pair CellCenterXY; - int CM_cells_count; - double CM_sum; - - double totalWeight; //equivalent to the denominator in the according weighting method - double totalEnergy; - std::map totalClusterEnergy; - - bool filterByCellType(int ID); - void considerNClosest(int N_considered); - void considerClusters(int N_considered); - void poweredWeighting(int exponent); - void logWeighting(double log_a, double log_b); - - public: - SensorHitMap(); - ~SensorHitMap(); - void setLabZ(double z_cm, double z_X0); - void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); - void setADCPerMIP(double ADC_per_MIP); - void setSensorSize(int s); - void setPedestalThreshold(double t); - //reduces the information from the Rechit towards what is necessary for the impact point calculation - void addHit(HGCalTBRecHit Rechit); - void registerClusterHit(HGCalTBDetId hit, int N_considered); - std::pair subtractCM(); //returns the sum of Common mode noise and the number of cells that enter the calculation - void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); - double getTotalEnergy(); - double getTotalClusterEnergy(int N_considered); - double getTotalWeight(); - double getLabZ(); - double getZ_X0(); - double getIntrinsicHitZPosition(); - std::pair getHitPosition(); //returns central hit in layer's own frame - std::pair getLabHitPosition(); //returns central hit in lab frame - std::pair getHitPositionError(); //calculated via RMS - std::pair getCenterOfClosestCell(std::pair X_ref); - - //debug - void printHits(); -}; - - -class ParticleTrack{ - public: - ParticleTrack(); - ~ParticleTrack(); - void addFitPoint(SensorHitMap* sensor); - void weightFitPoints(FitPointWeightingMethod method); - void fitTrack(TrackFittingMethod method); - std::pair calculatePositionXY(double z); - std::pair calculatePositionErrorXY(double z); - double getSumOfEnergies(); - private: - int N_points; //cross check, should be identical to x.size() etc. - //general information, the fit points - std::vector x; - std::vector x_err; - std::vector y; - std::vector y_err; - std::vector z; - std::vector z_err; - std::vector Energies; - TrackFittingMethod lastAppliedMethod; - - //different fit functions - void analyticalStraightLineFit(); - std::pair positionFromAnalyticalStraightLine(double z); - std::pair positionFromAnalyticalStraightLineErrors(double z); - LineFitter* linefit_x; - LineFitter* linefit_y; - - void polFitTGraphErrors(int degree); - std::pair positionFromPolFitTGraphErrors(int degree, double z); - std::pair positionErrorFromPolFitTGraphErrors(int degree, double z); - TF1* ROOTpol_x; - TF1* ROOTpol_y; - TFitResultPtr fit_result_x; - TFitResultPtr fit_result_y; -}; - -double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m); -#endif +#endif \ No newline at end of file diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h new file mode 100644 index 0000000..8e6023c --- /dev/null +++ b/Reco/interface/Sensors.h @@ -0,0 +1,115 @@ +#ifndef HGCAL_RECO_SENSORS_H +#define HGCAL_RECO_SENSORS_H + +#include +#include +#include +#include +#include + +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHit.h" +#include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //e.g. to get the cell's dimensions + + +enum ConsiderationMethod { + CONSIDERALL, + CONSIDERSEVEN, + CONSIDERNINETEEN, + CONSIDERCLUSTERSALL, + CONSIDERCLUSTERSSEVEN, + CONSIDERCLUSTERSNINETEEN +}; + + +enum WeightingMethod { + DEFAULTWEIGHTING, + SQUAREDWEIGHTING, + LINEARWEIGHTING, + LOGWEIGHTING_30_10, + LOGWEIGHTING_30_15, + LOGWEIGHTING_40_10, + LOGWEIGHTING_40_15, + LOGWEIGHTING_50_10, + LOGWEIGHTING_50_15, + LOGWEIGHTING_60_10, + LOGWEIGHTING_60_15, + LOGWEIGHTING_70_10, + LOGWEIGHTING_70_15 +}; + +struct HitData { + double x; double y; + double I; //intensity that is input to the weight calculation + double E; //actual energy of the hit + int ID; //the ID corresponds to the cell ID, it is necessary for the pedestal subtraction +}; + + +class SensorHitMap { + private: + std::pair centralHitPoint; + double centralHitZ; + std::pair centralHitPointError; + double layerLabZ; + double layerX0; + double particleEnergy; //approximated energy of the particle at that layer + double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; //alignment parameters + int sensorSize; + double CM_threshold; + double ADC_per_MIP; + std::map Hits; //those are all the hits in the layer + std::map> clusterIndexes; + std::vector HitsForPositioning; + HitData* mostSignificantHit; + + //helpers to obtain the x-y coordinate + HGCalTBCellVertices TheCell; + std::pair CellCenterXY; + int CM_cells_count; + double CM_sum; + + double totalWeight; //equivalent to the denominator in the according weighting method + double totalEnergy; + std::map totalClusterEnergy; + + bool filterByCellType(int ID); + void considerNClosest(int N_considered); + void considerClusters(int N_considered); + void poweredWeighting(int exponent); + void logWeighting(double log_a, double log_b); + + public: + SensorHitMap(); + ~SensorHitMap(); + void setLabZ(double z_cm, double X0); + void setParticleEnergy(double e); + void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); + void setADCPerMIP(double ADC_per_MIP); + void setSensorSize(int s); + void setPedestalThreshold(double t); + //reduces the information from the Rechit towards what is necessary for the impact point calculation + void addHit(HGCalTBRecHit Rechit); + void registerClusterHit(HGCalTBDetId hit, int N_considered); + std::pair subtractCM(); //returns the sum of Common mode noise and the number of cells that enter the calculation + void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); + double getTotalEnergy(); + double getTotalClusterEnergy(int N_considered); + double getTotalWeight(); + double getLabZ(); + double getX0(); + double getParticleEnergy(); + double getIntrinsicHitZPosition(); + std::pair getHitPosition(); //returns central hit in layer's own frame + std::pair getLabHitPosition(); //returns central hit in lab frame + std::pair getHitPositionError(); //calculated via RMS + std::pair getCenterOfClosestCell(std::pair X_ref); + + //debug + void printHits(); +}; + +#endif diff --git a/Reco/interface/Tracks.h b/Reco/interface/Tracks.h new file mode 100644 index 0000000..c896ec1 --- /dev/null +++ b/Reco/interface/Tracks.h @@ -0,0 +1,89 @@ +#ifndef HGCAL_RECO_TRACK_H +#define HGCAL_RECO_TRACK_H + +#include +#include +#include +#include +#include + +#include "TF1.h" +#include "TGraphErrors.h" +#include "TFitResult.h" + +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" +#include "HGCal/Reco/interface/Sensors.h" +#include "FWCore/Utilities/interface/Exception.h" + +#include "Alignment/ReferenceTrajectories/interface/GblTrajectory.h" +#include "Alignment/ReferenceTrajectories/interface/GblPoint.h" +#include "Alignment/ReferenceTrajectories/interface/MilleBinary.h" + +enum TrackFittingMethod { + DEFAULTFITTING, + LINEFITANALYTICAL, + LINEFITTGRAPHERRORS, + POL2TGRAPHERRORS, + POL3TGRAPHERRORS +}; + +enum FitPointWeightingMethod { + NONE, + LINEAR, + SQUARED, + LOGARITHMIC, + EXPONENTIAL +}; + +// +// class declarations +// + +class ParticleTrack{ + public: + ParticleTrack(); + ~ParticleTrack(); + void addFitPoint(SensorHitMap* sensor); + void weightFitPoints(FitPointWeightingMethod method); + void fitTrack(TrackFittingMethod method); + std::pair calculatePositionXY(double z); + std::pair calculatePositionErrorXY(double z); + double getSumOfEnergies(); + private: + int N_points; //cross check, should be identical to x.size() etc. + //general information, the fit points + std::vector x; + std::vector x_err; + std::vector y; + std::vector y_err; + std::vector z; + std::vector z_err; + std::vector particleEnergy; //approximated electron energy left over at the individual layers + std::vector preAbsorber; //absorber thickness in radiation lengths deposited directly in front of the sensor + std::vector Energies; //sum of energies deposited in the layers that are added to the track + TrackFittingMethod lastAppliedMethod; + + //different fit functions + void gblTrackFit(); + std::pair positionFromGblTrackFit(double z); + std::pair positionFromGblTrackFitErrors(double z); + gbl::GblTrajectory* gblTrajectory; + + void analyticalStraightLineFit(); + std::pair positionFromAnalyticalStraightLine(double z); + std::pair positionFromAnalyticalStraightLineErrors(double z); + LineFitter* linefit_x; + LineFitter* linefit_y; + + void polFitTGraphErrors(int degree); + std::pair positionFromPolFitTGraphErrors(int degree, double z); + std::pair positionErrorFromPolFitTGraphErrors(int degree, double z); + TF1* ROOTpol_x; + TF1* ROOTpol_y; + TFitResultPtr fit_result_x; + TFitResultPtr fit_result_y; +}; + +double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m); + +#endif \ No newline at end of file diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 0ac3805..b09f9e2 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -24,19 +24,25 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition -#include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -#include "Alignment/MillePedeAlignmentAlgorithm/src/Mille.h" +//#include "Alignment/MillePedeAlignmentAlgorithm/src/Mille.h" +#include "HGCal/Reco/interface/Mille.h" +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" +#include "HGCal/Reco/interface/Tracks.h" +#include "HGCal/Reco/interface/Sensors.h" /*************/ /* Some hard coded numbers: */ + //configuration1: -double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm +double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm +double _config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer //configuration2: -double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm +double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm +double _config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer double sigma_res_x[] = {0.2, 0.15, 0.15, 0.15, 0.17, 0.18, 0.21, 0.25}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) double sigma_res_y[] = {0.21, 0.16, 0.16, 0.16, 0.18, 0.18, 0.21, 0.26}; //width of residuals in y dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) @@ -69,6 +75,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer Layer_Z_Positions; + std::vector Layer_Z_X0s; std::vector ADC_per_MIP; int LayersConfig; int nLayers; @@ -85,6 +92,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer("layers_config"); if (LayersConfig == 1) { Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(_config1X0Depths, _config1X0Depths + sizeof(_config1X0Depths)/sizeof(double)); } if (LayersConfig == 2) { Layer_Z_Positions = std::vector(_config2Positions, _config2Positions + sizeof(_config2Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(_config2X0Depths, _config2X0Depths + sizeof(_config2X0Depths)/sizeof(double)); } else { Layer_Z_Positions = std::vector(_config1Positions, _config1Positions + sizeof(_config1Positions)/sizeof(double)); + Layer_Z_X0s = std::vector(_config1X0Depths, _config1X0Depths + sizeof(_config1X0Depths)/sizeof(double)); } pedestalThreshold = iConfig.getParameter("pedestalThreshold"); @@ -225,7 +236,8 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet event.getByToken(RunDataToken, rd); run = rd->run; - + energy = rd->energy; + if (run == -1) { std::cout<<"Run is not in configuration file - is ignored."<setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setLabZ(Layer_Z_Positions[layer], 0.); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths + Sensors[layer]->setParticleEnergy(energy); + Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); @@ -347,7 +360,6 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+0] = 1.; derGl[(layer-1)*NGLperLayer+1] = 0.; - derGl[(layer-1)*NGLperLayer+2] = y_predicted; rMeas = x_true - x_predicted; sigma = sigma_res_x[layer-1]; @@ -361,8 +373,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derLc[3] = 1.; derGl[(layer-1)*NGLperLayer+0] = 0.; - derGl[(layer-1)*NGLperLayer+1] = 1.; - derGl[(layer-1)*NGLperLayer+2] = -x_predicted; + derGl[(layer-1)*NGLperLayer+1] = 1.; rMeas = y_true - y_predicted; sigma = sigma_res_y[layer-1]; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index c68b05b..11ee165 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -28,22 +28,23 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition -#include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "TStyle.h" +#include "HGCal/Reco/interface/PositionResolutionHelpers.h" +#include "HGCal/Reco/interface/Tracks.h" +#include "HGCal/Reco/interface/Sensors.h" + #include "TFile.h" #include "TTree.h" //configuration1: -double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm +double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm double config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer - //configuration2: -double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm +double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm double config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { @@ -89,7 +90,6 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer successfulFitCounter, failedFitCounter; - //helper variables that are set within the event loop, i.e. are defined per event std::map Sensors; std::map Tracks; @@ -106,9 +106,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerSetOptStat(); - +Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { // initialization usesResource("TFileService"); HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); @@ -296,9 +294,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(); Sensors[layer]->setPedestalThreshold(pedestalThreshold); + Sensors[layer]->setParticleEnergy(energy); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 21], 0.0, 0.0, + Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); @@ -369,9 +368,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position + layerZ_X0 = 0; for (layer=1; layer<=nLayers; layer++) { layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); - layerZ_X0 = Sensors[layer]->getZ_X0(); + layerZ_X0 += Sensors[layer]->getX0(); std::pair position_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm); x_predicted = position_predicted.first; diff --git a/Reco/src/Mille.cc b/Reco/src/Mille.cc new file mode 100644 index 0000000..16275f8 --- /dev/null +++ b/Reco/src/Mille.cc @@ -0,0 +1,208 @@ +/** + * \file + * Create Millepede-II C-binary record. + * + * \author : Gero Flucke + * date : October 2006 + * $Revision: 1.3 $ + * $Date: 2007/04/16 17:47:38 $ + * (last update by $Author: flucke $) + */ + +#include "HGCal/Reco/interface/Mille.h" + +#include +#include + +//___________________________________________________________________________ + +/// Opens outFileName (by default as binary file). +/** + * \param[in] outFileName file name + * \param[in] asBinary flag for binary + * \param[in] writeZero flag for keeping of zeros + */ +Mille::Mille(const char *outFileName, bool asBinary, bool writeZero) : + myOutFile(outFileName, (asBinary ? (std::ios::binary | std::ios::out) : std::ios::out)), + myAsBinary(asBinary), myWriteZero(writeZero), myBufferPos(-1), myHasSpecial(false) +{ + // Instead myBufferPos(-1), myHasSpecial(false) and the following two lines + // we could call newSet() and kill()... + myBufferInt[0] = 0; + myBufferFloat[0] = 0.; + + if (!myOutFile.is_open()) { + std::cerr << "Mille::Mille: Could not open " << outFileName + << " as output file." << std::endl; + } +} + +//___________________________________________________________________________ +/// Closes file. +Mille::~Mille() +{ + myOutFile.close(); +} + +//___________________________________________________________________________ +/// Add measurement to buffer. +/** + * \param[in] NLC number of local derivatives + * \param[in] derLc local derivatives + * \param[in] NGL number of global derivatives + * \param[in] derGl global derivatives + * \param[in] label global labels + * \param[in] rMeas measurement (residuum) + * \param[in] sigma error + */ +void Mille::mille(int NLC, const float *derLc, + int NGL, const float *derGl, const int *label, + float rMeas, float sigma) +{ + if (sigma <= 0.) return; + if (myBufferPos == -1) this->newSet(); // start, e.g. new track + if (!this->checkBufferSize(NLC, NGL)) return; + + // first store measurement + ++myBufferPos; + myBufferFloat[myBufferPos] = rMeas; + myBufferInt [myBufferPos] = 0; + + // store local derivatives and local 'lables' 1,...,NLC + for (int i = 0; i < NLC; ++i) { + if (derLc[i] || myWriteZero) { // by default store only non-zero derivatives + ++myBufferPos; + myBufferFloat[myBufferPos] = derLc[i]; // local derivatives + myBufferInt [myBufferPos] = i+1; // index of local parameter + } + } + + // store uncertainty of measurement in between locals and globals + ++myBufferPos; + myBufferFloat[myBufferPos] = sigma; + myBufferInt [myBufferPos] = 0; + + // store global derivatives and their labels + for (int i = 0; i < NGL; ++i) { + if (derGl[i] || myWriteZero) { // by default store only non-zero derivatives + if ((label[i] > 0 || myWriteZero) && label[i] <= myMaxLabel) { // and for valid labels + ++myBufferPos; + myBufferFloat[myBufferPos] = derGl[i]; // global derivatives + myBufferInt [myBufferPos] = label[i]; // index of global parameter + } else { + std::cerr << "Mille::mille: Invalid label " << label[i] + << " <= 0 or > " << myMaxLabel << std::endl; + } + } + } +} + +//___________________________________________________________________________ +/// Add special data to buffer. +/** + * \param[in] nSpecial number of floats/ints + * \param[in] floatings floats + * \param[in] integers ints + */ +void Mille::special(int nSpecial, const float *floatings, const int *integers) +{ + if (nSpecial == 0) return; + if (myBufferPos == -1) this->newSet(); // start, e.g. new track + if (myHasSpecial) { + std::cerr << "Mille::special: Special values already stored for this record." + << std::endl; + return; + } + if (!this->checkBufferSize(nSpecial, 0)) return; + myHasSpecial = true; // after newSet() (Note: MILLSP sets to buffer position...) + + // myBufferFloat[.] | myBufferInt[.] + // ------------------------------------ + // 0.0 | 0 + // -float(nSpecial) | 0 + // The above indicates special data, following are nSpecial floating and nSpecial integer data. + + ++myBufferPos; // zero pair + myBufferFloat[myBufferPos] = 0.; + myBufferInt [myBufferPos] = 0; + + ++myBufferPos; // nSpecial and zero + myBufferFloat[myBufferPos] = -nSpecial; // automatic conversion to float + myBufferInt [myBufferPos] = 0; + + for (int i = 0; i < nSpecial; ++i) { + ++myBufferPos; + myBufferFloat[myBufferPos] = floatings[i]; + myBufferInt [myBufferPos] = integers[i]; + } +} + +//___________________________________________________________________________ +/// Reset buffers, i.e. kill derivatives accumulated for current set. +void Mille::kill() +{ + myBufferPos = -1; +} + +//___________________________________________________________________________ +/// Write buffer (set of derivatives with same local parameters) to file. +void Mille::end() +{ + if (myBufferPos > 0) { // only if anything stored... + const int numWordsToWrite = (myBufferPos + 1)*2; + + if (myAsBinary) { + myOutFile.write(reinterpret_cast(&numWordsToWrite), + sizeof(numWordsToWrite)); + myOutFile.write(reinterpret_cast(myBufferFloat), + (myBufferPos+1) * sizeof(myBufferFloat[0])); + myOutFile.write(reinterpret_cast(myBufferInt), + (myBufferPos+1) * sizeof(myBufferInt[0])); + } else { + myOutFile << numWordsToWrite << "\n"; + for (int i = 0; i < myBufferPos+1; ++i) { + myOutFile << myBufferFloat[i] << " "; + } + myOutFile << "\n"; + + for (int i = 0; i < myBufferPos+1; ++i) { + myOutFile << myBufferInt[i] << " "; + } + myOutFile << "\n"; + } + } + myBufferPos = -1; // reset buffer for next set of derivatives +} + +//___________________________________________________________________________ +/// Initialize for new set of locals, e.g. new track. +void Mille::newSet() +{ + myBufferPos = 0; + myHasSpecial = false; + myBufferFloat[0] = 0.0; + myBufferInt [0] = 0; // position 0 used as error counter +} + +//___________________________________________________________________________ +/// Enough space for next nLocal + nGlobal derivatives incl. measurement? +/** + * \param[in] nLocal number of local derivatives + * \param[in] nGlobal number of global derivatives + * \return true if sufficient space available (else false) + */ +bool Mille::checkBufferSize(int nLocal, int nGlobal) +{ + if (myBufferPos + nLocal + nGlobal + 2 >= myBufferSize) { + ++(myBufferInt[0]); // increase error count + std::cerr << "Mille::checkBufferSize: Buffer too short (" + << myBufferSize << ")," + << "\n need space for nLocal (" << nLocal<< ")" + << "/nGlobal (" << nGlobal << ") local/global derivatives, " + << myBufferPos + 1 << " already stored!" + << std::endl; + return false; + } else { + return true; + } +} diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 7069da4..b246371 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -101,600 +101,4 @@ double LineFitter::evalError(double x) { if (!converged()) return 0; else return sqrt(pow(this->getBError(), 2) + pow(x*this->getMError(),2) + 2*fabs(x)*this->getMBCovariance()); -}; - - -//**** Sensor Hit Maps ****// - -//public functions -SensorHitMap::SensorHitMap(){ - mostSignificantHit = NULL; //will point to the most significant hit - - centralHitPoint = std::make_pair(0., 0.); - centralHitZ = 0; - centralHitPointError = std::make_pair(sqrt(12.), sqrt(12.)); - CM_threshold = 2.; - layerLabZ = 0; - layerZ_X0 = 0; - ADC_per_MIP = 1.; - sensorSize = 128; - - d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; - - CM_cells_count = 0; - CM_sum = 0.; - - totalWeight = 1.; - totalEnergy = 0.; -} - -SensorHitMap::~SensorHitMap(){ - for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - delete (*hit).second; - } - Hits.clear(); -} - -void SensorHitMap::setSensorSize(int s) { - sensorSize = s; -} - -void SensorHitMap::setLabZ(double z_cm, double z_X0) { - this->layerLabZ = z_cm; - this->layerZ_X0 = z_X0; -} - -void SensorHitMap::setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0) { - this->d_alpha = d_alpha; - this->d_beta = d_beta; - this->d_gamma = d_gamma; - this->d_x0 = d_x0; - this->d_y0 = d_y0; - this->d_z0 = d_z0; -} - -void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { - this->ADC_per_MIP = ADC_per_MIP; -} - -void SensorHitMap::setPedestalThreshold(double t) { - this->CM_threshold = t; -} - -double SensorHitMap::getLabZ() { - return this->layerLabZ + this->d_z0; -} - -double SensorHitMap::getIntrinsicHitZPosition() { //this value is always zero if rotational angles are all zero - return this->centralHitZ; -} - -double SensorHitMap::getZ_X0() { - return this->layerZ_X0; -} -//reduces the information from the Rechit towards what is necessary for the impact point calculation -//here all hits independent from the cellType are included -void SensorHitMap::addHit(HGCalTBRecHit Rechit) { - int uniqueID = (Rechit.id()).rawId(); - - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); - double iux = CellCenterXY.first; - double ivy = CellCenterXY.second; - int ID = (Rechit.id()).cellType(); - - if (filterByCellType(ID)) return; //returns false so far - - double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also energy deposits in MIP units - - Hits[uniqueID] = new HitData; - Hits[uniqueID]->ID = ID; - Hits[uniqueID]->x = iux; - Hits[uniqueID]->y = ivy; - Hits[uniqueID]->I = energy; - Hits[uniqueID]->E = energy; - totalEnergy += energy; - - if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { - mostSignificantHit = Hits[uniqueID]; - } - - //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 2. if not set in the setPedestalThreshold) - if (energy <= CM_threshold) { //also analogous to the implementation in the LayerSumAnalyzer - CM_cells_count++; - CM_sum += energy; - } -} - -void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //requires that all hits have been added to the layer - int uniqueID = hit.rawId(); - - if(Hits.find(uniqueID) == Hits.end()) return; //if cluster hit does not represent a valid cell type, do not add it - - if (totalClusterEnergy.find(N_considered) == totalClusterEnergy.end()) { - totalClusterEnergy[N_considered] = 0; - } - totalClusterEnergy[N_considered] += Hits[uniqueID]->E; - - clusterIndexes[N_considered].push_back(uniqueID); -} - -std::pair SensorHitMap::subtractCM() { - totalEnergy = 0.; - double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; - - for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second->ID)) continue; - // we want: - all cells that were input to the cm (common mode) calculation get weight 0 - // - all the others are corrected by the cm - if ((*hit).second->E > CM_threshold) { - (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); - } else { - (*hit).second->I = 0.;//std::max((*hit).second->I - cm_subtraction, 0.); //everything below the given threshold is set to zero - } - totalEnergy += (*hit).second->I; - } - - return std::make_pair(CM_cells_count, CM_sum); -} - -void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod) { - switch(considerationMethod){ - case CONSIDERALL: - SensorHitMap::considerNClosest(-1); - break; - case CONSIDERSEVEN: - //analogous to the LayerSumAnalyzer (25.11.16) - SensorHitMap::considerNClosest(7); - break; - case CONSIDERNINETEEN: - //analogous to the LayerSumAnalyzer (25.11.16) - SensorHitMap::considerNClosest(19); - break; - case CONSIDERCLUSTERSALL: - SensorHitMap::considerClusters(-1); - break; - case CONSIDERCLUSTERSSEVEN: - SensorHitMap::considerClusters(7); - break; - case CONSIDERCLUSTERSNINETEEN: - SensorHitMap::considerClusters(19); - break; - default: - SensorHitMap::considerNClosest(-1.); - break; - } - - switch(weightingMethod){ - case SQUAREDWEIGHTING: - SensorHitMap::poweredWeighting(2); - break; - case LINEARWEIGHTING: - SensorHitMap::poweredWeighting(1); - break; - case LOGWEIGHTING_30_10: - SensorHitMap::logWeighting(3.0, 1.0); - break; - case LOGWEIGHTING_30_15: - SensorHitMap::logWeighting(3.0, 1.5); - break; - case LOGWEIGHTING_40_10: - SensorHitMap::logWeighting(4.0, 1.0); - break; - case LOGWEIGHTING_40_15: - SensorHitMap::logWeighting(4.0, 1.5); - break; - case LOGWEIGHTING_50_10: - SensorHitMap::logWeighting(5.0, 1.0); - break; - case LOGWEIGHTING_50_15: - SensorHitMap::logWeighting(5.0, 1.5); - break; - case LOGWEIGHTING_60_10: - SensorHitMap::logWeighting(6.0, 1.0); - break; - case LOGWEIGHTING_60_15: - SensorHitMap::logWeighting(6.0, 1.5); - break; - case LOGWEIGHTING_70_10: - SensorHitMap::logWeighting(7.0, 1.0); - break; - case LOGWEIGHTING_70_15: - SensorHitMap::logWeighting(7.0, 1.5); - break; - //case NEWMETHOD: - //SensorHitMap::newWeightingFunction() - //break; - default: - SensorHitMap::poweredWeighting(2); - } - - //set the displacement in z w.r.t. the rotational angles only - centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; -} - -std::pair SensorHitMap::getHitPosition() { - return centralHitPoint; -} - -std::pair SensorHitMap::getLabHitPosition() { - double x_lab = centralHitPoint.first + d_alpha * centralHitPoint.second + d_x0; - double y_lab = - d_alpha * centralHitPoint.first + centralHitPoint.second + d_y0; - - return std::make_pair(x_lab, y_lab); -} - -std::pair SensorHitMap::getHitPositionError() { - return centralHitPointError; -} - -std::pair SensorHitMap::getCenterOfClosestCell(std::pair X_ref) { - std::vector> to_sort; - for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second->ID)) continue; - double current_radius = sqrt(pow((*hit).second->x - X_ref.first,2) + pow((*hit).second->y - X_ref.second,2)); - to_sort.push_back(std::make_pair(current_radius, (*hit).second)); - } - //sort the hits by their radial distance - std::sort(to_sort.begin(), to_sort.end(), - [](const std::pair& a, const std::pair b){ - return a.first < b.first; - } - ); - return std::make_pair(to_sort[0].second->x, to_sort[0].second->y); -} - -double SensorHitMap::getTotalEnergy() { - return this->totalEnergy; -} - -double SensorHitMap::getTotalClusterEnergy(int N_considered) { - return this->totalClusterEnergy[N_considered]; -} - -double SensorHitMap::getTotalWeight() { - return this->totalWeight; -}; - - -//private functions - -//only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) -//TODO -bool SensorHitMap::filterByCellType(int ID) { - /* - ID = 0 : full cell, - ID = 1 : calibration pad, - ID = 2 : half cell, - ID = 3 : mouse bite cell, - ID = 4 : outer calibration pad cell, - ID = 5 : merged cell - */ - - if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation - return true; - - return false; -} - -void SensorHitMap::considerNClosest(int N_considered) { - //better: ranking by radial distance and then take the closest ones - HitsForPositioning.clear(); - if (N_considered < 0) { - for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second->ID)) continue; - HitsForPositioning.push_back((*hit).second); - } - return; - } - - //calculate radial distance for all pairs to the most significant hit - std::vector> to_sort; - for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ - if (filterByCellType((*hit).second->ID)) continue; - double current_radius = sqrt(pow((*hit).second->x - mostSignificantHit->x,2) + pow((*hit).second->y - mostSignificantHit->y,2)); - to_sort.push_back(std::make_pair(current_radius, (*hit).second)); - } - - //sort the hits by their radial distance - std::sort(to_sort.begin(), to_sort.end(), - [](const std::pair& a, const std::pair b){ - return a.first < b.first; - } - ); - - double maxDist = 0; - if (N_considered == 7) maxDist = (0.5 + sqrt(3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; - else if (N_considered == 7) maxDist = (0.5 + sqrt(3) * 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; - - int considerCounter = 0; - for (std::vector>::iterator sorted_hit = to_sort.begin(); - sorted_hit != to_sort.end(); sorted_hit++) { - if ((*sorted_hit).first > maxDist && considerCounter >= N_considered){ //fill at least Nconsider but also mind radial distance - break; - } - considerCounter++; - HitsForPositioning.push_back((*sorted_hit).second); - } - - //additional cleanup to be safe - to_sort.clear(); -} - -void SensorHitMap::considerClusters(int N_considered) { - for (std::vector::iterator clusterIndex = clusterIndexes[N_considered].begin(); - clusterIndex != clusterIndexes[N_considered].end(); clusterIndex++){ - HitsForPositioning.push_back(Hits[*clusterIndex]); - } -} - -void SensorHitMap::poweredWeighting(int exponent) { - double numerator_x, numerator_y; - double w; - - numerator_x = numerator_y = totalWeight = 0; - for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ - w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum - totalWeight += w; - numerator_x += w*(*hit)->x; - numerator_y += w*(*hit)->y; - } - - //prevent divisions through zero - if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired - return; //defaults are preserved - } - - centralHitPoint.first = numerator_x/totalWeight; - centralHitPoint.second = numerator_y/totalWeight; - - //calculate the RMs - numerator_x = numerator_y = 0.0; - for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ - w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; - numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); - numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); - } - centralHitPointError.first = sqrt(numerator_x/totalWeight); - centralHitPointError.second = sqrt(numerator_y/totalWeight); -}; - -void SensorHitMap::logWeighting(double log_a, double log_b) { - double I_max = 0; //determine the 'intensity' maximum first - double I_i = 0; - for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ - I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; - I_max += I_i; - } - - - double numerator_x, numerator_y; - double w; - numerator_x = numerator_y = totalWeight = 0; - - int counter = 0; - for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ - counter++; - I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; - if (I_i == 0.) continue; - w = std::max(log_a + log_b*log(I_i/I_max), 0.0); - totalWeight += w; - numerator_x += w*(*hit)->x; - numerator_y += w*(*hit)->y; - } - - //prevent divisions through zero - if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired - return; //defaults are preserved - } - - centralHitPoint.first = numerator_x/totalWeight; - centralHitPoint.second = numerator_y/totalWeight; - - //calculate the RMs - numerator_x = numerator_y = 0.0; - for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ - I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; - if (I_i == 0.) continue; - w = std::max(log_a + log_b*log(I_i/I_max), 0.0); - numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); - numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); - } - centralHitPointError.first = sqrt(numerator_x/totalWeight); - centralHitPointError.second = sqrt(numerator_y/totalWeight); -}; - - -//**** Particle Tracks ****// - -//public functions -ParticleTrack::ParticleTrack(){ - lastAppliedMethod = DEFAULTFITTING; - ROOTpol_x = ROOTpol_y = NULL; - linefit_x = linefit_y = NULL; - - N_points = 0; -}; - -ParticleTrack::~ParticleTrack(){ - delete ROOTpol_x; - delete ROOTpol_y; - delete linefit_x; - delete linefit_y; - x.clear(); x_err.clear(); y.clear(); y_err.clear(); z.clear(); z_err.clear(); -}; - -void ParticleTrack::addFitPoint(SensorHitMap* sensor){ - N_points++; - x.push_back(sensor->getLabHitPosition().first); - x_err.push_back(sensor->getHitPositionError().first); - y.push_back(sensor->getLabHitPosition().second); - y_err.push_back(sensor->getHitPositionError().second); - z.push_back(sensor->getLabZ()+sensor->getIntrinsicHitZPosition()); - z_err.push_back(0.0); - Energies.push_back(sensor->getTotalEnergy()); -}; - -void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { - //calculate the sum of all Energies first - double sum_Energies = 0.0; - for (int i=0; i ParticleTrack::calculatePositionXY(double z) { - switch(lastAppliedMethod) { - case LINEFITANALYTICAL: - return positionFromAnalyticalStraightLine(z); - case LINEFITTGRAPHERRORS: - return positionFromPolFitTGraphErrors(1, z); - case POL2TGRAPHERRORS: - return positionFromPolFitTGraphErrors(2, z); - case POL3TGRAPHERRORS: - return positionFromPolFitTGraphErrors(3, z); - default: - return std::make_pair(0.,0.); - } -} -std::pair ParticleTrack::calculatePositionErrorXY(double z) { - switch(lastAppliedMethod) { - case LINEFITANALYTICAL: - return positionFromAnalyticalStraightLineErrors(z); - case LINEFITTGRAPHERRORS: - return positionErrorFromPolFitTGraphErrors(1, z); - case POL2TGRAPHERRORS: - return positionErrorFromPolFitTGraphErrors(2, z); - case POL3TGRAPHERRORS: - return positionErrorFromPolFitTGraphErrors(3, z); - default: - return std::make_pair(0.,0.); - } -} - -double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) - double sum_Energies = 0.0; - for (int i=0; ifit(); - linefit_y->fit(); - - polFitTGraphErrors(1); -}; - -std::pair ParticleTrack::positionFromAnalyticalStraightLine(double z) { - return std::make_pair(linefit_x->eval(z), linefit_y->eval(z)); -}; -std::pair ParticleTrack::positionFromAnalyticalStraightLineErrors(double z) { - return std::make_pair(linefit_x->evalError(z), linefit_y->evalError(z)); -}; - - - -void ParticleTrack::polFitTGraphErrors(int degree){ - if (ROOTpol_x != NULL) - delete ROOTpol_x; - if (ROOTpol_y != NULL) - delete ROOTpol_y; - - ROOTpol_x = new TF1("ROOTpol_x", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - ROOTpol_y = new TF1("ROOTpol_y", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); - - TGraphErrors* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros - TGraphErrors* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); - - fit_result_x = tmp_graph_x->Fit(ROOTpol_x, "QFS"); //for some ROOT versions, the option 'S' is essential to retrieve the fit results object - fit_result_y = tmp_graph_y->Fit(ROOTpol_y, "QFS"); - - delete tmp_graph_x; - delete tmp_graph_y; -}; - -std::pair ParticleTrack::positionFromPolFitTGraphErrors(int degree, double z) { - return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); -} - -std::pair ParticleTrack::positionErrorFromPolFitTGraphErrors(int degree, double z) { - double err_x = 0.; double err_y = 0.; - for (int i=0; i<=degree; i++){ - err_x += pow( ROOTpol_x->GetParError(i) * pow(z, i) ,2); - err_y += pow( ROOTpol_y->GetParError(i) * pow(z, i) ,2); - - for (int j=i+1; j<=degree; j++) { - err_x += 2*fit_result_x->Correlation(i, j) * ROOTpol_x->GetParError(i) * ROOTpol_x->GetParError(j) * fabs(pow(z, i+j)); - err_y += 2*fit_result_y->Correlation(i, j) * ROOTpol_y->GetParError(i) * ROOTpol_y->GetParError(j) * fabs(pow(z, i+j)); - } - } - return std::make_pair(sqrt(err_x), sqrt(err_y)); -} - - -double weightToFitPointWeight(double e, double sum_e, FitPointWeightingMethod m) { - switch(m) { - case NONE: - return 1.0; - case LINEAR: - return 1.0/(0.01+e/sum_e); - case SQUARED: - return 1.0/(0.01+pow(e/sum_e,2)); - case LOGARITHMIC: - return 1.0/(0.01+log(1.0+e/sum_e)); - case EXPONENTIAL: - return exp(-e/sum_e); - default: - return 1.0; - } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc new file mode 100644 index 0000000..599ff98 --- /dev/null +++ b/Reco/src/Sensors.cc @@ -0,0 +1,410 @@ +#include "HGCal/Reco/interface/Sensors.h" + + +//**** Sensor Hit Maps ****// + +//public functions +SensorHitMap::SensorHitMap(){ + mostSignificantHit = NULL; //will point to the most significant hit + + centralHitPoint = std::make_pair(0., 0.); + centralHitZ = 0; + centralHitPointError = std::make_pair(sqrt(12.), sqrt(12.)); + CM_threshold = 2.; + layerLabZ = 0; + layerX0 = 0; + particleEnergy = 0; + ADC_per_MIP = 1.; + sensorSize = 128; + + d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; + + CM_cells_count = 0; + CM_sum = 0.; + + totalWeight = 1.; + totalEnergy = 0.; +} + +SensorHitMap::~SensorHitMap(){ + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + delete (*hit).second; + } + Hits.clear(); +} + +void SensorHitMap::setSensorSize(int s) { + sensorSize = s; +} + +void SensorHitMap::setLabZ(double z_cm, double X0) { + this->layerLabZ = z_cm; + this->layerX0 = X0; +} + +void SensorHitMap::setParticleEnergy(double e) { + this->particleEnergy = e; +} + +void SensorHitMap::setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0) { + this->d_alpha = d_alpha; + this->d_beta = d_beta; + this->d_gamma = d_gamma; + this->d_x0 = d_x0; + this->d_y0 = d_y0; + this->d_z0 = d_z0; +} + +void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { + this->ADC_per_MIP = ADC_per_MIP; +} + +void SensorHitMap::setPedestalThreshold(double t) { + this->CM_threshold = t; +} + +double SensorHitMap::getLabZ() { + return this->layerLabZ + this->d_z0; +} + +double SensorHitMap::getParticleEnergy() { + return this->particleEnergy; +} + +double SensorHitMap::getIntrinsicHitZPosition() { //this value is always zero if rotational angles are all zero + return this->centralHitZ; +} + +double SensorHitMap::getX0() { + return this->layerX0; +} +//reduces the information from the Rechit towards what is necessary for the impact point calculation +//here all hits independent from the cellType are included +void SensorHitMap::addHit(HGCalTBRecHit Rechit) { + int uniqueID = (Rechit.id()).rawId(); + + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); + double iux = CellCenterXY.first; + double ivy = CellCenterXY.second; + int ID = (Rechit.id()).cellType(); + + if (filterByCellType(ID)) return; //returns false so far + + double energy = Rechit.energy() / ADC_per_MIP; //the LayerSumAnalyzer also energy deposits in MIP units + + Hits[uniqueID] = new HitData; + Hits[uniqueID]->ID = ID; + Hits[uniqueID]->x = iux; + Hits[uniqueID]->y = ivy; + Hits[uniqueID]->I = energy; + Hits[uniqueID]->E = energy; + totalEnergy += energy; + + if (mostSignificantHit==NULL || energy > mostSignificantHit->E) { + mostSignificantHit = Hits[uniqueID]; + } + + //analogous to RecHitPlotter_HighGain_New, only add to pedestals if energyHigh exceeds a threshold (default is 2. if not set in the setPedestalThreshold) + if (energy <= CM_threshold) { //also analogous to the implementation in the LayerSumAnalyzer + CM_cells_count++; + CM_sum += energy; + } +} + +void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //requires that all hits have been added to the layer + int uniqueID = hit.rawId(); + + if(Hits.find(uniqueID) == Hits.end()) return; //if cluster hit does not represent a valid cell type, do not add it + + if (totalClusterEnergy.find(N_considered) == totalClusterEnergy.end()) { + totalClusterEnergy[N_considered] = 0; + } + totalClusterEnergy[N_considered] += Hits[uniqueID]->E; + + clusterIndexes[N_considered].push_back(uniqueID); +} + +std::pair SensorHitMap::subtractCM() { + totalEnergy = 0.; + double cm_subtraction = CM_cells_count > 0. ? CM_sum/CM_cells_count : 0.; + + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second->ID)) continue; + // we want: - all cells that were input to the cm (common mode) calculation get weight 0 + // - all the others are corrected by the cm + if ((*hit).second->E > CM_threshold) { + (*hit).second->I = std::max((*hit).second->I - cm_subtraction, 0.); + } else { + (*hit).second->I = 0.;//std::max((*hit).second->I - cm_subtraction, 0.); //everything below the given threshold is set to zero + } + totalEnergy += (*hit).second->I; + } + + return std::make_pair(CM_cells_count, CM_sum); +} + +void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod) { + switch(considerationMethod){ + case CONSIDERALL: + SensorHitMap::considerNClosest(-1); + break; + case CONSIDERSEVEN: + //analogous to the LayerSumAnalyzer (25.11.16) + SensorHitMap::considerNClosest(7); + break; + case CONSIDERNINETEEN: + //analogous to the LayerSumAnalyzer (25.11.16) + SensorHitMap::considerNClosest(19); + break; + case CONSIDERCLUSTERSALL: + SensorHitMap::considerClusters(-1); + break; + case CONSIDERCLUSTERSSEVEN: + SensorHitMap::considerClusters(7); + break; + case CONSIDERCLUSTERSNINETEEN: + SensorHitMap::considerClusters(19); + break; + default: + SensorHitMap::considerNClosest(-1.); + break; + } + + switch(weightingMethod){ + case SQUAREDWEIGHTING: + SensorHitMap::poweredWeighting(2); + break; + case LINEARWEIGHTING: + SensorHitMap::poweredWeighting(1); + break; + case LOGWEIGHTING_30_10: + SensorHitMap::logWeighting(3.0, 1.0); + break; + case LOGWEIGHTING_30_15: + SensorHitMap::logWeighting(3.0, 1.5); + break; + case LOGWEIGHTING_40_10: + SensorHitMap::logWeighting(4.0, 1.0); + break; + case LOGWEIGHTING_40_15: + SensorHitMap::logWeighting(4.0, 1.5); + break; + case LOGWEIGHTING_50_10: + SensorHitMap::logWeighting(5.0, 1.0); + break; + case LOGWEIGHTING_50_15: + SensorHitMap::logWeighting(5.0, 1.5); + break; + case LOGWEIGHTING_60_10: + SensorHitMap::logWeighting(6.0, 1.0); + break; + case LOGWEIGHTING_60_15: + SensorHitMap::logWeighting(6.0, 1.5); + break; + case LOGWEIGHTING_70_10: + SensorHitMap::logWeighting(7.0, 1.0); + break; + case LOGWEIGHTING_70_15: + SensorHitMap::logWeighting(7.0, 1.5); + break; + //case NEWMETHOD: + //SensorHitMap::newWeightingFunction() + //break; + default: + SensorHitMap::poweredWeighting(2); + } + + //set the displacement in z w.r.t. the rotational angles only + centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; +} + +std::pair SensorHitMap::getHitPosition() { + return centralHitPoint; +} + +std::pair SensorHitMap::getLabHitPosition() { + double x_lab = centralHitPoint.first - d_alpha * centralHitPoint.second - d_x0; + double y_lab = + d_alpha * centralHitPoint.first + centralHitPoint.second - d_y0; + + return std::make_pair(x_lab, y_lab); +} + +std::pair SensorHitMap::getHitPositionError() { + return centralHitPointError; +} + +std::pair SensorHitMap::getCenterOfClosestCell(std::pair X_ref) { + std::vector> to_sort; + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second->ID)) continue; + double current_radius = sqrt(pow((*hit).second->x - X_ref.first,2) + pow((*hit).second->y - X_ref.second,2)); + to_sort.push_back(std::make_pair(current_radius, (*hit).second)); + } + //sort the hits by their radial distance + std::sort(to_sort.begin(), to_sort.end(), + [](const std::pair& a, const std::pair b){ + return a.first < b.first; + } + ); + return std::make_pair(to_sort[0].second->x, to_sort[0].second->y); +} + +double SensorHitMap::getTotalEnergy() { + return this->totalEnergy; +} + +double SensorHitMap::getTotalClusterEnergy(int N_considered) { + return this->totalClusterEnergy[N_considered]; +} + +double SensorHitMap::getTotalWeight() { + return this->totalWeight; +}; + + +//private functions + +//only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) +//TODO +bool SensorHitMap::filterByCellType(int ID) { + /* + ID = 0 : full cell, + ID = 1 : calibration pad, + ID = 2 : half cell, + ID = 3 : mouse bite cell, + ID = 4 : outer calibration pad cell, + ID = 5 : merged cell + */ + + if (ID!=0 ) //we only want to consider the main cells in the middle for first estimation + return true; + + return false; +} + +void SensorHitMap::considerNClosest(int N_considered) { + //better: ranking by radial distance and then take the closest ones + HitsForPositioning.clear(); + if (N_considered < 0) { + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second->ID)) continue; + HitsForPositioning.push_back((*hit).second); + } + return; + } + + //calculate radial distance for all pairs to the most significant hit + std::vector> to_sort; + for(std::map::iterator hit=Hits.begin(); hit!=Hits.end(); hit++){ + if (filterByCellType((*hit).second->ID)) continue; + double current_radius = sqrt(pow((*hit).second->x - mostSignificantHit->x,2) + pow((*hit).second->y - mostSignificantHit->y,2)); + to_sort.push_back(std::make_pair(current_radius, (*hit).second)); + } + + //sort the hits by their radial distance + std::sort(to_sort.begin(), to_sort.end(), + [](const std::pair& a, const std::pair b){ + return a.first < b.first; + } + ); + + double maxDist = 0; + if (N_considered == 7) maxDist = (0.5 + sqrt(3)) * HGCAL_TB_CELL::FULL_CELL_SIDE; + else if (N_considered == 7) maxDist = (0.5 + sqrt(3) * 2.) * HGCAL_TB_CELL::FULL_CELL_SIDE; + + int considerCounter = 0; + for (std::vector>::iterator sorted_hit = to_sort.begin(); + sorted_hit != to_sort.end(); sorted_hit++) { + if ((*sorted_hit).first > maxDist && considerCounter >= N_considered){ //fill at least Nconsider but also mind radial distance + break; + } + considerCounter++; + HitsForPositioning.push_back((*sorted_hit).second); + } + + //additional cleanup to be safe + to_sort.clear(); +} + +void SensorHitMap::considerClusters(int N_considered) { + for (std::vector::iterator clusterIndex = clusterIndexes[N_considered].begin(); + clusterIndex != clusterIndexes[N_considered].end(); clusterIndex++){ + HitsForPositioning.push_back(Hits[*clusterIndex]); + } +} + +void SensorHitMap::poweredWeighting(int exponent) { + double numerator_x, numerator_y; + double w; + + numerator_x = numerator_y = totalWeight = 0; + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; //0.0 --> not included in the sum + totalWeight += w; + numerator_x += w*(*hit)->x; + numerator_y += w*(*hit)->y; + } + + //prevent divisions through zero + if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired + return; //defaults are preserved + } + + centralHitPoint.first = numerator_x/totalWeight; + centralHitPoint.second = numerator_y/totalWeight; + + //calculate the RMs + numerator_x = numerator_y = 0.0; + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + w = (*hit)->I >= 0.0 ? pow((*hit)->I, exponent) : 0.0; + numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); + numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); + } + centralHitPointError.first = sqrt(numerator_x/totalWeight); + centralHitPointError.second = sqrt(numerator_y/totalWeight); +}; + +void SensorHitMap::logWeighting(double log_a, double log_b) { + double I_max = 0; //determine the 'intensity' maximum first + double I_i = 0; + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + I_max += I_i; + } + + + double numerator_x, numerator_y; + double w; + numerator_x = numerator_y = totalWeight = 0; + + int counter = 0; + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + counter++; + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + if (I_i == 0.) continue; + w = std::max(log_a + log_b*log(I_i/I_max), 0.0); + totalWeight += w; + numerator_x += w*(*hit)->x; + numerator_y += w*(*hit)->y; + } + + //prevent divisions through zero + if (totalWeight == 0.0) { //equivalent to the statement that no sensor has fired + return; //defaults are preserved + } + + centralHitPoint.first = numerator_x/totalWeight; + centralHitPoint.second = numerator_y/totalWeight; + + //calculate the RMs + numerator_x = numerator_y = 0.0; + for(std::vector::iterator hit=HitsForPositioning.begin(); hit!=HitsForPositioning.end(); hit++){ + I_i = (*hit)->I >= 0.0 ? (*hit)->I : 0.0; + if (I_i == 0.) continue; + w = std::max(log_a + log_b*log(I_i/I_max), 0.0); + numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); + numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); + } + centralHitPointError.first = sqrt(numerator_x/totalWeight); + centralHitPointError.second = sqrt(numerator_y/totalWeight); +}; \ No newline at end of file diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc new file mode 100644 index 0000000..d5d3db4 --- /dev/null +++ b/Reco/src/Tracks.cc @@ -0,0 +1,212 @@ +#include "HGCal/Reco/interface/Tracks.h" + +//**** Particle Tracks ****// + +//public functions +ParticleTrack::ParticleTrack(){ + lastAppliedMethod = DEFAULTFITTING; + ROOTpol_x = ROOTpol_y = NULL; + linefit_x = linefit_y = NULL; + + N_points = 0; +}; + +ParticleTrack::~ParticleTrack(){ + delete ROOTpol_x; + delete ROOTpol_y; + delete linefit_x; + delete linefit_y; + x.clear(); x_err.clear(); y.clear(); y_err.clear(); z.clear(); z_err.clear(); +}; + +void ParticleTrack::addFitPoint(SensorHitMap* sensor){ + N_points++; + x.push_back(sensor->getLabHitPosition().first); + x_err.push_back(sensor->getHitPositionError().first); + y.push_back(sensor->getLabHitPosition().second); + y_err.push_back(sensor->getHitPositionError().second); + z.push_back(sensor->getLabZ()+sensor->getIntrinsicHitZPosition()); + z_err.push_back(0.0); + particleEnergy.push_back(sensor->getParticleEnergy()); + preAbsorber.push_back(sensor->getX0()); + + Energies.push_back(sensor->getTotalEnergy()); +}; + +void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { + //calculate the sum of all Energies first + double sum_Energies = 0.0; + for (int i=0; i ParticleTrack::calculatePositionXY(double z) { + switch(lastAppliedMethod) { + case LINEFITANALYTICAL: + return positionFromAnalyticalStraightLine(z); + case LINEFITTGRAPHERRORS: + return positionFromPolFitTGraphErrors(1, z); + case POL2TGRAPHERRORS: + return positionFromPolFitTGraphErrors(2, z); + case POL3TGRAPHERRORS: + return positionFromPolFitTGraphErrors(3, z); + default: + return std::make_pair(0.,0.); + } +} +std::pair ParticleTrack::calculatePositionErrorXY(double z) { + switch(lastAppliedMethod) { + case LINEFITANALYTICAL: + return positionFromAnalyticalStraightLineErrors(z); + case LINEFITTGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(1, z); + case POL2TGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(2, z); + case POL3TGRAPHERRORS: + return positionErrorFromPolFitTGraphErrors(3, z); + default: + return std::make_pair(0.,0.); + } +} + +double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e. sum(layers for fit) sum(hits in layer) of WeightingMethod(intensity)) + double sum_Energies = 0.0; + for (int i=0; i ParticleTrack::positionFromGblTrackFit(double z) { + return std::make_pair(0.0, 0.0); +}; + +std::pair ParticleTrack::positionFromGblTrackFitErrors(double z) { + return std::make_pair(0.0, 0.0); +}; + + + + + +void ParticleTrack::analyticalStraightLineFit() { + if (linefit_x != NULL) + delete linefit_x; + if (linefit_y != NULL) + delete linefit_y; + + linefit_x = new LineFitter(z, x, x_err); + linefit_y = new LineFitter(z, y, y_err); + linefit_x->fit(); + linefit_y->fit(); + + polFitTGraphErrors(1); +}; + +std::pair ParticleTrack::positionFromAnalyticalStraightLine(double z) { + return std::make_pair(linefit_x->eval(z), linefit_y->eval(z)); +}; +std::pair ParticleTrack::positionFromAnalyticalStraightLineErrors(double z) { + return std::make_pair(linefit_x->evalError(z), linefit_y->evalError(z)); +}; + + + +void ParticleTrack::polFitTGraphErrors(int degree){ + if (ROOTpol_x != NULL) + delete ROOTpol_x; + if (ROOTpol_y != NULL) + delete ROOTpol_y; + + ROOTpol_x = new TF1("ROOTpol_x", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + ROOTpol_y = new TF1("ROOTpol_y", ("pol"+std::to_string(degree)).c_str(), *min_element(z.begin(), z.end())-1.0, *max_element(z.begin(), z.end())+1.0); + + TGraphErrors* tmp_graph_x = new TGraphErrors(z.size(), &(z[0]), &(x[0]), &(z_err[0]), &(x_err[0])); //z_err should be filled with zeros + TGraphErrors* tmp_graph_y = new TGraphErrors(z.size(), &(z[0]), &(y[0]), &(z_err[0]), &(y_err[0])); + + fit_result_x = tmp_graph_x->Fit(ROOTpol_x, "QFS"); //for some ROOT versions, the option 'S' is essential to retrieve the fit results object + fit_result_y = tmp_graph_y->Fit(ROOTpol_y, "QFS"); + + delete tmp_graph_x; + delete tmp_graph_y; +}; + +std::pair ParticleTrack::positionFromPolFitTGraphErrors(int degree, double z) { + return std::make_pair(ROOTpol_x->Eval(z), ROOTpol_y->Eval(z)); +} + +std::pair ParticleTrack::positionErrorFromPolFitTGraphErrors(int degree, double z) { + double err_x = 0.; double err_y = 0.; + for (int i=0; i<=degree; i++){ + err_x += pow( ROOTpol_x->GetParError(i) * pow(z, i) ,2); + err_y += pow( ROOTpol_y->GetParError(i) * pow(z, i) ,2); + + for (int j=i+1; j<=degree; j++) { + err_x += 2*fit_result_x->Correlation(i, j) * ROOTpol_x->GetParError(i) * ROOTpol_x->GetParError(j) * fabs(pow(z, i+j)); + err_y += 2*fit_result_y->Correlation(i, j) * ROOTpol_y->GetParError(i) * ROOTpol_y->GetParError(j) * fabs(pow(z, i+j)); + } + } + return std::make_pair(sqrt(err_x), sqrt(err_y)); +} + + +double weightToFitPointWeight(double e, double sum_e, FitPointWeightingMethod m) { + switch(m) { + case NONE: + return 1.0; + case LINEAR: + return 1.0/(0.01+e/sum_e); + case SQUARED: + return 1.0/(0.01+pow(e/sum_e,2)); + case LOGARITHMIC: + return 1.0/(0.01+log(1.0+e/sum_e)); + case EXPONENTIAL: + return exp(-e/sum_e); + default: + return 1.0; + } +} \ No newline at end of file From f5bd9a27f8329c307a4f2355f84b07220155e774 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 19 Jan 2017 17:04:19 +0100 Subject: [PATCH 171/297] [simulation] input source implementation to produce necessary RecHits for studies, HGCalRecHits for center cell position information, ID to position and layer matching from Shilpi --- DataFormats/interface/HGCalTBRecHit.h | 6 +- DataFormats/src/HGCalTBRecHit.cc | 20 ++- RawToDigi/BuildFile.xml | 1 + RawToDigi/plugins/HGCalTBGenSimSource.cc | 160 +++++++++++++++++++++++ RawToDigi/plugins/HGCalTBGenSimSource.h | 76 +++++++++++ Reco/interface/Sensors.h | 5 +- Reco/interface/WaferGeometry.h | 26 ++++ Reco/plugins/HGCalTBRecHitProducer.cc | 3 + Reco/plugins/HGCalTBRecHitProducer.h | 3 + Reco/src/Sensors.cc | 6 +- Reco/src/WaferGeometry.cc | 59 +++++++++ test_cfg_newEB.py | 81 ++++++++---- 12 files changed, 413 insertions(+), 33 deletions(-) create mode 100644 RawToDigi/plugins/HGCalTBGenSimSource.cc create mode 100644 RawToDigi/plugins/HGCalTBGenSimSource.h create mode 100644 Reco/interface/WaferGeometry.h create mode 100644 Reco/src/WaferGeometry.cc diff --git a/DataFormats/interface/HGCalTBRecHit.h b/DataFormats/interface/HGCalTBRecHit.h index 56d61ed..32cd7c5 100644 --- a/DataFormats/interface/HGCalTBRecHit.h +++ b/DataFormats/interface/HGCalTBRecHit.h @@ -38,6 +38,8 @@ class HGCalTBRecHit : public CaloRecHit }; ///// bool isRecovered() const; float _energyLow, _energyHigh; + float cellCenter_x; + float cellCenter_y; float energyLow() const { @@ -65,9 +67,9 @@ class HGCalTBRecHit : public CaloRecHit return flagField(flag, 1); }; //flagBits_ & ( 0x1< + diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc new file mode 100644 index 0000000..7670c75 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -0,0 +1,160 @@ +#include "HGCal/RawToDigi/plugins/HGCalTBGenSimSource.h" + +using namespace std; + +HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : edm::ProducerSourceFromFiles(pset, desc, true), + inputPathFormat(""), + currentRun(-1), + currentEvent(-1), + rootFile(0) +{ + + produces (outputCollectionName); + produces("RunData"); + + if (fileNames()[0] != "file:DUMMY") { + for (int i = 0; i<(int)(fileNames().size()); i++) { + FileInfo fInfo; + fInfo.index = -1; + fInfo.energy = -1; + fInfo.runType = ""; + fInfo.config = -1; + fInfo.name = fileNames()[i]; + + _fileNames.push_back(fInfo); + } + } + + //find and fill the configured runs + outputCollectionName = pset.getUntrackedParameter("HGCalTBRecHitCollectionName"); + runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); + inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + + std::fstream map_file; + map_file.open(runEnergyMapFile.c_str(), std::fstream::in); + fillConfiguredRuns(map_file); + map_file.close(); + + tree = 0; +} + +void HGCalTBGenSimSource::fillConfiguredRuns(std::fstream& map_file) { + std::string filePath; + + //perform the loop and fill configuredRuns + char fragment[100]; + int readCounter = 0; + int _run = 0, _configuration = 0; double _energy = 0; std::string _runType = ""; + + while (map_file.is_open() && !map_file.eof()) { + readCounter++; + map_file >> fragment; + std::cout<<"Fragment: "<"), 5, std::to_string(_run)); + filePath.replace(filePath.find(""), 8, std::to_string((int)_energy)); + std::cout<<"Adding "<FindObjectAny("HGCalTBAnalyzer"); + tree = (TTree*)dir->Get("HGCTB"); + + tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); + tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); + } + + if (currentEvent == tree->GetEntries()) { + fileIterator++; + currentRun = -1; + setRunAndEventInfo(id, time, evType); + //delete rootFile; + } + + tree->GetEntry(currentEvent); + + currentEvent++; + + return true; + +} + + +void HGCalTBGenSimSource::produce(edm::Event & event) +{ + std::auto_ptr rd(new RunData); + rd->energy = (*fileIterator).energy; + rd->configuration = (*fileIterator).config; + rd->runType = (*fileIterator).runType; + rd->run = (*fileIterator).index; + + event.put(std::move(rd), "RunData"); + + std::auto_ptr rechits(new HGCalTBRecHitCollection); + + //given code fragment + HexGeometry geomc(true); + for(unsigned int icell=0; icellsize(); icell++){ + int layerno = ((simHitCellIdE->at(icell)>>19)&0x7F); + + int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; + std::pair xy = geomc.position(cellno); + double x = xy.first; + double y= xy.second; + cout << "testing icell at layer "<< layerno <<":" << icell << " x:"<push_back(recHit); + event.put(rechits, outputCollectionName); + + std::cout<<"Event "<size()<<" entries."< +#include +#include +#include +#include +#include "stdlib.h" +#include + +#include "TFile.h" +#include "TBranch.h" +#include "TTree.h" +#include "TDirectory.h" +/** + * + * + * + * + * +**/ + +struct FileInfo { + int index; + double energy; + std::string runType; + int config; + std::string name; +}; + +//to the EDM::Event via auxiliary information + +class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles +{ +private: + void fillConfiguredRuns(std::fstream& map_file); + bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); + virtual void produce(edm::Event & e); + + std::string outputCollectionName; + + std::string runEnergyMapFile; + std::string inputPathFormat; + + std::vector _fileNames; + std::vector::iterator fileIterator; + + int currentRun; + int currentEvent; + + TFile *rootFile; + TTree *tree; //!pointer to the analyzed TTree or TChain + TDirectory *dir; + + std::vector *simHitCellIdE; + std::vector *simHitCellEnE; + TBranch *b_simHitCellIdE; + TBranch *b_simHitCellEnE; + + +public: + explicit HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc); + virtual ~HGCalTBGenSimSource() + { + delete rootFile; + + } + +}; diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 8e6023c..7ce9168 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -11,7 +11,6 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" -#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" #include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //e.g. to get the cell's dimensions @@ -67,8 +66,8 @@ class SensorHitMap { HitData* mostSignificantHit; //helpers to obtain the x-y coordinate - HGCalTBCellVertices TheCell; - std::pair CellCenterXY; + //HGCalTBCellVertices TheCell; + //std::pair CellCenterXY; int CM_cells_count; double CM_sum; diff --git a/Reco/interface/WaferGeometry.h b/Reco/interface/WaferGeometry.h new file mode 100644 index 0000000..ce4863c --- /dev/null +++ b/Reco/interface/WaferGeometry.h @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include +#include +#include + + +//this code patches the fact that the digitization step of the simulation is not implemented yet +//it serves as a map of simulated hits to the actual x-y positions + +class HexGeometry { + +public : + HexGeometry(bool fine); + ~HexGeometry(); + + std::pair position(const int cell); + +private : + std::vector > xypos; + +}; + +void testGeometry(); diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index 434c272..9f24ee8 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -97,6 +97,9 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energy = -1.; HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); //, _LG2HG_value, _gainThr_value * adcToGeV_high_value); ///\todo use time calibration! + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! + recHit.setCellCenterCoordinate(CellCenterXY.first, CellCenterXY.second); + uint32_t EID = essource_.emap_.detId2eid(recHit.id()); HGCalTBElectronicsId eid(EID); diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 2a9a9c1..6e459f2 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -24,6 +24,7 @@ #include "HGCal/CondObjects/interface/HGCalTBNumberingScheme.h" #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" //#define DEBUG @@ -49,6 +50,8 @@ class HGCalTBRecHitProducer : public edm::EDProducer struct { HGCalElectronicsMap emap_; } essource_; + HGCalTBCellVertices TheCell; + std::pair CellCenterXY; }; diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index 599ff98..b50979f 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -83,9 +83,9 @@ double SensorHitMap::getX0() { void SensorHitMap::addHit(HGCalTBRecHit Rechit) { int uniqueID = (Rechit.id()).rawId(); - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); - double iux = CellCenterXY.first; - double ivy = CellCenterXY.second; + //CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); + double iux = Rechit.getCellCenterCartesianCoordinate(0); //CellCenterXY.first; + double ivy = Rechit.getCellCenterCartesianCoordinate(1); //CellCenterXY.second; int ID = (Rechit.id()).cellType(); if (filterByCellType(ID)) return; //returns false so far diff --git a/Reco/src/WaferGeometry.cc b/Reco/src/WaferGeometry.cc new file mode 100644 index 0000000..7c93e3e --- /dev/null +++ b/Reco/src/WaferGeometry.cc @@ -0,0 +1,59 @@ +#include "HGCal/Reco/interface/WaferGeometry.h" + + +HexGeometry::HexGeometry(bool fine) { + const int nC(15), nF(20); + int nCoarse(11), nyCoarse(-42), nFine(15), nyFine(-56); + int cellCoarse[nC] = {2,5,8,11,12,11,12,11,12,11,12,11,8,5,2}; + int cellFine[nF] = {3,6,9,12,15,16,15,16,15,16,15,16,15,16,15,14,11,8,5,2}; + double wafer(123.7); + + int rows = (fine) ? nF : nC; + double cell = (fine) ? wafer/nFine : wafer/nCoarse; + double dx = 0.5*cell; + double dy = 0.5*dx*tan(30.0*M_PI/180.0); + int ny = (fine) ? nyFine : nyCoarse; + for (int ir = 0; ir < rows; ++ir) { + int column = (fine) ? cellFine[ir] : cellCoarse[ir]; + int nx = 1 - column; + double ypos = dy*ny; + for (int ic = 0; ic(xpos,ypos)); + } + ny += 6; + } + std::cout << "Initialize HexGeometry for " << xypos.size() << " cells" + << std::endl; +} + +HexGeometry::~HexGeometry() {} + +std::pair HexGeometry::position(const int cell) { + std::pair xy; + if (cell >= 0 && cell < (int)(xypos.size())) { + xy = xypos[cell]; + } else { + xy = std::pair(0,0); + } + return xy; +} + + +void testGeometry() { + + HexGeometry geomc(false); + for (int k = 0; k < 133; ++k) { + std::pair xy = geomc.position(k); + std::cout << "Coarse Cell[" << k << "] " << xy.first << ":" << xy.second + << std::endl; + } + + HexGeometry geomf(true); + for (int k = 0; k < 240; ++k) { + std::pair xy = geomf.position(k); + std::cout << "Fine Cell[" << k << "] " << xy.first << ":" << xy.second + << std::endl; + } +} diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 3514ff7..c073faa 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -3,6 +3,11 @@ import os,sys +#TEST RUN: +#cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 + + + repoFolder = "/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/" options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' @@ -26,6 +31,13 @@ VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Postfix to the output file') + +options.register('isData', + True, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.bool, + 'Is the analysis run on real data (otherwise on simulated samples) ?') + # options.register('commonPrefix', # '', # VarParsing.VarParsing.multiplicity.singleton, @@ -120,7 +132,7 @@ ) -options.maxEvents = -1 +options.maxEvents = 1 options.parseArguments() @@ -160,17 +172,23 @@ process.load('HGCal.StandardSequences.dqm_cff') -process.source = cms.Source("HGCalTBTextSource", - run=cms.untracked.int32(options.runNumber), # +if options.isData: + process.source = cms.Source("HGCalTBTextSource", + runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames + inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered + #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) + nSpills=cms.untracked.uint32(options.nSpills), + ) +else: + process.source = cms.Source("HGCalTBGenSimSource", + HGCalTBRecHitCollectionName=cms.untracked.string(""), runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames - inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), - fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are conidered - #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) - nSpills=cms.untracked.uint32(options.nSpills), + inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered ) - ###### process.BadSpillFilter.configFile1 = "%s/CondObjects/data/Bad_Run_Spill_CFG1.txt" % repoFolder process.BadSpillFilter.configFile2 = "%s/CondObjects/data/Bad_Run_Spill_CFG2.txt" % repoFolder @@ -264,22 +282,37 @@ #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) #Using chain sequence 3 only for testing purposes. -if (options.chainSequence == 1): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) -elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) -elif (options.chainSequence == 4): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) -elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) -elif (options.chainSequence == 6): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.LayerSumAnalyzer) -elif (options.chainSequence == 7): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) -elif (options.chainSequence == 8): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) -elif (options.chainSequence == 9): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) +if options.isData: + if (options.chainSequence == 1): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) + elif (options.chainSequence == 3): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) + elif (options.chainSequence == 4): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) + elif (options.chainSequence == 5): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) + elif (options.chainSequence == 6): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.LayerSumAnalyzer) + elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) + elif (options.chainSequence == 8): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) + elif (options.chainSequence == 9): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) +else: + if (options.chainSequence == 4): + process.p =cms.Path(process.hgcaltbrechitsplotter_highgain_new) + elif (options.chainSequence == 5): + process.p =cms.Path(process.hgcaltbrechitsplotter_highgain_correlation_cm) + elif (options.chainSequence == 6): + process.p =cms.Path(process.LayerSumAnalyzer) + elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbclusters*process.hgcaltbeventdisplay) + elif (options.chainSequence == 8): + process.p =cms.Path() + #process.p =cms.Path(process.hgcaltbclusters*process.position_resolution_analyzer) + elif (options.chainSequence == 9): + process.p =cms.Path(process.hgcaltbclusters*process.millepede_binarywriter) # example for running display : # cmsRun test_cfg_newEB.py runNumber=1291 runType=HGCRun nSpills=1 dataFolder='./' pedestalsHighGain="./CondObjects/data/pedHighGain1200.txt" pedestalsLowGain="./CondObjects/data/pedLowGain1200.txt" chainSequence=7 maxEvents=10 From ba892f2ba6b0cc02a968731da0e5d0822bc38934 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 20 Jan 2017 13:06:29 +0100 Subject: [PATCH 172/297] [simulation] working code to read in and perform analysis (clustering+position resolution) on simulated events --- DataFormats/interface/HGCalTBDetId.h | 1 + Geometry/interface/HGCalTBCellVertices.h | 1 + Geometry/src/HGCalTBCellVertices.cc | 8 +++ RawToDigi/plugins/HGCalTBGenSimSource.cc | 63 +++++++++++++---------- RawToDigi/plugins/HGCalTBGenSimSource.h | 5 ++ Reco/plugins/HGCalTBRecHitProducer.cc | 5 +- Reco/python/hgcaltbclusterproducer_cfi.py | 7 +-- Reco/src/WaferGeometry.cc | 2 - test_cfg_newEB.py | 14 +++-- 9 files changed, 67 insertions(+), 39 deletions(-) diff --git a/DataFormats/interface/HGCalTBDetId.h b/DataFormats/interface/HGCalTBDetId.h index 9813559..722619d 100644 --- a/DataFormats/interface/HGCalTBDetId.h +++ b/DataFormats/interface/HGCalTBDetId.h @@ -4,6 +4,7 @@ #include #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h" +#include /* On a sensor, the indexes are X and V. X is horizontal (in most diagrams) and V increases along the hexagon faces towards the upper right. diff --git a/Geometry/interface/HGCalTBCellVertices.h b/Geometry/interface/HGCalTBCellVertices.h index 5c5cb2a..1fe4ad6 100644 --- a/Geometry/interface/HGCalTBCellVertices.h +++ b/Geometry/interface/HGCalTBCellVertices.h @@ -32,6 +32,7 @@ class HGCalTBCellVertices }; ///< returns the coordinates of each vertex of cell in the lab frame \b (x,y) std::pair GetCellCentreCoordinates(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorsize, bool flipX = false); ///< returns the center of the cell in absolute coordinates: \b (x,y) + std::pair GetCellIUIVCoordinates(double x, double y); inline std::pair GetCellCentreCoordinatesForPlots(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorsize) { diff --git a/Geometry/src/HGCalTBCellVertices.cc b/Geometry/src/HGCalTBCellVertices.cc index 0dff84d..51a597c 100644 --- a/Geometry/src/HGCalTBCellVertices.cc +++ b/Geometry/src/HGCalTBCellVertices.cc @@ -62,6 +62,14 @@ std::pair HGCalTBCellVertices::GetCellCentreCoordinates(int laye } +std::pair HGCalTBCellVertices::GetCellIUIVCoordinates(double x, double y) { + auto unrotated = RotateLayer(std::make_pair(x, y), -TEST_BEAM_LAYER_ROTATION); + double iv = unrotated.second/vy0; + double iu = (unrotated.first - iv*vx0) / x0; + + return std::make_pair(-iu, -iv); //why is there a minus? +} + double HGCalTBCellVertices::Xmax(int iv, double y) { if(fabs(iv) <= 3) return 11 * x_a * a; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 7670c75..ae223ee 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -6,12 +6,18 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In inputPathFormat(""), currentRun(-1), currentEvent(-1), - rootFile(0) + rootFile(NULL) { + //find and fill the configured runs + outputCollectionName = pset.getParameter("OutputCollectionName"); + runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); + inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + produces (outputCollectionName); produces("RunData"); - + + if (fileNames()[0] != "file:DUMMY") { for (int i = 0; i<(int)(fileNames().size()); i++) { FileInfo fInfo; @@ -24,12 +30,8 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In _fileNames.push_back(fInfo); } } - - //find and fill the configured runs - outputCollectionName = pset.getUntrackedParameter("HGCalTBRecHitCollectionName"); - runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); - inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); fillConfiguredRuns(map_file); @@ -49,7 +51,6 @@ void HGCalTBGenSimSource::fillConfiguredRuns(std::fstream& map_file) { while (map_file.is_open() && !map_file.eof()) { readCounter++; map_file >> fragment; - std::cout<<"Fragment: "<"), 5, std::to_string(_run)); filePath.replace(filePath.find(""), 8, std::to_string((int)_energy)); - std::cout<<"Adding "<FindObjectAny("HGCalTBAnalyzer"); tree = (TTree*)dir->Get("HGCTB"); @@ -105,7 +112,6 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& fileIterator++; currentRun = -1; setRunAndEventInfo(id, time, evType); - //delete rootFile; } tree->GetEntry(currentEvent); @@ -118,7 +124,11 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& void HGCalTBGenSimSource::produce(edm::Event & event) -{ +{ + if (fileIterator ==_fileNames.end()) { + std::cout<<"End of the files in the producer is reached..."< rd(new RunData); rd->energy = (*fileIterator).energy; rd->configuration = (*fileIterator).config; @@ -126,32 +136,29 @@ void HGCalTBGenSimSource::produce(edm::Event & event) rd->run = (*fileIterator).index; event.put(std::move(rd), "RunData"); - std::auto_ptr rechits(new HGCalTBRecHitCollection); //given code fragment HexGeometry geomc(true); for(unsigned int icell=0; icellsize(); icell++){ int layerno = ((simHitCellIdE->at(icell)>>19)&0x7F); + //int idcell = (simHitCellIdE->at(icell))&0xFF; + + double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[layerno-1]; int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; std::pair xy = geomc.position(cellno); - double x = xy.first; - double y= xy.second; - cout << "testing icell at layer "<< layerno <<":" << icell << " x:"< iuiv = TheCell.GetCellIUIVCoordinates(x, y); + //std::cout<<"x: "<push_back(recHit); + } - rechits->push_back(recHit); event.put(rechits, outputCollectionName); - std::cout<<"Event "<size()<<" entries."< iuiv = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); + //std::cout<GeV/TBGenSim_.root"%(options.dataFolder)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered @@ -210,6 +210,10 @@ process.position_resolution_analyzer.totalEnergyThreshold = -1000. +if not options.isData: + process.position_resolution_analyzer.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) + + process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) process.millepede_binarywriter.weightingMethod = cms.string(options.weightingMethod) process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) @@ -226,7 +230,7 @@ if (options.chainSequence == 3): options.output = "%s/RECO_type%s_run%06d.root"%(options.outputFolder,options.runType,options.runNumber) process.output = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string(options.output) + fileName = cms.untracked.string("test.root") ) @@ -309,8 +313,8 @@ elif (options.chainSequence == 7): process.p =cms.Path(process.hgcaltbclusters*process.hgcaltbeventdisplay) elif (options.chainSequence == 8): - process.p =cms.Path() - #process.p =cms.Path(process.hgcaltbclusters*process.position_resolution_analyzer) + process.p =cms.Path(process.hgcaltbclusters*process.position_resolution_analyzer) + #process.p =cms.Path() elif (options.chainSequence == 9): process.p =cms.Path(process.hgcaltbclusters*process.millepede_binarywriter) From 9f25cde45501555138c7230cb05e886f378b7368 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 23 Jan 2017 17:56:49 +0100 Subject: [PATCH 173/297] [position resolution+alignment] implement usage of gbl tracks --- Reco/BuildFile.xml | 1 + Reco/interface/Sensors.h | 6 +- Reco/interface/Tracks.h | 56 ++++++- Reco/plugins/MillepedeBinaryWriter.cc | 145 +++++++++++-------- Reco/plugins/Position_Resolution_Analyzer.cc | 18 ++- Reco/python/hgcaltbclusterproducer_cfi.py | 3 +- Reco/src/Mille.cc | 2 +- Reco/src/Sensors.cc | 15 +- Reco/src/Tracks.cc | 134 ++++++++++++++++- test_cfg_newEB.py | 30 +++- 10 files changed, 309 insertions(+), 101 deletions(-) diff --git a/Reco/BuildFile.xml b/Reco/BuildFile.xml index 4eac406..82839c2 100644 --- a/Reco/BuildFile.xml +++ b/Reco/BuildFile.xml @@ -4,6 +4,7 @@ + diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 7ce9168..1ebe56f 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -50,6 +50,7 @@ struct HitData { class SensorHitMap { private: + int _label; std::pair centralHitPoint; double centralHitZ; std::pair centralHitPointError; @@ -82,8 +83,9 @@ class SensorHitMap { void logWeighting(double log_a, double log_b); public: - SensorHitMap(); + SensorHitMap(int _label); ~SensorHitMap(); + int label() {return _label;}; void setLabZ(double z_cm, double X0); void setParticleEnergy(double e); void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); @@ -106,7 +108,7 @@ class SensorHitMap { std::pair getLabHitPosition(); //returns central hit in lab frame std::pair getHitPositionError(); //calculated via RMS std::pair getCenterOfClosestCell(std::pair X_ref); - + //debug void printHits(); }; diff --git a/Reco/interface/Tracks.h b/Reco/interface/Tracks.h index c896ec1..ebace07 100644 --- a/Reco/interface/Tracks.h +++ b/Reco/interface/Tracks.h @@ -24,7 +24,8 @@ enum TrackFittingMethod { LINEFITANALYTICAL, LINEFITTGRAPHERRORS, POL2TGRAPHERRORS, - POL3TGRAPHERRORS + POL3TGRAPHERRORS, + GBLTRACK }; enum FitPointWeightingMethod { @@ -35,6 +36,37 @@ enum FitPointWeightingMethod { EXPONENTIAL }; +namespace gblhelpers { + class layer { + public: + layer(int label, double z0, double absorberX0, double particleEnergy, bool isReference, + std::pair measurement = std::make_pair(-1, -1), std::pair measurementError = std::make_pair(-1, -1)) : + _label(label), _z0(z0), _absorberX0(absorberX0), _particleEnergy(particleEnergy), _isReference(isReference), _measurement(measurement), _measurementError(measurementError) {}; + + int label() {return _label;} + double z() {return _z0;} + double absorberX0() {return _absorberX0;} + double particleEnergy() {return _particleEnergy;} + bool isReference() {return _isReference;} + std::pair measurement() {return _measurement;}; + std::pair measurementError() {return _measurementError;}; + + bool operator < (const layer& lay) const { + return (_z0 < lay._z0); + } + + private: + int _label; + double _z0; + double _absorberX0; + double _particleEnergy; + bool _isReference; + std::pair _measurement; + std::pair _measurementError; + + }; +} + // // class declarations // @@ -44,13 +76,20 @@ class ParticleTrack{ ParticleTrack(); ~ParticleTrack(); void addFitPoint(SensorHitMap* sensor); + void addReferenceSensor(SensorHitMap* reference); void weightFitPoints(FitPointWeightingMethod method); void fitTrack(TrackFittingMethod method); - std::pair calculatePositionXY(double z); - std::pair calculatePositionErrorXY(double z); + std::pair calculateReferenceXY(); + std::pair calculateReferenceErrorXY(); + std::pair calculatePositionXY(double z, int layerLabel); + std::pair calculatePositionErrorXY(double z, int layerLabel); double getSumOfEnergies(); + + void gblTrackToMilleBinary(gbl::MilleBinary *milleBinary); private: int N_points; //cross check, should be identical to x.size() etc. + SensorHitMap* referenceSensor; + //general information, the fit points std::vector x; std::vector x_err; @@ -61,12 +100,16 @@ class ParticleTrack{ std::vector particleEnergy; //approximated electron energy left over at the individual layers std::vector preAbsorber; //absorber thickness in radiation lengths deposited directly in front of the sensor std::vector Energies; //sum of energies deposited in the layers that are added to the track + + std::vector gblLayers; + std::map gblPointLabels; + TrackFittingMethod lastAppliedMethod; //different fit functions void gblTrackFit(); - std::pair positionFromGblTrackFit(double z); - std::pair positionFromGblTrackFitErrors(double z); + std::pair positionFromGblTrackFit(int layerLabel); + std::pair positionFromGblTrackFitErrors(int layerLabel); gbl::GblTrajectory* gblTrajectory; void analyticalStraightLineFit(); @@ -86,4 +129,7 @@ class ParticleTrack{ double weightToFitPointWeight(double w, double sum_w, FitPointWeightingMethod m); + + + #endif \ No newline at end of file diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index b09f9e2..d614bb5 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -27,21 +27,22 @@ #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" -//#include "Alignment/MillePedeAlignmentAlgorithm/src/Mille.h" #include "HGCal/Reco/interface/Mille.h" #include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/Reco/interface/Tracks.h" #include "HGCal/Reco/interface/Sensors.h" +#include "Alignment/ReferenceTrajectories/interface/MilleBinary.h" + /*************/ /* Some hard coded numbers: */ //configuration1: -double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm +double _config1Positions[] = {1.0, 6.35, 11.52, 15.44, 19.52, 20.67, 24.78, 26.92}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double _config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer //configuration2: -double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm +double _config2Positions[] = {1.0, 5.67, 10.84, 15.27, 20.25, 21.4, 26.8, 32.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double _config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer double sigma_res_x[] = {0.2, 0.15, 0.15, 0.15, 0.17, 0.18, 0.21, 0.25}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) @@ -95,6 +96,8 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer("totalEnergyThreshold"); - mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); + if (fittingMethod==GBLTRACK) { + milleBinary = new gbl::MilleBinary((iConfig.getParameter("binaryFile")).c_str()); + mille = NULL; + } else{ + milleBinary = NULL; + mille = new Mille((iConfig.getParameter("binaryFile")).c_str()); + } + + NLC = 4; NGLperLayer = 3; NGL = nLayers*NGLperLayer; @@ -260,7 +273,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet for (auto Rechit : *Rechits) { int layer = (Rechit.id()).layer(); if ( Sensors.find(layer) == Sensors.end() ) { - Sensors[layer] = new SensorHitMap(); + Sensors[layer] = new SensorHitMap(layer); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setParticleEnergy(energy); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths @@ -323,63 +336,66 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet Track->weightFitPoints(fitPointWeightingMethod); Track->fitTrack(fittingMethod); - - //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position - for (int layer=1; layer<=nLayers; layer++) { - double layer_labZ = Sensors[layer]->getLabZ(); - double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); - - std::pair position_predicted = Track->calculatePositionXY(layer_labZ+intrinsic_z); - double x_predicted = position_predicted.first; - double y_predicted = position_predicted.second; - - //std::pair position_predicted_err = Track->calculatePositionErrorXY(layer_labZ+intrinsic_z); - //double x_predicted_err = position_predicted_err.first; - //double y_predicted_err = position_predicted_err.second; - - std::pair position_true = Sensors[layer]->getHitPosition(); - double x_true = position_true.first; - double y_true = position_true.second; - - //std::pair position_true_err = Sensors[layer]->getHitPositionError(); - Sensors[layer]->getHitPositionError(); - //double x_true_err = position_true_err.first; - //double y_true_err = position_true_err.second; - - //step5: calculate the necessary derivatives for Mille and fill them into the binary file - //reset all global parameters: - for (int k=0; kgblTrackToMilleBinary(milleBinary); + }else{ + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position + for (int layer=1; layer<=nLayers; layer++) { + double layer_labZ = Sensors[layer]->getLabZ(); + double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); + + std::pair position_predicted = Track->calculatePositionXY(layer_labZ+intrinsic_z, layer); + double x_predicted = position_predicted.first; + double y_predicted = position_predicted.second; + + //std::pair position_predicted_err = Track->calculatePositionErrorXY(layer_labZ+intrinsic_z); + //double x_predicted_err = position_predicted_err.first; + //double y_predicted_err = position_predicted_err.second; + + std::pair position_true = Sensors[layer]->getHitPosition(); + double x_true = position_true.first; + double y_true = position_true.second; + + //std::pair position_true_err = Sensors[layer]->getHitPositionError(); + Sensors[layer]->getHitPositionError(); + //double x_true_err = position_true_err.first; + //double y_true_err = position_true_err.second; + + //step5: calculate the necessary derivatives for Mille and fill them into the binary file + //reset all global parameters: + for (int k=0; kmille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + + + //the y-coordinate + derLc[0] = 0.; + derLc[1] = 0.; + derLc[2] = layer_labZ; + derLc[3] = 1.; + + derGl[(layer-1)*NGLperLayer+0] = 0.; + derGl[(layer-1)*NGLperLayer+1] = 1.; + + rMeas = y_true - y_predicted; + sigma = sigma_res_y[layer-1]; + mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); } - - //the x-coordinate - derLc[0] = layer_labZ; - derLc[1] = 1.; - derLc[2] = 0.; - derLc[3] = 0.; - - derGl[(layer-1)*NGLperLayer+0] = 1.; - derGl[(layer-1)*NGLperLayer+1] = 0.; - - rMeas = x_true - x_predicted; - sigma = sigma_res_x[layer-1]; - mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); - - - //the y-coordinate - derLc[0] = 0.; - derLc[1] = 0.; - derLc[2] = layer_labZ; - derLc[3] = 1.; - - derGl[(layer-1)*NGLperLayer+0] = 0.; - derGl[(layer-1)*NGLperLayer+1] = 1.; - - rMeas = y_true - y_predicted; - sigma = sigma_res_y[layer-1]; - mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); + mille->end(); } - mille->end(); for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; @@ -392,8 +408,13 @@ void MillepedeBinaryWriter::beginJob() { } void MillepedeBinaryWriter::endJob() { - mille->kill(); - delete mille; + if (mille != NULL) { + mille->kill(); + delete mille; + } + if (milleBinary != NULL) { + delete milleBinary; + } delete derLc; delete derGl; delete label; std::cout<<"ClusterVetos: "< { @@ -169,6 +169,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS fittingMethod = POL2TGRAPHERRORS; else if (methodString == "pol3TGraphErrors") fittingMethod = POL3TGRAPHERRORS; + else if (methodString == "gblTrack") + fittingMethod = GBLTRACK; else fittingMethod = DEFAULTFITTING; @@ -292,7 +294,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E for(auto Rechit : *Rechits) { layer = (Rechit.id()).layer(); if ( Sensors.find(layer) == Sensors.end() ) { - Sensors[layer] = new SensorHitMap(); + Sensors[layer] = new SensorHitMap(layer); Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setParticleEnergy(energy); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths @@ -359,7 +361,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E for (int i=1; i<=nLayers; i++) { Tracks[i] = new ParticleTrack(); for (int j=1; j<=nLayers; j++) { - if (i==j) continue; + if (i==j) { + Tracks[i]->addReferenceSensor(Sensors[i]); + continue; + } Tracks[i]->addFitPoint(Sensors[j]); } Tracks[i]->weightFitPoints(fitPointWeightingMethod); @@ -373,7 +378,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 += Sensors[layer]->getX0(); - std::pair position_predicted = Tracks[layer]->calculatePositionXY(layerZ_cm); + std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); x_predicted = position_predicted.first; y_predicted = position_predicted.second; @@ -381,7 +386,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E x_predicted_to_closest_cell = position_predicted_to_closest_cell.first; y_predicted_to_closest_cell = position_predicted_to_closest_cell.second; - std::pair position_error_predicted = Tracks[layer]->calculatePositionErrorXY(layerZ_cm); + std::pair position_error_predicted = Tracks[layer]->calculateReferenceErrorXY(); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; @@ -422,7 +427,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //fill the tree outTree->Fill(); - } for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { diff --git a/Reco/python/hgcaltbclusterproducer_cfi.py b/Reco/python/hgcaltbclusterproducer_cfi.py index 809f2b1..8272640 100644 --- a/Reco/python/hgcaltbclusterproducer_cfi.py +++ b/Reco/python/hgcaltbclusterproducer_cfi.py @@ -3,8 +3,7 @@ hgcaltbclusters = cms.EDProducer("HGCalTBClusterProducer", ElectronicMapFile = cms.untracked.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), OutputCollectionName = cms.string(''), - #rechitCollection = cms.InputTag('hgcaltbrechits',"","unpack"), - rechitCollection = cms.InputTag("source","","unpack"), + rechitCollection = cms.InputTag('hgcaltbrechits',"","unpack"), #LayerZPositions= cms.untracked.vdouble(0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4),#cern config 2 LayerZPositions= cms.untracked.vdouble(0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92),#cern config 1 minEnergy = cms.untracked.double(100) diff --git a/Reco/src/Mille.cc b/Reco/src/Mille.cc index 16275f8..c2db9a5 100644 --- a/Reco/src/Mille.cc +++ b/Reco/src/Mille.cc @@ -9,7 +9,7 @@ * (last update by $Author: flucke $) */ -#include "HGCal/Reco/interface/Mille.h" +#include "Mille.h" #include #include diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index b50979f..304c103 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -4,8 +4,10 @@ //**** Sensor Hit Maps ****// //public functions -SensorHitMap::SensorHitMap(){ - mostSignificantHit = NULL; //will point to the most significant hit +SensorHitMap::SensorHitMap(int l){ + _label = l; + + mostSignificantHit = NULL; //points to the most significant hit centralHitPoint = std::make_pair(0., 0.); centralHitZ = 0; @@ -261,7 +263,6 @@ double SensorHitMap::getTotalWeight() { return this->totalWeight; }; - //private functions //only consider certain cellTypes for the N closest approach (analogous to the LayerSumAnalyzer) @@ -360,8 +361,8 @@ void SensorHitMap::poweredWeighting(int exponent) { numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } - centralHitPointError.first = sqrt(numerator_x/totalWeight); - centralHitPointError.second = sqrt(numerator_y/totalWeight); + centralHitPointError.first = sqrt(numerator_x/totalWeight) > 1./sqrt(12.) ? sqrt(numerator_x/totalWeight): 1./sqrt(12.); + centralHitPointError.second = sqrt(numerator_y/totalWeight) > 1./sqrt(12.) ? sqrt(numerator_y/totalWeight): 1./sqrt(12.); }; void SensorHitMap::logWeighting(double log_a, double log_b) { @@ -405,6 +406,6 @@ void SensorHitMap::logWeighting(double log_a, double log_b) { numerator_x += w*pow((*hit)->x - centralHitPoint.first, 2); numerator_y += w*pow((*hit)->y - centralHitPoint.second, 2); } - centralHitPointError.first = sqrt(numerator_x/totalWeight); - centralHitPointError.second = sqrt(numerator_y/totalWeight); + centralHitPointError.first = sqrt(numerator_x/totalWeight) > 1./sqrt(12.) ? sqrt(numerator_x/totalWeight): 1./sqrt(12.); + centralHitPointError.second = sqrt(numerator_y/totalWeight) > 1./sqrt(12.) ? sqrt(numerator_y/totalWeight): 1./sqrt(12.); }; \ No newline at end of file diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index d5d3db4..759ac57 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -7,6 +7,7 @@ ParticleTrack::ParticleTrack(){ lastAppliedMethod = DEFAULTFITTING; ROOTpol_x = ROOTpol_y = NULL; linefit_x = linefit_y = NULL; + gblTrajectory = NULL; N_points = 0; }; @@ -16,6 +17,7 @@ ParticleTrack::~ParticleTrack(){ delete ROOTpol_y; delete linefit_x; delete linefit_y; + delete gblTrajectory; x.clear(); x_err.clear(); y.clear(); y_err.clear(); z.clear(); z_err.clear(); }; @@ -27,12 +29,19 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ y_err.push_back(sensor->getHitPositionError().second); z.push_back(sensor->getLabZ()+sensor->getIntrinsicHitZPosition()); z_err.push_back(0.0); - particleEnergy.push_back(sensor->getParticleEnergy()); preAbsorber.push_back(sensor->getX0()); + particleEnergy.push_back(sensor->getParticleEnergy()); Energies.push_back(sensor->getTotalEnergy()); + + gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), false, sensor->getLabHitPosition(), sensor->getHitPositionError())); }; +void ParticleTrack::addReferenceSensor(SensorHitMap* sensor) { + referenceSensor = sensor; + gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), true)); +} + void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { //calculate the sum of all Energies first double sum_Energies = 0.0; @@ -71,6 +80,9 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ case POL3TGRAPHERRORS: polFitTGraphErrors(3); break; + case GBLTRACK: + gblTrackFit(); + break; default: lastAppliedMethod = DEFAULTFITTING; break; @@ -82,7 +94,15 @@ void ParticleTrack::fitTrack(TrackFittingMethod method){ } } -std::pair ParticleTrack::calculatePositionXY(double z) { +std::pair ParticleTrack::calculateReferenceXY() { + return ParticleTrack::calculatePositionXY(referenceSensor->getLabZ() + referenceSensor->getIntrinsicHitZPosition(), referenceSensor->label()); +}; + +std::pair ParticleTrack::calculateReferenceErrorXY() { + return ParticleTrack::calculatePositionErrorXY(referenceSensor->getLabZ() + referenceSensor->getIntrinsicHitZPosition(), referenceSensor->label()); +}; + +std::pair ParticleTrack::calculatePositionXY(double z, int layerLabel) { switch(lastAppliedMethod) { case LINEFITANALYTICAL: return positionFromAnalyticalStraightLine(z); @@ -92,11 +112,13 @@ std::pair ParticleTrack::calculatePositionXY(double z) { return positionFromPolFitTGraphErrors(2, z); case POL3TGRAPHERRORS: return positionFromPolFitTGraphErrors(3, z); + case GBLTRACK: + return positionFromGblTrackFit(layerLabel); default: return std::make_pair(0.,0.); } } -std::pair ParticleTrack::calculatePositionErrorXY(double z) { +std::pair ParticleTrack::calculatePositionErrorXY(double z, int layerLabel) { switch(lastAppliedMethod) { case LINEFITANALYTICAL: return positionFromAnalyticalStraightLineErrors(z); @@ -106,6 +128,8 @@ std::pair ParticleTrack::calculatePositionErrorXY(double z) { return positionErrorFromPolFitTGraphErrors(2, z); case POL3TGRAPHERRORS: return positionErrorFromPolFitTGraphErrors(3, z); + case GBLTRACK: + return positionFromGblTrackFitErrors(layerLabel); default: return std::make_pair(0.,0.); } @@ -119,16 +143,110 @@ double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e return sum_Energies; } +void ParticleTrack::gblTrackToMilleBinary(gbl::MilleBinary *milleBinary) { + if (gblTrajectory != NULL) { + gblTrajectory->milleOut(*milleBinary); + } +} + //private functions -void ParticleTrack::gblTrackFit() {}; -std::pair ParticleTrack::positionFromGblTrackFit(double z) { - return std::make_pair(0.0, 0.0); +void ParticleTrack::gblTrackFit() { + std::vector listOfGblPoints; + double z_prev = 0.; + double dz, particleEnergy, layerX0, thetaRMS; + int label; + + std::sort(gblLayers.begin(), gblLayers.end()); + + for (size_t i=0; i labels; labels.push_back(100*label + 11); labels.push_back(100*label + 12); + TMatrixD glder(2, 2); glder[0][0] = glder[1][1] = 1.; glder[0][1] = glder[1][0] = 0.; + point.addGlobals(labels, glder); + } + + listOfGblPoints.push_back(point); + + gblPointLabels[label] = listOfGblPoints.size(); + } + + + gblTrajectory = new gbl::GblTrajectory(listOfGblPoints, false); + + + double chi2, lw; int ndf; + gblTrajectory->fit(chi2, ndf, lw); + //std::cout<<"chi2: "< ParticleTrack::positionFromGblTrackFitErrors(double z) { - return std::make_pair(0.0, 0.0); +std::pair ParticleTrack::positionFromGblTrackFit(int layerLabel) { + TVectorD aCorr(5); + TMatrixDSym aCov(5); + gblTrajectory->getResults(gblPointLabels[layerLabel], aCorr, aCov); + return std::make_pair(aCorr(3), aCorr(4)); }; +std::pair ParticleTrack::positionFromGblTrackFitErrors(int layerLabel) { + TVectorD aCorr(5); + TMatrixDSym aCov(5); + gblTrajectory->getResults(gblPointLabels[layerLabel], aCorr, aCov); + return std::make_pair(sqrt(aCov(3,3)), sqrt(aCov(4,4))); +}; diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 538a3fa..15d15a4 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -3,10 +3,11 @@ import os,sys -#TEST RUN: -#cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 - - +# TEST RUN: +# Simulation: +# cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 +# Real data: +# cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Testbeam isData=true runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 repoFolder = "/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/" @@ -101,11 +102,17 @@ '''Specific options for the position resolution''' options.register('alignmentParameterFile', - "", + '', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Alignment parameter file as obtained from the pede framework.' ) +options.register('fittingMethod', + 'gblTrack', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Model of the electron tracks' + ) options.register('considerationMethod', 'all', VarParsing.VarParsing.multiplicity.singleton, @@ -132,7 +139,7 @@ ) -options.maxEvents = 1000 +options.maxEvents = -1 options.parseArguments() @@ -202,7 +209,11 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') +if not options.isData: + process.hgcaltbclusters.rechitCollection = cms.InputTag("source","","unpack") + process.position_resolution_analyzer.alignmentParameterFile = cms.string(options.alignmentParameterFile) +process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) @@ -213,7 +224,7 @@ if not options.isData: process.position_resolution_analyzer.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) - +process.millepede_binarywriter.fittingMethod = cms.string(options.fittingMethod) process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) process.millepede_binarywriter.weightingMethod = cms.string(options.weightingMethod) process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) @@ -285,6 +296,11 @@ ################Miscellaneous############################################################################## #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) +#add skip event exception which might occur for simulated samples because the last event is not properly passed forward +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') +) + #Using chain sequence 3 only for testing purposes. if options.isData: if (options.chainSequence == 1): From 2efd2861d9154d5de9ff4b9bfd6acc2345366136 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 24 Jan 2017 15:56:17 +0100 Subject: [PATCH 174/297] [gbl tracks] rename theta variable, fix distance of second absorber layer --- Reco/src/Tracks.cc | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index 759ac57..7d3ea07 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -145,6 +145,7 @@ double ParticleTrack::getSumOfEnergies() { //returns the original Energies (i.e void ParticleTrack::gblTrackToMilleBinary(gbl::MilleBinary *milleBinary) { if (gblTrajectory != NULL) { + //std::cout<<"Writing to MilleBinary"<milleOut(*milleBinary); } } @@ -153,7 +154,7 @@ void ParticleTrack::gblTrackToMilleBinary(gbl::MilleBinary *milleBinary) { void ParticleTrack::gblTrackFit() { std::vector listOfGblPoints; double z_prev = 0.; - double dz, particleEnergy, layerX0, thetaRMS; + double dz, particleEnergy, layerX0, thetaRMS_abs;//, thetaRMS_sensor; int label; std::sort(gblLayers.begin(), gblLayers.end()); @@ -164,7 +165,8 @@ void ParticleTrack::gblTrackFit() { layerX0 = gblLayers[i].absorberX0(); label = gblLayers[i].label(); - thetaRMS = (0.0136*sqrt(layerX0)/particleEnergy*(1+0.038*log(layerX0))); //according to PDG formula + thetaRMS_abs = (0.0136*sqrt(layerX0)/particleEnergy*(1+0.038*log(layerX0))); //according to PDG formula + //thetaRMS_sensor = (0.0136*sqrt(0.01)/particleEnergy*(1+0.038*log(0.01))); //according to PDG formula TMatrixD jac_abs1(5, 5); jac_abs1.UnitMatrix(); @@ -174,24 +176,25 @@ void ParticleTrack::gblTrackFit() { TVectorD scat_mean_abs1(2); //mean of kink angle variation scat_mean_abs1.Zero(); TVectorD scat_invResRMS_abs1(2); - scat_invResRMS_abs1[0] = 1./(2.*thetaRMS*thetaRMS); - scat_invResRMS_abs1[1] = 1./(2.*thetaRMS*thetaRMS); + scat_invResRMS_abs1[0] = 1./(2.*thetaRMS_abs*thetaRMS_abs); + scat_invResRMS_abs1[1] = 1./(2.*thetaRMS_abs*thetaRMS_abs); point_abs1.addScatterer(scat_mean_abs1, scat_invResRMS_abs1); listOfGblPoints.push_back(point_abs1); + TMatrixD jac_abs2(5, 5); jac_abs2.UnitMatrix(); - jac_abs2[3][1] = 2*sqrt(2.)*dz; - jac_abs2[4][2] = 2*sqrt(2.)*dz; + jac_abs2[3][1] = 2*sqrt(1./12.)*dz; + jac_abs2[4][2] = 2*sqrt(1./12.)*dz; gbl::GblPoint point_abs2(jac_abs2); TVectorD scat_mean_abs2(2); //mean of kink angle variation scat_mean_abs2.Zero(); TVectorD scat_invResRMS_abs2(2); - scat_invResRMS_abs2[0] = 1./(2.*thetaRMS*thetaRMS); - scat_invResRMS_abs2[1] = 1./(2.*thetaRMS*thetaRMS); + scat_invResRMS_abs2[0] = 1./(2.*thetaRMS_abs*thetaRMS_abs); + scat_invResRMS_abs2[1] = 1./(2.*thetaRMS_abs*thetaRMS_abs); point_abs2.addScatterer(scat_mean_abs2, scat_invResRMS_abs2); listOfGblPoints.push_back(point_abs2); - + //1. Make Jacobian (5x5) from plane i-1 to i TMatrixD jac(5, 5); @@ -200,6 +203,12 @@ void ParticleTrack::gblTrackFit() { jac[4][2] = (0.5-sqrt(1/12.))*dz; //2. initiate the point gbl::GblPoint point(jac); + //TVectorD scat_mean_sensor(2); + //scat_mean_sensor.Zero(); + //TVectorD scat_invResRMS_sensor(2); + //scat_invResRMS_sensor[0] = 1./(thetaRMS_sensor*thetaRMS_sensor); + //scat_invResRMS_sensor[1] = 1./(thetaRMS_sensor*thetaRMS_sensor); + //point.addScatterer(scat_mean_sensor, scat_invResRMS_sensor); if (!gblLayers[i].isReference()) { //3. add measurement From 0f320cfcdd539e4e9ef56475616fe9b60a2a5241 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 24 Jan 2017 19:28:32 +0100 Subject: [PATCH 175/297] [gbl] estimate energies after x radiation lengths for kink angle variance computation --- Reco/interface/Sensors.h | 3 ++ Reco/interface/Tracks.h | 4 +++ Reco/plugins/MillepedeBinaryWriter.cc | 13 ++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 5 ++- Reco/src/Sensors.cc | 9 +++++ Reco/src/Tracks.cc | 36 +++++++++++++++++++- 6 files changed, 63 insertions(+), 7 deletions(-) diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 1ebe56f..8e5eec4 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -58,6 +58,7 @@ class SensorHitMap { double layerX0; double particleEnergy; //approximated energy of the particle at that layer double d_alpha, d_beta, d_gamma, d_x0, d_y0, d_z0; //alignment parameters + double residualResolution; //externally set, from residual histograms int sensorSize; double CM_threshold; double ADC_per_MIP; @@ -89,6 +90,7 @@ class SensorHitMap { void setLabZ(double z_cm, double X0); void setParticleEnergy(double e); void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); + void setResidualResolution(double r); void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); @@ -104,6 +106,7 @@ class SensorHitMap { double getX0(); double getParticleEnergy(); double getIntrinsicHitZPosition(); + double getResidualResolution(); std::pair getHitPosition(); //returns central hit in layer's own frame std::pair getLabHitPosition(); //returns central hit in lab frame std::pair getHitPositionError(); //calculated via RMS diff --git a/Reco/interface/Tracks.h b/Reco/interface/Tracks.h index ebace07..69bc972 100644 --- a/Reco/interface/Tracks.h +++ b/Reco/interface/Tracks.h @@ -10,6 +10,8 @@ #include "TF1.h" #include "TGraphErrors.h" #include "TFitResult.h" +#include "TProfile.h" +#include "TMath.h" #include "HGCal/Reco/interface/PositionResolutionHelpers.h" #include "HGCal/Reco/interface/Sensors.h" @@ -65,6 +67,8 @@ namespace gblhelpers { std::pair _measurementError; }; + double showerProfile(double *t, double *par); + double computeEnergyLoss(double t, double E0); } // diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index d614bb5..16d599b 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -45,8 +45,7 @@ double _config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2. double _config2Positions[] = {1.0, 5.67, 10.84, 15.27, 20.25, 21.4, 26.8, 32.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double _config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer -double sigma_res_x[] = {0.2, 0.15, 0.15, 0.15, 0.17, 0.18, 0.21, 0.25}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) -double sigma_res_y[] = {0.21, 0.16, 0.16, 0.16, 0.18, 0.18, 0.21, 0.26}; //width of residuals in y dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) +double sigma_res[] = {0.205, 0.155, 0.155, 0.155, 0.175, 0.18, 0.21, 0.255}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) /*************/ @@ -275,12 +274,16 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(layer); Sensors[layer]->setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setParticleEnergy(energy); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + Sensors[layer]->setResidualResolution(sigma_res[layer-1]); Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); + + double X0sum = 0; + for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; + Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); } Sensors[layer]->addHit(Rechit); } @@ -377,7 +380,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+1] = 0.; rMeas = x_true - x_predicted; - sigma = sigma_res_x[layer-1]; + sigma = Sensors[layer]->getResidualResolution(); mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); @@ -391,7 +394,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+1] = 1.; rMeas = y_true - y_predicted; - sigma = sigma_res_y[layer-1]; + sigma = Sensors[layer]->getResidualResolution(); mille->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma); } mille->end(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 8e0c002..17d9267 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -296,7 +296,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if ( Sensors.find(layer) == Sensors.end() ) { Sensors[layer] = new SensorHitMap(layer); Sensors[layer]->setPedestalThreshold(pedestalThreshold); - Sensors[layer]->setParticleEnergy(energy); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, @@ -304,6 +303,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); + + double X0sum = 0; + for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; + Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); } Sensors[layer]->addHit(Rechit); } diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index 304c103..667a4e9 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -20,6 +20,7 @@ SensorHitMap::SensorHitMap(int l){ sensorSize = 128; d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; + residualResolution = 0; CM_cells_count = 0; CM_sum = 0.; @@ -57,6 +58,10 @@ void SensorHitMap::setAlignmentParameters(double d_alpha, double d_beta, double this->d_z0 = d_z0; } +void SensorHitMap::setResidualResolution(double r) { + residualResolution = r; +} + void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { this->ADC_per_MIP = ADC_per_MIP; } @@ -220,6 +225,10 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; } +double SensorHitMap::getResidualResolution() { + return residualResolution; +}; + std::pair SensorHitMap::getHitPosition() { return centralHitPoint; } diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index 7d3ea07..e08f215 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -1,5 +1,35 @@ #include "HGCal/Reco/interface/Tracks.h" +//**** gblhelpers ****// +double gblhelpers::showerProfile(double *t, double *par) { + return par[0]*par[2]*(pow(par[2]*t[0], par[1]-1)*exp(-par[2]*t[0]))/TMath::Gamma(par[1]); +} + +double gblhelpers::computeEnergyLoss(double t, double E0) { + double tmax; + if (E0 <= 45.) { + tmax = 5.; + } else if(E0 <= 85.) { + tmax = 7.; + } else if(E0 <= 150.) { + tmax = 8.5; + } else if(E0 <= 225.) { + tmax = 9.5; + } else { + tmax = 10.; + } + + TF1 *profile = new TF1("profile", showerProfile, 0., 50., 3); + profile->SetParameter(0, E0); + profile->SetParameter(1, 0.5*tmax+1); //valid approximation for b ~0.5 yields this a + profile->SetParameter(2, 0.5); + + double integral = profile->Integral(0, t); + delete profile; + return integral; +} + + //**** Particle Tracks ****// //public functions @@ -34,7 +64,11 @@ void ParticleTrack::addFitPoint(SensorHitMap* sensor){ Energies.push_back(sensor->getTotalEnergy()); - gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), false, sensor->getLabHitPosition(), sensor->getHitPositionError())); + //This is for gbl: Check why this has to be set to exactly those values for it to work + std::pair measurementError = sensor->getHitPositionError(); + measurementError.first = sensor->getResidualResolution() ==-1 ? measurementError.first : sensor->getResidualResolution(); + measurementError.second = sensor->getResidualResolution() ==-1 ? measurementError.second : sensor->getResidualResolution(); + gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), false, sensor->getLabHitPosition(), measurementError)); }; void ParticleTrack::addReferenceSensor(SensorHitMap* sensor) { From 457e1ffc8671bc2521c8840060c94587b64866e6 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 25 Jan 2017 09:03:14 +0100 Subject: [PATCH 176/297] [sensors] fix inititalisation of residualResolution variable of Sensor class to -1 --- Reco/src/Sensors.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index 667a4e9..b54c2bc 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -20,7 +20,7 @@ SensorHitMap::SensorHitMap(int l){ sensorSize = 128; d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; - residualResolution = 0; + residualResolution = -1; CM_cells_count = 0; CM_sum = 0.; From 49d5dda153ee7cfab88fe9975caab1c79181af88 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 25 Jan 2017 10:48:07 +0100 Subject: [PATCH 177/297] [geometry] fix (iu, ix)<-->(x,y) conversion --- Geometry/src/HGCalTBCellVertices.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Geometry/src/HGCalTBCellVertices.cc b/Geometry/src/HGCalTBCellVertices.cc index 51a597c..b7ace69 100644 --- a/Geometry/src/HGCalTBCellVertices.cc +++ b/Geometry/src/HGCalTBCellVertices.cc @@ -63,11 +63,15 @@ std::pair HGCalTBCellVertices::GetCellCentreCoordinates(int laye } std::pair HGCalTBCellVertices::GetCellIUIVCoordinates(double x, double y) { - auto unrotated = RotateLayer(std::make_pair(x, y), -TEST_BEAM_LAYER_ROTATION); - double iv = unrotated.second/vy0; - double iu = (unrotated.first - iv*vx0) / x0; + x = -x; - return std::make_pair(-iu, -iv); //why is there a minus? + double X_old = (x) * cos(-TEST_BEAM_LAYER_ROTATION) - (y) * sin(-TEST_BEAM_LAYER_ROTATION); + double Y_old = (x) * sin(-TEST_BEAM_LAYER_ROTATION) + (y) * cos(-TEST_BEAM_LAYER_ROTATION); + + double iv = Y_old/vy0; + double iu = (X_old - iv*vx0) / x0; + + return std::make_pair(iu, iv); //why is there a minus? } double HGCalTBCellVertices::Xmax(int iv, double y) @@ -79,7 +83,7 @@ double HGCalTBCellVertices::Xmax(int iv, double y) std::pair HGCalTBCellVertices::RotateLayer(std::pair Vertex, double Angle) { double X_new = (Vertex.first) * cos(Angle) - (Vertex.second) * sin(Angle); - double Y_new = (Vertex.first) * sin(Angle) - (Vertex.second) * cos(Angle); + double Y_new = (Vertex.first) * sin(Angle) + (Vertex.second) * cos(Angle); return std::make_pair(-X_new, Y_new);// The negative sign for the x coordinate is to account for the TB cartesian coordinate system. } From 3be43b7d4b6757b393ee524aca26a74838296ac9 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 09:06:39 +0100 Subject: [PATCH 178/297] [wafer geometry] alternative calculation of x,y -> iu, iv transformation, alternative implementation of WaferGeometry for real sensor (commented code) --- Geometry/src/HGCalTBCellVertices.cc | 25 ++++++++++++++++++- Reco/interface/WaferGeometry.h | 2 ++ Reco/src/WaferGeometry.cc | 38 +++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Geometry/src/HGCalTBCellVertices.cc b/Geometry/src/HGCalTBCellVertices.cc index b7ace69..efbe0af 100644 --- a/Geometry/src/HGCalTBCellVertices.cc +++ b/Geometry/src/HGCalTBCellVertices.cc @@ -53,16 +53,37 @@ std::pair HGCalTBCellVertices::GetCellCentreCoordinates(int laye double centre_x_tmp = 0., centre_y_tmp = 0.; bool ValidFlag = Top.iu_iv_valid(layer, sensor_iu, sensor_iv, iu, iv, sensorsize); if(ValidFlag) { - centre_x_tmp = iu * x0 + iv * vx0; + /* + double alpha = 30./180. * PI; + double dx = HGCAL_TB_CELL::FULL_CELL_SIDE; + double dy = dx*cos(alpha); + double x = -iv * dx * (1+sin(alpha)); + double y = -dy*(2*iu+iv); + + return std::make_pair(x, y); + */ + + centre_x_tmp = iu * x0 + iv * vx0; centre_y_tmp = iv * vy0; auto point = RotateLayer(std::make_pair(centre_x_tmp, centre_y_tmp), TEST_BEAM_LAYER_ROTATION); // if(flipX==true) point.first = - point.first; return point; + } else return std::make_pair(-123456, -123456); //iu_iv_Valid() is sufficient to decide if a given iu,iv is a valid sensor index but this is done if some future need may arise. } std::pair HGCalTBCellVertices::GetCellIUIVCoordinates(double x, double y) { + double alpha = 30./180. * PI; + double dx = HGCAL_TB_CELL::FULL_CELL_SIDE*cos(alpha); + double dy = dx*cos(alpha); + + double iv = -x/(dx*(1+sin(alpha))); + double iu = (-y/dy - iv)/2.; + + return std::make_pair(iu, iv); + + /* x = -x; double X_old = (x) * cos(-TEST_BEAM_LAYER_ROTATION) - (y) * sin(-TEST_BEAM_LAYER_ROTATION); @@ -72,6 +93,8 @@ std::pair HGCalTBCellVertices::GetCellIUIVCoordinates(double x, double double iu = (X_old - iv*vx0) / x0; return std::make_pair(iu, iv); //why is there a minus? + */ + } double HGCalTBCellVertices::Xmax(int iv, double y) diff --git a/Reco/interface/WaferGeometry.h b/Reco/interface/WaferGeometry.h index ce4863c..3554e17 100644 --- a/Reco/interface/WaferGeometry.h +++ b/Reco/interface/WaferGeometry.h @@ -5,6 +5,8 @@ #include #include #include + +#include "HGCal/Geometry/interface/HGCalTBCellParameters.h" //this code patches the fact that the digitization step of the simulation is not implemented yet diff --git a/Reco/src/WaferGeometry.cc b/Reco/src/WaferGeometry.cc index d1576a8..eb03140 100644 --- a/Reco/src/WaferGeometry.cc +++ b/Reco/src/WaferGeometry.cc @@ -20,12 +20,50 @@ HexGeometry::HexGeometry(bool fine) { for (int ic = 0; ic(xpos,ypos)); } ny += 6; } } +/* +HexGeometry::HexGeometry(bool fine) { + double alpha = 30.0*M_PI/180.0; + + const int nRows(23); //row is along the y-axis, we start iterating from negative values + //http://cms-hgcal.github.io/TestBeam/coordinates_.html + int nColumns[nRows] = {4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8, 7 ,8, 7, 6, 7, 6, 5, 6, 5, 4, 5, 4}; + + + double dx = 2*HGCAL_TB_CELL::FULL_CELL_SIDE * 10; //use the correct dimension of the 133 cell sensor in cm + double dy = dx*cos(alpha); + + + std::cout<<"DX = "<(xpos,ypos)); + std::cout< HexGeometry::position(const int cell) { From 0adfcc0a87066703bed50a69f6480b2c017d7258 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 09:07:24 +0100 Subject: [PATCH 179/297] [wafer geometry] fix number of cells in configuration --- Reco/python/millepede_binarywriter_cfi.py | 2 +- Reco/python/position_resolution_cfi.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/python/millepede_binarywriter_cfi.py b/Reco/python/millepede_binarywriter_cfi.py index 1764b6e..08c2807 100644 --- a/Reco/python/millepede_binarywriter_cfi.py +++ b/Reco/python/millepede_binarywriter_cfi.py @@ -10,7 +10,7 @@ layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), nLayers = cms.int32(8), - SensorSize = cms.int32(128), + SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), RUNDATA = cms.InputTag("source","RunData","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index fe6ac24..a0810a4 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -10,7 +10,7 @@ layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), nLayers = cms.int32(8), - SensorSize = cms.int32(128), + SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), RUNDATA = cms.InputTag("source","RunData","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), From d72c276ce3a597ccc847e726b8abbaa0197a8612 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 12:44:38 +0100 Subject: [PATCH 180/297] [simulated position] add additional rotation by 30 degrees before returning x,y information from the simulation --- Geometry/src/HGCalTBCellVertices.cc | 24 +----------------- RawToDigi/plugins/HGCalTBGenSimSource.cc | 31 +++++++++++++++++++----- RawToDigi/plugins/HGCalTBGenSimSource.h | 4 +++ Reco/src/WaferGeometry.cc | 7 ++++-- test_cfg_newEB.py | 4 ++- 5 files changed, 38 insertions(+), 32 deletions(-) diff --git a/Geometry/src/HGCalTBCellVertices.cc b/Geometry/src/HGCalTBCellVertices.cc index efbe0af..6efee61 100644 --- a/Geometry/src/HGCalTBCellVertices.cc +++ b/Geometry/src/HGCalTBCellVertices.cc @@ -52,17 +52,7 @@ std::pair HGCalTBCellVertices::GetCellCentreCoordinates(int laye { double centre_x_tmp = 0., centre_y_tmp = 0.; bool ValidFlag = Top.iu_iv_valid(layer, sensor_iu, sensor_iv, iu, iv, sensorsize); - if(ValidFlag) { - /* - double alpha = 30./180. * PI; - double dx = HGCAL_TB_CELL::FULL_CELL_SIDE; - double dy = dx*cos(alpha); - double x = -iv * dx * (1+sin(alpha)); - double y = -dy*(2*iu+iv); - - return std::make_pair(x, y); - */ - + if(ValidFlag) { centre_x_tmp = iu * x0 + iv * vx0; centre_y_tmp = iv * vy0; auto point = RotateLayer(std::make_pair(centre_x_tmp, centre_y_tmp), TEST_BEAM_LAYER_ROTATION); @@ -83,18 +73,6 @@ std::pair HGCalTBCellVertices::GetCellIUIVCoordinates(double x, double return std::make_pair(iu, iv); - /* - x = -x; - - double X_old = (x) * cos(-TEST_BEAM_LAYER_ROTATION) - (y) * sin(-TEST_BEAM_LAYER_ROTATION); - double Y_old = (x) * sin(-TEST_BEAM_LAYER_ROTATION) + (y) * cos(-TEST_BEAM_LAYER_ROTATION); - - double iv = Y_old/vy0; - double iu = (X_old - iv*vx0) / x0; - - return std::make_pair(iu, iv); //why is there a minus? - */ - } double HGCalTBCellVertices::Xmax(int iv, double y) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index ae223ee..bb76fc1 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -37,6 +37,8 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In fillConfiguredRuns(map_file); map_file.close(); + geomc = new HexGeometry(false); + tree = 0; } @@ -125,6 +127,7 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& void HGCalTBGenSimSource::produce(edm::Event & event) { + if (fileIterator ==_fileNames.end()) { std::cout<<"End of the files in the producer is reached..."< rechits(new HGCalTBRecHitCollection); + std::map histograms; + for (int layer=1; layer<=8; layer++) { + histograms[layer] = new TH2D(("event_"+std::to_string(currentEvent)+"__layer_"+std::to_string(layer)).c_str(),("event_"+std::to_string(currentEvent)+"__layer_"+std::to_string(layer)).c_str(), 13, -6, 6, 13, -6, 6); + } //given code fragment - HexGeometry geomc(true); for(unsigned int icell=0; icellsize(); icell++){ - int layerno = ((simHitCellIdE->at(icell)>>19)&0x7F); + int layer = ((simHitCellIdE->at(icell)>>19)&0x7F); //int idcell = (simHitCellIdE->at(icell))&0xFF; - double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[layerno-1]; + double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[layer-1]; int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; - std::pair xy = geomc.position(cellno); + std::pair xy = geomc->position(cellno); double x = xy.first / 10.; //values are converted from mm to cm double y = xy.second / 10.; //values are converted from mm to cm + std::pair iuiv = TheCell.GetCellIUIVCoordinates(x, y); - //std::cout<<"x: "< CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! + std::pair iuiv2 = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); + std::cout<<"x: "<push_back(recHit); } @@ -161,6 +177,9 @@ void HGCalTBGenSimSource::produce(edm::Event & event) } +void HGCalTBGenSimSource::endJob() { +} + #include "FWCore/Framework/interface/InputSourceMacros.h" diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index fb3f8fa..840bc73 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -20,6 +20,8 @@ #include "TBranch.h" #include "TTree.h" #include "TDirectory.h" +#include "TH2D.h" +#include "TCanvas.h" /** * * @@ -47,6 +49,7 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles void fillConfiguredRuns(std::fstream& map_file); bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); + virtual void endJob() override; std::string outputCollectionName; @@ -69,6 +72,7 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles TBranch *b_simHitCellEnE; HGCalTBCellVertices TheCell; + HexGeometry* geomc; public: explicit HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc); diff --git a/Reco/src/WaferGeometry.cc b/Reco/src/WaferGeometry.cc index eb03140..24ea387 100644 --- a/Reco/src/WaferGeometry.cc +++ b/Reco/src/WaferGeometry.cc @@ -20,8 +20,11 @@ HexGeometry::HexGeometry(bool fine) { for (int ic = 0; ic(xpos,ypos)); + + double x_rot = cos(30.0*M_PI/180.0) * xpos - sin(30.0*M_PI/180.0) * ypos; + double y_rot = sin(30.0*M_PI/180.0) * xpos + cos(30.0*M_PI/180.0) * ypos; + //std::cout<(x_rot,y_rot)); } ny += 6; } diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 15d15a4..1e57a3e 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -5,7 +5,7 @@ # TEST RUN: # Simulation: -# cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 +# cmsRun test_cfg_newEB.py configuration=1 chainSequence=1 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 # Real data: # cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Testbeam isData=true runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 @@ -320,6 +320,8 @@ elif (options.chainSequence == 9): process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) else: + if (options.chainSequence == 1): + process.p =cms.Path() if (options.chainSequence == 4): process.p =cms.Path(process.hgcaltbrechitsplotter_highgain_new) elif (options.chainSequence == 5): From a8367250db2a5832f785b3e5c7c1270082e39d3d Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 15:04:23 +0100 Subject: [PATCH 181/297] [simulation] add cell types into readout from simulation --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 6 ++- Reco/interface/WaferGeometry.h | 3 ++ Reco/src/WaferGeometry.cc | 67 ++++++++++-------------- 3 files changed, 34 insertions(+), 42 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index bb76fc1..10fc6bd 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -156,11 +156,13 @@ void HGCalTBGenSimSource::produce(edm::Event & event) std::pair xy = geomc->position(cellno); double x = xy.first / 10.; //values are converted from mm to cm double y = xy.second / 10.; //values are converted from mm to cm + int cellType = geomc->cellType(cellno); std::pair iuiv = TheCell.GetCellIUIVCoordinates(x, y); - //std::cout<<"cell number: "< CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! diff --git a/Reco/interface/WaferGeometry.h b/Reco/interface/WaferGeometry.h index 3554e17..67512fb 100644 --- a/Reco/interface/WaferGeometry.h +++ b/Reco/interface/WaferGeometry.h @@ -19,9 +19,12 @@ public : ~HexGeometry(); std::pair position(const int cell); + int cellType(const int cell); + private : std::vector > xypos; + std::vector types; }; diff --git a/Reco/src/WaferGeometry.cc b/Reco/src/WaferGeometry.cc index 24ea387..275f5c1 100644 --- a/Reco/src/WaferGeometry.cc +++ b/Reco/src/WaferGeometry.cc @@ -20,51 +20,30 @@ HexGeometry::HexGeometry(bool fine) { for (int ic = 0; ic(x_rot,y_rot)); - } - ny += 6; - } -} - -/* -HexGeometry::HexGeometry(bool fine) { - double alpha = 30.0*M_PI/180.0; - - const int nRows(23); //row is along the y-axis, we start iterating from negative values - //http://cms-hgcal.github.io/TestBeam/coordinates_.html - int nColumns[nRows] = {4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8, 7 ,8, 7, 6, 7, 6, 5, 6, 5, 4, 5, 4}; - - double dx = 2*HGCAL_TB_CELL::FULL_CELL_SIDE * 10; //use the correct dimension of the 133 cell sensor in cm - double dy = dx*cos(alpha); - - - std::cout<<"DX = "<(xpos,ypos)); - std::cout< HexGeometry::position(const int cell) { return xy; } +int HexGeometry::cellType(const int cell) { + int t = -1; + if (cell >= 0 && cell < (int)(types.size())) { + t = types[cell]; + } + return t; + +} void testGeometry() { From 39282bafbb7f0f75d3e3994750c8a249880187c1 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 17:45:07 +0100 Subject: [PATCH 182/297] [simulation] counter clockwise rotation of coordinate system --- Reco/src/WaferGeometry.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/src/WaferGeometry.cc b/Reco/src/WaferGeometry.cc index 275f5c1..ced7fa5 100644 --- a/Reco/src/WaferGeometry.cc +++ b/Reco/src/WaferGeometry.cc @@ -20,8 +20,8 @@ HexGeometry::HexGeometry(bool fine) { for (int ic = 0; ic(x_rot,y_rot)); int type = 0; From 6894fc2499d63a48648e86dba6e35d28412895f4 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 26 Jan 2017 18:25:11 +0100 Subject: [PATCH 183/297] [energy computation] MIP-ADC conversion factors per skiroc --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 73 ++++++++++++-------- RawToDigi/plugins/HGCalTBGenSimSource.h | 15 +++- Reco/plugins/MillepedeBinaryWriter.cc | 22 +++++- Reco/plugins/Position_Resolution_Analyzer.cc | 23 +++++- Reco/python/millepede_binarywriter_cfi.py | 3 +- Reco/python/position_resolution_cfi.py | 3 +- test_cfg_newEB.py | 1 + 7 files changed, 105 insertions(+), 35 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 10fc6bd..b65a98e 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -37,6 +37,16 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In fillConfiguredRuns(map_file); map_file.close(); + + _e_mapFile = pset.getParameter("e_mapFile_CERN"); + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_e_mapFile); + + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + + geomc = new HexGeometry(false); tree = 0; @@ -115,7 +125,7 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& currentRun = -1; setRunAndEventInfo(id, time, evType); } - + tree->GetEntry(currentEvent); currentEvent++; @@ -127,7 +137,6 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& void HGCalTBGenSimSource::produce(edm::Event & event) { - if (fileIterator ==_fileNames.end()) { std::cout<<"End of the files in the producer is reached..."< rechits(new HGCalTBRecHitCollection); - std::map histograms; - for (int layer=1; layer<=8; layer++) { - histograms[layer] = new TH2D(("event_"+std::to_string(currentEvent)+"__layer_"+std::to_string(layer)).c_str(),("event_"+std::to_string(currentEvent)+"__layer_"+std::to_string(layer)).c_str(), 13, -6, 6, 13, -6, 6); - } //given code fragment for(unsigned int icell=0; icellsize(); icell++){ - int layer = ((simHitCellIdE->at(icell)>>19)&0x7F); - //int idcell = (simHitCellIdE->at(icell))&0xFF; - - double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[layer-1]; + int layer = ((simHitCellIdE->at(icell)>>19)&0x7F); + //int idcell = (simHitCellIdE->at(icell))&0xFF; - int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; - std::pair xy = geomc->position(cellno); - double x = xy.first / 10.; //values are converted from mm to cm - double y = xy.second / 10.; //values are converted from mm to cm - int cellType = geomc->cellType(cellno); - std::pair iuiv = TheCell.GetCellIUIVCoordinates(x, y); - - //std::cout<<"cell number: "<at(icell)>>0)&0xFF; + std::pair xy = geomc->position(cellno); + double x = xy.first / 10.; //values are converted from mm to cm + double y = xy.second / 10.; //values are converted from mm to cm + int cellType = geomc->cellType(cellno); + + std::pair iuiv = TheCell.GetCellIUIVCoordinates(x, y); + + + HGCalTBRecHit recHit(HGCalTBDetId(layer, 0, 0, iuiv.first, iuiv.second, cellType), 0., 0., 0., 0); + + /* Back and forth computation, if correct: Numbers should be identical! + std::pair CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! + std::pair iuiv2 = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); + std::cout<<"x: "< 0 ? eid.iskiroc() - 1 : 0; + + double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[skiRocIndex]; - /* Back and forth computation, if correct: Numbers should be identical! - std::pair CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! - std::pair iuiv2 = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); - std::cout<<"x: "<push_back(recHit); + recHit.setEnergy(energy); + recHit._energyLow = energy; + recHit._energyHigh = energy; + + rechits->push_back(recHit); } event.put(rechits, outputCollectionName); diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index 840bc73..df958d7 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -3,6 +3,9 @@ #include "FWCore/Sources/interface/ProducerSourceFromFiles.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" @@ -20,8 +23,6 @@ #include "TBranch.h" #include "TTree.h" #include "TDirectory.h" -#include "TH2D.h" -#include "TCanvas.h" /** * * @@ -29,9 +30,14 @@ * * **/ -double ADCtoMIP_CERN[16] = {17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32, 1., 1., 1., 1., 1., 1., 1., 1.}; +double ADCtoMIP_CERN[16] = {17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66}; double MIP2GeV_sim = 51.91e-06; //mpv muon EMM pysics list +//must be a globally available variable, otherwise a segmentation fault is thrown +struct { + HGCalElectronicsMap emap_; +} essource_; + struct FileInfo { int index; @@ -71,6 +77,9 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles TBranch *b_simHitCellIdE; TBranch *b_simHitCellEnE; + //getting the required electronic mapping + std::string _e_mapFile; + HGCalTBCellVertices TheCell; HexGeometry* geomc; diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 16d599b..27205e5 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -23,6 +23,9 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" @@ -61,6 +64,11 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer HGCalTBRecHitCollection_Token; edm::EDGetToken HGCalTBClusterCollection_Token; edm::EDGetToken HGCalTBClusterCollection7_Token; @@ -106,6 +114,14 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer("e_mapFile_CERN"); + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_e_mapFile); + + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); @@ -278,8 +294,12 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); Sensors[layer]->setResidualResolution(sigma_res[layer-1]); - Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); + + uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); + HGCalTBElectronicsId eid(EID); + int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; + Sensors[layer]->setADCPerMIP(ADC_per_MIP[skiRocIndex]); double X0sum = 0; for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 17d9267..683c5ef 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -27,6 +27,9 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" @@ -58,6 +61,11 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer fs; edm::EDGetTokenT HGCalTBRecHitCollection_Token; @@ -107,7 +115,16 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer("e_mapFile_CERN"); + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_e_mapFile); + + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + usesResource("TFileService"); HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); @@ -301,9 +318,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); - Sensors[layer]->setADCPerMIP(ADC_per_MIP[layer-1]); Sensors[layer]->setSensorSize(SensorSize); + uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); + HGCalTBElectronicsId eid(EID); + int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; + Sensors[layer]->setADCPerMIP(ADC_per_MIP[skiRocIndex]); + double X0sum = 0; for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); diff --git a/Reco/python/millepede_binarywriter_cfi.py b/Reco/python/millepede_binarywriter_cfi.py index 08c2807..01fb316 100644 --- a/Reco/python/millepede_binarywriter_cfi.py +++ b/Reco/python/millepede_binarywriter_cfi.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms millepede_binarywriter = cms.EDAnalyzer("MillepedeBinaryWriter", + e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), binaryFile = cms.string('~/millebin.bin'), considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), @@ -8,7 +9,7 @@ fitPointWeightingMethod = cms.string('none'), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), - ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), + ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]), nLayers = cms.int32(8), SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index a0810a4..acd21be 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -1,6 +1,7 @@ import FWCore.ParameterSet.Config as cms position_resolution_analyzer = cms.EDAnalyzer("Position_Resolution_Analyzer", + e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), alignmentParameterFile = cms.string(''), considerationMethod = cms.string('all'), weightingMethod = cms.string('squaredWeighting'), @@ -8,7 +9,7 @@ fitPointWeightingMethod = cms.string('none'), pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), - ADC_per_MIP = cms.vdouble([17.24, 16.92, 17.51, 16.4, 17.35, 17.49, 16.29, 16.32]), + ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]), nLayers = cms.int32(8), SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 1e57a3e..2eed72f 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -190,6 +190,7 @@ else: process.source = cms.Source("HGCalTBGenSimSource", OutputCollectionName = cms.string(''), + e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered From 6c3222c476e959140751f3e8b92bfc57ed706b26 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 27 Jan 2017 13:50:29 +0100 Subject: [PATCH 184/297] [input plugin] add counter map to show number of processed events per run at the end --- RawToDigi/plugins/HGCalTBTextSource.cc | 11 +++++++++++ RawToDigi/plugins/HGCalTBTextSource.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index e21af5e..a4dfab8 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -176,6 +176,12 @@ void HGCalTBTextSource::produce(edm::Event & event) rd->runType = "-1"; rd->run = -1; } + + if (eventsPerRun.find(m_run) == eventsPerRun.end()) { + eventsPerRun[m_run] = 0; + } + eventsPerRun[m_run]++; + event.put(std::move(rd), "RunData"); @@ -213,6 +219,11 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip descriptions.add("source", desc); } +void HGCalTBTextSource::endJob() { + for (std::map::iterator it = eventsPerRun.begin(); it != eventsPerRun.end(); it++) { + std::cout<first<<": "<second< eventsPerRun; }; From e60883d89090346b409302e89474b9cf18e4bff5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 27 Jan 2017 13:58:05 +0100 Subject: [PATCH 185/297] [sensors] add public function to manually set the center position information --- Reco/interface/Sensors.h | 1 + Reco/src/Sensors.cc | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 8e5eec4..139149f 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -88,6 +88,7 @@ class SensorHitMap { ~SensorHitMap(); int label() {return _label;}; void setLabZ(double z_cm, double X0); + void setCenterHitPosition(double x, double y, double x_err, double y_err); void setParticleEnergy(double e); void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); void setResidualResolution(double r); diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index b54c2bc..c3fb737 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -40,6 +40,15 @@ void SensorHitMap::setSensorSize(int s) { sensorSize = s; } +void SensorHitMap::setCenterHitPosition(double x, double y, double x_err, double y_err) { + centralHitPoint.first = x; + centralHitPoint.second = y; + centralHitPointError.first = x_err; + centralHitPointError.second = y_err; + + centralHitZ = -d_gamma*centralHitPoint.first - d_beta*centralHitPoint.second; +} + void SensorHitMap::setLabZ(double z_cm, double X0) { this->layerLabZ = z_cm; this->layerX0 = X0; From d034051c2ad925040f47dd9d5a16cc0f3dd6df56 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 27 Jan 2017 16:32:37 +0100 Subject: [PATCH 186/297] [source module] also read in MWC information and add to the collections --- .../interface/HGCalTBMultiWireChamberData.h | 16 ++++ DataFormats/src/classes.h | 5 ++ DataFormats/src/classes_def.xml | 6 ++ RawToDigi/plugins/HGCalTBTextSource.cc | 76 ++++++++++++++++--- RawToDigi/plugins/HGCalTBTextSource.h | 9 +++ 5 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 DataFormats/interface/HGCalTBMultiWireChamberData.h diff --git a/DataFormats/interface/HGCalTBMultiWireChamberData.h b/DataFormats/interface/HGCalTBMultiWireChamberData.h new file mode 100644 index 0000000..dfdc987 --- /dev/null +++ b/DataFormats/interface/HGCalTBMultiWireChamberData.h @@ -0,0 +1,16 @@ +#ifndef HGCalTBMultiWireChamberData_H +#define HGCalTBMultiWireChamberData_H + +struct MultiWireChamberData { + explicit MultiWireChamberData(int _ID, double _x, double _y, double _z): ID(_ID), x(_x), y(_y), z(_z) {}; + MultiWireChamberData(): ID(1), x(0), y(0), z(0) {}; + int ID; + double x; + double y; + double z; +}; + +typedef std::vector MultiWireChambers; + + +#endif \ No newline at end of file diff --git a/DataFormats/src/classes.h b/DataFormats/src/classes.h index 5735b23..4b9f896 100644 --- a/DataFormats/src/classes.h +++ b/DataFormats/src/classes.h @@ -5,6 +5,7 @@ #include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" #include "HGCal/DataFormats/interface/HGCalTBTrackCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "DataFormats/Common/interface/RefProd.h" #include "DataFormats/Common/interface/Wrapper.h" @@ -29,6 +30,10 @@ struct dictionary { RunData _aRunData; edm::Wrapper _aRunDataWrapper; + MultiWireChamberData _aMultiWireChamberData; + std::vector _aMultiWireChamberDataVector; + edm::Wrapper __aMultiWireChamberDataWrapper; + HGCalTBTrack _aTrack; std::vector _HGCTBTRackVect; // edm::Wrapper< HGCalTBTrackCollection > _HGCTBTrackProd; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index dbe350b..ca96415 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -22,4 +22,10 @@ + + + + + + diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index a4dfab8..66dcffc 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -8,6 +8,8 @@ T 0x0072D911 0xBEC20B15 T 0x0072D93F 0xBED19F54 T 0x0072D96E 0xBED19F56 T 0x0072 0x118F11BD 0x1081108D 0x11A511B7 0x118A108C 0x119311F2 0x119F1195 0x109E109E 0x1083108D 0x118D11F2 0x11FD1198 0x11881195 0x118D1196 0x11911190 0x1193118A 0x1088109F 0x118C118A */ + +//it is crucial that the format of the configuration file is respected! void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { std::string run_prefix; std::string filePath; @@ -15,21 +17,22 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { //perform the loop and fill configuredRuns char fragment[100]; int readCounter = 0; - int _run = 0, _configuration = 0; double _energy = 0; std::string _runType = ""; + int _run = 0, _mwcrun = 0, _configuration = 0; double _energy = 0; std::string _runType = ""; while (map_file.is_open() && !map_file.eof()) { readCounter++; map_file >> fragment; - if (readCounter <= 4) continue; //skip the header - else if (readCounter % 4 == 1) { + if (readCounter <= 5) continue; //skip the header + else if (readCounter % 5 == 1) { if (((std::string)fragment).find("//") == std::string::npos) //skip comments of form // _run = atoi(fragment); else - readCounter = 1; + readCounter = 1; //artificially mimics the line as a header } - else if (readCounter % 4 == 2) _energy = atof(fragment); - else if (readCounter % 4 == 3) _runType = (std::string)fragment; - else if (readCounter % 4 == 0) { + else if (readCounter % 5 == 2) _mwcrun = atoi(fragment); + else if (readCounter % 5 == 3) _energy = atof(fragment); + else if (readCounter % 5 == 4) _runType = (std::string)fragment; + else if (readCounter % 5 == 0) { _configuration = atoi(fragment); //store configuredRuns[_run].energy = _energy; @@ -46,15 +49,52 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { filePath = inputPathFormat; - filePath.replace(filePath.find(""), 5, run_prefix+std::to_string(_run)); - std::cout<<"Adding "<"), 5, std::to_string(_mwcrun)); + filePath.replace(filePath.find("file:"), 5, ""); + std::cout<<"Adding MWC file "<> fragment; + double x1 = atof(fragment); + mwc_file >> fragment; + double x2 = atof(fragment); + mwc_file >> fragment; + double y1 = atof(fragment); + mwc_file >> fragment; + double y2 = atof(fragment); + + if (mwc_file.eof()) + break; + + _mwcs.push_back(MultiWireChamberData(1, x1, y1, -126.-147.)); + _mwcs.push_back(MultiWireChamberData(2, x2, y2, -147.)); + EventMultiWireChambers.push_back(_mwcs); + mwcCounter++; + + } + + std::cout< mwcs(new MultiWireChambers); + for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { + mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); + } + mwcCounter++; + if(mwcs->size() > 0) + event.put(std::move(mwcs), "MultiWireChambers"); + } + + std::auto_ptr bare_product(new FEDRawDataCollection()); // here we parse the data std::vector skiwords; @@ -214,6 +269,7 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.addUntracked("run", 101); desc.addUntracked >("fileNames"); desc.addUntracked("inputPathFormat"); + desc.addUntracked("MWCInputPathFormat"); desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); descriptions.add("source", desc); diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 492767d..3815bc9 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -4,6 +4,7 @@ #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include @@ -33,6 +34,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles currentFileIndex(-1), newFileIndex(0), inputPathFormat(""), + MWCInputPathFormat(""), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) { @@ -40,6 +42,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles m_sourceId = pset.getUntrackedParameter("fed", 1000); /// \todo check and read from file? produces(); produces("RunData"); + produces("MultiWireChambers"); if (fileNames()[0] != "file:DUMMY") { _fileNames = fileNames(); @@ -47,6 +50,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles //find and fill the configured runs runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat"); std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); @@ -67,6 +71,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles int currentFileIndex; //index of the current file int newFileIndex; void fillConfiguredRuns(std::fstream& map_file); + void readMWCDataFromFile(std::string filepath); bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); virtual void endJob() override; @@ -75,10 +80,14 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles runMap configuredRuns; std::string runEnergyMapFile; std::string inputPathFormat; + std::string MWCInputPathFormat; std::vector _fileNames; + std::vector _MWCFileNames; + int mwcCounter; std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; + std::vector EventMultiWireChambers; unsigned int m_time; unsigned int m_event, m_run, m_spill, max_boards; unsigned int NSpills;//Read while running how many spills we wish to run over From 3b4cfeb83e394f87ba2f2dac2dd382ce505149f3 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 30 Jan 2017 15:49:16 +0100 Subject: [PATCH 187/297] [track fitting] remove unnecessary TF1 fitting call --- Reco/src/Tracks.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index e08f215..499e1aa 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -305,7 +305,6 @@ void ParticleTrack::analyticalStraightLineFit() { linefit_x->fit(); linefit_y->fit(); - polFitTGraphErrors(1); }; std::pair ParticleTrack::positionFromAnalyticalStraightLine(double z) { From 6533056f2eaeb3bacd8460332d5c350c71e2ce40 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 31 Jan 2017 17:26:09 +0100 Subject: [PATCH 188/297] [simSource] inititalize vectors as 0 pointers --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index b65a98e..ae1144b 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -46,10 +46,11 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In throw cms::Exception("Unable to load electronics map"); }; - geomc = new HexGeometry(false); tree = 0; + simHitCellIdE = 0; + simHitCellEnE = 0; } void HGCalTBGenSimSource::fillConfiguredRuns(std::fstream& map_file) { @@ -106,18 +107,19 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& if (currentRun == -1) { //initial loading of a file currentRun = (*fileIterator).index; + currentEvent = 0; /* if (rootFile != NULL) delete rootFile; - */ + */ - rootFile = new TFile(((*fileIterator).name).c_str()); - dir = (TDirectory*)rootFile->FindObjectAny("HGCalTBAnalyzer"); - tree = (TTree*)dir->Get("HGCTB"); + rootFile = new TFile(((*fileIterator).name).c_str()); + dir = (TDirectory*)rootFile->FindObjectAny("HGCalTBAnalyzer"); + tree = (TTree*)dir->Get("HGCTB"); - tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); - tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); + tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); + tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); } if (currentEvent == tree->GetEntries()) { @@ -125,7 +127,7 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& currentRun = -1; setRunAndEventInfo(id, time, evType); } - + tree->GetEntry(currentEvent); currentEvent++; @@ -191,7 +193,6 @@ void HGCalTBGenSimSource::produce(edm::Event & event) rechits->push_back(recHit); } - event.put(rechits, outputCollectionName); } From 5e7fa959d61e57e38aeca9d1eff4695fbb7f22b1 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 31 Jan 2017 17:40:26 +0100 Subject: [PATCH 189/297] [position resolution] remove unnecessary Nlayer variable --- Reco/plugins/Position_Resolution_Analyzer.cc | 28 +++++++------------- Reco/python/position_resolution_cfi.py | 1 - Reco/src/Sensors.cc | 4 ++- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 683c5ef..27d54fb 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -87,7 +87,6 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer Layer_Z_X0s; std::vector ADC_per_MIP; int LayersConfig; - int nLayers; int SensorSize; double totalEnergyThreshold; @@ -223,7 +222,6 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); - nLayers = iConfig.getParameter("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); @@ -300,8 +298,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //opening Clusters (made from all, closest 7, closest 9) edm::Handle clusters; - edm::Handle clusters7; - edm::Handle clusters19; + edm::Handle clusters7; + edm::Handle clusters19; event.getByToken(HGCalTBClusterCollection_Token, clusters); event.getByToken(HGCalTBClusterCollection7_Token, clusters7); event.getByToken(HGCalTBClusterCollection19_Token, clusters19); @@ -367,7 +365,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E return; } - //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { //subtract common first @@ -379,12 +376,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E it->second->calculateCenterPosition(considerationMethod, weightingMethod); } - //step 3: fill particle tracks std::map Tracks; //the integer index indicates which layer is omitted in the track calculation - for (int i=1; i<=nLayers; i++) { + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + int i = it->first; Tracks[i] = new ParticleTrack(); - for (int j=1; j<=nLayers; j++) { + for (std::map::iterator jt=Sensors.begin(); jt!=Sensors.end(); jt++) { + int j = jt->first; if (i==j) { Tracks[i]->addReferenceSensor(Sensors[i]); continue; @@ -394,22 +392,20 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Tracks[i]->weightFitPoints(fitPointWeightingMethod); Tracks[i]->fitTrack(fittingMethod); } - + //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position layerZ_X0 = 0; - for (layer=1; layer<=nLayers; layer++) { + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { + layer = it->first; layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 += Sensors[layer]->getX0(); - std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); x_predicted = position_predicted.first; y_predicted = position_predicted.second; - std::pair position_predicted_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_predicted); x_predicted_to_closest_cell = position_predicted_to_closest_cell.first; y_predicted_to_closest_cell = position_predicted_to_closest_cell.second; - std::pair position_error_predicted = Tracks[layer]->calculateReferenceErrorXY(); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; @@ -424,15 +420,12 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::pair position_true = Sensors[layer]->getLabHitPosition(); x_true = position_true.first; y_true = position_true.second; - std::pair position_true_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_true); x_true_to_closest_cell = position_true_to_closest_cell.first; y_true_to_closest_cell = position_true_to_closest_cell.second; - std::pair position_error_true = Sensors[layer]->getHitPositionError(); x_true_err = position_error_true.first; y_true_err = position_error_true.second; - deltaX = x_true - x_predicted; deltaY = y_true - y_predicted; deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); @@ -453,15 +446,14 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E outTree->Fill(); } + for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { delete (*it).second; }; Sensors.clear(); - for(std::map::iterator it=Tracks.begin(); it!=Tracks.end(); it++) { delete (*it).second; }; Tracks.clear(); - }// analyze ends here void Position_Resolution_Analyzer::beginJob() { diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index acd21be..18211c1 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -10,7 +10,6 @@ pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]), - nLayers = cms.int32(8), SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), RUNDATA = cms.InputTag("source","RunData","unpack" ), diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index c3fb737..7028baa 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -266,7 +266,9 @@ std::pair SensorHitMap::getCenterOfClosestCell(std::pairx, to_sort[0].second->y); + + if (to_sort.size()==0) return std::make_pair(-1, -1); + else return std::make_pair(to_sort[0].second->x, to_sort[0].second->y); } double SensorHitMap::getTotalEnergy() { From 993e267525bf7e9d498ea6547aef04e5e1c6819e Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 31 Jan 2017 17:41:18 +0100 Subject: [PATCH 190/297] [alignment] fill sensors up to NLayers in case individual layers do not have hits (e.g. in simulation) --- Reco/plugins/MillepedeBinaryWriter.cc | 47 +++++++++++++++++---------- test_cfg_newEB.py | 4 +++ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 27205e5..33c4ea4 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -1,5 +1,5 @@ /* - * Write out residuals and derivatives to pass forward to millepede. + * Write out residuals and derivatives to pass forward to millepede. Relies on the fact that all layers have proper hits. */ /** @@ -118,30 +118,30 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { HGCalCondObjectTextIO io(0); edm::FileInPath fip(_e_mapFile); - if (!io.load(fip.fullPath(), essource_.emap_)) { + if (!io.load(fip.fullPath(), essource_.emap_)) { throw cms::Exception("Unable to load electronics map"); }; HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); - HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); - HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); - HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); + HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); //read the cell consideration option to calculate the central hit point std::string methodString = iConfig.getParameter("considerationMethod"); if (methodString == "all") - considerationMethod = CONSIDERALL; - else if (methodString == "closest7") - considerationMethod = CONSIDERSEVEN; - else if (methodString == "closest19") - considerationMethod = CONSIDERNINETEEN; - else if(methodString == "clustersAll") - considerationMethod = CONSIDERCLUSTERSALL; - else if(methodString == "clusters7") - considerationMethod = CONSIDERCLUSTERSSEVEN; - else if(methodString == "clusters19") - considerationMethod = CONSIDERCLUSTERSNINETEEN; + considerationMethod = CONSIDERALL; + else if (methodString == "closest7") + considerationMethod = CONSIDERSEVEN; + else if (methodString == "closest19") + considerationMethod = CONSIDERNINETEEN; + else if(methodString == "clustersAll") + considerationMethod = CONSIDERCLUSTERSALL; + else if(methodString == "clusters7") + considerationMethod = CONSIDERCLUSTERSSEVEN; + else if(methodString == "clusters19") + considerationMethod = CONSIDERCLUSTERSNINETEEN; //read the weighting method to obtain the central hit point methodString = iConfig.getParameter("weightingMethod"); @@ -351,7 +351,20 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet it->second->calculateCenterPosition(considerationMethod, weightingMethod); } - //step 3: fill particle tracks + //step 3: fill all remaining layers that do not have any hits (e.g. in simulation with low energetic electrons) + for (int layer=1; layer<=nLayers; layer++) { + if (Sensors.find(layer)==Sensors.end()) { + Sensors[layer] = new SensorHitMap(layer); + + double X0sum = 0; + for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; + Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); + + Sensors[layer]->setCenterHitPosition(0, 0, 12./sqrt(12.), 12./sqrt(12.)); + } + } + + //step 4: fill particle tracks Track = new ParticleTrack(); for (int i=1; i<=nLayers; i++) { Track->addFitPoint(Sensors[i]); diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 2eed72f..a5b058d 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -183,6 +183,7 @@ process.source = cms.Source("HGCalTBTextSource", runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), + MWCInputPathFormat=cms.untracked.string("file:%s/WC_H4Run.txt"%options.dataFolder), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) nSpills=cms.untracked.uint32(options.nSpills), @@ -233,6 +234,9 @@ process.millepede_binarywriter.totalEnergyThreshold = -1000. process.millepede_binarywriter.binaryFile = "%s/%s_MillepedeBinary_%s.bin"%(options.outputFolder,options.runType,options.outputPostfix) +if not options.isData: + process.millepede_binarywriter.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) + process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) From 9a49adbebf6d37e97bf61f6021e3a0468c852ac8 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 10:32:54 +0100 Subject: [PATCH 191/297] [simulation formatter] read in fake MWC information from xBeam, yBeam plus some Gaussian smearing by 50 microns --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 25 ++++++++++++++++++- RawToDigi/plugins/HGCalTBGenSimSource.h | 31 +++++++++++++++--------- test_cfg_newEB.py | 5 ++-- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index ae1144b..f86d521 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -13,9 +13,11 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In outputCollectionName = pset.getParameter("OutputCollectionName"); runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + smearingResolution = pset.getParameter("MWCSmearingResolution")/1000.; //configuration is in microns, convert to cm produces (outputCollectionName); produces("RunData"); + produces("MultiWireChambers"); if (fileNames()[0] != "file:DUMMY") { @@ -51,6 +53,11 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In tree = 0; simHitCellIdE = 0; simHitCellEnE = 0; + beamX = 0; + beamY = 0; + + + MWCSmearer = new TRandom(); } void HGCalTBGenSimSource::fillConfiguredRuns(std::fstream& map_file) { @@ -120,7 +127,9 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); - } + tree->SetBranchAddress("xBeam", &beamX, &b_beamX); + tree->SetBranchAddress("yBeam", &beamY, &b_beamY); + } if (currentEvent == tree->GetEntries()) { fileIterator++; @@ -195,9 +204,23 @@ void HGCalTBGenSimSource::produce(edm::Event & event) } event.put(rechits, outputCollectionName); + + //add the multi-wire chambers only if available + double x1_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); + double y1_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); + double x2_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); + double y2_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); + + std::auto_ptr mwcs(new MultiWireChambers); + mwcs->push_back(MultiWireChamberData(1, x1_mc, y1_mc, -126.-147.)); + mwcs->push_back(MultiWireChamberData(2, x2_mc, y2_mc, -147.)); + + event.put(std::move(mwcs), "MultiWireChambers"); + } void HGCalTBGenSimSource::endJob() { + delete MWCSmearer; } diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index df958d7..e83e958 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -8,6 +8,7 @@ #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" #include "HGCal/Reco/interface/WaferGeometry.h" @@ -23,6 +24,7 @@ #include "TBranch.h" #include "TTree.h" #include "TDirectory.h" +#include "TRandom.h" /** * * @@ -55,7 +57,7 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles void fillConfiguredRuns(std::fstream& map_file); bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); virtual void produce(edm::Event & e); - virtual void endJob() override; + virtual void endJob() override; std::string outputCollectionName; @@ -69,19 +71,26 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles int currentEvent; TFile *rootFile; - TTree *tree; //!pointer to the analyzed TTree or TChain - TDirectory *dir; + TTree *tree; //!pointer to the analyzed TTree or TChain + TDirectory *dir; - std::vector *simHitCellIdE; - std::vector *simHitCellEnE; - TBranch *b_simHitCellIdE; - TBranch *b_simHitCellEnE; + std::vector *simHitCellIdE; + std::vector *simHitCellEnE; + double beamX; + double beamY; + TBranch *b_simHitCellIdE; + TBranch *b_simHitCellEnE; + TBranch *b_beamX; + TBranch *b_beamY; - //getting the required electronic mapping - std::string _e_mapFile; + //getting the required electronic mapping + std::string _e_mapFile; - HGCalTBCellVertices TheCell; - HexGeometry* geomc; + HGCalTBCellVertices TheCell; + HexGeometry* geomc; + + TRandom* MWCSmearer; + double smearingResolution; public: explicit HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc); diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index a5b058d..9bdfbc6 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -139,7 +139,7 @@ ) -options.maxEvents = -1 +options.maxEvents = 10 options.parseArguments() @@ -194,7 +194,8 @@ e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), - fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered, + MWCSmearingResolution=cms.double(50.) #value is in microns! ) From 318937febc8112d924af8cc11e359d842ea28fa4 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 11:04:48 +0100 Subject: [PATCH 192/297] [MWC] add valid MWC measurement flag to the rundata --- DataFormats/interface/HGCalTBRunData.h | 1 + RawToDigi/plugins/HGCalTBGenSimSource.cc | 33 ++++++++----- RawToDigi/plugins/HGCalTBTextSource.cc | 63 ++++++++++++++---------- 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index e6bff74..c9699cd 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -9,6 +9,7 @@ struct RunData { int run; double energy; std::string runType; + bool hasValidMWCMeasurment; }; typedef std::map runMap; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index f86d521..84a360f 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -152,21 +152,14 @@ void HGCalTBGenSimSource::produce(edm::Event & event) std::cout<<"End of the files in the producer is reached..."< rd(new RunData); - rd->energy = (*fileIterator).energy; - rd->configuration = (*fileIterator).config; - rd->runType = (*fileIterator).runType; - rd->run = (*fileIterator).index; - event.put(std::move(rd), "RunData"); + + //first: fill the rechits std::auto_ptr rechits(new HGCalTBRecHitCollection); - //given code fragment for(unsigned int icell=0; icellsize(); icell++){ int layer = ((simHitCellIdE->at(icell)>>19)&0x7F); - //int idcell = (simHitCellIdE->at(icell))&0xFF; - - + int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; std::pair xy = geomc->position(cellno); double x = xy.first / 10.; //values are converted from mm to cm @@ -205,7 +198,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) event.put(rechits, outputCollectionName); - //add the multi-wire chambers only if available + //second: add fake multi-wire chambers from xBeam, yBeam double x1_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); double y1_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); double x2_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); @@ -217,6 +210,24 @@ void HGCalTBGenSimSource::produce(edm::Event & event) event.put(std::move(mwcs), "MultiWireChambers"); + + //third: fill the run data + std::auto_ptr rd(new RunData); + rd->energy = (*fileIterator).energy; + rd->configuration = (*fileIterator).config; + rd->runType = (*fileIterator).runType; + rd->run = (*fileIterator).index; + + bool _hasValidMWCMeasurement = true; + _hasValidMWCMeasurement = (x1_mc != -99.9) && _hasValidMWCMeasurement; + _hasValidMWCMeasurement = (y1_mc != -99.9) && _hasValidMWCMeasurement; + _hasValidMWCMeasurement = (x2_mc != -99.9) && _hasValidMWCMeasurement; + _hasValidMWCMeasurement = (y2_mc != -99.9) && _hasValidMWCMeasurement; + rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; + + event.put(std::move(rd), "RunData"); + + } void HGCalTBGenSimSource::endJob() { diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 66dcffc..83dd058 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -65,20 +65,20 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { EventMultiWireChambers.clear(); mwcCounter = 0; - std::fstream mwc_file; mwc_file.open(filepath.c_str(), std::fstream::in); + std::cout<<"Opening "<> fragment; - double x1 = atof(fragment); + double x1 = atof(fragment)/10.; //values are given in mm and are converted to cm here mwc_file >> fragment; - double x2 = atof(fragment); + double x2 = atof(fragment)/10.; //values are given in mm and are converted to cm here mwc_file >> fragment; - double y1 = atof(fragment); + double y1 = atof(fragment)/10.; //values are given in mm and are converted to cm here mwc_file >> fragment; - double y2 = atof(fragment); + double y2 = atof(fragment)/10.; //values are given in mm and are converted to cm here if (mwc_file.eof()) break; @@ -206,40 +206,25 @@ bool HGCalTBTextSource::readLines() void HGCalTBTextSource::produce(edm::Event & event) { - //add energy and configuration here - std::auto_ptr rd(new RunData); - if (configuredRuns.find(m_run) != configuredRuns.end()) { - rd->energy = configuredRuns[m_run].energy; - rd->configuration = configuredRuns[m_run].configuration; - rd->runType = configuredRuns[m_run].runType; - rd->run = m_run; - } else { - rd->energy = -1; - rd->configuration = -1; - rd->runType = "-1"; - rd->run = -1; - } - - if (eventsPerRun.find(m_run) == eventsPerRun.end()) { - eventsPerRun[m_run] = 0; - } - eventsPerRun[m_run]++; - - event.put(std::move(rd), "RunData"); - - //add the multi-wire chambers only if available + bool _hasValidMWCMeasurement = true; if (mwcCounter < (int)EventMultiWireChambers.size()) { std::auto_ptr mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); + std::cout<size() > 0) event.put(std::move(mwcs), "MultiWireChambers"); + } else { + _hasValidMWCMeasurement = false; } + //add the DAQ data std::auto_ptr bare_product(new FEDRawDataCollection()); // here we parse the data std::vector skiwords; @@ -258,6 +243,30 @@ void HGCalTBTextSource::produce(edm::Event & event) fed.resize(len); memcpy(fed.data(), &(skiwords[0]), len); event.put(bare_product); + + + + //add the RunData + std::auto_ptr rd(new RunData); + if (configuredRuns.find(m_run) != configuredRuns.end()) { + rd->energy = configuredRuns[m_run].energy; + rd->configuration = configuredRuns[m_run].configuration; + rd->runType = configuredRuns[m_run].runType; + rd->run = m_run; + } else { + rd->energy = -1; + rd->configuration = -1; + rd->runType = "-1"; + rd->run = -1; + } + + if (eventsPerRun.find(m_run) == eventsPerRun.end()) { + eventsPerRun[m_run] = 0; + } + eventsPerRun[m_run]++; + + rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; + event.put(std::move(rd), "RunData"); } From d6bade4814ec61af574be8b2349ad3a652163c87 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 11:14:15 +0100 Subject: [PATCH 193/297] [data readout] add DANGER=true flag to the RunData, do not filter those events at the TextInputSource stage --- DataFormats/interface/HGCalTBRunData.h | 1 + RawToDigi/plugins/HGCalTBGenSimSource.cc | 1 + RawToDigi/plugins/HGCalTBTextSource.cc | 8 ++++---- RawToDigi/plugins/HGCalTBTextSource.h | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index c9699cd..2c0dd74 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -10,6 +10,7 @@ struct RunData { double energy; std::string runType; bool hasValidMWCMeasurment; + bool hasDanger; }; typedef std::map runMap; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 84a360f..c8b263f 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -217,6 +217,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) rd->configuration = (*fileIterator).config; rd->runType = (*fileIterator).runType; rd->run = (*fileIterator).index; + rd->hasDanger = false; bool _hasValidMWCMeasurement = true; _hasValidMWCMeasurement = (x1_mc != -99.9) && _hasValidMWCMeasurement; diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 83dd058..beab9d3 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -67,7 +67,6 @@ void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { mwcCounter = 0; std::fstream mwc_file; mwc_file.open(filepath.c_str(), std::fstream::in); - std::cout<<"Opening "< mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); - std::cout<hasDanger = _hasDanger; rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; + event.put(std::move(rd), "RunData"); } diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 3815bc9..93bff3a 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -90,6 +90,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::vector EventMultiWireChambers; unsigned int m_time; unsigned int m_event, m_run, m_spill, max_boards; + bool _hasDanger; unsigned int NSpills;//Read while running how many spills we wish to run over int m_sourceId; From 67b11864f73dc945d3e7ca0af9f28b9224249967 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 11:59:20 +0100 Subject: [PATCH 194/297] [data read-in] add DAQ event and MWC event sum counters --- RawToDigi/plugins/HGCalTBTextSource.cc | 12 ++++++------ RawToDigi/plugins/HGCalTBTextSource.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index beab9d3..7ad8e6d 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -90,8 +90,6 @@ void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { } std::cout<hasDanger = _hasDanger; rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; @@ -285,8 +284,9 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip } void HGCalTBTextSource::endJob() { - for (std::map::iterator it = eventsPerRun.begin(); it != eventsPerRun.end(); it++) { - std::cout<first<<": "<second< >::iterator it = eventsPerRun.begin(); it != eventsPerRun.end(); it++) { + std::cout<first<<": "<second.first<<" , "<second.second< eventsPerRun; + std::map> eventsPerRun; }; From 53f2a857f990c561e045e8026a83bd7a8d4d28ad Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 11:59:49 +0100 Subject: [PATCH 195/297] [alignment] add rotation along z-axis to the alignment --- Reco/plugins/MillepedeBinaryWriter.cc | 8 +++-- Reco/plugins/Position_Resolution_Analyzer.cc | 38 +++++++++++--------- Reco/src/Tracks.cc | 17 ++++----- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 33c4ea4..72575b3 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -231,9 +231,9 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { } - NLC = 4; - NGLperLayer = 3; - NGL = nLayers*NGLperLayer; + NLC = 4; + NGLperLayer = 3; + NGL = nLayers*NGLperLayer; rMeas = 0.; sigma = 0.; derLc = new float[NLC]; @@ -411,6 +411,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+0] = 1.; derGl[(layer-1)*NGLperLayer+1] = 0.; + derGl[(layer-1)*NGLperLayer+2] = y_true; rMeas = x_true - x_predicted; sigma = Sensors[layer]->getResidualResolution(); @@ -425,6 +426,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet derGl[(layer-1)*NGLperLayer+0] = 0.; derGl[(layer-1)*NGLperLayer+1] = 1.; + derGl[(layer-1)*NGLperLayer+2] = -x_true; rMeas = y_true - y_predicted; sigma = Sensors[layer]->getResidualResolution(); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 27d54fb..8a7b127 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -70,8 +70,8 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer fs; edm::EDGetTokenT HGCalTBRecHitCollection_Token; edm::EDGetToken HGCalTBClusterCollection_Token; - edm::EDGetToken HGCalTBClusterCollection7_Token; - edm::EDGetToken HGCalTBClusterCollection19_Token; + edm::EDGetToken HGCalTBClusterCollection7_Token; + edm::EDGetToken HGCalTBClusterCollection19_Token; edm::EDGetTokenT RunDataToken; @@ -127,24 +127,24 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS usesResource("TFileService"); HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); - HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); - HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); - HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); + HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); + HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); + HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); //read the cell consideration option to calculate the central hit point std::string methodString = iConfig.getParameter("considerationMethod"); if (methodString == "all") - considerationMethod = CONSIDERALL; - else if (methodString == "closest7") - considerationMethod = CONSIDERSEVEN; - else if (methodString == "closest19") - considerationMethod = CONSIDERNINETEEN; - else if(methodString == "clustersAll") - considerationMethod = CONSIDERCLUSTERSALL; - else if(methodString == "clusters7") - considerationMethod = CONSIDERCLUSTERSSEVEN; - else if(methodString == "clusters19") - considerationMethod = CONSIDERCLUSTERSNINETEEN; + considerationMethod = CONSIDERALL; + else if (methodString == "closest7") + considerationMethod = CONSIDERSEVEN; + else if (methodString == "closest19") + considerationMethod = CONSIDERNINETEEN; + else if(methodString == "clustersAll") + considerationMethod = CONSIDERCLUSTERSALL; + else if(methodString == "clusters7") + considerationMethod = CONSIDERCLUSTERSSEVEN; + else if(methodString == "clusters19") + considerationMethod = CONSIDERCLUSTERSNINETEEN; //read the weighting method to obtain the central hit point methodString = iConfig.getParameter("weightingMethod"); @@ -283,6 +283,10 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E evId = event.id().event(); run = rd->run; energy = rd->energy; + if (rd->hasDanger) { + std::cout<<"Valid MWC Measurement ? "<hasValidMWCMeasurment<hasDanger<setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(0.0, 0.0, 0.0, + Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 21], 0.0, 0.0, alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); Sensors[layer]->setSensorSize(SensorSize); diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index 499e1aa..a1687b2 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -187,11 +187,13 @@ void ParticleTrack::gblTrackToMilleBinary(gbl::MilleBinary *milleBinary) { //private functions void ParticleTrack::gblTrackFit() { std::vector listOfGblPoints; - double z_prev = 0.; + std::sort(gblLayers.begin(), gblLayers.end()); + double dz, particleEnergy, layerX0, thetaRMS_abs;//, thetaRMS_sensor; int label; - std::sort(gblLayers.begin(), gblLayers.end()); + double z_prev = gblLayers[0].z(); + std::cout<<"Initiating gbl trajectory at z = "< labels; labels.push_back(100*label + 11); labels.push_back(100*label + 12); - TMatrixD glder(2, 2); glder[0][0] = glder[1][1] = 1.; glder[0][1] = glder[1][0] = 0.; + std::vector labels; labels.push_back(100*label + 11); labels.push_back(100*label + 12); labels.push_back(100*label + 21); + TMatrixD glder(2, 3); glder[0][0] = glder[1][1] = 1.; glder[0][1] = glder[1][0] = 0.; glder[0][2] = meas[1]; glder[1][2] = -meas[0]; point.addGlobals(labels, glder); } From ec0a49204238cea244211ab33224679bdfc20643 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 12:41:38 +0100 Subject: [PATCH 196/297] [gbl] add one cm spacing in front of the first absorber --- Reco/src/Tracks.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index a1687b2..ea76c97 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -192,7 +192,7 @@ void ParticleTrack::gblTrackFit() { double dz, particleEnergy, layerX0, thetaRMS_abs;//, thetaRMS_sensor; int label; - double z_prev = gblLayers[0].z(); + double z_prev = gblLayers[0].z() - 1.; //1cm to incorporate possible absorbers std::cout<<"Initiating gbl trajectory at z = "< Date: Mon, 6 Feb 2017 12:42:27 +0100 Subject: [PATCH 197/297] [mwcs] MWCs available in alignment and position resolution analyser --- RawToDigi/plugins/HGCalTBTextSource.cc | 9 ++++++--- Reco/plugins/MillepedeBinaryWriter.cc | 19 +++++++++++++------ Reco/plugins/Position_Resolution_Analyzer.cc | 11 ++++++++--- Reco/python/millepede_binarywriter_cfi.py | 1 + Reco/python/position_resolution_cfi.py | 1 + 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 7ad8e6d..8390f51 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -86,10 +86,10 @@ void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { _mwcs.push_back(MultiWireChamberData(2, x2, y2, -147.)); EventMultiWireChambers.push_back(_mwcs); mwcCounter++; - } std::cout< mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); @@ -214,8 +215,10 @@ void HGCalTBTextSource::produce(edm::Event & event) _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].y != -99.9) && _hasValidMWCMeasurement; } mwcCounter++; - if(mwcs->size() > 0) + if(mwcs->size() > 0) { + std::cout<<"PUTTING THE MWCS"<hasDanger = _hasDanger; diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 72575b3..bfbc010 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -27,6 +27,7 @@ #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" @@ -42,10 +43,10 @@ /* Some hard coded numbers: */ //configuration1: -double _config1Positions[] = {1.0, 6.35, 11.52, 15.44, 19.52, 20.67, 24.78, 26.92}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor +double _config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double _config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer //configuration2: -double _config2Positions[] = {1.0, 5.67, 10.84, 15.27, 20.25, 21.4, 26.8, 32.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor +double _config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double _config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer double sigma_res[] = {0.205, 0.155, 0.155, 0.155, 0.175, 0.18, 0.21, 0.255}; //width of residuals in x dimension (from logweighting(5,1), no reweighting of errors, all cells considered, 2MIP threshold) @@ -71,10 +72,11 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer HGCalTBRecHitCollection_Token; edm::EDGetToken HGCalTBClusterCollection_Token; - edm::EDGetToken HGCalTBClusterCollection7_Token; - edm::EDGetToken HGCalTBClusterCollection19_Token; + edm::EDGetToken HGCalTBClusterCollection7_Token; + edm::EDGetToken HGCalTBClusterCollection19_Token; edm::EDGetTokenT RunDataToken; + edm::EDGetTokenT MWCToken; ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; @@ -124,6 +126,7 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + MWCToken= consumes(iConfig.getParameter("MWCHAMBERS")); HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); @@ -271,14 +274,18 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet return; } + //get the multi wire chambers + edm::Handle mwcs; + event.getByToken(MWCToken, mwcs); + //opening Rechits edm::Handle Rechits; event.getByToken(HGCalTBRecHitCollection_Token, Rechits); //opening Clusters (made from all, closest 7, closest 9) edm::Handle clusters; - edm::Handle clusters7; - edm::Handle clusters19; + edm::Handle clusters7; + edm::Handle clusters19; event.getByToken(HGCalTBClusterCollection_Token, clusters); event.getByToken(HGCalTBClusterCollection7_Token, clusters7); event.getByToken(HGCalTBClusterCollection19_Token, clusters19); diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 8a7b127..d3993e0 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -31,6 +31,7 @@ #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" //for the runData type definition +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRecHit.h" @@ -44,10 +45,10 @@ #include "TTree.h" //configuration1: -double config1Positions[] = {1.0, 6.35, 11.52, 15.44, 19.52, 20.67, 24.78, 26.92}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor +double config1Positions[] = {0.0, 5.35, 10.52, 14.44, 18.52, 19.67, 23.78, 25.92}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double config1X0Depths[] = {6.268, 1.131, 1.131, 1.362, 0.574, 1.301, 0.574, 2.42}; //in radiation lengths, copied from layerSumAnalyzer //configuration2: -double config2Positions[] = {1.0, 5.67, 10.84, 15.27, 20.25, 21.4, 26.8, 32.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor +double config2Positions[] = {0.0, 4.67, 9.84, 14.27, 19.25, 20.4, 25.8, 31.4}; //z-coordinate in cm, 1cm added to consider absorber in front of first sensor double config2X0Depths[] = {5.048, 3.412, 3.412, 2.866, 2.512, 1.625, 2.368, 6.021}; //in radiation lengths, copied from layerSumAnalyzer class Position_Resolution_Analyzer : public edm::one::EDAnalyzer { @@ -74,6 +75,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer RunDataToken; + edm::EDGetTokenT MWCToken; std::map alignmentParameters; //all entries are set to zero if no valid file is given @@ -127,6 +129,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS usesResource("TFileService"); HGCalTBRecHitCollection_Token = consumes(iConfig.getParameter("HGCALTBRECHITS")); RunDataToken= consumes(iConfig.getParameter("RUNDATA")); + MWCToken= consumes(iConfig.getParameter("MWCHAMBERS")); HGCalTBClusterCollection_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS")); HGCalTBClusterCollection7_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS7")); HGCalTBClusterCollection19_Token = consumes(iConfig.getParameter("HGCALTBCLUSTERS19")); @@ -276,7 +279,6 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E eventCounter++; edm::Handle rd; - //get the relevant event information event.getByToken(RunDataToken, rd); configuration = rd->configuration; @@ -292,6 +294,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E return; } + edm::Handle mwcs; + event.getByToken(MWCToken, mwcs); + //initialize new fit counters in case this is a new run: if (successfulFitCounter.find(run) == successfulFitCounter.end()) successfulFitCounter[run] = failedFitCounter[run] = 0; diff --git a/Reco/python/millepede_binarywriter_cfi.py b/Reco/python/millepede_binarywriter_cfi.py index 01fb316..60c9c30 100644 --- a/Reco/python/millepede_binarywriter_cfi.py +++ b/Reco/python/millepede_binarywriter_cfi.py @@ -14,6 +14,7 @@ SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), RUNDATA = cms.InputTag("source","RunData","unpack" ), + MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ), diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 18211c1..2d39864 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -13,6 +13,7 @@ SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), RUNDATA = cms.InputTag("source","RunData","unpack" ), + MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ), HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ), From affac0f18f23e5f3f0cf06ededad7644555fa755 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 12:47:19 +0100 Subject: [PATCH 198/297] [danger] skip DANGER=true events just in the alignment and position resolution --- Reco/plugins/MillepedeBinaryWriter.cc | 4 ++++ Reco/plugins/Position_Resolution_Analyzer.cc | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index bfbc010..7cbd677 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -269,6 +269,10 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet run = rd->run; energy = rd->energy; + if (rd->hasDanger) { + std::cout<<"Event "<run; energy = rd->energy; if (rd->hasDanger) { - std::cout<<"Valid MWC Measurement ? "<hasValidMWCMeasurment<hasDanger< mwcs; event.getByToken(MWCToken, mwcs); From b8fb5bac4c1396efe787024f2e9764751cf40084 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 13:00:27 +0100 Subject: [PATCH 199/297] [rundata] fix typo --- DataFormats/interface/HGCalTBRunData.h | 2 +- RawToDigi/plugins/HGCalTBGenSimSource.cc | 2 +- RawToDigi/plugins/HGCalTBTextSource.cc | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index 2c0dd74..214c7ea 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -9,7 +9,7 @@ struct RunData { int run; double energy; std::string runType; - bool hasValidMWCMeasurment; + bool hasValidMWCMeasurement; bool hasDanger; }; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index c8b263f..20a8f39 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -224,7 +224,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) _hasValidMWCMeasurement = (y1_mc != -99.9) && _hasValidMWCMeasurement; _hasValidMWCMeasurement = (x2_mc != -99.9) && _hasValidMWCMeasurement; _hasValidMWCMeasurement = (y2_mc != -99.9) && _hasValidMWCMeasurement; - rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; + rd->hasValidMWCMeasurement = _hasValidMWCMeasurement; event.put(std::move(rd), "RunData"); diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 8390f51..b7714d5 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -207,7 +207,6 @@ void HGCalTBTextSource::produce(edm::Event & event) //add the multi-wire chambers only if available bool _hasValidMWCMeasurement = true; if (mwcCounter < (int)EventMultiWireChambers.size()) { - std::cout<<"HELLO"< mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); @@ -216,7 +215,6 @@ void HGCalTBTextSource::produce(edm::Event & event) } mwcCounter++; if(mwcs->size() > 0) { - std::cout<<"PUTTING THE MWCS"<hasDanger = _hasDanger; - rd->hasValidMWCMeasurment = _hasValidMWCMeasurement; + rd->hasValidMWCMeasurement = _hasValidMWCMeasurement; event.put(std::move(rd), "RunData"); } From cf7eeb7c6a6c4200e95a3df100e7d9e367905812 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 13:01:57 +0100 Subject: [PATCH 200/297] [mwc] add bad mwc measurement filter in alignment and position resolution if 'useMWCReference' (no parameter) is true --- Reco/plugins/MillepedeBinaryWriter.cc | 9 ++++++++- Reco/plugins/Position_Resolution_Analyzer.cc | 10 +++++++++- Reco/python/millepede_binarywriter_cfi.py | 1 + Reco/python/position_resolution_cfi.py | 1 + test_cfg_newEB.py | 17 +++++++++++++---- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 7cbd677..7c76eeb 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -92,6 +92,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer >("ADC_per_MIP"); totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); + + useMWCReference = iConfig.getParameter("useMWCReference"); if (fittingMethod==GBLTRACK) { milleBinary = new gbl::MilleBinary((iConfig.getParameter("binaryFile")).c_str()); @@ -270,9 +273,13 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet energy = rd->energy; if (rd->hasDanger) { - std::cout<<"Event "<hasValidMWCMeasurement) { + std::cout<<"Event "<("totalEnergyThreshold"); + useMWCReference = iConfig.getParameter("useMWCReference"); + //initialize tree and set Branch addresses outTree = fs->make("deviations", "deviations"); outTree->Branch("configuration", &configuration, "configuration/I"); @@ -286,9 +290,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E run = rd->run; energy = rd->energy; if (rd->hasDanger) { - std::cout<<"Event "<hasValidMWCMeasurement) { + std::cout<<"Event "<.txt"%(options.dataFolder,options.runType)), - MWCInputPathFormat=cms.untracked.string("file:%s/WC_H4Run.txt"%options.dataFolder), + MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) nSpills=cms.untracked.uint32(options.nSpills), @@ -222,6 +227,7 @@ process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) process.position_resolution_analyzer.totalEnergyThreshold = -1000. +process.position_resolution_analyzer.useMWCReference = cms.bool(options.useMWCReference) if not options.isData: @@ -233,6 +239,7 @@ process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) process.millepede_binarywriter.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) process.millepede_binarywriter.totalEnergyThreshold = -1000. +process.millepede_binarywriter.useMWCReference = cms.bool(options.useMWCReference) process.millepede_binarywriter.binaryFile = "%s/%s_MillepedeBinary_%s.bin"%(options.outputFolder,options.runType,options.outputPostfix) if not options.isData: @@ -322,9 +329,11 @@ elif (options.chainSequence == 7): process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) elif (options.chainSequence == 8): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) + #process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) elif (options.chainSequence == 9): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) + #process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) else: if (options.chainSequence == 1): process.p =cms.Path() From 3fd18744616156e957f00f91f0503e28bab9bc3c Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 13:05:30 +0100 Subject: [PATCH 201/297] [gbl] approximate formula of tmax in energy loss computation --- Reco/src/Tracks.cc | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index ea76c97..d79760f 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -6,18 +6,7 @@ double gblhelpers::showerProfile(double *t, double *par) { } double gblhelpers::computeEnergyLoss(double t, double E0) { - double tmax; - if (E0 <= 45.) { - tmax = 5.; - } else if(E0 <= 85.) { - tmax = 7.; - } else if(E0 <= 150.) { - tmax = 8.5; - } else if(E0 <= 225.) { - tmax = 9.5; - } else { - tmax = 10.; - } + double tmax = 2.6648 * pow(10., -7) * pow(E0, 3) + -1.72 * pow(10., -4) * pow(E0, 2) + 0.05003425 * E0 + 4.09805383; TF1 *profile = new TF1("profile", showerProfile, 0., 50., 3); profile->SetParameter(0, E0); From 9ed1bf1fe2dad9f3d50efa181b9701373e509849 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 16:38:38 +0100 Subject: [PATCH 202/297] [position resolution/alignment] add multi-wire chambers --- RawToDigi/plugins/HGCalTBTextSource.cc | 17 +++++--- RawToDigi/plugins/HGCalTBTextSource.h | 3 ++ Reco/interface/Tracks.h | 1 + Reco/plugins/MillepedeBinaryWriter.cc | 41 +++++++++++++------- Reco/plugins/Position_Resolution_Analyzer.cc | 38 ++++++++++++++++-- Reco/python/position_resolution_cfi.py | 1 + Reco/src/Tracks.cc | 7 +++- 7 files changed, 84 insertions(+), 24 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index b7714d5..737cdaa 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -71,13 +71,13 @@ void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { while (mwc_file.is_open()) { MultiWireChambers _mwcs; mwc_file >> fragment; - double x1 = atof(fragment)/10.; //values are given in mm and are converted to cm here + double x1 = atof(fragment); mwc_file >> fragment; - double x2 = atof(fragment)/10.; //values are given in mm and are converted to cm here + double x2 = atof(fragment); mwc_file >> fragment; - double y1 = atof(fragment)/10.; //values are given in mm and are converted to cm here + double y1 = atof(fragment); mwc_file >> fragment; - double y2 = atof(fragment)/10.; //values are given in mm and are converted to cm here + double y2 = atof(fragment); if (mwc_file.eof()) break; @@ -209,9 +209,14 @@ void HGCalTBTextSource::produce(edm::Event & event) if (mwcCounter < (int)EventMultiWireChambers.size()) { std::auto_ptr mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { + _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].x != -999) && _hasValidMWCMeasurement; + _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].y != -999) && _hasValidMWCMeasurement; + double rotAngle = mwcRotation*M_PI/180.; + double x_preRot = EventMultiWireChambers[mwcCounter][_imwc].x/10.; //conersion from mm to cm + double y_preRot = EventMultiWireChambers[mwcCounter][_imwc].y/10.; + EventMultiWireChambers[mwcCounter][_imwc].x = cos(rotAngle) * x_preRot + sin(rotAngle) * y_preRot; //apply the rotation just here because the filtering for -999 must occur first + EventMultiWireChambers[mwcCounter][_imwc].y = -sin(rotAngle) * x_preRot + cos(rotAngle) * y_preRot; mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); - _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].x != -99.9) && _hasValidMWCMeasurement; - _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].y != -99.9) && _hasValidMWCMeasurement; } mwcCounter++; if(mwcs->size() > 0) { diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 480b6a5..a6062ca 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -13,6 +13,7 @@ #include #include #include "stdlib.h" +#include /** * \class HGCalTBTextSource HGCal/RawToDigi/plugins/HGCalTBTextSource.h * @@ -35,6 +36,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles newFileIndex(0), inputPathFormat(""), MWCInputPathFormat(""), + mwcRotation(pset.getUntrackedParameter("mwcRotation", 270.)), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) { @@ -84,6 +86,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::vector _fileNames; std::vector _MWCFileNames; int mwcCounter; + double mwcRotation; std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; diff --git a/Reco/interface/Tracks.h b/Reco/interface/Tracks.h index 69bc972..a97cff9 100644 --- a/Reco/interface/Tracks.h +++ b/Reco/interface/Tracks.h @@ -81,6 +81,7 @@ class ParticleTrack{ ~ParticleTrack(); void addFitPoint(SensorHitMap* sensor); void addReferenceSensor(SensorHitMap* reference); + void addDummySensor(SensorHitMap* dummy); void weightFitPoints(FitPointWeightingMethod method); void fitTrack(TrackFittingMethod method); std::pair calculateReferenceXY(); diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 7c76eeb..ed500cd 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -89,6 +89,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer ADC_per_MIP; int LayersConfig; int nLayers; + int nPlanes; int SensorSize; double totalEnergyThreshold; @@ -237,16 +238,18 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { } + nPlanes = nLayers + (useMWCReference ? 2: 0); + NLC = 4; NGLperLayer = 3; - NGL = nLayers*NGLperLayer; + NGL = nPlanes*NGLperLayer; rMeas = 0.; sigma = 0.; derLc = new float[NLC]; derGl = new float[NGL]; label = new int[NGL]; - for (int l=1; l<=nLayers; l++) { + for (int l=1; l<=nPlanes; l++) { label[(l-1)*NGLperLayer + 0] = l*100 + 11; label[(l-1)*NGLperLayer + 1] = l*100 + 12; label[(l-1)*NGLperLayer + 2] = l*100 + 21; @@ -382,19 +385,37 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet } } - //step 4: fill particle tracks + //Step 4: add MWCs to the setup if useMWCReference option is set true + if (useMWCReference) { + double mwc_resolution = 0.005; //cm + + Sensors[(nLayers+1)] = new SensorHitMap((nLayers+1)); //attention: This is specifically tailored for the 8-layer setup + Sensors[(nLayers+1)]->setLabZ(mwcs->at(0).z, 0.001); + Sensors[(nLayers+1)]->setCenterHitPosition(mwcs->at(0).x, mwcs->at(0).y ,mwc_resolution , mwc_resolution); + Sensors[(nLayers+1)]->setParticleEnergy(energy); + Sensors[(nLayers+1)]->setResidualResolution(mwc_resolution); + + Sensors[(nLayers+2)] = new SensorHitMap((nLayers+2)); //attention: This is specifically tailored for the 8-layer setup + Sensors[(nLayers+2)]->setLabZ(mwcs->at(1).z, 0.001); + Sensors[(nLayers+2)]->setCenterHitPosition(mwcs->at(1).x, mwcs->at(1).y ,mwc_resolution , mwc_resolution); + Sensors[(nLayers+2)]->setParticleEnergy(energy); + Sensors[(nLayers+2)]->setResidualResolution(mwc_resolution); + } + + //step 5: fill particle tracks Track = new ParticleTrack(); - for (int i=1; i<=nLayers; i++) { + for (int i=1; i<=nPlanes; i++) { Track->addFitPoint(Sensors[i]); } Track->weightFitPoints(fitPointWeightingMethod); Track->fitTrack(fittingMethod); + //step 6: calculate the deviations between each fit missing one layer and exactly that layer's true central position if (fittingMethod==GBLTRACK) { Track->gblTrackToMilleBinary(milleBinary); }else{ - //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position - for (int layer=1; layer<=nLayers; layer++) { + + for (int layer=1; layer<=nPlanes; layer++) { double layer_labZ = Sensors[layer]->getLabZ(); double intrinsic_z = Sensors[layer]->getIntrinsicHitZPosition(); @@ -402,20 +423,14 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet double x_predicted = position_predicted.first; double y_predicted = position_predicted.second; - //std::pair position_predicted_err = Track->calculatePositionErrorXY(layer_labZ+intrinsic_z); - //double x_predicted_err = position_predicted_err.first; - //double y_predicted_err = position_predicted_err.second; std::pair position_true = Sensors[layer]->getHitPosition(); double x_true = position_true.first; double y_true = position_true.second; - //std::pair position_true_err = Sensors[layer]->getHitPositionError(); Sensors[layer]->getHitPositionError(); - //double x_true_err = position_true_err.first; - //double y_true_err = position_true_err.second; - //step5: calculate the necessary derivatives for Mille and fill them into the binary file + //step7: calculate the necessary derivatives for Mille and fill them into the binary file //reset all global parameters: for (int k=0; k ADC_per_MIP; int LayersConfig; int SensorSize; + int nLayers; double totalEnergyThreshold; bool useMWCReference; @@ -227,6 +228,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS pedestalThreshold = iConfig.getParameter("pedestalThreshold"); SensorSize = iConfig.getParameter("SensorSize"); + nLayers = iConfig.getParameter("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); @@ -380,7 +382,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { CommonVetoCounter+=1; - return; + //return; //this is also done in the plotting } //step 2: calculate impact point with technique indicated as the argument @@ -394,28 +396,58 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E it->second->calculateCenterPosition(considerationMethod, weightingMethod); } - //step 3: fill particle tracks + //Step 3: add MWCs to the setup if useMWCReference option is set true + if (useMWCReference) { + double mwc_resolution = 0.005; //cm + + Sensors[(nLayers+1)] = new SensorHitMap((nLayers+1)); //attention: This is specifically tailored for the 8-layer setup + Sensors[(nLayers+1)]->setLabZ(mwcs->at(0).z, 0.001); + Sensors[(nLayers+1)]->setCenterHitPosition(mwcs->at(0).x, mwcs->at(0).y ,mwc_resolution , mwc_resolution); + Sensors[(nLayers+1)]->setParticleEnergy(energy); + Sensors[(nLayers+1)]->setAlignmentParameters(alignmentParameters[100*(nLayers+1) + 21], 0.0, 0.0, + alignmentParameters[100*(nLayers+1) + 11], alignmentParameters[100*(nLayers+1) + 12], 0.0); + Sensors[(nLayers+1)]->setResidualResolution(mwc_resolution); + + Sensors[(nLayers+2)] = new SensorHitMap((nLayers+2)); //attention: This is specifically tailored for the 8-layer setup + Sensors[(nLayers+2)]->setLabZ(mwcs->at(1).z, 0.001); + Sensors[(nLayers+2)]->setCenterHitPosition(mwcs->at(1).x, mwcs->at(1).y ,mwc_resolution , mwc_resolution); + Sensors[(nLayers+2)]->setParticleEnergy(energy); + Sensors[(nLayers+2)]->setAlignmentParameters(alignmentParameters[100*(nLayers+2) + 21], 0.0, 0.0, + alignmentParameters[100*(nLayers+2) + 11], alignmentParameters[100*(nLayers+2) + 12], 0.0); + Sensors[(nLayers+2)]->setResidualResolution(mwc_resolution); + } + + //step 4: fill particle tracks std::map Tracks; //the integer index indicates which layer is omitted in the track calculation for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { int i = it->first; + if (i>(nLayers)) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers Tracks[i] = new ParticleTrack(); for (std::map::iterator jt=Sensors.begin(); jt!=Sensors.end(); jt++) { int j = jt->first; + if (j>nLayers) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers if (i==j) { Tracks[i]->addReferenceSensor(Sensors[i]); continue; } + Tracks[i]->addFitPoint(Sensors[j]); } + if (useMWCReference) { + Tracks[i]->addFitPoint(Sensors[9]); + Tracks[i]->addFitPoint(Sensors[10]); + } Tracks[i]->weightFitPoints(fitPointWeightingMethod); Tracks[i]->fitTrack(fittingMethod); } - //step 4: calculate the deviations between each fit missing one layer and exactly that layer's true central position + //step 5: calculate the deviations between each fit missing one layer and exactly that layer's true central position layerZ_X0 = 0; for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { layer = it->first; + if (layer>8) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers + layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 += Sensors[layer]->getX0(); std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 149a5ae..f489d46 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -10,6 +10,7 @@ pedestalThreshold = cms.double(2.), layers_config = cms.int32(1), ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]), + nLayers = cms.int32(8), SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), useMWCReference = cms.bool(True), diff --git a/Reco/src/Tracks.cc b/Reco/src/Tracks.cc index d79760f..aca2fdc 100644 --- a/Reco/src/Tracks.cc +++ b/Reco/src/Tracks.cc @@ -65,6 +65,10 @@ void ParticleTrack::addReferenceSensor(SensorHitMap* sensor) { gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), true)); } +void ParticleTrack::addDummySensor(SensorHitMap* sensor) { + gblLayers.push_back(gblhelpers::layer(sensor->label(), sensor->getLabZ()+sensor->getIntrinsicHitZPosition(), sensor->getX0(), sensor->getParticleEnergy(), true)); +} + void ParticleTrack::weightFitPoints(FitPointWeightingMethod method) { //calculate the sum of all Energies first double sum_Energies = 0.0; @@ -182,10 +186,10 @@ void ParticleTrack::gblTrackFit() { int label; double z_prev = gblLayers[0].z() - 1.; //1cm to incorporate possible absorbers - std::cout<<"Initiating gbl trajectory at z = "< Date: Mon, 6 Feb 2017 18:15:32 +0100 Subject: [PATCH 203/297] [data read-in] fill missing MWC information with -999 --- RawToDigi/plugins/HGCalTBTextSource.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 737cdaa..2906641 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -206,8 +206,8 @@ void HGCalTBTextSource::produce(edm::Event & event) //add the multi-wire chambers only if available bool _hasValidMWCMeasurement = true; + std::auto_ptr mwcs(new MultiWireChambers); if (mwcCounter < (int)EventMultiWireChambers.size()) { - std::auto_ptr mwcs(new MultiWireChambers); for (size_t _imwc=0; _imwc < (size_t)EventMultiWireChambers[mwcCounter].size(); _imwc++) { _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].x != -999) && _hasValidMWCMeasurement; _hasValidMWCMeasurement = (EventMultiWireChambers[mwcCounter][_imwc].y != -999) && _hasValidMWCMeasurement; @@ -219,12 +219,12 @@ void HGCalTBTextSource::produce(edm::Event & event) mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); } mwcCounter++; - if(mwcs->size() > 0) { - event.put(std::move(mwcs), "MultiWireChambers"); - } } else { _hasValidMWCMeasurement = false; + //push some dummy value for the MWCs, subsequent plugins using this information should check the _hadValidMWCMeasurement flag + mwcs->push_back(MultiWireChamberData(1, -999, -999, 0)); } + event.put(std::move(mwcs), "MultiWireChambers"); //add the DAQ data From 8783fd2b608252dc6a5561db9189abb0ab35da85 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 18:17:20 +0100 Subject: [PATCH 204/297] [couts] no output to the console for invalid MWC events --- Reco/plugins/MillepedeBinaryWriter.cc | 2 +- Reco/plugins/Position_Resolution_Analyzer.cc | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index ed500cd..0be08fc 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -280,7 +280,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet return; } if (useMWCReference && ! rd->hasValidMWCMeasurement) { - std::cout<<"Event "<hasValidMWCMeasurement) { - std::cout<<"Event "< position_true = Sensors[layer]->getLabHitPosition(); x_true = position_true.first; y_true = position_true.second; From 546cdc3f6a74faa862a55bbf32edcfdd4b10b4c0 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 6 Feb 2017 18:47:48 +0100 Subject: [PATCH 205/297] [simulation] also rotate xBeam, yBeam by 90 degrees --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 4 ++-- RawToDigi/plugins/HGCalTBGenSimSource.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 20a8f39..961b19b 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -205,8 +205,8 @@ void HGCalTBGenSimSource::produce(edm::Event & event) double y2_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); std::auto_ptr mwcs(new MultiWireChambers); - mwcs->push_back(MultiWireChamberData(1, x1_mc, y1_mc, -126.-147.)); - mwcs->push_back(MultiWireChamberData(2, x2_mc, y2_mc, -147.)); + mwcs->push_back(MultiWireChamberData(1, x1_mc*cos(90.0*M_PI/180.0) + sin(90.0*M_PI/180.0)*y1_mc, -x1_mc*sin(90.0*M_PI/180.0) + cos(90.0*M_PI/180.0)*y1_mc, -126.-147.)); + mwcs->push_back(MultiWireChamberData(2, x2_mc*cos(90.0*M_PI/180.0) + sin(90.0*M_PI/180.0)*y2_mc, -x2_mc*sin(90.0*M_PI/180.0) + cos(90.0*M_PI/180.0)*y2_mc, -147.)); event.put(std::move(mwcs), "MultiWireChambers"); diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index e83e958..68a458d 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -19,6 +19,7 @@ #include #include "stdlib.h" #include +#include #include "TFile.h" #include "TBranch.h" From 389be56cb66b3f5571e1df88d64ec8daaeb35a64 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 9 Feb 2017 13:14:10 +0100 Subject: [PATCH 206/297] [alignment] make alignment energy dependent, considerEnergy parameter in TextSource --- RawToDigi/plugins/HGCalTBTextSource.cc | 6 ++ RawToDigi/plugins/HGCalTBTextSource.h | 3 + Reco/interface/PositionResolutionHelpers.h | 15 +++++ Reco/plugins/Position_Resolution_Analyzer.cc | 19 +++--- Reco/python/position_resolution_cfi.py | 2 +- Reco/src/PositionResolutionHelpers.cc | 64 +++++++++++++++++++- test_cfg_newEB.py | 15 +++-- 7 files changed, 109 insertions(+), 15 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 2906641..2f93b96 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -34,6 +34,11 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { else if (readCounter % 5 == 4) _runType = (std::string)fragment; else if (readCounter % 5 == 0) { _configuration = atoi(fragment); + + //if readOnlyEnergy parameter is set, make sure to only run the analysis for files of exactly that energy + if (readOnlyEnergy!=-1 && readOnlyEnergy!=_energy) + continue; + //store configuredRuns[_run].energy = _energy; configuredRuns[_run].runType = _runType; @@ -284,6 +289,7 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.addUntracked >("fileNames"); desc.addUntracked("inputPathFormat"); desc.addUntracked("MWCInputPathFormat"); + desc.addUntracked("readOnlyEnergy"); desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); descriptions.add("source", desc); diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index a6062ca..b1cd11b 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -36,6 +36,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles newFileIndex(0), inputPathFormat(""), MWCInputPathFormat(""), + readOnlyEnergy(-1), mwcRotation(pset.getUntrackedParameter("mwcRotation", 270.)), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) @@ -53,6 +54,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat"); + readOnlyEnergy = pset.getUntrackedParameter("readOnlyEnergy"); std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); @@ -83,6 +85,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::string runEnergyMapFile; std::string inputPathFormat; std::string MWCInputPathFormat; + double readOnlyEnergy; std::vector _fileNames; std::vector _MWCFileNames; int mwcCounter; diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 078d64d..3cf9ba0 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -7,6 +7,8 @@ #include #include +#include + #include "TF1.h" #include "TGraphErrors.h" #include "TFitResult.h" @@ -18,6 +20,19 @@ void parseAlignmentFile(std::map &alignmentParameters, std::string // class declarations // +//class that stores the alignmentParameters +class AlignmentParameters { + private: + std::map > _params; + std::map parseFile(std::string file); + double defaultEnergy; + public: + AlignmentParameters(std::vector files, double defaultEnergy); + AlignmentParameters(std::vector files); + double getValue(double energy, int paramId, bool tryDefault=true); +}; + + //class that performs an analytical straight line fit class LineFitter { private: diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 671e60c..650aeaf 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -77,7 +77,7 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer RunDataToken; edm::EDGetTokenT MWCToken; - std::map alignmentParameters; //all entries are set to zero if no valid file is given + AlignmentParameters* alignmentParameters; //all entries are set to zero if no valid file is given ConsiderationMethod considerationMethod; WeightingMethod weightingMethod; @@ -269,7 +269,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("layerZ_X0", &layerZ_X0, "layerZ_X0/D"); outTree->Branch("deviation", &deviation, "deviation/D"); - parseAlignmentFile(alignmentParameters, iConfig.getParameter("alignmentParameterFile")); + alignmentParameters = new AlignmentParameters(iConfig.getParameter >("alignmentParameterFiles")); ClusterVetoCounter = 0; HitsVetoCounter = 0; @@ -333,8 +333,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(alignmentParameters[100*layer + 21], 0.0, 0.0, - alignmentParameters[100*layer + 11], alignmentParameters[100*layer + 12], 0.0); + Sensors[layer]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*layer + 21), 0.0, 0.0, + alignmentParameters->getValue(energy, 100*layer + 11), alignmentParameters->getValue(energy, 100*layer + 12), 0.0); Sensors[layer]->setSensorSize(SensorSize); @@ -404,16 +404,16 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[(nLayers+1)]->setLabZ(mwcs->at(0).z, 0.001); Sensors[(nLayers+1)]->setCenterHitPosition(mwcs->at(0).x, mwcs->at(0).y ,mwc_resolution , mwc_resolution); Sensors[(nLayers+1)]->setParticleEnergy(energy); - Sensors[(nLayers+1)]->setAlignmentParameters(alignmentParameters[100*(nLayers+1) + 21], 0.0, 0.0, - alignmentParameters[100*(nLayers+1) + 11], alignmentParameters[100*(nLayers+1) + 12], 0.0); + Sensors[(nLayers+1)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+1) + 21), 0.0, 0.0, + alignmentParameters->getValue(energy, 100*(nLayers+1) + 11), alignmentParameters->getValue(energy, 100*(nLayers+1) + 12), 0.0); Sensors[(nLayers+1)]->setResidualResolution(mwc_resolution); Sensors[(nLayers+2)] = new SensorHitMap((nLayers+2)); //attention: This is specifically tailored for the 8-layer setup Sensors[(nLayers+2)]->setLabZ(mwcs->at(1).z, 0.001); Sensors[(nLayers+2)]->setCenterHitPosition(mwcs->at(1).x, mwcs->at(1).y ,mwc_resolution , mwc_resolution); Sensors[(nLayers+2)]->setParticleEnergy(energy); - Sensors[(nLayers+2)]->setAlignmentParameters(alignmentParameters[100*(nLayers+2) + 21], 0.0, 0.0, - alignmentParameters[100*(nLayers+2) + 11], alignmentParameters[100*(nLayers+2) + 12], 0.0); + Sensors[(nLayers+2)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+2) + 21), 0.0, 0.0, + alignmentParameters->getValue(energy, 100*(nLayers+2) + 11), alignmentParameters->getValue(energy, 100*(nLayers+2) + 12), 0.0); Sensors[(nLayers+2)]->setResidualResolution(mwc_resolution); } @@ -512,7 +512,8 @@ void Position_Resolution_Analyzer::endJob() { std::cout<<"ClusterVetos: "< files, double _defaultEnergy) : defaultEnergy(_defaultEnergy) { + boost::regex energy_regex("^.*ENERGY_([0-9]+)_.*$"); + boost::smatch energy_matches; + + for(size_t i = 0; i files) : AlignmentParameters(files, 250.){}; + +std::map AlignmentParameters::parseFile(std::string path) { + std::map fileParams; + std::fstream file; + + char fragment[100]; + int readCounter = -2, currentParameter = 0; + file.open(path.c_str(), std::fstream::in); + + while (file.is_open() && !file.eof()) { + if (readCounter!=-2) readCounter++; + file >> fragment; + if (std::string(fragment)=="111") readCounter = 0; //first parameter is read out + + if (readCounter==0) currentParameter = atoi(fragment); + if (readCounter==1) currentParameter = fileParams[currentParameter] = atof(fragment); + if (readCounter==4) readCounter = -1; + } + + if (readCounter==-2) { + for (int i=1; i<= 8; i++) { + fileParams[i*100+11] = 0; + fileParams[i*100+12] = 0; + fileParams[i*100+13] = 0; + fileParams[i*100+21] = 0; + fileParams[i*100+22] = 0; + fileParams[i*100+23] = 0; + } + } + + return fileParams; +} + +double AlignmentParameters::getValue(double energy, int paramId, bool tryDefault) { + if (_params.find(energy) == _params.end() && tryDefault) return getValue(defaultEnergy, paramId, false); + else if (_params[energy].find(paramId) == _params[energy].end()) return 0.; + else return _params[energy][paramId]; +}; + + + void parseAlignmentFile(std::map &alignmentParameters, std::string path) { - //std::cout<<"PARSING"<.txt"%options.dataFolder), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) + readOnlyEnergy=cms.untracked.double(options.readOnlyEnergy), nSpills=cms.untracked.uint32(options.nSpills), ) else: @@ -220,7 +227,7 @@ if not options.isData: process.hgcaltbclusters.rechitCollection = cms.InputTag("source","","unpack") -process.position_resolution_analyzer.alignmentParameterFile = cms.string(options.alignmentParameterFile) +process.position_resolution_analyzer.alignmentParameterFiles = cms.vstring(options.alignmentParameterFiles) process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) From d63873dd1b0e011020d34c12f27009ff826adedd Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 9 Feb 2017 14:26:33 +0100 Subject: [PATCH 207/297] [positionResolution] write out MWC information in the Tree --- Reco/plugins/Position_Resolution_Analyzer.cc | 41 ++++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 650aeaf..9fde3cf 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -114,8 +114,10 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer CM_tmp; //will write the subtract_CM() return values for each layer + int useMWC; + double MWC_x1, MWC_y1, MWC_z1, MWC_x2, MWC_y2, MWC_z2; + std::pair CM_tmp; //will write the subtract_CM() return values for each layer }; Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterSet& iConfig) { @@ -243,6 +245,7 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); //electron energy in GeV + outTree->Branch("CM_sum", &CM_sum, "CM_sum/D"); outTree->Branch("CM_cells_count", &CM_cells_count, "CM_cells_count/D"); outTree->Branch("layerEnergy", &layerEnergy, "layerEnergy/D"); @@ -251,18 +254,29 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS outTree->Branch("sumEnergy", &sumEnergy, "sumEnergy/D"); outTree->Branch("sumClusterEnergy", &sumClusterEnergy, "sumClusterEnergy/D"); outTree->Branch("sumFitWeights", &sumFitWeights, "sumFitWeights/D"); - outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); - outTree->Branch("x_predicted_to_closest_cell", &x_predicted_to_closest_cell, "x_predicted_to_closest_cell/D"); - outTree->Branch("x_predicted_err", &x_predicted_err, "x_predicted_err/D"); - outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); - outTree->Branch("y_predicted_to_closest_cell", &y_predicted_to_closest_cell, "y_predicted_to_closest_cell/D"); - outTree->Branch("y_predicted_err", &y_predicted_err, "y_predicted_err/D"); + outTree->Branch("x_true", &x_true, "x_true/D"); outTree->Branch("x_true_to_closest_cell", &x_true_to_closest_cell, "x_true_to_closest_cell/D"); outTree->Branch("x_true_err", &x_true_err, "x_true_err/D"); outTree->Branch("y_true", &y_true, "y_true/D"); outTree->Branch("y_true_to_closest_cell", &y_true_to_closest_cell, "y_true_to_closest_cell/D"); outTree->Branch("y_true_err", &y_true_err, "y_true_err/D"); + + outTree->Branch("x_predicted", &x_predicted, "x_predicted/D"); + outTree->Branch("x_predicted_to_closest_cell", &x_predicted_to_closest_cell, "x_predicted_to_closest_cell/D"); + outTree->Branch("x_predicted_err", &x_predicted_err, "x_predicted_err/D"); + outTree->Branch("y_predicted", &y_predicted, "y_predicted/D"); + outTree->Branch("y_predicted_to_closest_cell", &y_predicted_to_closest_cell, "y_predicted_to_closest_cell/D"); + outTree->Branch("y_predicted_err", &y_predicted_err, "y_predicted_err/D"); + + outTree->Branch("useMWC", &useMWC, "uswMWC/I"); + outTree->Branch("MWC_x1", &MWC_x1, "MWC_x1/D"); + outTree->Branch("MWC_y1", &MWC_y1, "MWC_y1/D"); + outTree->Branch("MWC_z1", &MWC_z1, "MWC_z1/D"); + outTree->Branch("MWC_x2", &MWC_x2, "MWC_x2/D"); + outTree->Branch("MWC_y2", &MWC_y2, "MWC_y2/D"); + outTree->Branch("MWC_z2", &MWC_z2, "MWC_z2/D"); + outTree->Branch("deltaX", &deltaX, "deltaX/D"); outTree->Branch("deltaY", &deltaY, "deltaY/D"); outTree->Branch("layerZ_cm", &layerZ_cm, "layerZ_cm/D"); @@ -398,8 +412,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //Step 3: add MWCs to the setup if useMWCReference option is set true if (useMWCReference) { + useMWC = 1; + double mwc_resolution = 0.005; //cm - Sensors[(nLayers+1)] = new SensorHitMap((nLayers+1)); //attention: This is specifically tailored for the 8-layer setup Sensors[(nLayers+1)]->setLabZ(mwcs->at(0).z, 0.001); Sensors[(nLayers+1)]->setCenterHitPosition(mwcs->at(0).x, mwcs->at(0).y ,mwc_resolution , mwc_resolution); @@ -407,6 +422,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[(nLayers+1)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+1) + 21), 0.0, 0.0, alignmentParameters->getValue(energy, 100*(nLayers+1) + 11), alignmentParameters->getValue(energy, 100*(nLayers+1) + 12), 0.0); Sensors[(nLayers+1)]->setResidualResolution(mwc_resolution); + MWC_x1 = mwcs->at(0).x; + MWC_y1 = mwcs->at(0).y; + MWC_z1 = mwcs->at(0).z; Sensors[(nLayers+2)] = new SensorHitMap((nLayers+2)); //attention: This is specifically tailored for the 8-layer setup Sensors[(nLayers+2)]->setLabZ(mwcs->at(1).z, 0.001); @@ -415,6 +433,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[(nLayers+2)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+2) + 21), 0.0, 0.0, alignmentParameters->getValue(energy, 100*(nLayers+2) + 11), alignmentParameters->getValue(energy, 100*(nLayers+2) + 12), 0.0); Sensors[(nLayers+2)]->setResidualResolution(mwc_resolution); + MWC_x2 = mwcs->at(1).x; + MWC_y2 = mwcs->at(1).y; + MWC_z2 = mwcs->at(1).z; + + } else { + useMWC = 0; + MWC_x1 = MWC_y1 = MWC_z1 = MWC_x2 = MWC_y2 = MWC_z2 = -999; } //step 4: fill particle tracks From 8500bdc8245baffc045be200182d23452a73ee28 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 9 Feb 2017 16:13:19 +0100 Subject: [PATCH 208/297] [alignment] use MWC information for alignment if useMWCReference=True --- Reco/plugins/MillepedeBinaryWriter.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 0be08fc..5a6c502 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -404,9 +404,16 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet //step 5: fill particle tracks Track = new ParticleTrack(); - for (int i=1; i<=nPlanes; i++) { - Track->addFitPoint(Sensors[i]); + if (!useMWCReference) { + for (int i=1; i<=nLayers; i++) { + Track->addFitPoint(Sensors[i]); + } + } else { + for (int i=nLayers+1; i<=nPlanes; i++) { + Track->addFitPoint(Sensors[i]); + } } + Track->weightFitPoints(fitPointWeightingMethod); Track->fitTrack(fittingMethod); From ebd11677aab2aa7d76ad5ac2752c34dd8ad7a02f Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 9 Feb 2017 16:14:13 +0100 Subject: [PATCH 209/297] [positionResolution] introduce layers 9, 10 for comparison of stack reference to MWC measurement --- Reco/plugins/Position_Resolution_Analyzer.cc | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 9fde3cf..74a5956 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -446,22 +446,24 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::map Tracks; //the integer index indicates which layer is omitted in the track calculation for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { int i = it->first; - if (i>(nLayers)) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers + Tracks[i] = new ParticleTrack(); + Tracks[i]->addReferenceSensor(Sensors[i]); + for (std::map::iterator jt=Sensors.begin(); jt!=Sensors.end(); jt++) { int j = jt->first; - if (j>nLayers) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers - if (i==j) { - Tracks[i]->addReferenceSensor(Sensors[i]); - continue; + if (i==j) continue; + + if (i<=nLayers) { + if(useMWCReference && j>nLayers) Tracks[i]->addFitPoint(Sensors[j]); + else if(!useMWCReference && j<=nLayers) Tracks[i]->addFitPoint(Sensors[j]); + } else { + if(useMWCReference && j<=nLayers) + Tracks[i]->addFitPoint(Sensors[j]); + } - - Tracks[i]->addFitPoint(Sensors[j]); - } - if (useMWCReference) { - Tracks[i]->addFitPoint(Sensors[9]); - Tracks[i]->addFitPoint(Sensors[10]); } + Tracks[i]->weightFitPoints(fitPointWeightingMethod); Tracks[i]->fitTrack(fittingMethod); } @@ -471,11 +473,11 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E layerZ_X0 = 0; for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { layer = it->first; - if (layer>8) continue; //just fit for the layers 1-8 and not the MWC, Attention: '8' must be adjusted as soon as there are more layers layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 += Sensors[layer]->getX0(); - std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); + if (layer==9) { + std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); x_predicted = position_predicted.first; y_predicted = position_predicted.second; std::pair position_predicted_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_predicted); @@ -484,6 +486,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E std::pair position_error_predicted = Tracks[layer]->calculateReferenceErrorXY(); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; + } if (!(x_predicted!=0 || y_predicted!=0 || x_predicted_err!=0 || y_predicted_err!=0)) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented From 83caf742b874cf288dd4a2a494955ebb36ac3787 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 9 Feb 2017 18:12:58 +0100 Subject: [PATCH 210/297] [positionResolution] energy weighted predictions and reconstructed positions of up to ith-layer averaged --- Reco/plugins/Position_Resolution_Analyzer.cc | 42 ++++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index 74a5956..db5db9d 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -114,6 +114,10 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzerBranch("layerZ_X0", &layerZ_X0, "layerZ_X0/D"); outTree->Branch("deviation", &deviation, "deviation/D"); + outTree->Branch("average_x_predicted", &average_x_predicted, "average_x_predicted/D"); + outTree->Branch("average_y_predicted", &average_y_predicted, "average_y_predicted/D"); + outTree->Branch("average_x_true", &average_x_true, "average_x_true/D"); + outTree->Branch("average_y_true", &average_y_true, "average_y_true/D"); + outTree->Branch("average_deltaX", &average_deltaX, "average_deltaX/D"); + outTree->Branch("average_deltaY", &average_deltaY, "average_deltaY/D"); + alignmentParameters = new AlignmentParameters(iConfig.getParameter >("alignmentParameterFiles")); ClusterVetoCounter = 0; @@ -470,23 +481,32 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E //step 5: calculate the deviations between each fit missing one layer and exactly that layer's true central position + double sum_x_predicted = 0, sum_y_predicted = 0, sum_x_true = 0, sum_y_true = 0, sum_energy = 0; + layerZ_X0 = 0; for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { layer = it->first; - + sumFitWeights = Tracks[layer]->getSumOfEnergies(); + layerEnergy = Sensors[layer]->getTotalEnergy(); + sum_energy += layerEnergy; + layerClusterEnergy = Sensors[layer]->getTotalClusterEnergy(-1); + layerWeight = Sensors[layer]->getTotalWeight(); layerZ_cm = Sensors[layer]->getLabZ() + Sensors[layer]->getIntrinsicHitZPosition(); layerZ_X0 += Sensors[layer]->getX0(); - if (layer==9) { - std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); + + std::pair position_predicted = Tracks[layer]->calculateReferenceXY(); x_predicted = position_predicted.first; + sum_x_predicted += x_predicted*layerEnergy; y_predicted = position_predicted.second; + sum_y_predicted += y_predicted*layerEnergy; + std::pair position_predicted_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_predicted); x_predicted_to_closest_cell = position_predicted_to_closest_cell.first; y_predicted_to_closest_cell = position_predicted_to_closest_cell.second; std::pair position_error_predicted = Tracks[layer]->calculateReferenceErrorXY(); x_predicted_err = position_error_predicted.first; y_predicted_err = position_error_predicted.second; - } + if (!(x_predicted!=0 || y_predicted!=0 || x_predicted_err!=0 || y_predicted_err!=0)) { //default fitting has been applied, i.e. the regular fit has failed or the selected method is not implemented @@ -494,9 +514,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E continue; //ignore those cases but count them } successfulFitCounter[run]++; + std::pair position_true = Sensors[layer]->getLabHitPosition(); x_true = position_true.first; + sum_x_true += x_true*layerEnergy; y_true = position_true.second; + sum_y_true += y_true*layerEnergy; + std::pair position_true_to_closest_cell = Sensors[layer]->getCenterOfClosestCell(position_true); x_true_to_closest_cell = position_true_to_closest_cell.first; y_true_to_closest_cell = position_true_to_closest_cell.second; @@ -507,11 +531,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E deltaY = y_true - y_predicted; deviation = sqrt( pow(deltaX, 2) + pow(deltaY, 2) ); - sumFitWeights = Tracks[layer]->getSumOfEnergies(); - layerEnergy = Sensors[layer]->getTotalEnergy(); - layerClusterEnergy = Sensors[layer]->getTotalClusterEnergy(-1); - layerWeight = Sensors[layer]->getTotalWeight(); + average_x_predicted = layer <= 8 ? sum_x_predicted / sum_energy : -999; + average_y_predicted = layer <= 8 ? sum_y_predicted / sum_energy : -999; + average_x_true = layer <= 8 ? sum_x_true / sum_energy : -999; + average_y_true = layer <= 8 ? sum_y_true / sum_energy : -999; + average_deltaX = layer <= 8 ? average_x_true - average_x_predicted : -999; + average_deltaY = layer <= 8 ? average_y_true - average_y_predicted : -999; //DEBUG if (deviation > 1000.) { std::cout<<"Event: "< Date: Mon, 13 Feb 2017 19:16:08 +0100 Subject: [PATCH 211/297] [alignment] run and apply alignment per run --- RawToDigi/plugins/HGCalTBTextSource.cc | 6 +-- RawToDigi/plugins/HGCalTBTextSource.h | 5 +- Reco/interface/PositionResolutionHelpers.h | 6 +-- Reco/plugins/Position_Resolution_Analyzer.cc | 4 +- Reco/src/PositionResolutionHelpers.cc | 51 +++++--------------- test_cfg_newEB.py | 12 ++--- 6 files changed, 26 insertions(+), 58 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 2f93b96..2d408cc 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -35,8 +35,8 @@ void HGCalTBTextSource::fillConfiguredRuns(std::fstream& map_file) { else if (readCounter % 5 == 0) { _configuration = atoi(fragment); - //if readOnlyEnergy parameter is set, make sure to only run the analysis for files of exactly that energy - if (readOnlyEnergy!=-1 && readOnlyEnergy!=_energy) + //if readOnlyRuns parameter is set, make sure to only run the analysis for files of exactly that energy + if (readOnlyRuns.size()>0 && std::find(readOnlyRuns.begin(), readOnlyRuns.end(), _run) == readOnlyRuns.end()) continue; //store @@ -289,7 +289,7 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.addUntracked >("fileNames"); desc.addUntracked("inputPathFormat"); desc.addUntracked("MWCInputPathFormat"); - desc.addUntracked("readOnlyEnergy"); + desc.addUntracked >("readOnlyRuns"); desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); descriptions.add("source", desc); diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index b1cd11b..c4d64c0 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -36,7 +36,6 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles newFileIndex(0), inputPathFormat(""), MWCInputPathFormat(""), - readOnlyEnergy(-1), mwcRotation(pset.getUntrackedParameter("mwcRotation", 270.)), m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) @@ -54,7 +53,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat"); - readOnlyEnergy = pset.getUntrackedParameter("readOnlyEnergy"); + readOnlyRuns = pset.getUntrackedParameter >("readOnlyRuns"); std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); @@ -85,7 +84,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::string runEnergyMapFile; std::string inputPathFormat; std::string MWCInputPathFormat; - double readOnlyEnergy; + std::vector readOnlyRuns; std::vector _fileNames; std::vector _MWCFileNames; int mwcCounter; diff --git a/Reco/interface/PositionResolutionHelpers.h b/Reco/interface/PositionResolutionHelpers.h index 3cf9ba0..9961e05 100644 --- a/Reco/interface/PositionResolutionHelpers.h +++ b/Reco/interface/PositionResolutionHelpers.h @@ -14,8 +14,6 @@ #include "TFitResult.h" -void parseAlignmentFile(std::map &alignmentParameters, std::string path); - // // class declarations // @@ -25,9 +23,9 @@ class AlignmentParameters { private: std::map > _params; std::map parseFile(std::string file); - double defaultEnergy; + double defaultRun; public: - AlignmentParameters(std::vector files, double defaultEnergy); + AlignmentParameters(std::vector files, double defaultRun); AlignmentParameters(std::vector files); double getValue(double energy, int paramId, bool tryDefault=true); }; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index db5db9d..f54cf2b 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -358,8 +358,8 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setPedestalThreshold(pedestalThreshold); Sensors[layer]->setLabZ(Layer_Z_Positions[layer-1], Layer_Z_X0s[layer-1]); //first argument: real positon as measured (not aligned) in cm, second argument: position in radiation lengths - Sensors[layer]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*layer + 21), 0.0, 0.0, - alignmentParameters->getValue(energy, 100*layer + 11), alignmentParameters->getValue(energy, 100*layer + 12), 0.0); + Sensors[layer]->setAlignmentParameters(alignmentParameters->getValue(run, 100*layer + 21), 0.0, 0.0, + alignmentParameters->getValue(run, 100*layer + 11), alignmentParameters->getValue(run, 100*layer + 12), 0.0); Sensors[layer]->setSensorSize(SensorSize); diff --git a/Reco/src/PositionResolutionHelpers.cc b/Reco/src/PositionResolutionHelpers.cc index 68db724..8a96bb2 100644 --- a/Reco/src/PositionResolutionHelpers.cc +++ b/Reco/src/PositionResolutionHelpers.cc @@ -6,24 +6,24 @@ -AlignmentParameters::AlignmentParameters(std::vector files, double _defaultEnergy) : defaultEnergy(_defaultEnergy) { - boost::regex energy_regex("^.*ENERGY_([0-9]+)_.*$"); - boost::smatch energy_matches; +AlignmentParameters::AlignmentParameters(std::vector files, double _defaultRun) : defaultRun(_defaultRun) { + boost::regex run_regex("^.*RUN_([0-9]+)_.*$"); + boost::smatch run_matches; for(size_t i = 0; i files) : AlignmentParameters(files, 250.){}; +AlignmentParameters::AlignmentParameters(std::vector files) : AlignmentParameters(files, 887){}; std::map AlignmentParameters::parseFile(std::string path) { std::map fileParams; @@ -57,43 +57,14 @@ std::map AlignmentParameters::parseFile(std::string path) { return fileParams; } -double AlignmentParameters::getValue(double energy, int paramId, bool tryDefault) { - if (_params.find(energy) == _params.end() && tryDefault) return getValue(defaultEnergy, paramId, false); - else if (_params[energy].find(paramId) == _params[energy].end()) return 0.; - else return _params[energy][paramId]; +double AlignmentParameters::getValue(double run, int paramId, bool tryDefault) { + if (_params.find(run) == _params.end() && tryDefault) return getValue(defaultRun, paramId, false); + else if (_params[run].find(paramId) == _params[run].end()) return 0.; + else return _params[run][paramId]; }; -void parseAlignmentFile(std::map &alignmentParameters, std::string path) { - std::fstream file; - - char fragment[100]; - int readCounter = -2, currentParameter = 0; - file.open(path.c_str(), std::fstream::in); - - while (file.is_open() && !file.eof()) { - if (readCounter!=-2) readCounter++; - file >> fragment; - if (std::string(fragment)=="111") readCounter = 0; //first parameter is read out - - if (readCounter==0) currentParameter = atoi(fragment); - if (readCounter==1) currentParameter = alignmentParameters[currentParameter] = atof(fragment); - if (readCounter==4) readCounter = -1; - } - - if (readCounter==-2) { - for (int i=1; i<= 8; i++) { - alignmentParameters[i*100+11] = 0; - alignmentParameters[i*100+12] = 0; - alignmentParameters[i*100+13] = 0; - alignmentParameters[i*100+21] = 0; - alignmentParameters[i*100+22] = 0; - alignmentParameters[i*100+23] = 0; - } - } -} - //**** Line Fiting Class ****// LineFitter::LineFitter(std::vector x, std::vector y, std::vector sigma_y) { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 108db0e..01cc8c3 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -99,11 +99,11 @@ VarParsing.VarParsing.varType.int, 'Frequency of event count print outs on the console') -options.register('readOnlyEnergy', - -1, - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.float, - 'Run the analysis only for this specific energy.' +options.register('readOnlyRuns', + '', + VarParsing.VarParsing.multiplicity.list, + VarParsing.VarParsing.varType.int, + 'Run the analysis only for the indicated runs' ) '''Specific options for the position resolution''' @@ -197,7 +197,7 @@ MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) - readOnlyEnergy=cms.untracked.double(options.readOnlyEnergy), + readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), nSpills=cms.untracked.uint32(options.nSpills), ) else: From 5d8ef3224375018376a29e5261e5d427cbd02b01 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 14 Feb 2017 13:08:01 +0100 Subject: [PATCH 212/297] [simulation] add noise in MIP to the simulated cell energies --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 19 ++++++++++++------- RawToDigi/plugins/HGCalTBGenSimSource.h | 4 +++- test_cfg_newEB.py | 2 ++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 961b19b..eaa6905 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -13,8 +13,10 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In outputCollectionName = pset.getParameter("OutputCollectionName"); runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); + energyNoise = pset.getParameter("energyNoise"); + energyNoiseResolution = pset.getParameter("energyNoiseResolution"); smearingResolution = pset.getParameter("MWCSmearingResolution")/1000.; //configuration is in microns, convert to cm - + produces (outputCollectionName); produces("RunData"); produces("MultiWireChambers"); @@ -57,7 +59,7 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In beamY = 0; - MWCSmearer = new TRandom(); + randgen = new TRandom(); } void HGCalTBGenSimSource::fillConfiguredRuns(std::fstream& map_file) { @@ -189,6 +191,9 @@ void HGCalTBGenSimSource::produce(edm::Event & event) double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[skiRocIndex]; + //additional noise to the energy + energy += randgen->Gaus(energyNoise, energyNoiseResolution); + recHit.setEnergy(energy); recHit._energyLow = energy; recHit._energyHigh = energy; @@ -199,10 +204,10 @@ void HGCalTBGenSimSource::produce(edm::Event & event) //second: add fake multi-wire chambers from xBeam, yBeam - double x1_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); - double y1_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); - double x2_mc = beamX + MWCSmearer->Gaus(0, smearingResolution); - double y2_mc = beamY + MWCSmearer->Gaus(0, smearingResolution); + double x1_mc = beamX + randgen->Gaus(0, smearingResolution); + double y1_mc = beamY + randgen->Gaus(0, smearingResolution); + double x2_mc = beamX + randgen->Gaus(0, smearingResolution); + double y2_mc = beamY + randgen->Gaus(0, smearingResolution); std::auto_ptr mwcs(new MultiWireChambers); mwcs->push_back(MultiWireChamberData(1, x1_mc*cos(90.0*M_PI/180.0) + sin(90.0*M_PI/180.0)*y1_mc, -x1_mc*sin(90.0*M_PI/180.0) + cos(90.0*M_PI/180.0)*y1_mc, -126.-147.)); @@ -232,7 +237,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) } void HGCalTBGenSimSource::endJob() { - delete MWCSmearer; + delete randgen; } diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index 68a458d..8c10b3c 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -90,7 +90,9 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles HGCalTBCellVertices TheCell; HexGeometry* geomc; - TRandom* MWCSmearer; + TRandom* randgen; + double energyNoise; + double energyNoiseResolution; double smearingResolution; public: diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 01cc8c3..2161140 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -207,6 +207,8 @@ runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered, + energyNoise=cms.double(options.pedestalThreshold), #value in MIPS, represents additional value to the energy with gaussian distribution and 10% width + energyNoiseResolution=cms.double(options.pedestalThreshold/10.), MWCSmearingResolution=cms.double(50.) #value is in microns! ) From 6e93126fb23c7c5e98588042b35c32fd5c608bd5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 14 Feb 2017 13:08:33 +0100 Subject: [PATCH 213/297] [position reconstruction] finer binning in logarithmic weighting formula for parameter a --- Reco/interface/Sensors.h | 34 ++++++-- Reco/plugins/MillepedeBinaryWriter.cc | 64 +++++++++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 64 +++++++++++--- Reco/src/Sensors.cc | 90 +++++++++++++++++--- 4 files changed, 214 insertions(+), 38 deletions(-) diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 139149f..6dd50f1 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -29,15 +29,37 @@ enum WeightingMethod { SQUAREDWEIGHTING, LINEARWEIGHTING, LOGWEIGHTING_30_10, - LOGWEIGHTING_30_15, + LOGWEIGHTING_31_10, + LOGWEIGHTING_32_10, + LOGWEIGHTING_33_10, + LOGWEIGHTING_34_10, + LOGWEIGHTING_35_10, + LOGWEIGHTING_36_10, + LOGWEIGHTING_37_10, + LOGWEIGHTING_38_10, + LOGWEIGHTING_39_10, LOGWEIGHTING_40_10, - LOGWEIGHTING_40_15, + LOGWEIGHTING_41_10, + LOGWEIGHTING_42_10, + LOGWEIGHTING_43_10, + LOGWEIGHTING_44_10, + LOGWEIGHTING_45_10, + LOGWEIGHTING_46_10, + LOGWEIGHTING_47_10, + LOGWEIGHTING_48_10, + LOGWEIGHTING_49_10, LOGWEIGHTING_50_10, - LOGWEIGHTING_50_15, + LOGWEIGHTING_51_10, + LOGWEIGHTING_52_10, + LOGWEIGHTING_53_10, + LOGWEIGHTING_54_10, + LOGWEIGHTING_55_10, + LOGWEIGHTING_56_10, + LOGWEIGHTING_57_10, + LOGWEIGHTING_58_10, + LOGWEIGHTING_59_10, LOGWEIGHTING_60_10, - LOGWEIGHTING_60_15, - LOGWEIGHTING_70_10, - LOGWEIGHTING_70_15 + LOGWEIGHTING_70_10 }; struct HitData { diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 5a6c502..8536653 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -156,24 +156,68 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { weightingMethod = LINEARWEIGHTING; else if (methodString == "logWeighting_3.0_1.0") weightingMethod = LOGWEIGHTING_30_10; - else if (methodString == "logWeighting_3.0_1.5") - weightingMethod = LOGWEIGHTING_30_15; + else if (methodString == "logWeighting_3.1_1.0") + weightingMethod = LOGWEIGHTING_31_10; + else if (methodString == "logWeighting_3.2_1.0") + weightingMethod = LOGWEIGHTING_32_10; + else if (methodString == "logWeighting_3.3_1.0") + weightingMethod = LOGWEIGHTING_33_10; + else if (methodString == "logWeighting_3.4_1.0") + weightingMethod = LOGWEIGHTING_34_10; + else if (methodString == "logWeighting_3.5_1.0") + weightingMethod = LOGWEIGHTING_35_10; + else if (methodString == "logWeighting_3.6_1.0") + weightingMethod = LOGWEIGHTING_36_10; + else if (methodString == "logWeighting_3.7_1.0") + weightingMethod = LOGWEIGHTING_37_10; + else if (methodString == "logWeighting_3.8_1.0") + weightingMethod = LOGWEIGHTING_38_10; + else if (methodString == "logWeighting_3.9_1.0") + weightingMethod = LOGWEIGHTING_39_10; else if (methodString == "logWeighting_4.0_1.0") weightingMethod = LOGWEIGHTING_40_10; - else if (methodString == "logWeighting_4.0_1.5") - weightingMethod = LOGWEIGHTING_40_15; + else if (methodString == "logWeighting_4.1_1.0") + weightingMethod = LOGWEIGHTING_41_10; + else if (methodString == "logWeighting_4.2_1.0") + weightingMethod = LOGWEIGHTING_42_10; + else if (methodString == "logWeighting_4.3_1.0") + weightingMethod = LOGWEIGHTING_43_10; + else if (methodString == "logWeighting_4.4_1.0") + weightingMethod = LOGWEIGHTING_44_10; + else if (methodString == "logWeighting_4.5_1.0") + weightingMethod = LOGWEIGHTING_45_10; + else if (methodString == "logWeighting_4.6_1.0") + weightingMethod = LOGWEIGHTING_46_10; + else if (methodString == "logWeighting_4.7_1.0") + weightingMethod = LOGWEIGHTING_47_10; + else if (methodString == "logWeighting_4.8_1.0") + weightingMethod = LOGWEIGHTING_48_10; + else if (methodString == "logWeighting_4.9_1.0") + weightingMethod = LOGWEIGHTING_49_10; else if (methodString == "logWeighting_5.0_1.0") weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.0_1.5") - weightingMethod = LOGWEIGHTING_50_15; + else if (methodString == "logWeighting_5.1_1.0") + weightingMethod = LOGWEIGHTING_51_10; + else if (methodString == "logWeighting_5.2_1.0") + weightingMethod = LOGWEIGHTING_52_10; + else if (methodString == "logWeighting_5.3_1.0") + weightingMethod = LOGWEIGHTING_53_10; + else if (methodString == "logWeighting_5.4_1.0") + weightingMethod = LOGWEIGHTING_54_10; + else if (methodString == "logWeighting_5.5_1.0") + weightingMethod = LOGWEIGHTING_55_10; + else if (methodString == "logWeighting_5.6_1.0") + weightingMethod = LOGWEIGHTING_56_10; + else if (methodString == "logWeighting_5.7_1.0") + weightingMethod = LOGWEIGHTING_57_10; + else if (methodString == "logWeighting_5.8_1.0") + weightingMethod = LOGWEIGHTING_58_10; + else if (methodString == "logWeighting_5.9_1.0") + weightingMethod = LOGWEIGHTING_59_10; else if (methodString == "logWeighting_6.0_1.0") weightingMethod = LOGWEIGHTING_60_10; - else if (methodString == "logWeighting_6.0_1.5") - weightingMethod = LOGWEIGHTING_60_15; else if (methodString == "logWeighting_7.0_1.0") weightingMethod = LOGWEIGHTING_70_10; - else if (methodString == "logWeighting_7.0_1.5") - weightingMethod = LOGWEIGHTING_70_15; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index f54cf2b..df923ce 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -166,24 +166,68 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = LINEARWEIGHTING; else if (methodString == "logWeighting_3.0_1.0") weightingMethod = LOGWEIGHTING_30_10; - else if (methodString == "logWeighting_3.0_1.5") - weightingMethod = LOGWEIGHTING_30_15; + else if (methodString == "logWeighting_3.1_1.0") + weightingMethod = LOGWEIGHTING_31_10; + else if (methodString == "logWeighting_3.2_1.0") + weightingMethod = LOGWEIGHTING_32_10; + else if (methodString == "logWeighting_3.3_1.0") + weightingMethod = LOGWEIGHTING_33_10; + else if (methodString == "logWeighting_3.4_1.0") + weightingMethod = LOGWEIGHTING_34_10; + else if (methodString == "logWeighting_3.5_1.0") + weightingMethod = LOGWEIGHTING_35_10; + else if (methodString == "logWeighting_3.6_1.0") + weightingMethod = LOGWEIGHTING_36_10; + else if (methodString == "logWeighting_3.7_1.0") + weightingMethod = LOGWEIGHTING_37_10; + else if (methodString == "logWeighting_3.8_1.0") + weightingMethod = LOGWEIGHTING_38_10; + else if (methodString == "logWeighting_3.9_1.0") + weightingMethod = LOGWEIGHTING_39_10; else if (methodString == "logWeighting_4.0_1.0") weightingMethod = LOGWEIGHTING_40_10; - else if (methodString == "logWeighting_4.0_1.5") - weightingMethod = LOGWEIGHTING_40_15; + else if (methodString == "logWeighting_4.1_1.0") + weightingMethod = LOGWEIGHTING_41_10; + else if (methodString == "logWeighting_4.2_1.0") + weightingMethod = LOGWEIGHTING_42_10; + else if (methodString == "logWeighting_4.3_1.0") + weightingMethod = LOGWEIGHTING_43_10; + else if (methodString == "logWeighting_4.4_1.0") + weightingMethod = LOGWEIGHTING_44_10; + else if (methodString == "logWeighting_4.5_1.0") + weightingMethod = LOGWEIGHTING_45_10; + else if (methodString == "logWeighting_4.6_1.0") + weightingMethod = LOGWEIGHTING_46_10; + else if (methodString == "logWeighting_4.7_1.0") + weightingMethod = LOGWEIGHTING_47_10; + else if (methodString == "logWeighting_4.8_1.0") + weightingMethod = LOGWEIGHTING_48_10; + else if (methodString == "logWeighting_4.9_1.0") + weightingMethod = LOGWEIGHTING_49_10; else if (methodString == "logWeighting_5.0_1.0") weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.0_1.5") - weightingMethod = LOGWEIGHTING_50_15; + else if (methodString == "logWeighting_5.1_1.0") + weightingMethod = LOGWEIGHTING_51_10; + else if (methodString == "logWeighting_5.2_1.0") + weightingMethod = LOGWEIGHTING_52_10; + else if (methodString == "logWeighting_5.3_1.0") + weightingMethod = LOGWEIGHTING_53_10; + else if (methodString == "logWeighting_5.4_1.0") + weightingMethod = LOGWEIGHTING_54_10; + else if (methodString == "logWeighting_5.5_1.0") + weightingMethod = LOGWEIGHTING_55_10; + else if (methodString == "logWeighting_5.6_1.0") + weightingMethod = LOGWEIGHTING_56_10; + else if (methodString == "logWeighting_5.7_1.0") + weightingMethod = LOGWEIGHTING_57_10; + else if (methodString == "logWeighting_5.8_1.0") + weightingMethod = LOGWEIGHTING_58_10; + else if (methodString == "logWeighting_5.9_1.0") + weightingMethod = LOGWEIGHTING_59_10; else if (methodString == "logWeighting_6.0_1.0") weightingMethod = LOGWEIGHTING_60_10; - else if (methodString == "logWeighting_6.0_1.5") - weightingMethod = LOGWEIGHTING_60_15; else if (methodString == "logWeighting_7.0_1.0") weightingMethod = LOGWEIGHTING_70_10; - else if (methodString == "logWeighting_7.0_1.5") - weightingMethod = LOGWEIGHTING_70_15; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index 7028baa..1eb376d 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -196,33 +196,99 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth case LOGWEIGHTING_30_10: SensorHitMap::logWeighting(3.0, 1.0); break; - case LOGWEIGHTING_30_15: - SensorHitMap::logWeighting(3.0, 1.5); + case LOGWEIGHTING_31_10: + SensorHitMap::logWeighting(3.1, 1.0); + break; + case LOGWEIGHTING_32_10: + SensorHitMap::logWeighting(3.2, 1.0); + break; + case LOGWEIGHTING_33_10: + SensorHitMap::logWeighting(3.3, 1.0); + break; + case LOGWEIGHTING_34_10: + SensorHitMap::logWeighting(3.4, 1.0); + break; + case LOGWEIGHTING_35_10: + SensorHitMap::logWeighting(3.5, 1.0); + break; + case LOGWEIGHTING_36_10: + SensorHitMap::logWeighting(3.6, 1.0); + break; + case LOGWEIGHTING_37_10: + SensorHitMap::logWeighting(3.7, 1.0); + break; + case LOGWEIGHTING_38_10: + SensorHitMap::logWeighting(3.8, 1.0); + break; + case LOGWEIGHTING_39_10: + SensorHitMap::logWeighting(3.9, 1.0); break; case LOGWEIGHTING_40_10: SensorHitMap::logWeighting(4.0, 1.0); break; - case LOGWEIGHTING_40_15: - SensorHitMap::logWeighting(4.0, 1.5); + case LOGWEIGHTING_41_10: + SensorHitMap::logWeighting(4.1, 1.0); + break; + case LOGWEIGHTING_42_10: + SensorHitMap::logWeighting(4.2, 1.0); + break; + case LOGWEIGHTING_43_10: + SensorHitMap::logWeighting(4.3, 1.0); + break; + case LOGWEIGHTING_44_10: + SensorHitMap::logWeighting(4.4, 1.0); + break; + case LOGWEIGHTING_45_10: + SensorHitMap::logWeighting(4.5, 1.0); + break; + case LOGWEIGHTING_46_10: + SensorHitMap::logWeighting(4.6, 1.0); + break; + case LOGWEIGHTING_47_10: + SensorHitMap::logWeighting(4.7, 1.0); + break; + case LOGWEIGHTING_48_10: + SensorHitMap::logWeighting(4.8, 1.0); + break; + case LOGWEIGHTING_49_10: + SensorHitMap::logWeighting(4.9, 1.0); break; case LOGWEIGHTING_50_10: SensorHitMap::logWeighting(5.0, 1.0); break; - case LOGWEIGHTING_50_15: - SensorHitMap::logWeighting(5.0, 1.5); + case LOGWEIGHTING_51_10: + SensorHitMap::logWeighting(5.1, 1.0); + break; + case LOGWEIGHTING_52_10: + SensorHitMap::logWeighting(5.2, 1.0); + break; + case LOGWEIGHTING_53_10: + SensorHitMap::logWeighting(5.3, 1.0); + break; + case LOGWEIGHTING_54_10: + SensorHitMap::logWeighting(5.4, 1.0); + break; + case LOGWEIGHTING_55_10: + SensorHitMap::logWeighting(5.5, 1.0); + break; + case LOGWEIGHTING_56_10: + SensorHitMap::logWeighting(5.6, 1.0); + break; + case LOGWEIGHTING_57_10: + SensorHitMap::logWeighting(5.7, 1.0); + break; + case LOGWEIGHTING_58_10: + SensorHitMap::logWeighting(5.8, 1.0); + break; + case LOGWEIGHTING_59_10: + SensorHitMap::logWeighting(5.9, 1.0); break; case LOGWEIGHTING_60_10: SensorHitMap::logWeighting(6.0, 1.0); break; - case LOGWEIGHTING_60_15: - SensorHitMap::logWeighting(6.0, 1.5); - break; case LOGWEIGHTING_70_10: SensorHitMap::logWeighting(7.0, 1.0); break; - case LOGWEIGHTING_70_15: - SensorHitMap::logWeighting(7.0, 1.5); - break; //case NEWMETHOD: //SensorHitMap::newWeightingFunction() //break; From e149852e6870aef9f4f8130b9ae82886e0975b89 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 14 Feb 2017 16:53:43 +0100 Subject: [PATCH 214/297] [positionResolution] finer binning in parameter a of logarithmic weighting formula --- Reco/interface/Sensors.h | 51 +++++-- Reco/plugins/MillepedeBinaryWriter.cc | 78 ++++++++--- Reco/plugins/Position_Resolution_Analyzer.cc | 98 ++++++++++--- Reco/src/Sensors.cc | 137 ++++++++++++++++--- 4 files changed, 296 insertions(+), 68 deletions(-) diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index 6dd50f1..d44bd6d 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -28,6 +28,16 @@ enum WeightingMethod { DEFAULTWEIGHTING, SQUAREDWEIGHTING, LINEARWEIGHTING, + LOGWEIGHTING_20_10, + LOGWEIGHTING_21_10, + LOGWEIGHTING_22_10, + LOGWEIGHTING_23_10, + LOGWEIGHTING_24_10, + LOGWEIGHTING_25_10, + LOGWEIGHTING_26_10, + LOGWEIGHTING_27_10, + LOGWEIGHTING_28_10, + LOGWEIGHTING_29_10, LOGWEIGHTING_30_10, LOGWEIGHTING_31_10, LOGWEIGHTING_32_10, @@ -49,17 +59,38 @@ enum WeightingMethod { LOGWEIGHTING_48_10, LOGWEIGHTING_49_10, LOGWEIGHTING_50_10, - LOGWEIGHTING_51_10, - LOGWEIGHTING_52_10, - LOGWEIGHTING_53_10, - LOGWEIGHTING_54_10, - LOGWEIGHTING_55_10, - LOGWEIGHTING_56_10, - LOGWEIGHTING_57_10, - LOGWEIGHTING_58_10, - LOGWEIGHTING_59_10, LOGWEIGHTING_60_10, - LOGWEIGHTING_70_10 + LOGWEIGHTING_70_10, + LOGWEIGHTING_205_10, + LOGWEIGHTING_215_10, + LOGWEIGHTING_225_10, + LOGWEIGHTING_235_10, + LOGWEIGHTING_245_10, + LOGWEIGHTING_255_10, + LOGWEIGHTING_265_10, + LOGWEIGHTING_275_10, + LOGWEIGHTING_285_10, + LOGWEIGHTING_295_10, + LOGWEIGHTING_305_10, + LOGWEIGHTING_315_10, + LOGWEIGHTING_325_10, + LOGWEIGHTING_335_10, + LOGWEIGHTING_345_10, + LOGWEIGHTING_355_10, + LOGWEIGHTING_365_10, + LOGWEIGHTING_375_10, + LOGWEIGHTING_385_10, + LOGWEIGHTING_395_10, + LOGWEIGHTING_405_10, + LOGWEIGHTING_415_10, + LOGWEIGHTING_425_10, + LOGWEIGHTING_435_10, + LOGWEIGHTING_445_10, + LOGWEIGHTING_455_10, + LOGWEIGHTING_465_10, + LOGWEIGHTING_475_10, + LOGWEIGHTING_485_10, + LOGWEIGHTING_495_10 }; struct HitData { diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 8536653..f8f4d2f 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -196,28 +196,70 @@ MillepedeBinaryWriter::MillepedeBinaryWriter(const edm::ParameterSet& iConfig) { weightingMethod = LOGWEIGHTING_49_10; else if (methodString == "logWeighting_5.0_1.0") weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.1_1.0") - weightingMethod = LOGWEIGHTING_51_10; - else if (methodString == "logWeighting_5.2_1.0") - weightingMethod = LOGWEIGHTING_52_10; - else if (methodString == "logWeighting_5.3_1.0") - weightingMethod = LOGWEIGHTING_53_10; - else if (methodString == "logWeighting_5.4_1.0") - weightingMethod = LOGWEIGHTING_54_10; - else if (methodString == "logWeighting_5.5_1.0") - weightingMethod = LOGWEIGHTING_55_10; - else if (methodString == "logWeighting_5.6_1.0") - weightingMethod = LOGWEIGHTING_56_10; - else if (methodString == "logWeighting_5.7_1.0") - weightingMethod = LOGWEIGHTING_57_10; - else if (methodString == "logWeighting_5.8_1.0") - weightingMethod = LOGWEIGHTING_58_10; - else if (methodString == "logWeighting_5.9_1.0") - weightingMethod = LOGWEIGHTING_59_10; else if (methodString == "logWeighting_6.0_1.0") weightingMethod = LOGWEIGHTING_60_10; else if (methodString == "logWeighting_7.0_1.0") weightingMethod = LOGWEIGHTING_70_10; + else if (methodString == "logWeighting_2.05_1.0") + weightingMethod = LOGWEIGHTING_205_10; + else if (methodString == "logWeighting_2.15_1.0") + weightingMethod = LOGWEIGHTING_215_10; + else if (methodString == "logWeighting_2.25_1.0") + weightingMethod = LOGWEIGHTING_225_10; + else if (methodString == "logWeighting_2.35_1.0") + weightingMethod = LOGWEIGHTING_235_10; + else if (methodString == "logWeighting_2.45_1.0") + weightingMethod = LOGWEIGHTING_245_10; + else if (methodString == "logWeighting_2.55_1.0") + weightingMethod = LOGWEIGHTING_255_10; + else if (methodString == "logWeighting_2.65_1.0") + weightingMethod = LOGWEIGHTING_265_10; + else if (methodString == "logWeighting_2.75_1.0") + weightingMethod = LOGWEIGHTING_275_10; + else if (methodString == "logWeighting_2.85_1.0") + weightingMethod = LOGWEIGHTING_285_10; + else if (methodString == "logWeighting_2.95_1.0") + weightingMethod = LOGWEIGHTING_295_10; + else if (methodString == "logWeighting_3.05_1.0") + weightingMethod = LOGWEIGHTING_305_10; + else if (methodString == "logWeighting_3.15_1.0") + weightingMethod = LOGWEIGHTING_315_10; + else if (methodString == "logWeighting_3.25_1.0") + weightingMethod = LOGWEIGHTING_325_10; + else if (methodString == "logWeighting_3.35_1.0") + weightingMethod = LOGWEIGHTING_335_10; + else if (methodString == "logWeighting_3.45_1.0") + weightingMethod = LOGWEIGHTING_345_10; + else if (methodString == "logWeighting_3.55_1.0") + weightingMethod = LOGWEIGHTING_355_10; + else if (methodString == "logWeighting_3.65_1.0") + weightingMethod = LOGWEIGHTING_365_10; + else if (methodString == "logWeighting_3.75_1.0") + weightingMethod = LOGWEIGHTING_375_10; + else if (methodString == "logWeighting_3.85_1.0") + weightingMethod = LOGWEIGHTING_385_10; + else if (methodString == "logWeighting_3.95_1.0") + weightingMethod = LOGWEIGHTING_395_10; + else if (methodString == "logWeighting_4.05_1.0") + weightingMethod = LOGWEIGHTING_405_10; + else if (methodString == "logWeighting_4.15_1.0") + weightingMethod = LOGWEIGHTING_415_10; + else if (methodString == "logWeighting_4.25_1.0") + weightingMethod = LOGWEIGHTING_425_10; + else if (methodString == "logWeighting_4.35_1.0") + weightingMethod = LOGWEIGHTING_435_10; + else if (methodString == "logWeighting_4.45_1.0") + weightingMethod = LOGWEIGHTING_445_10; + else if (methodString == "logWeighting_4.55_1.0") + weightingMethod = LOGWEIGHTING_455_10; + else if (methodString == "logWeighting_4.65_1.0") + weightingMethod = LOGWEIGHTING_465_10; + else if (methodString == "logWeighting_4.75_1.0") + weightingMethod = LOGWEIGHTING_475_10; + else if (methodString == "logWeighting_4.85_1.0") + weightingMethod = LOGWEIGHTING_485_10; + else if (methodString == "logWeighting_4.95_1.0") + weightingMethod = LOGWEIGHTING_495_10; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index df923ce..c65ac3d 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -164,6 +164,26 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = SQUAREDWEIGHTING; else if (methodString == "linearWeighting") weightingMethod = LINEARWEIGHTING; + else if (methodString == "logWeighting_2.0_1.0") + weightingMethod = LOGWEIGHTING_20_10; + else if (methodString == "logWeighting_2.1_1.0") + weightingMethod = LOGWEIGHTING_21_10; + else if (methodString == "logWeighting_2.2_1.0") + weightingMethod = LOGWEIGHTING_22_10; + else if (methodString == "logWeighting_2.3_1.0") + weightingMethod = LOGWEIGHTING_23_10; + else if (methodString == "logWeighting_2.4_1.0") + weightingMethod = LOGWEIGHTING_24_10; + else if (methodString == "logWeighting_2.5_1.0") + weightingMethod = LOGWEIGHTING_25_10; + else if (methodString == "logWeighting_2.6_1.0") + weightingMethod = LOGWEIGHTING_26_10; + else if (methodString == "logWeighting_2.7_1.0") + weightingMethod = LOGWEIGHTING_27_10; + else if (methodString == "logWeighting_2.8_1.0") + weightingMethod = LOGWEIGHTING_28_10; + else if (methodString == "logWeighting_2.9_1.0") + weightingMethod = LOGWEIGHTING_29_10; else if (methodString == "logWeighting_3.0_1.0") weightingMethod = LOGWEIGHTING_30_10; else if (methodString == "logWeighting_3.1_1.0") @@ -206,28 +226,70 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS weightingMethod = LOGWEIGHTING_49_10; else if (methodString == "logWeighting_5.0_1.0") weightingMethod = LOGWEIGHTING_50_10; - else if (methodString == "logWeighting_5.1_1.0") - weightingMethod = LOGWEIGHTING_51_10; - else if (methodString == "logWeighting_5.2_1.0") - weightingMethod = LOGWEIGHTING_52_10; - else if (methodString == "logWeighting_5.3_1.0") - weightingMethod = LOGWEIGHTING_53_10; - else if (methodString == "logWeighting_5.4_1.0") - weightingMethod = LOGWEIGHTING_54_10; - else if (methodString == "logWeighting_5.5_1.0") - weightingMethod = LOGWEIGHTING_55_10; - else if (methodString == "logWeighting_5.6_1.0") - weightingMethod = LOGWEIGHTING_56_10; - else if (methodString == "logWeighting_5.7_1.0") - weightingMethod = LOGWEIGHTING_57_10; - else if (methodString == "logWeighting_5.8_1.0") - weightingMethod = LOGWEIGHTING_58_10; - else if (methodString == "logWeighting_5.9_1.0") - weightingMethod = LOGWEIGHTING_59_10; else if (methodString == "logWeighting_6.0_1.0") weightingMethod = LOGWEIGHTING_60_10; else if (methodString == "logWeighting_7.0_1.0") weightingMethod = LOGWEIGHTING_70_10; + else if (methodString == "logWeighting_2.05_1.0") + weightingMethod = LOGWEIGHTING_205_10; + else if (methodString == "logWeighting_2.15_1.0") + weightingMethod = LOGWEIGHTING_215_10; + else if (methodString == "logWeighting_2.25_1.0") + weightingMethod = LOGWEIGHTING_225_10; + else if (methodString == "logWeighting_2.35_1.0") + weightingMethod = LOGWEIGHTING_235_10; + else if (methodString == "logWeighting_2.45_1.0") + weightingMethod = LOGWEIGHTING_245_10; + else if (methodString == "logWeighting_2.55_1.0") + weightingMethod = LOGWEIGHTING_255_10; + else if (methodString == "logWeighting_2.65_1.0") + weightingMethod = LOGWEIGHTING_265_10; + else if (methodString == "logWeighting_2.75_1.0") + weightingMethod = LOGWEIGHTING_275_10; + else if (methodString == "logWeighting_2.85_1.0") + weightingMethod = LOGWEIGHTING_285_10; + else if (methodString == "logWeighting_2.95_1.0") + weightingMethod = LOGWEIGHTING_295_10; + else if (methodString == "logWeighting_3.05_1.0") + weightingMethod = LOGWEIGHTING_305_10; + else if (methodString == "logWeighting_3.15_1.0") + weightingMethod = LOGWEIGHTING_315_10; + else if (methodString == "logWeighting_3.25_1.0") + weightingMethod = LOGWEIGHTING_325_10; + else if (methodString == "logWeighting_3.35_1.0") + weightingMethod = LOGWEIGHTING_335_10; + else if (methodString == "logWeighting_3.45_1.0") + weightingMethod = LOGWEIGHTING_345_10; + else if (methodString == "logWeighting_3.55_1.0") + weightingMethod = LOGWEIGHTING_355_10; + else if (methodString == "logWeighting_3.65_1.0") + weightingMethod = LOGWEIGHTING_365_10; + else if (methodString == "logWeighting_3.75_1.0") + weightingMethod = LOGWEIGHTING_375_10; + else if (methodString == "logWeighting_3.85_1.0") + weightingMethod = LOGWEIGHTING_385_10; + else if (methodString == "logWeighting_3.95_1.0") + weightingMethod = LOGWEIGHTING_395_10; + else if (methodString == "logWeighting_4.05_1.0") + weightingMethod = LOGWEIGHTING_405_10; + else if (methodString == "logWeighting_4.15_1.0") + weightingMethod = LOGWEIGHTING_415_10; + else if (methodString == "logWeighting_4.25_1.0") + weightingMethod = LOGWEIGHTING_425_10; + else if (methodString == "logWeighting_4.35_1.0") + weightingMethod = LOGWEIGHTING_435_10; + else if (methodString == "logWeighting_4.45_1.0") + weightingMethod = LOGWEIGHTING_445_10; + else if (methodString == "logWeighting_4.55_1.0") + weightingMethod = LOGWEIGHTING_455_10; + else if (methodString == "logWeighting_4.65_1.0") + weightingMethod = LOGWEIGHTING_465_10; + else if (methodString == "logWeighting_4.75_1.0") + weightingMethod = LOGWEIGHTING_475_10; + else if (methodString == "logWeighting_4.85_1.0") + weightingMethod = LOGWEIGHTING_485_10; + else if (methodString == "logWeighting_4.95_1.0") + weightingMethod = LOGWEIGHTING_495_10; else weightingMethod = DEFAULTWEIGHTING; diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index 1eb376d..a5aa9a1 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -193,6 +193,36 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth case LINEARWEIGHTING: SensorHitMap::poweredWeighting(1); break; + case LOGWEIGHTING_20_10: + SensorHitMap::logWeighting(2.0, 1.0); + break; + case LOGWEIGHTING_21_10: + SensorHitMap::logWeighting(2.1, 1.0); + break; + case LOGWEIGHTING_22_10: + SensorHitMap::logWeighting(2.2, 1.0); + break; + case LOGWEIGHTING_23_10: + SensorHitMap::logWeighting(2.3, 1.0); + break; + case LOGWEIGHTING_24_10: + SensorHitMap::logWeighting(2.4, 1.0); + break; + case LOGWEIGHTING_25_10: + SensorHitMap::logWeighting(2.5, 1.0); + break; + case LOGWEIGHTING_26_10: + SensorHitMap::logWeighting(2.6, 1.0); + break; + case LOGWEIGHTING_27_10: + SensorHitMap::logWeighting(2.7, 1.0); + break; + case LOGWEIGHTING_28_10: + SensorHitMap::logWeighting(2.8, 1.0); + break; + case LOGWEIGHTING_29_10: + SensorHitMap::logWeighting(2.9, 1.0); + break; case LOGWEIGHTING_30_10: SensorHitMap::logWeighting(3.0, 1.0); break; @@ -256,38 +286,101 @@ void SensorHitMap::calculateCenterPosition(ConsiderationMethod considerationMeth case LOGWEIGHTING_50_10: SensorHitMap::logWeighting(5.0, 1.0); break; - case LOGWEIGHTING_51_10: - SensorHitMap::logWeighting(5.1, 1.0); + case LOGWEIGHTING_60_10: + SensorHitMap::logWeighting(6.0, 1.0); break; - case LOGWEIGHTING_52_10: - SensorHitMap::logWeighting(5.2, 1.0); + case LOGWEIGHTING_70_10: + SensorHitMap::logWeighting(7.0, 1.0); break; - case LOGWEIGHTING_53_10: - SensorHitMap::logWeighting(5.3, 1.0); + case LOGWEIGHTING_205_10: + SensorHitMap::logWeighting(2.05, 1.0); break; - case LOGWEIGHTING_54_10: - SensorHitMap::logWeighting(5.4, 1.0); + case LOGWEIGHTING_215_10: + SensorHitMap::logWeighting(2.15, 1.0); break; - case LOGWEIGHTING_55_10: - SensorHitMap::logWeighting(5.5, 1.0); + case LOGWEIGHTING_225_10: + SensorHitMap::logWeighting(2.25, 1.0); break; - case LOGWEIGHTING_56_10: - SensorHitMap::logWeighting(5.6, 1.0); + case LOGWEIGHTING_235_10: + SensorHitMap::logWeighting(2.35, 1.0); break; - case LOGWEIGHTING_57_10: - SensorHitMap::logWeighting(5.7, 1.0); + case LOGWEIGHTING_245_10: + SensorHitMap::logWeighting(2.45, 1.0); break; - case LOGWEIGHTING_58_10: - SensorHitMap::logWeighting(5.8, 1.0); + case LOGWEIGHTING_255_10: + SensorHitMap::logWeighting(2.55, 1.0); break; - case LOGWEIGHTING_59_10: - SensorHitMap::logWeighting(5.9, 1.0); + case LOGWEIGHTING_265_10: + SensorHitMap::logWeighting(2.65, 1.0); break; - case LOGWEIGHTING_60_10: - SensorHitMap::logWeighting(6.0, 1.0); + case LOGWEIGHTING_275_10: + SensorHitMap::logWeighting(2.75, 1.0); break; - case LOGWEIGHTING_70_10: - SensorHitMap::logWeighting(7.0, 1.0); + case LOGWEIGHTING_285_10: + SensorHitMap::logWeighting(2.85, 1.0); + break; + case LOGWEIGHTING_295_10: + SensorHitMap::logWeighting(2.95, 1.0); + break; + case LOGWEIGHTING_305_10: + SensorHitMap::logWeighting(3.05, 1.0); + break; + case LOGWEIGHTING_315_10: + SensorHitMap::logWeighting(3.15, 1.0); + break; + case LOGWEIGHTING_325_10: + SensorHitMap::logWeighting(3.25, 1.0); + break; + case LOGWEIGHTING_335_10: + SensorHitMap::logWeighting(3.35, 1.0); + break; + case LOGWEIGHTING_345_10: + SensorHitMap::logWeighting(3.45, 1.0); + break; + case LOGWEIGHTING_355_10: + SensorHitMap::logWeighting(3.55, 1.0); + break; + case LOGWEIGHTING_365_10: + SensorHitMap::logWeighting(3.65, 1.0); + break; + case LOGWEIGHTING_375_10: + SensorHitMap::logWeighting(3.75, 1.0); + break; + case LOGWEIGHTING_385_10: + SensorHitMap::logWeighting(3.85, 1.0); + break; + case LOGWEIGHTING_395_10: + SensorHitMap::logWeighting(3.95, 1.0); + break; + case LOGWEIGHTING_405_10: + SensorHitMap::logWeighting(4.05, 1.0); + break; + case LOGWEIGHTING_415_10: + SensorHitMap::logWeighting(4.15, 1.0); + break; + case LOGWEIGHTING_425_10: + SensorHitMap::logWeighting(4.25, 1.0); + break; + case LOGWEIGHTING_435_10: + SensorHitMap::logWeighting(4.35, 1.0); + break; + case LOGWEIGHTING_445_10: + SensorHitMap::logWeighting(4.45, 1.0); + break; + case LOGWEIGHTING_455_10: + SensorHitMap::logWeighting(4.55, 1.0); + break; + case LOGWEIGHTING_465_10: + SensorHitMap::logWeighting(4.65, 1.0); + break; + case LOGWEIGHTING_475_10: + SensorHitMap::logWeighting(4.75, 1.0); + break; + case LOGWEIGHTING_485_10: + SensorHitMap::logWeighting(4.85, 1.0); + break; + case LOGWEIGHTING_495_10: + SensorHitMap::logWeighting(4.95, 1.0); break; //case NEWMETHOD: //SensorHitMap::newWeightingFunction() From 9f359d8aa447a6be0bc863ce6ce6692090779336 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 15 Feb 2017 10:49:59 +0100 Subject: [PATCH 215/297] [simulation] set noise level to zero --- test_cfg_newEB.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 2161140..c59f278 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -207,8 +207,8 @@ runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered, - energyNoise=cms.double(options.pedestalThreshold), #value in MIPS, represents additional value to the energy with gaussian distribution and 10% width - energyNoiseResolution=cms.double(options.pedestalThreshold/10.), + energyNoise=cms.double(0.0), #value in MIPS, represents additional value to the energy with gaussian distribution and 10% width + energyNoiseResolution=cms.double(0.0), MWCSmearingResolution=cms.double(50.) #value is in microns! ) From ac9d31506f2f38ec0c9069afe4168a2e8eefd83d Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 15 Feb 2017 11:01:14 +0100 Subject: [PATCH 216/297] [alignment] quality cut on MWC measurements, difference in coordinates must be below 1cm --- Reco/plugins/MillepedeBinaryWriter.cc | 23 ++++++++++++++++------- Reco/python/millepede_binarywriter_cfi.py | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index f8f4d2f..759b9f7 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -94,6 +94,7 @@ class MillepedeBinaryWriter : public edm::one::EDAnalyzer("totalEnergyThreshold"); useMWCReference = iConfig.getParameter("useMWCReference"); - + MWCQualityCut = iConfig.getParameter("MWCQualityCut"); + if (fittingMethod==GBLTRACK) { milleBinary = new gbl::MilleBinary((iConfig.getParameter("binaryFile")).c_str()); mille = NULL; @@ -365,18 +367,25 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet std::cout<<"Event "<hasValidMWCMeasurement) { - //std::cout<<"Event "< mwcs; + + if (useMWCReference) { + event.getByToken(MWCToken, mwcs); + if (!rd->hasValidMWCMeasurement) return; + if (MWCQualityCut) { + double delta_x12 = mwcs->at(0).x - mwcs->at(1).x; + double delta_y12 = mwcs->at(0).y - mwcs->at(1).y; + + if (fabs(delta_x12) > 1.0 || fabs(delta_y12) > 1.0) return; + } } if (run == -1) { std::cout<<"Run is not in configuration file - is ignored."< mwcs; - event.getByToken(MWCToken, mwcs); //opening Rechits edm::Handle Rechits; diff --git a/Reco/python/millepede_binarywriter_cfi.py b/Reco/python/millepede_binarywriter_cfi.py index 42078b0..0851edf 100644 --- a/Reco/python/millepede_binarywriter_cfi.py +++ b/Reco/python/millepede_binarywriter_cfi.py @@ -14,6 +14,7 @@ SensorSize = cms.int32(133), totalEnergyThreshold = cms.double(1000.), useMWCReference = cms.bool(True), + MWCQualityCut = cms.bool(True), RUNDATA = cms.InputTag("source","RunData","unpack" ), MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ), HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ), From d888e8758bb95a800e5a8dc605f31fa3ca496162 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 15 Feb 2017 11:01:58 +0100 Subject: [PATCH 217/297] [positionResolution] write out MWC coordinates after the alignment --- Reco/plugins/Position_Resolution_Analyzer.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index c65ac3d..da8e3ef 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -539,9 +539,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[(nLayers+1)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+1) + 21), 0.0, 0.0, alignmentParameters->getValue(energy, 100*(nLayers+1) + 11), alignmentParameters->getValue(energy, 100*(nLayers+1) + 12), 0.0); Sensors[(nLayers+1)]->setResidualResolution(mwc_resolution); - MWC_x1 = mwcs->at(0).x; - MWC_y1 = mwcs->at(0).y; - MWC_z1 = mwcs->at(0).z; + MWC_x1 = Sensors[nLayers+1]->getLabHitPosition().first; //mwcs->at(0).x; + MWC_y1 = Sensors[nLayers+1]->getLabHitPosition().second; //mwcs->at(0).y; + MWC_z1 = Sensors[nLayers+1]->getLabZ() + Sensors[nLayers+1]->getIntrinsicHitZPosition(); //mwcs->at(0).z; Sensors[(nLayers+2)] = new SensorHitMap((nLayers+2)); //attention: This is specifically tailored for the 8-layer setup Sensors[(nLayers+2)]->setLabZ(mwcs->at(1).z, 0.001); @@ -550,9 +550,9 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[(nLayers+2)]->setAlignmentParameters(alignmentParameters->getValue(energy, 100*(nLayers+2) + 21), 0.0, 0.0, alignmentParameters->getValue(energy, 100*(nLayers+2) + 11), alignmentParameters->getValue(energy, 100*(nLayers+2) + 12), 0.0); Sensors[(nLayers+2)]->setResidualResolution(mwc_resolution); - MWC_x2 = mwcs->at(1).x; - MWC_y2 = mwcs->at(1).y; - MWC_z2 = mwcs->at(1).z; + MWC_x2 = Sensors[nLayers+2]->getLabHitPosition().first; //mwcs->at(1).x; + MWC_y2 = Sensors[nLayers+2]->getLabHitPosition().second; //mwcs->at(1).y; + MWC_z2 = Sensors[nLayers+2]->getLabZ() + Sensors[nLayers+1]->getIntrinsicHitZPosition(); //mwcs->at(1).z; } else { useMWC = 0; From 37bb0b943bce6e9b727ce3bfd20391fda3bf18d5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 15 Feb 2017 11:03:01 +0100 Subject: [PATCH 218/297] [MWC] shift second MWC coordinates by their mean distance to the first (after the rotation), option in configuarion --- RawToDigi/plugins/HGCalTBTextSource.cc | 9 +++++++++ RawToDigi/plugins/HGCalTBTextSource.h | 4 ++++ test_cfg_newEB.py | 3 +++ 3 files changed, 16 insertions(+) diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 2d408cc..03b34ab 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -221,6 +221,12 @@ void HGCalTBTextSource::produce(edm::Event & event) double y_preRot = EventMultiWireChambers[mwcCounter][_imwc].y/10.; EventMultiWireChambers[mwcCounter][_imwc].x = cos(rotAngle) * x_preRot + sin(rotAngle) * y_preRot; //apply the rotation just here because the filtering for -999 must occur first EventMultiWireChambers[mwcCounter][_imwc].y = -sin(rotAngle) * x_preRot + cos(rotAngle) * y_preRot; + + if (_imwc==1) {//i.e. the second MWC + EventMultiWireChambers[mwcCounter][_imwc].x += mwc2DeltaX; + EventMultiWireChambers[mwcCounter][_imwc].y += mwc2DeltaY; + } + mwcs->push_back(EventMultiWireChambers[mwcCounter][_imwc]); } mwcCounter++; @@ -289,6 +295,9 @@ void HGCalTBTextSource::fillDescriptions(edm::ConfigurationDescriptions& descrip desc.addUntracked >("fileNames"); desc.addUntracked("inputPathFormat"); desc.addUntracked("MWCInputPathFormat"); + desc.addUntracked("mwcRotation"); + desc.addUntracked("mwc2DeltaX"); + desc.addUntracked("mwc2DeltaY"); desc.addUntracked >("readOnlyRuns"); desc.addUntracked("runEnergyMapFile"); desc.addUntracked("nSpills", 6); diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index c4d64c0..94c79cf 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -37,6 +37,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles inputPathFormat(""), MWCInputPathFormat(""), mwcRotation(pset.getUntrackedParameter("mwcRotation", 270.)), + mwc2DeltaX(pset.getUntrackedParameter("mwc2DeltaX", 0.45)), //additional correction after the rotation to the new x-coordinate of the second MWC + mwc2DeltaY(pset.getUntrackedParameter("mwc2DeltaY", 0.077)), //additional correction after the rotation to the new y-coordinate of the second MWC m_file(0), NSpills(pset.getUntrackedParameter("nSpills", 6)) { @@ -89,6 +91,8 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::vector _MWCFileNames; int mwcCounter; double mwcRotation; + double mwc2DeltaX; + double mwc2DeltaY; std::array< std::vector < unsigned int> , MAXLAYERS> m_lines; FILE* m_file; diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index c59f278..ba7eef3 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -195,6 +195,9 @@ runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), + mwcRotation=cms.untracked.double(270.), + mwc2DeltaX=cms.untracked.double(0.45), + mwc2DeltaY=cms.untracked.double(0.077), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), From f9c9a3c4faaba99f38de8d40d6096a1a25d3fa93 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 15 Feb 2017 17:54:22 +0100 Subject: [PATCH 219/297] [alignment] offset in MWC cuts --- Reco/plugins/MillepedeBinaryWriter.cc | 2 +- test_cfg_newEB.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index 759b9f7..d3e0977 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -378,7 +378,7 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet double delta_x12 = mwcs->at(0).x - mwcs->at(1).x; double delta_y12 = mwcs->at(0).y - mwcs->at(1).y; - if (fabs(delta_x12) > 1.0 || fabs(delta_y12) > 1.0) return; + if (fabs(delta_x12-0.45) > 1.0 || fabs(delta_y12-0.076) > 1.0) return; //Todo: Hard coded numbers! Offsets correspond to angles } } if (run == -1) { diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index ba7eef3..99e627e 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -196,8 +196,10 @@ inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), mwcRotation=cms.untracked.double(270.), - mwc2DeltaX=cms.untracked.double(0.45), - mwc2DeltaY=cms.untracked.double(0.077), + mwc2DeltaX=cms.untracked.double(0.), + mwc2DeltaY=cms.untracked.double(0.), + #mwc2DeltaX=cms.untracked.double(0.45), + #mwc2DeltaY=cms.untracked.double(0.077), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), From a7e5bc1695b4a6b0d8104d883b3b09a482273066 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 16 Feb 2017 17:48:15 +0100 Subject: [PATCH 220/297] [geometry] move WaferGeometry.cc into Geometry directory --- .../interface/HGCalWaferGeometry.h | 0 .../src/HGCalWaferGeometry.cc | 2 +- RawToDigi/plugins/HGCalTBGenSimSource.h | 2 +- test_cfg_newEB.py | 14 +++++++------- 4 files changed, 9 insertions(+), 9 deletions(-) rename Reco/interface/WaferGeometry.h => Geometry/interface/HGCalWaferGeometry.h (100%) rename Reco/src/WaferGeometry.cc => Geometry/src/HGCalWaferGeometry.cc (97%) diff --git a/Reco/interface/WaferGeometry.h b/Geometry/interface/HGCalWaferGeometry.h similarity index 100% rename from Reco/interface/WaferGeometry.h rename to Geometry/interface/HGCalWaferGeometry.h diff --git a/Reco/src/WaferGeometry.cc b/Geometry/src/HGCalWaferGeometry.cc similarity index 97% rename from Reco/src/WaferGeometry.cc rename to Geometry/src/HGCalWaferGeometry.cc index ced7fa5..1d2bd46 100644 --- a/Reco/src/WaferGeometry.cc +++ b/Geometry/src/HGCalWaferGeometry.cc @@ -1,4 +1,4 @@ -#include "HGCal/Reco/interface/WaferGeometry.h" +#include "HGCal/Geometry/interface/HGCalWaferGeometry.h" HexGeometry::HexGeometry(bool fine) { diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index 8c10b3c..2d6d2c4 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -11,7 +11,7 @@ #include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" #include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -#include "HGCal/Reco/interface/WaferGeometry.h" +#include "HGCal/Geometry/interface/HGCalWaferGeometry.h" #include #include #include diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 938e45c..05f7fd5 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -27,11 +27,6 @@ VarParsing.VarParsing.varType.string, 'Result of processing') -options.register('outputPostfix', - 'default', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Postfix to the output file') options.register('isData', True, @@ -93,6 +88,7 @@ VarParsing.VarParsing.varType.string, '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') + options.register('reportEvery', 100, VarParsing.VarParsing.multiplicity.singleton, @@ -106,6 +102,12 @@ 'Run the analysis only for the indicated runs' ) +options.register('outputPostfix', + 'default', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Postfix to the output file') + '''Specific options for the position resolution''' options.register('alignmentParameterFiles', '', @@ -198,8 +200,6 @@ mwcRotation=cms.untracked.double(270.), mwc2DeltaX=cms.untracked.double(0.), mwc2DeltaY=cms.untracked.double(0.), - #mwc2DeltaX=cms.untracked.double(0.45), - #mwc2DeltaY=cms.untracked.double(0.077), fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), From 4699cb46815970fad1580e6e4f3292b3cf7f0ef5 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 16 Feb 2017 18:38:41 +0100 Subject: [PATCH 221/297] [README] use markdown format --- README.md | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.txt | 67 ------------------------------ 2 files changed, 118 insertions(+), 67 deletions(-) create mode 100644 README.md delete mode 100644 README.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf531b4 --- /dev/null +++ b/README.md @@ -0,0 +1,118 @@ +CMS HGCal Testbeam Analysis Framework +============================================= + +### Content + +- [Download the code](#download-the-code) +- [Location of data files](#location-of-data-files) +- [Running the code](#running-the-code) +- [Updates from the positionResolution branch](#updates-from-the-positionResolution-branch) +- [More information](#more-information) + + + + +## Download the code +* CMSMSW Version 8.0.1 +* **`scram project ${RELEASE}`** +* **`cd ${RELEASE}/src/`** +* **`cmsenv`** +* **`git cms-init`** +* **`git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/`** +* **`git checkout FNAL_TB_4Layers`** +* **`git pull`** +* **`scram b -j16`** + +## Location of the data files + +#### Raw data files +The RAW files can be found in **`/afs/cern.ch/user/r/rchatter/public/FNAL_TB_May/FNAL_TB_May_4Module_Runs`**. +This is structured by beam type and for the Electrons further by the energy of the electron beam. + +#### Electronics map and pedestal files +* The EMAP for this run **`map_FNAL_Layer1234.txt`** can be found in CondObjects/data +The event average pedestal files for both low and high gain can be found in +**`Ped_LowGain_M1254.txt`** and **`Ped_HighGain_M1254.txt`** also in **`CondObjects/data`**. +* The information of the EMAP is needed by the framework when producing the digis from the +RAW and is provided in the file **`RawToDigi/python/hgcaltbdigis_cfi.py`**. +It is also needed in analysis code if a conversion from Detector Id to Electronics Id is needed. +* May refer to the example **`RawToDigi/plugins/DigiPlotter.cc`** . In the **`EndJob()`** function of this same +code the format needed in which the pedestal files are to be written out can be found. +* The Pedestal information is needed in the step from Digis to Reco. And it is provided from +**`Reco/python/hgcaltbrechitproducer_cfi.py`**. + +## Running the code +* In **`test_cfg.py`** the RAW data file to be run is to be provides in the line: + +``` +process.source = +cms.Source("HGCalTBTextSource", + run=cms.untracked.int32(1), + fileNames=cms.untracked.vstring("file:FNAL_TB_May_4Module_Runs/PED/HGC_Output_1600.txt") +) +``` + +* In **`cms.Path`**: +**`process.hgcaltbdigis`** produces digis and **`process.hgcaltbrechits`** produces the rechits. The analyzer to be run can come after this. There are a few provided: +**`RawToDigi/plugins/DigiPlotter.cc`** to generate the pedestals +**`Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc`** for the noise studies starting from pedestal subtracted digis. + +* The output root file name is set in: +``` +process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_1600_Reco.root") ) +``` + +#### Event-based reconstruction (Outdated?) +``` +sh scripts/rearrangeTxtFile.sh input.txt +>> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ +cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun +>> chainSequence= +>> test_cfg_newEB.py to load the reqarranged .txt: +-> mount eos +-> options.register('dataFolder','~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',.... +``` + +#### Overview of analysis configurations +* **`chainSequence=1`** Runs on Digis produces pedestal files in the path specifienfied under pedestalsHighGain and pedestalsLowGain +* **`chainSequence=4`** Runs event Display analyzer +* **`chainSequence=5`** Runs on Recos for each cell of the detector across layers. Use for pion, muon and pedestal run. Correlation across cells as implemented by Kai-Yu are evaluated. +* **`chainSequence=6`** to run **`Layer_Sum_Analyzer`**: Evaluates for each layer as well as summed across layers: Max hit, Max hit + 6 nearest neighbours(7 cells), 19 cells and All cells --- **with each cell picked subject to a 2 MIP cut**. Results are available considering only the energy deposited in Silicon, and with dE/dx weights to recover the total energy deposited in the absorbers and the silicon sensors. + +* **`configuration=-1`** ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) +* **`configuration=1`** (2) to select weights for 5X0 (25X0) 8 layers cern runs + +## Updates from the positionResolution branch + +### (Extended)TextInput Plugin +todo + +### (New) GenSim to RecHit Converter +todo + +### (New) PositionResolutionAnalyzer +todo + +### (New) MillepedeBinaryWriter +todo + +### Helper Classes +#### Geometry +todo + +#### Sensors +todo + +#### Tracks +todo + +#### AlignmentParameters +todo + +### Examplary run commands +todo + + +## More Information +For general instructions on the framework, co-ordinate system, reconstruction sequence, etc please refer to +[http://cms-hgcal.github.io/TestBeam/](http://cms-hgcal.github.io/TestBeam/) diff --git a/README.txt b/README.txt deleted file mode 100644 index 788cc5c..0000000 --- a/README.txt +++ /dev/null @@ -1,67 +0,0 @@ -For general instructions on the framework, co-ordinate system, reconstruction sequence, etc please refer to -http://cms-hgcal.github.io/TestBeam/ - -Some specific information about this run with 4 modules is mentioned below, particularly the different electronics map and pedestal files. - -DOWNLOAD THE CODE: -RELEASE=CMSSW_8_0_1 -scram project ${RELEASE} -cd ${RELEASE}/src/ -cmsenv -git cms-init -git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/ -git checkout FNAL_TB_4Layers -git pull -scram b -j16 -(Might need to do scram b more than once till compilation is successful) - -Electronics Map[EMAP] and event average pedestal files: -The EMAP for this run "map_FNAL_Layer1234.txt" can be found in CondObjects/data -The event average pedestal files for both low and high gain can be found in -"Ped_LowGain_M1254.txt" and "Ped_HighGain_M1254.txt" also in CondObjects/data -The information of the EMAP is needed by the framework when producing the digis from the -RAW and is provided in the file RawToDigi/python/hgcaltbdigis_cfi.py -It is also needed in analysis code if a conversion from Detector Id to Electronics Id is needed. -May refer to the example RawToDigi/plugins/DigiPlotter.cc . In the EndJob() function of this same -code the format needed in which the pedestal files are to be written out can be found. -The Pedestal information is needed in the step from Digis to Reco. And it is provided from -Reco/python/hgcaltbrechitproducer_cfi.py - - -RAW data files: -The RAW files can be found in /afs/cern.ch/user/r/rchatter/public/FNAL_TB_May/FNAL_TB_May_4Module_Runs -This is structured by beam type and for the Electrons further by the energy of the electron beam. - -To RUN: -In test_cfg.py the RAW data file to be run is to be provides in the line: -process.source = cms.Source("HGCalTBTextSource", - run=cms.untracked.int32(1), ### maybe this should be read from the file - fileNames=cms.untracked.vstring("file:FNAL_TB_May_4Module_Runs/PED/HGC_Output_1600.txt") - ) - -In cms.Path: process.hgcaltbdigis produces digis and process.hgcaltbrechits produces the rechits[the ADCToGeV factor is taken as unity until the calibrated numbers are available]. The analyzer to be run can come after this. There are a few provided: -RawToDigi/plugins/DigiPlotter.cc to generate the pedestals -Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc for the noise studies starting from pedestal subtracted digis. - -The output root file name is set in: -process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_1600_Reco.root") ) - - -cmsRun test_cfg.py >> /dev/null - - -** new event-based reco ** -sh scripts/rearrangeTxtFile.sh input.txt - >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ - -cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun - >> chainSequence=1 Runs on Digis produces pedestal files in the path specifienfied under pedestalsHighGain and pedestalsLowGain - >> chainSequence=4 Runs event Display analyzer - >> chainSequence=5 Runs on Recos for each cell of the detector across layers. Use for pion, muon and pedestal run. Correlation across cells as implemented by Kai-Yu are evaluated. - >> chainSequence=6 to run Layer_Sum_Analyzer: Evaluates for each layer as well as summed across layers: Max hit, Max hit + 6 nearest neighbours(7 cells), 19 cells and All cells --- WITH EACH CELL PICKED SUBJECT TO A 2 MIP CUT. Results are available considering only the energy deposited in Silicon, and with dE/dx weights to recover the total energy deposited in the absorbers and the silicon sensors. - >> configuration=-1 ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) - >> configuration=1 (2) to select weights for 5X0 (25X0) 8 layers cern runs - >> test_cfg_newEB.py to load the reqarranged .txt: - -> mount eos - -> options.register('dataFolder','~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',.... - From a51d114458b7b3489e30c5b5ba4649be7c5b0ae0 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Thu, 16 Feb 2017 18:42:10 +0100 Subject: [PATCH 222/297] [textinput] downward compatibility of textinput module, either fileNames indicated or array --- RawToDigi/plugins/HGCalTBTextSource.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 94c79cf..0c247f2 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -48,19 +48,20 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles produces("RunData"); produces("MultiWireChambers"); - if (fileNames()[0] != "file:DUMMY") { - _fileNames = fileNames(); - } //find and fill the configured runs runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat"); readOnlyRuns = pset.getUntrackedParameter >("readOnlyRuns"); - std::fstream map_file; - map_file.open(runEnergyMapFile.c_str(), std::fstream::in); - fillConfiguredRuns(map_file); - map_file.close(); + if (fileNames()[0] != "file:DUMMY") { + _fileNames = fileNames(); + } else { + std::fstream map_file; + map_file.open(runEnergyMapFile.c_str(), std::fstream::in); + fillConfiguredRuns(map_file); + map_file.close(); + } } From b7671354dd78f7ce6b0ab1f67a9f5d7d0f3fb1f0 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 17 Feb 2017 14:48:26 +0100 Subject: [PATCH 223/297] [data reading] add event counter --- DataFormats/interface/HGCalTBRunData.h | 1 + RawToDigi/plugins/HGCalTBGenSimSource.cc | 12 ++++++++---- RawToDigi/plugins/HGCalTBGenSimSource.h | 1 + RawToDigi/plugins/HGCalTBTextSource.cc | 15 ++++++++++----- RawToDigi/plugins/HGCalTBTextSource.h | 11 +++++++---- Reco/plugins/Position_Resolution_Analyzer.cc | 6 +++--- 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index 214c7ea..e551620 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -7,6 +7,7 @@ struct RunData { RunData(): configuration(0), run(0), energy(0), runType(""){}; int configuration; int run; + int event; double energy; std::string runType; bool hasValidMWCMeasurement; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index eaa6905..78bdd83 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -8,6 +8,7 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In currentEvent(-1), rootFile(NULL) { + eventCounter = 0; //find and fill the configured runs outputCollectionName = pset.getParameter("OutputCollectionName"); @@ -33,13 +34,14 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In _fileNames.push_back(fInfo); } + } else { + std::fstream map_file; + map_file.open(runEnergyMapFile.c_str(), std::fstream::in); + fillConfiguredRuns(map_file); + map_file.close(); } - std::fstream map_file; - map_file.open(runEnergyMapFile.c_str(), std::fstream::in); - fillConfiguredRuns(map_file); - map_file.close(); _e_mapFile = pset.getParameter("e_mapFile_CERN"); @@ -155,6 +157,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) return; } + eventCounter++; //indexes each event chronologically passing this plugin //first: fill the rechits std::auto_ptr rechits(new HGCalTBRecHitCollection); @@ -222,6 +225,7 @@ void HGCalTBGenSimSource::produce(edm::Event & event) rd->configuration = (*fileIterator).config; rd->runType = (*fileIterator).runType; rd->run = (*fileIterator).index; + rd->run = eventCounter; rd->hasDanger = false; bool _hasValidMWCMeasurement = true; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index 2d6d2c4..f5a759f 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -70,6 +70,7 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles int currentRun; int currentEvent; + int eventCounter; TFile *rootFile; TTree *tree; //!pointer to the analyzed TTree or TChain diff --git a/RawToDigi/plugins/HGCalTBTextSource.cc b/RawToDigi/plugins/HGCalTBTextSource.cc index 03b34ab..90adb7e 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.cc +++ b/RawToDigi/plugins/HGCalTBTextSource.cc @@ -93,7 +93,7 @@ void HGCalTBTextSource::readMWCDataFromFile(std::string filepath) { mwcCounter++; } - std::cout<configuration = configuredRuns[m_run].configuration; rd->runType = configuredRuns[m_run].runType; rd->run = m_run; + rd->event = eventCounter; } else { rd->energy = -1; rd->configuration = -1; rd->runType = "-1"; rd->run = -1; + rd->event = eventCounter; } if (eventsPerRun.find(m_run) == eventsPerRun.end()) { diff --git a/RawToDigi/plugins/HGCalTBTextSource.h b/RawToDigi/plugins/HGCalTBTextSource.h index 0c247f2..a87c651 100644 --- a/RawToDigi/plugins/HGCalTBTextSource.h +++ b/RawToDigi/plugins/HGCalTBTextSource.h @@ -48,11 +48,13 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles produces("RunData"); produces("MultiWireChambers"); + eventCounter = 0; + //find and fill the configured runs - runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile"); - inputPathFormat = pset.getUntrackedParameter("inputPathFormat"); - MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat"); - readOnlyRuns = pset.getUntrackedParameter >("readOnlyRuns"); + runEnergyMapFile = pset.getUntrackedParameter("runEnergyMapFile", ""); + inputPathFormat = pset.getUntrackedParameter("inputPathFormat", ""); + MWCInputPathFormat = pset.getUntrackedParameter("MWCInputPathFormat", ""); + readOnlyRuns = pset.getUntrackedParameter >("readOnlyRuns", std::vector({})); if (fileNames()[0] != "file:DUMMY") { _fileNames = fileNames(); @@ -91,6 +93,7 @@ class HGCalTBTextSource : public edm::ProducerSourceFromFiles std::vector _fileNames; std::vector _MWCFileNames; int mwcCounter; + int eventCounter; double mwcRotation; double mwc2DeltaX; double mwc2DeltaY; diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index da8e3ef..cb025c3 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -350,8 +350,8 @@ Position_Resolution_Analyzer::Position_Resolution_Analyzer(const edm::ParameterS //initialize tree and set Branch addresses outTree = fs->make("deviations", "deviations"); outTree->Branch("configuration", &configuration, "configuration/I"); - outTree->Branch("eventId", &evId, "eventId/I"); //event ID as it comes from the reader - outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration of this analysis w.r.t. the individual events + outTree->Branch("eventId", &evId, "eventId/I"); //event ID as it comes from the reader, as it is stored in the txt files + outTree->Branch("eventCounter", &eventCounter, "eventCounter/I"); //event counter, current iteration, indexing occurs chronologically in the readin plugins outTree->Branch("run", &run, "run/I"); outTree->Branch("layer", &layer, "layer/I"); outTree->Branch("energy", &energy, "energy/D"); //electron energy in GeV @@ -413,7 +413,6 @@ Position_Resolution_Analyzer::~Position_Resolution_Analyzer() { // ------------ method called for each event ------------ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::EventSetup& setup) { - eventCounter++; edm::Handle rd; //get the relevant event information @@ -421,6 +420,7 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E configuration = rd->configuration; evId = event.id().event(); run = rd->run; + eventCounter = rd->event; energy = rd->energy; if (rd->hasDanger) { std::cout<<"Event "< Date: Fri, 17 Feb 2017 15:03:24 +0100 Subject: [PATCH 224/297] [steering] own steering file for the position resolution. test_new_cfg.py minimally extended (input plugin otpions). Downward compatibility restored. --- position_resolution_cfg.py | 316 +++++++++++++++++++++++++++++++++++++ test_cfg_newEB.py | 238 +++++----------------------- 2 files changed, 352 insertions(+), 202 deletions(-) create mode 100644 position_resolution_cfg.py diff --git a/position_resolution_cfg.py b/position_resolution_cfg.py new file mode 100644 index 0000000..7fd5d9d --- /dev/null +++ b/position_resolution_cfg.py @@ -0,0 +1,316 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +import os,sys + + +options = VarParsing.VarParsing('standard') + +#################################### +# Options for reading in the data +options.register('repoFolder', + '/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'directory to the repository to correctly navigate to some file in CondObjects' + ) + +options.register('dataFolder', + '/home/data/Testbeam/September2016', #use this for running on pclcd + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'folder containing raw text input') + +options.register('pathToRunEnergyFile', + '/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + '(Absolute) path to the file that indicates the runs to run the analysis on.') + +options.register('readOnlyRuns', + '', + VarParsing.VarParsing.multiplicity.list, + VarParsing.VarParsing.varType.int, + 'Run the analysis only for the indicated runs' + ) + +options.register('isData', + True, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.bool, + 'Is the analysis run on real data (otherwise on simulated samples) ?') + +options.register('nSpills', + 15, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Number of spills in run') + + +#################################### +# Options specific for the pedestal subtraction +options.register('pedestalsHighGain', + '%s/CondObjects/data/Ped_HighGain_L8.txt' % options.repoFolder, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to high gain pedestals file') + +options.register('pedestalsLowGain', + '%s/CondObjects/data/Ped_LowGain_L8.txt' % options.repoFolder, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to low gain pedestals file') + + + +#################################### +# Options for running the analysis, e.g. indicating what sequence is to be run +options.register('chainSequence', + 8, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Here: only 8 (position resolution) and 9 (writing of millepede binary) is considered') + +options.register('reportEvery', + 100, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Frequency of event count print outs on the console') + + +#################################### +# Options related to the experimental setup +options.register('configuration', + -1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') + + + +options.register('alignmentParameterFiles', + '', + VarParsing.VarParsing.multiplicity.list, + VarParsing.VarParsing.varType.string, + 'Alignment parameter files as obtained from the pede framework.' + ) + + +#################################### +#Specific options for the extra(inter)polation of impact positions in the MillepedeBinaryWrite and positionResolutionAnalyzer +options.register('useMWCReference', + True, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.bool, + 'Are the multi wire chamber information used for the prediction of impact points?') + +options.register('fittingMethod', + 'gblTrack', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Model of the electron tracks' + ) + +options.register('fitPointWeightingMethod', + "none", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Fit points (one per layer) in the track fit are linearly weighted according to the deposited energy (in MIPs)' + ) + +#################################### +#Specific options for reconstruction of impact positions in the MillepedeBinaryWrite and positionResolutionAnalyzer +options.register('considerationMethod', + 'all', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Possible arguments are: all, closest7, closest19, clusters' + ) + +options.register('weightingMethod', + 'squaredWeighting', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_5.0_1.0, logWeighting_5.0_0.5, logWeighting_7.0_1.0 ' + ) + +options.register('pedestalThreshold', + 2., + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.float, + 'Threshold for the pedestal subtraction calculation in the position resolution plugin. Unit is MIP.' + ) + +#################################### +# Output file options +options.register('outputFolder', + '/home/outputs/Testbeam/September2016/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Result of processing') + +options.register('outputPostfix', + 'default', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Postfix to the output file') + + +options.parseArguments() + + + + +#################################### +# Check if necessary folders exist +if not os.path.isdir(options.dataFolder): + sys.exit("Error: Data folder not found or inaccessible!") + +if not os.path.isdir(options.outputFolder): + os.system("mkdir -p " + options.outputFolder) + + + +################################ +# Setting an upper limit for the events to be processed, e.g. for debugging +options.maxEvents = -1 +process = cms.Process("unpack") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + +#################################### +# Reduces the frequency of event count couts +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = options.reportEvery + +#################################### +# Load the standard sequences +process.load('HGCal.StandardSequences.RawToDigi_cff') +process.load('HGCal.StandardSequences.LocalReco_cff') +process.load('HGCal.StandardSequences.dqm_cff') +#################################### + + +#################################### +# Initialize the data read-in plugins +if options.isData: + process.source = cms.Source("HGCalTBTextSource", + runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), + inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.dataFolder), + MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), + mwcRotation=cms.untracked.double(270.), + mwc2DeltaX=cms.untracked.double(0.), + mwc2DeltaY=cms.untracked.double(0.), + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered + readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), + nSpills=cms.untracked.uint32(options.nSpills) + ) +else: + process.source = cms.Source("HGCalTBGenSimSource", + OutputCollectionName = cms.string(''), + e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), + runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), + inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), + fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered, + energyNoise=cms.double(0.0), + energyNoiseResolution=cms.double(0.0), + MWCSmearingResolution=cms.double(50.) #value is in microns! + ) + + +#################################### +#add skip event exception which might occur for simulated samples because the last event is not properly passed forward +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') +) + +#################################### +# BadSpillFilter options +process.BadSpillFilter.nameCFG1 = cms.string("%s/CondObjects/data/Bad_Run_Spill_CFG1.txt" % options.repoFolder) +process.BadSpillFilter.nameCFG2 = cms.string("%s/CondObjects/data/Bad_Run_Spill_CFG2.txt" % options.repoFolder) + +#################################### +# hgcaltbdigisplotter options +process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) +process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) + +#################################### +# hgcaltbrechits options +process.hgcaltbrechits.pedestalLow = cms.string(options.pedestalsLowGain) +process.hgcaltbrechits.pedestalHigh = cms.string(options.pedestalsHighGain) +process.hgcaltbrechits.gainLow = cms.string('') +process.hgcaltbrechits.gainHigh = cms.string('') + +#################################### +# position_resolution_analyzer options +process.position_resolution_analyzer.alignmentParameterFiles = cms.vstring(options.alignmentParameterFiles) +process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) +process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) +process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) +process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) +process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) +process.position_resolution_analyzer.totalEnergyThreshold = -1000. +process.position_resolution_analyzer.useMWCReference = cms.bool(options.useMWCReference) + +#################################### +# millepede_binarywriter options +process.millepede_binarywriter.fittingMethod = cms.string(options.fittingMethod) +process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) +process.millepede_binarywriter.weightingMethod = cms.string(options.weightingMethod) +process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) +process.millepede_binarywriter.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) +process.millepede_binarywriter.totalEnergyThreshold = -1000. +process.millepede_binarywriter.useMWCReference = cms.bool(options.useMWCReference) +process.millepede_binarywriter.binaryFile = "%s/HGCRun_MillepedeBinary_%s.bin"%(options.outputFolder,options.outputPostfix) + + +#################################### +# Necessary redefinition of sources if the input data is not read with the HGCalTBTextSource plugin +if not options.isData: + process.hgcaltbclusters.rechitCollection = cms.InputTag("source","","unpack") + process.position_resolution_analyzer.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) + process.millepede_binarywriter.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) + + +#################################### +# Set the configuration in the appropriate plugins that need this information +if(options.configuration == "1"): + process.BadSpillFilter.layers_config = cms.int32(1) + process.hgcaltbrechits.layers_config = cms.int32(1) + process.position_resolution_analyzer.layers_config = cms.int32(1) +elif(options.configuration == "2"): + process.BadSpillFilter.layers_config = cms.int32(2) + process.hgcaltbrechits.layers_config = cms.int32(2) + process.position_resolution_analyzer.layers_config = cms.int32(2) +else: + sys.exit("Error: Configuarion % is not supported in the position resolution analysis" % options.configuration) + + +#################################### +# Define the output file using TFileService. The MillepedeBinaryWriter defines its own, non-ROOT file as output +if (options.chainSequence == 8): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/HGCRun_Output_Position_Resolution_%s.root"%(options.outputFolder,options.outputPostfix))) + + + +#################################### +# Setup the sequences. With simulated data, 'process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits' do not run but are replaced by the HGCalTBGenSimSource plugin that converts +# the root tuples to HGCalRechits. +if options.isData: + if (options.chainSequence == 8): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) + elif (options.chainSequence == 9): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) + +else: + if (options.chainSequence == 8): + process.p =cms.Path(process.hgcaltbclusters*process.position_resolution_analyzer) + elif (options.chainSequence == 9): + process.p =cms.Path(process.hgcaltbclusters*process.millepede_binarywriter) + + + + + + diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 05f7fd5..04f5d03 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -3,37 +3,20 @@ import os,sys -# TEST RUN: -# Simulation: -# cmsRun test_cfg_newEB.py configuration=1 chainSequence=1 outputFolder=/home/outputs/Simulation/September2016/ outputPostfix=test isData=False runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 -# Real data: -# cmsRun test_cfg_newEB.py configuration=1 chainSequence=8 outputFolder=/home/outputs/Testbeam isData=true runType=HGCRun pathToRunEnergyFile=/afs/cern.ch/user/t/tquast/CMS_HGCal_Upgrade/luigiTasks/positionResolutionNovember2016/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 - -repoFolder = "/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/" - options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' #Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', - #'/afs/cern.ch/user/t/tquast/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/', #use this for eos - '/home/data/Testbeam/September2016', #use this for running on pclcd - #'/home/home1/institut_3a/quast/TestBeamSeptember2016/', #use this for running on lx3a03 + '/afs/cern.ch/user/r/rchatter/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',#modify path appropriately to where eos is mounted VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw text input') options.register('outputFolder', - '/home/outputs/Testbeam/September2016/', + '/tmp/',#Choose the output directly where you wish the output root files to be written VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') - -options.register('isData', - True, - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.bool, - 'Is the analysis run on real data (otherwise on simulated samples) ?') - # options.register('commonPrefix', # '', # VarParsing.VarParsing.multiplicity.singleton, @@ -46,12 +29,6 @@ VarParsing.VarParsing.varType.int, 'Input file to process') -options.register('pathToRunEnergyFile', - '/', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - '(Absolute) path to the file that indicates the runs to run the analysis on.') - options.register('runType', 'Unknown', VarParsing.VarParsing.multiplicity.singleton, @@ -71,13 +48,13 @@ 'Number of spills in run') options.register('pedestalsHighGain', - repoFolder+'CondObjects/data/Ped_HighGain_L8.txt', + 'CondObjects/data/Ped_HighGain_L8.txt', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Path to high gain pedestals file') options.register('pedestalsLowGain', - repoFolder+'CondObjects/data/Ped_LowGain_L8.txt', + 'CondObjects/data/Ped_LowGain_L8.txt', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Path to low gain pedestals file') @@ -89,78 +66,14 @@ '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') -options.register('reportEvery', - 100, - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, - 'Frequency of event count print outs on the console') - -options.register('readOnlyRuns', - '', - VarParsing.VarParsing.multiplicity.list, - VarParsing.VarParsing.varType.int, - 'Run the analysis only for the indicated runs' - ) - -options.register('outputPostfix', - 'default', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Postfix to the output file') - -'''Specific options for the position resolution''' -options.register('alignmentParameterFiles', - '', - VarParsing.VarParsing.multiplicity.list, - VarParsing.VarParsing.varType.string, - 'Alignment parameter files as obtained from the pede framework.' - ) -options.register('fittingMethod', - 'gblTrack', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Model of the electron tracks' - ) -options.register('considerationMethod', - 'all', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Possible arguments are: all, closest7, closest19, clusters' - ) -options.register('weightingMethod', - 'squaredWeighting', - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_5.0_1.0, logWeighting_5.0_0.5, logWeighting_7.0_1.0 ' - ) -options.register('pedestalThreshold', - 2., - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.float, - 'Threshold for the pedestal subtraction calculation in the position resolution plugin. Unit is MIP.' - ) -options.register('fitPointWeightingMethod', - "none", - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Fit points (one per layer) in the track fit are linearly weighted according to the deposited energy (in MIPs)' - ) -options.register('useMWCReference', - True, - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.bool, - 'Are the multi wire chamber information used for the prediction of impact points?') - options.maxEvents = -1 options.parseArguments() - # print options # <--- A better option is to call test_cfg is called with "print" argument e.g. cmsRun test_cfg.py print dataFolder=example1 outputFolder=example2 ... if not os.path.isdir(options.dataFolder): - print options.dataFolder sys.exit("Error: Data folder not found or inaccessible!") if not os.path.isdir(options.outputFolder): @@ -181,45 +94,29 @@ input = cms.untracked.int32(options.maxEvents) ) -#################################### -# Reduces the frequency of event count couts -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.MessageLogger.cerr.FwkReport.reportEvery = options.reportEvery - #################################### process.load('HGCal.StandardSequences.RawToDigi_cff') process.load('HGCal.StandardSequences.LocalReco_cff') process.load('HGCal.StandardSequences.dqm_cff') - -if options.isData: - process.source = cms.Source("HGCalTBTextSource", - runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames - inputPathFormat=cms.untracked.string("file:%s/%s_Output_.txt"%(options.dataFolder,options.runType)), - MWCInputPathFormat=cms.untracked.string("file:%s/MWC/WC_H4Run.txt"%options.dataFolder), - mwcRotation=cms.untracked.double(270.), - mwc2DeltaX=cms.untracked.double(0.), - mwc2DeltaY=cms.untracked.double(0.), - fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered - #["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) ]) - readOnlyRuns=cms.untracked.vint32(options.readOnlyRuns), - nSpills=cms.untracked.uint32(options.nSpills), - ) -else: - process.source = cms.Source("HGCalTBGenSimSource", - OutputCollectionName = cms.string(''), - e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), - runEnergyMapFile = cms.untracked.string(options.pathToRunEnergyFile), #the runs from the runEnergyMapFile are automatically added to the fileNames - inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)), - fileNames=cms.untracked.vstring(["file:DUMMY"]), #'file:DUMMY'-->only files in the runEnergyMapFile are considered, - energyNoise=cms.double(0.0), #value in MIPS, represents additional value to the energy with gaussian distribution and 10% width - energyNoiseResolution=cms.double(0.0), - MWCSmearingResolution=cms.double(50.) #value is in microns! +#print "root://eoscms.cern.ch//eos/cms/%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber) + +process.source = cms.Source("HGCalTBTextSource", + run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file + #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXE + fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + nSpills=cms.untracked.uint32(options.nSpills), + inputPathFormat = cms.untracked.string(""), + MWCInputPathFormat = cms.untracked.string(""), + mwcRotation = cms.untracked.double(0.), + mwc2DeltaX = cms.untracked.double(0.), + mwc2DeltaY = cms.untracked.double(0.), + readOnlyRuns = cms.untracked.vint32([]), + runEnergyMapFile = cms.untracked.string("runEnergyMapFile") ) ###### - process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) @@ -228,34 +125,6 @@ process.hgcaltbrechits.gainLow = cms.string('') process.hgcaltbrechits.gainHigh = cms.string('') -if not options.isData: - process.hgcaltbclusters.rechitCollection = cms.InputTag("source","","unpack") - -process.position_resolution_analyzer.alignmentParameterFiles = cms.vstring(options.alignmentParameterFiles) -process.position_resolution_analyzer.fittingMethod = cms.string(options.fittingMethod) -process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) -process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) -process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) -process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) -process.position_resolution_analyzer.totalEnergyThreshold = -1000. -process.position_resolution_analyzer.useMWCReference = cms.bool(options.useMWCReference) - - -if not options.isData: - process.position_resolution_analyzer.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) - -process.millepede_binarywriter.fittingMethod = cms.string(options.fittingMethod) -process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) -process.millepede_binarywriter.weightingMethod = cms.string(options.weightingMethod) -process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) -process.millepede_binarywriter.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) -process.millepede_binarywriter.totalEnergyThreshold = -1000. -process.millepede_binarywriter.useMWCReference = cms.bool(options.useMWCReference) -process.millepede_binarywriter.binaryFile = "%s/%s_MillepedeBinary_%s.bin"%(options.outputFolder,options.runType,options.outputPostfix) - -if not options.isData: - process.millepede_binarywriter.HGCALTBRECHITS = cms.InputTag("source","","unpack" ) - process.dumpRaw = cms.EDAnalyzer("DumpFEDRawDataProduct", dumpPayload=cms.untracked.bool(True)) @@ -265,9 +134,9 @@ if (options.chainSequence == 7): options.output = "%s/RECO_type%s_run%06d.root"%(options.outputFolder,options.runType,options.runNumber) process.output = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string("test.root") + fileName = cms.untracked.string(options.output) ) - + # process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_6_Reco_Display.root") ) if (options.chainSequence == 1): @@ -282,12 +151,8 @@ process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Reco_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) elif (options.chainSequence == 7): process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_%06d_Display_Cluster.root"%(options.outputFolder,options.runType,options.runNumber))) -elif (options.chainSequence == 8): - process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/%s_Output_Position_Resolution_%s.root"%(options.outputFolder,options.runType,options.outputPostfix))) - -process.BadSpillFilter.nameCFG1 = cms.string("/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG1.txt") -process.BadSpillFilter.nameCFG2 = cms.string("/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal/CondObjects/data/Bad_Run_Spill_CFG2.txt") + if(options.configuration == "-1"): process.BadSpillFilter.layers_config = cms.int32(-1) @@ -301,12 +166,12 @@ process.BadSpillFilter.layers_config = cms.int32(1) process.LayerSumAnalyzer.layers_config = cms.int32(1) process.hgcaltbrechits.layers_config = cms.int32(1) - process.position_resolution_analyzer.layers_config = cms.int32(1) elif(options.configuration == "2"): process.BadSpillFilter.layers_config = cms.int32(2) process.LayerSumAnalyzer.layers_config = cms.int32(2) process.hgcaltbrechits.layers_config = cms.int32(2) - process.position_resolution_analyzer.layers_config = cms.int32(2) +else: + sys.exit("Error: Configuarion % is not supported in the position resolution analysis" % options.configuration) ########Activate this to produce event displays######################################### #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) @@ -323,52 +188,21 @@ ################Miscellaneous############################################################################## #process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbrechits*process.FourLayerRecHitPlotterMax) -#add skip event exception which might occur for simulated samples because the last event is not properly passed forward -process.options = cms.untracked.PSet( - SkipEvent = cms.untracked.vstring('ProductNotFound') -) - -#Using chain sequence 3 only for testing purposes. -if options.isData: - if (options.chainSequence == 1): - process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) - elif (options.chainSequence == 3): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) - elif (options.chainSequence == 4): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) - elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm) - elif (options.chainSequence == 6): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.LayerSumAnalyzer) - elif (options.chainSequence == 7): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.hgcaltbeventdisplay) - elif (options.chainSequence == 8): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.position_resolution_analyzer) - elif (options.chainSequence == 9): - process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbclusters*process.millepede_binarywriter) - -else: - if (options.chainSequence == 1): - process.p =cms.Path() - if (options.chainSequence == 4): - process.p =cms.Path(process.hgcaltbrechitsplotter_highgain_new) - elif (options.chainSequence == 5): - process.p =cms.Path(process.hgcaltbrechitsplotter_highgain_correlation_cm) - elif (options.chainSequence == 6): - process.p =cms.Path(process.LayerSumAnalyzer) - elif (options.chainSequence == 7): - process.p =cms.Path(process.hgcaltbclusters*process.hgcaltbeventdisplay) - elif (options.chainSequence == 8): - process.p =cms.Path(process.hgcaltbclusters*process.position_resolution_analyzer) - #process.p =cms.Path() - elif (options.chainSequence == 9): - process.p =cms.Path(process.hgcaltbclusters*process.millepede_binarywriter) - -# example for running display : -# cmsRun test_cfg_newEB.py runNumber=1291 runType=HGCRun nSpills=1 dataFolder='./' pedestalsHighGain="./CondObjects/data/pedHighGain1200.txt" pedestalsLowGain="./CondObjects/data/pedLowGain1200.txt" chainSequence=7 maxEvents=10 - +if (options.chainSequence == 1): + process.p =cms.Path(process.hgcaltbdigis*process.hgcaltbdigisplotter) +elif (options.chainSequence == 3): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter) +elif (options.chainSequence == 4): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 5): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.hgcaltbrechitsplotter_highgain_correlation_cm*process.hgcaltbrechitsplotter_highgain_new) +elif (options.chainSequence == 6): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits*process.LayerSumAnalyzer) +elif (options.chainSequence == 7): + process.p =cms.Path(process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits) if (options.chainSequence == 7): process.end = cms.EndPath(process.output) +print "END" \ No newline at end of file From b74f3e6b68f5d7fdb99a87450f292006c2a2af37 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:29:31 +0100 Subject: [PATCH 225/297] [documentation] add exemplary run energy map files --- .../data/runEnergiesPositionResolution.txt | 73 +++++++++++++++++++ ...unEnergiesPositionResolutionSimulation.txt | 71 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 CondObjects/data/runEnergiesPositionResolution.txt create mode 100644 CondObjects/data/runEnergiesPositionResolutionSimulation.txt diff --git a/CondObjects/data/runEnergiesPositionResolution.txt b/CondObjects/data/runEnergiesPositionResolution.txt new file mode 100644 index 0000000..528d8aa --- /dev/null +++ b/CondObjects/data/runEnergiesPositionResolution.txt @@ -0,0 +1,73 @@ +#RUN MWCRUN ENERGY[GeV] RUNTYPE CONFIGURATION +921 xxx 20. electron 1 +922 xxx 20. electron 1 +923 4875 20. electron 1 +925 xxx 20. electron 1 +926 4878 20. electron 1 +927 4879 20. electron 1 +929 xxx 20. electron 1 +930 4882 20. electron 1 +931 xxx 20. electron 1 +932 4884 20. electron 1 +1088 xxx 32. electron 1 +1091 5027 32. electron 1 +1094 xxx 32. electron 1 +1095 xxx 32. electron 1 +1098 5034 32. electron 1 +1101 5037 32. electron 1 +1102 5038 32. electron 1 +1104 5040 32. electron 1 +1105 5041 32. electron 1 +1106 5042 32. electron 1 +865 4836 70. electron 1 +866 xxx 70. electron 1 +867 xxx 70. electron 1 +868 xxx 70. electron 1 +875 xxx 70. electron 1 +881 xxx 70. electron 1 +882 xxx 70. electron 1 +883 xxx 70. electron 1 +884 xxx 70. electron 1 +887 4856 70. electron 1 +1051 xxx 100. electron 1 +1052 xxx 100. electron 1 +1053 xxx 100. electron 1 +1054 xxx 100. electron 1 +1056 xxx 100. electron 1 +1069 xxx 100. electron 1 +1070 xxx 100. electron 1 +1071 xxx 100. electron 1 +1072 xxx 100. electron 1 +1073 xxx 100. electron 1 +851 4824 150. electron 1 +852 xxx 150. electron 1 +853 xxx 150. electron 1 +854 xxx 150. electron 1 +855 xxx 150. electron 1 +856 xxx 150. electron 1 +857 xxx 150. electron 1 +858 xxx 150. electron 1 +859 xxx 150. electron 1 +860 xxx 150. electron 1 +1031 xxx 200. electron 1 +1032 xxx 200. electron 1 +1033 4975 200. electron 1 +1034 4976 200. electron 1 +1035 xxx 200. electron 1 +1036 xxx 200. electron 1 +1037 4979 200. electron 1 +1038 4980 200. electron 1 +1039 xxx 200. electron 1 +1040 xxx 200. electron 1 +937 4887 250. electron 1 +939 4889 250. electron 1 +940 4890 250. electron 1 +948 4898 250. electron 1 +949 4899 250. electron 1 +950 4900 250. electron 1 +952 4902 250. electron 1 +953 4903 250. electron 1 +954 4904 250. electron 1 +956 4906 250. electron 1 +960 4909 250. electron 1 +961 4910 250. electron 1 \ No newline at end of file diff --git a/CondObjects/data/runEnergiesPositionResolutionSimulation.txt b/CondObjects/data/runEnergiesPositionResolutionSimulation.txt new file mode 100644 index 0000000..ee8b814 --- /dev/null +++ b/CondObjects/data/runEnergiesPositionResolutionSimulation.txt @@ -0,0 +1,71 @@ +#RUN ENERGY[GeV] RUNTYPE CONFIGURATION +1 20. electron 1 +2 20. electron 1 +3 20. electron 1 +4 20. electron 1 +5 20. electron 1 +6 20. electron 1 +7 20. electron 1 +8 20. electron 1 +9 20. electron 1 +10 20. electron 1 +1 32. electron 1 +2 32. electron 1 +3 32. electron 1 +4 32. electron 1 +5 32. electron 1 +6 32. electron 1 +7 32. electron 1 +8 32. electron 1 +9 32. electron 1 +10 32. electron 1 +1 70. electron 1 +2 70. electron 1 +3 70. electron 1 +4 70. electron 1 +5 70. electron 1 +6 70. electron 1 +7 70. electron 1 +8 70. electron 1 +9 70. electron 1 +10 70. electron 1 +1 100. electron 1 +2 100. electron 1 +3 100. electron 1 +4 100. electron 1 +5 100. electron 1 +6 100. electron 1 +7 100. electron 1 +8 100. electron 1 +9 100. electron 1 +10 100. electron 1 +1 150. electron 1 +2 150. electron 1 +3 150. electron 1 +4 150. electron 1 +5 150. electron 1 +6 150. electron 1 +7 150. electron 1 +8 150. electron 1 +9 150. electron 1 +10 150. electron 1 +1 200. electron 1 +2 200. electron 1 +3 200. electron 1 +4 200. electron 1 +5 200. electron 1 +6 200. electron 1 +7 200. electron 1 +8 200. electron 1 +9 200. electron 1 +10 200. electron 1 +1 250. electron 1 +2 250. electron 1 +3 250. electron 1 +4 250. electron 1 +5 250. electron 1 +6 250. electron 1 +7 250. electron 1 +8 250. electron 1 +9 250. electron 1 +10 250. electron 1 \ No newline at end of file From 4e791ad9d5b57bd35c173006ebd439bd9a656562 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:31:22 +0100 Subject: [PATCH 226/297] [positionResolution] make ADC to MIP skiroc dependent, remove energy threshold in positionr resolution plugin --- Reco/interface/Sensors.h | 4 +-- Reco/plugins/MillepedeBinaryWriter.cc | 10 +++---- Reco/plugins/Position_Resolution_Analyzer.cc | 28 +++++--------------- Reco/python/position_resolution_cfi.py | 1 - Reco/src/Sensors.cc | 11 +++----- 5 files changed, 14 insertions(+), 40 deletions(-) diff --git a/Reco/interface/Sensors.h b/Reco/interface/Sensors.h index d44bd6d..9fbbc33 100644 --- a/Reco/interface/Sensors.h +++ b/Reco/interface/Sensors.h @@ -114,7 +114,6 @@ class SensorHitMap { double residualResolution; //externally set, from residual histograms int sensorSize; double CM_threshold; - double ADC_per_MIP; std::map Hits; //those are all the hits in the layer std::map> clusterIndexes; std::vector HitsForPositioning; @@ -145,11 +144,10 @@ class SensorHitMap { void setParticleEnergy(double e); void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, double d_x0, double d_y0, double d_z0); void setResidualResolution(double r); - void setADCPerMIP(double ADC_per_MIP); void setSensorSize(int s); void setPedestalThreshold(double t); //reduces the information from the Rechit towards what is necessary for the impact point calculation - void addHit(HGCalTBRecHit Rechit); + void addHit(HGCalTBRecHit Rechit, double ADC_per_MIP); void registerClusterHit(HGCalTBDetId hit, int N_considered); std::pair subtractCM(); //returns the sum of Common mode noise and the number of cells that enter the calculation void calculateCenterPosition(ConsiderationMethod considerationMethod, WeightingMethod weightingMethod); diff --git a/Reco/plugins/MillepedeBinaryWriter.cc b/Reco/plugins/MillepedeBinaryWriter.cc index d3e0977..a1a6a79 100644 --- a/Reco/plugins/MillepedeBinaryWriter.cc +++ b/Reco/plugins/MillepedeBinaryWriter.cc @@ -412,16 +412,14 @@ void MillepedeBinaryWriter::analyze(const edm::Event& event, const edm::EventSet Sensors[layer]->setResidualResolution(sigma_res[layer-1]); Sensors[layer]->setSensorSize(SensorSize); - uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); - HGCalTBElectronicsId eid(EID); - int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; - Sensors[layer]->setADCPerMIP(ADC_per_MIP[skiRocIndex]); - double X0sum = 0; for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); } - Sensors[layer]->addHit(Rechit); + uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); + HGCalTBElectronicsId eid(EID); + int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; + Sensors[layer]->addHit(Rechit, ADC_per_MIP[skiRocIndex]); } //fill the hits from the cluster collections diff --git a/Reco/plugins/Position_Resolution_Analyzer.cc b/Reco/plugins/Position_Resolution_Analyzer.cc index cb025c3..fa82c33 100644 --- a/Reco/plugins/Position_Resolution_Analyzer.cc +++ b/Reco/plugins/Position_Resolution_Analyzer.cc @@ -1,14 +1,10 @@ /* * Determination of the position resolution of the setup. - * Hits per layer are calculated using dedicated weighting algorithms. - * Hypothetical particle tracks are obtained from all but one layer. - * The predicted position in that layer is then compared to the reconstructed one. - * Thus, for each event and each layer there is one deviation to be calculated and filled into a 2D histogram. */ /** @Author: Thorben Quast - 16 Nov 2016 + 20 Febr 2017 thorben.quast@cern.ch / thorben.quast@rwth-aachen.de */ @@ -92,7 +88,6 @@ class Position_Resolution_Analyzer : public edm::one::EDAnalyzer("nLayers"); ADC_per_MIP = iConfig.getParameter >("ADC_per_MIP"); - totalEnergyThreshold = iConfig.getParameter("totalEnergyThreshold"); useMWCReference = iConfig.getParameter("useMWCReference"); @@ -466,19 +460,16 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E Sensors[layer]->setAlignmentParameters(alignmentParameters->getValue(run, 100*layer + 21), 0.0, 0.0, alignmentParameters->getValue(run, 100*layer + 11), alignmentParameters->getValue(run, 100*layer + 12), 0.0); - Sensors[layer]->setSensorSize(SensorSize); - uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); - HGCalTBElectronicsId eid(EID); - int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; - Sensors[layer]->setADCPerMIP(ADC_per_MIP[skiRocIndex]); - double X0sum = 0; for (int _x = 0; _x<(int)layer; _x++) X0sum += Layer_Z_X0s[_x]; Sensors[layer]->setParticleEnergy(energy - gblhelpers::computeEnergyLoss(X0sum, energy)); } - Sensors[layer]->addHit(Rechit); + uint32_t EID = essource_.emap_.detId2eid(Rechit.id()); + HGCalTBElectronicsId eid(EID); + int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; + Sensors[layer]->addHit(Rechit, ADC_per_MIP[skiRocIndex]); } //fill the hits from the cluster collections @@ -501,20 +492,13 @@ void Position_Resolution_Analyzer::analyze(const edm::Event& event, const edm::E } } - //Event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters only must - //be larger than an externally configured parameter 'totalEnergyThreshold' (in MIP) + //Possible event selection: sum of energies of all cells(=hits) from RecHits Collection and Clusters sumEnergy = 0., sumClusterEnergy = 0.; for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { sumEnergy += it->second->getTotalEnergy(); sumClusterEnergy += it->second->getTotalClusterEnergy(-1); } - if(sumEnergy < totalEnergyThreshold) HitsVetoCounter+=1; //make this energy dependent! - if(sumClusterEnergy < totalEnergyThreshold) ClusterVetoCounter+=1; - if(sumEnergy < totalEnergyThreshold && sumClusterEnergy < totalEnergyThreshold) { - CommonVetoCounter+=1; - //return; //this is also done in the plotting - } //step 2: calculate impact point with technique indicated as the argument for (std::map::iterator it=Sensors.begin(); it!=Sensors.end(); it++) { diff --git a/Reco/python/position_resolution_cfi.py b/Reco/python/position_resolution_cfi.py index 034519f..fa133a0 100644 --- a/Reco/python/position_resolution_cfi.py +++ b/Reco/python/position_resolution_cfi.py @@ -12,7 +12,6 @@ ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]), nLayers = cms.int32(8), SensorSize = cms.int32(133), - totalEnergyThreshold = cms.double(1000.), useMWCReference = cms.bool(True), RUNDATA = cms.InputTag("source","RunData","unpack" ), MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ), diff --git a/Reco/src/Sensors.cc b/Reco/src/Sensors.cc index a5aa9a1..d17d2eb 100644 --- a/Reco/src/Sensors.cc +++ b/Reco/src/Sensors.cc @@ -16,8 +16,7 @@ SensorHitMap::SensorHitMap(int l){ layerLabZ = 0; layerX0 = 0; particleEnergy = 0; - ADC_per_MIP = 1.; - sensorSize = 128; + sensorSize = 133; d_alpha = 0., d_beta = 0., d_gamma = 0., d_x0 = 0., d_y0 = 0., d_z0 = 0.; residualResolution = -1; @@ -71,10 +70,6 @@ void SensorHitMap::setResidualResolution(double r) { residualResolution = r; } -void SensorHitMap::setADCPerMIP(double ADC_per_MIP) { - this->ADC_per_MIP = ADC_per_MIP; -} - void SensorHitMap::setPedestalThreshold(double t) { this->CM_threshold = t; } @@ -96,7 +91,7 @@ double SensorHitMap::getX0() { } //reduces the information from the Rechit towards what is necessary for the impact point calculation //here all hits independent from the cellType are included -void SensorHitMap::addHit(HGCalTBRecHit Rechit) { +void SensorHitMap::addHit(HGCalTBRecHit Rechit, double ADC_per_MIP) { int uniqueID = (Rechit.id()).rawId(); //CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((Rechit.id()).layer(), (Rechit.id()).sensorIU(), (Rechit.id()).sensorIV(), (Rechit.id()).iu(), (Rechit.id()).iv(), sensorSize); @@ -130,7 +125,7 @@ void SensorHitMap::addHit(HGCalTBRecHit Rechit) { void SensorHitMap::registerClusterHit(HGCalTBDetId hit, int N_considered) { //requires that all hits have been added to the layer int uniqueID = hit.rawId(); - if(Hits.find(uniqueID) == Hits.end()) return; //if cluster hit does not represent a valid cell type, do not add it + if(Hits.find(uniqueID) == Hits.end()) return; if (totalClusterEnergy.find(N_considered) == totalClusterEnergy.end()) { totalClusterEnergy[N_considered] = 0; From 893d77d88673e72ce2d2fb5d49d5aa72531c9ffa Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:32:02 +0100 Subject: [PATCH 227/297] [simulation] energy smearing (if wanted) in MIP units --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 78bdd83..81f7475 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -192,11 +192,13 @@ void HGCalTBGenSimSource::produce(edm::Event & event) //any analysis on the simulated data must respect that by computing MIP-ADC factors in the same way and by converting energies into MIP units int skiRocIndex = (eid.iskiroc() - 1) > 0 ? eid.iskiroc() - 1 : 0; - double energy = simHitCellEnE->at(icell) / MIP2GeV_sim * ADCtoMIP_CERN[skiRocIndex]; + double energy = simHitCellEnE->at(icell) / MIP2GeV_sim; - //additional noise to the energy + //additional noise to the energy in MIPs energy += randgen->Gaus(energyNoise, energyNoiseResolution); + energy *= ADCtoMIP_CERN[skiRocIndex]; + recHit.setEnergy(energy); recHit._energyLow = energy; recHit._energyHigh = energy; From dbfccc68d4e52f9529a014fddc33cb9cff14e657 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:32:22 +0100 Subject: [PATCH 228/297] [steering] clean steering files --- position_resolution_cfg.py | 54 ++++++++++++++++---------------------- test_cfg_newEB.py | 6 ++--- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/position_resolution_cfg.py b/position_resolution_cfg.py index 7fd5d9d..42339d1 100644 --- a/position_resolution_cfg.py +++ b/position_resolution_cfg.py @@ -12,14 +12,14 @@ '/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'directory to the repository to correctly navigate to some file in CondObjects' + 'Directory to the repository to correctly navigate to some file in CondObjects' ) options.register('dataFolder', '/home/data/Testbeam/September2016', #use this for running on pclcd VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'folder containing raw text input') + 'Main directory containing raw text input') options.register('pathToRunEnergyFile', '/', @@ -31,20 +31,20 @@ '', VarParsing.VarParsing.multiplicity.list, VarParsing.VarParsing.varType.int, - 'Run the analysis only for the indicated runs' + 'Run the analysis only for the indicated runs.' ) options.register('isData', True, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, - 'Is the analysis run on real data (otherwise on simulated samples) ?') + 'Is the analysis run on real data (otherwise on simulated samples)?') options.register('nSpills', 15, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, - 'Number of spills in run') + 'Number of spills per run before read-out is stopped.') #################################### @@ -53,13 +53,13 @@ '%s/CondObjects/data/Ped_HighGain_L8.txt' % options.repoFolder, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Path to high gain pedestals file') + 'Path to high gain pedestals file.') options.register('pedestalsLowGain', '%s/CondObjects/data/Ped_LowGain_L8.txt' % options.repoFolder, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Path to low gain pedestals file') + 'Path to low gain pedestals file.') @@ -69,13 +69,13 @@ 8, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, - 'Here: only 8 (position resolution) and 9 (writing of millepede binary) is considered') + 'Here: only 8 (position resolution) and 9 (writing of millepede binary) is configured.') options.register('reportEvery', 100, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, - 'Frequency of event count print outs on the console') + 'Frequency of event count printouts on the console.') #################################### @@ -84,15 +84,14 @@ -1, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - '-1 ADCtoMIP CERN; 0 ADCtoMIP FNAL; 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') - + '1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') options.register('alignmentParameterFiles', '', VarParsing.VarParsing.multiplicity.list, VarParsing.VarParsing.varType.string, - 'Alignment parameter files as obtained from the pede framework.' + 'Alignment parameter files as obtained from the (mille)pede framework.' ) @@ -102,43 +101,37 @@ True, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, - 'Are the multi wire chamber information used for the prediction of impact points?') + 'Are the multi wire chamber information used for the exrapolation of referemce impact points?') options.register('fittingMethod', - 'gblTrack', + 'lineAnalytical', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Model of the electron tracks' + 'Model of the electron tracks.' ) -options.register('fitPointWeightingMethod', - "none", - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, - 'Fit points (one per layer) in the track fit are linearly weighted according to the deposited energy (in MIPs)' - ) #################################### #Specific options for reconstruction of impact positions in the MillepedeBinaryWrite and positionResolutionAnalyzer options.register('considerationMethod', - 'all', + 'closest19', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Possible arguments are: all, closest7, closest19, clusters' + 'Possible arguments are: all, closest7, closest19, clusters.' ) options.register('weightingMethod', - 'squaredWeighting', + 'logWeighting_3.5_1.0', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting_5.0_1.0, logWeighting_5.0_0.5, logWeighting_7.0_1.0 ' + 'Possible arguments are: squaredWeighting, linearWeighting, logWeighting__1.0, .... ' ) options.register('pedestalThreshold', 2., VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.float, - 'Threshold for the pedestal subtraction calculation in the position resolution plugin. Unit is MIP.' + 'Threshold for the common mode noise subtraction. Unit is MIP.' ) #################################### @@ -147,13 +140,13 @@ '/home/outputs/Testbeam/September2016/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Result of processing') + 'Main directory of the output files.') options.register('outputPostfix', 'default', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Postfix to the output file') + 'Postfix to the output file.') options.parseArguments() @@ -249,8 +242,7 @@ process.position_resolution_analyzer.considerationMethod = cms.string(options.considerationMethod) process.position_resolution_analyzer.weightingMethod = cms.string(options.weightingMethod) process.position_resolution_analyzer.pedestalThreshold = cms.double(options.pedestalThreshold) -process.position_resolution_analyzer.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) -process.position_resolution_analyzer.totalEnergyThreshold = -1000. +process.position_resolution_analyzer.fitPointWeightingMethod = cms.string("none") process.position_resolution_analyzer.useMWCReference = cms.bool(options.useMWCReference) #################################### @@ -259,7 +251,7 @@ process.millepede_binarywriter.considerationMethod = cms.string(options.considerationMethod) process.millepede_binarywriter.weightingMethod = cms.string(options.weightingMethod) process.millepede_binarywriter.pedestalThreshold = cms.double(options.pedestalThreshold) -process.millepede_binarywriter.fitPointWeightingMethod = cms.string(options.fitPointWeightingMethod) +process.millepede_binarywriter.fitPointWeightingMethod = cms.string("none") process.millepede_binarywriter.totalEnergyThreshold = -1000. process.millepede_binarywriter.useMWCReference = cms.bool(options.useMWCReference) process.millepede_binarywriter.binaryFile = "%s/HGCRun_MillepedeBinary_%s.bin"%(options.outputFolder,options.outputPostfix) diff --git a/test_cfg_newEB.py b/test_cfg_newEB.py index 04f5d03..e4e1646 100644 --- a/test_cfg_newEB.py +++ b/test_cfg_newEB.py @@ -104,7 +104,7 @@ process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(options.runNumber), ### maybe this should be read from the file #fileNames=cms.untracked.vstring("file:Raw_data_New.txt") ### here a vector is provided, but in the .cc only the first one is used TO BE FIXE - fileNames=cms.untracked.vstring("file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED + fileNames=cms.untracked.vstring(["file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber), "file:%s/%s_Output_%06d.txt"%(options.dataFolder,options.runType,options.runNumber)]), ### here a vector is provided, but in the .cc only the first one is used TO BE FIXED nSpills=cms.untracked.uint32(options.nSpills), inputPathFormat = cms.untracked.string(""), MWCInputPathFormat = cms.untracked.string(""), @@ -203,6 +203,4 @@ if (options.chainSequence == 7): - process.end = cms.EndPath(process.output) - -print "END" \ No newline at end of file + process.end = cms.EndPath(process.output) \ No newline at end of file From 7dfad7850560b6e6b745db64b1261545467c2cf6 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:39:21 +0100 Subject: [PATCH 229/297] [rechits] fix sensorSize --- Reco/plugins/HGCalTBRecHitProducer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index c935827..6857fae 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -96,8 +96,8 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energy = -1.; - HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); //, _LG2HG_value, _gainThr_value * adcToGeV_high_value); ///\todo use time calibration! - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); //TODO: Hard Coded Number! + HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 133); recHit.setCellCenterCoordinate(CellCenterXY.first, CellCenterXY.second); //Consistency check if the reversion of the x,y - iu iv formula can be reverted //std::pair iuiv = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); From 6dfd2d96e31c111eb577f355f320cce17f6cfc5f Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 13:58:54 +0100 Subject: [PATCH 230/297] [documentation] update readme --- README.md | 400 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 386 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index cf531b4..41bf668 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ code the format needed in which the pedestal files are to be written out can be ## Running the code * In **`test_cfg.py`** the RAW data file to be run is to be provides in the line: -``` +```python process.source = cms.Source("HGCalTBTextSource", run=cms.untracked.int32(1), @@ -58,12 +58,13 @@ cms.Source("HGCalTBTextSource", **`Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc`** for the noise studies starting from pedestal subtracted digis. * The output root file name is set in: -``` + +```python process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_1600_Reco.root") ) ``` #### Event-based reconstruction (Outdated?) -``` +```bash sh scripts/rearrangeTxtFile.sh input.txt >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun @@ -85,33 +86,404 @@ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_ ## Updates from the positionResolution branch ### (Extended)TextInput Plugin -todo +The `HGCalTextSource` plugin has been modified to cope with the analysis of multiple runs / data files per execution. Except for the removed veto on `Danger=true` events, downward compatibility is granted. Application of the `BadSpillFilter` plugin should restore the compatibility. +The usage of the new features is optional. Besides the usual data readout, this plugin also adds a `RunData` collection (```c++ produces("RunData");```) to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData` (```c++ produces("MultiWireChambers");```). Hereby, it is assumed that the reconstructed coordinates are given in [mm]. + + __**Options:**__ + +* **`fileNames`**: Array of file paths to be processed in that execution. Before, the plugin could only deal with one file at a time. If the paths to files are indicated, `runData` objects obtain dummy values. +* **`nSpills`**: Number of spills to be processed before the read-out is stopped. The spill number is read from the .txt files such that the according variable is reset for each file. +* **`runEnergyMapFile`**: Path to the configuration file that defines the mapping between the run numbers, H4DAQ run numbers, the appropriate beam momenta (labeled 'energy'), the run type (e.g. electron, muon, ...) and the setup configuration (e.g. 1, 2). An exemplary mapping file is added to `CondObjects/Data/runEnergiesPositionResolution.txt`. Missing H4 runs, i.e. such that do not have 6000 events, are marked by `xxx`. If ```python fileNames=cms.untracked.vstring(["file:DUMMY"])``` is set, the plugin reads the runs that are defined in this file. Otherwise, the **`fileNames`** has preference. +* **`inputPathFormat`**: Generic format of the path to the run data files. The setting of this parameter is obligatory if the read-out with the **`runEnergyMapFile`** is aimed. The placeholder for the run number is ``. Up to five zeros are added to the run string, e.g. run=1 corresponds to 000001. +In summary, an exemplary setting could be: + +```python +inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.dataFolder) +``` + +* **`MWCInputPathFormat`**: Similar to **`inputPathFormat`**. Zeros are not added to the run number string. Example: + +```python +inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.dataFolder) +``` + +* **`readOnlyRuns`**: Array of run numbers to choose only a subset of runs for the processing. Those runs must be defined in the `runEnergyMapFile`. +* **`mwcRotation`**: Initial rotation of the multi-wire chamber coordinate system in degrees. The original coordinate information from the H4-files are rotated counter-clockwise along the z-axis after the readout. Set to 270 degrees in the position resolution analysis. +* **`mwc2DeltaX`**: Translation of the second multi-wire chamber with respect to the first one in x-direction AFTER the initial rotation. Set to zero in the position resolution analysis. +* **`mwc2DeltaY`**: Translation of the second multi-wire chamber with respect to the first one in y-direction AFTER the initial rotation. Set to zero in the position resolution analysis. + + ### (New) GenSim to RecHit Converter -todo +This plugin reads the simulated simulated data formats and converts the information into **`HGCalTBRecHit`** collections. Multi-wire chamber data are faked using the xBeam and yBeam branch of the input trees. Their distance w.r.t. the first module is hard-coded. +(x,y) position information of the cells are computed from the cell IDs as they are placed in the Geant4 simulation. So far, only the sensors with `133 cells` are implemented. Energies are converted from GeV to MIPs to ADC using the identical conversion factors in data. +Smearing effects in the fake MWC measurements and the noise have appropriate parameters. + + __**Options:**__ + + * **`OutputCollectionName`**: Name of the HGCalTBRecHit collection that is put to the event. + * **`fileNames`**: See description of TextInput plugin. + * **`e_mapFile_CERN`**: Electronics mapping file to perform the matching of the cell IDs to the hypothetical skiRocs on which MIP to ADC conversions depend. + * **`runEnergyMapFile`**: See description of TextInput plugin. Since MWCs are faked and do not have their own files, according mapping files contain only four (instead of five) columns. An example is shown in `CondObjects/Data/runEnergiesPositionResolutionSimulation.txt`. + + * **`inputPathFormat`**: See description of the TextInput plugin. Paths to simulated files are assumed to have a placeholder for the simulated energy and a file index (=`run`). Therefore, an example is: + +```python +inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)) +``` + + * **`energyNoise`**: Energy noise that is added to the energy per cell. This parameter represents the mean value of a Gaussian in MIP unit from which the additional summands are diced. The parameter is set to zero in the position resolution analysis. + * **`energyNoiseResolution`**: Energy noise that is added to the energy per cell. This parameter represents the RMS of a Gaussian in MIP unit from which the additional summands are diced. The parameter is set to zero in the position resolution analysis. Thus, no energy smearing is applied. + * **`MWCSmearingResolution`**: Resolution of the multi-wire chamber fake measurements. The coordinates are smeared by a Gaussian centered at zero with width `MWCSmearingResolution` (in microns). + + +### (Extended) HGCalTBRecHitProducer +* HGCalTBRecHits have the cell center coordinates as additional members `cellCenter_x`, `cellCenter_y`. +* The center's coordinates are set in this producer (lines 99 ff.) or in the `HGCalTBGenSimSource` plugin to grant a common interface for the position retrieval in the next steps. + ### (New) PositionResolutionAnalyzer -todo +Plugin that reconstructs impact positions of the incident particles for each layer, extra- or interpolates them and computes the differences of both approaches. Both the reconstruction and the inter-/extrapolation schemes are configurable. Output of this plugin is a ROOT TTree (name: `deviations`) with information on the layerIndex, the impacts positions in x&y, the deviations to the reference, ... (see lines 351 ff in `Position_Resolution_Analyzer.cc`). +Z-positioning of the layers along the beam line in cm and radiation length is hard-coded. + +In principle, the procedure can be segmented into the following: + +1. Loop through the `recHits`. Instantiate `sensor` objects, fill them with `recHits`. Alignment parameters are set if available. +2. Subtract the common mode noise for each layer (=`sensor`). +3. Reconstruction of the impact position for each layer. +4. Compute electron tracks using either the multi-wire chambers (extrapolation) or the impact positions from the stack ignoring the layer under investigation (interpolation). Implemented track models are straight lines (preferred, chosen model) and general broken lines (deprecated, since electron-induced shower axis' scattering angle cannot be computed trivially after certain raditiation lengths). +5. Calculation of deviations and writing to the output tree once per layer and event. + + __**Framework Options:**__ + +* **`RUNDATA`**: Input tag to the RunData collection. Name is fixed in the read-out plugins. E.g. + +```python RUNDATA = cms.InputTag("source","RunData","unpack" )``` + +* **`MWCHAMBERS`**: Input tag to the multi-wire chambers collection. Name is fixed in the read-out plugins. E.g. + +```python MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" )``` + +* **`HGCALTBRECHITS`**: Input tag to the recHits collection. E.g. + +```python HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )``` + +* **`HGCALTBCLUSTERS`**: Input tag to the cluster collection. E.g. + +```python HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" )``` + +* **`HGCALTBCLUSTERS7`**: Input tag to the cluster (with seven closest cells) collection. E.g. + +```python HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" )``` + +* **`HGCALTBCLUSTERS19`**: Input tag to the cluster (with 19 closest cells) collection. E.g. + +```python HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" )``` + +* **`e_mapFile_CERN`**: Electronics mapping file to perform the matching of the cell IDs to the hypothetical skiRocs on which MIP to ADC conversions depend. + + __**Experimental Setup Options:**__ + +* **`layers_config`**: Index of the layer configuration (1: CERN <15 X0, 2: CERN <25X0). `Default: 1`. +* **`nLayers`**: Number of sensors/layers in the setup. `Default: 8`. +* **`SensorSize`**: Size of the sensors in terms of number of cells. `Supported: 133`. +* **`ADC_per_MIP`**: MIP to ADC conversion factors for each of the 2x8 skirocs. Example: + +```python ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66])``` + +* **`pedestalThreshold`**: Threshold in MIP unit to specify the boundary under which cell energy deposits are included in the common mode noise calculation and subsequent subtraction. `Default: 2`. +* **`alignmentParameterFiles`**: Array of paths to alignment files. The content of such files must follow the format as dictated by the `millepede` program. The parameter files are matched to each run. For this purpose, the path to the corresponding alignment parameter file must contain the substring `RUN__`. Otherwise, i.e. if not available, values are assumed to be zero (=no alignment). The functionality of the readout is implemented in `Reco/src/PositionResolutionHelpers.cc`. + + __**Reconstruction Options:**__ + + * **`considerationMethod`**: Specifies the set of cells that are considered in the impact position reconstruction for each layer. `all`, `closest7` (=one ring around the cell with highest energy deposit), `closest19`(=two rings) as well as the cells from the clustering algorithm (`clustersAll`, `clusters7`, `clusters19`) can be specified. `Default: closest19`. + * **`weightingMethod`**: Specifies the weighting formula for the impact position reconstruction. Besides a logarithmic weightig scheme, linear and squared energy schemes are implemented. `Default: logWeighting_3.5_1.0`. + + __**Reference Options:**__ + + * **`useMWCReference`**: Boolean flag indicating if multi-wire chamber extrapolation of HGCal stack interpolation is used as reference for the impact position. + * **`fittingMethod`**: Corresponds to the track model of the electron shower's trajectory. Implemented are a straight line computed through an analytic chi2 minimisation (`lineAnalytical`), polynomial fits up to degree three using ROOT's minimisation (e.g. `pol3TGraphErrors`) and General Broken lines using the GBL core functions that are available in cmssw (`gblTrack`). The position resolution analysis makes exclusive use of the `lineAnalytical`. + * **`fitPointWeightingMethod`**: Rescaling scheme of errors on the reconstructed impact positions prior to the reference computation. This way, inaccurate positions, e.g. through uniform energy distribution across all cells in one layers, have less influence on the track fit. This procedure has been found to have no significant impact on the results. Therefore, the default configuration is `none`. + + + ### (New) MillepedeBinaryWriter -todo +This plugin is very similar to the PositionResolutionAnalyzer as it also reconstructs impact positions and compares those references. +Yet, the output is not a voluminous ROOT TTree but a binary file that is subsequently input to the alignment procedure using `Millepede`. +Thus, the main difference is the track model derivation which is either done using the two MWCs in front (extrapolation) or all eight HGC stack layers only (for interpolation). Besides the residuals, their local derivatives w.r.t. the alignment parameters are computed and written to the binary file. [Link to the millepde manual.](http://www.desy.de/~blobel/Mptwo.pdf) + +__**Options:**__ + +* **Same as for the PositionResolutionAnalyzer** + +__**Additional options: Quality cuts:**__ + +* **`totalEnergyThreshold`**: Energy threshold in units of MIPs for an event to be added to the binary file. If the energy sum across all cells in all layers after common mode subtraction is below this threshold, the entire event is discarded. `Default: 1000`. +* **`MWCQualityCut`**: Applies an event selection to the MWC measurement if it is set to `True`. The exact threshold of this cut is hard-coded for this analysis: + +```c++ +double delta_x12 = mwcs->at(0).x - mwcs->at(1).x; +double delta_y12 = mwcs->at(0).y - mwcs->at(1).y; +//Todo: Hard coded numbers! Offsets correspond to angles +if (fabs(delta_x12-0.45) > 1.0 || fabs(delta_y12-0.076) > 1.0) return; +``` + + + ### Helper Classes +#### HGCalTBRunData +An object that is created for each event in the data read-out with runEnergyMapFiles and passed to the central event objects to subsequent plugins. + +```c++ + int configuration; //index of the configuration + int run; //number of the run + int event; //event counter, counting occurs during the data readout prior to any cuts (e.g. before the bad-spill filtering) + double energy; //more precisely: the set beam momentum + std::string runType; //electrons, muons, pions + bool hasValidMWCMeasurement; //an MWC measurement is valid if no coordinate shows -999 + bool hasDanger; //events that show Danger=true are not filtered but are flagged through this boolean. Therefore, the event filtering may occur later if necessary. +``` +Note that certain variables, namely `hasValidMWCMeasurement`, `hasDanger`and `event` are properly set, even if runEnergyMap files are not indicated. + +#### HGCalTBMultiWireChamberData +Simple structure to pass the read multi-wire chamber data to the event. + +```c++ + explicit MultiWireChamberData(int _ID, double _x, double _y, double _z): ID(_ID), x(_x), y(_y), z(_z) {}; //default consructor + + int ID; //index of the MWC in the setup (e.g. 1, 2) + double x; //reconstructed x-coordinate + double y; //reconstructed y-coordinate + double z; //position of the MWC in the setup, hard-coded values +}; + +typedef std::vector MultiWireChambers; //two MWCs per event --> create a vector +``` + #### Geometry -todo +* **`HGCalWaferGeometry.cc`**: Conversion of cell IDs in simulation to x,y positions and cell types. Hard-coded mapping depending on the configuration in simulation. + +* **`HGCalTBCellVertices::GetCellIUIVCoordinates`**: A function that returns the iu, iv coordinates of a cell on the 133 cell sensor with input of its x, y coordinates. It represents a useful function to retrieve iu, iv as those are input to the constructor of `HGCalTBDetId` which are required to instantiate `HGCalTBRecHits` like it is done in the GenSim to recHit conversion. + #### Sensors -todo +Central class to perform all relevant steps on the sensors/layers for impact position reconstruction. + +```c++ + SensorHitMap(int _label); + //constructor, must indicate a label which could be the layer number (1-8) + //most internal parameters are set to zero + + ~SensorHitMap(); + //default destructor + + /************* + setters + *************/ + + void setLabZ(double z_cm, double X0); + //z-coordinate in cm and radiation lengths + + void setParticleEnergy(double e); + //Sets the particle energy at the layer. For instance, one could approximate te electron energy using the PDG loss formula (implemented by `computeEnergyLoss` in Reco/interface/Tracks.h) . + //The energy is input to the kink angle RMW calculation for gbl tracks which are deprecated in the position resolution analysis. + + void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, + double d_x0, double d_y0, double d_z0); + //Assigns up to six alignment parameters (three infinitesimal rotations and three translations) to each layer. + + void setResidualResolution(double r); + //Sets the residual width to the layer. This information is required within the alignment binary writer. + + void setSensorSize(int s); + //Sets the sensor size (default: 133). Used to boundary checks in position computations. + + void setPedestalThreshold(double t); + //Sets the pedestal threshold under which all cells are input for the common mode noise subtraction. + + void setCenterHitPosition(double x, double y, double x_err, double y_err); + //Manually fake the reconstructed impact position, e.g. if multi wire chambers are represented as instances of the sensor class. + + /************* + computation + *************/ + void addHit(HGCalTBRecHit Rechit, double ADC_per_MIP); + //Register a HGCalTBRecHit to the sensor. For the conversion of the energy to MIPs, the skiroc dependent ADC to MIP conversion factor has to be passed as an argument. Only cells of type '0' are incorporated. + + void registerClusterHit(HGCalTBDetId hit, int N_considered); + //Registers a hit to be part of a cluster. + //The passed hit must have already been added via addHit(...) in order to be properly registered - otherwise it is ignored. + //N_considered=-1 refers to the 'all' scheme, N_considered=7 for one ring and N_considered=19 for two rings around the cell with highest energy deposit. + + std::pair subtractCM(); + //Subtracts the common mode of each cell. Negative values are set to zero. + //Returns the common mode noise and the number of contributing cells. + + void calculateCenterPosition(ConsiderationMethod considerationMethod, + WeightingMethod weightingMethod); + //Applies the main impact position reconstruction for the layer. + //Consideration- and WeightingMethod are dedicated enum data types. + + /************* + getters + *************/ + int label(); + //returns the initially set label + + double getTotalEnergy(); + //Returns the total energy summed over all cells after common mode subtraction in units of MIPs + + double getTotalClusterEnergy(int N_considered); + //Returns the total energy summed over all cells which are entries in clusters before common mode subtraction in units of MIPs + + double getTotalWeight(); + //Returns the sum of all weights, equal to the denominator value in the weighting formula + + double getLabZ(); + //Returns the initially set z-coordinate in cm + + double getX0(); + //Returns the initially set z-coordinate in radiation lengths + + double getParticleEnergy(); + //Returns the initially energy at the layer in GeV + + double getIntrinsicHitZPosition(); + //Returns the z-coordinate of the main impact position in the sensor's reference frame. + //If no alignment is applied, it returns 0. + + double getResidualResolution(); + //Returns the initially set residual resolution or -1 if it has not been set. + + std::pair getHitPosition(); + //Returns central main impact position in layer's own frame + + std::pair getLabHitPosition(); + //Returns central main impact position in the lab frame + + std::pair getHitPositionError(); + //Returns the error of the reconstruction, calculated as the RMS of the weighting formula + + std::pair getCenterOfClosestCell(std::pair X_ref); + //Returns the coordinates of the cell's center with minimal distance to X_ref. + //Function considers only those hits, that have been added to the sensor at this point. + //Has to be used with caution for running on simulation where not every cell on each sensor is available in the input data. +``` + #### Tracks -todo +Central class wrapping the functionality to make electron shower trajectory models in the position resolution analysis. + +```c++ + ParticleTrack(); + //default constructor + + ~ParticleTrack(); + //default destructor + + void addFitPoint(SensorHitMap* sensor); + //Adds a point to the model prior to any fit. + //Those points are the main impact position members of the sensor class. + //Thus, on the passed sensors, the reconstruction must be run in advance. + //MWC measurements are added setting impact positions manually. + + void addReferenceSensor(SensorHitMap* reference); + //Defines the reference sensor with which the trajectory model prediction is compared to the reconstruction. + + void weightFitPoints(FitPointWeightingMethod method); + //Performs the energy-dependent rescaling of fit point errors. + + void fitTrack(TrackFittingMethod method); + //Fits the trajectory. TrackFittingMethod is an enum type. + + std::pair calculateReferenceXY(); + //Calculates the reference coordinates using the trajectory model on the reference sensor. + + std::pair calculateReferenceErrorXY(); + //Calculates the reference coordinates uncertainties using the trajectory model on the reference sensor. + + std::pair calculatePositionXY(double z, int layerLabel); + //Calculates the reference coordinates using the trajectory model indicating any position on the z-axis (analytic models for the trajectory), + //or through indication of a sensor label (e.g. for the general broken line trajectory). + + std::pair calculatePositionErrorXY(double z, int layerLabel); + //Calculates the reference coordinate uncertainties using the trajectory model indicating any position on the z-axis (analytic models for the trajectory), + //or through indication of a sensor label (e.g. for the general broken line trajectory). + + double getSumOfEnergies(); + //Returns the sum over all energies of the fit point's total energies. + + /***** + GBL specific members: + *****/ + + void addDummySensor(SensorHitMap* dummy); + //Adds a sensor to the GBL formalism. + //Measurement is not specified but the absorbers/thin scatterers are placed. + + void gblTrackToMilleBinary(gbl::MilleBinary *milleBinary); + //Practical, external interface to write out the necessary derivatives for alignment with millepede into the binary form. +``` + +### Steering files + +**`test_cgf_newEB.py`**: Minimally adjusted old steering file to grant full compatibility with the existing code. Chains such as the LayerSumAnalyzer can be run as before. Only the arguments for the `HGCalTBTExtSource` plugin had to be extended. + +**`position_resolution_cgf.py`**: Alternative steering file to run either the position resolution analyzer (producing the TTree) and/or the binary file creator for the alignment using Millepede. + +__**Reading Options:**__ + +* **`repoFolder`**: Directory to the repository to correctly navigate to some file in CondObjects. + +* **`dataFolder`**: Main directory containing the raw text input. + +* **`pathToRunEnergyFile`**: (Absolute) path to the file that indicates the runs to run the analysis on. + +* **`readOnlyRuns`**: Run the analysis only for the indicated runs. + +* **`isData`**: Is the analysis run on real data (otherwise on simulated samples)? + +* **`nSpills`**: Number of spills per run before read-out is stopped. + +__**Pedestal Subtraction Options:**__ + +* **`pedestalsHighGain`**: Path to high gain pedestals file. + +* **`pedestalsLowGain`**: Path to low gain pedestals file. + +__**Analysis Execution Options:**__ + +* **`chainSequence`**: Here: only 8 (position resolution) and 9 (writing of millepede binary) is configured. + +* **`reportEvery`**: Frequency of event count printouts on the console. + +__**Experimental Setup Options:**__ + +* **`configuration`**: 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower. + +* **`alignmentParameterFiles`**: Alignment parameter files as obtained from the (mille)pede framework. + +__**Reference Trajectory Options:**__ + +* **`useMWCReference`**: Are the multi wire chamber information used for the exrapolation of referemce impact points? + +* **`fittingMethod`**: Model of the electron tracks. + +__**Reconstruction Options:**__ + +* **`considerationMethod`**: Possible arguments are: `all`, `closest7`, `closest19`, `clusters`. + +* **`weightingMethod`**: Possible arguments are: `squaredWeighting`, `linearWeighting`, `logWeighting_3.5_1.0`, ... . + +* **`pedestalThreshold`**: Threshold for the common mode noise subtraction. Unit is MIP. -#### AlignmentParameters -todo +__**Output Options:**__ -### Examplary run commands -todo +* **`outputFolder`**: Main directory of the output files. +* **`outputPostfix`**: Postfix to the output file. ## More Information For general instructions on the framework, co-ordinate system, reconstruction sequence, etc please refer to From 89cd0c0fad5bafabe18b21ea6ed290ae4a303cb4 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 14:08:23 +0100 Subject: [PATCH 231/297] [documentation] add table of contents to reade --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 41bf668..5ce6338 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,14 @@ CMS HGCal Testbeam Analysis Framework - [Download the code](#download-the-code) - [Location of data files](#location-of-data-files) - [Running the code](#running-the-code) -- [Updates from the positionResolution branch](#updates-from-the-positionResolution-branch) +- [positionResolution branch](#positionresolution-branch) + - [(Extended) TextInput Plugin](#(extended)-textinput-plugin) + - [(New) GenSim to RecHit Converter](#(new)-gensim-to-rechit-converter) + - [(Extended) HGCalTBRecHitProducer](#(extended)-hgcaltbrechitproducer) + - [(New) PositionResolutionAnalyzer](#(new)-positionresolutionanalyzer) + - [(New) MillepedeBinaryWriter](#(new)-millepedebinarywriter) + - [Helper Classes](#helper-classes) + - [Steering files](#steering-files) - [More information](#more-information) @@ -23,7 +30,7 @@ CMS HGCal Testbeam Analysis Framework * **`git pull`** * **`scram b -j16`** -## Location of the data files +## Location of data files #### Raw data files The RAW files can be found in **`/afs/cern.ch/user/r/rchatter/public/FNAL_TB_May/FNAL_TB_May_4Module_Runs`**. @@ -83,9 +90,9 @@ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_ * **`configuration=-1`** ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) * **`configuration=1`** (2) to select weights for 5X0 (25X0) 8 layers cern runs -## Updates from the positionResolution branch +## PositionResolution branch -### (Extended)TextInput Plugin +### (Extended) TextInput Plugin The `HGCalTextSource` plugin has been modified to cope with the analysis of multiple runs / data files per execution. Except for the removed veto on `Danger=true` events, downward compatibility is granted. Application of the `BadSpillFilter` plugin should restore the compatibility. The usage of the new features is optional. Besides the usual data readout, this plugin also adds a `RunData` collection (```c++ produces("RunData");```) to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData` (```c++ produces("MultiWireChambers");```). Hereby, it is assumed that the reconstructed coordinates are given in [mm]. From 41aaf39033c6d797c1358761f1dae5ae6301de06 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 14:15:07 +0100 Subject: [PATCH 232/297] [documentation] minor style updates to readme --- README.md | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 5ce6338..df5172d 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ CMS HGCal Testbeam Analysis Framework - [Location of data files](#location-of-data-files) - [Running the code](#running-the-code) - [positionResolution branch](#positionresolution-branch) - - [(Extended) TextInput Plugin](#(extended)-textinput-plugin) - - [(New) GenSim to RecHit Converter](#(new)-gensim-to-rechit-converter) - - [(Extended) HGCalTBRecHitProducer](#(extended)-hgcaltbrechitproducer) - - [(New) PositionResolutionAnalyzer](#(new)-positionresolutionanalyzer) - - [(New) MillepedeBinaryWriter](#(new)-millepedebinarywriter) + - [TextInput Plugin](#textinput-plugin) + - [GenSim to RecHit Converter](#gensim-to-rechit-converter) + - [HGCalTBRecHitProducer](#hgcaltbrechitproducer) + - [PositionResolutionAnalyzer](#positionresolutionanalyzer) + - [MillepedeBinaryWriter](#millepedebinarywriter) - [Helper Classes](#helper-classes) - [Steering files](#steering-files) - [More information](#more-information) @@ -21,14 +21,17 @@ CMS HGCal Testbeam Analysis Framework ## Download the code * CMSMSW Version 8.0.1 -* **`scram project ${RELEASE}`** -* **`cd ${RELEASE}/src/`** -* **`cmsenv`** -* **`git cms-init`** -* **`git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/`** -* **`git checkout FNAL_TB_4Layers`** -* **`git pull`** -* **`scram b -j16`** + +```bash +>> scram project ${RELEASE} +>> cd ${RELEASE}/src/ +>> cmsenv +>> git cms-init +>> git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/ +>> git checkout FNAL_TB_4Layers +>> git pull +>> scram b -j16 +``` ## Location of data files @@ -92,9 +95,19 @@ cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_ ## PositionResolution branch -### (Extended) TextInput Plugin +### TextInput Plugin The `HGCalTextSource` plugin has been modified to cope with the analysis of multiple runs / data files per execution. Except for the removed veto on `Danger=true` events, downward compatibility is granted. Application of the `BadSpillFilter` plugin should restore the compatibility. -The usage of the new features is optional. Besides the usual data readout, this plugin also adds a `RunData` collection (```c++ produces("RunData");```) to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData` (```c++ produces("MultiWireChambers");```). Hereby, it is assumed that the reconstructed coordinates are given in [mm]. +The usage of the new features is optional. Besides the usual data readout, this plugin also adds a `RunData` collection: + +```c++ +produces("RunData"); +``` +to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData`: + +``` +c++ produces("MultiWireChambers"); +``` +Hereby, it is assumed that the reconstructed coordinates are given in [mm]. __**Options:**__ @@ -121,7 +134,7 @@ inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.d -### (New) GenSim to RecHit Converter +### GenSim to RecHit Converter This plugin reads the simulated simulated data formats and converts the information into **`HGCalTBRecHit`** collections. Multi-wire chamber data are faked using the xBeam and yBeam branch of the input trees. Their distance w.r.t. the first module is hard-coded. (x,y) position information of the cells are computed from the cell IDs as they are placed in the Geant4 simulation. So far, only the sensors with `133 cells` are implemented. Energies are converted from GeV to MIPs to ADC using the identical conversion factors in data. Smearing effects in the fake MWC measurements and the noise have appropriate parameters. @@ -144,12 +157,12 @@ inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%( * **`MWCSmearingResolution`**: Resolution of the multi-wire chamber fake measurements. The coordinates are smeared by a Gaussian centered at zero with width `MWCSmearingResolution` (in microns). -### (Extended) HGCalTBRecHitProducer +### HGCalTBRecHitProducer * HGCalTBRecHits have the cell center coordinates as additional members `cellCenter_x`, `cellCenter_y`. * The center's coordinates are set in this producer (lines 99 ff.) or in the `HGCalTBGenSimSource` plugin to grant a common interface for the position retrieval in the next steps. -### (New) PositionResolutionAnalyzer +### PositionResolutionAnalyzer Plugin that reconstructs impact positions of the incident particles for each layer, extra- or interpolates them and computes the differences of both approaches. Both the reconstruction and the inter-/extrapolation schemes are configurable. Output of this plugin is a ROOT TTree (name: `deviations`) with information on the layerIndex, the impacts positions in x&y, the deviations to the reference, ... (see lines 351 ff in `Position_Resolution_Analyzer.cc`). Z-positioning of the layers along the beam line in cm and radiation length is hard-coded. @@ -215,7 +228,7 @@ In principle, the procedure can be segmented into the following: -### (New) MillepedeBinaryWriter +### MillepedeBinaryWriter This plugin is very similar to the PositionResolutionAnalyzer as it also reconstructs impact positions and compares those references. Yet, the output is not a voluminous ROOT TTree but a binary file that is subsequently input to the alignment procedure using `Millepede`. Thus, the main difference is the track model derivation which is either done using the two MWCs in front (extrapolation) or all eight HGC stack layers only (for interpolation). Besides the residuals, their local derivatives w.r.t. the alignment parameters are computed and written to the binary file. [Link to the millepde manual.](http://www.desy.de/~blobel/Mptwo.pdf) From fe989e91dd26f3ef3c3f02c57eeef2ea9b9ee751 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 14:16:27 +0100 Subject: [PATCH 233/297] [documentation] minor style updates to readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index df5172d..5552aee 100644 --- a/README.md +++ b/README.md @@ -104,8 +104,8 @@ produces("RunData"); ``` to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData`: -``` -c++ produces("MultiWireChambers"); +```c++ +produces("MultiWireChambers"); ``` Hereby, it is assumed that the reconstructed coordinates are given in [mm]. From ae5bf12491a2a27b441a7245e83c05a74d480e4a Mon Sep 17 00:00:00 2001 From: thorben quast Date: Mon, 20 Feb 2017 14:18:28 +0100 Subject: [PATCH 234/297] [documentation] minor style updates to readme --- README.md | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5552aee..527f564 100644 --- a/README.md +++ b/README.md @@ -178,27 +178,39 @@ In principle, the procedure can be segmented into the following: * **`RUNDATA`**: Input tag to the RunData collection. Name is fixed in the read-out plugins. E.g. -```python RUNDATA = cms.InputTag("source","RunData","unpack" )``` +```python +RUNDATA = cms.InputTag("source","RunData","unpack" ) +``` * **`MWCHAMBERS`**: Input tag to the multi-wire chambers collection. Name is fixed in the read-out plugins. E.g. -```python MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" )``` +```python +MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ) +``` * **`HGCALTBRECHITS`**: Input tag to the recHits collection. E.g. -```python HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" )``` +```python +HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ) +``` * **`HGCALTBCLUSTERS`**: Input tag to the cluster collection. E.g. -```python HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" )``` +```python +HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ) +``` * **`HGCALTBCLUSTERS7`**: Input tag to the cluster (with seven closest cells) collection. E.g. -```python HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" )``` +```python +HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ) +``` * **`HGCALTBCLUSTERS19`**: Input tag to the cluster (with 19 closest cells) collection. E.g. -```python HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" )``` +```python +HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" ) +``` * **`e_mapFile_CERN`**: Electronics mapping file to perform the matching of the cell IDs to the hypothetical skiRocs on which MIP to ADC conversions depend. @@ -209,7 +221,9 @@ In principle, the procedure can be segmented into the following: * **`SensorSize`**: Size of the sensors in terms of number of cells. `Supported: 133`. * **`ADC_per_MIP`**: MIP to ADC conversion factors for each of the 2x8 skirocs. Example: -```python ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66])``` +```python +ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]) +``` * **`pedestalThreshold`**: Threshold in MIP unit to specify the boundary under which cell energy deposits are included in the common mode noise calculation and subsequent subtraction. `Default: 2`. * **`alignmentParameterFiles`**: Array of paths to alignment files. The content of such files must follow the format as dictated by the `millepede` program. The parameter files are matched to each run. For this purpose, the path to the corresponding alignment parameter file must contain the substring `RUN__`. Otherwise, i.e. if not available, values are assumed to be zero (=no alignment). The functionality of the readout is implemented in `Reco/src/PositionResolutionHelpers.cc`. From 1c8da4e6b4f623de4aa2bf07105efe1758ff08cc Mon Sep 17 00:00:00 2001 From: thorben quast Date: Tue, 21 Feb 2017 14:27:30 +0100 Subject: [PATCH 235/297] [documentation] add exemplary run commands to the README --- README.md | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 527f564..d8efd70 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ CMS HGCal Testbeam Analysis Framework - [PositionResolutionAnalyzer](#positionresolutionanalyzer) - [MillepedeBinaryWriter](#millepedebinarywriter) - [Helper Classes](#helper-classes) - - [Steering files](#steering-files) + - [Steering files](#steering-files) + - [Run Commands](#run-commands) - [More information](#more-information) @@ -73,11 +74,11 @@ cms.Source("HGCalTBTextSource", process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_1600_Reco.root") ) ``` -#### Event-based reconstruction (Outdated?) +#### Event-based reconstruction ```bash sh scripts/rearrangeTxtFile.sh input.txt >> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ -cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun +>> cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun >> chainSequence= >> test_cfg_newEB.py to load the reqarranged .txt: -> mount eos @@ -519,6 +520,124 @@ __**Output Options:**__ * **`outputPostfix`**: Postfix to the output file. +#### Run Commands +For the following run command examples, these assumptions are made: + +* *`repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal`*: Location of the analysis framework repository. It corresponds to the ROOT directory in which the run steering file is executed. + +* *`configuration=1`*: CERN 6-15X0 setup is chosen. The second configuration could be analysed the same way. + +* *`dataFolder=/home/data/Testbeam/September2016`*: Main directory of the data files in which the text files (e.g. `HGCRun_Output_000927.txt`) are located. The multi-wire chamber text files are located in its subdirectory `MWC` (e.g. `MWC/WC_H4Run4814.txt`). + +* *`pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt`*: Path to the run-energy mapping file. + +* *`useMWCReference=1`*: Selects the extrapolation from the MWC measurements as reference. If set to `=0`, the HGC stack interpolation is used. + +* *`fittingMethod=lineAnalytical`*: Track model - assumes the electron induced showers to follow straight lines. + +* *`considerationMethod=closest19`*: Considers two rings around the cell with highest energy deposition for the impact position reconstruction. + +* *`weightingMethod=logWeighting_3.5_1.0`*: Specification of the weighting formula for the impact position reconstruction. + +* *`pedestalThreshold=2.`*: Threshold at 2 MIPs under which all cells are taken into account during the common mode noise calculation. + +* *`outputFolder=/tmp/`*: Output-folder to which the files are being written. + +* *`reportEvery=1000`*: Optional parameter. Sets the event number print-out frequency to every 1000. + +__**Running the Millepede Binary Writer Analyzer:**__ + +1. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately. The output + +* *`chainSequence=9`*: Index of the corresponding chain is 9. +* *`readOnlyRuns=927`*: Only run number 927 is processed in this example. +* *`outputPostfix=testOnData`*: Specifies a postfix to the default filename. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=9 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 +``` +It creates a binary file, `/tmp/HGCRun_MillepedeBinary_testOnData.bin`. + + +2. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible. + +* Ommit the *`readOnlyRuns`* parameter. +* *`useMWCReference=0`*: No MWC but stack reference. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=9 configuration=1 reportEvery=1000 useMWCReference=0 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataStack isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 +``` +The file *`/tmp/HGCRun_MillepedeBinary_testOnDataStack.bin`* should be created. + +__**Running the Position Resolution Analyzer:**__ + +1. Calculation of deviations for the aligned run 927 using the MWC reference. + +* *`chainSequence=8`*: Index of the corresponding chain is 8. +* *`readOnlyRuns=927`*: Only run 927. +* *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt`*: Indication of the alignment parameter file as it is output from the `pede` execution. It is obligatory to include the substring `RUN__` in the filename, as the mapping of the files to the events is based on the run numbers. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataRun927 isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt +``` + +The output .root file is stored in `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927.root`. It contains a TTree with a tabular-like storage of many relevant computed quantities that can be plotted in various ways. + + +2. Calculation of deviations for multiple aligned runs using the MWC reference. + +* *`readOnlyRuns=927 readOnlyRuns=927`*: Only runs 927 and 937. +* *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt`*: Indicate paths of both. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataRun927Run937 isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 readOnlyRuns=937 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt +``` + +Output file `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927Run937.root` with same format as before but for the analysis of two runs with one execution. + + +3. Consideration of all runs using the MWC reference with alignment. + +* Ommit the *`readOnlyRuns`* parameter. +* Indicate all available `alignmentParameterFiles`. + +Full command (remove `...`): + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataAllRuns isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/... +``` + +4. Consideration of all runs using the MWC reference without alignment. + +* Omit the `alignmentParameterFiles` parameter. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 +``` + +5. Run on simulated samples (no alignment): + +* `dataFolder=/home/data/MC/September2016`: Main directory in which the simulated samples are stored. It must contain the structure `GeV/TBGenSim_.root`. +* `isData=False`: Important to specify that data are not real, because the chaining of plugins depend on it. + +Full command: + +```bash +>> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnSim isData=False pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 +``` +The event loop frequency is noticeably higher compared to the analysis of real data. (It seems that most of the CPU resources are spent on the conversion of the original string inputs to HGCalTBRecHits.) +The output file is `/tmp/HGCRun_Output_Position_Resolution_testOnSim.root`. + ## More Information For general instructions on the framework, co-ordinate system, reconstruction sequence, etc please refer to [http://cms-hgcal.github.io/TestBeam/](http://cms-hgcal.github.io/TestBeam/) From 350cfbd68ba44e9a727db8a34e410c6c84091f4d Mon Sep 17 00:00:00 2001 From: Thorben Quast Date: Tue, 21 Feb 2017 14:29:30 +0100 Subject: [PATCH 236/297] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d8efd70..4b519c8 100644 --- a/README.md +++ b/README.md @@ -547,7 +547,7 @@ For the following run command examples, these assumptions are made: __**Running the Millepede Binary Writer Analyzer:**__ -1. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately. The output +I. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately. The output * *`chainSequence=9`*: Index of the corresponding chain is 9. * *`readOnlyRuns=927`*: Only run number 927 is processed in this example. @@ -561,7 +561,7 @@ Full command: It creates a binary file, `/tmp/HGCRun_MillepedeBinary_testOnData.bin`. -2. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible. +II. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible. * Ommit the *`readOnlyRuns`* parameter. * *`useMWCReference=0`*: No MWC but stack reference. @@ -575,7 +575,7 @@ The file *`/tmp/HGCRun_MillepedeBinary_testOnDataStack.bin`* should be created. __**Running the Position Resolution Analyzer:**__ -1. Calculation of deviations for the aligned run 927 using the MWC reference. +I. Calculation of deviations for the aligned run 927 using the MWC reference. * *`chainSequence=8`*: Index of the corresponding chain is 8. * *`readOnlyRuns=927`*: Only run 927. @@ -590,7 +590,7 @@ Full command: The output .root file is stored in `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927.root`. It contains a TTree with a tabular-like storage of many relevant computed quantities that can be plotted in various ways. -2. Calculation of deviations for multiple aligned runs using the MWC reference. +II. Calculation of deviations for multiple aligned runs using the MWC reference. * *`readOnlyRuns=927 readOnlyRuns=927`*: Only runs 927 and 937. * *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt`*: Indicate paths of both. @@ -604,7 +604,7 @@ Full command: Output file `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927Run937.root` with same format as before but for the analysis of two runs with one execution. -3. Consideration of all runs using the MWC reference with alignment. +III. Consideration of all runs using the MWC reference with alignment. * Ommit the *`readOnlyRuns`* parameter. * Indicate all available `alignmentParameterFiles`. @@ -615,7 +615,7 @@ Full command (remove `...`): >> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataAllRuns isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/... ``` -4. Consideration of all runs using the MWC reference without alignment. +IV. Consideration of all runs using the MWC reference without alignment. * Omit the `alignmentParameterFiles` parameter. @@ -625,7 +625,7 @@ Full command: >> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 ``` -5. Run on simulated samples (no alignment): +V. Run on simulated samples (no alignment): * `dataFolder=/home/data/MC/September2016`: Main directory in which the simulated samples are stored. It must contain the structure `GeV/TBGenSim_.root`. * `isData=False`: Important to specify that data are not real, because the chaining of plugins depend on it. From 29a8e63e7f3bf2dc4b80f567b258f0c0a2456758 Mon Sep 17 00:00:00 2001 From: Thorben Quast Date: Tue, 21 Feb 2017 14:31:41 +0100 Subject: [PATCH 237/297] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4b519c8..f1cd06e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ CMS HGCal Testbeam Analysis Framework ## Download the code -* CMSMSW Version 8.0.1 +* CMSSW Version 8.0.1 ```bash >> scram project ${RELEASE} @@ -547,7 +547,7 @@ For the following run command examples, these assumptions are made: __**Running the Millepede Binary Writer Analyzer:**__ -I. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately. The output +__I. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately:__ * *`chainSequence=9`*: Index of the corresponding chain is 9. * *`readOnlyRuns=927`*: Only run number 927 is processed in this example. @@ -561,7 +561,7 @@ Full command: It creates a binary file, `/tmp/HGCRun_MillepedeBinary_testOnData.bin`. -II. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible. +__II. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible:__ * Ommit the *`readOnlyRuns`* parameter. * *`useMWCReference=0`*: No MWC but stack reference. @@ -575,7 +575,7 @@ The file *`/tmp/HGCRun_MillepedeBinary_testOnDataStack.bin`* should be created. __**Running the Position Resolution Analyzer:**__ -I. Calculation of deviations for the aligned run 927 using the MWC reference. +__I. Calculation of deviations for the aligned run 927 using the MWC reference:__ * *`chainSequence=8`*: Index of the corresponding chain is 8. * *`readOnlyRuns=927`*: Only run 927. @@ -590,7 +590,7 @@ Full command: The output .root file is stored in `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927.root`. It contains a TTree with a tabular-like storage of many relevant computed quantities that can be plotted in various ways. -II. Calculation of deviations for multiple aligned runs using the MWC reference. +__II. Calculation of deviations for multiple aligned runs using the MWC reference:__ * *`readOnlyRuns=927 readOnlyRuns=927`*: Only runs 927 and 937. * *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt`*: Indicate paths of both. @@ -604,7 +604,7 @@ Full command: Output file `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927Run937.root` with same format as before but for the analysis of two runs with one execution. -III. Consideration of all runs using the MWC reference with alignment. +__III. Consideration of all runs using the MWC reference with alignment:__ * Ommit the *`readOnlyRuns`* parameter. * Indicate all available `alignmentParameterFiles`. @@ -615,7 +615,7 @@ Full command (remove `...`): >> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataAllRuns isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/... ``` -IV. Consideration of all runs using the MWC reference without alignment. +__IV. Consideration of all runs using the MWC reference without alignment:__ * Omit the `alignmentParameterFiles` parameter. @@ -625,7 +625,7 @@ Full command: >> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 ``` -V. Run on simulated samples (no alignment): +__V. Run on simulated samples (no alignment):__ * `dataFolder=/home/data/MC/September2016`: Main directory in which the simulated samples are stored. It must contain the structure `GeV/TBGenSim_.root`. * `isData=False`: Important to specify that data are not real, because the chaining of plugins depend on it. From 37f3ef93204fe1bad481009211702715a64d22c3 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Wed, 22 Feb 2017 20:37:12 +0100 Subject: [PATCH 238/297] [hotfix] set sensor size to 128 in GetCellCentreCoordinatesForPlots(), otherwise no position information are written to the rechits --- Reco/plugins/HGCalTBRecHitProducer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index 6857fae..d3c2498 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -97,7 +97,7 @@ void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iS float energy = -1.; HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 133); + CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); recHit.setCellCenterCoordinate(CellCenterXY.first, CellCenterXY.second); //Consistency check if the reversion of the x,y - iu iv formula can be reverted //std::pair iuiv = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); From b70ec9a44255e0a064a910600399c2faa5ddd6d7 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 24 Feb 2017 14:52:48 +0100 Subject: [PATCH 239/297] [convenience] add true simulated beam momentum to run data --- DataFormats/interface/HGCalTBRunData.h | 3 ++- RawToDigi/plugins/HGCalTBGenSimSource.cc | 6 ++++-- RawToDigi/plugins/HGCalTBGenSimSource.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/DataFormats/interface/HGCalTBRunData.h b/DataFormats/interface/HGCalTBRunData.h index e551620..7ee6ae8 100644 --- a/DataFormats/interface/HGCalTBRunData.h +++ b/DataFormats/interface/HGCalTBRunData.h @@ -4,7 +4,7 @@ struct RunData { explicit RunData(int config, int r, double e, std::string rt): configuration(config), run(r), energy(e), runType(rt) {}; - RunData(): configuration(0), run(0), energy(0), runType(""){}; + RunData(): configuration(0), run(0), energy(0), runType(""), trueEnergy(-1){}; int configuration; int run; int event; @@ -12,6 +12,7 @@ struct RunData { std::string runType; bool hasValidMWCMeasurement; bool hasDanger; + double trueEnergy; }; typedef std::map runMap; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index 81f7475..aedd58e 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -133,6 +133,7 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); tree->SetBranchAddress("xBeam", &beamX, &b_beamX); tree->SetBranchAddress("yBeam", &beamY, &b_beamY); + tree->SetBranchAddress("pBeam", &beamP, &b_beamP); } if (currentEvent == tree->GetEntries()) { @@ -223,12 +224,13 @@ void HGCalTBGenSimSource::produce(edm::Event & event) //third: fill the run data std::auto_ptr rd(new RunData); - rd->energy = (*fileIterator).energy; + rd->energy = (*fileIterator).energy; //mean energy of the beam configuration rd->configuration = (*fileIterator).config; rd->runType = (*fileIterator).runType; rd->run = (*fileIterator).index; - rd->run = eventCounter; + rd->event = eventCounter; rd->hasDanger = false; + rd->trueEnergy = beamP; //energy as truely simulated bool _hasValidMWCMeasurement = true; _hasValidMWCMeasurement = (x1_mc != -99.9) && _hasValidMWCMeasurement; diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.h b/RawToDigi/plugins/HGCalTBGenSimSource.h index f5a759f..3e282e8 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.h +++ b/RawToDigi/plugins/HGCalTBGenSimSource.h @@ -80,10 +80,12 @@ class HGCalTBGenSimSource : public edm::ProducerSourceFromFiles std::vector *simHitCellEnE; double beamX; double beamY; + double beamP; TBranch *b_simHitCellIdE; TBranch *b_simHitCellEnE; TBranch *b_beamX; TBranch *b_beamY; + TBranch *b_beamP; //getting the required electronic mapping std::string _e_mapFile; From 86fe31696e110be280976eda40f62e4b8b7bc4d2 Mon Sep 17 00:00:00 2001 From: thorben quast Date: Fri, 24 Feb 2017 16:01:02 +0100 Subject: [PATCH 240/297] [simulation reader] fix reading of individual files --- RawToDigi/plugins/HGCalTBGenSimSource.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBGenSimSource.cc b/RawToDigi/plugins/HGCalTBGenSimSource.cc index aedd58e..db3d457 100644 --- a/RawToDigi/plugins/HGCalTBGenSimSource.cc +++ b/RawToDigi/plugins/HGCalTBGenSimSource.cc @@ -26,14 +26,14 @@ HGCalTBGenSimSource::HGCalTBGenSimSource(const edm::ParameterSet & pset, edm::In if (fileNames()[0] != "file:DUMMY") { for (int i = 0; i<(int)(fileNames().size()); i++) { FileInfo fInfo; - fInfo.index = -1; + fInfo.index = 0; fInfo.energy = -1; fInfo.runType = ""; fInfo.config = -1; fInfo.name = fileNames()[i]; - _fileNames.push_back(fInfo); } + fileIterator = _fileNames.begin(); } else { std::fstream map_file; map_file.open(runEnergyMapFile.c_str(), std::fstream::in); @@ -118,7 +118,6 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& if (currentRun == -1) { //initial loading of a file currentRun = (*fileIterator).index; - currentEvent = 0; /* if (rootFile != NULL) @@ -127,7 +126,11 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& rootFile = new TFile(((*fileIterator).name).c_str()); dir = (TDirectory*)rootFile->FindObjectAny("HGCalTBAnalyzer"); - tree = (TTree*)dir->Get("HGCTB"); + if (dir != NULL) { + tree = (TTree*)dir->Get("HGCTB"); + } else { + tree = (TTree*)rootFile->Get("HGCTB"); + } tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); @@ -153,7 +156,7 @@ bool HGCalTBGenSimSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& void HGCalTBGenSimSource::produce(edm::Event & event) { - if (fileIterator ==_fileNames.end()) { + if (fileIterator == _fileNames.end()) { std::cout<<"End of the files in the producer is reached..."< Date: Fri, 3 Mar 2017 04:22:26 +0100 Subject: [PATCH 241/297] fix compilation error post merger, and fix to a bug in cleaned up event display code in this branch(never used so far) --- Reco/plugins/RecHitPlotter_HighGain_New.cc | 6 +++--- Reco/src/Mille.cc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Reco/plugins/RecHitPlotter_HighGain_New.cc b/Reco/plugins/RecHitPlotter_HighGain_New.cc index 503770d..1b7ae6a 100644 --- a/Reco/plugins/RecHitPlotter_HighGain_New.cc +++ b/Reco/plugins/RecHitPlotter_HighGain_New.cc @@ -251,13 +251,13 @@ RecHitPlotter_HighGain_New::analyze(const edm::Event& event, const edm::EventSet h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy()); } - if((RecHit.id()).cellType() != 2 ) { + if((RecHit.id()).cellType() == 2 ) { h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Half / Cell_counter_Half) ); } - if((RecHit.id()).cellType() != 3 ) { + if((RecHit.id()).cellType() == 3 ) { h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_MB/Cell_counter_MB) ); } - if((RecHit.id()).cellType() != 5 ) { + if((RecHit.id()).cellType() == 5 ) { h_RecHit_layer[n_layer - 1]->Fill(iux , iyy, RecHit.energy() - (Average_Pedestal_Per_Event_Merged/Cell_counter_Merged) ); } diff --git a/Reco/src/Mille.cc b/Reco/src/Mille.cc index c2db9a5..16275f8 100644 --- a/Reco/src/Mille.cc +++ b/Reco/src/Mille.cc @@ -9,7 +9,7 @@ * (last update by $Author: flucke $) */ -#include "Mille.h" +#include "HGCal/Reco/interface/Mille.h" #include #include From e5f8012e110dd52dfff5bb1bc3c0550a3e7ab3ef Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Fri, 31 Mar 2017 16:48:03 +0200 Subject: [PATCH 242/297] EMap for 28 layer EE with Hexaboard --- .../data/map_CERN_Hexaboard_28Layers.txt | 3893 +++++++++++++++++ 1 file changed, 3893 insertions(+) create mode 100644 CondObjects/data/map_CERN_Hexaboard_28Layers.txt diff --git a/CondObjects/data/map_CERN_Hexaboard_28Layers.txt b/CondObjects/data/map_CERN_Hexaboard_28Layers.txt new file mode 100644 index 0000000..8bf4354 --- /dev/null +++ b/CondObjects/data/map_CERN_Hexaboard_28Layers.txt @@ -0,0 +1,3893 @@ +# SKIROC CHANNEL | LAYER SENSOR_IX SENSOR_IV IX IV TYPE + 1 0 1 0 0 -5 3 0 + 1 2 1 0 0 -6 4 0 + 1 4 1 0 0 -6 3 0 + 1 6 1 0 0 -5 4 0 + 1 8 1 0 0 -5 5 0 + 1 10 1 0 0 -6 5 2 + 1 12 1 0 0 -5 6 2 + 1 14 1 0 0 -4 4 0 + 1 16 1 0 0 -4 3 0 + 1 18 1 0 0 -3 3 0 + 1 20 1 0 0 -4 7 3 + 1 20 1 0 0 -3 7 3 + 1 22 1 0 0 -4 6 0 + 1 24 1 0 0 -4 5 0 + 1 26 1 0 0 -3 4 0 + 1 28 1 0 0 -3 5 0 + 1 30 1 0 0 -2 3 0 + 1 32 1 0 0 -2 2 0 + 1 34 1 0 0 -1 1 0 + 1 36 1 0 0 -1 0 0 + 1 38 1 0 0 -2 1 0 + 1 40 1 0 0 -4 0 0 + 1 42 1 0 0 -3 0 0 + 1 44 1 0 0 -4 1 0 + 1 46 1 0 0 -5 0 0 + 1 48 1 0 0 -6 1 2 + 1 50 1 0 0 -5 1 0 + 1 52 1 0 0 -3 1 0 + 1 54 1 0 0 -3 2 0 + 1 56 1 0 0 -4 2 0 + 1 58 1 0 0 -5 2 0 + 1 60 1 0 0 -7 3 3 + 1 60 1 0 0 -7 4 3 + 1 62 1 0 0 -6 2 0 + 2 0 1 0 0 -1 -3 0 + 2 2 1 0 0 -2 -2 0 + 2 4 1 0 0 -2 -3 0 + 2 6 1 0 0 -2 -4 0 + 2 8 1 0 0 -4 -1 0 + 2 10 1 0 0 -3 -3 0 + 2 12 1 0 0 -3 -4 3 + 2 12 1 0 0 -4 -3 3 + 2 14 1 0 0 -4 -2 0 + 2 16 1 0 0 -5 -1 2 + 2 18 1 0 0 -3 -2 0 + 2 20 1 0 0 -3 -1 0 + 2 22 1 0 0 -2 -1 0 + 2 24 1 0 0 -1 -2 0 + 2 26 1 0 0 -1 -1 0 + 2 28 1 0 0 -2 0 0 + 2 30 1 0 0 0 -3 0 + 2 32 1 0 0 1 -3 0 + 2 34 1 0 0 0 -2 0 + 2 36 1 0 0 0 0 0 + 2 38 1 0 0 0 -1 0 + 2 40 1 0 0 1 -2 4 + 2 42 1 0 0 2 -4 0 + 2 44 1 0 0 1 -4 0 + 2 46 1 0 0 2 -5 0 + 2 48 1 0 0 2 -6 0 + 2 50 1 0 0 1 -5 0 + 2 52 1 0 0 1 -6 2 + 2 54 1 0 0 -1 -4 0 + 2 56 1 0 0 0 -5 0 + 2 58 1 0 0 0 -4 0 + 2 62 1 0 0 -1 -5 2 + 3 0 1 0 0 4 -2 0 + 3 2 1 0 0 4 -3 0 + 3 4 1 0 0 5 -3 0 + 3 6 1 0 0 4 -4 0 + 3 8 1 0 0 6 -3 0 + 3 10 1 0 0 3 -4 0 + 3 12 1 0 0 4 -5 0 + 3 14 1 0 0 6 -2 0 + 3 16 1 0 0 7 -4 3 + 3 16 1 0 0 7 -3 3 + 3 18 1 0 0 6 -4 0 + 3 20 1 0 0 5 -4 0 + 3 22 1 0 0 6 -5 2 + 3 24 1 0 0 5 -5 0 + 3 26 1 0 0 5 -6 2 + 3 28 1 0 0 4 -6 0 + 3 30 1 0 0 3 -5 0 + 3 32 1 0 0 3 -6 0 + 3 34 1 0 0 3 -7 3 + 3 34 1 0 0 4 -7 3 + 3 36 1 0 0 1 -1 0 + 3 38 1 0 0 2 -2 0 + 3 40 1 0 0 2 -3 0 + 3 42 1 0 0 3 -3 0 + 3 44 1 0 0 1 0 0 + 3 46 1 0 0 4 -1 0 + 3 48 1 0 0 4 0 0 + 3 50 1 0 0 5 0 0 + 3 52 1 0 0 3 -1 0 + 3 54 1 0 0 2 -1 0 + 3 56 1 0 0 3 -2 0 + 3 58 1 0 0 5 -2 0 + 3 60 1 0 0 6 -1 2 + 3 62 1 0 0 5 -1 0 + 4 0 1 0 0 3 2 0 + 4 0 1 0 0 -3 0 0 + 4 0 1 0 0 -2 0 0 + 4 0 1 0 0 -1 0 0 + 4 0 1 0 0 0 0 0 + 4 0 1 0 0 2 0 0 + 4 0 1 0 0 3 0 0 + 4 2 1 0 0 2 2 0 + 4 4 1 0 0 3 1 0 + 4 6 1 0 0 4 2 0 + 4 8 1 0 0 -4 0 0 + 4 10 1 0 0 5 1 2 + 4 12 1 0 0 4 1 0 + 4 14 1 0 0 -5 0 0 + 4 16 1 0 0 2 1 0 + 4 18 1 0 0 1 1 0 + 4 20 1 0 0 1 2 0 + 4 22 1 0 0 0 2 0 + 4 24 1 0 0 0 1 0 + 4 26 1 0 0 -1 2 0 + 4 28 1 0 0 -1 3 0 + 4 30 1 0 0 -2 4 4 + 4 32 1 0 0 -2 5 0 + 4 34 1 0 0 -1 4 0 + 4 36 1 0 0 -1 5 0 + 4 38 1 0 0 0 4 0 + 4 40 1 0 0 0 3 0 + 4 42 1 0 0 1 3 0 + 4 44 1 0 0 -3 6 0 + 4 46 1 0 0 3 4 3 + 4 46 1 0 0 4 3 3 + 4 48 1 0 0 -2 6 0 + 4 50 1 0 0 -1 6 2 + 4 52 1 0 0 0 5 0 + 4 54 1 0 0 1 4 0 + 4 56 1 0 0 1 5 2 + 4 58 1 0 0 3 3 0 + 4 60 1 0 0 2 3 0 + 4 62 1 0 0 2 4 0 + 5 0 2 0 0 -2 -3 0 + 5 2 2 0 0 -2 -4 0 + 5 4 2 0 0 -3 -3 0 + 5 6 2 0 0 -1 -4 0 + 5 8 2 0 0 0 -5 0 + 5 10 2 0 0 -1 -5 2 + 5 12 2 0 0 1 -6 2 + 5 14 2 0 0 0 -4 0 + 5 16 2 0 0 -1 -3 0 + 5 18 2 0 0 0 -3 0 + 5 20 2 0 0 3 -7 3 + 5 20 2 0 0 4 -7 3 + 5 22 2 0 0 2 -6 0 + 5 24 2 0 0 1 -5 0 + 5 26 2 0 0 1 -4 0 + 5 28 2 0 0 2 -5 0 + 5 30 2 0 0 1 -3 0 + 5 32 2 0 0 0 -2 0 + 5 34 2 0 0 0 -1 0 + 5 36 2 0 0 -1 0 0 + 5 38 2 0 0 -1 -1 0 + 5 40 2 0 0 -4 0 0 + 5 42 2 0 0 -3 0 0 + 5 44 2 0 0 -3 -1 0 + 5 46 2 0 0 -5 0 0 + 5 48 2 0 0 -5 -1 2 + 5 50 2 0 0 -4 -1 0 + 5 52 2 0 0 -2 -1 0 + 5 54 2 0 0 -1 -2 0 + 5 56 2 0 0 -2 -2 0 + 5 58 2 0 0 -3 -2 0 + 5 60 2 0 0 -4 -3 3 + 5 60 2 0 0 -3 -4 3 + 5 62 2 0 0 -4 -2 0 + 6 0 2 0 0 -4 3 0 + 6 2 2 0 0 -4 2 0 + 6 4 2 0 0 -5 3 0 + 6 6 2 0 0 -6 4 0 + 6 8 2 0 0 -5 1 0 + 6 10 2 0 0 -6 3 0 + 6 12 2 0 0 -7 4 3 + 6 12 2 0 0 -7 3 3 + 6 14 2 0 0 -6 2 0 + 6 16 2 0 0 -6 1 2 + 6 18 2 0 0 -5 2 0 + 6 20 2 0 0 -4 1 0 + 6 22 2 0 0 -3 1 0 + 6 24 2 0 0 -3 2 0 + 6 26 2 0 0 -2 1 0 + 6 28 2 0 0 -2 0 0 + 6 30 2 0 0 -3 3 0 + 6 32 2 0 0 -2 3 0 + 6 34 2 0 0 -2 2 0 + 6 36 2 0 0 0 0 0 + 6 38 2 0 0 -1 1 0 + 6 40 2 0 0 -1 2 4 + 6 42 2 0 0 -2 4 0 + 6 44 2 0 0 -3 4 0 + 6 46 2 0 0 -3 5 0 + 6 48 2 0 0 -4 6 0 + 6 50 2 0 0 -4 5 0 + 6 52 2 0 0 -5 6 2 + 6 54 2 0 0 -5 4 0 + 6 56 2 0 0 -5 5 0 + 6 58 2 0 0 -4 4 0 + 6 62 2 0 0 -6 5 2 + 7 0 2 0 0 2 2 0 + 7 2 2 0 0 1 3 0 + 7 4 2 0 0 2 3 0 + 7 6 2 0 0 0 4 0 + 7 8 2 0 0 3 3 0 + 7 10 2 0 0 -1 4 0 + 7 12 2 0 0 -1 5 0 + 7 14 2 0 0 4 2 0 + 7 16 2 0 0 3 4 3 + 7 16 2 0 0 4 3 3 + 7 18 2 0 0 2 4 0 + 7 20 2 0 0 1 4 0 + 7 22 2 0 0 1 5 2 + 7 24 2 0 0 0 5 0 + 7 26 2 0 0 -1 6 2 + 7 28 2 0 0 -2 6 0 + 7 30 2 0 0 -2 5 0 + 7 32 2 0 0 -3 6 0 + 7 34 2 0 0 -4 7 3 + 7 34 2 0 0 -3 7 3 + 7 36 2 0 0 0 1 0 + 7 38 2 0 0 0 2 0 + 7 40 2 0 0 -1 3 0 + 7 42 2 0 0 0 3 0 + 7 44 2 0 0 1 0 0 + 7 46 2 0 0 3 1 0 + 7 48 2 0 0 4 0 0 + 7 50 2 0 0 5 0 0 + 7 52 2 0 0 2 1 0 + 7 54 2 0 0 1 1 0 + 7 56 2 0 0 1 2 0 + 7 58 2 0 0 3 2 0 + 7 60 2 0 0 5 1 2 + 7 62 2 0 0 4 1 0 + 8 0 2 0 0 5 -2 0 + 8 0 2 0 0 -3 0 0 + 8 0 2 0 0 -2 0 0 + 8 0 2 0 0 -1 0 0 + 8 0 2 0 0 0 0 0 + 8 0 2 0 0 2 0 0 + 8 0 2 0 0 3 0 0 + 8 2 2 0 0 4 -2 0 + 8 4 2 0 0 4 -1 0 + 8 6 2 0 0 6 -2 0 + 8 8 2 0 0 -4 0 0 + 8 10 2 0 0 6 -1 2 + 8 12 2 0 0 5 -1 0 + 8 14 2 0 0 -5 0 0 + 8 16 2 0 0 3 -1 0 + 8 18 2 0 0 2 -1 0 + 8 20 2 0 0 3 -2 0 + 8 22 2 0 0 2 -2 0 + 8 24 2 0 0 1 -1 0 + 8 26 2 0 0 1 -2 0 + 8 28 2 0 0 2 -3 0 + 8 30 2 0 0 2 -4 4 + 8 32 2 0 0 3 -5 0 + 8 34 2 0 0 3 -4 0 + 8 36 2 0 0 4 -5 0 + 8 38 2 0 0 4 -4 0 + 8 40 2 0 0 3 -3 0 + 8 42 2 0 0 4 -3 0 + 8 44 2 0 0 3 -6 0 + 8 46 2 0 0 7 -4 3 + 8 46 2 0 0 7 -3 3 + 8 48 2 0 0 4 -6 0 + 8 50 2 0 0 5 -6 2 + 8 52 2 0 0 5 -5 0 + 8 54 2 0 0 5 -4 0 + 8 56 2 0 0 6 -5 2 + 8 58 2 0 0 6 -3 0 + 8 60 2 0 0 5 -3 0 + 8 62 2 0 0 6 -4 0 + 9 0 3 0 0 -5 3 0 + 9 2 3 0 0 -6 4 0 + 9 4 3 0 0 -6 3 0 + 9 6 3 0 0 -5 4 0 + 9 8 3 0 0 -5 5 0 + 9 10 3 0 0 -6 5 2 + 9 12 3 0 0 -5 6 2 + 9 14 3 0 0 -4 4 0 + 9 16 3 0 0 -4 3 0 + 9 18 3 0 0 -3 3 0 + 9 20 3 0 0 -4 7 3 + 9 20 3 0 0 -3 7 3 + 9 22 3 0 0 -4 6 0 + 9 24 3 0 0 -4 5 0 + 9 26 3 0 0 -3 4 0 + 9 28 3 0 0 -3 5 0 + 9 30 3 0 0 -2 3 0 + 9 32 3 0 0 -2 2 0 + 9 34 3 0 0 -1 1 0 + 9 36 3 0 0 -1 0 0 + 9 38 3 0 0 -2 1 0 + 9 40 3 0 0 -4 0 0 + 9 42 3 0 0 -3 0 0 + 9 44 3 0 0 -4 1 0 + 9 46 3 0 0 -5 0 0 + 9 48 3 0 0 -6 1 2 + 9 50 3 0 0 -5 1 0 + 9 52 3 0 0 -3 1 0 + 9 54 3 0 0 -3 2 0 + 9 56 3 0 0 -4 2 0 + 9 58 3 0 0 -5 2 0 + 9 60 3 0 0 -7 3 3 + 9 60 3 0 0 -7 4 3 + 9 62 3 0 0 -6 2 0 + 10 0 3 0 0 -1 -3 0 + 10 2 3 0 0 -2 -2 0 + 10 4 3 0 0 -2 -3 0 + 10 6 3 0 0 -2 -4 0 + 10 8 3 0 0 -4 -1 0 + 10 10 3 0 0 -3 -3 0 + 10 12 3 0 0 -3 -4 3 + 10 12 3 0 0 -4 -3 3 + 10 14 3 0 0 -4 -2 0 + 10 16 3 0 0 -5 -1 2 + 10 18 3 0 0 -3 -2 0 + 10 20 3 0 0 -3 -1 0 + 10 22 3 0 0 -2 -1 0 + 10 24 3 0 0 -1 -2 0 + 10 26 3 0 0 -1 -1 0 + 10 28 3 0 0 -2 0 0 + 10 30 3 0 0 0 -3 0 + 10 32 3 0 0 1 -3 0 + 10 34 3 0 0 0 -2 0 + 10 36 3 0 0 0 0 0 + 10 38 3 0 0 0 -1 0 + 10 40 3 0 0 1 -2 4 + 10 42 3 0 0 2 -4 0 + 10 44 3 0 0 1 -4 0 + 10 46 3 0 0 2 -5 0 + 10 48 3 0 0 2 -6 0 + 10 50 3 0 0 1 -5 0 + 10 52 3 0 0 1 -6 2 + 10 54 3 0 0 -1 -4 0 + 10 56 3 0 0 0 -5 0 + 10 58 3 0 0 0 -4 0 + 10 62 3 0 0 -1 -5 2 + 11 0 3 0 0 4 -2 0 + 11 2 3 0 0 4 -3 0 + 11 4 3 0 0 5 -3 0 + 11 6 3 0 0 4 -4 0 + 11 8 3 0 0 6 -3 0 + 11 10 3 0 0 3 -4 0 + 11 12 3 0 0 4 -5 0 + 11 14 3 0 0 6 -2 0 + 11 16 3 0 0 7 -4 3 + 11 16 3 0 0 7 -3 3 + 11 18 3 0 0 6 -4 0 + 11 20 3 0 0 5 -4 0 + 11 22 3 0 0 6 -5 2 + 11 24 3 0 0 5 -5 0 + 11 26 3 0 0 5 -6 2 + 11 28 3 0 0 4 -6 0 + 11 30 3 0 0 3 -5 0 + 11 32 3 0 0 3 -6 0 + 11 34 3 0 0 3 -7 3 + 11 34 3 0 0 4 -7 3 + 11 36 3 0 0 1 -1 0 + 11 38 3 0 0 2 -2 0 + 11 40 3 0 0 2 -3 0 + 11 42 3 0 0 3 -3 0 + 11 44 3 0 0 1 0 0 + 11 46 3 0 0 4 -1 0 + 11 48 3 0 0 4 0 0 + 11 50 3 0 0 5 0 0 + 11 52 3 0 0 3 -1 0 + 11 54 3 0 0 2 -1 0 + 11 56 3 0 0 3 -2 0 + 11 58 3 0 0 5 -2 0 + 11 60 3 0 0 6 -1 2 + 11 62 3 0 0 5 -1 0 + 12 0 3 0 0 3 2 0 + 12 0 3 0 0 -3 0 0 + 12 0 3 0 0 -2 0 0 + 12 0 3 0 0 -1 0 0 + 12 0 3 0 0 0 0 0 + 12 0 3 0 0 2 0 0 + 12 0 3 0 0 3 0 0 + 12 2 3 0 0 2 2 0 + 12 4 3 0 0 3 1 0 + 12 6 3 0 0 4 2 0 + 12 8 3 0 0 -4 0 0 + 12 10 3 0 0 5 1 2 + 12 12 3 0 0 4 1 0 + 12 14 3 0 0 -5 0 0 + 12 16 3 0 0 2 1 0 + 12 18 3 0 0 1 1 0 + 12 20 3 0 0 1 2 0 + 12 22 3 0 0 0 2 0 + 12 24 3 0 0 0 1 0 + 12 26 3 0 0 -1 2 0 + 12 28 3 0 0 -1 3 0 + 12 30 3 0 0 -2 4 4 + 12 32 3 0 0 -2 5 0 + 12 34 3 0 0 -1 4 0 + 12 36 3 0 0 -1 5 0 + 12 38 3 0 0 0 4 0 + 12 40 3 0 0 0 3 0 + 12 42 3 0 0 1 3 0 + 12 44 3 0 0 -3 6 0 + 12 46 3 0 0 3 4 3 + 12 46 3 0 0 4 3 3 + 12 48 3 0 0 -2 6 0 + 12 50 3 0 0 -1 6 2 + 12 52 3 0 0 0 5 0 + 12 54 3 0 0 1 4 0 + 12 56 3 0 0 1 5 2 + 12 58 3 0 0 3 3 0 + 12 60 3 0 0 2 3 0 + 12 62 3 0 0 2 4 0 + 13 0 4 0 0 -2 -3 0 + 13 2 4 0 0 -2 -4 0 + 13 4 4 0 0 -3 -3 0 + 13 6 4 0 0 -1 -4 0 + 13 8 4 0 0 0 -5 0 + 13 10 4 0 0 -1 -5 2 + 13 12 4 0 0 1 -6 2 + 13 14 4 0 0 0 -4 0 + 13 16 4 0 0 -1 -3 0 + 13 18 4 0 0 0 -3 0 + 13 20 4 0 0 3 -7 3 + 13 20 4 0 0 4 -7 3 + 13 22 4 0 0 2 -6 0 + 13 24 4 0 0 1 -5 0 + 13 26 4 0 0 1 -4 0 + 13 28 4 0 0 2 -5 0 + 13 30 4 0 0 1 -3 0 + 13 32 4 0 0 0 -2 0 + 13 34 4 0 0 0 -1 0 + 13 36 4 0 0 -1 0 0 + 13 38 4 0 0 -1 -1 0 + 13 40 4 0 0 -4 0 0 + 13 42 4 0 0 -3 0 0 + 13 44 4 0 0 -3 -1 0 + 13 46 4 0 0 -5 0 0 + 13 48 4 0 0 -5 -1 2 + 13 50 4 0 0 -4 -1 0 + 13 52 4 0 0 -2 -1 0 + 13 54 4 0 0 -1 -2 0 + 13 56 4 0 0 -2 -2 0 + 13 58 4 0 0 -3 -2 0 + 13 60 4 0 0 -4 -3 3 + 13 60 4 0 0 -3 -4 3 + 13 62 4 0 0 -4 -2 0 + 14 0 4 0 0 -4 3 0 + 14 2 4 0 0 -4 2 0 + 14 4 4 0 0 -5 3 0 + 14 6 4 0 0 -6 4 0 + 14 8 4 0 0 -5 1 0 + 14 10 4 0 0 -6 3 0 + 14 12 4 0 0 -7 4 3 + 14 12 4 0 0 -7 3 3 + 14 14 4 0 0 -6 2 0 + 14 16 4 0 0 -6 1 2 + 14 18 4 0 0 -5 2 0 + 14 20 4 0 0 -4 1 0 + 14 22 4 0 0 -3 1 0 + 14 24 4 0 0 -3 2 0 + 14 26 4 0 0 -2 1 0 + 14 28 4 0 0 -2 0 0 + 14 30 4 0 0 -3 3 0 + 14 32 4 0 0 -2 3 0 + 14 34 4 0 0 -2 2 0 + 14 36 4 0 0 0 0 0 + 14 38 4 0 0 -1 1 0 + 14 40 4 0 0 -1 2 4 + 14 42 4 0 0 -2 4 0 + 14 44 4 0 0 -3 4 0 + 14 46 4 0 0 -3 5 0 + 14 48 4 0 0 -4 6 0 + 14 50 4 0 0 -4 5 0 + 14 52 4 0 0 -5 6 2 + 14 54 4 0 0 -5 4 0 + 14 56 4 0 0 -5 5 0 + 14 58 4 0 0 -4 4 0 + 14 62 4 0 0 -6 5 2 + 15 0 4 0 0 2 2 0 + 15 2 4 0 0 1 3 0 + 15 4 4 0 0 2 3 0 + 15 6 4 0 0 0 4 0 + 15 8 4 0 0 3 3 0 + 15 10 4 0 0 -1 4 0 + 15 12 4 0 0 -1 5 0 + 15 14 4 0 0 4 2 0 + 15 16 4 0 0 3 4 3 + 15 16 4 0 0 4 3 3 + 15 18 4 0 0 2 4 0 + 15 20 4 0 0 1 4 0 + 15 22 4 0 0 1 5 2 + 15 24 4 0 0 0 5 0 + 15 26 4 0 0 -1 6 2 + 15 28 4 0 0 -2 6 0 + 15 30 4 0 0 -2 5 0 + 15 32 4 0 0 -3 6 0 + 15 34 4 0 0 -4 7 3 + 15 34 4 0 0 -3 7 3 + 15 36 4 0 0 0 1 0 + 15 38 4 0 0 0 2 0 + 15 40 4 0 0 -1 3 0 + 15 42 4 0 0 0 3 0 + 15 44 4 0 0 1 0 0 + 15 46 4 0 0 3 1 0 + 15 48 4 0 0 4 0 0 + 15 50 4 0 0 5 0 0 + 15 52 4 0 0 2 1 0 + 15 54 4 0 0 1 1 0 + 15 56 4 0 0 1 2 0 + 15 58 4 0 0 3 2 0 + 15 60 4 0 0 5 1 2 + 15 62 4 0 0 4 1 0 + 16 0 4 0 0 5 -2 0 + 16 0 4 0 0 -3 0 0 + 16 0 4 0 0 -2 0 0 + 16 0 4 0 0 -1 0 0 + 16 0 4 0 0 0 0 0 + 16 0 4 0 0 2 0 0 + 16 0 4 0 0 3 0 0 + 16 2 4 0 0 4 -2 0 + 16 4 4 0 0 4 -1 0 + 16 6 4 0 0 6 -2 0 + 16 8 4 0 0 -4 0 0 + 16 10 4 0 0 6 -1 2 + 16 12 4 0 0 5 -1 0 + 16 14 4 0 0 -5 0 0 + 16 16 4 0 0 3 -1 0 + 16 18 4 0 0 2 -1 0 + 16 20 4 0 0 3 -2 0 + 16 22 4 0 0 2 -2 0 + 16 24 4 0 0 1 -1 0 + 16 26 4 0 0 1 -2 0 + 16 28 4 0 0 2 -3 0 + 16 30 4 0 0 2 -4 4 + 16 32 4 0 0 3 -5 0 + 16 34 4 0 0 3 -4 0 + 16 36 4 0 0 4 -5 0 + 16 38 4 0 0 4 -4 0 + 16 40 4 0 0 3 -3 0 + 16 42 4 0 0 4 -3 0 + 16 44 4 0 0 3 -6 0 + 16 46 4 0 0 7 -4 3 + 16 46 4 0 0 7 -3 3 + 16 48 4 0 0 4 -6 0 + 16 50 4 0 0 5 -6 2 + 16 52 4 0 0 5 -5 0 + 16 54 4 0 0 5 -4 0 + 16 56 4 0 0 6 -5 2 + 16 58 4 0 0 6 -3 0 + 16 60 4 0 0 5 -3 0 + 16 62 4 0 0 6 -4 0 + 17 0 5 0 0 -5 3 0 + 17 2 5 0 0 -6 4 0 + 17 4 5 0 0 -6 3 0 + 17 6 5 0 0 -5 4 0 + 17 8 5 0 0 -5 5 0 + 17 10 5 0 0 -6 5 2 + 17 12 5 0 0 -5 6 2 + 17 14 5 0 0 -4 4 0 + 17 16 5 0 0 -4 3 0 + 17 18 5 0 0 -3 3 0 + 17 20 5 0 0 -4 7 3 + 17 20 5 0 0 -3 7 3 + 17 22 5 0 0 -4 6 0 + 17 24 5 0 0 -4 5 0 + 17 26 5 0 0 -3 4 0 + 17 28 5 0 0 -3 5 0 + 17 30 5 0 0 -2 3 0 + 17 32 5 0 0 -2 2 0 + 17 34 5 0 0 -1 1 0 + 17 36 5 0 0 -1 0 0 + 17 38 5 0 0 -2 1 0 + 17 40 5 0 0 -4 0 0 + 17 42 5 0 0 -3 0 0 + 17 44 5 0 0 -4 1 0 + 17 46 5 0 0 -5 0 0 + 17 48 5 0 0 -6 1 2 + 17 50 5 0 0 -5 1 0 + 17 52 5 0 0 -3 1 0 + 17 54 5 0 0 -3 2 0 + 17 56 5 0 0 -4 2 0 + 17 58 5 0 0 -5 2 0 + 17 60 5 0 0 -7 3 3 + 17 60 5 0 0 -7 4 3 + 17 62 5 0 0 -6 2 0 + 18 0 5 0 0 -1 -3 0 + 18 2 5 0 0 -2 -2 0 + 18 4 5 0 0 -2 -3 0 + 18 6 5 0 0 -2 -4 0 + 18 8 5 0 0 -4 -1 0 + 18 10 5 0 0 -3 -3 0 + 18 12 5 0 0 -3 -4 3 + 18 12 5 0 0 -4 -3 3 + 18 14 5 0 0 -4 -2 0 + 18 16 5 0 0 -5 -1 2 + 18 18 5 0 0 -3 -2 0 + 18 20 5 0 0 -3 -1 0 + 18 22 5 0 0 -2 -1 0 + 18 24 5 0 0 -1 -2 0 + 18 26 5 0 0 -1 -1 0 + 18 28 5 0 0 -2 0 0 + 18 30 5 0 0 0 -3 0 + 18 32 5 0 0 1 -3 0 + 18 34 5 0 0 0 -2 0 + 18 36 5 0 0 0 0 0 + 18 38 5 0 0 0 -1 0 + 18 40 5 0 0 1 -2 4 + 18 42 5 0 0 2 -4 0 + 18 44 5 0 0 1 -4 0 + 18 46 5 0 0 2 -5 0 + 18 48 5 0 0 2 -6 0 + 18 50 5 0 0 1 -5 0 + 18 52 5 0 0 1 -6 2 + 18 54 5 0 0 -1 -4 0 + 18 56 5 0 0 0 -5 0 + 18 58 5 0 0 0 -4 0 + 18 62 5 0 0 -1 -5 2 + 19 0 5 0 0 4 -2 0 + 19 2 5 0 0 4 -3 0 + 19 4 5 0 0 5 -3 0 + 19 6 5 0 0 4 -4 0 + 19 8 5 0 0 6 -3 0 + 19 10 5 0 0 3 -4 0 + 19 12 5 0 0 4 -5 0 + 19 14 5 0 0 6 -2 0 + 19 16 5 0 0 7 -4 3 + 19 16 5 0 0 7 -3 3 + 19 18 5 0 0 6 -4 0 + 19 20 5 0 0 5 -4 0 + 19 22 5 0 0 6 -5 2 + 19 24 5 0 0 5 -5 0 + 19 26 5 0 0 5 -6 2 + 19 28 5 0 0 4 -6 0 + 19 30 5 0 0 3 -5 0 + 19 32 5 0 0 3 -6 0 + 19 34 5 0 0 3 -7 3 + 19 34 5 0 0 4 -7 3 + 19 36 5 0 0 1 -1 0 + 19 38 5 0 0 2 -2 0 + 19 40 5 0 0 2 -3 0 + 19 42 5 0 0 3 -3 0 + 19 44 5 0 0 1 0 0 + 19 46 5 0 0 4 -1 0 + 19 48 5 0 0 4 0 0 + 19 50 5 0 0 5 0 0 + 19 52 5 0 0 3 -1 0 + 19 54 5 0 0 2 -1 0 + 19 56 5 0 0 3 -2 0 + 19 58 5 0 0 5 -2 0 + 19 60 5 0 0 6 -1 2 + 19 62 5 0 0 5 -1 0 + 20 0 5 0 0 3 2 0 + 20 0 5 0 0 -3 0 0 + 20 0 5 0 0 -2 0 0 + 20 0 5 0 0 -1 0 0 + 20 0 5 0 0 0 0 0 + 20 0 5 0 0 2 0 0 + 20 0 5 0 0 3 0 0 + 20 2 5 0 0 2 2 0 + 20 4 5 0 0 3 1 0 + 20 6 5 0 0 4 2 0 + 20 8 5 0 0 -4 0 0 + 20 10 5 0 0 5 1 2 + 20 12 5 0 0 4 1 0 + 20 14 5 0 0 -5 0 0 + 20 16 5 0 0 2 1 0 + 20 18 5 0 0 1 1 0 + 20 20 5 0 0 1 2 0 + 20 22 5 0 0 0 2 0 + 20 24 5 0 0 0 1 0 + 20 26 5 0 0 -1 2 0 + 20 28 5 0 0 -1 3 0 + 20 30 5 0 0 -2 4 4 + 20 32 5 0 0 -2 5 0 + 20 34 5 0 0 -1 4 0 + 20 36 5 0 0 -1 5 0 + 20 38 5 0 0 0 4 0 + 20 40 5 0 0 0 3 0 + 20 42 5 0 0 1 3 0 + 20 44 5 0 0 -3 6 0 + 20 46 5 0 0 3 4 3 + 20 46 5 0 0 4 3 3 + 20 48 5 0 0 -2 6 0 + 20 50 5 0 0 -1 6 2 + 20 52 5 0 0 0 5 0 + 20 54 5 0 0 1 4 0 + 20 56 5 0 0 1 5 2 + 20 58 5 0 0 3 3 0 + 20 60 5 0 0 2 3 0 + 20 62 5 0 0 2 4 0 + 21 0 6 0 0 -2 -3 0 + 21 2 6 0 0 -2 -4 0 + 21 4 6 0 0 -3 -3 0 + 21 6 6 0 0 -1 -4 0 + 21 8 6 0 0 0 -5 0 + 21 10 6 0 0 -1 -5 2 + 21 12 6 0 0 1 -6 2 + 21 14 6 0 0 0 -4 0 + 21 16 6 0 0 -1 -3 0 + 21 18 6 0 0 0 -3 0 + 21 20 6 0 0 3 -7 3 + 21 20 6 0 0 4 -7 3 + 21 22 6 0 0 2 -6 0 + 21 24 6 0 0 1 -5 0 + 21 26 6 0 0 1 -4 0 + 21 28 6 0 0 2 -5 0 + 21 30 6 0 0 1 -3 0 + 21 32 6 0 0 0 -2 0 + 21 34 6 0 0 0 -1 0 + 21 36 6 0 0 -1 0 0 + 21 38 6 0 0 -1 -1 0 + 21 40 6 0 0 -4 0 0 + 21 42 6 0 0 -3 0 0 + 21 44 6 0 0 -3 -1 0 + 21 46 6 0 0 -5 0 0 + 21 48 6 0 0 -5 -1 2 + 21 50 6 0 0 -4 -1 0 + 21 52 6 0 0 -2 -1 0 + 21 54 6 0 0 -1 -2 0 + 21 56 6 0 0 -2 -2 0 + 21 58 6 0 0 -3 -2 0 + 21 60 6 0 0 -4 -3 3 + 21 60 6 0 0 -3 -4 3 + 21 62 6 0 0 -4 -2 0 + 22 0 6 0 0 -4 3 0 + 22 2 6 0 0 -4 2 0 + 22 4 6 0 0 -5 3 0 + 22 6 6 0 0 -6 4 0 + 22 8 6 0 0 -5 1 0 + 22 10 6 0 0 -6 3 0 + 22 12 6 0 0 -7 4 3 + 22 12 6 0 0 -7 3 3 + 22 14 6 0 0 -6 2 0 + 22 16 6 0 0 -6 1 2 + 22 18 6 0 0 -5 2 0 + 22 20 6 0 0 -4 1 0 + 22 22 6 0 0 -3 1 0 + 22 24 6 0 0 -3 2 0 + 22 26 6 0 0 -2 1 0 + 22 28 6 0 0 -2 0 0 + 22 30 6 0 0 -3 3 0 + 22 32 6 0 0 -2 3 0 + 22 34 6 0 0 -2 2 0 + 22 36 6 0 0 0 0 0 + 22 38 6 0 0 -1 1 0 + 22 40 6 0 0 -1 2 4 + 22 42 6 0 0 -2 4 0 + 22 44 6 0 0 -3 4 0 + 22 46 6 0 0 -3 5 0 + 22 48 6 0 0 -4 6 0 + 22 50 6 0 0 -4 5 0 + 22 52 6 0 0 -5 6 2 + 22 54 6 0 0 -5 4 0 + 22 56 6 0 0 -5 5 0 + 22 58 6 0 0 -4 4 0 + 22 62 6 0 0 -6 5 2 + 23 0 6 0 0 2 2 0 + 23 2 6 0 0 1 3 0 + 23 4 6 0 0 2 3 0 + 23 6 6 0 0 0 4 0 + 23 8 6 0 0 3 3 0 + 23 10 6 0 0 -1 4 0 + 23 12 6 0 0 -1 5 0 + 23 14 6 0 0 4 2 0 + 23 16 6 0 0 3 4 3 + 23 16 6 0 0 4 3 3 + 23 18 6 0 0 2 4 0 + 23 20 6 0 0 1 4 0 + 23 22 6 0 0 1 5 2 + 23 24 6 0 0 0 5 0 + 23 26 6 0 0 -1 6 2 + 23 28 6 0 0 -2 6 0 + 23 30 6 0 0 -2 5 0 + 23 32 6 0 0 -3 6 0 + 23 34 6 0 0 -4 7 3 + 23 34 6 0 0 -3 7 3 + 23 36 6 0 0 0 1 0 + 23 38 6 0 0 0 2 0 + 23 40 6 0 0 -1 3 0 + 23 42 6 0 0 0 3 0 + 23 44 6 0 0 1 0 0 + 23 46 6 0 0 3 1 0 + 23 48 6 0 0 4 0 0 + 23 50 6 0 0 5 0 0 + 23 52 6 0 0 2 1 0 + 23 54 6 0 0 1 1 0 + 23 56 6 0 0 1 2 0 + 23 58 6 0 0 3 2 0 + 23 60 6 0 0 5 1 2 + 23 62 6 0 0 4 1 0 + 24 0 6 0 0 5 -2 0 + 24 0 6 0 0 -3 0 0 + 24 0 6 0 0 -2 0 0 + 24 0 6 0 0 -1 0 0 + 24 0 6 0 0 0 0 0 + 24 0 6 0 0 2 0 0 + 24 0 6 0 0 3 0 0 + 24 2 6 0 0 4 -2 0 + 24 4 6 0 0 4 -1 0 + 24 6 6 0 0 6 -2 0 + 24 8 6 0 0 -4 0 0 + 24 10 6 0 0 6 -1 2 + 24 12 6 0 0 5 -1 0 + 24 14 6 0 0 -5 0 0 + 24 16 6 0 0 3 -1 0 + 24 18 6 0 0 2 -1 0 + 24 20 6 0 0 3 -2 0 + 24 22 6 0 0 2 -2 0 + 24 24 6 0 0 1 -1 0 + 24 26 6 0 0 1 -2 0 + 24 28 6 0 0 2 -3 0 + 24 30 6 0 0 2 -4 4 + 24 32 6 0 0 3 -5 0 + 24 34 6 0 0 3 -4 0 + 24 36 6 0 0 4 -5 0 + 24 38 6 0 0 4 -4 0 + 24 40 6 0 0 3 -3 0 + 24 42 6 0 0 4 -3 0 + 24 44 6 0 0 3 -6 0 + 24 46 6 0 0 7 -4 3 + 24 46 6 0 0 7 -3 3 + 24 48 6 0 0 4 -6 0 + 24 50 6 0 0 5 -6 2 + 24 52 6 0 0 5 -5 0 + 24 54 6 0 0 5 -4 0 + 24 56 6 0 0 6 -5 2 + 24 58 6 0 0 6 -3 0 + 24 60 6 0 0 5 -3 0 + 24 62 6 0 0 6 -4 0 + 25 0 7 0 0 -5 3 0 + 25 2 7 0 0 -6 4 0 + 25 4 7 0 0 -6 3 0 + 25 6 7 0 0 -5 4 0 + 25 8 7 0 0 -5 5 0 + 25 10 7 0 0 -6 5 2 + 25 12 7 0 0 -5 6 2 + 25 14 7 0 0 -4 4 0 + 25 16 7 0 0 -4 3 0 + 25 18 7 0 0 -3 3 0 + 25 20 7 0 0 -4 7 3 + 25 20 7 0 0 -3 7 3 + 25 22 7 0 0 -4 6 0 + 25 24 7 0 0 -4 5 0 + 25 26 7 0 0 -3 4 0 + 25 28 7 0 0 -3 5 0 + 25 30 7 0 0 -2 3 0 + 25 32 7 0 0 -2 2 0 + 25 34 7 0 0 -1 1 0 + 25 36 7 0 0 -1 0 0 + 25 38 7 0 0 -2 1 0 + 25 40 7 0 0 -4 0 0 + 25 42 7 0 0 -3 0 0 + 25 44 7 0 0 -4 1 0 + 25 46 7 0 0 -5 0 0 + 25 48 7 0 0 -6 1 2 + 25 50 7 0 0 -5 1 0 + 25 52 7 0 0 -3 1 0 + 25 54 7 0 0 -3 2 0 + 25 56 7 0 0 -4 2 0 + 25 58 7 0 0 -5 2 0 + 25 60 7 0 0 -7 3 3 + 25 60 7 0 0 -7 4 3 + 25 62 7 0 0 -6 2 0 + 26 0 7 0 0 -1 -3 0 + 26 2 7 0 0 -2 -2 0 + 26 4 7 0 0 -2 -3 0 + 26 6 7 0 0 -2 -4 0 + 26 8 7 0 0 -4 -1 0 + 26 10 7 0 0 -3 -3 0 + 26 12 7 0 0 -3 -4 3 + 26 12 7 0 0 -4 -3 3 + 26 14 7 0 0 -4 -2 0 + 26 16 7 0 0 -5 -1 2 + 26 18 7 0 0 -3 -2 0 + 26 20 7 0 0 -3 -1 0 + 26 22 7 0 0 -2 -1 0 + 26 24 7 0 0 -1 -2 0 + 26 26 7 0 0 -1 -1 0 + 26 28 7 0 0 -2 0 0 + 26 30 7 0 0 0 -3 0 + 26 32 7 0 0 1 -3 0 + 26 34 7 0 0 0 -2 0 + 26 36 7 0 0 0 0 0 + 26 38 7 0 0 0 -1 0 + 26 40 7 0 0 1 -2 4 + 26 42 7 0 0 2 -4 0 + 26 44 7 0 0 1 -4 0 + 26 46 7 0 0 2 -5 0 + 26 48 7 0 0 2 -6 0 + 26 50 7 0 0 1 -5 0 + 26 52 7 0 0 1 -6 2 + 26 54 7 0 0 -1 -4 0 + 26 56 7 0 0 0 -5 0 + 26 58 7 0 0 0 -4 0 + 26 62 7 0 0 -1 -5 2 + 27 0 7 0 0 4 -2 0 + 27 2 7 0 0 4 -3 0 + 27 4 7 0 0 5 -3 0 + 27 6 7 0 0 4 -4 0 + 27 8 7 0 0 6 -3 0 + 27 10 7 0 0 3 -4 0 + 27 12 7 0 0 4 -5 0 + 27 14 7 0 0 6 -2 0 + 27 16 7 0 0 7 -4 3 + 27 16 7 0 0 7 -3 3 + 27 18 7 0 0 6 -4 0 + 27 20 7 0 0 5 -4 0 + 27 22 7 0 0 6 -5 2 + 27 24 7 0 0 5 -5 0 + 27 26 7 0 0 5 -6 2 + 27 28 7 0 0 4 -6 0 + 27 30 7 0 0 3 -5 0 + 27 32 7 0 0 3 -6 0 + 27 34 7 0 0 3 -7 3 + 27 34 7 0 0 4 -7 3 + 27 36 7 0 0 1 -1 0 + 27 38 7 0 0 2 -2 0 + 27 40 7 0 0 2 -3 0 + 27 42 7 0 0 3 -3 0 + 27 44 7 0 0 1 0 0 + 27 46 7 0 0 4 -1 0 + 27 48 7 0 0 4 0 0 + 27 50 7 0 0 5 0 0 + 27 52 7 0 0 3 -1 0 + 27 54 7 0 0 2 -1 0 + 27 56 7 0 0 3 -2 0 + 27 58 7 0 0 5 -2 0 + 27 60 7 0 0 6 -1 2 + 27 62 7 0 0 5 -1 0 + 28 0 7 0 0 3 2 0 + 28 0 7 0 0 -3 0 0 + 28 0 7 0 0 -2 0 0 + 28 0 7 0 0 -1 0 0 + 28 0 7 0 0 0 0 0 + 28 0 7 0 0 2 0 0 + 28 0 7 0 0 3 0 0 + 28 2 7 0 0 2 2 0 + 28 4 7 0 0 3 1 0 + 28 6 7 0 0 4 2 0 + 28 8 7 0 0 -4 0 0 + 28 10 7 0 0 5 1 2 + 28 12 7 0 0 4 1 0 + 28 14 7 0 0 -5 0 0 + 28 16 7 0 0 2 1 0 + 28 18 7 0 0 1 1 0 + 28 20 7 0 0 1 2 0 + 28 22 7 0 0 0 2 0 + 28 24 7 0 0 0 1 0 + 28 26 7 0 0 -1 2 0 + 28 28 7 0 0 -1 3 0 + 28 30 7 0 0 -2 4 4 + 28 32 7 0 0 -2 5 0 + 28 34 7 0 0 -1 4 0 + 28 36 7 0 0 -1 5 0 + 28 38 7 0 0 0 4 0 + 28 40 7 0 0 0 3 0 + 28 42 7 0 0 1 3 0 + 28 44 7 0 0 -3 6 0 + 28 46 7 0 0 3 4 3 + 28 46 7 0 0 4 3 3 + 28 48 7 0 0 -2 6 0 + 28 50 7 0 0 -1 6 2 + 28 52 7 0 0 0 5 0 + 28 54 7 0 0 1 4 0 + 28 56 7 0 0 1 5 2 + 28 58 7 0 0 3 3 0 + 28 60 7 0 0 2 3 0 + 28 62 7 0 0 2 4 0 + 29 0 8 0 0 -2 -3 0 + 29 2 8 0 0 -2 -4 0 + 29 4 8 0 0 -3 -3 0 + 29 6 8 0 0 -1 -4 0 + 29 8 8 0 0 0 -5 0 + 29 10 8 0 0 -1 -5 2 + 29 12 8 0 0 1 -6 2 + 29 14 8 0 0 0 -4 0 + 29 16 8 0 0 -1 -3 0 + 29 18 8 0 0 0 -3 0 + 29 20 8 0 0 3 -7 3 + 29 20 8 0 0 4 -7 3 + 29 22 8 0 0 2 -6 0 + 29 24 8 0 0 1 -5 0 + 29 26 8 0 0 1 -4 0 + 29 28 8 0 0 2 -5 0 + 29 30 8 0 0 1 -3 0 + 29 32 8 0 0 0 -2 0 + 29 34 8 0 0 0 -1 0 + 29 36 8 0 0 -1 0 0 + 29 38 8 0 0 -1 -1 0 + 29 40 8 0 0 -4 0 0 + 29 42 8 0 0 -3 0 0 + 29 44 8 0 0 -3 -1 0 + 29 46 8 0 0 -5 0 0 + 29 48 8 0 0 -5 -1 2 + 29 50 8 0 0 -4 -1 0 + 29 52 8 0 0 -2 -1 0 + 29 54 8 0 0 -1 -2 0 + 29 56 8 0 0 -2 -2 0 + 29 58 8 0 0 -3 -2 0 + 29 60 8 0 0 -4 -3 3 + 29 60 8 0 0 -3 -4 3 + 29 62 8 0 0 -4 -2 0 + 30 0 8 0 0 -4 3 0 + 30 2 8 0 0 -4 2 0 + 30 4 8 0 0 -5 3 0 + 30 6 8 0 0 -6 4 0 + 30 8 8 0 0 -5 1 0 + 30 10 8 0 0 -6 3 0 + 30 12 8 0 0 -7 4 3 + 30 12 8 0 0 -7 3 3 + 30 14 8 0 0 -6 2 0 + 30 16 8 0 0 -6 1 2 + 30 18 8 0 0 -5 2 0 + 30 20 8 0 0 -4 1 0 + 30 22 8 0 0 -3 1 0 + 30 24 8 0 0 -3 2 0 + 30 26 8 0 0 -2 1 0 + 30 28 8 0 0 -2 0 0 + 30 30 8 0 0 -3 3 0 + 30 32 8 0 0 -2 3 0 + 30 34 8 0 0 -2 2 0 + 30 36 8 0 0 0 0 0 + 30 38 8 0 0 -1 1 0 + 30 40 8 0 0 -1 2 4 + 30 42 8 0 0 -2 4 0 + 30 44 8 0 0 -3 4 0 + 30 46 8 0 0 -3 5 0 + 30 48 8 0 0 -4 6 0 + 30 50 8 0 0 -4 5 0 + 30 52 8 0 0 -5 6 2 + 30 54 8 0 0 -5 4 0 + 30 56 8 0 0 -5 5 0 + 30 58 8 0 0 -4 4 0 + 30 62 8 0 0 -6 5 2 + 31 0 8 0 0 2 2 0 + 31 2 8 0 0 1 3 0 + 31 4 8 0 0 2 3 0 + 31 6 8 0 0 0 4 0 + 31 8 8 0 0 3 3 0 + 31 10 8 0 0 -1 4 0 + 31 12 8 0 0 -1 5 0 + 31 14 8 0 0 4 2 0 + 31 16 8 0 0 3 4 3 + 31 16 8 0 0 4 3 3 + 31 18 8 0 0 2 4 0 + 31 20 8 0 0 1 4 0 + 31 22 8 0 0 1 5 2 + 31 24 8 0 0 0 5 0 + 31 26 8 0 0 -1 6 2 + 31 28 8 0 0 -2 6 0 + 31 30 8 0 0 -2 5 0 + 31 32 8 0 0 -3 6 0 + 31 34 8 0 0 -4 7 3 + 31 34 8 0 0 -3 7 3 + 31 36 8 0 0 0 1 0 + 31 38 8 0 0 0 2 0 + 31 40 8 0 0 -1 3 0 + 31 42 8 0 0 0 3 0 + 31 44 8 0 0 1 0 0 + 31 46 8 0 0 3 1 0 + 31 48 8 0 0 4 0 0 + 31 50 8 0 0 5 0 0 + 31 52 8 0 0 2 1 0 + 31 54 8 0 0 1 1 0 + 31 56 8 0 0 1 2 0 + 31 58 8 0 0 3 2 0 + 31 60 8 0 0 5 1 2 + 31 62 8 0 0 4 1 0 + 32 0 8 0 0 5 -2 0 + 32 0 8 0 0 -3 0 0 + 32 0 8 0 0 -2 0 0 + 32 0 8 0 0 -1 0 0 + 32 0 8 0 0 0 0 0 + 32 0 8 0 0 2 0 0 + 32 0 8 0 0 3 0 0 + 32 2 8 0 0 4 -2 0 + 32 4 8 0 0 4 -1 0 + 32 6 8 0 0 6 -2 0 + 32 8 8 0 0 -4 0 0 + 32 10 8 0 0 6 -1 2 + 32 12 8 0 0 5 -1 0 + 32 14 8 0 0 -5 0 0 + 32 16 8 0 0 3 -1 0 + 32 18 8 0 0 2 -1 0 + 32 20 8 0 0 3 -2 0 + 32 22 8 0 0 2 -2 0 + 32 24 8 0 0 1 -1 0 + 32 26 8 0 0 1 -2 0 + 32 28 8 0 0 2 -3 0 + 32 30 8 0 0 2 -4 4 + 32 32 8 0 0 3 -5 0 + 32 34 8 0 0 3 -4 0 + 32 36 8 0 0 4 -5 0 + 32 38 8 0 0 4 -4 0 + 32 40 8 0 0 3 -3 0 + 32 42 8 0 0 4 -3 0 + 32 44 8 0 0 3 -6 0 + 32 46 8 0 0 7 -4 3 + 32 46 8 0 0 7 -3 3 + 32 48 8 0 0 4 -6 0 + 32 50 8 0 0 5 -6 2 + 32 52 8 0 0 5 -5 0 + 32 54 8 0 0 5 -4 0 + 32 56 8 0 0 6 -5 2 + 32 58 8 0 0 6 -3 0 + 32 60 8 0 0 5 -3 0 + 32 62 8 0 0 6 -4 0 + 33 0 9 0 0 -5 3 0 + 33 2 9 0 0 -6 4 0 + 33 4 9 0 0 -6 3 0 + 33 6 9 0 0 -5 4 0 + 33 8 9 0 0 -5 5 0 + 33 10 9 0 0 -6 5 2 + 33 12 9 0 0 -5 6 2 + 33 14 9 0 0 -4 4 0 + 33 16 9 0 0 -4 3 0 + 33 18 9 0 0 -3 3 0 + 33 20 9 0 0 -4 7 3 + 33 20 9 0 0 -3 7 3 + 33 22 9 0 0 -4 6 0 + 33 24 9 0 0 -4 5 0 + 33 26 9 0 0 -3 4 0 + 33 28 9 0 0 -3 5 0 + 33 30 9 0 0 -2 3 0 + 33 32 9 0 0 -2 2 0 + 33 34 9 0 0 -1 1 0 + 33 36 9 0 0 -1 0 0 + 33 38 9 0 0 -2 1 0 + 33 40 9 0 0 -4 0 0 + 33 42 9 0 0 -3 0 0 + 33 44 9 0 0 -4 1 0 + 33 46 9 0 0 -5 0 0 + 33 48 9 0 0 -6 1 2 + 33 50 9 0 0 -5 1 0 + 33 52 9 0 0 -3 1 0 + 33 54 9 0 0 -3 2 0 + 33 56 9 0 0 -4 2 0 + 33 58 9 0 0 -5 2 0 + 33 60 9 0 0 -7 3 3 + 33 60 9 0 0 -7 4 3 + 33 62 9 0 0 -6 2 0 + 34 0 9 0 0 -1 -3 0 + 34 2 9 0 0 -2 -2 0 + 34 4 9 0 0 -2 -3 0 + 34 6 9 0 0 -2 -4 0 + 34 8 9 0 0 -4 -1 0 + 34 10 9 0 0 -3 -3 0 + 34 12 9 0 0 -3 -4 3 + 34 12 9 0 0 -4 -3 3 + 34 14 9 0 0 -4 -2 0 + 34 16 9 0 0 -5 -1 2 + 34 18 9 0 0 -3 -2 0 + 34 20 9 0 0 -3 -1 0 + 34 22 9 0 0 -2 -1 0 + 34 24 9 0 0 -1 -2 0 + 34 26 9 0 0 -1 -1 0 + 34 28 9 0 0 -2 0 0 + 34 30 9 0 0 0 -3 0 + 34 32 9 0 0 1 -3 0 + 34 34 9 0 0 0 -2 0 + 34 36 9 0 0 0 0 0 + 34 38 9 0 0 0 -1 0 + 34 40 9 0 0 1 -2 4 + 34 42 9 0 0 2 -4 0 + 34 44 9 0 0 1 -4 0 + 34 46 9 0 0 2 -5 0 + 34 48 9 0 0 2 -6 0 + 34 50 9 0 0 1 -5 0 + 34 52 9 0 0 1 -6 2 + 34 54 9 0 0 -1 -4 0 + 34 56 9 0 0 0 -5 0 + 34 58 9 0 0 0 -4 0 + 34 62 9 0 0 -1 -5 2 + 35 0 9 0 0 4 -2 0 + 35 2 9 0 0 4 -3 0 + 35 4 9 0 0 5 -3 0 + 35 6 9 0 0 4 -4 0 + 35 8 9 0 0 6 -3 0 + 35 10 9 0 0 3 -4 0 + 35 12 9 0 0 4 -5 0 + 35 14 9 0 0 6 -2 0 + 35 16 9 0 0 7 -4 3 + 35 16 9 0 0 7 -3 3 + 35 18 9 0 0 6 -4 0 + 35 20 9 0 0 5 -4 0 + 35 22 9 0 0 6 -5 2 + 35 24 9 0 0 5 -5 0 + 35 26 9 0 0 5 -6 2 + 35 28 9 0 0 4 -6 0 + 35 30 9 0 0 3 -5 0 + 35 32 9 0 0 3 -6 0 + 35 34 9 0 0 3 -7 3 + 35 34 9 0 0 4 -7 3 + 35 36 9 0 0 1 -1 0 + 35 38 9 0 0 2 -2 0 + 35 40 9 0 0 2 -3 0 + 35 42 9 0 0 3 -3 0 + 35 44 9 0 0 1 0 0 + 35 46 9 0 0 4 -1 0 + 35 48 9 0 0 4 0 0 + 35 50 9 0 0 5 0 0 + 35 52 9 0 0 3 -1 0 + 35 54 9 0 0 2 -1 0 + 35 56 9 0 0 3 -2 0 + 35 58 9 0 0 5 -2 0 + 35 60 9 0 0 6 -1 2 + 35 62 9 0 0 5 -1 0 + 36 0 9 0 0 3 2 0 + 36 0 9 0 0 -3 0 0 + 36 0 9 0 0 -2 0 0 + 36 0 9 0 0 -1 0 0 + 36 0 9 0 0 0 0 0 + 36 0 9 0 0 2 0 0 + 36 0 9 0 0 3 0 0 + 36 2 9 0 0 2 2 0 + 36 4 9 0 0 3 1 0 + 36 6 9 0 0 4 2 0 + 36 8 9 0 0 -4 0 0 + 36 10 9 0 0 5 1 2 + 36 12 9 0 0 4 1 0 + 36 14 9 0 0 -5 0 0 + 36 16 9 0 0 2 1 0 + 36 18 9 0 0 1 1 0 + 36 20 9 0 0 1 2 0 + 36 22 9 0 0 0 2 0 + 36 24 9 0 0 0 1 0 + 36 26 9 0 0 -1 2 0 + 36 28 9 0 0 -1 3 0 + 36 30 9 0 0 -2 4 4 + 36 32 9 0 0 -2 5 0 + 36 34 9 0 0 -1 4 0 + 36 36 9 0 0 -1 5 0 + 36 38 9 0 0 0 4 0 + 36 40 9 0 0 0 3 0 + 36 42 9 0 0 1 3 0 + 36 44 9 0 0 -3 6 0 + 36 46 9 0 0 3 4 3 + 36 46 9 0 0 4 3 3 + 36 48 9 0 0 -2 6 0 + 36 50 9 0 0 -1 6 2 + 36 52 9 0 0 0 5 0 + 36 54 9 0 0 1 4 0 + 36 56 9 0 0 1 5 2 + 36 58 9 0 0 3 3 0 + 36 60 9 0 0 2 3 0 + 36 62 9 0 0 2 4 0 + 37 0 10 0 0 -2 -3 0 + 37 2 10 0 0 -2 -4 0 + 37 4 10 0 0 -3 -3 0 + 37 6 10 0 0 -1 -4 0 + 37 8 10 0 0 0 -5 0 + 37 10 10 0 0 -1 -5 2 + 37 12 10 0 0 1 -6 2 + 37 14 10 0 0 0 -4 0 + 37 16 10 0 0 -1 -3 0 + 37 18 10 0 0 0 -3 0 + 37 20 10 0 0 3 -7 3 + 37 20 10 0 0 4 -7 3 + 37 22 10 0 0 2 -6 0 + 37 24 10 0 0 1 -5 0 + 37 26 10 0 0 1 -4 0 + 37 28 10 0 0 2 -5 0 + 37 30 10 0 0 1 -3 0 + 37 32 10 0 0 0 -2 0 + 37 34 10 0 0 0 -1 0 + 37 36 10 0 0 -1 0 0 + 37 38 10 0 0 -1 -1 0 + 37 40 10 0 0 -4 0 0 + 37 42 10 0 0 -3 0 0 + 37 44 10 0 0 -3 -1 0 + 37 46 10 0 0 -5 0 0 + 37 48 10 0 0 -5 -1 2 + 37 50 10 0 0 -4 -1 0 + 37 52 10 0 0 -2 -1 0 + 37 54 10 0 0 -1 -2 0 + 37 56 10 0 0 -2 -2 0 + 37 58 10 0 0 -3 -2 0 + 37 60 10 0 0 -4 -3 3 + 37 60 10 0 0 -3 -4 3 + 37 62 10 0 0 -4 -2 0 + 38 0 10 0 0 -4 3 0 + 38 2 10 0 0 -4 2 0 + 38 4 10 0 0 -5 3 0 + 38 6 10 0 0 -6 4 0 + 38 8 10 0 0 -5 1 0 + 38 10 10 0 0 -6 3 0 + 38 12 10 0 0 -7 4 3 + 38 12 10 0 0 -7 3 3 + 38 14 10 0 0 -6 2 0 + 38 16 10 0 0 -6 1 2 + 38 18 10 0 0 -5 2 0 + 38 20 10 0 0 -4 1 0 + 38 22 10 0 0 -3 1 0 + 38 24 10 0 0 -3 2 0 + 38 26 10 0 0 -2 1 0 + 38 28 10 0 0 -2 0 0 + 38 30 10 0 0 -3 3 0 + 38 32 10 0 0 -2 3 0 + 38 34 10 0 0 -2 2 0 + 38 36 10 0 0 0 0 0 + 38 38 10 0 0 -1 1 0 + 38 40 10 0 0 -1 2 4 + 38 42 10 0 0 -2 4 0 + 38 44 10 0 0 -3 4 0 + 38 46 10 0 0 -3 5 0 + 38 48 10 0 0 -4 6 0 + 38 50 10 0 0 -4 5 0 + 38 52 10 0 0 -5 6 2 + 38 54 10 0 0 -5 4 0 + 38 56 10 0 0 -5 5 0 + 38 58 10 0 0 -4 4 0 + 38 62 10 0 0 -6 5 2 + 39 0 10 0 0 2 2 0 + 39 2 10 0 0 1 3 0 + 39 4 10 0 0 2 3 0 + 39 6 10 0 0 0 4 0 + 39 8 10 0 0 3 3 0 + 39 10 10 0 0 -1 4 0 + 39 12 10 0 0 -1 5 0 + 39 14 10 0 0 4 2 0 + 39 16 10 0 0 3 4 3 + 39 16 10 0 0 4 3 3 + 39 18 10 0 0 2 4 0 + 39 20 10 0 0 1 4 0 + 39 22 10 0 0 1 5 2 + 39 24 10 0 0 0 5 0 + 39 26 10 0 0 -1 6 2 + 39 28 10 0 0 -2 6 0 + 39 30 10 0 0 -2 5 0 + 39 32 10 0 0 -3 6 0 + 39 34 10 0 0 -4 7 3 + 39 34 10 0 0 -3 7 3 + 39 36 10 0 0 0 1 0 + 39 38 10 0 0 0 2 0 + 39 40 10 0 0 -1 3 0 + 39 42 10 0 0 0 3 0 + 39 44 10 0 0 1 0 0 + 39 46 10 0 0 3 1 0 + 39 48 10 0 0 4 0 0 + 39 50 10 0 0 5 0 0 + 39 52 10 0 0 2 1 0 + 39 54 10 0 0 1 1 0 + 39 56 10 0 0 1 2 0 + 39 58 10 0 0 3 2 0 + 39 60 10 0 0 5 1 2 + 39 62 10 0 0 4 1 0 + 40 0 10 0 0 5 -2 0 + 40 0 10 0 0 -3 0 0 + 40 0 10 0 0 -2 0 0 + 40 0 10 0 0 -1 0 0 + 40 0 10 0 0 0 0 0 + 40 0 10 0 0 2 0 0 + 40 0 10 0 0 3 0 0 + 40 2 10 0 0 4 -2 0 + 40 4 10 0 0 4 -1 0 + 40 6 10 0 0 6 -2 0 + 40 8 10 0 0 -4 0 0 + 40 10 10 0 0 6 -1 2 + 40 12 10 0 0 5 -1 0 + 40 14 10 0 0 -5 0 0 + 40 16 10 0 0 3 -1 0 + 40 18 10 0 0 2 -1 0 + 40 20 10 0 0 3 -2 0 + 40 22 10 0 0 2 -2 0 + 40 24 10 0 0 1 -1 0 + 40 26 10 0 0 1 -2 0 + 40 28 10 0 0 2 -3 0 + 40 30 10 0 0 2 -4 4 + 40 32 10 0 0 3 -5 0 + 40 34 10 0 0 3 -4 0 + 40 36 10 0 0 4 -5 0 + 40 38 10 0 0 4 -4 0 + 40 40 10 0 0 3 -3 0 + 40 42 10 0 0 4 -3 0 + 40 44 10 0 0 3 -6 0 + 40 46 10 0 0 7 -4 3 + 40 46 10 0 0 7 -3 3 + 40 48 10 0 0 4 -6 0 + 40 50 10 0 0 5 -6 2 + 40 52 10 0 0 5 -5 0 + 40 54 10 0 0 5 -4 0 + 40 56 10 0 0 6 -5 2 + 40 58 10 0 0 6 -3 0 + 40 60 10 0 0 5 -3 0 + 40 62 10 0 0 6 -4 0 + 41 0 11 0 0 -5 3 0 + 41 2 11 0 0 -6 4 0 + 41 4 11 0 0 -6 3 0 + 41 6 11 0 0 -5 4 0 + 41 8 11 0 0 -5 5 0 + 41 10 11 0 0 -6 5 2 + 41 12 11 0 0 -5 6 2 + 41 14 11 0 0 -4 4 0 + 41 16 11 0 0 -4 3 0 + 41 18 11 0 0 -3 3 0 + 41 20 11 0 0 -4 7 3 + 41 20 11 0 0 -3 7 3 + 41 22 11 0 0 -4 6 0 + 41 24 11 0 0 -4 5 0 + 41 26 11 0 0 -3 4 0 + 41 28 11 0 0 -3 5 0 + 41 30 11 0 0 -2 3 0 + 41 32 11 0 0 -2 2 0 + 41 34 11 0 0 -1 1 0 + 41 36 11 0 0 -1 0 0 + 41 38 11 0 0 -2 1 0 + 41 40 11 0 0 -4 0 0 + 41 42 11 0 0 -3 0 0 + 41 44 11 0 0 -4 1 0 + 41 46 11 0 0 -5 0 0 + 41 48 11 0 0 -6 1 2 + 41 50 11 0 0 -5 1 0 + 41 52 11 0 0 -3 1 0 + 41 54 11 0 0 -3 2 0 + 41 56 11 0 0 -4 2 0 + 41 58 11 0 0 -5 2 0 + 41 60 11 0 0 -7 3 3 + 41 60 11 0 0 -7 4 3 + 41 62 11 0 0 -6 2 0 + 42 0 11 0 0 -1 -3 0 + 42 2 11 0 0 -2 -2 0 + 42 4 11 0 0 -2 -3 0 + 42 6 11 0 0 -2 -4 0 + 42 8 11 0 0 -4 -1 0 + 42 10 11 0 0 -3 -3 0 + 42 12 11 0 0 -3 -4 3 + 42 12 11 0 0 -4 -3 3 + 42 14 11 0 0 -4 -2 0 + 42 16 11 0 0 -5 -1 2 + 42 18 11 0 0 -3 -2 0 + 42 20 11 0 0 -3 -1 0 + 42 22 11 0 0 -2 -1 0 + 42 24 11 0 0 -1 -2 0 + 42 26 11 0 0 -1 -1 0 + 42 28 11 0 0 -2 0 0 + 42 30 11 0 0 0 -3 0 + 42 32 11 0 0 1 -3 0 + 42 34 11 0 0 0 -2 0 + 42 36 11 0 0 0 0 0 + 42 38 11 0 0 0 -1 0 + 42 40 11 0 0 1 -2 4 + 42 42 11 0 0 2 -4 0 + 42 44 11 0 0 1 -4 0 + 42 46 11 0 0 2 -5 0 + 42 48 11 0 0 2 -6 0 + 42 50 11 0 0 1 -5 0 + 42 52 11 0 0 1 -6 2 + 42 54 11 0 0 -1 -4 0 + 42 56 11 0 0 0 -5 0 + 42 58 11 0 0 0 -4 0 + 42 62 11 0 0 -1 -5 2 + 43 0 11 0 0 4 -2 0 + 43 2 11 0 0 4 -3 0 + 43 4 11 0 0 5 -3 0 + 43 6 11 0 0 4 -4 0 + 43 8 11 0 0 6 -3 0 + 43 10 11 0 0 3 -4 0 + 43 12 11 0 0 4 -5 0 + 43 14 11 0 0 6 -2 0 + 43 16 11 0 0 7 -4 3 + 43 16 11 0 0 7 -3 3 + 43 18 11 0 0 6 -4 0 + 43 20 11 0 0 5 -4 0 + 43 22 11 0 0 6 -5 2 + 43 24 11 0 0 5 -5 0 + 43 26 11 0 0 5 -6 2 + 43 28 11 0 0 4 -6 0 + 43 30 11 0 0 3 -5 0 + 43 32 11 0 0 3 -6 0 + 43 34 11 0 0 3 -7 3 + 43 34 11 0 0 4 -7 3 + 43 36 11 0 0 1 -1 0 + 43 38 11 0 0 2 -2 0 + 43 40 11 0 0 2 -3 0 + 43 42 11 0 0 3 -3 0 + 43 44 11 0 0 1 0 0 + 43 46 11 0 0 4 -1 0 + 43 48 11 0 0 4 0 0 + 43 50 11 0 0 5 0 0 + 43 52 11 0 0 3 -1 0 + 43 54 11 0 0 2 -1 0 + 43 56 11 0 0 3 -2 0 + 43 58 11 0 0 5 -2 0 + 43 60 11 0 0 6 -1 2 + 43 62 11 0 0 5 -1 0 + 44 0 11 0 0 3 2 0 + 44 0 11 0 0 -3 0 0 + 44 0 11 0 0 -2 0 0 + 44 0 11 0 0 -1 0 0 + 44 0 11 0 0 0 0 0 + 44 0 11 0 0 2 0 0 + 44 0 11 0 0 3 0 0 + 44 2 11 0 0 2 2 0 + 44 4 11 0 0 3 1 0 + 44 6 11 0 0 4 2 0 + 44 8 11 0 0 -4 0 0 + 44 10 11 0 0 5 1 2 + 44 12 11 0 0 4 1 0 + 44 14 11 0 0 -5 0 0 + 44 16 11 0 0 2 1 0 + 44 18 11 0 0 1 1 0 + 44 20 11 0 0 1 2 0 + 44 22 11 0 0 0 2 0 + 44 24 11 0 0 0 1 0 + 44 26 11 0 0 -1 2 0 + 44 28 11 0 0 -1 3 0 + 44 30 11 0 0 -2 4 4 + 44 32 11 0 0 -2 5 0 + 44 34 11 0 0 -1 4 0 + 44 36 11 0 0 -1 5 0 + 44 38 11 0 0 0 4 0 + 44 40 11 0 0 0 3 0 + 44 42 11 0 0 1 3 0 + 44 44 11 0 0 -3 6 0 + 44 46 11 0 0 3 4 3 + 44 46 11 0 0 4 3 3 + 44 48 11 0 0 -2 6 0 + 44 50 11 0 0 -1 6 2 + 44 52 11 0 0 0 5 0 + 44 54 11 0 0 1 4 0 + 44 56 11 0 0 1 5 2 + 44 58 11 0 0 3 3 0 + 44 60 11 0 0 2 3 0 + 44 62 11 0 0 2 4 0 + 45 0 12 0 0 -2 -3 0 + 45 2 12 0 0 -2 -4 0 + 45 4 12 0 0 -3 -3 0 + 45 6 12 0 0 -1 -4 0 + 45 8 12 0 0 0 -5 0 + 45 10 12 0 0 -1 -5 2 + 45 12 12 0 0 1 -6 2 + 45 14 12 0 0 0 -4 0 + 45 16 12 0 0 -1 -3 0 + 45 18 12 0 0 0 -3 0 + 45 20 12 0 0 3 -7 3 + 45 20 12 0 0 4 -7 3 + 45 22 12 0 0 2 -6 0 + 45 24 12 0 0 1 -5 0 + 45 26 12 0 0 1 -4 0 + 45 28 12 0 0 2 -5 0 + 45 30 12 0 0 1 -3 0 + 45 32 12 0 0 0 -2 0 + 45 34 12 0 0 0 -1 0 + 45 36 12 0 0 -1 0 0 + 45 38 12 0 0 -1 -1 0 + 45 40 12 0 0 -4 0 0 + 45 42 12 0 0 -3 0 0 + 45 44 12 0 0 -3 -1 0 + 45 46 12 0 0 -5 0 0 + 45 48 12 0 0 -5 -1 2 + 45 50 12 0 0 -4 -1 0 + 45 52 12 0 0 -2 -1 0 + 45 54 12 0 0 -1 -2 0 + 45 56 12 0 0 -2 -2 0 + 45 58 12 0 0 -3 -2 0 + 45 60 12 0 0 -4 -3 3 + 45 60 12 0 0 -3 -4 3 + 45 62 12 0 0 -4 -2 0 + 46 0 12 0 0 -4 3 0 + 46 2 12 0 0 -4 2 0 + 46 4 12 0 0 -5 3 0 + 46 6 12 0 0 -6 4 0 + 46 8 12 0 0 -5 1 0 + 46 10 12 0 0 -6 3 0 + 46 12 12 0 0 -7 4 3 + 46 12 12 0 0 -7 3 3 + 46 14 12 0 0 -6 2 0 + 46 16 12 0 0 -6 1 2 + 46 18 12 0 0 -5 2 0 + 46 20 12 0 0 -4 1 0 + 46 22 12 0 0 -3 1 0 + 46 24 12 0 0 -3 2 0 + 46 26 12 0 0 -2 1 0 + 46 28 12 0 0 -2 0 0 + 46 30 12 0 0 -3 3 0 + 46 32 12 0 0 -2 3 0 + 46 34 12 0 0 -2 2 0 + 46 36 12 0 0 0 0 0 + 46 38 12 0 0 -1 1 0 + 46 40 12 0 0 -1 2 4 + 46 42 12 0 0 -2 4 0 + 46 44 12 0 0 -3 4 0 + 46 46 12 0 0 -3 5 0 + 46 48 12 0 0 -4 6 0 + 46 50 12 0 0 -4 5 0 + 46 52 12 0 0 -5 6 2 + 46 54 12 0 0 -5 4 0 + 46 56 12 0 0 -5 5 0 + 46 58 12 0 0 -4 4 0 + 46 62 12 0 0 -6 5 2 + 47 0 12 0 0 2 2 0 + 47 2 12 0 0 1 3 0 + 47 4 12 0 0 2 3 0 + 47 6 12 0 0 0 4 0 + 47 8 12 0 0 3 3 0 + 47 10 12 0 0 -1 4 0 + 47 12 12 0 0 -1 5 0 + 47 14 12 0 0 4 2 0 + 47 16 12 0 0 3 4 3 + 47 16 12 0 0 4 3 3 + 47 18 12 0 0 2 4 0 + 47 20 12 0 0 1 4 0 + 47 22 12 0 0 1 5 2 + 47 24 12 0 0 0 5 0 + 47 26 12 0 0 -1 6 2 + 47 28 12 0 0 -2 6 0 + 47 30 12 0 0 -2 5 0 + 47 32 12 0 0 -3 6 0 + 47 34 12 0 0 -4 7 3 + 47 34 12 0 0 -3 7 3 + 47 36 12 0 0 0 1 0 + 47 38 12 0 0 0 2 0 + 47 40 12 0 0 -1 3 0 + 47 42 12 0 0 0 3 0 + 47 44 12 0 0 1 0 0 + 47 46 12 0 0 3 1 0 + 47 48 12 0 0 4 0 0 + 47 50 12 0 0 5 0 0 + 47 52 12 0 0 2 1 0 + 47 54 12 0 0 1 1 0 + 47 56 12 0 0 1 2 0 + 47 58 12 0 0 3 2 0 + 47 60 12 0 0 5 1 2 + 47 62 12 0 0 4 1 0 + 48 0 12 0 0 5 -2 0 + 48 0 12 0 0 -3 0 0 + 48 0 12 0 0 -2 0 0 + 48 0 12 0 0 -1 0 0 + 48 0 12 0 0 0 0 0 + 48 0 12 0 0 2 0 0 + 48 0 12 0 0 3 0 0 + 48 2 12 0 0 4 -2 0 + 48 4 12 0 0 4 -1 0 + 48 6 12 0 0 6 -2 0 + 48 8 12 0 0 -4 0 0 + 48 10 12 0 0 6 -1 2 + 48 12 12 0 0 5 -1 0 + 48 14 12 0 0 -5 0 0 + 48 16 12 0 0 3 -1 0 + 48 18 12 0 0 2 -1 0 + 48 20 12 0 0 3 -2 0 + 48 22 12 0 0 2 -2 0 + 48 24 12 0 0 1 -1 0 + 48 26 12 0 0 1 -2 0 + 48 28 12 0 0 2 -3 0 + 48 30 12 0 0 2 -4 4 + 48 32 12 0 0 3 -5 0 + 48 34 12 0 0 3 -4 0 + 48 36 12 0 0 4 -5 0 + 48 38 12 0 0 4 -4 0 + 48 40 12 0 0 3 -3 0 + 48 42 12 0 0 4 -3 0 + 48 44 12 0 0 3 -6 0 + 48 46 12 0 0 7 -4 3 + 48 46 12 0 0 7 -3 3 + 48 48 12 0 0 4 -6 0 + 48 50 12 0 0 5 -6 2 + 48 52 12 0 0 5 -5 0 + 48 54 12 0 0 5 -4 0 + 48 56 12 0 0 6 -5 2 + 48 58 12 0 0 6 -3 0 + 48 60 12 0 0 5 -3 0 + 48 62 12 0 0 6 -4 0 + 49 0 13 0 0 -5 3 0 + 49 2 13 0 0 -6 4 0 + 49 4 13 0 0 -6 3 0 + 49 6 13 0 0 -5 4 0 + 49 8 13 0 0 -5 5 0 + 49 10 13 0 0 -6 5 2 + 49 12 13 0 0 -5 6 2 + 49 14 13 0 0 -4 4 0 + 49 16 13 0 0 -4 3 0 + 49 18 13 0 0 -3 3 0 + 49 20 13 0 0 -4 7 3 + 49 20 13 0 0 -3 7 3 + 49 22 13 0 0 -4 6 0 + 49 24 13 0 0 -4 5 0 + 49 26 13 0 0 -3 4 0 + 49 28 13 0 0 -3 5 0 + 49 30 13 0 0 -2 3 0 + 49 32 13 0 0 -2 2 0 + 49 34 13 0 0 -1 1 0 + 49 36 13 0 0 -1 0 0 + 49 38 13 0 0 -2 1 0 + 49 40 13 0 0 -4 0 0 + 49 42 13 0 0 -3 0 0 + 49 44 13 0 0 -4 1 0 + 49 46 13 0 0 -5 0 0 + 49 48 13 0 0 -6 1 2 + 49 50 13 0 0 -5 1 0 + 49 52 13 0 0 -3 1 0 + 49 54 13 0 0 -3 2 0 + 49 56 13 0 0 -4 2 0 + 49 58 13 0 0 -5 2 0 + 49 60 13 0 0 -7 3 3 + 49 60 13 0 0 -7 4 3 + 49 62 13 0 0 -6 2 0 + 50 0 13 0 0 -1 -3 0 + 50 2 13 0 0 -2 -2 0 + 50 4 13 0 0 -2 -3 0 + 50 6 13 0 0 -2 -4 0 + 50 8 13 0 0 -4 -1 0 + 50 10 13 0 0 -3 -3 0 + 50 12 13 0 0 -3 -4 3 + 50 12 13 0 0 -4 -3 3 + 50 14 13 0 0 -4 -2 0 + 50 16 13 0 0 -5 -1 2 + 50 18 13 0 0 -3 -2 0 + 50 20 13 0 0 -3 -1 0 + 50 22 13 0 0 -2 -1 0 + 50 24 13 0 0 -1 -2 0 + 50 26 13 0 0 -1 -1 0 + 50 28 13 0 0 -2 0 0 + 50 30 13 0 0 0 -3 0 + 50 32 13 0 0 1 -3 0 + 50 34 13 0 0 0 -2 0 + 50 36 13 0 0 0 0 0 + 50 38 13 0 0 0 -1 0 + 50 40 13 0 0 1 -2 4 + 50 42 13 0 0 2 -4 0 + 50 44 13 0 0 1 -4 0 + 50 46 13 0 0 2 -5 0 + 50 48 13 0 0 2 -6 0 + 50 50 13 0 0 1 -5 0 + 50 52 13 0 0 1 -6 2 + 50 54 13 0 0 -1 -4 0 + 50 56 13 0 0 0 -5 0 + 50 58 13 0 0 0 -4 0 + 50 62 13 0 0 -1 -5 2 + 51 0 13 0 0 4 -2 0 + 51 2 13 0 0 4 -3 0 + 51 4 13 0 0 5 -3 0 + 51 6 13 0 0 4 -4 0 + 51 8 13 0 0 6 -3 0 + 51 10 13 0 0 3 -4 0 + 51 12 13 0 0 4 -5 0 + 51 14 13 0 0 6 -2 0 + 51 16 13 0 0 7 -4 3 + 51 16 13 0 0 7 -3 3 + 51 18 13 0 0 6 -4 0 + 51 20 13 0 0 5 -4 0 + 51 22 13 0 0 6 -5 2 + 51 24 13 0 0 5 -5 0 + 51 26 13 0 0 5 -6 2 + 51 28 13 0 0 4 -6 0 + 51 30 13 0 0 3 -5 0 + 51 32 13 0 0 3 -6 0 + 51 34 13 0 0 3 -7 3 + 51 34 13 0 0 4 -7 3 + 51 36 13 0 0 1 -1 0 + 51 38 13 0 0 2 -2 0 + 51 40 13 0 0 2 -3 0 + 51 42 13 0 0 3 -3 0 + 51 44 13 0 0 1 0 0 + 51 46 13 0 0 4 -1 0 + 51 48 13 0 0 4 0 0 + 51 50 13 0 0 5 0 0 + 51 52 13 0 0 3 -1 0 + 51 54 13 0 0 2 -1 0 + 51 56 13 0 0 3 -2 0 + 51 58 13 0 0 5 -2 0 + 51 60 13 0 0 6 -1 2 + 51 62 13 0 0 5 -1 0 + 52 0 13 0 0 3 2 0 + 52 0 13 0 0 -3 0 0 + 52 0 13 0 0 -2 0 0 + 52 0 13 0 0 -1 0 0 + 52 0 13 0 0 0 0 0 + 52 0 13 0 0 2 0 0 + 52 0 13 0 0 3 0 0 + 52 2 13 0 0 2 2 0 + 52 4 13 0 0 3 1 0 + 52 6 13 0 0 4 2 0 + 52 8 13 0 0 -4 0 0 + 52 10 13 0 0 5 1 2 + 52 12 13 0 0 4 1 0 + 52 14 13 0 0 -5 0 0 + 52 16 13 0 0 2 1 0 + 52 18 13 0 0 1 1 0 + 52 20 13 0 0 1 2 0 + 52 22 13 0 0 0 2 0 + 52 24 13 0 0 0 1 0 + 52 26 13 0 0 -1 2 0 + 52 28 13 0 0 -1 3 0 + 52 30 13 0 0 -2 4 4 + 52 32 13 0 0 -2 5 0 + 52 34 13 0 0 -1 4 0 + 52 36 13 0 0 -1 5 0 + 52 38 13 0 0 0 4 0 + 52 40 13 0 0 0 3 0 + 52 42 13 0 0 1 3 0 + 52 44 13 0 0 -3 6 0 + 52 46 13 0 0 3 4 3 + 52 46 13 0 0 4 3 3 + 52 48 13 0 0 -2 6 0 + 52 50 13 0 0 -1 6 2 + 52 52 13 0 0 0 5 0 + 52 54 13 0 0 1 4 0 + 52 56 13 0 0 1 5 2 + 52 58 13 0 0 3 3 0 + 52 60 13 0 0 2 3 0 + 52 62 13 0 0 2 4 0 + 53 0 14 0 0 -2 -3 0 + 53 2 14 0 0 -2 -4 0 + 53 4 14 0 0 -3 -3 0 + 53 6 14 0 0 -1 -4 0 + 53 8 14 0 0 0 -5 0 + 53 10 14 0 0 -1 -5 2 + 53 12 14 0 0 1 -6 2 + 53 14 14 0 0 0 -4 0 + 53 16 14 0 0 -1 -3 0 + 53 18 14 0 0 0 -3 0 + 53 20 14 0 0 3 -7 3 + 53 20 14 0 0 4 -7 3 + 53 22 14 0 0 2 -6 0 + 53 24 14 0 0 1 -5 0 + 53 26 14 0 0 1 -4 0 + 53 28 14 0 0 2 -5 0 + 53 30 14 0 0 1 -3 0 + 53 32 14 0 0 0 -2 0 + 53 34 14 0 0 0 -1 0 + 53 36 14 0 0 -1 0 0 + 53 38 14 0 0 -1 -1 0 + 53 40 14 0 0 -4 0 0 + 53 42 14 0 0 -3 0 0 + 53 44 14 0 0 -3 -1 0 + 53 46 14 0 0 -5 0 0 + 53 48 14 0 0 -5 -1 2 + 53 50 14 0 0 -4 -1 0 + 53 52 14 0 0 -2 -1 0 + 53 54 14 0 0 -1 -2 0 + 53 56 14 0 0 -2 -2 0 + 53 58 14 0 0 -3 -2 0 + 53 60 14 0 0 -4 -3 3 + 53 60 14 0 0 -3 -4 3 + 53 62 14 0 0 -4 -2 0 + 54 0 14 0 0 -4 3 0 + 54 2 14 0 0 -4 2 0 + 54 4 14 0 0 -5 3 0 + 54 6 14 0 0 -6 4 0 + 54 8 14 0 0 -5 1 0 + 54 10 14 0 0 -6 3 0 + 54 12 14 0 0 -7 4 3 + 54 12 14 0 0 -7 3 3 + 54 14 14 0 0 -6 2 0 + 54 16 14 0 0 -6 1 2 + 54 18 14 0 0 -5 2 0 + 54 20 14 0 0 -4 1 0 + 54 22 14 0 0 -3 1 0 + 54 24 14 0 0 -3 2 0 + 54 26 14 0 0 -2 1 0 + 54 28 14 0 0 -2 0 0 + 54 30 14 0 0 -3 3 0 + 54 32 14 0 0 -2 3 0 + 54 34 14 0 0 -2 2 0 + 54 36 14 0 0 0 0 0 + 54 38 14 0 0 -1 1 0 + 54 40 14 0 0 -1 2 4 + 54 42 14 0 0 -2 4 0 + 54 44 14 0 0 -3 4 0 + 54 46 14 0 0 -3 5 0 + 54 48 14 0 0 -4 6 0 + 54 50 14 0 0 -4 5 0 + 54 52 14 0 0 -5 6 2 + 54 54 14 0 0 -5 4 0 + 54 56 14 0 0 -5 5 0 + 54 58 14 0 0 -4 4 0 + 54 62 14 0 0 -6 5 2 + 55 0 14 0 0 2 2 0 + 55 2 14 0 0 1 3 0 + 55 4 14 0 0 2 3 0 + 55 6 14 0 0 0 4 0 + 55 8 14 0 0 3 3 0 + 55 10 14 0 0 -1 4 0 + 55 12 14 0 0 -1 5 0 + 55 14 14 0 0 4 2 0 + 55 16 14 0 0 3 4 3 + 55 16 14 0 0 4 3 3 + 55 18 14 0 0 2 4 0 + 55 20 14 0 0 1 4 0 + 55 22 14 0 0 1 5 2 + 55 24 14 0 0 0 5 0 + 55 26 14 0 0 -1 6 2 + 55 28 14 0 0 -2 6 0 + 55 30 14 0 0 -2 5 0 + 55 32 14 0 0 -3 6 0 + 55 34 14 0 0 -4 7 3 + 55 34 14 0 0 -3 7 3 + 55 36 14 0 0 0 1 0 + 55 38 14 0 0 0 2 0 + 55 40 14 0 0 -1 3 0 + 55 42 14 0 0 0 3 0 + 55 44 14 0 0 1 0 0 + 55 46 14 0 0 3 1 0 + 55 48 14 0 0 4 0 0 + 55 50 14 0 0 5 0 0 + 55 52 14 0 0 2 1 0 + 55 54 14 0 0 1 1 0 + 55 56 14 0 0 1 2 0 + 55 58 14 0 0 3 2 0 + 55 60 14 0 0 5 1 2 + 55 62 14 0 0 4 1 0 + 56 0 14 0 0 5 -2 0 + 56 0 14 0 0 -3 0 0 + 56 0 14 0 0 -2 0 0 + 56 0 14 0 0 -1 0 0 + 56 0 14 0 0 0 0 0 + 56 0 14 0 0 2 0 0 + 56 0 14 0 0 3 0 0 + 56 2 14 0 0 4 -2 0 + 56 4 14 0 0 4 -1 0 + 56 6 14 0 0 6 -2 0 + 56 8 14 0 0 -4 0 0 + 56 10 14 0 0 6 -1 2 + 56 12 14 0 0 5 -1 0 + 56 14 14 0 0 -5 0 0 + 56 16 14 0 0 3 -1 0 + 56 18 14 0 0 2 -1 0 + 56 20 14 0 0 3 -2 0 + 56 22 14 0 0 2 -2 0 + 56 24 14 0 0 1 -1 0 + 56 26 14 0 0 1 -2 0 + 56 28 14 0 0 2 -3 0 + 56 30 14 0 0 2 -4 4 + 56 32 14 0 0 3 -5 0 + 56 34 14 0 0 3 -4 0 + 56 36 14 0 0 4 -5 0 + 56 38 14 0 0 4 -4 0 + 56 40 14 0 0 3 -3 0 + 56 42 14 0 0 4 -3 0 + 56 44 14 0 0 3 -6 0 + 56 46 14 0 0 7 -4 3 + 56 46 14 0 0 7 -3 3 + 56 48 14 0 0 4 -6 0 + 56 50 14 0 0 5 -6 2 + 56 52 14 0 0 5 -5 0 + 56 54 14 0 0 5 -4 0 + 56 56 14 0 0 6 -5 2 + 56 58 14 0 0 6 -3 0 + 56 60 14 0 0 5 -3 0 + 56 62 14 0 0 6 -4 0 + 57 0 15 0 0 -5 3 0 + 57 2 15 0 0 -6 4 0 + 57 4 15 0 0 -6 3 0 + 57 6 15 0 0 -5 4 0 + 57 8 15 0 0 -5 5 0 + 57 10 15 0 0 -6 5 2 + 57 12 15 0 0 -5 6 2 + 57 14 15 0 0 -4 4 0 + 57 16 15 0 0 -4 3 0 + 57 18 15 0 0 -3 3 0 + 57 20 15 0 0 -4 7 3 + 57 20 15 0 0 -3 7 3 + 57 22 15 0 0 -4 6 0 + 57 24 15 0 0 -4 5 0 + 57 26 15 0 0 -3 4 0 + 57 28 15 0 0 -3 5 0 + 57 30 15 0 0 -2 3 0 + 57 32 15 0 0 -2 2 0 + 57 34 15 0 0 -1 1 0 + 57 36 15 0 0 -1 0 0 + 57 38 15 0 0 -2 1 0 + 57 40 15 0 0 -4 0 0 + 57 42 15 0 0 -3 0 0 + 57 44 15 0 0 -4 1 0 + 57 46 15 0 0 -5 0 0 + 57 48 15 0 0 -6 1 2 + 57 50 15 0 0 -5 1 0 + 57 52 15 0 0 -3 1 0 + 57 54 15 0 0 -3 2 0 + 57 56 15 0 0 -4 2 0 + 57 58 15 0 0 -5 2 0 + 57 60 15 0 0 -7 3 3 + 57 60 15 0 0 -7 4 3 + 57 62 15 0 0 -6 2 0 + 58 0 15 0 0 -1 -3 0 + 58 2 15 0 0 -2 -2 0 + 58 4 15 0 0 -2 -3 0 + 58 6 15 0 0 -2 -4 0 + 58 8 15 0 0 -4 -1 0 + 58 10 15 0 0 -3 -3 0 + 58 12 15 0 0 -3 -4 3 + 58 12 15 0 0 -4 -3 3 + 58 14 15 0 0 -4 -2 0 + 58 16 15 0 0 -5 -1 2 + 58 18 15 0 0 -3 -2 0 + 58 20 15 0 0 -3 -1 0 + 58 22 15 0 0 -2 -1 0 + 58 24 15 0 0 -1 -2 0 + 58 26 15 0 0 -1 -1 0 + 58 28 15 0 0 -2 0 0 + 58 30 15 0 0 0 -3 0 + 58 32 15 0 0 1 -3 0 + 58 34 15 0 0 0 -2 0 + 58 36 15 0 0 0 0 0 + 58 38 15 0 0 0 -1 0 + 58 40 15 0 0 1 -2 4 + 58 42 15 0 0 2 -4 0 + 58 44 15 0 0 1 -4 0 + 58 46 15 0 0 2 -5 0 + 58 48 15 0 0 2 -6 0 + 58 50 15 0 0 1 -5 0 + 58 52 15 0 0 1 -6 2 + 58 54 15 0 0 -1 -4 0 + 58 56 15 0 0 0 -5 0 + 58 58 15 0 0 0 -4 0 + 58 62 15 0 0 -1 -5 2 + 59 0 15 0 0 4 -2 0 + 59 2 15 0 0 4 -3 0 + 59 4 15 0 0 5 -3 0 + 59 6 15 0 0 4 -4 0 + 59 8 15 0 0 6 -3 0 + 59 10 15 0 0 3 -4 0 + 59 12 15 0 0 4 -5 0 + 59 14 15 0 0 6 -2 0 + 59 16 15 0 0 7 -4 3 + 59 16 15 0 0 7 -3 3 + 59 18 15 0 0 6 -4 0 + 59 20 15 0 0 5 -4 0 + 59 22 15 0 0 6 -5 2 + 59 24 15 0 0 5 -5 0 + 59 26 15 0 0 5 -6 2 + 59 28 15 0 0 4 -6 0 + 59 30 15 0 0 3 -5 0 + 59 32 15 0 0 3 -6 0 + 59 34 15 0 0 3 -7 3 + 59 34 15 0 0 4 -7 3 + 59 36 15 0 0 1 -1 0 + 59 38 15 0 0 2 -2 0 + 59 40 15 0 0 2 -3 0 + 59 42 15 0 0 3 -3 0 + 59 44 15 0 0 1 0 0 + 59 46 15 0 0 4 -1 0 + 59 48 15 0 0 4 0 0 + 59 50 15 0 0 5 0 0 + 59 52 15 0 0 3 -1 0 + 59 54 15 0 0 2 -1 0 + 59 56 15 0 0 3 -2 0 + 59 58 15 0 0 5 -2 0 + 59 60 15 0 0 6 -1 2 + 59 62 15 0 0 5 -1 0 + 60 0 15 0 0 3 2 0 + 60 0 15 0 0 -3 0 0 + 60 0 15 0 0 -2 0 0 + 60 0 15 0 0 -1 0 0 + 60 0 15 0 0 0 0 0 + 60 0 15 0 0 2 0 0 + 60 0 15 0 0 3 0 0 + 60 2 15 0 0 2 2 0 + 60 4 15 0 0 3 1 0 + 60 6 15 0 0 4 2 0 + 60 8 15 0 0 -4 0 0 + 60 10 15 0 0 5 1 2 + 60 12 15 0 0 4 1 0 + 60 14 15 0 0 -5 0 0 + 60 16 15 0 0 2 1 0 + 60 18 15 0 0 1 1 0 + 60 20 15 0 0 1 2 0 + 60 22 15 0 0 0 2 0 + 60 24 15 0 0 0 1 0 + 60 26 15 0 0 -1 2 0 + 60 28 15 0 0 -1 3 0 + 60 30 15 0 0 -2 4 4 + 60 32 15 0 0 -2 5 0 + 60 34 15 0 0 -1 4 0 + 60 36 15 0 0 -1 5 0 + 60 38 15 0 0 0 4 0 + 60 40 15 0 0 0 3 0 + 60 42 15 0 0 1 3 0 + 60 44 15 0 0 -3 6 0 + 60 46 15 0 0 3 4 3 + 60 46 15 0 0 4 3 3 + 60 48 15 0 0 -2 6 0 + 60 50 15 0 0 -1 6 2 + 60 52 15 0 0 0 5 0 + 60 54 15 0 0 1 4 0 + 60 56 15 0 0 1 5 2 + 60 58 15 0 0 3 3 0 + 60 60 15 0 0 2 3 0 + 60 62 15 0 0 2 4 0 + 61 0 16 0 0 -2 -3 0 + 61 2 16 0 0 -2 -4 0 + 61 4 16 0 0 -3 -3 0 + 61 6 16 0 0 -1 -4 0 + 61 8 16 0 0 0 -5 0 + 61 10 16 0 0 -1 -5 2 + 61 12 16 0 0 1 -6 2 + 61 14 16 0 0 0 -4 0 + 61 16 16 0 0 -1 -3 0 + 61 18 16 0 0 0 -3 0 + 61 20 16 0 0 3 -7 3 + 61 20 16 0 0 4 -7 3 + 61 22 16 0 0 2 -6 0 + 61 24 16 0 0 1 -5 0 + 61 26 16 0 0 1 -4 0 + 61 28 16 0 0 2 -5 0 + 61 30 16 0 0 1 -3 0 + 61 32 16 0 0 0 -2 0 + 61 34 16 0 0 0 -1 0 + 61 36 16 0 0 -1 0 0 + 61 38 16 0 0 -1 -1 0 + 61 40 16 0 0 -4 0 0 + 61 42 16 0 0 -3 0 0 + 61 44 16 0 0 -3 -1 0 + 61 46 16 0 0 -5 0 0 + 61 48 16 0 0 -5 -1 2 + 61 50 16 0 0 -4 -1 0 + 61 52 16 0 0 -2 -1 0 + 61 54 16 0 0 -1 -2 0 + 61 56 16 0 0 -2 -2 0 + 61 58 16 0 0 -3 -2 0 + 61 60 16 0 0 -4 -3 3 + 61 60 16 0 0 -3 -4 3 + 61 62 16 0 0 -4 -2 0 + 62 0 16 0 0 -4 3 0 + 62 2 16 0 0 -4 2 0 + 62 4 16 0 0 -5 3 0 + 62 6 16 0 0 -6 4 0 + 62 8 16 0 0 -5 1 0 + 62 10 16 0 0 -6 3 0 + 62 12 16 0 0 -7 4 3 + 62 12 16 0 0 -7 3 3 + 62 14 16 0 0 -6 2 0 + 62 16 16 0 0 -6 1 2 + 62 18 16 0 0 -5 2 0 + 62 20 16 0 0 -4 1 0 + 62 22 16 0 0 -3 1 0 + 62 24 16 0 0 -3 2 0 + 62 26 16 0 0 -2 1 0 + 62 28 16 0 0 -2 0 0 + 62 30 16 0 0 -3 3 0 + 62 32 16 0 0 -2 3 0 + 62 34 16 0 0 -2 2 0 + 62 36 16 0 0 0 0 0 + 62 38 16 0 0 -1 1 0 + 62 40 16 0 0 -1 2 4 + 62 42 16 0 0 -2 4 0 + 62 44 16 0 0 -3 4 0 + 62 46 16 0 0 -3 5 0 + 62 48 16 0 0 -4 6 0 + 62 50 16 0 0 -4 5 0 + 62 52 16 0 0 -5 6 2 + 62 54 16 0 0 -5 4 0 + 62 56 16 0 0 -5 5 0 + 62 58 16 0 0 -4 4 0 + 62 62 16 0 0 -6 5 2 + 63 0 16 0 0 2 2 0 + 63 2 16 0 0 1 3 0 + 63 4 16 0 0 2 3 0 + 63 6 16 0 0 0 4 0 + 63 8 16 0 0 3 3 0 + 63 10 16 0 0 -1 4 0 + 63 12 16 0 0 -1 5 0 + 63 14 16 0 0 4 2 0 + 63 16 16 0 0 3 4 3 + 63 16 16 0 0 4 3 3 + 63 18 16 0 0 2 4 0 + 63 20 16 0 0 1 4 0 + 63 22 16 0 0 1 5 2 + 63 24 16 0 0 0 5 0 + 63 26 16 0 0 -1 6 2 + 63 28 16 0 0 -2 6 0 + 63 30 16 0 0 -2 5 0 + 63 32 16 0 0 -3 6 0 + 63 34 16 0 0 -4 7 3 + 63 34 16 0 0 -3 7 3 + 63 36 16 0 0 0 1 0 + 63 38 16 0 0 0 2 0 + 63 40 16 0 0 -1 3 0 + 63 42 16 0 0 0 3 0 + 63 44 16 0 0 1 0 0 + 63 46 16 0 0 3 1 0 + 63 48 16 0 0 4 0 0 + 63 50 16 0 0 5 0 0 + 63 52 16 0 0 2 1 0 + 63 54 16 0 0 1 1 0 + 63 56 16 0 0 1 2 0 + 63 58 16 0 0 3 2 0 + 63 60 16 0 0 5 1 2 + 63 62 16 0 0 4 1 0 + 64 0 16 0 0 5 -2 0 + 64 0 16 0 0 -3 0 0 + 64 0 16 0 0 -2 0 0 + 64 0 16 0 0 -1 0 0 + 64 0 16 0 0 0 0 0 + 64 0 16 0 0 2 0 0 + 64 0 16 0 0 3 0 0 + 64 2 16 0 0 4 -2 0 + 64 4 16 0 0 4 -1 0 + 64 6 16 0 0 6 -2 0 + 64 8 16 0 0 -4 0 0 + 64 10 16 0 0 6 -1 2 + 64 12 16 0 0 5 -1 0 + 64 14 16 0 0 -5 0 0 + 64 16 16 0 0 3 -1 0 + 64 18 16 0 0 2 -1 0 + 64 20 16 0 0 3 -2 0 + 64 22 16 0 0 2 -2 0 + 64 24 16 0 0 1 -1 0 + 64 26 16 0 0 1 -2 0 + 64 28 16 0 0 2 -3 0 + 64 30 16 0 0 2 -4 4 + 64 32 16 0 0 3 -5 0 + 64 34 16 0 0 3 -4 0 + 64 36 16 0 0 4 -5 0 + 64 38 16 0 0 4 -4 0 + 64 40 16 0 0 3 -3 0 + 64 42 16 0 0 4 -3 0 + 64 44 16 0 0 3 -6 0 + 64 46 16 0 0 7 -4 3 + 64 46 16 0 0 7 -3 3 + 64 48 16 0 0 4 -6 0 + 64 50 16 0 0 5 -6 2 + 64 52 16 0 0 5 -5 0 + 64 54 16 0 0 5 -4 0 + 64 56 16 0 0 6 -5 2 + 64 58 16 0 0 6 -3 0 + 64 60 16 0 0 5 -3 0 + 64 62 16 0 0 6 -4 0 + 65 0 17 0 0 -5 3 0 + 65 2 17 0 0 -6 4 0 + 65 4 17 0 0 -6 3 0 + 65 6 17 0 0 -5 4 0 + 65 8 17 0 0 -5 5 0 + 65 10 17 0 0 -6 5 2 + 65 12 17 0 0 -5 6 2 + 65 14 17 0 0 -4 4 0 + 65 16 17 0 0 -4 3 0 + 65 18 17 0 0 -3 3 0 + 65 20 17 0 0 -4 7 3 + 65 20 17 0 0 -3 7 3 + 65 22 17 0 0 -4 6 0 + 65 24 17 0 0 -4 5 0 + 65 26 17 0 0 -3 4 0 + 65 28 17 0 0 -3 5 0 + 65 30 17 0 0 -2 3 0 + 65 32 17 0 0 -2 2 0 + 65 34 17 0 0 -1 1 0 + 65 36 17 0 0 -1 0 0 + 65 38 17 0 0 -2 1 0 + 65 40 17 0 0 -4 0 0 + 65 42 17 0 0 -3 0 0 + 65 44 17 0 0 -4 1 0 + 65 46 17 0 0 -5 0 0 + 65 48 17 0 0 -6 1 2 + 65 50 17 0 0 -5 1 0 + 65 52 17 0 0 -3 1 0 + 65 54 17 0 0 -3 2 0 + 65 56 17 0 0 -4 2 0 + 65 58 17 0 0 -5 2 0 + 65 60 17 0 0 -7 3 3 + 65 60 17 0 0 -7 4 3 + 65 62 17 0 0 -6 2 0 + 66 0 17 0 0 -1 -3 0 + 66 2 17 0 0 -2 -2 0 + 66 4 17 0 0 -2 -3 0 + 66 6 17 0 0 -2 -4 0 + 66 8 17 0 0 -4 -1 0 + 66 10 17 0 0 -3 -3 0 + 66 12 17 0 0 -3 -4 3 + 66 12 17 0 0 -4 -3 3 + 66 14 17 0 0 -4 -2 0 + 66 16 17 0 0 -5 -1 2 + 66 18 17 0 0 -3 -2 0 + 66 20 17 0 0 -3 -1 0 + 66 22 17 0 0 -2 -1 0 + 66 24 17 0 0 -1 -2 0 + 66 26 17 0 0 -1 -1 0 + 66 28 17 0 0 -2 0 0 + 66 30 17 0 0 0 -3 0 + 66 32 17 0 0 1 -3 0 + 66 34 17 0 0 0 -2 0 + 66 36 17 0 0 0 0 0 + 66 38 17 0 0 0 -1 0 + 66 40 17 0 0 1 -2 4 + 66 42 17 0 0 2 -4 0 + 66 44 17 0 0 1 -4 0 + 66 46 17 0 0 2 -5 0 + 66 48 17 0 0 2 -6 0 + 66 50 17 0 0 1 -5 0 + 66 52 17 0 0 1 -6 2 + 66 54 17 0 0 -1 -4 0 + 66 56 17 0 0 0 -5 0 + 66 58 17 0 0 0 -4 0 + 66 62 17 0 0 -1 -5 2 + 67 0 17 0 0 4 -2 0 + 67 2 17 0 0 4 -3 0 + 67 4 17 0 0 5 -3 0 + 67 6 17 0 0 4 -4 0 + 67 8 17 0 0 6 -3 0 + 67 10 17 0 0 3 -4 0 + 67 12 17 0 0 4 -5 0 + 67 14 17 0 0 6 -2 0 + 67 16 17 0 0 7 -4 3 + 67 16 17 0 0 7 -3 3 + 67 18 17 0 0 6 -4 0 + 67 20 17 0 0 5 -4 0 + 67 22 17 0 0 6 -5 2 + 67 24 17 0 0 5 -5 0 + 67 26 17 0 0 5 -6 2 + 67 28 17 0 0 4 -6 0 + 67 30 17 0 0 3 -5 0 + 67 32 17 0 0 3 -6 0 + 67 34 17 0 0 3 -7 3 + 67 34 17 0 0 4 -7 3 + 67 36 17 0 0 1 -1 0 + 67 38 17 0 0 2 -2 0 + 67 40 17 0 0 2 -3 0 + 67 42 17 0 0 3 -3 0 + 67 44 17 0 0 1 0 0 + 67 46 17 0 0 4 -1 0 + 67 48 17 0 0 4 0 0 + 67 50 17 0 0 5 0 0 + 67 52 17 0 0 3 -1 0 + 67 54 17 0 0 2 -1 0 + 67 56 17 0 0 3 -2 0 + 67 58 17 0 0 5 -2 0 + 67 60 17 0 0 6 -1 2 + 67 62 17 0 0 5 -1 0 + 68 0 17 0 0 3 2 0 + 68 0 17 0 0 -3 0 0 + 68 0 17 0 0 -2 0 0 + 68 0 17 0 0 -1 0 0 + 68 0 17 0 0 0 0 0 + 68 0 17 0 0 2 0 0 + 68 0 17 0 0 3 0 0 + 68 2 17 0 0 2 2 0 + 68 4 17 0 0 3 1 0 + 68 6 17 0 0 4 2 0 + 68 8 17 0 0 -4 0 0 + 68 10 17 0 0 5 1 2 + 68 12 17 0 0 4 1 0 + 68 14 17 0 0 -5 0 0 + 68 16 17 0 0 2 1 0 + 68 18 17 0 0 1 1 0 + 68 20 17 0 0 1 2 0 + 68 22 17 0 0 0 2 0 + 68 24 17 0 0 0 1 0 + 68 26 17 0 0 -1 2 0 + 68 28 17 0 0 -1 3 0 + 68 30 17 0 0 -2 4 4 + 68 32 17 0 0 -2 5 0 + 68 34 17 0 0 -1 4 0 + 68 36 17 0 0 -1 5 0 + 68 38 17 0 0 0 4 0 + 68 40 17 0 0 0 3 0 + 68 42 17 0 0 1 3 0 + 68 44 17 0 0 -3 6 0 + 68 46 17 0 0 3 4 3 + 68 46 17 0 0 4 3 3 + 68 48 17 0 0 -2 6 0 + 68 50 17 0 0 -1 6 2 + 68 52 17 0 0 0 5 0 + 68 54 17 0 0 1 4 0 + 68 56 17 0 0 1 5 2 + 68 58 17 0 0 3 3 0 + 68 60 17 0 0 2 3 0 + 68 62 17 0 0 2 4 0 + 69 0 18 0 0 -2 -3 0 + 69 2 18 0 0 -2 -4 0 + 69 4 18 0 0 -3 -3 0 + 69 6 18 0 0 -1 -4 0 + 69 8 18 0 0 0 -5 0 + 69 10 18 0 0 -1 -5 2 + 69 12 18 0 0 1 -6 2 + 69 14 18 0 0 0 -4 0 + 69 16 18 0 0 -1 -3 0 + 69 18 18 0 0 0 -3 0 + 69 20 18 0 0 3 -7 3 + 69 20 18 0 0 4 -7 3 + 69 22 18 0 0 2 -6 0 + 69 24 18 0 0 1 -5 0 + 69 26 18 0 0 1 -4 0 + 69 28 18 0 0 2 -5 0 + 69 30 18 0 0 1 -3 0 + 69 32 18 0 0 0 -2 0 + 69 34 18 0 0 0 -1 0 + 69 36 18 0 0 -1 0 0 + 69 38 18 0 0 -1 -1 0 + 69 40 18 0 0 -4 0 0 + 69 42 18 0 0 -3 0 0 + 69 44 18 0 0 -3 -1 0 + 69 46 18 0 0 -5 0 0 + 69 48 18 0 0 -5 -1 2 + 69 50 18 0 0 -4 -1 0 + 69 52 18 0 0 -2 -1 0 + 69 54 18 0 0 -1 -2 0 + 69 56 18 0 0 -2 -2 0 + 69 58 18 0 0 -3 -2 0 + 69 60 18 0 0 -4 -3 3 + 69 60 18 0 0 -3 -4 3 + 69 62 18 0 0 -4 -2 0 + 70 0 18 0 0 -4 3 0 + 70 2 18 0 0 -4 2 0 + 70 4 18 0 0 -5 3 0 + 70 6 18 0 0 -6 4 0 + 70 8 18 0 0 -5 1 0 + 70 10 18 0 0 -6 3 0 + 70 12 18 0 0 -7 4 3 + 70 12 18 0 0 -7 3 3 + 70 14 18 0 0 -6 2 0 + 70 16 18 0 0 -6 1 2 + 70 18 18 0 0 -5 2 0 + 70 20 18 0 0 -4 1 0 + 70 22 18 0 0 -3 1 0 + 70 24 18 0 0 -3 2 0 + 70 26 18 0 0 -2 1 0 + 70 28 18 0 0 -2 0 0 + 70 30 18 0 0 -3 3 0 + 70 32 18 0 0 -2 3 0 + 70 34 18 0 0 -2 2 0 + 70 36 18 0 0 0 0 0 + 70 38 18 0 0 -1 1 0 + 70 40 18 0 0 -1 2 4 + 70 42 18 0 0 -2 4 0 + 70 44 18 0 0 -3 4 0 + 70 46 18 0 0 -3 5 0 + 70 48 18 0 0 -4 6 0 + 70 50 18 0 0 -4 5 0 + 70 52 18 0 0 -5 6 2 + 70 54 18 0 0 -5 4 0 + 70 56 18 0 0 -5 5 0 + 70 58 18 0 0 -4 4 0 + 70 62 18 0 0 -6 5 2 + 71 0 18 0 0 2 2 0 + 71 2 18 0 0 1 3 0 + 71 4 18 0 0 2 3 0 + 71 6 18 0 0 0 4 0 + 71 8 18 0 0 3 3 0 + 71 10 18 0 0 -1 4 0 + 71 12 18 0 0 -1 5 0 + 71 14 18 0 0 4 2 0 + 71 16 18 0 0 3 4 3 + 71 16 18 0 0 4 3 3 + 71 18 18 0 0 2 4 0 + 71 20 18 0 0 1 4 0 + 71 22 18 0 0 1 5 2 + 71 24 18 0 0 0 5 0 + 71 26 18 0 0 -1 6 2 + 71 28 18 0 0 -2 6 0 + 71 30 18 0 0 -2 5 0 + 71 32 18 0 0 -3 6 0 + 71 34 18 0 0 -4 7 3 + 71 34 18 0 0 -3 7 3 + 71 36 18 0 0 0 1 0 + 71 38 18 0 0 0 2 0 + 71 40 18 0 0 -1 3 0 + 71 42 18 0 0 0 3 0 + 71 44 18 0 0 1 0 0 + 71 46 18 0 0 3 1 0 + 71 48 18 0 0 4 0 0 + 71 50 18 0 0 5 0 0 + 71 52 18 0 0 2 1 0 + 71 54 18 0 0 1 1 0 + 71 56 18 0 0 1 2 0 + 71 58 18 0 0 3 2 0 + 71 60 18 0 0 5 1 2 + 71 62 18 0 0 4 1 0 + 72 0 18 0 0 5 -2 0 + 72 0 18 0 0 -3 0 0 + 72 0 18 0 0 -2 0 0 + 72 0 18 0 0 -1 0 0 + 72 0 18 0 0 0 0 0 + 72 0 18 0 0 2 0 0 + 72 0 18 0 0 3 0 0 + 72 2 18 0 0 4 -2 0 + 72 4 18 0 0 4 -1 0 + 72 6 18 0 0 6 -2 0 + 72 8 18 0 0 -4 0 0 + 72 10 18 0 0 6 -1 2 + 72 12 18 0 0 5 -1 0 + 72 14 18 0 0 -5 0 0 + 72 16 18 0 0 3 -1 0 + 72 18 18 0 0 2 -1 0 + 72 20 18 0 0 3 -2 0 + 72 22 18 0 0 2 -2 0 + 72 24 18 0 0 1 -1 0 + 72 26 18 0 0 1 -2 0 + 72 28 18 0 0 2 -3 0 + 72 30 18 0 0 2 -4 4 + 72 32 18 0 0 3 -5 0 + 72 34 18 0 0 3 -4 0 + 72 36 18 0 0 4 -5 0 + 72 38 18 0 0 4 -4 0 + 72 40 18 0 0 3 -3 0 + 72 42 18 0 0 4 -3 0 + 72 44 18 0 0 3 -6 0 + 72 46 18 0 0 7 -4 3 + 72 46 18 0 0 7 -3 3 + 72 48 18 0 0 4 -6 0 + 72 50 18 0 0 5 -6 2 + 72 52 18 0 0 5 -5 0 + 72 54 18 0 0 5 -4 0 + 72 56 18 0 0 6 -5 2 + 72 58 18 0 0 6 -3 0 + 72 60 18 0 0 5 -3 0 + 72 62 18 0 0 6 -4 0 + 73 0 19 0 0 -5 3 0 + 73 2 19 0 0 -6 4 0 + 73 4 19 0 0 -6 3 0 + 73 6 19 0 0 -5 4 0 + 73 8 19 0 0 -5 5 0 + 73 10 19 0 0 -6 5 2 + 73 12 19 0 0 -5 6 2 + 73 14 19 0 0 -4 4 0 + 73 16 19 0 0 -4 3 0 + 73 18 19 0 0 -3 3 0 + 73 20 19 0 0 -4 7 3 + 73 20 19 0 0 -3 7 3 + 73 22 19 0 0 -4 6 0 + 73 24 19 0 0 -4 5 0 + 73 26 19 0 0 -3 4 0 + 73 28 19 0 0 -3 5 0 + 73 30 19 0 0 -2 3 0 + 73 32 19 0 0 -2 2 0 + 73 34 19 0 0 -1 1 0 + 73 36 19 0 0 -1 0 0 + 73 38 19 0 0 -2 1 0 + 73 40 19 0 0 -4 0 0 + 73 42 19 0 0 -3 0 0 + 73 44 19 0 0 -4 1 0 + 73 46 19 0 0 -5 0 0 + 73 48 19 0 0 -6 1 2 + 73 50 19 0 0 -5 1 0 + 73 52 19 0 0 -3 1 0 + 73 54 19 0 0 -3 2 0 + 73 56 19 0 0 -4 2 0 + 73 58 19 0 0 -5 2 0 + 73 60 19 0 0 -7 3 3 + 73 60 19 0 0 -7 4 3 + 73 62 19 0 0 -6 2 0 + 74 0 19 0 0 -1 -3 0 + 74 2 19 0 0 -2 -2 0 + 74 4 19 0 0 -2 -3 0 + 74 6 19 0 0 -2 -4 0 + 74 8 19 0 0 -4 -1 0 + 74 10 19 0 0 -3 -3 0 + 74 12 19 0 0 -3 -4 3 + 74 12 19 0 0 -4 -3 3 + 74 14 19 0 0 -4 -2 0 + 74 16 19 0 0 -5 -1 2 + 74 18 19 0 0 -3 -2 0 + 74 20 19 0 0 -3 -1 0 + 74 22 19 0 0 -2 -1 0 + 74 24 19 0 0 -1 -2 0 + 74 26 19 0 0 -1 -1 0 + 74 28 19 0 0 -2 0 0 + 74 30 19 0 0 0 -3 0 + 74 32 19 0 0 1 -3 0 + 74 34 19 0 0 0 -2 0 + 74 36 19 0 0 0 0 0 + 74 38 19 0 0 0 -1 0 + 74 40 19 0 0 1 -2 4 + 74 42 19 0 0 2 -4 0 + 74 44 19 0 0 1 -4 0 + 74 46 19 0 0 2 -5 0 + 74 48 19 0 0 2 -6 0 + 74 50 19 0 0 1 -5 0 + 74 52 19 0 0 1 -6 2 + 74 54 19 0 0 -1 -4 0 + 74 56 19 0 0 0 -5 0 + 74 58 19 0 0 0 -4 0 + 74 62 19 0 0 -1 -5 2 + 75 0 19 0 0 4 -2 0 + 75 2 19 0 0 4 -3 0 + 75 4 19 0 0 5 -3 0 + 75 6 19 0 0 4 -4 0 + 75 8 19 0 0 6 -3 0 + 75 10 19 0 0 3 -4 0 + 75 12 19 0 0 4 -5 0 + 75 14 19 0 0 6 -2 0 + 75 16 19 0 0 7 -4 3 + 75 16 19 0 0 7 -3 3 + 75 18 19 0 0 6 -4 0 + 75 20 19 0 0 5 -4 0 + 75 22 19 0 0 6 -5 2 + 75 24 19 0 0 5 -5 0 + 75 26 19 0 0 5 -6 2 + 75 28 19 0 0 4 -6 0 + 75 30 19 0 0 3 -5 0 + 75 32 19 0 0 3 -6 0 + 75 34 19 0 0 3 -7 3 + 75 34 19 0 0 4 -7 3 + 75 36 19 0 0 1 -1 0 + 75 38 19 0 0 2 -2 0 + 75 40 19 0 0 2 -3 0 + 75 42 19 0 0 3 -3 0 + 75 44 19 0 0 1 0 0 + 75 46 19 0 0 4 -1 0 + 75 48 19 0 0 4 0 0 + 75 50 19 0 0 5 0 0 + 75 52 19 0 0 3 -1 0 + 75 54 19 0 0 2 -1 0 + 75 56 19 0 0 3 -2 0 + 75 58 19 0 0 5 -2 0 + 75 60 19 0 0 6 -1 2 + 75 62 19 0 0 5 -1 0 + 76 0 19 0 0 3 2 0 + 76 0 19 0 0 -3 0 0 + 76 0 19 0 0 -2 0 0 + 76 0 19 0 0 -1 0 0 + 76 0 19 0 0 0 0 0 + 76 0 19 0 0 2 0 0 + 76 0 19 0 0 3 0 0 + 76 2 19 0 0 2 2 0 + 76 4 19 0 0 3 1 0 + 76 6 19 0 0 4 2 0 + 76 8 19 0 0 -4 0 0 + 76 10 19 0 0 5 1 2 + 76 12 19 0 0 4 1 0 + 76 14 19 0 0 -5 0 0 + 76 16 19 0 0 2 1 0 + 76 18 19 0 0 1 1 0 + 76 20 19 0 0 1 2 0 + 76 22 19 0 0 0 2 0 + 76 24 19 0 0 0 1 0 + 76 26 19 0 0 -1 2 0 + 76 28 19 0 0 -1 3 0 + 76 30 19 0 0 -2 4 4 + 76 32 19 0 0 -2 5 0 + 76 34 19 0 0 -1 4 0 + 76 36 19 0 0 -1 5 0 + 76 38 19 0 0 0 4 0 + 76 40 19 0 0 0 3 0 + 76 42 19 0 0 1 3 0 + 76 44 19 0 0 -3 6 0 + 76 46 19 0 0 3 4 3 + 76 46 19 0 0 4 3 3 + 76 48 19 0 0 -2 6 0 + 76 50 19 0 0 -1 6 2 + 76 52 19 0 0 0 5 0 + 76 54 19 0 0 1 4 0 + 76 56 19 0 0 1 5 2 + 76 58 19 0 0 3 3 0 + 76 60 19 0 0 2 3 0 + 76 62 19 0 0 2 4 0 + 77 0 20 0 0 -2 -3 0 + 77 2 20 0 0 -2 -4 0 + 77 4 20 0 0 -3 -3 0 + 77 6 20 0 0 -1 -4 0 + 77 8 20 0 0 0 -5 0 + 77 10 20 0 0 -1 -5 2 + 77 12 20 0 0 1 -6 2 + 77 14 20 0 0 0 -4 0 + 77 16 20 0 0 -1 -3 0 + 77 18 20 0 0 0 -3 0 + 77 20 20 0 0 3 -7 3 + 77 20 20 0 0 4 -7 3 + 77 22 20 0 0 2 -6 0 + 77 24 20 0 0 1 -5 0 + 77 26 20 0 0 1 -4 0 + 77 28 20 0 0 2 -5 0 + 77 30 20 0 0 1 -3 0 + 77 32 20 0 0 0 -2 0 + 77 34 20 0 0 0 -1 0 + 77 36 20 0 0 -1 0 0 + 77 38 20 0 0 -1 -1 0 + 77 40 20 0 0 -4 0 0 + 77 42 20 0 0 -3 0 0 + 77 44 20 0 0 -3 -1 0 + 77 46 20 0 0 -5 0 0 + 77 48 20 0 0 -5 -1 2 + 77 50 20 0 0 -4 -1 0 + 77 52 20 0 0 -2 -1 0 + 77 54 20 0 0 -1 -2 0 + 77 56 20 0 0 -2 -2 0 + 77 58 20 0 0 -3 -2 0 + 77 60 20 0 0 -4 -3 3 + 77 60 20 0 0 -3 -4 3 + 77 62 20 0 0 -4 -2 0 + 78 0 20 0 0 -4 3 0 + 78 2 20 0 0 -4 2 0 + 78 4 20 0 0 -5 3 0 + 78 6 20 0 0 -6 4 0 + 78 8 20 0 0 -5 1 0 + 78 10 20 0 0 -6 3 0 + 78 12 20 0 0 -7 4 3 + 78 12 20 0 0 -7 3 3 + 78 14 20 0 0 -6 2 0 + 78 16 20 0 0 -6 1 2 + 78 18 20 0 0 -5 2 0 + 78 20 20 0 0 -4 1 0 + 78 22 20 0 0 -3 1 0 + 78 24 20 0 0 -3 2 0 + 78 26 20 0 0 -2 1 0 + 78 28 20 0 0 -2 0 0 + 78 30 20 0 0 -3 3 0 + 78 32 20 0 0 -2 3 0 + 78 34 20 0 0 -2 2 0 + 78 36 20 0 0 0 0 0 + 78 38 20 0 0 -1 1 0 + 78 40 20 0 0 -1 2 4 + 78 42 20 0 0 -2 4 0 + 78 44 20 0 0 -3 4 0 + 78 46 20 0 0 -3 5 0 + 78 48 20 0 0 -4 6 0 + 78 50 20 0 0 -4 5 0 + 78 52 20 0 0 -5 6 2 + 78 54 20 0 0 -5 4 0 + 78 56 20 0 0 -5 5 0 + 78 58 20 0 0 -4 4 0 + 78 62 20 0 0 -6 5 2 + 79 0 20 0 0 2 2 0 + 79 2 20 0 0 1 3 0 + 79 4 20 0 0 2 3 0 + 79 6 20 0 0 0 4 0 + 79 8 20 0 0 3 3 0 + 79 10 20 0 0 -1 4 0 + 79 12 20 0 0 -1 5 0 + 79 14 20 0 0 4 2 0 + 79 16 20 0 0 3 4 3 + 79 16 20 0 0 4 3 3 + 79 18 20 0 0 2 4 0 + 79 20 20 0 0 1 4 0 + 79 22 20 0 0 1 5 2 + 79 24 20 0 0 0 5 0 + 79 26 20 0 0 -1 6 2 + 79 28 20 0 0 -2 6 0 + 79 30 20 0 0 -2 5 0 + 79 32 20 0 0 -3 6 0 + 79 34 20 0 0 -4 7 3 + 79 34 20 0 0 -3 7 3 + 79 36 20 0 0 0 1 0 + 79 38 20 0 0 0 2 0 + 79 40 20 0 0 -1 3 0 + 79 42 20 0 0 0 3 0 + 79 44 20 0 0 1 0 0 + 79 46 20 0 0 3 1 0 + 79 48 20 0 0 4 0 0 + 79 50 20 0 0 5 0 0 + 79 52 20 0 0 2 1 0 + 79 54 20 0 0 1 1 0 + 79 56 20 0 0 1 2 0 + 79 58 20 0 0 3 2 0 + 79 60 20 0 0 5 1 2 + 79 62 20 0 0 4 1 0 + 80 0 20 0 0 5 -2 0 + 80 0 20 0 0 -3 0 0 + 80 0 20 0 0 -2 0 0 + 80 0 20 0 0 -1 0 0 + 80 0 20 0 0 0 0 0 + 80 0 20 0 0 2 0 0 + 80 0 20 0 0 3 0 0 + 80 2 20 0 0 4 -2 0 + 80 4 20 0 0 4 -1 0 + 80 6 20 0 0 6 -2 0 + 80 8 20 0 0 -4 0 0 + 80 10 20 0 0 6 -1 2 + 80 12 20 0 0 5 -1 0 + 80 14 20 0 0 -5 0 0 + 80 16 20 0 0 3 -1 0 + 80 18 20 0 0 2 -1 0 + 80 20 20 0 0 3 -2 0 + 80 22 20 0 0 2 -2 0 + 80 24 20 0 0 1 -1 0 + 80 26 20 0 0 1 -2 0 + 80 28 20 0 0 2 -3 0 + 80 30 20 0 0 2 -4 4 + 80 32 20 0 0 3 -5 0 + 80 34 20 0 0 3 -4 0 + 80 36 20 0 0 4 -5 0 + 80 38 20 0 0 4 -4 0 + 80 40 20 0 0 3 -3 0 + 80 42 20 0 0 4 -3 0 + 80 44 20 0 0 3 -6 0 + 80 46 20 0 0 7 -4 3 + 80 46 20 0 0 7 -3 3 + 80 48 20 0 0 4 -6 0 + 80 50 20 0 0 5 -6 2 + 80 52 20 0 0 5 -5 0 + 80 54 20 0 0 5 -4 0 + 80 56 20 0 0 6 -5 2 + 80 58 20 0 0 6 -3 0 + 80 60 20 0 0 5 -3 0 + 80 62 20 0 0 6 -4 0 + 81 0 21 0 0 -5 3 0 + 81 2 21 0 0 -6 4 0 + 81 4 21 0 0 -6 3 0 + 81 6 21 0 0 -5 4 0 + 81 8 21 0 0 -5 5 0 + 81 10 21 0 0 -6 5 2 + 81 12 21 0 0 -5 6 2 + 81 14 21 0 0 -4 4 0 + 81 16 21 0 0 -4 3 0 + 81 18 21 0 0 -3 3 0 + 81 20 21 0 0 -4 7 3 + 81 20 21 0 0 -3 7 3 + 81 22 21 0 0 -4 6 0 + 81 24 21 0 0 -4 5 0 + 81 26 21 0 0 -3 4 0 + 81 28 21 0 0 -3 5 0 + 81 30 21 0 0 -2 3 0 + 81 32 21 0 0 -2 2 0 + 81 34 21 0 0 -1 1 0 + 81 36 21 0 0 -1 0 0 + 81 38 21 0 0 -2 1 0 + 81 40 21 0 0 -4 0 0 + 81 42 21 0 0 -3 0 0 + 81 44 21 0 0 -4 1 0 + 81 46 21 0 0 -5 0 0 + 81 48 21 0 0 -6 1 2 + 81 50 21 0 0 -5 1 0 + 81 52 21 0 0 -3 1 0 + 81 54 21 0 0 -3 2 0 + 81 56 21 0 0 -4 2 0 + 81 58 21 0 0 -5 2 0 + 81 60 21 0 0 -7 3 3 + 81 60 21 0 0 -7 4 3 + 81 62 21 0 0 -6 2 0 + 82 0 21 0 0 -1 -3 0 + 82 2 21 0 0 -2 -2 0 + 82 4 21 0 0 -2 -3 0 + 82 6 21 0 0 -2 -4 0 + 82 8 21 0 0 -4 -1 0 + 82 10 21 0 0 -3 -3 0 + 82 12 21 0 0 -3 -4 3 + 82 12 21 0 0 -4 -3 3 + 82 14 21 0 0 -4 -2 0 + 82 16 21 0 0 -5 -1 2 + 82 18 21 0 0 -3 -2 0 + 82 20 21 0 0 -3 -1 0 + 82 22 21 0 0 -2 -1 0 + 82 24 21 0 0 -1 -2 0 + 82 26 21 0 0 -1 -1 0 + 82 28 21 0 0 -2 0 0 + 82 30 21 0 0 0 -3 0 + 82 32 21 0 0 1 -3 0 + 82 34 21 0 0 0 -2 0 + 82 36 21 0 0 0 0 0 + 82 38 21 0 0 0 -1 0 + 82 40 21 0 0 1 -2 4 + 82 42 21 0 0 2 -4 0 + 82 44 21 0 0 1 -4 0 + 82 46 21 0 0 2 -5 0 + 82 48 21 0 0 2 -6 0 + 82 50 21 0 0 1 -5 0 + 82 52 21 0 0 1 -6 2 + 82 54 21 0 0 -1 -4 0 + 82 56 21 0 0 0 -5 0 + 82 58 21 0 0 0 -4 0 + 82 62 21 0 0 -1 -5 2 + 83 0 21 0 0 4 -2 0 + 83 2 21 0 0 4 -3 0 + 83 4 21 0 0 5 -3 0 + 83 6 21 0 0 4 -4 0 + 83 8 21 0 0 6 -3 0 + 83 10 21 0 0 3 -4 0 + 83 12 21 0 0 4 -5 0 + 83 14 21 0 0 6 -2 0 + 83 16 21 0 0 7 -4 3 + 83 16 21 0 0 7 -3 3 + 83 18 21 0 0 6 -4 0 + 83 20 21 0 0 5 -4 0 + 83 22 21 0 0 6 -5 2 + 83 24 21 0 0 5 -5 0 + 83 26 21 0 0 5 -6 2 + 83 28 21 0 0 4 -6 0 + 83 30 21 0 0 3 -5 0 + 83 32 21 0 0 3 -6 0 + 83 34 21 0 0 3 -7 3 + 83 34 21 0 0 4 -7 3 + 83 36 21 0 0 1 -1 0 + 83 38 21 0 0 2 -2 0 + 83 40 21 0 0 2 -3 0 + 83 42 21 0 0 3 -3 0 + 83 44 21 0 0 1 0 0 + 83 46 21 0 0 4 -1 0 + 83 48 21 0 0 4 0 0 + 83 50 21 0 0 5 0 0 + 83 52 21 0 0 3 -1 0 + 83 54 21 0 0 2 -1 0 + 83 56 21 0 0 3 -2 0 + 83 58 21 0 0 5 -2 0 + 83 60 21 0 0 6 -1 2 + 83 62 21 0 0 5 -1 0 + 84 0 21 0 0 3 2 0 + 84 0 21 0 0 -3 0 0 + 84 0 21 0 0 -2 0 0 + 84 0 21 0 0 -1 0 0 + 84 0 21 0 0 0 0 0 + 84 0 21 0 0 2 0 0 + 84 0 21 0 0 3 0 0 + 84 2 21 0 0 2 2 0 + 84 4 21 0 0 3 1 0 + 84 6 21 0 0 4 2 0 + 84 8 21 0 0 -4 0 0 + 84 10 21 0 0 5 1 2 + 84 12 21 0 0 4 1 0 + 84 14 21 0 0 -5 0 0 + 84 16 21 0 0 2 1 0 + 84 18 21 0 0 1 1 0 + 84 20 21 0 0 1 2 0 + 84 22 21 0 0 0 2 0 + 84 24 21 0 0 0 1 0 + 84 26 21 0 0 -1 2 0 + 84 28 21 0 0 -1 3 0 + 84 30 21 0 0 -2 4 4 + 84 32 21 0 0 -2 5 0 + 84 34 21 0 0 -1 4 0 + 84 36 21 0 0 -1 5 0 + 84 38 21 0 0 0 4 0 + 84 40 21 0 0 0 3 0 + 84 42 21 0 0 1 3 0 + 84 44 21 0 0 -3 6 0 + 84 46 21 0 0 3 4 3 + 84 46 21 0 0 4 3 3 + 84 48 21 0 0 -2 6 0 + 84 50 21 0 0 -1 6 2 + 84 52 21 0 0 0 5 0 + 84 54 21 0 0 1 4 0 + 84 56 21 0 0 1 5 2 + 84 58 21 0 0 3 3 0 + 84 60 21 0 0 2 3 0 + 84 62 21 0 0 2 4 0 + 85 0 22 0 0 -2 -3 0 + 85 2 22 0 0 -2 -4 0 + 85 4 22 0 0 -3 -3 0 + 85 6 22 0 0 -1 -4 0 + 85 8 22 0 0 0 -5 0 + 85 10 22 0 0 -1 -5 2 + 85 12 22 0 0 1 -6 2 + 85 14 22 0 0 0 -4 0 + 85 16 22 0 0 -1 -3 0 + 85 18 22 0 0 0 -3 0 + 85 20 22 0 0 3 -7 3 + 85 20 22 0 0 4 -7 3 + 85 22 22 0 0 2 -6 0 + 85 24 22 0 0 1 -5 0 + 85 26 22 0 0 1 -4 0 + 85 28 22 0 0 2 -5 0 + 85 30 22 0 0 1 -3 0 + 85 32 22 0 0 0 -2 0 + 85 34 22 0 0 0 -1 0 + 85 36 22 0 0 -1 0 0 + 85 38 22 0 0 -1 -1 0 + 85 40 22 0 0 -4 0 0 + 85 42 22 0 0 -3 0 0 + 85 44 22 0 0 -3 -1 0 + 85 46 22 0 0 -5 0 0 + 85 48 22 0 0 -5 -1 2 + 85 50 22 0 0 -4 -1 0 + 85 52 22 0 0 -2 -1 0 + 85 54 22 0 0 -1 -2 0 + 85 56 22 0 0 -2 -2 0 + 85 58 22 0 0 -3 -2 0 + 85 60 22 0 0 -4 -3 3 + 85 60 22 0 0 -3 -4 3 + 85 62 22 0 0 -4 -2 0 + 86 0 22 0 0 -4 3 0 + 86 2 22 0 0 -4 2 0 + 86 4 22 0 0 -5 3 0 + 86 6 22 0 0 -6 4 0 + 86 8 22 0 0 -5 1 0 + 86 10 22 0 0 -6 3 0 + 86 12 22 0 0 -7 4 3 + 86 12 22 0 0 -7 3 3 + 86 14 22 0 0 -6 2 0 + 86 16 22 0 0 -6 1 2 + 86 18 22 0 0 -5 2 0 + 86 20 22 0 0 -4 1 0 + 86 22 22 0 0 -3 1 0 + 86 24 22 0 0 -3 2 0 + 86 26 22 0 0 -2 1 0 + 86 28 22 0 0 -2 0 0 + 86 30 22 0 0 -3 3 0 + 86 32 22 0 0 -2 3 0 + 86 34 22 0 0 -2 2 0 + 86 36 22 0 0 0 0 0 + 86 38 22 0 0 -1 1 0 + 86 40 22 0 0 -1 2 4 + 86 42 22 0 0 -2 4 0 + 86 44 22 0 0 -3 4 0 + 86 46 22 0 0 -3 5 0 + 86 48 22 0 0 -4 6 0 + 86 50 22 0 0 -4 5 0 + 86 52 22 0 0 -5 6 2 + 86 54 22 0 0 -5 4 0 + 86 56 22 0 0 -5 5 0 + 86 58 22 0 0 -4 4 0 + 86 62 22 0 0 -6 5 2 + 87 0 22 0 0 2 2 0 + 87 2 22 0 0 1 3 0 + 87 4 22 0 0 2 3 0 + 87 6 22 0 0 0 4 0 + 87 8 22 0 0 3 3 0 + 87 10 22 0 0 -1 4 0 + 87 12 22 0 0 -1 5 0 + 87 14 22 0 0 4 2 0 + 87 16 22 0 0 3 4 3 + 87 16 22 0 0 4 3 3 + 87 18 22 0 0 2 4 0 + 87 20 22 0 0 1 4 0 + 87 22 22 0 0 1 5 2 + 87 24 22 0 0 0 5 0 + 87 26 22 0 0 -1 6 2 + 87 28 22 0 0 -2 6 0 + 87 30 22 0 0 -2 5 0 + 87 32 22 0 0 -3 6 0 + 87 34 22 0 0 -4 7 3 + 87 34 22 0 0 -3 7 3 + 87 36 22 0 0 0 1 0 + 87 38 22 0 0 0 2 0 + 87 40 22 0 0 -1 3 0 + 87 42 22 0 0 0 3 0 + 87 44 22 0 0 1 0 0 + 87 46 22 0 0 3 1 0 + 87 48 22 0 0 4 0 0 + 87 50 22 0 0 5 0 0 + 87 52 22 0 0 2 1 0 + 87 54 22 0 0 1 1 0 + 87 56 22 0 0 1 2 0 + 87 58 22 0 0 3 2 0 + 87 60 22 0 0 5 1 2 + 87 62 22 0 0 4 1 0 + 88 0 22 0 0 5 -2 0 + 88 0 22 0 0 -3 0 0 + 88 0 22 0 0 -2 0 0 + 88 0 22 0 0 -1 0 0 + 88 0 22 0 0 0 0 0 + 88 0 22 0 0 2 0 0 + 88 0 22 0 0 3 0 0 + 88 2 22 0 0 4 -2 0 + 88 4 22 0 0 4 -1 0 + 88 6 22 0 0 6 -2 0 + 88 8 22 0 0 -4 0 0 + 88 10 22 0 0 6 -1 2 + 88 12 22 0 0 5 -1 0 + 88 14 22 0 0 -5 0 0 + 88 16 22 0 0 3 -1 0 + 88 18 22 0 0 2 -1 0 + 88 20 22 0 0 3 -2 0 + 88 22 22 0 0 2 -2 0 + 88 24 22 0 0 1 -1 0 + 88 26 22 0 0 1 -2 0 + 88 28 22 0 0 2 -3 0 + 88 30 22 0 0 2 -4 4 + 88 32 22 0 0 3 -5 0 + 88 34 22 0 0 3 -4 0 + 88 36 22 0 0 4 -5 0 + 88 38 22 0 0 4 -4 0 + 88 40 22 0 0 3 -3 0 + 88 42 22 0 0 4 -3 0 + 88 44 22 0 0 3 -6 0 + 88 46 22 0 0 7 -4 3 + 88 46 22 0 0 7 -3 3 + 88 48 22 0 0 4 -6 0 + 88 50 22 0 0 5 -6 2 + 88 52 22 0 0 5 -5 0 + 88 54 22 0 0 5 -4 0 + 88 56 22 0 0 6 -5 2 + 88 58 22 0 0 6 -3 0 + 88 60 22 0 0 5 -3 0 + 88 62 22 0 0 6 -4 0 + 89 0 23 0 0 -5 3 0 + 89 2 23 0 0 -6 4 0 + 89 4 23 0 0 -6 3 0 + 89 6 23 0 0 -5 4 0 + 89 8 23 0 0 -5 5 0 + 89 10 23 0 0 -6 5 2 + 89 12 23 0 0 -5 6 2 + 89 14 23 0 0 -4 4 0 + 89 16 23 0 0 -4 3 0 + 89 18 23 0 0 -3 3 0 + 89 20 23 0 0 -4 7 3 + 89 20 23 0 0 -3 7 3 + 89 22 23 0 0 -4 6 0 + 89 24 23 0 0 -4 5 0 + 89 26 23 0 0 -3 4 0 + 89 28 23 0 0 -3 5 0 + 89 30 23 0 0 -2 3 0 + 89 32 23 0 0 -2 2 0 + 89 34 23 0 0 -1 1 0 + 89 36 23 0 0 -1 0 0 + 89 38 23 0 0 -2 1 0 + 89 40 23 0 0 -4 0 0 + 89 42 23 0 0 -3 0 0 + 89 44 23 0 0 -4 1 0 + 89 46 23 0 0 -5 0 0 + 89 48 23 0 0 -6 1 2 + 89 50 23 0 0 -5 1 0 + 89 52 23 0 0 -3 1 0 + 89 54 23 0 0 -3 2 0 + 89 56 23 0 0 -4 2 0 + 89 58 23 0 0 -5 2 0 + 89 60 23 0 0 -7 3 3 + 89 60 23 0 0 -7 4 3 + 89 62 23 0 0 -6 2 0 + 90 0 23 0 0 -1 -3 0 + 90 2 23 0 0 -2 -2 0 + 90 4 23 0 0 -2 -3 0 + 90 6 23 0 0 -2 -4 0 + 90 8 23 0 0 -4 -1 0 + 90 10 23 0 0 -3 -3 0 + 90 12 23 0 0 -3 -4 3 + 90 12 23 0 0 -4 -3 3 + 90 14 23 0 0 -4 -2 0 + 90 16 23 0 0 -5 -1 2 + 90 18 23 0 0 -3 -2 0 + 90 20 23 0 0 -3 -1 0 + 90 22 23 0 0 -2 -1 0 + 90 24 23 0 0 -1 -2 0 + 90 26 23 0 0 -1 -1 0 + 90 28 23 0 0 -2 0 0 + 90 30 23 0 0 0 -3 0 + 90 32 23 0 0 1 -3 0 + 90 34 23 0 0 0 -2 0 + 90 36 23 0 0 0 0 0 + 90 38 23 0 0 0 -1 0 + 90 40 23 0 0 1 -2 4 + 90 42 23 0 0 2 -4 0 + 90 44 23 0 0 1 -4 0 + 90 46 23 0 0 2 -5 0 + 90 48 23 0 0 2 -6 0 + 90 50 23 0 0 1 -5 0 + 90 52 23 0 0 1 -6 2 + 90 54 23 0 0 -1 -4 0 + 90 56 23 0 0 0 -5 0 + 90 58 23 0 0 0 -4 0 + 90 62 23 0 0 -1 -5 2 + 91 0 23 0 0 4 -2 0 + 91 2 23 0 0 4 -3 0 + 91 4 23 0 0 5 -3 0 + 91 6 23 0 0 4 -4 0 + 91 8 23 0 0 6 -3 0 + 91 10 23 0 0 3 -4 0 + 91 12 23 0 0 4 -5 0 + 91 14 23 0 0 6 -2 0 + 91 16 23 0 0 7 -4 3 + 91 16 23 0 0 7 -3 3 + 91 18 23 0 0 6 -4 0 + 91 20 23 0 0 5 -4 0 + 91 22 23 0 0 6 -5 2 + 91 24 23 0 0 5 -5 0 + 91 26 23 0 0 5 -6 2 + 91 28 23 0 0 4 -6 0 + 91 30 23 0 0 3 -5 0 + 91 32 23 0 0 3 -6 0 + 91 34 23 0 0 3 -7 3 + 91 34 23 0 0 4 -7 3 + 91 36 23 0 0 1 -1 0 + 91 38 23 0 0 2 -2 0 + 91 40 23 0 0 2 -3 0 + 91 42 23 0 0 3 -3 0 + 91 44 23 0 0 1 0 0 + 91 46 23 0 0 4 -1 0 + 91 48 23 0 0 4 0 0 + 91 50 23 0 0 5 0 0 + 91 52 23 0 0 3 -1 0 + 91 54 23 0 0 2 -1 0 + 91 56 23 0 0 3 -2 0 + 91 58 23 0 0 5 -2 0 + 91 60 23 0 0 6 -1 2 + 91 62 23 0 0 5 -1 0 + 92 0 23 0 0 3 2 0 + 92 0 23 0 0 -3 0 0 + 92 0 23 0 0 -2 0 0 + 92 0 23 0 0 -1 0 0 + 92 0 23 0 0 0 0 0 + 92 0 23 0 0 2 0 0 + 92 0 23 0 0 3 0 0 + 92 2 23 0 0 2 2 0 + 92 4 23 0 0 3 1 0 + 92 6 23 0 0 4 2 0 + 92 8 23 0 0 -4 0 0 + 92 10 23 0 0 5 1 2 + 92 12 23 0 0 4 1 0 + 92 14 23 0 0 -5 0 0 + 92 16 23 0 0 2 1 0 + 92 18 23 0 0 1 1 0 + 92 20 23 0 0 1 2 0 + 92 22 23 0 0 0 2 0 + 92 24 23 0 0 0 1 0 + 92 26 23 0 0 -1 2 0 + 92 28 23 0 0 -1 3 0 + 92 30 23 0 0 -2 4 4 + 92 32 23 0 0 -2 5 0 + 92 34 23 0 0 -1 4 0 + 92 36 23 0 0 -1 5 0 + 92 38 23 0 0 0 4 0 + 92 40 23 0 0 0 3 0 + 92 42 23 0 0 1 3 0 + 92 44 23 0 0 -3 6 0 + 92 46 23 0 0 3 4 3 + 92 46 23 0 0 4 3 3 + 92 48 23 0 0 -2 6 0 + 92 50 23 0 0 -1 6 2 + 92 52 23 0 0 0 5 0 + 92 54 23 0 0 1 4 0 + 92 56 23 0 0 1 5 2 + 92 58 23 0 0 3 3 0 + 92 60 23 0 0 2 3 0 + 92 62 23 0 0 2 4 0 + 93 0 24 0 0 -2 -3 0 + 93 2 24 0 0 -2 -4 0 + 93 4 24 0 0 -3 -3 0 + 93 6 24 0 0 -1 -4 0 + 93 8 24 0 0 0 -5 0 + 93 10 24 0 0 -1 -5 2 + 93 12 24 0 0 1 -6 2 + 93 14 24 0 0 0 -4 0 + 93 16 24 0 0 -1 -3 0 + 93 18 24 0 0 0 -3 0 + 93 20 24 0 0 3 -7 3 + 93 20 24 0 0 4 -7 3 + 93 22 24 0 0 2 -6 0 + 93 24 24 0 0 1 -5 0 + 93 26 24 0 0 1 -4 0 + 93 28 24 0 0 2 -5 0 + 93 30 24 0 0 1 -3 0 + 93 32 24 0 0 0 -2 0 + 93 34 24 0 0 0 -1 0 + 93 36 24 0 0 -1 0 0 + 93 38 24 0 0 -1 -1 0 + 93 40 24 0 0 -4 0 0 + 93 42 24 0 0 -3 0 0 + 93 44 24 0 0 -3 -1 0 + 93 46 24 0 0 -5 0 0 + 93 48 24 0 0 -5 -1 2 + 93 50 24 0 0 -4 -1 0 + 93 52 24 0 0 -2 -1 0 + 93 54 24 0 0 -1 -2 0 + 93 56 24 0 0 -2 -2 0 + 93 58 24 0 0 -3 -2 0 + 93 60 24 0 0 -4 -3 3 + 93 60 24 0 0 -3 -4 3 + 93 62 24 0 0 -4 -2 0 + 94 0 24 0 0 -4 3 0 + 94 2 24 0 0 -4 2 0 + 94 4 24 0 0 -5 3 0 + 94 6 24 0 0 -6 4 0 + 94 8 24 0 0 -5 1 0 + 94 10 24 0 0 -6 3 0 + 94 12 24 0 0 -7 4 3 + 94 12 24 0 0 -7 3 3 + 94 14 24 0 0 -6 2 0 + 94 16 24 0 0 -6 1 2 + 94 18 24 0 0 -5 2 0 + 94 20 24 0 0 -4 1 0 + 94 22 24 0 0 -3 1 0 + 94 24 24 0 0 -3 2 0 + 94 26 24 0 0 -2 1 0 + 94 28 24 0 0 -2 0 0 + 94 30 24 0 0 -3 3 0 + 94 32 24 0 0 -2 3 0 + 94 34 24 0 0 -2 2 0 + 94 36 24 0 0 0 0 0 + 94 38 24 0 0 -1 1 0 + 94 40 24 0 0 -1 2 4 + 94 42 24 0 0 -2 4 0 + 94 44 24 0 0 -3 4 0 + 94 46 24 0 0 -3 5 0 + 94 48 24 0 0 -4 6 0 + 94 50 24 0 0 -4 5 0 + 94 52 24 0 0 -5 6 2 + 94 54 24 0 0 -5 4 0 + 94 56 24 0 0 -5 5 0 + 94 58 24 0 0 -4 4 0 + 94 62 24 0 0 -6 5 2 + 95 0 24 0 0 2 2 0 + 95 2 24 0 0 1 3 0 + 95 4 24 0 0 2 3 0 + 95 6 24 0 0 0 4 0 + 95 8 24 0 0 3 3 0 + 95 10 24 0 0 -1 4 0 + 95 12 24 0 0 -1 5 0 + 95 14 24 0 0 4 2 0 + 95 16 24 0 0 3 4 3 + 95 16 24 0 0 4 3 3 + 95 18 24 0 0 2 4 0 + 95 20 24 0 0 1 4 0 + 95 22 24 0 0 1 5 2 + 95 24 24 0 0 0 5 0 + 95 26 24 0 0 -1 6 2 + 95 28 24 0 0 -2 6 0 + 95 30 24 0 0 -2 5 0 + 95 32 24 0 0 -3 6 0 + 95 34 24 0 0 -4 7 3 + 95 34 24 0 0 -3 7 3 + 95 36 24 0 0 0 1 0 + 95 38 24 0 0 0 2 0 + 95 40 24 0 0 -1 3 0 + 95 42 24 0 0 0 3 0 + 95 44 24 0 0 1 0 0 + 95 46 24 0 0 3 1 0 + 95 48 24 0 0 4 0 0 + 95 50 24 0 0 5 0 0 + 95 52 24 0 0 2 1 0 + 95 54 24 0 0 1 1 0 + 95 56 24 0 0 1 2 0 + 95 58 24 0 0 3 2 0 + 95 60 24 0 0 5 1 2 + 95 62 24 0 0 4 1 0 + 96 0 24 0 0 5 -2 0 + 96 0 24 0 0 -3 0 0 + 96 0 24 0 0 -2 0 0 + 96 0 24 0 0 -1 0 0 + 96 0 24 0 0 0 0 0 + 96 0 24 0 0 2 0 0 + 96 0 24 0 0 3 0 0 + 96 2 24 0 0 4 -2 0 + 96 4 24 0 0 4 -1 0 + 96 6 24 0 0 6 -2 0 + 96 8 24 0 0 -4 0 0 + 96 10 24 0 0 6 -1 2 + 96 12 24 0 0 5 -1 0 + 96 14 24 0 0 -5 0 0 + 96 16 24 0 0 3 -1 0 + 96 18 24 0 0 2 -1 0 + 96 20 24 0 0 3 -2 0 + 96 22 24 0 0 2 -2 0 + 96 24 24 0 0 1 -1 0 + 96 26 24 0 0 1 -2 0 + 96 28 24 0 0 2 -3 0 + 96 30 24 0 0 2 -4 4 + 96 32 24 0 0 3 -5 0 + 96 34 24 0 0 3 -4 0 + 96 36 24 0 0 4 -5 0 + 96 38 24 0 0 4 -4 0 + 96 40 24 0 0 3 -3 0 + 96 42 24 0 0 4 -3 0 + 96 44 24 0 0 3 -6 0 + 96 46 24 0 0 7 -4 3 + 96 46 24 0 0 7 -3 3 + 96 48 24 0 0 4 -6 0 + 96 50 24 0 0 5 -6 2 + 96 52 24 0 0 5 -5 0 + 96 54 24 0 0 5 -4 0 + 96 56 24 0 0 6 -5 2 + 96 58 24 0 0 6 -3 0 + 96 60 24 0 0 5 -3 0 + 96 62 24 0 0 6 -4 0 + 97 0 25 0 0 -5 3 0 + 97 2 25 0 0 -6 4 0 + 97 4 25 0 0 -6 3 0 + 97 6 25 0 0 -5 4 0 + 97 8 25 0 0 -5 5 0 + 97 10 25 0 0 -6 5 2 + 97 12 25 0 0 -5 6 2 + 97 14 25 0 0 -4 4 0 + 97 16 25 0 0 -4 3 0 + 97 18 25 0 0 -3 3 0 + 97 20 25 0 0 -4 7 3 + 97 20 25 0 0 -3 7 3 + 97 22 25 0 0 -4 6 0 + 97 24 25 0 0 -4 5 0 + 97 26 25 0 0 -3 4 0 + 97 28 25 0 0 -3 5 0 + 97 30 25 0 0 -2 3 0 + 97 32 25 0 0 -2 2 0 + 97 34 25 0 0 -1 1 0 + 97 36 25 0 0 -1 0 0 + 97 38 25 0 0 -2 1 0 + 97 40 25 0 0 -4 0 0 + 97 42 25 0 0 -3 0 0 + 97 44 25 0 0 -4 1 0 + 97 46 25 0 0 -5 0 0 + 97 48 25 0 0 -6 1 2 + 97 50 25 0 0 -5 1 0 + 97 52 25 0 0 -3 1 0 + 97 54 25 0 0 -3 2 0 + 97 56 25 0 0 -4 2 0 + 97 58 25 0 0 -5 2 0 + 97 60 25 0 0 -7 3 3 + 97 60 25 0 0 -7 4 3 + 97 62 25 0 0 -6 2 0 + 98 0 25 0 0 -1 -3 0 + 98 2 25 0 0 -2 -2 0 + 98 4 25 0 0 -2 -3 0 + 98 6 25 0 0 -2 -4 0 + 98 8 25 0 0 -4 -1 0 + 98 10 25 0 0 -3 -3 0 + 98 12 25 0 0 -3 -4 3 + 98 12 25 0 0 -4 -3 3 + 98 14 25 0 0 -4 -2 0 + 98 16 25 0 0 -5 -1 2 + 98 18 25 0 0 -3 -2 0 + 98 20 25 0 0 -3 -1 0 + 98 22 25 0 0 -2 -1 0 + 98 24 25 0 0 -1 -2 0 + 98 26 25 0 0 -1 -1 0 + 98 28 25 0 0 -2 0 0 + 98 30 25 0 0 0 -3 0 + 98 32 25 0 0 1 -3 0 + 98 34 25 0 0 0 -2 0 + 98 36 25 0 0 0 0 0 + 98 38 25 0 0 0 -1 0 + 98 40 25 0 0 1 -2 4 + 98 42 25 0 0 2 -4 0 + 98 44 25 0 0 1 -4 0 + 98 46 25 0 0 2 -5 0 + 98 48 25 0 0 2 -6 0 + 98 50 25 0 0 1 -5 0 + 98 52 25 0 0 1 -6 2 + 98 54 25 0 0 -1 -4 0 + 98 56 25 0 0 0 -5 0 + 98 58 25 0 0 0 -4 0 + 98 62 25 0 0 -1 -5 2 + 99 0 25 0 0 4 -2 0 + 99 2 25 0 0 4 -3 0 + 99 4 25 0 0 5 -3 0 + 99 6 25 0 0 4 -4 0 + 99 8 25 0 0 6 -3 0 + 99 10 25 0 0 3 -4 0 + 99 12 25 0 0 4 -5 0 + 99 14 25 0 0 6 -2 0 + 99 16 25 0 0 7 -4 3 + 99 16 25 0 0 7 -3 3 + 99 18 25 0 0 6 -4 0 + 99 20 25 0 0 5 -4 0 + 99 22 25 0 0 6 -5 2 + 99 24 25 0 0 5 -5 0 + 99 26 25 0 0 5 -6 2 + 99 28 25 0 0 4 -6 0 + 99 30 25 0 0 3 -5 0 + 99 32 25 0 0 3 -6 0 + 99 34 25 0 0 3 -7 3 + 99 34 25 0 0 4 -7 3 + 99 36 25 0 0 1 -1 0 + 99 38 25 0 0 2 -2 0 + 99 40 25 0 0 2 -3 0 + 99 42 25 0 0 3 -3 0 + 99 44 25 0 0 1 0 0 + 99 46 25 0 0 4 -1 0 + 99 48 25 0 0 4 0 0 + 99 50 25 0 0 5 0 0 + 99 52 25 0 0 3 -1 0 + 99 54 25 0 0 2 -1 0 + 99 56 25 0 0 3 -2 0 + 99 58 25 0 0 5 -2 0 + 99 60 25 0 0 6 -1 2 + 99 62 25 0 0 5 -1 0 + 100 0 25 0 0 3 2 0 + 100 0 25 0 0 -3 0 0 + 100 0 25 0 0 -2 0 0 + 100 0 25 0 0 -1 0 0 + 100 0 25 0 0 0 0 0 + 100 0 25 0 0 2 0 0 + 100 0 25 0 0 3 0 0 + 100 2 25 0 0 2 2 0 + 100 4 25 0 0 3 1 0 + 100 6 25 0 0 4 2 0 + 100 8 25 0 0 -4 0 0 + 100 10 25 0 0 5 1 2 + 100 12 25 0 0 4 1 0 + 100 14 25 0 0 -5 0 0 + 100 16 25 0 0 2 1 0 + 100 18 25 0 0 1 1 0 + 100 20 25 0 0 1 2 0 + 100 22 25 0 0 0 2 0 + 100 24 25 0 0 0 1 0 + 100 26 25 0 0 -1 2 0 + 100 28 25 0 0 -1 3 0 + 100 30 25 0 0 -2 4 4 + 100 32 25 0 0 -2 5 0 + 100 34 25 0 0 -1 4 0 + 100 36 25 0 0 -1 5 0 + 100 38 25 0 0 0 4 0 + 100 40 25 0 0 0 3 0 + 100 42 25 0 0 1 3 0 + 100 44 25 0 0 -3 6 0 + 100 46 25 0 0 3 4 3 + 100 46 25 0 0 4 3 3 + 100 48 25 0 0 -2 6 0 + 100 50 25 0 0 -1 6 2 + 100 52 25 0 0 0 5 0 + 100 54 25 0 0 1 4 0 + 100 56 25 0 0 1 5 2 + 100 58 25 0 0 3 3 0 + 100 60 25 0 0 2 3 0 + 100 62 25 0 0 2 4 0 + 101 0 26 0 0 -2 -3 0 + 101 2 26 0 0 -2 -4 0 + 101 4 26 0 0 -3 -3 0 + 101 6 26 0 0 -1 -4 0 + 101 8 26 0 0 0 -5 0 + 101 10 26 0 0 -1 -5 2 + 101 12 26 0 0 1 -6 2 + 101 14 26 0 0 0 -4 0 + 101 16 26 0 0 -1 -3 0 + 101 18 26 0 0 0 -3 0 + 101 20 26 0 0 3 -7 3 + 101 20 26 0 0 4 -7 3 + 101 22 26 0 0 2 -6 0 + 101 24 26 0 0 1 -5 0 + 101 26 26 0 0 1 -4 0 + 101 28 26 0 0 2 -5 0 + 101 30 26 0 0 1 -3 0 + 101 32 26 0 0 0 -2 0 + 101 34 26 0 0 0 -1 0 + 101 36 26 0 0 -1 0 0 + 101 38 26 0 0 -1 -1 0 + 101 40 26 0 0 -4 0 0 + 101 42 26 0 0 -3 0 0 + 101 44 26 0 0 -3 -1 0 + 101 46 26 0 0 -5 0 0 + 101 48 26 0 0 -5 -1 2 + 101 50 26 0 0 -4 -1 0 + 101 52 26 0 0 -2 -1 0 + 101 54 26 0 0 -1 -2 0 + 101 56 26 0 0 -2 -2 0 + 101 58 26 0 0 -3 -2 0 + 101 60 26 0 0 -4 -3 3 + 101 60 26 0 0 -3 -4 3 + 101 62 26 0 0 -4 -2 0 + 102 0 26 0 0 -4 3 0 + 102 2 26 0 0 -4 2 0 + 102 4 26 0 0 -5 3 0 + 102 6 26 0 0 -6 4 0 + 102 8 26 0 0 -5 1 0 + 102 10 26 0 0 -6 3 0 + 102 12 26 0 0 -7 4 3 + 102 12 26 0 0 -7 3 3 + 102 14 26 0 0 -6 2 0 + 102 16 26 0 0 -6 1 2 + 102 18 26 0 0 -5 2 0 + 102 20 26 0 0 -4 1 0 + 102 22 26 0 0 -3 1 0 + 102 24 26 0 0 -3 2 0 + 102 26 26 0 0 -2 1 0 + 102 28 26 0 0 -2 0 0 + 102 30 26 0 0 -3 3 0 + 102 32 26 0 0 -2 3 0 + 102 34 26 0 0 -2 2 0 + 102 36 26 0 0 0 0 0 + 102 38 26 0 0 -1 1 0 + 102 40 26 0 0 -1 2 4 + 102 42 26 0 0 -2 4 0 + 102 44 26 0 0 -3 4 0 + 102 46 26 0 0 -3 5 0 + 102 48 26 0 0 -4 6 0 + 102 50 26 0 0 -4 5 0 + 102 52 26 0 0 -5 6 2 + 102 54 26 0 0 -5 4 0 + 102 56 26 0 0 -5 5 0 + 102 58 26 0 0 -4 4 0 + 102 62 26 0 0 -6 5 2 + 103 0 26 0 0 2 2 0 + 103 2 26 0 0 1 3 0 + 103 4 26 0 0 2 3 0 + 103 6 26 0 0 0 4 0 + 103 8 26 0 0 3 3 0 + 103 10 26 0 0 -1 4 0 + 103 12 26 0 0 -1 5 0 + 103 14 26 0 0 4 2 0 + 103 16 26 0 0 3 4 3 + 103 16 26 0 0 4 3 3 + 103 18 26 0 0 2 4 0 + 103 20 26 0 0 1 4 0 + 103 22 26 0 0 1 5 2 + 103 24 26 0 0 0 5 0 + 103 26 26 0 0 -1 6 2 + 103 28 26 0 0 -2 6 0 + 103 30 26 0 0 -2 5 0 + 103 32 26 0 0 -3 6 0 + 103 34 26 0 0 -4 7 3 + 103 34 26 0 0 -3 7 3 + 103 36 26 0 0 0 1 0 + 103 38 26 0 0 0 2 0 + 103 40 26 0 0 -1 3 0 + 103 42 26 0 0 0 3 0 + 103 44 26 0 0 1 0 0 + 103 46 26 0 0 3 1 0 + 103 48 26 0 0 4 0 0 + 103 50 26 0 0 5 0 0 + 103 52 26 0 0 2 1 0 + 103 54 26 0 0 1 1 0 + 103 56 26 0 0 1 2 0 + 103 58 26 0 0 3 2 0 + 103 60 26 0 0 5 1 2 + 103 62 26 0 0 4 1 0 + 104 0 26 0 0 5 -2 0 + 104 0 26 0 0 -3 0 0 + 104 0 26 0 0 -2 0 0 + 104 0 26 0 0 -1 0 0 + 104 0 26 0 0 0 0 0 + 104 0 26 0 0 2 0 0 + 104 0 26 0 0 3 0 0 + 104 2 26 0 0 4 -2 0 + 104 4 26 0 0 4 -1 0 + 104 6 26 0 0 6 -2 0 + 104 8 26 0 0 -4 0 0 + 104 10 26 0 0 6 -1 2 + 104 12 26 0 0 5 -1 0 + 104 14 26 0 0 -5 0 0 + 104 16 26 0 0 3 -1 0 + 104 18 26 0 0 2 -1 0 + 104 20 26 0 0 3 -2 0 + 104 22 26 0 0 2 -2 0 + 104 24 26 0 0 1 -1 0 + 104 26 26 0 0 1 -2 0 + 104 28 26 0 0 2 -3 0 + 104 30 26 0 0 2 -4 4 + 104 32 26 0 0 3 -5 0 + 104 34 26 0 0 3 -4 0 + 104 36 26 0 0 4 -5 0 + 104 38 26 0 0 4 -4 0 + 104 40 26 0 0 3 -3 0 + 104 42 26 0 0 4 -3 0 + 104 44 26 0 0 3 -6 0 + 104 46 26 0 0 7 -4 3 + 104 46 26 0 0 7 -3 3 + 104 48 26 0 0 4 -6 0 + 104 50 26 0 0 5 -6 2 + 104 52 26 0 0 5 -5 0 + 104 54 26 0 0 5 -4 0 + 104 56 26 0 0 6 -5 2 + 104 58 26 0 0 6 -3 0 + 104 60 26 0 0 5 -3 0 + 104 62 26 0 0 6 -4 0 + 105 0 27 0 0 -5 3 0 + 105 2 27 0 0 -6 4 0 + 105 4 27 0 0 -6 3 0 + 105 6 27 0 0 -5 4 0 + 105 8 27 0 0 -5 5 0 + 105 10 27 0 0 -6 5 2 + 105 12 27 0 0 -5 6 2 + 105 14 27 0 0 -4 4 0 + 105 16 27 0 0 -4 3 0 + 105 18 27 0 0 -3 3 0 + 105 20 27 0 0 -4 7 3 + 105 20 27 0 0 -3 7 3 + 105 22 27 0 0 -4 6 0 + 105 24 27 0 0 -4 5 0 + 105 26 27 0 0 -3 4 0 + 105 28 27 0 0 -3 5 0 + 105 30 27 0 0 -2 3 0 + 105 32 27 0 0 -2 2 0 + 105 34 27 0 0 -1 1 0 + 105 36 27 0 0 -1 0 0 + 105 38 27 0 0 -2 1 0 + 105 40 27 0 0 -4 0 0 + 105 42 27 0 0 -3 0 0 + 105 44 27 0 0 -4 1 0 + 105 46 27 0 0 -5 0 0 + 105 48 27 0 0 -6 1 2 + 105 50 27 0 0 -5 1 0 + 105 52 27 0 0 -3 1 0 + 105 54 27 0 0 -3 2 0 + 105 56 27 0 0 -4 2 0 + 105 58 27 0 0 -5 2 0 + 105 60 27 0 0 -7 3 3 + 105 60 27 0 0 -7 4 3 + 105 62 27 0 0 -6 2 0 + 106 0 27 0 0 -1 -3 0 + 106 2 27 0 0 -2 -2 0 + 106 4 27 0 0 -2 -3 0 + 106 6 27 0 0 -2 -4 0 + 106 8 27 0 0 -4 -1 0 + 106 10 27 0 0 -3 -3 0 + 106 12 27 0 0 -3 -4 3 + 106 12 27 0 0 -4 -3 3 + 106 14 27 0 0 -4 -2 0 + 106 16 27 0 0 -5 -1 2 + 106 18 27 0 0 -3 -2 0 + 106 20 27 0 0 -3 -1 0 + 106 22 27 0 0 -2 -1 0 + 106 24 27 0 0 -1 -2 0 + 106 26 27 0 0 -1 -1 0 + 106 28 27 0 0 -2 0 0 + 106 30 27 0 0 0 -3 0 + 106 32 27 0 0 1 -3 0 + 106 34 27 0 0 0 -2 0 + 106 36 27 0 0 0 0 0 + 106 38 27 0 0 0 -1 0 + 106 40 27 0 0 1 -2 4 + 106 42 27 0 0 2 -4 0 + 106 44 27 0 0 1 -4 0 + 106 46 27 0 0 2 -5 0 + 106 48 27 0 0 2 -6 0 + 106 50 27 0 0 1 -5 0 + 106 52 27 0 0 1 -6 2 + 106 54 27 0 0 -1 -4 0 + 106 56 27 0 0 0 -5 0 + 106 58 27 0 0 0 -4 0 + 106 62 27 0 0 -1 -5 2 + 107 0 27 0 0 4 -2 0 + 107 2 27 0 0 4 -3 0 + 107 4 27 0 0 5 -3 0 + 107 6 27 0 0 4 -4 0 + 107 8 27 0 0 6 -3 0 + 107 10 27 0 0 3 -4 0 + 107 12 27 0 0 4 -5 0 + 107 14 27 0 0 6 -2 0 + 107 16 27 0 0 7 -4 3 + 107 16 27 0 0 7 -3 3 + 107 18 27 0 0 6 -4 0 + 107 20 27 0 0 5 -4 0 + 107 22 27 0 0 6 -5 2 + 107 24 27 0 0 5 -5 0 + 107 26 27 0 0 5 -6 2 + 107 28 27 0 0 4 -6 0 + 107 30 27 0 0 3 -5 0 + 107 32 27 0 0 3 -6 0 + 107 34 27 0 0 3 -7 3 + 107 34 27 0 0 4 -7 3 + 107 36 27 0 0 1 -1 0 + 107 38 27 0 0 2 -2 0 + 107 40 27 0 0 2 -3 0 + 107 42 27 0 0 3 -3 0 + 107 44 27 0 0 1 0 0 + 107 46 27 0 0 4 -1 0 + 107 48 27 0 0 4 0 0 + 107 50 27 0 0 5 0 0 + 107 52 27 0 0 3 -1 0 + 107 54 27 0 0 2 -1 0 + 107 56 27 0 0 3 -2 0 + 107 58 27 0 0 5 -2 0 + 107 60 27 0 0 6 -1 2 + 107 62 27 0 0 5 -1 0 + 108 0 27 0 0 3 2 0 + 108 0 27 0 0 -3 0 0 + 108 0 27 0 0 -2 0 0 + 108 0 27 0 0 -1 0 0 + 108 0 27 0 0 0 0 0 + 108 0 27 0 0 2 0 0 + 108 0 27 0 0 3 0 0 + 108 2 27 0 0 2 2 0 + 108 4 27 0 0 3 1 0 + 108 6 27 0 0 4 2 0 + 108 8 27 0 0 -4 0 0 + 108 10 27 0 0 5 1 2 + 108 12 27 0 0 4 1 0 + 108 14 27 0 0 -5 0 0 + 108 16 27 0 0 2 1 0 + 108 18 27 0 0 1 1 0 + 108 20 27 0 0 1 2 0 + 108 22 27 0 0 0 2 0 + 108 24 27 0 0 0 1 0 + 108 26 27 0 0 -1 2 0 + 108 28 27 0 0 -1 3 0 + 108 30 27 0 0 -2 4 4 + 108 32 27 0 0 -2 5 0 + 108 34 27 0 0 -1 4 0 + 108 36 27 0 0 -1 5 0 + 108 38 27 0 0 0 4 0 + 108 40 27 0 0 0 3 0 + 108 42 27 0 0 1 3 0 + 108 44 27 0 0 -3 6 0 + 108 46 27 0 0 3 4 3 + 108 46 27 0 0 4 3 3 + 108 48 27 0 0 -2 6 0 + 108 50 27 0 0 -1 6 2 + 108 52 27 0 0 0 5 0 + 108 54 27 0 0 1 4 0 + 108 56 27 0 0 1 5 2 + 108 58 27 0 0 3 3 0 + 108 60 27 0 0 2 3 0 + 108 62 27 0 0 2 4 0 + 109 0 28 0 0 -2 -3 0 + 109 2 28 0 0 -2 -4 0 + 109 4 28 0 0 -3 -3 0 + 109 6 28 0 0 -1 -4 0 + 109 8 28 0 0 0 -5 0 + 109 10 28 0 0 -1 -5 2 + 109 12 28 0 0 1 -6 2 + 109 14 28 0 0 0 -4 0 + 109 16 28 0 0 -1 -3 0 + 109 18 28 0 0 0 -3 0 + 109 20 28 0 0 3 -7 3 + 109 20 28 0 0 4 -7 3 + 109 22 28 0 0 2 -6 0 + 109 24 28 0 0 1 -5 0 + 109 26 28 0 0 1 -4 0 + 109 28 28 0 0 2 -5 0 + 109 30 28 0 0 1 -3 0 + 109 32 28 0 0 0 -2 0 + 109 34 28 0 0 0 -1 0 + 109 36 28 0 0 -1 0 0 + 109 38 28 0 0 -1 -1 0 + 109 40 28 0 0 -4 0 0 + 109 42 28 0 0 -3 0 0 + 109 44 28 0 0 -3 -1 0 + 109 46 28 0 0 -5 0 0 + 109 48 28 0 0 -5 -1 2 + 109 50 28 0 0 -4 -1 0 + 109 52 28 0 0 -2 -1 0 + 109 54 28 0 0 -1 -2 0 + 109 56 28 0 0 -2 -2 0 + 109 58 28 0 0 -3 -2 0 + 109 60 28 0 0 -4 -3 3 + 109 60 28 0 0 -3 -4 3 + 109 62 28 0 0 -4 -2 0 + 110 0 28 0 0 -4 3 0 + 110 2 28 0 0 -4 2 0 + 110 4 28 0 0 -5 3 0 + 110 6 28 0 0 -6 4 0 + 110 8 28 0 0 -5 1 0 + 110 10 28 0 0 -6 3 0 + 110 12 28 0 0 -7 4 3 + 110 12 28 0 0 -7 3 3 + 110 14 28 0 0 -6 2 0 + 110 16 28 0 0 -6 1 2 + 110 18 28 0 0 -5 2 0 + 110 20 28 0 0 -4 1 0 + 110 22 28 0 0 -3 1 0 + 110 24 28 0 0 -3 2 0 + 110 26 28 0 0 -2 1 0 + 110 28 28 0 0 -2 0 0 + 110 30 28 0 0 -3 3 0 + 110 32 28 0 0 -2 3 0 + 110 34 28 0 0 -2 2 0 + 110 36 28 0 0 0 0 0 + 110 38 28 0 0 -1 1 0 + 110 40 28 0 0 -1 2 4 + 110 42 28 0 0 -2 4 0 + 110 44 28 0 0 -3 4 0 + 110 46 28 0 0 -3 5 0 + 110 48 28 0 0 -4 6 0 + 110 50 28 0 0 -4 5 0 + 110 52 28 0 0 -5 6 2 + 110 54 28 0 0 -5 4 0 + 110 56 28 0 0 -5 5 0 + 110 58 28 0 0 -4 4 0 + 110 62 28 0 0 -6 5 2 + 111 0 28 0 0 2 2 0 + 111 2 28 0 0 1 3 0 + 111 4 28 0 0 2 3 0 + 111 6 28 0 0 0 4 0 + 111 8 28 0 0 3 3 0 + 111 10 28 0 0 -1 4 0 + 111 12 28 0 0 -1 5 0 + 111 14 28 0 0 4 2 0 + 111 16 28 0 0 3 4 3 + 111 16 28 0 0 4 3 3 + 111 18 28 0 0 2 4 0 + 111 20 28 0 0 1 4 0 + 111 22 28 0 0 1 5 2 + 111 24 28 0 0 0 5 0 + 111 26 28 0 0 -1 6 2 + 111 28 28 0 0 -2 6 0 + 111 30 28 0 0 -2 5 0 + 111 32 28 0 0 -3 6 0 + 111 34 28 0 0 -4 7 3 + 111 34 28 0 0 -3 7 3 + 111 36 28 0 0 0 1 0 + 111 38 28 0 0 0 2 0 + 111 40 28 0 0 -1 3 0 + 111 42 28 0 0 0 3 0 + 111 44 28 0 0 1 0 0 + 111 46 28 0 0 3 1 0 + 111 48 28 0 0 4 0 0 + 111 50 28 0 0 5 0 0 + 111 52 28 0 0 2 1 0 + 111 54 28 0 0 1 1 0 + 111 56 28 0 0 1 2 0 + 111 58 28 0 0 3 2 0 + 111 60 28 0 0 5 1 2 + 111 62 28 0 0 4 1 0 + 112 0 28 0 0 5 -2 0 + 112 0 28 0 0 -3 0 0 + 112 0 28 0 0 -2 0 0 + 112 0 28 0 0 -1 0 0 + 112 0 28 0 0 0 0 0 + 112 0 28 0 0 2 0 0 + 112 0 28 0 0 3 0 0 + 112 2 28 0 0 4 -2 0 + 112 4 28 0 0 4 -1 0 + 112 6 28 0 0 6 -2 0 + 112 8 28 0 0 -4 0 0 + 112 10 28 0 0 6 -1 2 + 112 12 28 0 0 5 -1 0 + 112 14 28 0 0 -5 0 0 + 112 16 28 0 0 3 -1 0 + 112 18 28 0 0 2 -1 0 + 112 20 28 0 0 3 -2 0 + 112 22 28 0 0 2 -2 0 + 112 24 28 0 0 1 -1 0 + 112 26 28 0 0 1 -2 0 + 112 28 28 0 0 2 -3 0 + 112 30 28 0 0 2 -4 4 + 112 32 28 0 0 3 -5 0 + 112 34 28 0 0 3 -4 0 + 112 36 28 0 0 4 -5 0 + 112 38 28 0 0 4 -4 0 + 112 40 28 0 0 3 -3 0 + 112 42 28 0 0 4 -3 0 + 112 44 28 0 0 3 -6 0 + 112 46 28 0 0 7 -4 3 + 112 46 28 0 0 7 -3 3 + 112 48 28 0 0 4 -6 0 + 112 50 28 0 0 5 -6 2 + 112 52 28 0 0 5 -5 0 + 112 54 28 0 0 5 -4 0 + 112 56 28 0 0 6 -5 2 + 112 58 28 0 0 6 -3 0 + 112 60 28 0 0 5 -3 0 + 112 62 28 0 0 6 -4 0 From dc64cd1e910e5f7410072531b4ab4b0b9906f179 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Fri, 31 Mar 2017 19:36:35 +0200 Subject: [PATCH 243/297] Corrected 28 Layer EE Map --- .../data/map_CERN_Hexaboard_28Layers.txt | 280 ++++-------------- 1 file changed, 56 insertions(+), 224 deletions(-) diff --git a/CondObjects/data/map_CERN_Hexaboard_28Layers.txt b/CondObjects/data/map_CERN_Hexaboard_28Layers.txt index 8bf4354..8ead419 100644 --- a/CondObjects/data/map_CERN_Hexaboard_28Layers.txt +++ b/CondObjects/data/map_CERN_Hexaboard_28Layers.txt @@ -100,19 +100,13 @@ 3 60 1 0 0 6 -1 2 3 62 1 0 0 5 -1 0 4 0 1 0 0 3 2 0 - 4 0 1 0 0 -3 0 0 - 4 0 1 0 0 -2 0 0 - 4 0 1 0 0 -1 0 0 - 4 0 1 0 0 0 0 0 - 4 0 1 0 0 2 0 0 - 4 0 1 0 0 3 0 0 4 2 1 0 0 2 2 0 4 4 1 0 0 3 1 0 4 6 1 0 0 4 2 0 - 4 8 1 0 0 -4 0 0 + 4 8 1 0 0 3 0 0 4 10 1 0 0 5 1 2 4 12 1 0 0 4 1 0 - 4 14 1 0 0 -5 0 0 + 4 14 1 0 0 2 0 0 4 16 1 0 0 2 1 0 4 18 1 0 0 1 1 0 4 20 1 0 0 1 2 0 @@ -239,19 +233,13 @@ 7 60 2 0 0 5 1 2 7 62 2 0 0 4 1 0 8 0 2 0 0 5 -2 0 - 8 0 2 0 0 -3 0 0 - 8 0 2 0 0 -2 0 0 - 8 0 2 0 0 -1 0 0 - 8 0 2 0 0 0 0 0 - 8 0 2 0 0 2 0 0 - 8 0 2 0 0 3 0 0 8 2 2 0 0 4 -2 0 8 4 2 0 0 4 -1 0 8 6 2 0 0 6 -2 0 - 8 8 2 0 0 -4 0 0 + 8 8 2 0 0 3 0 0 8 10 2 0 0 6 -1 2 8 12 2 0 0 5 -1 0 - 8 14 2 0 0 -5 0 0 + 8 14 2 0 0 2 0 0 8 16 2 0 0 3 -1 0 8 18 2 0 0 2 -1 0 8 20 2 0 0 3 -2 0 @@ -378,19 +366,13 @@ 11 60 3 0 0 6 -1 2 11 62 3 0 0 5 -1 0 12 0 3 0 0 3 2 0 - 12 0 3 0 0 -3 0 0 - 12 0 3 0 0 -2 0 0 - 12 0 3 0 0 -1 0 0 - 12 0 3 0 0 0 0 0 - 12 0 3 0 0 2 0 0 - 12 0 3 0 0 3 0 0 12 2 3 0 0 2 2 0 12 4 3 0 0 3 1 0 12 6 3 0 0 4 2 0 - 12 8 3 0 0 -4 0 0 + 12 8 3 0 0 3 0 0 12 10 3 0 0 5 1 2 12 12 3 0 0 4 1 0 - 12 14 3 0 0 -5 0 0 + 12 14 3 0 0 2 0 0 12 16 3 0 0 2 1 0 12 18 3 0 0 1 1 0 12 20 3 0 0 1 2 0 @@ -517,19 +499,13 @@ 15 60 4 0 0 5 1 2 15 62 4 0 0 4 1 0 16 0 4 0 0 5 -2 0 - 16 0 4 0 0 -3 0 0 - 16 0 4 0 0 -2 0 0 - 16 0 4 0 0 -1 0 0 - 16 0 4 0 0 0 0 0 - 16 0 4 0 0 2 0 0 - 16 0 4 0 0 3 0 0 16 2 4 0 0 4 -2 0 16 4 4 0 0 4 -1 0 16 6 4 0 0 6 -2 0 - 16 8 4 0 0 -4 0 0 + 16 8 4 0 0 3 0 0 16 10 4 0 0 6 -1 2 16 12 4 0 0 5 -1 0 - 16 14 4 0 0 -5 0 0 + 16 14 4 0 0 2 0 0 16 16 4 0 0 3 -1 0 16 18 4 0 0 2 -1 0 16 20 4 0 0 3 -2 0 @@ -656,19 +632,13 @@ 19 60 5 0 0 6 -1 2 19 62 5 0 0 5 -1 0 20 0 5 0 0 3 2 0 - 20 0 5 0 0 -3 0 0 - 20 0 5 0 0 -2 0 0 - 20 0 5 0 0 -1 0 0 - 20 0 5 0 0 0 0 0 - 20 0 5 0 0 2 0 0 - 20 0 5 0 0 3 0 0 20 2 5 0 0 2 2 0 20 4 5 0 0 3 1 0 20 6 5 0 0 4 2 0 - 20 8 5 0 0 -4 0 0 + 20 8 5 0 0 3 0 0 20 10 5 0 0 5 1 2 20 12 5 0 0 4 1 0 - 20 14 5 0 0 -5 0 0 + 20 14 5 0 0 2 0 0 20 16 5 0 0 2 1 0 20 18 5 0 0 1 1 0 20 20 5 0 0 1 2 0 @@ -795,19 +765,13 @@ 23 60 6 0 0 5 1 2 23 62 6 0 0 4 1 0 24 0 6 0 0 5 -2 0 - 24 0 6 0 0 -3 0 0 - 24 0 6 0 0 -2 0 0 - 24 0 6 0 0 -1 0 0 - 24 0 6 0 0 0 0 0 - 24 0 6 0 0 2 0 0 - 24 0 6 0 0 3 0 0 24 2 6 0 0 4 -2 0 24 4 6 0 0 4 -1 0 24 6 6 0 0 6 -2 0 - 24 8 6 0 0 -4 0 0 + 24 8 6 0 0 3 0 0 24 10 6 0 0 6 -1 2 24 12 6 0 0 5 -1 0 - 24 14 6 0 0 -5 0 0 + 24 14 6 0 0 2 0 0 24 16 6 0 0 3 -1 0 24 18 6 0 0 2 -1 0 24 20 6 0 0 3 -2 0 @@ -934,19 +898,13 @@ 27 60 7 0 0 6 -1 2 27 62 7 0 0 5 -1 0 28 0 7 0 0 3 2 0 - 28 0 7 0 0 -3 0 0 - 28 0 7 0 0 -2 0 0 - 28 0 7 0 0 -1 0 0 - 28 0 7 0 0 0 0 0 - 28 0 7 0 0 2 0 0 - 28 0 7 0 0 3 0 0 28 2 7 0 0 2 2 0 28 4 7 0 0 3 1 0 28 6 7 0 0 4 2 0 - 28 8 7 0 0 -4 0 0 + 28 8 7 0 0 3 0 0 28 10 7 0 0 5 1 2 28 12 7 0 0 4 1 0 - 28 14 7 0 0 -5 0 0 + 28 14 7 0 0 2 0 0 28 16 7 0 0 2 1 0 28 18 7 0 0 1 1 0 28 20 7 0 0 1 2 0 @@ -1073,19 +1031,13 @@ 31 60 8 0 0 5 1 2 31 62 8 0 0 4 1 0 32 0 8 0 0 5 -2 0 - 32 0 8 0 0 -3 0 0 - 32 0 8 0 0 -2 0 0 - 32 0 8 0 0 -1 0 0 - 32 0 8 0 0 0 0 0 - 32 0 8 0 0 2 0 0 - 32 0 8 0 0 3 0 0 32 2 8 0 0 4 -2 0 32 4 8 0 0 4 -1 0 32 6 8 0 0 6 -2 0 - 32 8 8 0 0 -4 0 0 + 32 8 8 0 0 3 0 0 32 10 8 0 0 6 -1 2 32 12 8 0 0 5 -1 0 - 32 14 8 0 0 -5 0 0 + 32 14 8 0 0 2 0 0 32 16 8 0 0 3 -1 0 32 18 8 0 0 2 -1 0 32 20 8 0 0 3 -2 0 @@ -1212,19 +1164,13 @@ 35 60 9 0 0 6 -1 2 35 62 9 0 0 5 -1 0 36 0 9 0 0 3 2 0 - 36 0 9 0 0 -3 0 0 - 36 0 9 0 0 -2 0 0 - 36 0 9 0 0 -1 0 0 - 36 0 9 0 0 0 0 0 - 36 0 9 0 0 2 0 0 - 36 0 9 0 0 3 0 0 36 2 9 0 0 2 2 0 36 4 9 0 0 3 1 0 36 6 9 0 0 4 2 0 - 36 8 9 0 0 -4 0 0 + 36 8 9 0 0 3 0 0 36 10 9 0 0 5 1 2 36 12 9 0 0 4 1 0 - 36 14 9 0 0 -5 0 0 + 36 14 9 0 0 2 0 0 36 16 9 0 0 2 1 0 36 18 9 0 0 1 1 0 36 20 9 0 0 1 2 0 @@ -1351,19 +1297,13 @@ 39 60 10 0 0 5 1 2 39 62 10 0 0 4 1 0 40 0 10 0 0 5 -2 0 - 40 0 10 0 0 -3 0 0 - 40 0 10 0 0 -2 0 0 - 40 0 10 0 0 -1 0 0 - 40 0 10 0 0 0 0 0 - 40 0 10 0 0 2 0 0 - 40 0 10 0 0 3 0 0 40 2 10 0 0 4 -2 0 40 4 10 0 0 4 -1 0 40 6 10 0 0 6 -2 0 - 40 8 10 0 0 -4 0 0 + 40 8 10 0 0 3 0 0 40 10 10 0 0 6 -1 2 40 12 10 0 0 5 -1 0 - 40 14 10 0 0 -5 0 0 + 40 14 10 0 0 2 0 0 40 16 10 0 0 3 -1 0 40 18 10 0 0 2 -1 0 40 20 10 0 0 3 -2 0 @@ -1490,19 +1430,13 @@ 43 60 11 0 0 6 -1 2 43 62 11 0 0 5 -1 0 44 0 11 0 0 3 2 0 - 44 0 11 0 0 -3 0 0 - 44 0 11 0 0 -2 0 0 - 44 0 11 0 0 -1 0 0 - 44 0 11 0 0 0 0 0 - 44 0 11 0 0 2 0 0 - 44 0 11 0 0 3 0 0 44 2 11 0 0 2 2 0 44 4 11 0 0 3 1 0 44 6 11 0 0 4 2 0 - 44 8 11 0 0 -4 0 0 + 44 8 11 0 0 3 0 0 44 10 11 0 0 5 1 2 44 12 11 0 0 4 1 0 - 44 14 11 0 0 -5 0 0 + 44 14 11 0 0 2 0 0 44 16 11 0 0 2 1 0 44 18 11 0 0 1 1 0 44 20 11 0 0 1 2 0 @@ -1629,19 +1563,13 @@ 47 60 12 0 0 5 1 2 47 62 12 0 0 4 1 0 48 0 12 0 0 5 -2 0 - 48 0 12 0 0 -3 0 0 - 48 0 12 0 0 -2 0 0 - 48 0 12 0 0 -1 0 0 - 48 0 12 0 0 0 0 0 - 48 0 12 0 0 2 0 0 - 48 0 12 0 0 3 0 0 48 2 12 0 0 4 -2 0 48 4 12 0 0 4 -1 0 48 6 12 0 0 6 -2 0 - 48 8 12 0 0 -4 0 0 + 48 8 12 0 0 3 0 0 48 10 12 0 0 6 -1 2 48 12 12 0 0 5 -1 0 - 48 14 12 0 0 -5 0 0 + 48 14 12 0 0 2 0 0 48 16 12 0 0 3 -1 0 48 18 12 0 0 2 -1 0 48 20 12 0 0 3 -2 0 @@ -1768,19 +1696,13 @@ 51 60 13 0 0 6 -1 2 51 62 13 0 0 5 -1 0 52 0 13 0 0 3 2 0 - 52 0 13 0 0 -3 0 0 - 52 0 13 0 0 -2 0 0 - 52 0 13 0 0 -1 0 0 - 52 0 13 0 0 0 0 0 - 52 0 13 0 0 2 0 0 - 52 0 13 0 0 3 0 0 52 2 13 0 0 2 2 0 52 4 13 0 0 3 1 0 52 6 13 0 0 4 2 0 - 52 8 13 0 0 -4 0 0 + 52 8 13 0 0 3 0 0 52 10 13 0 0 5 1 2 52 12 13 0 0 4 1 0 - 52 14 13 0 0 -5 0 0 + 52 14 13 0 0 2 0 0 52 16 13 0 0 2 1 0 52 18 13 0 0 1 1 0 52 20 13 0 0 1 2 0 @@ -1907,19 +1829,13 @@ 55 60 14 0 0 5 1 2 55 62 14 0 0 4 1 0 56 0 14 0 0 5 -2 0 - 56 0 14 0 0 -3 0 0 - 56 0 14 0 0 -2 0 0 - 56 0 14 0 0 -1 0 0 - 56 0 14 0 0 0 0 0 - 56 0 14 0 0 2 0 0 - 56 0 14 0 0 3 0 0 56 2 14 0 0 4 -2 0 56 4 14 0 0 4 -1 0 56 6 14 0 0 6 -2 0 - 56 8 14 0 0 -4 0 0 + 56 8 14 0 0 3 0 0 56 10 14 0 0 6 -1 2 56 12 14 0 0 5 -1 0 - 56 14 14 0 0 -5 0 0 + 56 14 14 0 0 2 0 0 56 16 14 0 0 3 -1 0 56 18 14 0 0 2 -1 0 56 20 14 0 0 3 -2 0 @@ -2046,19 +1962,13 @@ 59 60 15 0 0 6 -1 2 59 62 15 0 0 5 -1 0 60 0 15 0 0 3 2 0 - 60 0 15 0 0 -3 0 0 - 60 0 15 0 0 -2 0 0 - 60 0 15 0 0 -1 0 0 - 60 0 15 0 0 0 0 0 - 60 0 15 0 0 2 0 0 - 60 0 15 0 0 3 0 0 60 2 15 0 0 2 2 0 60 4 15 0 0 3 1 0 60 6 15 0 0 4 2 0 - 60 8 15 0 0 -4 0 0 + 60 8 15 0 0 3 0 0 60 10 15 0 0 5 1 2 60 12 15 0 0 4 1 0 - 60 14 15 0 0 -5 0 0 + 60 14 15 0 0 2 0 0 60 16 15 0 0 2 1 0 60 18 15 0 0 1 1 0 60 20 15 0 0 1 2 0 @@ -2185,19 +2095,13 @@ 63 60 16 0 0 5 1 2 63 62 16 0 0 4 1 0 64 0 16 0 0 5 -2 0 - 64 0 16 0 0 -3 0 0 - 64 0 16 0 0 -2 0 0 - 64 0 16 0 0 -1 0 0 - 64 0 16 0 0 0 0 0 - 64 0 16 0 0 2 0 0 - 64 0 16 0 0 3 0 0 64 2 16 0 0 4 -2 0 64 4 16 0 0 4 -1 0 64 6 16 0 0 6 -2 0 - 64 8 16 0 0 -4 0 0 + 64 8 16 0 0 3 0 0 64 10 16 0 0 6 -1 2 64 12 16 0 0 5 -1 0 - 64 14 16 0 0 -5 0 0 + 64 14 16 0 0 2 0 0 64 16 16 0 0 3 -1 0 64 18 16 0 0 2 -1 0 64 20 16 0 0 3 -2 0 @@ -2324,19 +2228,13 @@ 67 60 17 0 0 6 -1 2 67 62 17 0 0 5 -1 0 68 0 17 0 0 3 2 0 - 68 0 17 0 0 -3 0 0 - 68 0 17 0 0 -2 0 0 - 68 0 17 0 0 -1 0 0 - 68 0 17 0 0 0 0 0 - 68 0 17 0 0 2 0 0 - 68 0 17 0 0 3 0 0 68 2 17 0 0 2 2 0 68 4 17 0 0 3 1 0 68 6 17 0 0 4 2 0 - 68 8 17 0 0 -4 0 0 + 68 8 17 0 0 3 0 0 68 10 17 0 0 5 1 2 68 12 17 0 0 4 1 0 - 68 14 17 0 0 -5 0 0 + 68 14 17 0 0 2 0 0 68 16 17 0 0 2 1 0 68 18 17 0 0 1 1 0 68 20 17 0 0 1 2 0 @@ -2463,19 +2361,13 @@ 71 60 18 0 0 5 1 2 71 62 18 0 0 4 1 0 72 0 18 0 0 5 -2 0 - 72 0 18 0 0 -3 0 0 - 72 0 18 0 0 -2 0 0 - 72 0 18 0 0 -1 0 0 - 72 0 18 0 0 0 0 0 - 72 0 18 0 0 2 0 0 - 72 0 18 0 0 3 0 0 72 2 18 0 0 4 -2 0 72 4 18 0 0 4 -1 0 72 6 18 0 0 6 -2 0 - 72 8 18 0 0 -4 0 0 + 72 8 18 0 0 3 0 0 72 10 18 0 0 6 -1 2 72 12 18 0 0 5 -1 0 - 72 14 18 0 0 -5 0 0 + 72 14 18 0 0 2 0 0 72 16 18 0 0 3 -1 0 72 18 18 0 0 2 -1 0 72 20 18 0 0 3 -2 0 @@ -2602,19 +2494,13 @@ 75 60 19 0 0 6 -1 2 75 62 19 0 0 5 -1 0 76 0 19 0 0 3 2 0 - 76 0 19 0 0 -3 0 0 - 76 0 19 0 0 -2 0 0 - 76 0 19 0 0 -1 0 0 - 76 0 19 0 0 0 0 0 - 76 0 19 0 0 2 0 0 - 76 0 19 0 0 3 0 0 76 2 19 0 0 2 2 0 76 4 19 0 0 3 1 0 76 6 19 0 0 4 2 0 - 76 8 19 0 0 -4 0 0 + 76 8 19 0 0 3 0 0 76 10 19 0 0 5 1 2 76 12 19 0 0 4 1 0 - 76 14 19 0 0 -5 0 0 + 76 14 19 0 0 2 0 0 76 16 19 0 0 2 1 0 76 18 19 0 0 1 1 0 76 20 19 0 0 1 2 0 @@ -2741,19 +2627,13 @@ 79 60 20 0 0 5 1 2 79 62 20 0 0 4 1 0 80 0 20 0 0 5 -2 0 - 80 0 20 0 0 -3 0 0 - 80 0 20 0 0 -2 0 0 - 80 0 20 0 0 -1 0 0 - 80 0 20 0 0 0 0 0 - 80 0 20 0 0 2 0 0 - 80 0 20 0 0 3 0 0 80 2 20 0 0 4 -2 0 80 4 20 0 0 4 -1 0 80 6 20 0 0 6 -2 0 - 80 8 20 0 0 -4 0 0 + 80 8 20 0 0 3 0 0 80 10 20 0 0 6 -1 2 80 12 20 0 0 5 -1 0 - 80 14 20 0 0 -5 0 0 + 80 14 20 0 0 2 0 0 80 16 20 0 0 3 -1 0 80 18 20 0 0 2 -1 0 80 20 20 0 0 3 -2 0 @@ -2880,19 +2760,13 @@ 83 60 21 0 0 6 -1 2 83 62 21 0 0 5 -1 0 84 0 21 0 0 3 2 0 - 84 0 21 0 0 -3 0 0 - 84 0 21 0 0 -2 0 0 - 84 0 21 0 0 -1 0 0 - 84 0 21 0 0 0 0 0 - 84 0 21 0 0 2 0 0 - 84 0 21 0 0 3 0 0 84 2 21 0 0 2 2 0 84 4 21 0 0 3 1 0 84 6 21 0 0 4 2 0 - 84 8 21 0 0 -4 0 0 + 84 8 21 0 0 3 0 0 84 10 21 0 0 5 1 2 84 12 21 0 0 4 1 0 - 84 14 21 0 0 -5 0 0 + 84 14 21 0 0 2 0 0 84 16 21 0 0 2 1 0 84 18 21 0 0 1 1 0 84 20 21 0 0 1 2 0 @@ -3019,19 +2893,13 @@ 87 60 22 0 0 5 1 2 87 62 22 0 0 4 1 0 88 0 22 0 0 5 -2 0 - 88 0 22 0 0 -3 0 0 - 88 0 22 0 0 -2 0 0 - 88 0 22 0 0 -1 0 0 - 88 0 22 0 0 0 0 0 - 88 0 22 0 0 2 0 0 - 88 0 22 0 0 3 0 0 88 2 22 0 0 4 -2 0 88 4 22 0 0 4 -1 0 88 6 22 0 0 6 -2 0 - 88 8 22 0 0 -4 0 0 + 88 8 22 0 0 3 0 0 88 10 22 0 0 6 -1 2 88 12 22 0 0 5 -1 0 - 88 14 22 0 0 -5 0 0 + 88 14 22 0 0 2 0 0 88 16 22 0 0 3 -1 0 88 18 22 0 0 2 -1 0 88 20 22 0 0 3 -2 0 @@ -3158,19 +3026,13 @@ 91 60 23 0 0 6 -1 2 91 62 23 0 0 5 -1 0 92 0 23 0 0 3 2 0 - 92 0 23 0 0 -3 0 0 - 92 0 23 0 0 -2 0 0 - 92 0 23 0 0 -1 0 0 - 92 0 23 0 0 0 0 0 - 92 0 23 0 0 2 0 0 - 92 0 23 0 0 3 0 0 92 2 23 0 0 2 2 0 92 4 23 0 0 3 1 0 92 6 23 0 0 4 2 0 - 92 8 23 0 0 -4 0 0 + 92 8 23 0 0 3 0 0 92 10 23 0 0 5 1 2 92 12 23 0 0 4 1 0 - 92 14 23 0 0 -5 0 0 + 92 14 23 0 0 2 0 0 92 16 23 0 0 2 1 0 92 18 23 0 0 1 1 0 92 20 23 0 0 1 2 0 @@ -3297,19 +3159,13 @@ 95 60 24 0 0 5 1 2 95 62 24 0 0 4 1 0 96 0 24 0 0 5 -2 0 - 96 0 24 0 0 -3 0 0 - 96 0 24 0 0 -2 0 0 - 96 0 24 0 0 -1 0 0 - 96 0 24 0 0 0 0 0 - 96 0 24 0 0 2 0 0 - 96 0 24 0 0 3 0 0 96 2 24 0 0 4 -2 0 96 4 24 0 0 4 -1 0 96 6 24 0 0 6 -2 0 - 96 8 24 0 0 -4 0 0 + 96 8 24 0 0 3 0 0 96 10 24 0 0 6 -1 2 96 12 24 0 0 5 -1 0 - 96 14 24 0 0 -5 0 0 + 96 14 24 0 0 2 0 0 96 16 24 0 0 3 -1 0 96 18 24 0 0 2 -1 0 96 20 24 0 0 3 -2 0 @@ -3436,19 +3292,13 @@ 99 60 25 0 0 6 -1 2 99 62 25 0 0 5 -1 0 100 0 25 0 0 3 2 0 - 100 0 25 0 0 -3 0 0 - 100 0 25 0 0 -2 0 0 - 100 0 25 0 0 -1 0 0 - 100 0 25 0 0 0 0 0 - 100 0 25 0 0 2 0 0 - 100 0 25 0 0 3 0 0 100 2 25 0 0 2 2 0 100 4 25 0 0 3 1 0 100 6 25 0 0 4 2 0 - 100 8 25 0 0 -4 0 0 + 100 8 25 0 0 3 0 0 100 10 25 0 0 5 1 2 100 12 25 0 0 4 1 0 - 100 14 25 0 0 -5 0 0 + 100 14 25 0 0 2 0 0 100 16 25 0 0 2 1 0 100 18 25 0 0 1 1 0 100 20 25 0 0 1 2 0 @@ -3575,19 +3425,13 @@ 103 60 26 0 0 5 1 2 103 62 26 0 0 4 1 0 104 0 26 0 0 5 -2 0 - 104 0 26 0 0 -3 0 0 - 104 0 26 0 0 -2 0 0 - 104 0 26 0 0 -1 0 0 - 104 0 26 0 0 0 0 0 - 104 0 26 0 0 2 0 0 - 104 0 26 0 0 3 0 0 104 2 26 0 0 4 -2 0 104 4 26 0 0 4 -1 0 104 6 26 0 0 6 -2 0 - 104 8 26 0 0 -4 0 0 + 104 8 26 0 0 3 0 0 104 10 26 0 0 6 -1 2 104 12 26 0 0 5 -1 0 - 104 14 26 0 0 -5 0 0 + 104 14 26 0 0 2 0 0 104 16 26 0 0 3 -1 0 104 18 26 0 0 2 -1 0 104 20 26 0 0 3 -2 0 @@ -3714,19 +3558,13 @@ 107 60 27 0 0 6 -1 2 107 62 27 0 0 5 -1 0 108 0 27 0 0 3 2 0 - 108 0 27 0 0 -3 0 0 - 108 0 27 0 0 -2 0 0 - 108 0 27 0 0 -1 0 0 - 108 0 27 0 0 0 0 0 - 108 0 27 0 0 2 0 0 - 108 0 27 0 0 3 0 0 108 2 27 0 0 2 2 0 108 4 27 0 0 3 1 0 108 6 27 0 0 4 2 0 - 108 8 27 0 0 -4 0 0 + 108 8 27 0 0 3 0 0 108 10 27 0 0 5 1 2 108 12 27 0 0 4 1 0 - 108 14 27 0 0 -5 0 0 + 108 14 27 0 0 2 0 0 108 16 27 0 0 2 1 0 108 18 27 0 0 1 1 0 108 20 27 0 0 1 2 0 @@ -3853,19 +3691,13 @@ 111 60 28 0 0 5 1 2 111 62 28 0 0 4 1 0 112 0 28 0 0 5 -2 0 - 112 0 28 0 0 -3 0 0 - 112 0 28 0 0 -2 0 0 - 112 0 28 0 0 -1 0 0 - 112 0 28 0 0 0 0 0 - 112 0 28 0 0 2 0 0 - 112 0 28 0 0 3 0 0 112 2 28 0 0 4 -2 0 112 4 28 0 0 4 -1 0 112 6 28 0 0 6 -2 0 - 112 8 28 0 0 -4 0 0 + 112 8 28 0 0 3 0 0 112 10 28 0 0 6 -1 2 112 12 28 0 0 5 -1 0 - 112 14 28 0 0 -5 0 0 + 112 14 28 0 0 2 0 0 112 16 28 0 0 3 -1 0 112 18 28 0 0 2 -1 0 112 20 28 0 0 3 -2 0 From 3659807c8777bb208460adfdf551db0828947d3e Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Fri, 31 Mar 2017 23:44:58 +0200 Subject: [PATCH 244/297] Updates to Geometry to deal with multiple sensors in a layer, added map for the 12*7 FH layers in ideal configuration(no rotations) --- .../data/map_CERN_Hexaboard_FH_12Layers.txt | 11173 ++++++++++++++++ .../MapGenerator/Channel_Numbers_SKIROC1.txt | 8 - .../Channel_Numbers_SKIROC1_Hexaboard.txt | 8 + .../MapGenerator/Channel_Numbers_SKIROC2.txt | 8 - .../Channel_Numbers_SKIROC2_Hexaboard.txt | 7 + .../Channel_Numbers_SKIROC3_Hexaboard.txt | 8 + .../Channel_Numbers_SKIROC4_Hexaboard.txt | 7 + CondObjects/test/MapGenerator/Mapping.cpp | 199 - .../test/MapGenerator/Mapping_Hexaboard.cpp | 297 + .../MapGenerator/Mapping_Hexaboard_FH.cpp | 314 + Geometry/interface/HGCalTBCellVertices.h | 5 + Geometry/src/HGCalTBCellVertices.cc | 6 +- Geometry/src/HGCalTBTopology.cc | 19 +- 13 files changed, 11839 insertions(+), 220 deletions(-) create mode 100644 CondObjects/data/map_CERN_Hexaboard_FH_12Layers.txt delete mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1.txt create mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1_Hexaboard.txt delete mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2.txt create mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2_Hexaboard.txt create mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC3_Hexaboard.txt create mode 100644 CondObjects/test/MapGenerator/Channel_Numbers_SKIROC4_Hexaboard.txt delete mode 100644 CondObjects/test/MapGenerator/Mapping.cpp create mode 100644 CondObjects/test/MapGenerator/Mapping_Hexaboard.cpp create mode 100644 CondObjects/test/MapGenerator/Mapping_Hexaboard_FH.cpp diff --git a/CondObjects/data/map_CERN_Hexaboard_FH_12Layers.txt b/CondObjects/data/map_CERN_Hexaboard_FH_12Layers.txt new file mode 100644 index 0000000..36cdb3b --- /dev/null +++ b/CondObjects/data/map_CERN_Hexaboard_FH_12Layers.txt @@ -0,0 +1,11173 @@ +# SKIROC CHANNEL | LAYER SENSOR_IX SENSOR_IV IX IV TYPE + 117 0 29 0 -1 -2 -3 0 + 117 2 29 0 -1 -2 -4 0 + 117 4 29 0 -1 -3 -3 0 + 117 6 29 0 -1 -1 -4 0 + 117 8 29 0 -1 0 -5 0 + 117 10 29 0 -1 -1 -5 2 + 117 12 29 0 -1 1 -6 2 + 117 14 29 0 -1 0 -4 0 + 117 16 29 0 -1 -1 -3 0 + 117 18 29 0 -1 0 -3 0 + 117 20 29 0 -1 3 -7 3 + 117 20 29 0 -1 4 -7 3 + 117 22 29 0 -1 2 -6 0 + 117 24 29 0 -1 1 -5 0 + 117 26 29 0 -1 1 -4 0 + 117 28 29 0 -1 2 -5 0 + 117 30 29 0 -1 1 -3 0 + 117 32 29 0 -1 0 -2 0 + 117 34 29 0 -1 0 -1 0 + 117 36 29 0 -1 -1 0 0 + 117 38 29 0 -1 -1 -1 0 + 117 40 29 0 -1 -4 0 0 + 117 42 29 0 -1 -3 0 0 + 117 44 29 0 -1 -3 -1 0 + 117 46 29 0 -1 -5 0 0 + 117 48 29 0 -1 -5 -1 2 + 117 50 29 0 -1 -4 -1 0 + 117 52 29 0 -1 -2 -1 0 + 117 54 29 0 -1 -1 -2 0 + 117 56 29 0 -1 -2 -2 0 + 117 58 29 0 -1 -3 -2 0 + 117 60 29 0 -1 -4 -3 3 + 117 60 29 0 -1 -3 -4 3 + 117 62 29 0 -1 -4 -2 0 + 118 0 29 0 -1 -4 3 0 + 118 2 29 0 -1 -4 2 0 + 118 4 29 0 -1 -5 3 0 + 118 6 29 0 -1 -6 4 0 + 118 8 29 0 -1 -5 1 0 + 118 10 29 0 -1 -6 3 0 + 118 12 29 0 -1 -7 4 3 + 118 12 29 0 -1 -7 3 3 + 118 14 29 0 -1 -6 2 0 + 118 16 29 0 -1 -6 1 2 + 118 18 29 0 -1 -5 2 0 + 118 20 29 0 -1 -4 1 0 + 118 22 29 0 -1 -3 1 0 + 118 24 29 0 -1 -3 2 0 + 118 26 29 0 -1 -2 1 0 + 118 28 29 0 -1 -2 0 0 + 118 30 29 0 -1 -3 3 0 + 118 32 29 0 -1 -2 3 0 + 118 34 29 0 -1 -2 2 0 + 118 36 29 0 -1 0 0 0 + 118 38 29 0 -1 -1 1 0 + 118 40 29 0 -1 -1 2 4 + 118 42 29 0 -1 -2 4 0 + 118 44 29 0 -1 -3 4 0 + 118 46 29 0 -1 -3 5 0 + 118 48 29 0 -1 -4 6 0 + 118 50 29 0 -1 -4 5 0 + 118 52 29 0 -1 -5 6 2 + 118 54 29 0 -1 -5 4 0 + 118 56 29 0 -1 -5 5 0 + 118 58 29 0 -1 -4 4 0 + 118 62 29 0 -1 -6 5 2 + 119 0 29 0 -1 2 2 0 + 119 2 29 0 -1 1 3 0 + 119 4 29 0 -1 2 3 0 + 119 6 29 0 -1 0 4 0 + 119 8 29 0 -1 3 3 0 + 119 10 29 0 -1 -1 4 0 + 119 12 29 0 -1 -1 5 0 + 119 14 29 0 -1 4 2 0 + 119 16 29 0 -1 3 4 3 + 119 16 29 0 -1 4 3 3 + 119 18 29 0 -1 2 4 0 + 119 20 29 0 -1 1 4 0 + 119 22 29 0 -1 1 5 2 + 119 24 29 0 -1 0 5 0 + 119 26 29 0 -1 -1 6 2 + 119 28 29 0 -1 -2 6 0 + 119 30 29 0 -1 -2 5 0 + 119 32 29 0 -1 -3 6 0 + 119 34 29 0 -1 -4 7 3 + 119 34 29 0 -1 -3 7 3 + 119 36 29 0 -1 0 1 0 + 119 38 29 0 -1 0 2 0 + 119 40 29 0 -1 -1 3 0 + 119 42 29 0 -1 0 3 0 + 119 44 29 0 -1 1 0 0 + 119 46 29 0 -1 3 1 0 + 119 48 29 0 -1 4 0 0 + 119 50 29 0 -1 5 0 0 + 119 52 29 0 -1 2 1 0 + 119 54 29 0 -1 1 1 0 + 119 56 29 0 -1 1 2 0 + 119 58 29 0 -1 3 2 0 + 119 60 29 0 -1 5 1 2 + 119 62 29 0 -1 4 1 0 + 120 0 29 0 -1 5 -2 0 + 120 2 29 0 -1 4 -2 0 + 120 4 29 0 -1 4 -1 0 + 120 6 29 0 -1 6 -2 0 + 120 8 29 0 -1 3 0 0 + 120 10 29 0 -1 6 -1 2 + 120 12 29 0 -1 5 -1 0 + 120 14 29 0 -1 2 0 0 + 120 16 29 0 -1 3 -1 0 + 120 18 29 0 -1 2 -1 0 + 120 20 29 0 -1 3 -2 0 + 120 22 29 0 -1 2 -2 0 + 120 24 29 0 -1 1 -1 0 + 120 26 29 0 -1 1 -2 0 + 120 28 29 0 -1 2 -3 0 + 120 30 29 0 -1 2 -4 4 + 120 32 29 0 -1 3 -5 0 + 120 34 29 0 -1 3 -4 0 + 120 36 29 0 -1 4 -5 0 + 120 38 29 0 -1 4 -4 0 + 120 40 29 0 -1 3 -3 0 + 120 42 29 0 -1 4 -3 0 + 120 44 29 0 -1 3 -6 0 + 120 46 29 0 -1 7 -4 3 + 120 46 29 0 -1 7 -3 3 + 120 48 29 0 -1 4 -6 0 + 120 50 29 0 -1 5 -6 2 + 120 52 29 0 -1 5 -5 0 + 120 54 29 0 -1 5 -4 0 + 120 56 29 0 -1 6 -5 2 + 120 58 29 0 -1 6 -3 0 + 120 60 29 0 -1 5 -3 0 + 120 62 29 0 -1 6 -4 0 + 121 0 29 1 -1 -2 -3 0 + 121 2 29 1 -1 -2 -4 0 + 121 4 29 1 -1 -3 -3 0 + 121 6 29 1 -1 -1 -4 0 + 121 8 29 1 -1 0 -5 0 + 121 10 29 1 -1 -1 -5 2 + 121 12 29 1 -1 1 -6 2 + 121 14 29 1 -1 0 -4 0 + 121 16 29 1 -1 -1 -3 0 + 121 18 29 1 -1 0 -3 0 + 121 20 29 1 -1 3 -7 3 + 121 20 29 1 -1 4 -7 3 + 121 22 29 1 -1 2 -6 0 + 121 24 29 1 -1 1 -5 0 + 121 26 29 1 -1 1 -4 0 + 121 28 29 1 -1 2 -5 0 + 121 30 29 1 -1 1 -3 0 + 121 32 29 1 -1 0 -2 0 + 121 34 29 1 -1 0 -1 0 + 121 36 29 1 -1 -1 0 0 + 121 38 29 1 -1 -1 -1 0 + 121 40 29 1 -1 -4 0 0 + 121 42 29 1 -1 -3 0 0 + 121 44 29 1 -1 -3 -1 0 + 121 46 29 1 -1 -5 0 0 + 121 48 29 1 -1 -5 -1 2 + 121 50 29 1 -1 -4 -1 0 + 121 52 29 1 -1 -2 -1 0 + 121 54 29 1 -1 -1 -2 0 + 121 56 29 1 -1 -2 -2 0 + 121 58 29 1 -1 -3 -2 0 + 121 60 29 1 -1 -4 -3 3 + 121 60 29 1 -1 -3 -4 3 + 121 62 29 1 -1 -4 -2 0 + 122 0 29 1 -1 -4 3 0 + 122 2 29 1 -1 -4 2 0 + 122 4 29 1 -1 -5 3 0 + 122 6 29 1 -1 -6 4 0 + 122 8 29 1 -1 -5 1 0 + 122 10 29 1 -1 -6 3 0 + 122 12 29 1 -1 -7 4 3 + 122 12 29 1 -1 -7 3 3 + 122 14 29 1 -1 -6 2 0 + 122 16 29 1 -1 -6 1 2 + 122 18 29 1 -1 -5 2 0 + 122 20 29 1 -1 -4 1 0 + 122 22 29 1 -1 -3 1 0 + 122 24 29 1 -1 -3 2 0 + 122 26 29 1 -1 -2 1 0 + 122 28 29 1 -1 -2 0 0 + 122 30 29 1 -1 -3 3 0 + 122 32 29 1 -1 -2 3 0 + 122 34 29 1 -1 -2 2 0 + 122 36 29 1 -1 0 0 0 + 122 38 29 1 -1 -1 1 0 + 122 40 29 1 -1 -1 2 4 + 122 42 29 1 -1 -2 4 0 + 122 44 29 1 -1 -3 4 0 + 122 46 29 1 -1 -3 5 0 + 122 48 29 1 -1 -4 6 0 + 122 50 29 1 -1 -4 5 0 + 122 52 29 1 -1 -5 6 2 + 122 54 29 1 -1 -5 4 0 + 122 56 29 1 -1 -5 5 0 + 122 58 29 1 -1 -4 4 0 + 122 62 29 1 -1 -6 5 2 + 123 0 29 1 -1 2 2 0 + 123 2 29 1 -1 1 3 0 + 123 4 29 1 -1 2 3 0 + 123 6 29 1 -1 0 4 0 + 123 8 29 1 -1 3 3 0 + 123 10 29 1 -1 -1 4 0 + 123 12 29 1 -1 -1 5 0 + 123 14 29 1 -1 4 2 0 + 123 16 29 1 -1 3 4 3 + 123 16 29 1 -1 4 3 3 + 123 18 29 1 -1 2 4 0 + 123 20 29 1 -1 1 4 0 + 123 22 29 1 -1 1 5 2 + 123 24 29 1 -1 0 5 0 + 123 26 29 1 -1 -1 6 2 + 123 28 29 1 -1 -2 6 0 + 123 30 29 1 -1 -2 5 0 + 123 32 29 1 -1 -3 6 0 + 123 34 29 1 -1 -4 7 3 + 123 34 29 1 -1 -3 7 3 + 123 36 29 1 -1 0 1 0 + 123 38 29 1 -1 0 2 0 + 123 40 29 1 -1 -1 3 0 + 123 42 29 1 -1 0 3 0 + 123 44 29 1 -1 1 0 0 + 123 46 29 1 -1 3 1 0 + 123 48 29 1 -1 4 0 0 + 123 50 29 1 -1 5 0 0 + 123 52 29 1 -1 2 1 0 + 123 54 29 1 -1 1 1 0 + 123 56 29 1 -1 1 2 0 + 123 58 29 1 -1 3 2 0 + 123 60 29 1 -1 5 1 2 + 123 62 29 1 -1 4 1 0 + 124 0 29 1 -1 5 -2 0 + 124 2 29 1 -1 4 -2 0 + 124 4 29 1 -1 4 -1 0 + 124 6 29 1 -1 6 -2 0 + 124 8 29 1 -1 3 0 0 + 124 10 29 1 -1 6 -1 2 + 124 12 29 1 -1 5 -1 0 + 124 14 29 1 -1 2 0 0 + 124 16 29 1 -1 3 -1 0 + 124 18 29 1 -1 2 -1 0 + 124 20 29 1 -1 3 -2 0 + 124 22 29 1 -1 2 -2 0 + 124 24 29 1 -1 1 -1 0 + 124 26 29 1 -1 1 -2 0 + 124 28 29 1 -1 2 -3 0 + 124 30 29 1 -1 2 -4 4 + 124 32 29 1 -1 3 -5 0 + 124 34 29 1 -1 3 -4 0 + 124 36 29 1 -1 4 -5 0 + 124 38 29 1 -1 4 -4 0 + 124 40 29 1 -1 3 -3 0 + 124 42 29 1 -1 4 -3 0 + 124 44 29 1 -1 3 -6 0 + 124 46 29 1 -1 7 -4 3 + 124 46 29 1 -1 7 -3 3 + 124 48 29 1 -1 4 -6 0 + 124 50 29 1 -1 5 -6 2 + 124 52 29 1 -1 5 -5 0 + 124 54 29 1 -1 5 -4 0 + 124 56 29 1 -1 6 -5 2 + 124 58 29 1 -1 6 -3 0 + 124 60 29 1 -1 5 -3 0 + 124 62 29 1 -1 6 -4 0 + 125 0 29 -1 0 -2 -3 0 + 125 2 29 -1 0 -2 -4 0 + 125 4 29 -1 0 -3 -3 0 + 125 6 29 -1 0 -1 -4 0 + 125 8 29 -1 0 0 -5 0 + 125 10 29 -1 0 -1 -5 2 + 125 12 29 -1 0 1 -6 2 + 125 14 29 -1 0 0 -4 0 + 125 16 29 -1 0 -1 -3 0 + 125 18 29 -1 0 0 -3 0 + 125 20 29 -1 0 3 -7 3 + 125 20 29 -1 0 4 -7 3 + 125 22 29 -1 0 2 -6 0 + 125 24 29 -1 0 1 -5 0 + 125 26 29 -1 0 1 -4 0 + 125 28 29 -1 0 2 -5 0 + 125 30 29 -1 0 1 -3 0 + 125 32 29 -1 0 0 -2 0 + 125 34 29 -1 0 0 -1 0 + 125 36 29 -1 0 -1 0 0 + 125 38 29 -1 0 -1 -1 0 + 125 40 29 -1 0 -4 0 0 + 125 42 29 -1 0 -3 0 0 + 125 44 29 -1 0 -3 -1 0 + 125 46 29 -1 0 -5 0 0 + 125 48 29 -1 0 -5 -1 2 + 125 50 29 -1 0 -4 -1 0 + 125 52 29 -1 0 -2 -1 0 + 125 54 29 -1 0 -1 -2 0 + 125 56 29 -1 0 -2 -2 0 + 125 58 29 -1 0 -3 -2 0 + 125 60 29 -1 0 -4 -3 3 + 125 60 29 -1 0 -3 -4 3 + 125 62 29 -1 0 -4 -2 0 + 126 0 29 -1 0 -4 3 0 + 126 2 29 -1 0 -4 2 0 + 126 4 29 -1 0 -5 3 0 + 126 6 29 -1 0 -6 4 0 + 126 8 29 -1 0 -5 1 0 + 126 10 29 -1 0 -6 3 0 + 126 12 29 -1 0 -7 4 3 + 126 12 29 -1 0 -7 3 3 + 126 14 29 -1 0 -6 2 0 + 126 16 29 -1 0 -6 1 2 + 126 18 29 -1 0 -5 2 0 + 126 20 29 -1 0 -4 1 0 + 126 22 29 -1 0 -3 1 0 + 126 24 29 -1 0 -3 2 0 + 126 26 29 -1 0 -2 1 0 + 126 28 29 -1 0 -2 0 0 + 126 30 29 -1 0 -3 3 0 + 126 32 29 -1 0 -2 3 0 + 126 34 29 -1 0 -2 2 0 + 126 36 29 -1 0 0 0 0 + 126 38 29 -1 0 -1 1 0 + 126 40 29 -1 0 -1 2 4 + 126 42 29 -1 0 -2 4 0 + 126 44 29 -1 0 -3 4 0 + 126 46 29 -1 0 -3 5 0 + 126 48 29 -1 0 -4 6 0 + 126 50 29 -1 0 -4 5 0 + 126 52 29 -1 0 -5 6 2 + 126 54 29 -1 0 -5 4 0 + 126 56 29 -1 0 -5 5 0 + 126 58 29 -1 0 -4 4 0 + 126 62 29 -1 0 -6 5 2 + 127 0 29 -1 0 2 2 0 + 127 2 29 -1 0 1 3 0 + 127 4 29 -1 0 2 3 0 + 127 6 29 -1 0 0 4 0 + 127 8 29 -1 0 3 3 0 + 127 10 29 -1 0 -1 4 0 + 127 12 29 -1 0 -1 5 0 + 127 14 29 -1 0 4 2 0 + 127 16 29 -1 0 3 4 3 + 127 16 29 -1 0 4 3 3 + 127 18 29 -1 0 2 4 0 + 127 20 29 -1 0 1 4 0 + 127 22 29 -1 0 1 5 2 + 127 24 29 -1 0 0 5 0 + 127 26 29 -1 0 -1 6 2 + 127 28 29 -1 0 -2 6 0 + 127 30 29 -1 0 -2 5 0 + 127 32 29 -1 0 -3 6 0 + 127 34 29 -1 0 -4 7 3 + 127 34 29 -1 0 -3 7 3 + 127 36 29 -1 0 0 1 0 + 127 38 29 -1 0 0 2 0 + 127 40 29 -1 0 -1 3 0 + 127 42 29 -1 0 0 3 0 + 127 44 29 -1 0 1 0 0 + 127 46 29 -1 0 3 1 0 + 127 48 29 -1 0 4 0 0 + 127 50 29 -1 0 5 0 0 + 127 52 29 -1 0 2 1 0 + 127 54 29 -1 0 1 1 0 + 127 56 29 -1 0 1 2 0 + 127 58 29 -1 0 3 2 0 + 127 60 29 -1 0 5 1 2 + 127 62 29 -1 0 4 1 0 + 128 0 29 -1 0 5 -2 0 + 128 2 29 -1 0 4 -2 0 + 128 4 29 -1 0 4 -1 0 + 128 6 29 -1 0 6 -2 0 + 128 8 29 -1 0 3 0 0 + 128 10 29 -1 0 6 -1 2 + 128 12 29 -1 0 5 -1 0 + 128 14 29 -1 0 2 0 0 + 128 16 29 -1 0 3 -1 0 + 128 18 29 -1 0 2 -1 0 + 128 20 29 -1 0 3 -2 0 + 128 22 29 -1 0 2 -2 0 + 128 24 29 -1 0 1 -1 0 + 128 26 29 -1 0 1 -2 0 + 128 28 29 -1 0 2 -3 0 + 128 30 29 -1 0 2 -4 4 + 128 32 29 -1 0 3 -5 0 + 128 34 29 -1 0 3 -4 0 + 128 36 29 -1 0 4 -5 0 + 128 38 29 -1 0 4 -4 0 + 128 40 29 -1 0 3 -3 0 + 128 42 29 -1 0 4 -3 0 + 128 44 29 -1 0 3 -6 0 + 128 46 29 -1 0 7 -4 3 + 128 46 29 -1 0 7 -3 3 + 128 48 29 -1 0 4 -6 0 + 128 50 29 -1 0 5 -6 2 + 128 52 29 -1 0 5 -5 0 + 128 54 29 -1 0 5 -4 0 + 128 56 29 -1 0 6 -5 2 + 128 58 29 -1 0 6 -3 0 + 128 60 29 -1 0 5 -3 0 + 128 62 29 -1 0 6 -4 0 + 113 0 29 0 0 -2 -3 0 + 113 2 29 0 0 -2 -4 0 + 113 4 29 0 0 -3 -3 0 + 113 6 29 0 0 -1 -4 0 + 113 8 29 0 0 0 -5 0 + 113 10 29 0 0 -1 -5 2 + 113 12 29 0 0 1 -6 2 + 113 14 29 0 0 0 -4 0 + 113 16 29 0 0 -1 -3 0 + 113 18 29 0 0 0 -3 0 + 113 20 29 0 0 3 -7 3 + 113 20 29 0 0 4 -7 3 + 113 22 29 0 0 2 -6 0 + 113 24 29 0 0 1 -5 0 + 113 26 29 0 0 1 -4 0 + 113 28 29 0 0 2 -5 0 + 113 30 29 0 0 1 -3 0 + 113 32 29 0 0 0 -2 0 + 113 34 29 0 0 0 -1 0 + 113 36 29 0 0 -1 0 0 + 113 38 29 0 0 -1 -1 0 + 113 40 29 0 0 -4 0 0 + 113 42 29 0 0 -3 0 0 + 113 44 29 0 0 -3 -1 0 + 113 46 29 0 0 -5 0 0 + 113 48 29 0 0 -5 -1 2 + 113 50 29 0 0 -4 -1 0 + 113 52 29 0 0 -2 -1 0 + 113 54 29 0 0 -1 -2 0 + 113 56 29 0 0 -2 -2 0 + 113 58 29 0 0 -3 -2 0 + 113 60 29 0 0 -4 -3 3 + 113 60 29 0 0 -3 -4 3 + 113 62 29 0 0 -4 -2 0 + 114 0 29 0 0 -4 3 0 + 114 2 29 0 0 -4 2 0 + 114 4 29 0 0 -5 3 0 + 114 6 29 0 0 -6 4 0 + 114 8 29 0 0 -5 1 0 + 114 10 29 0 0 -6 3 0 + 114 12 29 0 0 -7 4 3 + 114 12 29 0 0 -7 3 3 + 114 14 29 0 0 -6 2 0 + 114 16 29 0 0 -6 1 2 + 114 18 29 0 0 -5 2 0 + 114 20 29 0 0 -4 1 0 + 114 22 29 0 0 -3 1 0 + 114 24 29 0 0 -3 2 0 + 114 26 29 0 0 -2 1 0 + 114 28 29 0 0 -2 0 0 + 114 30 29 0 0 -3 3 0 + 114 32 29 0 0 -2 3 0 + 114 34 29 0 0 -2 2 0 + 114 36 29 0 0 0 0 0 + 114 38 29 0 0 -1 1 0 + 114 40 29 0 0 -1 2 4 + 114 42 29 0 0 -2 4 0 + 114 44 29 0 0 -3 4 0 + 114 46 29 0 0 -3 5 0 + 114 48 29 0 0 -4 6 0 + 114 50 29 0 0 -4 5 0 + 114 52 29 0 0 -5 6 2 + 114 54 29 0 0 -5 4 0 + 114 56 29 0 0 -5 5 0 + 114 58 29 0 0 -4 4 0 + 114 62 29 0 0 -6 5 2 + 115 0 29 0 0 2 2 0 + 115 2 29 0 0 1 3 0 + 115 4 29 0 0 2 3 0 + 115 6 29 0 0 0 4 0 + 115 8 29 0 0 3 3 0 + 115 10 29 0 0 -1 4 0 + 115 12 29 0 0 -1 5 0 + 115 14 29 0 0 4 2 0 + 115 16 29 0 0 3 4 3 + 115 16 29 0 0 4 3 3 + 115 18 29 0 0 2 4 0 + 115 20 29 0 0 1 4 0 + 115 22 29 0 0 1 5 2 + 115 24 29 0 0 0 5 0 + 115 26 29 0 0 -1 6 2 + 115 28 29 0 0 -2 6 0 + 115 30 29 0 0 -2 5 0 + 115 32 29 0 0 -3 6 0 + 115 34 29 0 0 -4 7 3 + 115 34 29 0 0 -3 7 3 + 115 36 29 0 0 0 1 0 + 115 38 29 0 0 0 2 0 + 115 40 29 0 0 -1 3 0 + 115 42 29 0 0 0 3 0 + 115 44 29 0 0 1 0 0 + 115 46 29 0 0 3 1 0 + 115 48 29 0 0 4 0 0 + 115 50 29 0 0 5 0 0 + 115 52 29 0 0 2 1 0 + 115 54 29 0 0 1 1 0 + 115 56 29 0 0 1 2 0 + 115 58 29 0 0 3 2 0 + 115 60 29 0 0 5 1 2 + 115 62 29 0 0 4 1 0 + 116 0 29 0 0 5 -2 0 + 116 2 29 0 0 4 -2 0 + 116 4 29 0 0 4 -1 0 + 116 6 29 0 0 6 -2 0 + 116 8 29 0 0 3 0 0 + 116 10 29 0 0 6 -1 2 + 116 12 29 0 0 5 -1 0 + 116 14 29 0 0 2 0 0 + 116 16 29 0 0 3 -1 0 + 116 18 29 0 0 2 -1 0 + 116 20 29 0 0 3 -2 0 + 116 22 29 0 0 2 -2 0 + 116 24 29 0 0 1 -1 0 + 116 26 29 0 0 1 -2 0 + 116 28 29 0 0 2 -3 0 + 116 30 29 0 0 2 -4 4 + 116 32 29 0 0 3 -5 0 + 116 34 29 0 0 3 -4 0 + 116 36 29 0 0 4 -5 0 + 116 38 29 0 0 4 -4 0 + 116 40 29 0 0 3 -3 0 + 116 42 29 0 0 4 -3 0 + 116 44 29 0 0 3 -6 0 + 116 46 29 0 0 7 -4 3 + 116 46 29 0 0 7 -3 3 + 116 48 29 0 0 4 -6 0 + 116 50 29 0 0 5 -6 2 + 116 52 29 0 0 5 -5 0 + 116 54 29 0 0 5 -4 0 + 116 56 29 0 0 6 -5 2 + 116 58 29 0 0 6 -3 0 + 116 60 29 0 0 5 -3 0 + 116 62 29 0 0 6 -4 0 + 129 0 29 1 0 -2 -3 0 + 129 2 29 1 0 -2 -4 0 + 129 4 29 1 0 -3 -3 0 + 129 6 29 1 0 -1 -4 0 + 129 8 29 1 0 0 -5 0 + 129 10 29 1 0 -1 -5 2 + 129 12 29 1 0 1 -6 2 + 129 14 29 1 0 0 -4 0 + 129 16 29 1 0 -1 -3 0 + 129 18 29 1 0 0 -3 0 + 129 20 29 1 0 3 -7 3 + 129 20 29 1 0 4 -7 3 + 129 22 29 1 0 2 -6 0 + 129 24 29 1 0 1 -5 0 + 129 26 29 1 0 1 -4 0 + 129 28 29 1 0 2 -5 0 + 129 30 29 1 0 1 -3 0 + 129 32 29 1 0 0 -2 0 + 129 34 29 1 0 0 -1 0 + 129 36 29 1 0 -1 0 0 + 129 38 29 1 0 -1 -1 0 + 129 40 29 1 0 -4 0 0 + 129 42 29 1 0 -3 0 0 + 129 44 29 1 0 -3 -1 0 + 129 46 29 1 0 -5 0 0 + 129 48 29 1 0 -5 -1 2 + 129 50 29 1 0 -4 -1 0 + 129 52 29 1 0 -2 -1 0 + 129 54 29 1 0 -1 -2 0 + 129 56 29 1 0 -2 -2 0 + 129 58 29 1 0 -3 -2 0 + 129 60 29 1 0 -4 -3 3 + 129 60 29 1 0 -3 -4 3 + 129 62 29 1 0 -4 -2 0 + 130 0 29 1 0 -4 3 0 + 130 2 29 1 0 -4 2 0 + 130 4 29 1 0 -5 3 0 + 130 6 29 1 0 -6 4 0 + 130 8 29 1 0 -5 1 0 + 130 10 29 1 0 -6 3 0 + 130 12 29 1 0 -7 4 3 + 130 12 29 1 0 -7 3 3 + 130 14 29 1 0 -6 2 0 + 130 16 29 1 0 -6 1 2 + 130 18 29 1 0 -5 2 0 + 130 20 29 1 0 -4 1 0 + 130 22 29 1 0 -3 1 0 + 130 24 29 1 0 -3 2 0 + 130 26 29 1 0 -2 1 0 + 130 28 29 1 0 -2 0 0 + 130 30 29 1 0 -3 3 0 + 130 32 29 1 0 -2 3 0 + 130 34 29 1 0 -2 2 0 + 130 36 29 1 0 0 0 0 + 130 38 29 1 0 -1 1 0 + 130 40 29 1 0 -1 2 4 + 130 42 29 1 0 -2 4 0 + 130 44 29 1 0 -3 4 0 + 130 46 29 1 0 -3 5 0 + 130 48 29 1 0 -4 6 0 + 130 50 29 1 0 -4 5 0 + 130 52 29 1 0 -5 6 2 + 130 54 29 1 0 -5 4 0 + 130 56 29 1 0 -5 5 0 + 130 58 29 1 0 -4 4 0 + 130 62 29 1 0 -6 5 2 + 131 0 29 1 0 2 2 0 + 131 2 29 1 0 1 3 0 + 131 4 29 1 0 2 3 0 + 131 6 29 1 0 0 4 0 + 131 8 29 1 0 3 3 0 + 131 10 29 1 0 -1 4 0 + 131 12 29 1 0 -1 5 0 + 131 14 29 1 0 4 2 0 + 131 16 29 1 0 3 4 3 + 131 16 29 1 0 4 3 3 + 131 18 29 1 0 2 4 0 + 131 20 29 1 0 1 4 0 + 131 22 29 1 0 1 5 2 + 131 24 29 1 0 0 5 0 + 131 26 29 1 0 -1 6 2 + 131 28 29 1 0 -2 6 0 + 131 30 29 1 0 -2 5 0 + 131 32 29 1 0 -3 6 0 + 131 34 29 1 0 -4 7 3 + 131 34 29 1 0 -3 7 3 + 131 36 29 1 0 0 1 0 + 131 38 29 1 0 0 2 0 + 131 40 29 1 0 -1 3 0 + 131 42 29 1 0 0 3 0 + 131 44 29 1 0 1 0 0 + 131 46 29 1 0 3 1 0 + 131 48 29 1 0 4 0 0 + 131 50 29 1 0 5 0 0 + 131 52 29 1 0 2 1 0 + 131 54 29 1 0 1 1 0 + 131 56 29 1 0 1 2 0 + 131 58 29 1 0 3 2 0 + 131 60 29 1 0 5 1 2 + 131 62 29 1 0 4 1 0 + 132 0 29 1 0 5 -2 0 + 132 2 29 1 0 4 -2 0 + 132 4 29 1 0 4 -1 0 + 132 6 29 1 0 6 -2 0 + 132 8 29 1 0 3 0 0 + 132 10 29 1 0 6 -1 2 + 132 12 29 1 0 5 -1 0 + 132 14 29 1 0 2 0 0 + 132 16 29 1 0 3 -1 0 + 132 18 29 1 0 2 -1 0 + 132 20 29 1 0 3 -2 0 + 132 22 29 1 0 2 -2 0 + 132 24 29 1 0 1 -1 0 + 132 26 29 1 0 1 -2 0 + 132 28 29 1 0 2 -3 0 + 132 30 29 1 0 2 -4 4 + 132 32 29 1 0 3 -5 0 + 132 34 29 1 0 3 -4 0 + 132 36 29 1 0 4 -5 0 + 132 38 29 1 0 4 -4 0 + 132 40 29 1 0 3 -3 0 + 132 42 29 1 0 4 -3 0 + 132 44 29 1 0 3 -6 0 + 132 46 29 1 0 7 -4 3 + 132 46 29 1 0 7 -3 3 + 132 48 29 1 0 4 -6 0 + 132 50 29 1 0 5 -6 2 + 132 52 29 1 0 5 -5 0 + 132 54 29 1 0 5 -4 0 + 132 56 29 1 0 6 -5 2 + 132 58 29 1 0 6 -3 0 + 132 60 29 1 0 5 -3 0 + 132 62 29 1 0 6 -4 0 + 133 0 29 -1 1 -2 -3 0 + 133 2 29 -1 1 -2 -4 0 + 133 4 29 -1 1 -3 -3 0 + 133 6 29 -1 1 -1 -4 0 + 133 8 29 -1 1 0 -5 0 + 133 10 29 -1 1 -1 -5 2 + 133 12 29 -1 1 1 -6 2 + 133 14 29 -1 1 0 -4 0 + 133 16 29 -1 1 -1 -3 0 + 133 18 29 -1 1 0 -3 0 + 133 20 29 -1 1 3 -7 3 + 133 20 29 -1 1 4 -7 3 + 133 22 29 -1 1 2 -6 0 + 133 24 29 -1 1 1 -5 0 + 133 26 29 -1 1 1 -4 0 + 133 28 29 -1 1 2 -5 0 + 133 30 29 -1 1 1 -3 0 + 133 32 29 -1 1 0 -2 0 + 133 34 29 -1 1 0 -1 0 + 133 36 29 -1 1 -1 0 0 + 133 38 29 -1 1 -1 -1 0 + 133 40 29 -1 1 -4 0 0 + 133 42 29 -1 1 -3 0 0 + 133 44 29 -1 1 -3 -1 0 + 133 46 29 -1 1 -5 0 0 + 133 48 29 -1 1 -5 -1 2 + 133 50 29 -1 1 -4 -1 0 + 133 52 29 -1 1 -2 -1 0 + 133 54 29 -1 1 -1 -2 0 + 133 56 29 -1 1 -2 -2 0 + 133 58 29 -1 1 -3 -2 0 + 133 60 29 -1 1 -4 -3 3 + 133 60 29 -1 1 -3 -4 3 + 133 62 29 -1 1 -4 -2 0 + 134 0 29 -1 1 -4 3 0 + 134 2 29 -1 1 -4 2 0 + 134 4 29 -1 1 -5 3 0 + 134 6 29 -1 1 -6 4 0 + 134 8 29 -1 1 -5 1 0 + 134 10 29 -1 1 -6 3 0 + 134 12 29 -1 1 -7 4 3 + 134 12 29 -1 1 -7 3 3 + 134 14 29 -1 1 -6 2 0 + 134 16 29 -1 1 -6 1 2 + 134 18 29 -1 1 -5 2 0 + 134 20 29 -1 1 -4 1 0 + 134 22 29 -1 1 -3 1 0 + 134 24 29 -1 1 -3 2 0 + 134 26 29 -1 1 -2 1 0 + 134 28 29 -1 1 -2 0 0 + 134 30 29 -1 1 -3 3 0 + 134 32 29 -1 1 -2 3 0 + 134 34 29 -1 1 -2 2 0 + 134 36 29 -1 1 0 0 0 + 134 38 29 -1 1 -1 1 0 + 134 40 29 -1 1 -1 2 4 + 134 42 29 -1 1 -2 4 0 + 134 44 29 -1 1 -3 4 0 + 134 46 29 -1 1 -3 5 0 + 134 48 29 -1 1 -4 6 0 + 134 50 29 -1 1 -4 5 0 + 134 52 29 -1 1 -5 6 2 + 134 54 29 -1 1 -5 4 0 + 134 56 29 -1 1 -5 5 0 + 134 58 29 -1 1 -4 4 0 + 134 62 29 -1 1 -6 5 2 + 135 0 29 -1 1 2 2 0 + 135 2 29 -1 1 1 3 0 + 135 4 29 -1 1 2 3 0 + 135 6 29 -1 1 0 4 0 + 135 8 29 -1 1 3 3 0 + 135 10 29 -1 1 -1 4 0 + 135 12 29 -1 1 -1 5 0 + 135 14 29 -1 1 4 2 0 + 135 16 29 -1 1 3 4 3 + 135 16 29 -1 1 4 3 3 + 135 18 29 -1 1 2 4 0 + 135 20 29 -1 1 1 4 0 + 135 22 29 -1 1 1 5 2 + 135 24 29 -1 1 0 5 0 + 135 26 29 -1 1 -1 6 2 + 135 28 29 -1 1 -2 6 0 + 135 30 29 -1 1 -2 5 0 + 135 32 29 -1 1 -3 6 0 + 135 34 29 -1 1 -4 7 3 + 135 34 29 -1 1 -3 7 3 + 135 36 29 -1 1 0 1 0 + 135 38 29 -1 1 0 2 0 + 135 40 29 -1 1 -1 3 0 + 135 42 29 -1 1 0 3 0 + 135 44 29 -1 1 1 0 0 + 135 46 29 -1 1 3 1 0 + 135 48 29 -1 1 4 0 0 + 135 50 29 -1 1 5 0 0 + 135 52 29 -1 1 2 1 0 + 135 54 29 -1 1 1 1 0 + 135 56 29 -1 1 1 2 0 + 135 58 29 -1 1 3 2 0 + 135 60 29 -1 1 5 1 2 + 135 62 29 -1 1 4 1 0 + 136 0 29 -1 1 5 -2 0 + 136 2 29 -1 1 4 -2 0 + 136 4 29 -1 1 4 -1 0 + 136 6 29 -1 1 6 -2 0 + 136 8 29 -1 1 3 0 0 + 136 10 29 -1 1 6 -1 2 + 136 12 29 -1 1 5 -1 0 + 136 14 29 -1 1 2 0 0 + 136 16 29 -1 1 3 -1 0 + 136 18 29 -1 1 2 -1 0 + 136 20 29 -1 1 3 -2 0 + 136 22 29 -1 1 2 -2 0 + 136 24 29 -1 1 1 -1 0 + 136 26 29 -1 1 1 -2 0 + 136 28 29 -1 1 2 -3 0 + 136 30 29 -1 1 2 -4 4 + 136 32 29 -1 1 3 -5 0 + 136 34 29 -1 1 3 -4 0 + 136 36 29 -1 1 4 -5 0 + 136 38 29 -1 1 4 -4 0 + 136 40 29 -1 1 3 -3 0 + 136 42 29 -1 1 4 -3 0 + 136 44 29 -1 1 3 -6 0 + 136 46 29 -1 1 7 -4 3 + 136 46 29 -1 1 7 -3 3 + 136 48 29 -1 1 4 -6 0 + 136 50 29 -1 1 5 -6 2 + 136 52 29 -1 1 5 -5 0 + 136 54 29 -1 1 5 -4 0 + 136 56 29 -1 1 6 -5 2 + 136 58 29 -1 1 6 -3 0 + 136 60 29 -1 1 5 -3 0 + 136 62 29 -1 1 6 -4 0 + 137 0 29 0 1 -2 -3 0 + 137 2 29 0 1 -2 -4 0 + 137 4 29 0 1 -3 -3 0 + 137 6 29 0 1 -1 -4 0 + 137 8 29 0 1 0 -5 0 + 137 10 29 0 1 -1 -5 2 + 137 12 29 0 1 1 -6 2 + 137 14 29 0 1 0 -4 0 + 137 16 29 0 1 -1 -3 0 + 137 18 29 0 1 0 -3 0 + 137 20 29 0 1 3 -7 3 + 137 20 29 0 1 4 -7 3 + 137 22 29 0 1 2 -6 0 + 137 24 29 0 1 1 -5 0 + 137 26 29 0 1 1 -4 0 + 137 28 29 0 1 2 -5 0 + 137 30 29 0 1 1 -3 0 + 137 32 29 0 1 0 -2 0 + 137 34 29 0 1 0 -1 0 + 137 36 29 0 1 -1 0 0 + 137 38 29 0 1 -1 -1 0 + 137 40 29 0 1 -4 0 0 + 137 42 29 0 1 -3 0 0 + 137 44 29 0 1 -3 -1 0 + 137 46 29 0 1 -5 0 0 + 137 48 29 0 1 -5 -1 2 + 137 50 29 0 1 -4 -1 0 + 137 52 29 0 1 -2 -1 0 + 137 54 29 0 1 -1 -2 0 + 137 56 29 0 1 -2 -2 0 + 137 58 29 0 1 -3 -2 0 + 137 60 29 0 1 -4 -3 3 + 137 60 29 0 1 -3 -4 3 + 137 62 29 0 1 -4 -2 0 + 138 0 29 0 1 -4 3 0 + 138 2 29 0 1 -4 2 0 + 138 4 29 0 1 -5 3 0 + 138 6 29 0 1 -6 4 0 + 138 8 29 0 1 -5 1 0 + 138 10 29 0 1 -6 3 0 + 138 12 29 0 1 -7 4 3 + 138 12 29 0 1 -7 3 3 + 138 14 29 0 1 -6 2 0 + 138 16 29 0 1 -6 1 2 + 138 18 29 0 1 -5 2 0 + 138 20 29 0 1 -4 1 0 + 138 22 29 0 1 -3 1 0 + 138 24 29 0 1 -3 2 0 + 138 26 29 0 1 -2 1 0 + 138 28 29 0 1 -2 0 0 + 138 30 29 0 1 -3 3 0 + 138 32 29 0 1 -2 3 0 + 138 34 29 0 1 -2 2 0 + 138 36 29 0 1 0 0 0 + 138 38 29 0 1 -1 1 0 + 138 40 29 0 1 -1 2 4 + 138 42 29 0 1 -2 4 0 + 138 44 29 0 1 -3 4 0 + 138 46 29 0 1 -3 5 0 + 138 48 29 0 1 -4 6 0 + 138 50 29 0 1 -4 5 0 + 138 52 29 0 1 -5 6 2 + 138 54 29 0 1 -5 4 0 + 138 56 29 0 1 -5 5 0 + 138 58 29 0 1 -4 4 0 + 138 62 29 0 1 -6 5 2 + 139 0 29 0 1 2 2 0 + 139 2 29 0 1 1 3 0 + 139 4 29 0 1 2 3 0 + 139 6 29 0 1 0 4 0 + 139 8 29 0 1 3 3 0 + 139 10 29 0 1 -1 4 0 + 139 12 29 0 1 -1 5 0 + 139 14 29 0 1 4 2 0 + 139 16 29 0 1 3 4 3 + 139 16 29 0 1 4 3 3 + 139 18 29 0 1 2 4 0 + 139 20 29 0 1 1 4 0 + 139 22 29 0 1 1 5 2 + 139 24 29 0 1 0 5 0 + 139 26 29 0 1 -1 6 2 + 139 28 29 0 1 -2 6 0 + 139 30 29 0 1 -2 5 0 + 139 32 29 0 1 -3 6 0 + 139 34 29 0 1 -4 7 3 + 139 34 29 0 1 -3 7 3 + 139 36 29 0 1 0 1 0 + 139 38 29 0 1 0 2 0 + 139 40 29 0 1 -1 3 0 + 139 42 29 0 1 0 3 0 + 139 44 29 0 1 1 0 0 + 139 46 29 0 1 3 1 0 + 139 48 29 0 1 4 0 0 + 139 50 29 0 1 5 0 0 + 139 52 29 0 1 2 1 0 + 139 54 29 0 1 1 1 0 + 139 56 29 0 1 1 2 0 + 139 58 29 0 1 3 2 0 + 139 60 29 0 1 5 1 2 + 139 62 29 0 1 4 1 0 + 140 0 29 0 1 5 -2 0 + 140 2 29 0 1 4 -2 0 + 140 4 29 0 1 4 -1 0 + 140 6 29 0 1 6 -2 0 + 140 8 29 0 1 3 0 0 + 140 10 29 0 1 6 -1 2 + 140 12 29 0 1 5 -1 0 + 140 14 29 0 1 2 0 0 + 140 16 29 0 1 3 -1 0 + 140 18 29 0 1 2 -1 0 + 140 20 29 0 1 3 -2 0 + 140 22 29 0 1 2 -2 0 + 140 24 29 0 1 1 -1 0 + 140 26 29 0 1 1 -2 0 + 140 28 29 0 1 2 -3 0 + 140 30 29 0 1 2 -4 4 + 140 32 29 0 1 3 -5 0 + 140 34 29 0 1 3 -4 0 + 140 36 29 0 1 4 -5 0 + 140 38 29 0 1 4 -4 0 + 140 40 29 0 1 3 -3 0 + 140 42 29 0 1 4 -3 0 + 140 44 29 0 1 3 -6 0 + 140 46 29 0 1 7 -4 3 + 140 46 29 0 1 7 -3 3 + 140 48 29 0 1 4 -6 0 + 140 50 29 0 1 5 -6 2 + 140 52 29 0 1 5 -5 0 + 140 54 29 0 1 5 -4 0 + 140 56 29 0 1 6 -5 2 + 140 58 29 0 1 6 -3 0 + 140 60 29 0 1 5 -3 0 + 140 62 29 0 1 6 -4 0 + 121 0 30 0 -1 -2 -3 0 + 121 2 30 0 -1 -2 -4 0 + 121 4 30 0 -1 -3 -3 0 + 121 6 30 0 -1 -1 -4 0 + 121 8 30 0 -1 0 -5 0 + 121 10 30 0 -1 -1 -5 2 + 121 12 30 0 -1 1 -6 2 + 121 14 30 0 -1 0 -4 0 + 121 16 30 0 -1 -1 -3 0 + 121 18 30 0 -1 0 -3 0 + 121 20 30 0 -1 3 -7 3 + 121 20 30 0 -1 4 -7 3 + 121 22 30 0 -1 2 -6 0 + 121 24 30 0 -1 1 -5 0 + 121 26 30 0 -1 1 -4 0 + 121 28 30 0 -1 2 -5 0 + 121 30 30 0 -1 1 -3 0 + 121 32 30 0 -1 0 -2 0 + 121 34 30 0 -1 0 -1 0 + 121 36 30 0 -1 -1 0 0 + 121 38 30 0 -1 -1 -1 0 + 121 40 30 0 -1 -4 0 0 + 121 42 30 0 -1 -3 0 0 + 121 44 30 0 -1 -3 -1 0 + 121 46 30 0 -1 -5 0 0 + 121 48 30 0 -1 -5 -1 2 + 121 50 30 0 -1 -4 -1 0 + 121 52 30 0 -1 -2 -1 0 + 121 54 30 0 -1 -1 -2 0 + 121 56 30 0 -1 -2 -2 0 + 121 58 30 0 -1 -3 -2 0 + 121 60 30 0 -1 -4 -3 3 + 121 60 30 0 -1 -3 -4 3 + 121 62 30 0 -1 -4 -2 0 + 122 0 30 0 -1 -4 3 0 + 122 2 30 0 -1 -4 2 0 + 122 4 30 0 -1 -5 3 0 + 122 6 30 0 -1 -6 4 0 + 122 8 30 0 -1 -5 1 0 + 122 10 30 0 -1 -6 3 0 + 122 12 30 0 -1 -7 4 3 + 122 12 30 0 -1 -7 3 3 + 122 14 30 0 -1 -6 2 0 + 122 16 30 0 -1 -6 1 2 + 122 18 30 0 -1 -5 2 0 + 122 20 30 0 -1 -4 1 0 + 122 22 30 0 -1 -3 1 0 + 122 24 30 0 -1 -3 2 0 + 122 26 30 0 -1 -2 1 0 + 122 28 30 0 -1 -2 0 0 + 122 30 30 0 -1 -3 3 0 + 122 32 30 0 -1 -2 3 0 + 122 34 30 0 -1 -2 2 0 + 122 36 30 0 -1 0 0 0 + 122 38 30 0 -1 -1 1 0 + 122 40 30 0 -1 -1 2 4 + 122 42 30 0 -1 -2 4 0 + 122 44 30 0 -1 -3 4 0 + 122 46 30 0 -1 -3 5 0 + 122 48 30 0 -1 -4 6 0 + 122 50 30 0 -1 -4 5 0 + 122 52 30 0 -1 -5 6 2 + 122 54 30 0 -1 -5 4 0 + 122 56 30 0 -1 -5 5 0 + 122 58 30 0 -1 -4 4 0 + 122 62 30 0 -1 -6 5 2 + 123 0 30 0 -1 2 2 0 + 123 2 30 0 -1 1 3 0 + 123 4 30 0 -1 2 3 0 + 123 6 30 0 -1 0 4 0 + 123 8 30 0 -1 3 3 0 + 123 10 30 0 -1 -1 4 0 + 123 12 30 0 -1 -1 5 0 + 123 14 30 0 -1 4 2 0 + 123 16 30 0 -1 3 4 3 + 123 16 30 0 -1 4 3 3 + 123 18 30 0 -1 2 4 0 + 123 20 30 0 -1 1 4 0 + 123 22 30 0 -1 1 5 2 + 123 24 30 0 -1 0 5 0 + 123 26 30 0 -1 -1 6 2 + 123 28 30 0 -1 -2 6 0 + 123 30 30 0 -1 -2 5 0 + 123 32 30 0 -1 -3 6 0 + 123 34 30 0 -1 -4 7 3 + 123 34 30 0 -1 -3 7 3 + 123 36 30 0 -1 0 1 0 + 123 38 30 0 -1 0 2 0 + 123 40 30 0 -1 -1 3 0 + 123 42 30 0 -1 0 3 0 + 123 44 30 0 -1 1 0 0 + 123 46 30 0 -1 3 1 0 + 123 48 30 0 -1 4 0 0 + 123 50 30 0 -1 5 0 0 + 123 52 30 0 -1 2 1 0 + 123 54 30 0 -1 1 1 0 + 123 56 30 0 -1 1 2 0 + 123 58 30 0 -1 3 2 0 + 123 60 30 0 -1 5 1 2 + 123 62 30 0 -1 4 1 0 + 124 0 30 0 -1 5 -2 0 + 124 2 30 0 -1 4 -2 0 + 124 4 30 0 -1 4 -1 0 + 124 6 30 0 -1 6 -2 0 + 124 8 30 0 -1 3 0 0 + 124 10 30 0 -1 6 -1 2 + 124 12 30 0 -1 5 -1 0 + 124 14 30 0 -1 2 0 0 + 124 16 30 0 -1 3 -1 0 + 124 18 30 0 -1 2 -1 0 + 124 20 30 0 -1 3 -2 0 + 124 22 30 0 -1 2 -2 0 + 124 24 30 0 -1 1 -1 0 + 124 26 30 0 -1 1 -2 0 + 124 28 30 0 -1 2 -3 0 + 124 30 30 0 -1 2 -4 4 + 124 32 30 0 -1 3 -5 0 + 124 34 30 0 -1 3 -4 0 + 124 36 30 0 -1 4 -5 0 + 124 38 30 0 -1 4 -4 0 + 124 40 30 0 -1 3 -3 0 + 124 42 30 0 -1 4 -3 0 + 124 44 30 0 -1 3 -6 0 + 124 46 30 0 -1 7 -4 3 + 124 46 30 0 -1 7 -3 3 + 124 48 30 0 -1 4 -6 0 + 124 50 30 0 -1 5 -6 2 + 124 52 30 0 -1 5 -5 0 + 124 54 30 0 -1 5 -4 0 + 124 56 30 0 -1 6 -5 2 + 124 58 30 0 -1 6 -3 0 + 124 60 30 0 -1 5 -3 0 + 124 62 30 0 -1 6 -4 0 + 125 0 30 1 -1 -2 -3 0 + 125 2 30 1 -1 -2 -4 0 + 125 4 30 1 -1 -3 -3 0 + 125 6 30 1 -1 -1 -4 0 + 125 8 30 1 -1 0 -5 0 + 125 10 30 1 -1 -1 -5 2 + 125 12 30 1 -1 1 -6 2 + 125 14 30 1 -1 0 -4 0 + 125 16 30 1 -1 -1 -3 0 + 125 18 30 1 -1 0 -3 0 + 125 20 30 1 -1 3 -7 3 + 125 20 30 1 -1 4 -7 3 + 125 22 30 1 -1 2 -6 0 + 125 24 30 1 -1 1 -5 0 + 125 26 30 1 -1 1 -4 0 + 125 28 30 1 -1 2 -5 0 + 125 30 30 1 -1 1 -3 0 + 125 32 30 1 -1 0 -2 0 + 125 34 30 1 -1 0 -1 0 + 125 36 30 1 -1 -1 0 0 + 125 38 30 1 -1 -1 -1 0 + 125 40 30 1 -1 -4 0 0 + 125 42 30 1 -1 -3 0 0 + 125 44 30 1 -1 -3 -1 0 + 125 46 30 1 -1 -5 0 0 + 125 48 30 1 -1 -5 -1 2 + 125 50 30 1 -1 -4 -1 0 + 125 52 30 1 -1 -2 -1 0 + 125 54 30 1 -1 -1 -2 0 + 125 56 30 1 -1 -2 -2 0 + 125 58 30 1 -1 -3 -2 0 + 125 60 30 1 -1 -4 -3 3 + 125 60 30 1 -1 -3 -4 3 + 125 62 30 1 -1 -4 -2 0 + 126 0 30 1 -1 -4 3 0 + 126 2 30 1 -1 -4 2 0 + 126 4 30 1 -1 -5 3 0 + 126 6 30 1 -1 -6 4 0 + 126 8 30 1 -1 -5 1 0 + 126 10 30 1 -1 -6 3 0 + 126 12 30 1 -1 -7 4 3 + 126 12 30 1 -1 -7 3 3 + 126 14 30 1 -1 -6 2 0 + 126 16 30 1 -1 -6 1 2 + 126 18 30 1 -1 -5 2 0 + 126 20 30 1 -1 -4 1 0 + 126 22 30 1 -1 -3 1 0 + 126 24 30 1 -1 -3 2 0 + 126 26 30 1 -1 -2 1 0 + 126 28 30 1 -1 -2 0 0 + 126 30 30 1 -1 -3 3 0 + 126 32 30 1 -1 -2 3 0 + 126 34 30 1 -1 -2 2 0 + 126 36 30 1 -1 0 0 0 + 126 38 30 1 -1 -1 1 0 + 126 40 30 1 -1 -1 2 4 + 126 42 30 1 -1 -2 4 0 + 126 44 30 1 -1 -3 4 0 + 126 46 30 1 -1 -3 5 0 + 126 48 30 1 -1 -4 6 0 + 126 50 30 1 -1 -4 5 0 + 126 52 30 1 -1 -5 6 2 + 126 54 30 1 -1 -5 4 0 + 126 56 30 1 -1 -5 5 0 + 126 58 30 1 -1 -4 4 0 + 126 62 30 1 -1 -6 5 2 + 127 0 30 1 -1 2 2 0 + 127 2 30 1 -1 1 3 0 + 127 4 30 1 -1 2 3 0 + 127 6 30 1 -1 0 4 0 + 127 8 30 1 -1 3 3 0 + 127 10 30 1 -1 -1 4 0 + 127 12 30 1 -1 -1 5 0 + 127 14 30 1 -1 4 2 0 + 127 16 30 1 -1 3 4 3 + 127 16 30 1 -1 4 3 3 + 127 18 30 1 -1 2 4 0 + 127 20 30 1 -1 1 4 0 + 127 22 30 1 -1 1 5 2 + 127 24 30 1 -1 0 5 0 + 127 26 30 1 -1 -1 6 2 + 127 28 30 1 -1 -2 6 0 + 127 30 30 1 -1 -2 5 0 + 127 32 30 1 -1 -3 6 0 + 127 34 30 1 -1 -4 7 3 + 127 34 30 1 -1 -3 7 3 + 127 36 30 1 -1 0 1 0 + 127 38 30 1 -1 0 2 0 + 127 40 30 1 -1 -1 3 0 + 127 42 30 1 -1 0 3 0 + 127 44 30 1 -1 1 0 0 + 127 46 30 1 -1 3 1 0 + 127 48 30 1 -1 4 0 0 + 127 50 30 1 -1 5 0 0 + 127 52 30 1 -1 2 1 0 + 127 54 30 1 -1 1 1 0 + 127 56 30 1 -1 1 2 0 + 127 58 30 1 -1 3 2 0 + 127 60 30 1 -1 5 1 2 + 127 62 30 1 -1 4 1 0 + 128 0 30 1 -1 5 -2 0 + 128 2 30 1 -1 4 -2 0 + 128 4 30 1 -1 4 -1 0 + 128 6 30 1 -1 6 -2 0 + 128 8 30 1 -1 3 0 0 + 128 10 30 1 -1 6 -1 2 + 128 12 30 1 -1 5 -1 0 + 128 14 30 1 -1 2 0 0 + 128 16 30 1 -1 3 -1 0 + 128 18 30 1 -1 2 -1 0 + 128 20 30 1 -1 3 -2 0 + 128 22 30 1 -1 2 -2 0 + 128 24 30 1 -1 1 -1 0 + 128 26 30 1 -1 1 -2 0 + 128 28 30 1 -1 2 -3 0 + 128 30 30 1 -1 2 -4 4 + 128 32 30 1 -1 3 -5 0 + 128 34 30 1 -1 3 -4 0 + 128 36 30 1 -1 4 -5 0 + 128 38 30 1 -1 4 -4 0 + 128 40 30 1 -1 3 -3 0 + 128 42 30 1 -1 4 -3 0 + 128 44 30 1 -1 3 -6 0 + 128 46 30 1 -1 7 -4 3 + 128 46 30 1 -1 7 -3 3 + 128 48 30 1 -1 4 -6 0 + 128 50 30 1 -1 5 -6 2 + 128 52 30 1 -1 5 -5 0 + 128 54 30 1 -1 5 -4 0 + 128 56 30 1 -1 6 -5 2 + 128 58 30 1 -1 6 -3 0 + 128 60 30 1 -1 5 -3 0 + 128 62 30 1 -1 6 -4 0 + 129 0 30 -1 0 -2 -3 0 + 129 2 30 -1 0 -2 -4 0 + 129 4 30 -1 0 -3 -3 0 + 129 6 30 -1 0 -1 -4 0 + 129 8 30 -1 0 0 -5 0 + 129 10 30 -1 0 -1 -5 2 + 129 12 30 -1 0 1 -6 2 + 129 14 30 -1 0 0 -4 0 + 129 16 30 -1 0 -1 -3 0 + 129 18 30 -1 0 0 -3 0 + 129 20 30 -1 0 3 -7 3 + 129 20 30 -1 0 4 -7 3 + 129 22 30 -1 0 2 -6 0 + 129 24 30 -1 0 1 -5 0 + 129 26 30 -1 0 1 -4 0 + 129 28 30 -1 0 2 -5 0 + 129 30 30 -1 0 1 -3 0 + 129 32 30 -1 0 0 -2 0 + 129 34 30 -1 0 0 -1 0 + 129 36 30 -1 0 -1 0 0 + 129 38 30 -1 0 -1 -1 0 + 129 40 30 -1 0 -4 0 0 + 129 42 30 -1 0 -3 0 0 + 129 44 30 -1 0 -3 -1 0 + 129 46 30 -1 0 -5 0 0 + 129 48 30 -1 0 -5 -1 2 + 129 50 30 -1 0 -4 -1 0 + 129 52 30 -1 0 -2 -1 0 + 129 54 30 -1 0 -1 -2 0 + 129 56 30 -1 0 -2 -2 0 + 129 58 30 -1 0 -3 -2 0 + 129 60 30 -1 0 -4 -3 3 + 129 60 30 -1 0 -3 -4 3 + 129 62 30 -1 0 -4 -2 0 + 130 0 30 -1 0 -4 3 0 + 130 2 30 -1 0 -4 2 0 + 130 4 30 -1 0 -5 3 0 + 130 6 30 -1 0 -6 4 0 + 130 8 30 -1 0 -5 1 0 + 130 10 30 -1 0 -6 3 0 + 130 12 30 -1 0 -7 4 3 + 130 12 30 -1 0 -7 3 3 + 130 14 30 -1 0 -6 2 0 + 130 16 30 -1 0 -6 1 2 + 130 18 30 -1 0 -5 2 0 + 130 20 30 -1 0 -4 1 0 + 130 22 30 -1 0 -3 1 0 + 130 24 30 -1 0 -3 2 0 + 130 26 30 -1 0 -2 1 0 + 130 28 30 -1 0 -2 0 0 + 130 30 30 -1 0 -3 3 0 + 130 32 30 -1 0 -2 3 0 + 130 34 30 -1 0 -2 2 0 + 130 36 30 -1 0 0 0 0 + 130 38 30 -1 0 -1 1 0 + 130 40 30 -1 0 -1 2 4 + 130 42 30 -1 0 -2 4 0 + 130 44 30 -1 0 -3 4 0 + 130 46 30 -1 0 -3 5 0 + 130 48 30 -1 0 -4 6 0 + 130 50 30 -1 0 -4 5 0 + 130 52 30 -1 0 -5 6 2 + 130 54 30 -1 0 -5 4 0 + 130 56 30 -1 0 -5 5 0 + 130 58 30 -1 0 -4 4 0 + 130 62 30 -1 0 -6 5 2 + 131 0 30 -1 0 2 2 0 + 131 2 30 -1 0 1 3 0 + 131 4 30 -1 0 2 3 0 + 131 6 30 -1 0 0 4 0 + 131 8 30 -1 0 3 3 0 + 131 10 30 -1 0 -1 4 0 + 131 12 30 -1 0 -1 5 0 + 131 14 30 -1 0 4 2 0 + 131 16 30 -1 0 3 4 3 + 131 16 30 -1 0 4 3 3 + 131 18 30 -1 0 2 4 0 + 131 20 30 -1 0 1 4 0 + 131 22 30 -1 0 1 5 2 + 131 24 30 -1 0 0 5 0 + 131 26 30 -1 0 -1 6 2 + 131 28 30 -1 0 -2 6 0 + 131 30 30 -1 0 -2 5 0 + 131 32 30 -1 0 -3 6 0 + 131 34 30 -1 0 -4 7 3 + 131 34 30 -1 0 -3 7 3 + 131 36 30 -1 0 0 1 0 + 131 38 30 -1 0 0 2 0 + 131 40 30 -1 0 -1 3 0 + 131 42 30 -1 0 0 3 0 + 131 44 30 -1 0 1 0 0 + 131 46 30 -1 0 3 1 0 + 131 48 30 -1 0 4 0 0 + 131 50 30 -1 0 5 0 0 + 131 52 30 -1 0 2 1 0 + 131 54 30 -1 0 1 1 0 + 131 56 30 -1 0 1 2 0 + 131 58 30 -1 0 3 2 0 + 131 60 30 -1 0 5 1 2 + 131 62 30 -1 0 4 1 0 + 132 0 30 -1 0 5 -2 0 + 132 2 30 -1 0 4 -2 0 + 132 4 30 -1 0 4 -1 0 + 132 6 30 -1 0 6 -2 0 + 132 8 30 -1 0 3 0 0 + 132 10 30 -1 0 6 -1 2 + 132 12 30 -1 0 5 -1 0 + 132 14 30 -1 0 2 0 0 + 132 16 30 -1 0 3 -1 0 + 132 18 30 -1 0 2 -1 0 + 132 20 30 -1 0 3 -2 0 + 132 22 30 -1 0 2 -2 0 + 132 24 30 -1 0 1 -1 0 + 132 26 30 -1 0 1 -2 0 + 132 28 30 -1 0 2 -3 0 + 132 30 30 -1 0 2 -4 4 + 132 32 30 -1 0 3 -5 0 + 132 34 30 -1 0 3 -4 0 + 132 36 30 -1 0 4 -5 0 + 132 38 30 -1 0 4 -4 0 + 132 40 30 -1 0 3 -3 0 + 132 42 30 -1 0 4 -3 0 + 132 44 30 -1 0 3 -6 0 + 132 46 30 -1 0 7 -4 3 + 132 46 30 -1 0 7 -3 3 + 132 48 30 -1 0 4 -6 0 + 132 50 30 -1 0 5 -6 2 + 132 52 30 -1 0 5 -5 0 + 132 54 30 -1 0 5 -4 0 + 132 56 30 -1 0 6 -5 2 + 132 58 30 -1 0 6 -3 0 + 132 60 30 -1 0 5 -3 0 + 132 62 30 -1 0 6 -4 0 + 117 0 30 0 0 -2 -3 0 + 117 2 30 0 0 -2 -4 0 + 117 4 30 0 0 -3 -3 0 + 117 6 30 0 0 -1 -4 0 + 117 8 30 0 0 0 -5 0 + 117 10 30 0 0 -1 -5 2 + 117 12 30 0 0 1 -6 2 + 117 14 30 0 0 0 -4 0 + 117 16 30 0 0 -1 -3 0 + 117 18 30 0 0 0 -3 0 + 117 20 30 0 0 3 -7 3 + 117 20 30 0 0 4 -7 3 + 117 22 30 0 0 2 -6 0 + 117 24 30 0 0 1 -5 0 + 117 26 30 0 0 1 -4 0 + 117 28 30 0 0 2 -5 0 + 117 30 30 0 0 1 -3 0 + 117 32 30 0 0 0 -2 0 + 117 34 30 0 0 0 -1 0 + 117 36 30 0 0 -1 0 0 + 117 38 30 0 0 -1 -1 0 + 117 40 30 0 0 -4 0 0 + 117 42 30 0 0 -3 0 0 + 117 44 30 0 0 -3 -1 0 + 117 46 30 0 0 -5 0 0 + 117 48 30 0 0 -5 -1 2 + 117 50 30 0 0 -4 -1 0 + 117 52 30 0 0 -2 -1 0 + 117 54 30 0 0 -1 -2 0 + 117 56 30 0 0 -2 -2 0 + 117 58 30 0 0 -3 -2 0 + 117 60 30 0 0 -4 -3 3 + 117 60 30 0 0 -3 -4 3 + 117 62 30 0 0 -4 -2 0 + 118 0 30 0 0 -4 3 0 + 118 2 30 0 0 -4 2 0 + 118 4 30 0 0 -5 3 0 + 118 6 30 0 0 -6 4 0 + 118 8 30 0 0 -5 1 0 + 118 10 30 0 0 -6 3 0 + 118 12 30 0 0 -7 4 3 + 118 12 30 0 0 -7 3 3 + 118 14 30 0 0 -6 2 0 + 118 16 30 0 0 -6 1 2 + 118 18 30 0 0 -5 2 0 + 118 20 30 0 0 -4 1 0 + 118 22 30 0 0 -3 1 0 + 118 24 30 0 0 -3 2 0 + 118 26 30 0 0 -2 1 0 + 118 28 30 0 0 -2 0 0 + 118 30 30 0 0 -3 3 0 + 118 32 30 0 0 -2 3 0 + 118 34 30 0 0 -2 2 0 + 118 36 30 0 0 0 0 0 + 118 38 30 0 0 -1 1 0 + 118 40 30 0 0 -1 2 4 + 118 42 30 0 0 -2 4 0 + 118 44 30 0 0 -3 4 0 + 118 46 30 0 0 -3 5 0 + 118 48 30 0 0 -4 6 0 + 118 50 30 0 0 -4 5 0 + 118 52 30 0 0 -5 6 2 + 118 54 30 0 0 -5 4 0 + 118 56 30 0 0 -5 5 0 + 118 58 30 0 0 -4 4 0 + 118 62 30 0 0 -6 5 2 + 119 0 30 0 0 2 2 0 + 119 2 30 0 0 1 3 0 + 119 4 30 0 0 2 3 0 + 119 6 30 0 0 0 4 0 + 119 8 30 0 0 3 3 0 + 119 10 30 0 0 -1 4 0 + 119 12 30 0 0 -1 5 0 + 119 14 30 0 0 4 2 0 + 119 16 30 0 0 3 4 3 + 119 16 30 0 0 4 3 3 + 119 18 30 0 0 2 4 0 + 119 20 30 0 0 1 4 0 + 119 22 30 0 0 1 5 2 + 119 24 30 0 0 0 5 0 + 119 26 30 0 0 -1 6 2 + 119 28 30 0 0 -2 6 0 + 119 30 30 0 0 -2 5 0 + 119 32 30 0 0 -3 6 0 + 119 34 30 0 0 -4 7 3 + 119 34 30 0 0 -3 7 3 + 119 36 30 0 0 0 1 0 + 119 38 30 0 0 0 2 0 + 119 40 30 0 0 -1 3 0 + 119 42 30 0 0 0 3 0 + 119 44 30 0 0 1 0 0 + 119 46 30 0 0 3 1 0 + 119 48 30 0 0 4 0 0 + 119 50 30 0 0 5 0 0 + 119 52 30 0 0 2 1 0 + 119 54 30 0 0 1 1 0 + 119 56 30 0 0 1 2 0 + 119 58 30 0 0 3 2 0 + 119 60 30 0 0 5 1 2 + 119 62 30 0 0 4 1 0 + 120 0 30 0 0 5 -2 0 + 120 2 30 0 0 4 -2 0 + 120 4 30 0 0 4 -1 0 + 120 6 30 0 0 6 -2 0 + 120 8 30 0 0 3 0 0 + 120 10 30 0 0 6 -1 2 + 120 12 30 0 0 5 -1 0 + 120 14 30 0 0 2 0 0 + 120 16 30 0 0 3 -1 0 + 120 18 30 0 0 2 -1 0 + 120 20 30 0 0 3 -2 0 + 120 22 30 0 0 2 -2 0 + 120 24 30 0 0 1 -1 0 + 120 26 30 0 0 1 -2 0 + 120 28 30 0 0 2 -3 0 + 120 30 30 0 0 2 -4 4 + 120 32 30 0 0 3 -5 0 + 120 34 30 0 0 3 -4 0 + 120 36 30 0 0 4 -5 0 + 120 38 30 0 0 4 -4 0 + 120 40 30 0 0 3 -3 0 + 120 42 30 0 0 4 -3 0 + 120 44 30 0 0 3 -6 0 + 120 46 30 0 0 7 -4 3 + 120 46 30 0 0 7 -3 3 + 120 48 30 0 0 4 -6 0 + 120 50 30 0 0 5 -6 2 + 120 52 30 0 0 5 -5 0 + 120 54 30 0 0 5 -4 0 + 120 56 30 0 0 6 -5 2 + 120 58 30 0 0 6 -3 0 + 120 60 30 0 0 5 -3 0 + 120 62 30 0 0 6 -4 0 + 133 0 30 1 0 -2 -3 0 + 133 2 30 1 0 -2 -4 0 + 133 4 30 1 0 -3 -3 0 + 133 6 30 1 0 -1 -4 0 + 133 8 30 1 0 0 -5 0 + 133 10 30 1 0 -1 -5 2 + 133 12 30 1 0 1 -6 2 + 133 14 30 1 0 0 -4 0 + 133 16 30 1 0 -1 -3 0 + 133 18 30 1 0 0 -3 0 + 133 20 30 1 0 3 -7 3 + 133 20 30 1 0 4 -7 3 + 133 22 30 1 0 2 -6 0 + 133 24 30 1 0 1 -5 0 + 133 26 30 1 0 1 -4 0 + 133 28 30 1 0 2 -5 0 + 133 30 30 1 0 1 -3 0 + 133 32 30 1 0 0 -2 0 + 133 34 30 1 0 0 -1 0 + 133 36 30 1 0 -1 0 0 + 133 38 30 1 0 -1 -1 0 + 133 40 30 1 0 -4 0 0 + 133 42 30 1 0 -3 0 0 + 133 44 30 1 0 -3 -1 0 + 133 46 30 1 0 -5 0 0 + 133 48 30 1 0 -5 -1 2 + 133 50 30 1 0 -4 -1 0 + 133 52 30 1 0 -2 -1 0 + 133 54 30 1 0 -1 -2 0 + 133 56 30 1 0 -2 -2 0 + 133 58 30 1 0 -3 -2 0 + 133 60 30 1 0 -4 -3 3 + 133 60 30 1 0 -3 -4 3 + 133 62 30 1 0 -4 -2 0 + 134 0 30 1 0 -4 3 0 + 134 2 30 1 0 -4 2 0 + 134 4 30 1 0 -5 3 0 + 134 6 30 1 0 -6 4 0 + 134 8 30 1 0 -5 1 0 + 134 10 30 1 0 -6 3 0 + 134 12 30 1 0 -7 4 3 + 134 12 30 1 0 -7 3 3 + 134 14 30 1 0 -6 2 0 + 134 16 30 1 0 -6 1 2 + 134 18 30 1 0 -5 2 0 + 134 20 30 1 0 -4 1 0 + 134 22 30 1 0 -3 1 0 + 134 24 30 1 0 -3 2 0 + 134 26 30 1 0 -2 1 0 + 134 28 30 1 0 -2 0 0 + 134 30 30 1 0 -3 3 0 + 134 32 30 1 0 -2 3 0 + 134 34 30 1 0 -2 2 0 + 134 36 30 1 0 0 0 0 + 134 38 30 1 0 -1 1 0 + 134 40 30 1 0 -1 2 4 + 134 42 30 1 0 -2 4 0 + 134 44 30 1 0 -3 4 0 + 134 46 30 1 0 -3 5 0 + 134 48 30 1 0 -4 6 0 + 134 50 30 1 0 -4 5 0 + 134 52 30 1 0 -5 6 2 + 134 54 30 1 0 -5 4 0 + 134 56 30 1 0 -5 5 0 + 134 58 30 1 0 -4 4 0 + 134 62 30 1 0 -6 5 2 + 135 0 30 1 0 2 2 0 + 135 2 30 1 0 1 3 0 + 135 4 30 1 0 2 3 0 + 135 6 30 1 0 0 4 0 + 135 8 30 1 0 3 3 0 + 135 10 30 1 0 -1 4 0 + 135 12 30 1 0 -1 5 0 + 135 14 30 1 0 4 2 0 + 135 16 30 1 0 3 4 3 + 135 16 30 1 0 4 3 3 + 135 18 30 1 0 2 4 0 + 135 20 30 1 0 1 4 0 + 135 22 30 1 0 1 5 2 + 135 24 30 1 0 0 5 0 + 135 26 30 1 0 -1 6 2 + 135 28 30 1 0 -2 6 0 + 135 30 30 1 0 -2 5 0 + 135 32 30 1 0 -3 6 0 + 135 34 30 1 0 -4 7 3 + 135 34 30 1 0 -3 7 3 + 135 36 30 1 0 0 1 0 + 135 38 30 1 0 0 2 0 + 135 40 30 1 0 -1 3 0 + 135 42 30 1 0 0 3 0 + 135 44 30 1 0 1 0 0 + 135 46 30 1 0 3 1 0 + 135 48 30 1 0 4 0 0 + 135 50 30 1 0 5 0 0 + 135 52 30 1 0 2 1 0 + 135 54 30 1 0 1 1 0 + 135 56 30 1 0 1 2 0 + 135 58 30 1 0 3 2 0 + 135 60 30 1 0 5 1 2 + 135 62 30 1 0 4 1 0 + 136 0 30 1 0 5 -2 0 + 136 2 30 1 0 4 -2 0 + 136 4 30 1 0 4 -1 0 + 136 6 30 1 0 6 -2 0 + 136 8 30 1 0 3 0 0 + 136 10 30 1 0 6 -1 2 + 136 12 30 1 0 5 -1 0 + 136 14 30 1 0 2 0 0 + 136 16 30 1 0 3 -1 0 + 136 18 30 1 0 2 -1 0 + 136 20 30 1 0 3 -2 0 + 136 22 30 1 0 2 -2 0 + 136 24 30 1 0 1 -1 0 + 136 26 30 1 0 1 -2 0 + 136 28 30 1 0 2 -3 0 + 136 30 30 1 0 2 -4 4 + 136 32 30 1 0 3 -5 0 + 136 34 30 1 0 3 -4 0 + 136 36 30 1 0 4 -5 0 + 136 38 30 1 0 4 -4 0 + 136 40 30 1 0 3 -3 0 + 136 42 30 1 0 4 -3 0 + 136 44 30 1 0 3 -6 0 + 136 46 30 1 0 7 -4 3 + 136 46 30 1 0 7 -3 3 + 136 48 30 1 0 4 -6 0 + 136 50 30 1 0 5 -6 2 + 136 52 30 1 0 5 -5 0 + 136 54 30 1 0 5 -4 0 + 136 56 30 1 0 6 -5 2 + 136 58 30 1 0 6 -3 0 + 136 60 30 1 0 5 -3 0 + 136 62 30 1 0 6 -4 0 + 137 0 30 -1 1 -2 -3 0 + 137 2 30 -1 1 -2 -4 0 + 137 4 30 -1 1 -3 -3 0 + 137 6 30 -1 1 -1 -4 0 + 137 8 30 -1 1 0 -5 0 + 137 10 30 -1 1 -1 -5 2 + 137 12 30 -1 1 1 -6 2 + 137 14 30 -1 1 0 -4 0 + 137 16 30 -1 1 -1 -3 0 + 137 18 30 -1 1 0 -3 0 + 137 20 30 -1 1 3 -7 3 + 137 20 30 -1 1 4 -7 3 + 137 22 30 -1 1 2 -6 0 + 137 24 30 -1 1 1 -5 0 + 137 26 30 -1 1 1 -4 0 + 137 28 30 -1 1 2 -5 0 + 137 30 30 -1 1 1 -3 0 + 137 32 30 -1 1 0 -2 0 + 137 34 30 -1 1 0 -1 0 + 137 36 30 -1 1 -1 0 0 + 137 38 30 -1 1 -1 -1 0 + 137 40 30 -1 1 -4 0 0 + 137 42 30 -1 1 -3 0 0 + 137 44 30 -1 1 -3 -1 0 + 137 46 30 -1 1 -5 0 0 + 137 48 30 -1 1 -5 -1 2 + 137 50 30 -1 1 -4 -1 0 + 137 52 30 -1 1 -2 -1 0 + 137 54 30 -1 1 -1 -2 0 + 137 56 30 -1 1 -2 -2 0 + 137 58 30 -1 1 -3 -2 0 + 137 60 30 -1 1 -4 -3 3 + 137 60 30 -1 1 -3 -4 3 + 137 62 30 -1 1 -4 -2 0 + 138 0 30 -1 1 -4 3 0 + 138 2 30 -1 1 -4 2 0 + 138 4 30 -1 1 -5 3 0 + 138 6 30 -1 1 -6 4 0 + 138 8 30 -1 1 -5 1 0 + 138 10 30 -1 1 -6 3 0 + 138 12 30 -1 1 -7 4 3 + 138 12 30 -1 1 -7 3 3 + 138 14 30 -1 1 -6 2 0 + 138 16 30 -1 1 -6 1 2 + 138 18 30 -1 1 -5 2 0 + 138 20 30 -1 1 -4 1 0 + 138 22 30 -1 1 -3 1 0 + 138 24 30 -1 1 -3 2 0 + 138 26 30 -1 1 -2 1 0 + 138 28 30 -1 1 -2 0 0 + 138 30 30 -1 1 -3 3 0 + 138 32 30 -1 1 -2 3 0 + 138 34 30 -1 1 -2 2 0 + 138 36 30 -1 1 0 0 0 + 138 38 30 -1 1 -1 1 0 + 138 40 30 -1 1 -1 2 4 + 138 42 30 -1 1 -2 4 0 + 138 44 30 -1 1 -3 4 0 + 138 46 30 -1 1 -3 5 0 + 138 48 30 -1 1 -4 6 0 + 138 50 30 -1 1 -4 5 0 + 138 52 30 -1 1 -5 6 2 + 138 54 30 -1 1 -5 4 0 + 138 56 30 -1 1 -5 5 0 + 138 58 30 -1 1 -4 4 0 + 138 62 30 -1 1 -6 5 2 + 139 0 30 -1 1 2 2 0 + 139 2 30 -1 1 1 3 0 + 139 4 30 -1 1 2 3 0 + 139 6 30 -1 1 0 4 0 + 139 8 30 -1 1 3 3 0 + 139 10 30 -1 1 -1 4 0 + 139 12 30 -1 1 -1 5 0 + 139 14 30 -1 1 4 2 0 + 139 16 30 -1 1 3 4 3 + 139 16 30 -1 1 4 3 3 + 139 18 30 -1 1 2 4 0 + 139 20 30 -1 1 1 4 0 + 139 22 30 -1 1 1 5 2 + 139 24 30 -1 1 0 5 0 + 139 26 30 -1 1 -1 6 2 + 139 28 30 -1 1 -2 6 0 + 139 30 30 -1 1 -2 5 0 + 139 32 30 -1 1 -3 6 0 + 139 34 30 -1 1 -4 7 3 + 139 34 30 -1 1 -3 7 3 + 139 36 30 -1 1 0 1 0 + 139 38 30 -1 1 0 2 0 + 139 40 30 -1 1 -1 3 0 + 139 42 30 -1 1 0 3 0 + 139 44 30 -1 1 1 0 0 + 139 46 30 -1 1 3 1 0 + 139 48 30 -1 1 4 0 0 + 139 50 30 -1 1 5 0 0 + 139 52 30 -1 1 2 1 0 + 139 54 30 -1 1 1 1 0 + 139 56 30 -1 1 1 2 0 + 139 58 30 -1 1 3 2 0 + 139 60 30 -1 1 5 1 2 + 139 62 30 -1 1 4 1 0 + 140 0 30 -1 1 5 -2 0 + 140 2 30 -1 1 4 -2 0 + 140 4 30 -1 1 4 -1 0 + 140 6 30 -1 1 6 -2 0 + 140 8 30 -1 1 3 0 0 + 140 10 30 -1 1 6 -1 2 + 140 12 30 -1 1 5 -1 0 + 140 14 30 -1 1 2 0 0 + 140 16 30 -1 1 3 -1 0 + 140 18 30 -1 1 2 -1 0 + 140 20 30 -1 1 3 -2 0 + 140 22 30 -1 1 2 -2 0 + 140 24 30 -1 1 1 -1 0 + 140 26 30 -1 1 1 -2 0 + 140 28 30 -1 1 2 -3 0 + 140 30 30 -1 1 2 -4 4 + 140 32 30 -1 1 3 -5 0 + 140 34 30 -1 1 3 -4 0 + 140 36 30 -1 1 4 -5 0 + 140 38 30 -1 1 4 -4 0 + 140 40 30 -1 1 3 -3 0 + 140 42 30 -1 1 4 -3 0 + 140 44 30 -1 1 3 -6 0 + 140 46 30 -1 1 7 -4 3 + 140 46 30 -1 1 7 -3 3 + 140 48 30 -1 1 4 -6 0 + 140 50 30 -1 1 5 -6 2 + 140 52 30 -1 1 5 -5 0 + 140 54 30 -1 1 5 -4 0 + 140 56 30 -1 1 6 -5 2 + 140 58 30 -1 1 6 -3 0 + 140 60 30 -1 1 5 -3 0 + 140 62 30 -1 1 6 -4 0 + 141 0 30 0 1 -2 -3 0 + 141 2 30 0 1 -2 -4 0 + 141 4 30 0 1 -3 -3 0 + 141 6 30 0 1 -1 -4 0 + 141 8 30 0 1 0 -5 0 + 141 10 30 0 1 -1 -5 2 + 141 12 30 0 1 1 -6 2 + 141 14 30 0 1 0 -4 0 + 141 16 30 0 1 -1 -3 0 + 141 18 30 0 1 0 -3 0 + 141 20 30 0 1 3 -7 3 + 141 20 30 0 1 4 -7 3 + 141 22 30 0 1 2 -6 0 + 141 24 30 0 1 1 -5 0 + 141 26 30 0 1 1 -4 0 + 141 28 30 0 1 2 -5 0 + 141 30 30 0 1 1 -3 0 + 141 32 30 0 1 0 -2 0 + 141 34 30 0 1 0 -1 0 + 141 36 30 0 1 -1 0 0 + 141 38 30 0 1 -1 -1 0 + 141 40 30 0 1 -4 0 0 + 141 42 30 0 1 -3 0 0 + 141 44 30 0 1 -3 -1 0 + 141 46 30 0 1 -5 0 0 + 141 48 30 0 1 -5 -1 2 + 141 50 30 0 1 -4 -1 0 + 141 52 30 0 1 -2 -1 0 + 141 54 30 0 1 -1 -2 0 + 141 56 30 0 1 -2 -2 0 + 141 58 30 0 1 -3 -2 0 + 141 60 30 0 1 -4 -3 3 + 141 60 30 0 1 -3 -4 3 + 141 62 30 0 1 -4 -2 0 + 142 0 30 0 1 -4 3 0 + 142 2 30 0 1 -4 2 0 + 142 4 30 0 1 -5 3 0 + 142 6 30 0 1 -6 4 0 + 142 8 30 0 1 -5 1 0 + 142 10 30 0 1 -6 3 0 + 142 12 30 0 1 -7 4 3 + 142 12 30 0 1 -7 3 3 + 142 14 30 0 1 -6 2 0 + 142 16 30 0 1 -6 1 2 + 142 18 30 0 1 -5 2 0 + 142 20 30 0 1 -4 1 0 + 142 22 30 0 1 -3 1 0 + 142 24 30 0 1 -3 2 0 + 142 26 30 0 1 -2 1 0 + 142 28 30 0 1 -2 0 0 + 142 30 30 0 1 -3 3 0 + 142 32 30 0 1 -2 3 0 + 142 34 30 0 1 -2 2 0 + 142 36 30 0 1 0 0 0 + 142 38 30 0 1 -1 1 0 + 142 40 30 0 1 -1 2 4 + 142 42 30 0 1 -2 4 0 + 142 44 30 0 1 -3 4 0 + 142 46 30 0 1 -3 5 0 + 142 48 30 0 1 -4 6 0 + 142 50 30 0 1 -4 5 0 + 142 52 30 0 1 -5 6 2 + 142 54 30 0 1 -5 4 0 + 142 56 30 0 1 -5 5 0 + 142 58 30 0 1 -4 4 0 + 142 62 30 0 1 -6 5 2 + 143 0 30 0 1 2 2 0 + 143 2 30 0 1 1 3 0 + 143 4 30 0 1 2 3 0 + 143 6 30 0 1 0 4 0 + 143 8 30 0 1 3 3 0 + 143 10 30 0 1 -1 4 0 + 143 12 30 0 1 -1 5 0 + 143 14 30 0 1 4 2 0 + 143 16 30 0 1 3 4 3 + 143 16 30 0 1 4 3 3 + 143 18 30 0 1 2 4 0 + 143 20 30 0 1 1 4 0 + 143 22 30 0 1 1 5 2 + 143 24 30 0 1 0 5 0 + 143 26 30 0 1 -1 6 2 + 143 28 30 0 1 -2 6 0 + 143 30 30 0 1 -2 5 0 + 143 32 30 0 1 -3 6 0 + 143 34 30 0 1 -4 7 3 + 143 34 30 0 1 -3 7 3 + 143 36 30 0 1 0 1 0 + 143 38 30 0 1 0 2 0 + 143 40 30 0 1 -1 3 0 + 143 42 30 0 1 0 3 0 + 143 44 30 0 1 1 0 0 + 143 46 30 0 1 3 1 0 + 143 48 30 0 1 4 0 0 + 143 50 30 0 1 5 0 0 + 143 52 30 0 1 2 1 0 + 143 54 30 0 1 1 1 0 + 143 56 30 0 1 1 2 0 + 143 58 30 0 1 3 2 0 + 143 60 30 0 1 5 1 2 + 143 62 30 0 1 4 1 0 + 144 0 30 0 1 5 -2 0 + 144 2 30 0 1 4 -2 0 + 144 4 30 0 1 4 -1 0 + 144 6 30 0 1 6 -2 0 + 144 8 30 0 1 3 0 0 + 144 10 30 0 1 6 -1 2 + 144 12 30 0 1 5 -1 0 + 144 14 30 0 1 2 0 0 + 144 16 30 0 1 3 -1 0 + 144 18 30 0 1 2 -1 0 + 144 20 30 0 1 3 -2 0 + 144 22 30 0 1 2 -2 0 + 144 24 30 0 1 1 -1 0 + 144 26 30 0 1 1 -2 0 + 144 28 30 0 1 2 -3 0 + 144 30 30 0 1 2 -4 4 + 144 32 30 0 1 3 -5 0 + 144 34 30 0 1 3 -4 0 + 144 36 30 0 1 4 -5 0 + 144 38 30 0 1 4 -4 0 + 144 40 30 0 1 3 -3 0 + 144 42 30 0 1 4 -3 0 + 144 44 30 0 1 3 -6 0 + 144 46 30 0 1 7 -4 3 + 144 46 30 0 1 7 -3 3 + 144 48 30 0 1 4 -6 0 + 144 50 30 0 1 5 -6 2 + 144 52 30 0 1 5 -5 0 + 144 54 30 0 1 5 -4 0 + 144 56 30 0 1 6 -5 2 + 144 58 30 0 1 6 -3 0 + 144 60 30 0 1 5 -3 0 + 144 62 30 0 1 6 -4 0 + 125 0 31 0 -1 -2 -3 0 + 125 2 31 0 -1 -2 -4 0 + 125 4 31 0 -1 -3 -3 0 + 125 6 31 0 -1 -1 -4 0 + 125 8 31 0 -1 0 -5 0 + 125 10 31 0 -1 -1 -5 2 + 125 12 31 0 -1 1 -6 2 + 125 14 31 0 -1 0 -4 0 + 125 16 31 0 -1 -1 -3 0 + 125 18 31 0 -1 0 -3 0 + 125 20 31 0 -1 3 -7 3 + 125 20 31 0 -1 4 -7 3 + 125 22 31 0 -1 2 -6 0 + 125 24 31 0 -1 1 -5 0 + 125 26 31 0 -1 1 -4 0 + 125 28 31 0 -1 2 -5 0 + 125 30 31 0 -1 1 -3 0 + 125 32 31 0 -1 0 -2 0 + 125 34 31 0 -1 0 -1 0 + 125 36 31 0 -1 -1 0 0 + 125 38 31 0 -1 -1 -1 0 + 125 40 31 0 -1 -4 0 0 + 125 42 31 0 -1 -3 0 0 + 125 44 31 0 -1 -3 -1 0 + 125 46 31 0 -1 -5 0 0 + 125 48 31 0 -1 -5 -1 2 + 125 50 31 0 -1 -4 -1 0 + 125 52 31 0 -1 -2 -1 0 + 125 54 31 0 -1 -1 -2 0 + 125 56 31 0 -1 -2 -2 0 + 125 58 31 0 -1 -3 -2 0 + 125 60 31 0 -1 -4 -3 3 + 125 60 31 0 -1 -3 -4 3 + 125 62 31 0 -1 -4 -2 0 + 126 0 31 0 -1 -4 3 0 + 126 2 31 0 -1 -4 2 0 + 126 4 31 0 -1 -5 3 0 + 126 6 31 0 -1 -6 4 0 + 126 8 31 0 -1 -5 1 0 + 126 10 31 0 -1 -6 3 0 + 126 12 31 0 -1 -7 4 3 + 126 12 31 0 -1 -7 3 3 + 126 14 31 0 -1 -6 2 0 + 126 16 31 0 -1 -6 1 2 + 126 18 31 0 -1 -5 2 0 + 126 20 31 0 -1 -4 1 0 + 126 22 31 0 -1 -3 1 0 + 126 24 31 0 -1 -3 2 0 + 126 26 31 0 -1 -2 1 0 + 126 28 31 0 -1 -2 0 0 + 126 30 31 0 -1 -3 3 0 + 126 32 31 0 -1 -2 3 0 + 126 34 31 0 -1 -2 2 0 + 126 36 31 0 -1 0 0 0 + 126 38 31 0 -1 -1 1 0 + 126 40 31 0 -1 -1 2 4 + 126 42 31 0 -1 -2 4 0 + 126 44 31 0 -1 -3 4 0 + 126 46 31 0 -1 -3 5 0 + 126 48 31 0 -1 -4 6 0 + 126 50 31 0 -1 -4 5 0 + 126 52 31 0 -1 -5 6 2 + 126 54 31 0 -1 -5 4 0 + 126 56 31 0 -1 -5 5 0 + 126 58 31 0 -1 -4 4 0 + 126 62 31 0 -1 -6 5 2 + 127 0 31 0 -1 2 2 0 + 127 2 31 0 -1 1 3 0 + 127 4 31 0 -1 2 3 0 + 127 6 31 0 -1 0 4 0 + 127 8 31 0 -1 3 3 0 + 127 10 31 0 -1 -1 4 0 + 127 12 31 0 -1 -1 5 0 + 127 14 31 0 -1 4 2 0 + 127 16 31 0 -1 3 4 3 + 127 16 31 0 -1 4 3 3 + 127 18 31 0 -1 2 4 0 + 127 20 31 0 -1 1 4 0 + 127 22 31 0 -1 1 5 2 + 127 24 31 0 -1 0 5 0 + 127 26 31 0 -1 -1 6 2 + 127 28 31 0 -1 -2 6 0 + 127 30 31 0 -1 -2 5 0 + 127 32 31 0 -1 -3 6 0 + 127 34 31 0 -1 -4 7 3 + 127 34 31 0 -1 -3 7 3 + 127 36 31 0 -1 0 1 0 + 127 38 31 0 -1 0 2 0 + 127 40 31 0 -1 -1 3 0 + 127 42 31 0 -1 0 3 0 + 127 44 31 0 -1 1 0 0 + 127 46 31 0 -1 3 1 0 + 127 48 31 0 -1 4 0 0 + 127 50 31 0 -1 5 0 0 + 127 52 31 0 -1 2 1 0 + 127 54 31 0 -1 1 1 0 + 127 56 31 0 -1 1 2 0 + 127 58 31 0 -1 3 2 0 + 127 60 31 0 -1 5 1 2 + 127 62 31 0 -1 4 1 0 + 128 0 31 0 -1 5 -2 0 + 128 2 31 0 -1 4 -2 0 + 128 4 31 0 -1 4 -1 0 + 128 6 31 0 -1 6 -2 0 + 128 8 31 0 -1 3 0 0 + 128 10 31 0 -1 6 -1 2 + 128 12 31 0 -1 5 -1 0 + 128 14 31 0 -1 2 0 0 + 128 16 31 0 -1 3 -1 0 + 128 18 31 0 -1 2 -1 0 + 128 20 31 0 -1 3 -2 0 + 128 22 31 0 -1 2 -2 0 + 128 24 31 0 -1 1 -1 0 + 128 26 31 0 -1 1 -2 0 + 128 28 31 0 -1 2 -3 0 + 128 30 31 0 -1 2 -4 4 + 128 32 31 0 -1 3 -5 0 + 128 34 31 0 -1 3 -4 0 + 128 36 31 0 -1 4 -5 0 + 128 38 31 0 -1 4 -4 0 + 128 40 31 0 -1 3 -3 0 + 128 42 31 0 -1 4 -3 0 + 128 44 31 0 -1 3 -6 0 + 128 46 31 0 -1 7 -4 3 + 128 46 31 0 -1 7 -3 3 + 128 48 31 0 -1 4 -6 0 + 128 50 31 0 -1 5 -6 2 + 128 52 31 0 -1 5 -5 0 + 128 54 31 0 -1 5 -4 0 + 128 56 31 0 -1 6 -5 2 + 128 58 31 0 -1 6 -3 0 + 128 60 31 0 -1 5 -3 0 + 128 62 31 0 -1 6 -4 0 + 129 0 31 1 -1 -2 -3 0 + 129 2 31 1 -1 -2 -4 0 + 129 4 31 1 -1 -3 -3 0 + 129 6 31 1 -1 -1 -4 0 + 129 8 31 1 -1 0 -5 0 + 129 10 31 1 -1 -1 -5 2 + 129 12 31 1 -1 1 -6 2 + 129 14 31 1 -1 0 -4 0 + 129 16 31 1 -1 -1 -3 0 + 129 18 31 1 -1 0 -3 0 + 129 20 31 1 -1 3 -7 3 + 129 20 31 1 -1 4 -7 3 + 129 22 31 1 -1 2 -6 0 + 129 24 31 1 -1 1 -5 0 + 129 26 31 1 -1 1 -4 0 + 129 28 31 1 -1 2 -5 0 + 129 30 31 1 -1 1 -3 0 + 129 32 31 1 -1 0 -2 0 + 129 34 31 1 -1 0 -1 0 + 129 36 31 1 -1 -1 0 0 + 129 38 31 1 -1 -1 -1 0 + 129 40 31 1 -1 -4 0 0 + 129 42 31 1 -1 -3 0 0 + 129 44 31 1 -1 -3 -1 0 + 129 46 31 1 -1 -5 0 0 + 129 48 31 1 -1 -5 -1 2 + 129 50 31 1 -1 -4 -1 0 + 129 52 31 1 -1 -2 -1 0 + 129 54 31 1 -1 -1 -2 0 + 129 56 31 1 -1 -2 -2 0 + 129 58 31 1 -1 -3 -2 0 + 129 60 31 1 -1 -4 -3 3 + 129 60 31 1 -1 -3 -4 3 + 129 62 31 1 -1 -4 -2 0 + 130 0 31 1 -1 -4 3 0 + 130 2 31 1 -1 -4 2 0 + 130 4 31 1 -1 -5 3 0 + 130 6 31 1 -1 -6 4 0 + 130 8 31 1 -1 -5 1 0 + 130 10 31 1 -1 -6 3 0 + 130 12 31 1 -1 -7 4 3 + 130 12 31 1 -1 -7 3 3 + 130 14 31 1 -1 -6 2 0 + 130 16 31 1 -1 -6 1 2 + 130 18 31 1 -1 -5 2 0 + 130 20 31 1 -1 -4 1 0 + 130 22 31 1 -1 -3 1 0 + 130 24 31 1 -1 -3 2 0 + 130 26 31 1 -1 -2 1 0 + 130 28 31 1 -1 -2 0 0 + 130 30 31 1 -1 -3 3 0 + 130 32 31 1 -1 -2 3 0 + 130 34 31 1 -1 -2 2 0 + 130 36 31 1 -1 0 0 0 + 130 38 31 1 -1 -1 1 0 + 130 40 31 1 -1 -1 2 4 + 130 42 31 1 -1 -2 4 0 + 130 44 31 1 -1 -3 4 0 + 130 46 31 1 -1 -3 5 0 + 130 48 31 1 -1 -4 6 0 + 130 50 31 1 -1 -4 5 0 + 130 52 31 1 -1 -5 6 2 + 130 54 31 1 -1 -5 4 0 + 130 56 31 1 -1 -5 5 0 + 130 58 31 1 -1 -4 4 0 + 130 62 31 1 -1 -6 5 2 + 131 0 31 1 -1 2 2 0 + 131 2 31 1 -1 1 3 0 + 131 4 31 1 -1 2 3 0 + 131 6 31 1 -1 0 4 0 + 131 8 31 1 -1 3 3 0 + 131 10 31 1 -1 -1 4 0 + 131 12 31 1 -1 -1 5 0 + 131 14 31 1 -1 4 2 0 + 131 16 31 1 -1 3 4 3 + 131 16 31 1 -1 4 3 3 + 131 18 31 1 -1 2 4 0 + 131 20 31 1 -1 1 4 0 + 131 22 31 1 -1 1 5 2 + 131 24 31 1 -1 0 5 0 + 131 26 31 1 -1 -1 6 2 + 131 28 31 1 -1 -2 6 0 + 131 30 31 1 -1 -2 5 0 + 131 32 31 1 -1 -3 6 0 + 131 34 31 1 -1 -4 7 3 + 131 34 31 1 -1 -3 7 3 + 131 36 31 1 -1 0 1 0 + 131 38 31 1 -1 0 2 0 + 131 40 31 1 -1 -1 3 0 + 131 42 31 1 -1 0 3 0 + 131 44 31 1 -1 1 0 0 + 131 46 31 1 -1 3 1 0 + 131 48 31 1 -1 4 0 0 + 131 50 31 1 -1 5 0 0 + 131 52 31 1 -1 2 1 0 + 131 54 31 1 -1 1 1 0 + 131 56 31 1 -1 1 2 0 + 131 58 31 1 -1 3 2 0 + 131 60 31 1 -1 5 1 2 + 131 62 31 1 -1 4 1 0 + 132 0 31 1 -1 5 -2 0 + 132 2 31 1 -1 4 -2 0 + 132 4 31 1 -1 4 -1 0 + 132 6 31 1 -1 6 -2 0 + 132 8 31 1 -1 3 0 0 + 132 10 31 1 -1 6 -1 2 + 132 12 31 1 -1 5 -1 0 + 132 14 31 1 -1 2 0 0 + 132 16 31 1 -1 3 -1 0 + 132 18 31 1 -1 2 -1 0 + 132 20 31 1 -1 3 -2 0 + 132 22 31 1 -1 2 -2 0 + 132 24 31 1 -1 1 -1 0 + 132 26 31 1 -1 1 -2 0 + 132 28 31 1 -1 2 -3 0 + 132 30 31 1 -1 2 -4 4 + 132 32 31 1 -1 3 -5 0 + 132 34 31 1 -1 3 -4 0 + 132 36 31 1 -1 4 -5 0 + 132 38 31 1 -1 4 -4 0 + 132 40 31 1 -1 3 -3 0 + 132 42 31 1 -1 4 -3 0 + 132 44 31 1 -1 3 -6 0 + 132 46 31 1 -1 7 -4 3 + 132 46 31 1 -1 7 -3 3 + 132 48 31 1 -1 4 -6 0 + 132 50 31 1 -1 5 -6 2 + 132 52 31 1 -1 5 -5 0 + 132 54 31 1 -1 5 -4 0 + 132 56 31 1 -1 6 -5 2 + 132 58 31 1 -1 6 -3 0 + 132 60 31 1 -1 5 -3 0 + 132 62 31 1 -1 6 -4 0 + 133 0 31 -1 0 -2 -3 0 + 133 2 31 -1 0 -2 -4 0 + 133 4 31 -1 0 -3 -3 0 + 133 6 31 -1 0 -1 -4 0 + 133 8 31 -1 0 0 -5 0 + 133 10 31 -1 0 -1 -5 2 + 133 12 31 -1 0 1 -6 2 + 133 14 31 -1 0 0 -4 0 + 133 16 31 -1 0 -1 -3 0 + 133 18 31 -1 0 0 -3 0 + 133 20 31 -1 0 3 -7 3 + 133 20 31 -1 0 4 -7 3 + 133 22 31 -1 0 2 -6 0 + 133 24 31 -1 0 1 -5 0 + 133 26 31 -1 0 1 -4 0 + 133 28 31 -1 0 2 -5 0 + 133 30 31 -1 0 1 -3 0 + 133 32 31 -1 0 0 -2 0 + 133 34 31 -1 0 0 -1 0 + 133 36 31 -1 0 -1 0 0 + 133 38 31 -1 0 -1 -1 0 + 133 40 31 -1 0 -4 0 0 + 133 42 31 -1 0 -3 0 0 + 133 44 31 -1 0 -3 -1 0 + 133 46 31 -1 0 -5 0 0 + 133 48 31 -1 0 -5 -1 2 + 133 50 31 -1 0 -4 -1 0 + 133 52 31 -1 0 -2 -1 0 + 133 54 31 -1 0 -1 -2 0 + 133 56 31 -1 0 -2 -2 0 + 133 58 31 -1 0 -3 -2 0 + 133 60 31 -1 0 -4 -3 3 + 133 60 31 -1 0 -3 -4 3 + 133 62 31 -1 0 -4 -2 0 + 134 0 31 -1 0 -4 3 0 + 134 2 31 -1 0 -4 2 0 + 134 4 31 -1 0 -5 3 0 + 134 6 31 -1 0 -6 4 0 + 134 8 31 -1 0 -5 1 0 + 134 10 31 -1 0 -6 3 0 + 134 12 31 -1 0 -7 4 3 + 134 12 31 -1 0 -7 3 3 + 134 14 31 -1 0 -6 2 0 + 134 16 31 -1 0 -6 1 2 + 134 18 31 -1 0 -5 2 0 + 134 20 31 -1 0 -4 1 0 + 134 22 31 -1 0 -3 1 0 + 134 24 31 -1 0 -3 2 0 + 134 26 31 -1 0 -2 1 0 + 134 28 31 -1 0 -2 0 0 + 134 30 31 -1 0 -3 3 0 + 134 32 31 -1 0 -2 3 0 + 134 34 31 -1 0 -2 2 0 + 134 36 31 -1 0 0 0 0 + 134 38 31 -1 0 -1 1 0 + 134 40 31 -1 0 -1 2 4 + 134 42 31 -1 0 -2 4 0 + 134 44 31 -1 0 -3 4 0 + 134 46 31 -1 0 -3 5 0 + 134 48 31 -1 0 -4 6 0 + 134 50 31 -1 0 -4 5 0 + 134 52 31 -1 0 -5 6 2 + 134 54 31 -1 0 -5 4 0 + 134 56 31 -1 0 -5 5 0 + 134 58 31 -1 0 -4 4 0 + 134 62 31 -1 0 -6 5 2 + 135 0 31 -1 0 2 2 0 + 135 2 31 -1 0 1 3 0 + 135 4 31 -1 0 2 3 0 + 135 6 31 -1 0 0 4 0 + 135 8 31 -1 0 3 3 0 + 135 10 31 -1 0 -1 4 0 + 135 12 31 -1 0 -1 5 0 + 135 14 31 -1 0 4 2 0 + 135 16 31 -1 0 3 4 3 + 135 16 31 -1 0 4 3 3 + 135 18 31 -1 0 2 4 0 + 135 20 31 -1 0 1 4 0 + 135 22 31 -1 0 1 5 2 + 135 24 31 -1 0 0 5 0 + 135 26 31 -1 0 -1 6 2 + 135 28 31 -1 0 -2 6 0 + 135 30 31 -1 0 -2 5 0 + 135 32 31 -1 0 -3 6 0 + 135 34 31 -1 0 -4 7 3 + 135 34 31 -1 0 -3 7 3 + 135 36 31 -1 0 0 1 0 + 135 38 31 -1 0 0 2 0 + 135 40 31 -1 0 -1 3 0 + 135 42 31 -1 0 0 3 0 + 135 44 31 -1 0 1 0 0 + 135 46 31 -1 0 3 1 0 + 135 48 31 -1 0 4 0 0 + 135 50 31 -1 0 5 0 0 + 135 52 31 -1 0 2 1 0 + 135 54 31 -1 0 1 1 0 + 135 56 31 -1 0 1 2 0 + 135 58 31 -1 0 3 2 0 + 135 60 31 -1 0 5 1 2 + 135 62 31 -1 0 4 1 0 + 136 0 31 -1 0 5 -2 0 + 136 2 31 -1 0 4 -2 0 + 136 4 31 -1 0 4 -1 0 + 136 6 31 -1 0 6 -2 0 + 136 8 31 -1 0 3 0 0 + 136 10 31 -1 0 6 -1 2 + 136 12 31 -1 0 5 -1 0 + 136 14 31 -1 0 2 0 0 + 136 16 31 -1 0 3 -1 0 + 136 18 31 -1 0 2 -1 0 + 136 20 31 -1 0 3 -2 0 + 136 22 31 -1 0 2 -2 0 + 136 24 31 -1 0 1 -1 0 + 136 26 31 -1 0 1 -2 0 + 136 28 31 -1 0 2 -3 0 + 136 30 31 -1 0 2 -4 4 + 136 32 31 -1 0 3 -5 0 + 136 34 31 -1 0 3 -4 0 + 136 36 31 -1 0 4 -5 0 + 136 38 31 -1 0 4 -4 0 + 136 40 31 -1 0 3 -3 0 + 136 42 31 -1 0 4 -3 0 + 136 44 31 -1 0 3 -6 0 + 136 46 31 -1 0 7 -4 3 + 136 46 31 -1 0 7 -3 3 + 136 48 31 -1 0 4 -6 0 + 136 50 31 -1 0 5 -6 2 + 136 52 31 -1 0 5 -5 0 + 136 54 31 -1 0 5 -4 0 + 136 56 31 -1 0 6 -5 2 + 136 58 31 -1 0 6 -3 0 + 136 60 31 -1 0 5 -3 0 + 136 62 31 -1 0 6 -4 0 + 121 0 31 0 0 -2 -3 0 + 121 2 31 0 0 -2 -4 0 + 121 4 31 0 0 -3 -3 0 + 121 6 31 0 0 -1 -4 0 + 121 8 31 0 0 0 -5 0 + 121 10 31 0 0 -1 -5 2 + 121 12 31 0 0 1 -6 2 + 121 14 31 0 0 0 -4 0 + 121 16 31 0 0 -1 -3 0 + 121 18 31 0 0 0 -3 0 + 121 20 31 0 0 3 -7 3 + 121 20 31 0 0 4 -7 3 + 121 22 31 0 0 2 -6 0 + 121 24 31 0 0 1 -5 0 + 121 26 31 0 0 1 -4 0 + 121 28 31 0 0 2 -5 0 + 121 30 31 0 0 1 -3 0 + 121 32 31 0 0 0 -2 0 + 121 34 31 0 0 0 -1 0 + 121 36 31 0 0 -1 0 0 + 121 38 31 0 0 -1 -1 0 + 121 40 31 0 0 -4 0 0 + 121 42 31 0 0 -3 0 0 + 121 44 31 0 0 -3 -1 0 + 121 46 31 0 0 -5 0 0 + 121 48 31 0 0 -5 -1 2 + 121 50 31 0 0 -4 -1 0 + 121 52 31 0 0 -2 -1 0 + 121 54 31 0 0 -1 -2 0 + 121 56 31 0 0 -2 -2 0 + 121 58 31 0 0 -3 -2 0 + 121 60 31 0 0 -4 -3 3 + 121 60 31 0 0 -3 -4 3 + 121 62 31 0 0 -4 -2 0 + 122 0 31 0 0 -4 3 0 + 122 2 31 0 0 -4 2 0 + 122 4 31 0 0 -5 3 0 + 122 6 31 0 0 -6 4 0 + 122 8 31 0 0 -5 1 0 + 122 10 31 0 0 -6 3 0 + 122 12 31 0 0 -7 4 3 + 122 12 31 0 0 -7 3 3 + 122 14 31 0 0 -6 2 0 + 122 16 31 0 0 -6 1 2 + 122 18 31 0 0 -5 2 0 + 122 20 31 0 0 -4 1 0 + 122 22 31 0 0 -3 1 0 + 122 24 31 0 0 -3 2 0 + 122 26 31 0 0 -2 1 0 + 122 28 31 0 0 -2 0 0 + 122 30 31 0 0 -3 3 0 + 122 32 31 0 0 -2 3 0 + 122 34 31 0 0 -2 2 0 + 122 36 31 0 0 0 0 0 + 122 38 31 0 0 -1 1 0 + 122 40 31 0 0 -1 2 4 + 122 42 31 0 0 -2 4 0 + 122 44 31 0 0 -3 4 0 + 122 46 31 0 0 -3 5 0 + 122 48 31 0 0 -4 6 0 + 122 50 31 0 0 -4 5 0 + 122 52 31 0 0 -5 6 2 + 122 54 31 0 0 -5 4 0 + 122 56 31 0 0 -5 5 0 + 122 58 31 0 0 -4 4 0 + 122 62 31 0 0 -6 5 2 + 123 0 31 0 0 2 2 0 + 123 2 31 0 0 1 3 0 + 123 4 31 0 0 2 3 0 + 123 6 31 0 0 0 4 0 + 123 8 31 0 0 3 3 0 + 123 10 31 0 0 -1 4 0 + 123 12 31 0 0 -1 5 0 + 123 14 31 0 0 4 2 0 + 123 16 31 0 0 3 4 3 + 123 16 31 0 0 4 3 3 + 123 18 31 0 0 2 4 0 + 123 20 31 0 0 1 4 0 + 123 22 31 0 0 1 5 2 + 123 24 31 0 0 0 5 0 + 123 26 31 0 0 -1 6 2 + 123 28 31 0 0 -2 6 0 + 123 30 31 0 0 -2 5 0 + 123 32 31 0 0 -3 6 0 + 123 34 31 0 0 -4 7 3 + 123 34 31 0 0 -3 7 3 + 123 36 31 0 0 0 1 0 + 123 38 31 0 0 0 2 0 + 123 40 31 0 0 -1 3 0 + 123 42 31 0 0 0 3 0 + 123 44 31 0 0 1 0 0 + 123 46 31 0 0 3 1 0 + 123 48 31 0 0 4 0 0 + 123 50 31 0 0 5 0 0 + 123 52 31 0 0 2 1 0 + 123 54 31 0 0 1 1 0 + 123 56 31 0 0 1 2 0 + 123 58 31 0 0 3 2 0 + 123 60 31 0 0 5 1 2 + 123 62 31 0 0 4 1 0 + 124 0 31 0 0 5 -2 0 + 124 2 31 0 0 4 -2 0 + 124 4 31 0 0 4 -1 0 + 124 6 31 0 0 6 -2 0 + 124 8 31 0 0 3 0 0 + 124 10 31 0 0 6 -1 2 + 124 12 31 0 0 5 -1 0 + 124 14 31 0 0 2 0 0 + 124 16 31 0 0 3 -1 0 + 124 18 31 0 0 2 -1 0 + 124 20 31 0 0 3 -2 0 + 124 22 31 0 0 2 -2 0 + 124 24 31 0 0 1 -1 0 + 124 26 31 0 0 1 -2 0 + 124 28 31 0 0 2 -3 0 + 124 30 31 0 0 2 -4 4 + 124 32 31 0 0 3 -5 0 + 124 34 31 0 0 3 -4 0 + 124 36 31 0 0 4 -5 0 + 124 38 31 0 0 4 -4 0 + 124 40 31 0 0 3 -3 0 + 124 42 31 0 0 4 -3 0 + 124 44 31 0 0 3 -6 0 + 124 46 31 0 0 7 -4 3 + 124 46 31 0 0 7 -3 3 + 124 48 31 0 0 4 -6 0 + 124 50 31 0 0 5 -6 2 + 124 52 31 0 0 5 -5 0 + 124 54 31 0 0 5 -4 0 + 124 56 31 0 0 6 -5 2 + 124 58 31 0 0 6 -3 0 + 124 60 31 0 0 5 -3 0 + 124 62 31 0 0 6 -4 0 + 137 0 31 1 0 -2 -3 0 + 137 2 31 1 0 -2 -4 0 + 137 4 31 1 0 -3 -3 0 + 137 6 31 1 0 -1 -4 0 + 137 8 31 1 0 0 -5 0 + 137 10 31 1 0 -1 -5 2 + 137 12 31 1 0 1 -6 2 + 137 14 31 1 0 0 -4 0 + 137 16 31 1 0 -1 -3 0 + 137 18 31 1 0 0 -3 0 + 137 20 31 1 0 3 -7 3 + 137 20 31 1 0 4 -7 3 + 137 22 31 1 0 2 -6 0 + 137 24 31 1 0 1 -5 0 + 137 26 31 1 0 1 -4 0 + 137 28 31 1 0 2 -5 0 + 137 30 31 1 0 1 -3 0 + 137 32 31 1 0 0 -2 0 + 137 34 31 1 0 0 -1 0 + 137 36 31 1 0 -1 0 0 + 137 38 31 1 0 -1 -1 0 + 137 40 31 1 0 -4 0 0 + 137 42 31 1 0 -3 0 0 + 137 44 31 1 0 -3 -1 0 + 137 46 31 1 0 -5 0 0 + 137 48 31 1 0 -5 -1 2 + 137 50 31 1 0 -4 -1 0 + 137 52 31 1 0 -2 -1 0 + 137 54 31 1 0 -1 -2 0 + 137 56 31 1 0 -2 -2 0 + 137 58 31 1 0 -3 -2 0 + 137 60 31 1 0 -4 -3 3 + 137 60 31 1 0 -3 -4 3 + 137 62 31 1 0 -4 -2 0 + 138 0 31 1 0 -4 3 0 + 138 2 31 1 0 -4 2 0 + 138 4 31 1 0 -5 3 0 + 138 6 31 1 0 -6 4 0 + 138 8 31 1 0 -5 1 0 + 138 10 31 1 0 -6 3 0 + 138 12 31 1 0 -7 4 3 + 138 12 31 1 0 -7 3 3 + 138 14 31 1 0 -6 2 0 + 138 16 31 1 0 -6 1 2 + 138 18 31 1 0 -5 2 0 + 138 20 31 1 0 -4 1 0 + 138 22 31 1 0 -3 1 0 + 138 24 31 1 0 -3 2 0 + 138 26 31 1 0 -2 1 0 + 138 28 31 1 0 -2 0 0 + 138 30 31 1 0 -3 3 0 + 138 32 31 1 0 -2 3 0 + 138 34 31 1 0 -2 2 0 + 138 36 31 1 0 0 0 0 + 138 38 31 1 0 -1 1 0 + 138 40 31 1 0 -1 2 4 + 138 42 31 1 0 -2 4 0 + 138 44 31 1 0 -3 4 0 + 138 46 31 1 0 -3 5 0 + 138 48 31 1 0 -4 6 0 + 138 50 31 1 0 -4 5 0 + 138 52 31 1 0 -5 6 2 + 138 54 31 1 0 -5 4 0 + 138 56 31 1 0 -5 5 0 + 138 58 31 1 0 -4 4 0 + 138 62 31 1 0 -6 5 2 + 139 0 31 1 0 2 2 0 + 139 2 31 1 0 1 3 0 + 139 4 31 1 0 2 3 0 + 139 6 31 1 0 0 4 0 + 139 8 31 1 0 3 3 0 + 139 10 31 1 0 -1 4 0 + 139 12 31 1 0 -1 5 0 + 139 14 31 1 0 4 2 0 + 139 16 31 1 0 3 4 3 + 139 16 31 1 0 4 3 3 + 139 18 31 1 0 2 4 0 + 139 20 31 1 0 1 4 0 + 139 22 31 1 0 1 5 2 + 139 24 31 1 0 0 5 0 + 139 26 31 1 0 -1 6 2 + 139 28 31 1 0 -2 6 0 + 139 30 31 1 0 -2 5 0 + 139 32 31 1 0 -3 6 0 + 139 34 31 1 0 -4 7 3 + 139 34 31 1 0 -3 7 3 + 139 36 31 1 0 0 1 0 + 139 38 31 1 0 0 2 0 + 139 40 31 1 0 -1 3 0 + 139 42 31 1 0 0 3 0 + 139 44 31 1 0 1 0 0 + 139 46 31 1 0 3 1 0 + 139 48 31 1 0 4 0 0 + 139 50 31 1 0 5 0 0 + 139 52 31 1 0 2 1 0 + 139 54 31 1 0 1 1 0 + 139 56 31 1 0 1 2 0 + 139 58 31 1 0 3 2 0 + 139 60 31 1 0 5 1 2 + 139 62 31 1 0 4 1 0 + 140 0 31 1 0 5 -2 0 + 140 2 31 1 0 4 -2 0 + 140 4 31 1 0 4 -1 0 + 140 6 31 1 0 6 -2 0 + 140 8 31 1 0 3 0 0 + 140 10 31 1 0 6 -1 2 + 140 12 31 1 0 5 -1 0 + 140 14 31 1 0 2 0 0 + 140 16 31 1 0 3 -1 0 + 140 18 31 1 0 2 -1 0 + 140 20 31 1 0 3 -2 0 + 140 22 31 1 0 2 -2 0 + 140 24 31 1 0 1 -1 0 + 140 26 31 1 0 1 -2 0 + 140 28 31 1 0 2 -3 0 + 140 30 31 1 0 2 -4 4 + 140 32 31 1 0 3 -5 0 + 140 34 31 1 0 3 -4 0 + 140 36 31 1 0 4 -5 0 + 140 38 31 1 0 4 -4 0 + 140 40 31 1 0 3 -3 0 + 140 42 31 1 0 4 -3 0 + 140 44 31 1 0 3 -6 0 + 140 46 31 1 0 7 -4 3 + 140 46 31 1 0 7 -3 3 + 140 48 31 1 0 4 -6 0 + 140 50 31 1 0 5 -6 2 + 140 52 31 1 0 5 -5 0 + 140 54 31 1 0 5 -4 0 + 140 56 31 1 0 6 -5 2 + 140 58 31 1 0 6 -3 0 + 140 60 31 1 0 5 -3 0 + 140 62 31 1 0 6 -4 0 + 141 0 31 -1 1 -2 -3 0 + 141 2 31 -1 1 -2 -4 0 + 141 4 31 -1 1 -3 -3 0 + 141 6 31 -1 1 -1 -4 0 + 141 8 31 -1 1 0 -5 0 + 141 10 31 -1 1 -1 -5 2 + 141 12 31 -1 1 1 -6 2 + 141 14 31 -1 1 0 -4 0 + 141 16 31 -1 1 -1 -3 0 + 141 18 31 -1 1 0 -3 0 + 141 20 31 -1 1 3 -7 3 + 141 20 31 -1 1 4 -7 3 + 141 22 31 -1 1 2 -6 0 + 141 24 31 -1 1 1 -5 0 + 141 26 31 -1 1 1 -4 0 + 141 28 31 -1 1 2 -5 0 + 141 30 31 -1 1 1 -3 0 + 141 32 31 -1 1 0 -2 0 + 141 34 31 -1 1 0 -1 0 + 141 36 31 -1 1 -1 0 0 + 141 38 31 -1 1 -1 -1 0 + 141 40 31 -1 1 -4 0 0 + 141 42 31 -1 1 -3 0 0 + 141 44 31 -1 1 -3 -1 0 + 141 46 31 -1 1 -5 0 0 + 141 48 31 -1 1 -5 -1 2 + 141 50 31 -1 1 -4 -1 0 + 141 52 31 -1 1 -2 -1 0 + 141 54 31 -1 1 -1 -2 0 + 141 56 31 -1 1 -2 -2 0 + 141 58 31 -1 1 -3 -2 0 + 141 60 31 -1 1 -4 -3 3 + 141 60 31 -1 1 -3 -4 3 + 141 62 31 -1 1 -4 -2 0 + 142 0 31 -1 1 -4 3 0 + 142 2 31 -1 1 -4 2 0 + 142 4 31 -1 1 -5 3 0 + 142 6 31 -1 1 -6 4 0 + 142 8 31 -1 1 -5 1 0 + 142 10 31 -1 1 -6 3 0 + 142 12 31 -1 1 -7 4 3 + 142 12 31 -1 1 -7 3 3 + 142 14 31 -1 1 -6 2 0 + 142 16 31 -1 1 -6 1 2 + 142 18 31 -1 1 -5 2 0 + 142 20 31 -1 1 -4 1 0 + 142 22 31 -1 1 -3 1 0 + 142 24 31 -1 1 -3 2 0 + 142 26 31 -1 1 -2 1 0 + 142 28 31 -1 1 -2 0 0 + 142 30 31 -1 1 -3 3 0 + 142 32 31 -1 1 -2 3 0 + 142 34 31 -1 1 -2 2 0 + 142 36 31 -1 1 0 0 0 + 142 38 31 -1 1 -1 1 0 + 142 40 31 -1 1 -1 2 4 + 142 42 31 -1 1 -2 4 0 + 142 44 31 -1 1 -3 4 0 + 142 46 31 -1 1 -3 5 0 + 142 48 31 -1 1 -4 6 0 + 142 50 31 -1 1 -4 5 0 + 142 52 31 -1 1 -5 6 2 + 142 54 31 -1 1 -5 4 0 + 142 56 31 -1 1 -5 5 0 + 142 58 31 -1 1 -4 4 0 + 142 62 31 -1 1 -6 5 2 + 143 0 31 -1 1 2 2 0 + 143 2 31 -1 1 1 3 0 + 143 4 31 -1 1 2 3 0 + 143 6 31 -1 1 0 4 0 + 143 8 31 -1 1 3 3 0 + 143 10 31 -1 1 -1 4 0 + 143 12 31 -1 1 -1 5 0 + 143 14 31 -1 1 4 2 0 + 143 16 31 -1 1 3 4 3 + 143 16 31 -1 1 4 3 3 + 143 18 31 -1 1 2 4 0 + 143 20 31 -1 1 1 4 0 + 143 22 31 -1 1 1 5 2 + 143 24 31 -1 1 0 5 0 + 143 26 31 -1 1 -1 6 2 + 143 28 31 -1 1 -2 6 0 + 143 30 31 -1 1 -2 5 0 + 143 32 31 -1 1 -3 6 0 + 143 34 31 -1 1 -4 7 3 + 143 34 31 -1 1 -3 7 3 + 143 36 31 -1 1 0 1 0 + 143 38 31 -1 1 0 2 0 + 143 40 31 -1 1 -1 3 0 + 143 42 31 -1 1 0 3 0 + 143 44 31 -1 1 1 0 0 + 143 46 31 -1 1 3 1 0 + 143 48 31 -1 1 4 0 0 + 143 50 31 -1 1 5 0 0 + 143 52 31 -1 1 2 1 0 + 143 54 31 -1 1 1 1 0 + 143 56 31 -1 1 1 2 0 + 143 58 31 -1 1 3 2 0 + 143 60 31 -1 1 5 1 2 + 143 62 31 -1 1 4 1 0 + 144 0 31 -1 1 5 -2 0 + 144 2 31 -1 1 4 -2 0 + 144 4 31 -1 1 4 -1 0 + 144 6 31 -1 1 6 -2 0 + 144 8 31 -1 1 3 0 0 + 144 10 31 -1 1 6 -1 2 + 144 12 31 -1 1 5 -1 0 + 144 14 31 -1 1 2 0 0 + 144 16 31 -1 1 3 -1 0 + 144 18 31 -1 1 2 -1 0 + 144 20 31 -1 1 3 -2 0 + 144 22 31 -1 1 2 -2 0 + 144 24 31 -1 1 1 -1 0 + 144 26 31 -1 1 1 -2 0 + 144 28 31 -1 1 2 -3 0 + 144 30 31 -1 1 2 -4 4 + 144 32 31 -1 1 3 -5 0 + 144 34 31 -1 1 3 -4 0 + 144 36 31 -1 1 4 -5 0 + 144 38 31 -1 1 4 -4 0 + 144 40 31 -1 1 3 -3 0 + 144 42 31 -1 1 4 -3 0 + 144 44 31 -1 1 3 -6 0 + 144 46 31 -1 1 7 -4 3 + 144 46 31 -1 1 7 -3 3 + 144 48 31 -1 1 4 -6 0 + 144 50 31 -1 1 5 -6 2 + 144 52 31 -1 1 5 -5 0 + 144 54 31 -1 1 5 -4 0 + 144 56 31 -1 1 6 -5 2 + 144 58 31 -1 1 6 -3 0 + 144 60 31 -1 1 5 -3 0 + 144 62 31 -1 1 6 -4 0 + 145 0 31 0 1 -2 -3 0 + 145 2 31 0 1 -2 -4 0 + 145 4 31 0 1 -3 -3 0 + 145 6 31 0 1 -1 -4 0 + 145 8 31 0 1 0 -5 0 + 145 10 31 0 1 -1 -5 2 + 145 12 31 0 1 1 -6 2 + 145 14 31 0 1 0 -4 0 + 145 16 31 0 1 -1 -3 0 + 145 18 31 0 1 0 -3 0 + 145 20 31 0 1 3 -7 3 + 145 20 31 0 1 4 -7 3 + 145 22 31 0 1 2 -6 0 + 145 24 31 0 1 1 -5 0 + 145 26 31 0 1 1 -4 0 + 145 28 31 0 1 2 -5 0 + 145 30 31 0 1 1 -3 0 + 145 32 31 0 1 0 -2 0 + 145 34 31 0 1 0 -1 0 + 145 36 31 0 1 -1 0 0 + 145 38 31 0 1 -1 -1 0 + 145 40 31 0 1 -4 0 0 + 145 42 31 0 1 -3 0 0 + 145 44 31 0 1 -3 -1 0 + 145 46 31 0 1 -5 0 0 + 145 48 31 0 1 -5 -1 2 + 145 50 31 0 1 -4 -1 0 + 145 52 31 0 1 -2 -1 0 + 145 54 31 0 1 -1 -2 0 + 145 56 31 0 1 -2 -2 0 + 145 58 31 0 1 -3 -2 0 + 145 60 31 0 1 -4 -3 3 + 145 60 31 0 1 -3 -4 3 + 145 62 31 0 1 -4 -2 0 + 146 0 31 0 1 -4 3 0 + 146 2 31 0 1 -4 2 0 + 146 4 31 0 1 -5 3 0 + 146 6 31 0 1 -6 4 0 + 146 8 31 0 1 -5 1 0 + 146 10 31 0 1 -6 3 0 + 146 12 31 0 1 -7 4 3 + 146 12 31 0 1 -7 3 3 + 146 14 31 0 1 -6 2 0 + 146 16 31 0 1 -6 1 2 + 146 18 31 0 1 -5 2 0 + 146 20 31 0 1 -4 1 0 + 146 22 31 0 1 -3 1 0 + 146 24 31 0 1 -3 2 0 + 146 26 31 0 1 -2 1 0 + 146 28 31 0 1 -2 0 0 + 146 30 31 0 1 -3 3 0 + 146 32 31 0 1 -2 3 0 + 146 34 31 0 1 -2 2 0 + 146 36 31 0 1 0 0 0 + 146 38 31 0 1 -1 1 0 + 146 40 31 0 1 -1 2 4 + 146 42 31 0 1 -2 4 0 + 146 44 31 0 1 -3 4 0 + 146 46 31 0 1 -3 5 0 + 146 48 31 0 1 -4 6 0 + 146 50 31 0 1 -4 5 0 + 146 52 31 0 1 -5 6 2 + 146 54 31 0 1 -5 4 0 + 146 56 31 0 1 -5 5 0 + 146 58 31 0 1 -4 4 0 + 146 62 31 0 1 -6 5 2 + 147 0 31 0 1 2 2 0 + 147 2 31 0 1 1 3 0 + 147 4 31 0 1 2 3 0 + 147 6 31 0 1 0 4 0 + 147 8 31 0 1 3 3 0 + 147 10 31 0 1 -1 4 0 + 147 12 31 0 1 -1 5 0 + 147 14 31 0 1 4 2 0 + 147 16 31 0 1 3 4 3 + 147 16 31 0 1 4 3 3 + 147 18 31 0 1 2 4 0 + 147 20 31 0 1 1 4 0 + 147 22 31 0 1 1 5 2 + 147 24 31 0 1 0 5 0 + 147 26 31 0 1 -1 6 2 + 147 28 31 0 1 -2 6 0 + 147 30 31 0 1 -2 5 0 + 147 32 31 0 1 -3 6 0 + 147 34 31 0 1 -4 7 3 + 147 34 31 0 1 -3 7 3 + 147 36 31 0 1 0 1 0 + 147 38 31 0 1 0 2 0 + 147 40 31 0 1 -1 3 0 + 147 42 31 0 1 0 3 0 + 147 44 31 0 1 1 0 0 + 147 46 31 0 1 3 1 0 + 147 48 31 0 1 4 0 0 + 147 50 31 0 1 5 0 0 + 147 52 31 0 1 2 1 0 + 147 54 31 0 1 1 1 0 + 147 56 31 0 1 1 2 0 + 147 58 31 0 1 3 2 0 + 147 60 31 0 1 5 1 2 + 147 62 31 0 1 4 1 0 + 148 0 31 0 1 5 -2 0 + 148 2 31 0 1 4 -2 0 + 148 4 31 0 1 4 -1 0 + 148 6 31 0 1 6 -2 0 + 148 8 31 0 1 3 0 0 + 148 10 31 0 1 6 -1 2 + 148 12 31 0 1 5 -1 0 + 148 14 31 0 1 2 0 0 + 148 16 31 0 1 3 -1 0 + 148 18 31 0 1 2 -1 0 + 148 20 31 0 1 3 -2 0 + 148 22 31 0 1 2 -2 0 + 148 24 31 0 1 1 -1 0 + 148 26 31 0 1 1 -2 0 + 148 28 31 0 1 2 -3 0 + 148 30 31 0 1 2 -4 4 + 148 32 31 0 1 3 -5 0 + 148 34 31 0 1 3 -4 0 + 148 36 31 0 1 4 -5 0 + 148 38 31 0 1 4 -4 0 + 148 40 31 0 1 3 -3 0 + 148 42 31 0 1 4 -3 0 + 148 44 31 0 1 3 -6 0 + 148 46 31 0 1 7 -4 3 + 148 46 31 0 1 7 -3 3 + 148 48 31 0 1 4 -6 0 + 148 50 31 0 1 5 -6 2 + 148 52 31 0 1 5 -5 0 + 148 54 31 0 1 5 -4 0 + 148 56 31 0 1 6 -5 2 + 148 58 31 0 1 6 -3 0 + 148 60 31 0 1 5 -3 0 + 148 62 31 0 1 6 -4 0 + 129 0 32 0 -1 -2 -3 0 + 129 2 32 0 -1 -2 -4 0 + 129 4 32 0 -1 -3 -3 0 + 129 6 32 0 -1 -1 -4 0 + 129 8 32 0 -1 0 -5 0 + 129 10 32 0 -1 -1 -5 2 + 129 12 32 0 -1 1 -6 2 + 129 14 32 0 -1 0 -4 0 + 129 16 32 0 -1 -1 -3 0 + 129 18 32 0 -1 0 -3 0 + 129 20 32 0 -1 3 -7 3 + 129 20 32 0 -1 4 -7 3 + 129 22 32 0 -1 2 -6 0 + 129 24 32 0 -1 1 -5 0 + 129 26 32 0 -1 1 -4 0 + 129 28 32 0 -1 2 -5 0 + 129 30 32 0 -1 1 -3 0 + 129 32 32 0 -1 0 -2 0 + 129 34 32 0 -1 0 -1 0 + 129 36 32 0 -1 -1 0 0 + 129 38 32 0 -1 -1 -1 0 + 129 40 32 0 -1 -4 0 0 + 129 42 32 0 -1 -3 0 0 + 129 44 32 0 -1 -3 -1 0 + 129 46 32 0 -1 -5 0 0 + 129 48 32 0 -1 -5 -1 2 + 129 50 32 0 -1 -4 -1 0 + 129 52 32 0 -1 -2 -1 0 + 129 54 32 0 -1 -1 -2 0 + 129 56 32 0 -1 -2 -2 0 + 129 58 32 0 -1 -3 -2 0 + 129 60 32 0 -1 -4 -3 3 + 129 60 32 0 -1 -3 -4 3 + 129 62 32 0 -1 -4 -2 0 + 130 0 32 0 -1 -4 3 0 + 130 2 32 0 -1 -4 2 0 + 130 4 32 0 -1 -5 3 0 + 130 6 32 0 -1 -6 4 0 + 130 8 32 0 -1 -5 1 0 + 130 10 32 0 -1 -6 3 0 + 130 12 32 0 -1 -7 4 3 + 130 12 32 0 -1 -7 3 3 + 130 14 32 0 -1 -6 2 0 + 130 16 32 0 -1 -6 1 2 + 130 18 32 0 -1 -5 2 0 + 130 20 32 0 -1 -4 1 0 + 130 22 32 0 -1 -3 1 0 + 130 24 32 0 -1 -3 2 0 + 130 26 32 0 -1 -2 1 0 + 130 28 32 0 -1 -2 0 0 + 130 30 32 0 -1 -3 3 0 + 130 32 32 0 -1 -2 3 0 + 130 34 32 0 -1 -2 2 0 + 130 36 32 0 -1 0 0 0 + 130 38 32 0 -1 -1 1 0 + 130 40 32 0 -1 -1 2 4 + 130 42 32 0 -1 -2 4 0 + 130 44 32 0 -1 -3 4 0 + 130 46 32 0 -1 -3 5 0 + 130 48 32 0 -1 -4 6 0 + 130 50 32 0 -1 -4 5 0 + 130 52 32 0 -1 -5 6 2 + 130 54 32 0 -1 -5 4 0 + 130 56 32 0 -1 -5 5 0 + 130 58 32 0 -1 -4 4 0 + 130 62 32 0 -1 -6 5 2 + 131 0 32 0 -1 2 2 0 + 131 2 32 0 -1 1 3 0 + 131 4 32 0 -1 2 3 0 + 131 6 32 0 -1 0 4 0 + 131 8 32 0 -1 3 3 0 + 131 10 32 0 -1 -1 4 0 + 131 12 32 0 -1 -1 5 0 + 131 14 32 0 -1 4 2 0 + 131 16 32 0 -1 3 4 3 + 131 16 32 0 -1 4 3 3 + 131 18 32 0 -1 2 4 0 + 131 20 32 0 -1 1 4 0 + 131 22 32 0 -1 1 5 2 + 131 24 32 0 -1 0 5 0 + 131 26 32 0 -1 -1 6 2 + 131 28 32 0 -1 -2 6 0 + 131 30 32 0 -1 -2 5 0 + 131 32 32 0 -1 -3 6 0 + 131 34 32 0 -1 -4 7 3 + 131 34 32 0 -1 -3 7 3 + 131 36 32 0 -1 0 1 0 + 131 38 32 0 -1 0 2 0 + 131 40 32 0 -1 -1 3 0 + 131 42 32 0 -1 0 3 0 + 131 44 32 0 -1 1 0 0 + 131 46 32 0 -1 3 1 0 + 131 48 32 0 -1 4 0 0 + 131 50 32 0 -1 5 0 0 + 131 52 32 0 -1 2 1 0 + 131 54 32 0 -1 1 1 0 + 131 56 32 0 -1 1 2 0 + 131 58 32 0 -1 3 2 0 + 131 60 32 0 -1 5 1 2 + 131 62 32 0 -1 4 1 0 + 132 0 32 0 -1 5 -2 0 + 132 2 32 0 -1 4 -2 0 + 132 4 32 0 -1 4 -1 0 + 132 6 32 0 -1 6 -2 0 + 132 8 32 0 -1 3 0 0 + 132 10 32 0 -1 6 -1 2 + 132 12 32 0 -1 5 -1 0 + 132 14 32 0 -1 2 0 0 + 132 16 32 0 -1 3 -1 0 + 132 18 32 0 -1 2 -1 0 + 132 20 32 0 -1 3 -2 0 + 132 22 32 0 -1 2 -2 0 + 132 24 32 0 -1 1 -1 0 + 132 26 32 0 -1 1 -2 0 + 132 28 32 0 -1 2 -3 0 + 132 30 32 0 -1 2 -4 4 + 132 32 32 0 -1 3 -5 0 + 132 34 32 0 -1 3 -4 0 + 132 36 32 0 -1 4 -5 0 + 132 38 32 0 -1 4 -4 0 + 132 40 32 0 -1 3 -3 0 + 132 42 32 0 -1 4 -3 0 + 132 44 32 0 -1 3 -6 0 + 132 46 32 0 -1 7 -4 3 + 132 46 32 0 -1 7 -3 3 + 132 48 32 0 -1 4 -6 0 + 132 50 32 0 -1 5 -6 2 + 132 52 32 0 -1 5 -5 0 + 132 54 32 0 -1 5 -4 0 + 132 56 32 0 -1 6 -5 2 + 132 58 32 0 -1 6 -3 0 + 132 60 32 0 -1 5 -3 0 + 132 62 32 0 -1 6 -4 0 + 133 0 32 1 -1 -2 -3 0 + 133 2 32 1 -1 -2 -4 0 + 133 4 32 1 -1 -3 -3 0 + 133 6 32 1 -1 -1 -4 0 + 133 8 32 1 -1 0 -5 0 + 133 10 32 1 -1 -1 -5 2 + 133 12 32 1 -1 1 -6 2 + 133 14 32 1 -1 0 -4 0 + 133 16 32 1 -1 -1 -3 0 + 133 18 32 1 -1 0 -3 0 + 133 20 32 1 -1 3 -7 3 + 133 20 32 1 -1 4 -7 3 + 133 22 32 1 -1 2 -6 0 + 133 24 32 1 -1 1 -5 0 + 133 26 32 1 -1 1 -4 0 + 133 28 32 1 -1 2 -5 0 + 133 30 32 1 -1 1 -3 0 + 133 32 32 1 -1 0 -2 0 + 133 34 32 1 -1 0 -1 0 + 133 36 32 1 -1 -1 0 0 + 133 38 32 1 -1 -1 -1 0 + 133 40 32 1 -1 -4 0 0 + 133 42 32 1 -1 -3 0 0 + 133 44 32 1 -1 -3 -1 0 + 133 46 32 1 -1 -5 0 0 + 133 48 32 1 -1 -5 -1 2 + 133 50 32 1 -1 -4 -1 0 + 133 52 32 1 -1 -2 -1 0 + 133 54 32 1 -1 -1 -2 0 + 133 56 32 1 -1 -2 -2 0 + 133 58 32 1 -1 -3 -2 0 + 133 60 32 1 -1 -4 -3 3 + 133 60 32 1 -1 -3 -4 3 + 133 62 32 1 -1 -4 -2 0 + 134 0 32 1 -1 -4 3 0 + 134 2 32 1 -1 -4 2 0 + 134 4 32 1 -1 -5 3 0 + 134 6 32 1 -1 -6 4 0 + 134 8 32 1 -1 -5 1 0 + 134 10 32 1 -1 -6 3 0 + 134 12 32 1 -1 -7 4 3 + 134 12 32 1 -1 -7 3 3 + 134 14 32 1 -1 -6 2 0 + 134 16 32 1 -1 -6 1 2 + 134 18 32 1 -1 -5 2 0 + 134 20 32 1 -1 -4 1 0 + 134 22 32 1 -1 -3 1 0 + 134 24 32 1 -1 -3 2 0 + 134 26 32 1 -1 -2 1 0 + 134 28 32 1 -1 -2 0 0 + 134 30 32 1 -1 -3 3 0 + 134 32 32 1 -1 -2 3 0 + 134 34 32 1 -1 -2 2 0 + 134 36 32 1 -1 0 0 0 + 134 38 32 1 -1 -1 1 0 + 134 40 32 1 -1 -1 2 4 + 134 42 32 1 -1 -2 4 0 + 134 44 32 1 -1 -3 4 0 + 134 46 32 1 -1 -3 5 0 + 134 48 32 1 -1 -4 6 0 + 134 50 32 1 -1 -4 5 0 + 134 52 32 1 -1 -5 6 2 + 134 54 32 1 -1 -5 4 0 + 134 56 32 1 -1 -5 5 0 + 134 58 32 1 -1 -4 4 0 + 134 62 32 1 -1 -6 5 2 + 135 0 32 1 -1 2 2 0 + 135 2 32 1 -1 1 3 0 + 135 4 32 1 -1 2 3 0 + 135 6 32 1 -1 0 4 0 + 135 8 32 1 -1 3 3 0 + 135 10 32 1 -1 -1 4 0 + 135 12 32 1 -1 -1 5 0 + 135 14 32 1 -1 4 2 0 + 135 16 32 1 -1 3 4 3 + 135 16 32 1 -1 4 3 3 + 135 18 32 1 -1 2 4 0 + 135 20 32 1 -1 1 4 0 + 135 22 32 1 -1 1 5 2 + 135 24 32 1 -1 0 5 0 + 135 26 32 1 -1 -1 6 2 + 135 28 32 1 -1 -2 6 0 + 135 30 32 1 -1 -2 5 0 + 135 32 32 1 -1 -3 6 0 + 135 34 32 1 -1 -4 7 3 + 135 34 32 1 -1 -3 7 3 + 135 36 32 1 -1 0 1 0 + 135 38 32 1 -1 0 2 0 + 135 40 32 1 -1 -1 3 0 + 135 42 32 1 -1 0 3 0 + 135 44 32 1 -1 1 0 0 + 135 46 32 1 -1 3 1 0 + 135 48 32 1 -1 4 0 0 + 135 50 32 1 -1 5 0 0 + 135 52 32 1 -1 2 1 0 + 135 54 32 1 -1 1 1 0 + 135 56 32 1 -1 1 2 0 + 135 58 32 1 -1 3 2 0 + 135 60 32 1 -1 5 1 2 + 135 62 32 1 -1 4 1 0 + 136 0 32 1 -1 5 -2 0 + 136 2 32 1 -1 4 -2 0 + 136 4 32 1 -1 4 -1 0 + 136 6 32 1 -1 6 -2 0 + 136 8 32 1 -1 3 0 0 + 136 10 32 1 -1 6 -1 2 + 136 12 32 1 -1 5 -1 0 + 136 14 32 1 -1 2 0 0 + 136 16 32 1 -1 3 -1 0 + 136 18 32 1 -1 2 -1 0 + 136 20 32 1 -1 3 -2 0 + 136 22 32 1 -1 2 -2 0 + 136 24 32 1 -1 1 -1 0 + 136 26 32 1 -1 1 -2 0 + 136 28 32 1 -1 2 -3 0 + 136 30 32 1 -1 2 -4 4 + 136 32 32 1 -1 3 -5 0 + 136 34 32 1 -1 3 -4 0 + 136 36 32 1 -1 4 -5 0 + 136 38 32 1 -1 4 -4 0 + 136 40 32 1 -1 3 -3 0 + 136 42 32 1 -1 4 -3 0 + 136 44 32 1 -1 3 -6 0 + 136 46 32 1 -1 7 -4 3 + 136 46 32 1 -1 7 -3 3 + 136 48 32 1 -1 4 -6 0 + 136 50 32 1 -1 5 -6 2 + 136 52 32 1 -1 5 -5 0 + 136 54 32 1 -1 5 -4 0 + 136 56 32 1 -1 6 -5 2 + 136 58 32 1 -1 6 -3 0 + 136 60 32 1 -1 5 -3 0 + 136 62 32 1 -1 6 -4 0 + 137 0 32 -1 0 -2 -3 0 + 137 2 32 -1 0 -2 -4 0 + 137 4 32 -1 0 -3 -3 0 + 137 6 32 -1 0 -1 -4 0 + 137 8 32 -1 0 0 -5 0 + 137 10 32 -1 0 -1 -5 2 + 137 12 32 -1 0 1 -6 2 + 137 14 32 -1 0 0 -4 0 + 137 16 32 -1 0 -1 -3 0 + 137 18 32 -1 0 0 -3 0 + 137 20 32 -1 0 3 -7 3 + 137 20 32 -1 0 4 -7 3 + 137 22 32 -1 0 2 -6 0 + 137 24 32 -1 0 1 -5 0 + 137 26 32 -1 0 1 -4 0 + 137 28 32 -1 0 2 -5 0 + 137 30 32 -1 0 1 -3 0 + 137 32 32 -1 0 0 -2 0 + 137 34 32 -1 0 0 -1 0 + 137 36 32 -1 0 -1 0 0 + 137 38 32 -1 0 -1 -1 0 + 137 40 32 -1 0 -4 0 0 + 137 42 32 -1 0 -3 0 0 + 137 44 32 -1 0 -3 -1 0 + 137 46 32 -1 0 -5 0 0 + 137 48 32 -1 0 -5 -1 2 + 137 50 32 -1 0 -4 -1 0 + 137 52 32 -1 0 -2 -1 0 + 137 54 32 -1 0 -1 -2 0 + 137 56 32 -1 0 -2 -2 0 + 137 58 32 -1 0 -3 -2 0 + 137 60 32 -1 0 -4 -3 3 + 137 60 32 -1 0 -3 -4 3 + 137 62 32 -1 0 -4 -2 0 + 138 0 32 -1 0 -4 3 0 + 138 2 32 -1 0 -4 2 0 + 138 4 32 -1 0 -5 3 0 + 138 6 32 -1 0 -6 4 0 + 138 8 32 -1 0 -5 1 0 + 138 10 32 -1 0 -6 3 0 + 138 12 32 -1 0 -7 4 3 + 138 12 32 -1 0 -7 3 3 + 138 14 32 -1 0 -6 2 0 + 138 16 32 -1 0 -6 1 2 + 138 18 32 -1 0 -5 2 0 + 138 20 32 -1 0 -4 1 0 + 138 22 32 -1 0 -3 1 0 + 138 24 32 -1 0 -3 2 0 + 138 26 32 -1 0 -2 1 0 + 138 28 32 -1 0 -2 0 0 + 138 30 32 -1 0 -3 3 0 + 138 32 32 -1 0 -2 3 0 + 138 34 32 -1 0 -2 2 0 + 138 36 32 -1 0 0 0 0 + 138 38 32 -1 0 -1 1 0 + 138 40 32 -1 0 -1 2 4 + 138 42 32 -1 0 -2 4 0 + 138 44 32 -1 0 -3 4 0 + 138 46 32 -1 0 -3 5 0 + 138 48 32 -1 0 -4 6 0 + 138 50 32 -1 0 -4 5 0 + 138 52 32 -1 0 -5 6 2 + 138 54 32 -1 0 -5 4 0 + 138 56 32 -1 0 -5 5 0 + 138 58 32 -1 0 -4 4 0 + 138 62 32 -1 0 -6 5 2 + 139 0 32 -1 0 2 2 0 + 139 2 32 -1 0 1 3 0 + 139 4 32 -1 0 2 3 0 + 139 6 32 -1 0 0 4 0 + 139 8 32 -1 0 3 3 0 + 139 10 32 -1 0 -1 4 0 + 139 12 32 -1 0 -1 5 0 + 139 14 32 -1 0 4 2 0 + 139 16 32 -1 0 3 4 3 + 139 16 32 -1 0 4 3 3 + 139 18 32 -1 0 2 4 0 + 139 20 32 -1 0 1 4 0 + 139 22 32 -1 0 1 5 2 + 139 24 32 -1 0 0 5 0 + 139 26 32 -1 0 -1 6 2 + 139 28 32 -1 0 -2 6 0 + 139 30 32 -1 0 -2 5 0 + 139 32 32 -1 0 -3 6 0 + 139 34 32 -1 0 -4 7 3 + 139 34 32 -1 0 -3 7 3 + 139 36 32 -1 0 0 1 0 + 139 38 32 -1 0 0 2 0 + 139 40 32 -1 0 -1 3 0 + 139 42 32 -1 0 0 3 0 + 139 44 32 -1 0 1 0 0 + 139 46 32 -1 0 3 1 0 + 139 48 32 -1 0 4 0 0 + 139 50 32 -1 0 5 0 0 + 139 52 32 -1 0 2 1 0 + 139 54 32 -1 0 1 1 0 + 139 56 32 -1 0 1 2 0 + 139 58 32 -1 0 3 2 0 + 139 60 32 -1 0 5 1 2 + 139 62 32 -1 0 4 1 0 + 140 0 32 -1 0 5 -2 0 + 140 2 32 -1 0 4 -2 0 + 140 4 32 -1 0 4 -1 0 + 140 6 32 -1 0 6 -2 0 + 140 8 32 -1 0 3 0 0 + 140 10 32 -1 0 6 -1 2 + 140 12 32 -1 0 5 -1 0 + 140 14 32 -1 0 2 0 0 + 140 16 32 -1 0 3 -1 0 + 140 18 32 -1 0 2 -1 0 + 140 20 32 -1 0 3 -2 0 + 140 22 32 -1 0 2 -2 0 + 140 24 32 -1 0 1 -1 0 + 140 26 32 -1 0 1 -2 0 + 140 28 32 -1 0 2 -3 0 + 140 30 32 -1 0 2 -4 4 + 140 32 32 -1 0 3 -5 0 + 140 34 32 -1 0 3 -4 0 + 140 36 32 -1 0 4 -5 0 + 140 38 32 -1 0 4 -4 0 + 140 40 32 -1 0 3 -3 0 + 140 42 32 -1 0 4 -3 0 + 140 44 32 -1 0 3 -6 0 + 140 46 32 -1 0 7 -4 3 + 140 46 32 -1 0 7 -3 3 + 140 48 32 -1 0 4 -6 0 + 140 50 32 -1 0 5 -6 2 + 140 52 32 -1 0 5 -5 0 + 140 54 32 -1 0 5 -4 0 + 140 56 32 -1 0 6 -5 2 + 140 58 32 -1 0 6 -3 0 + 140 60 32 -1 0 5 -3 0 + 140 62 32 -1 0 6 -4 0 + 125 0 32 0 0 -2 -3 0 + 125 2 32 0 0 -2 -4 0 + 125 4 32 0 0 -3 -3 0 + 125 6 32 0 0 -1 -4 0 + 125 8 32 0 0 0 -5 0 + 125 10 32 0 0 -1 -5 2 + 125 12 32 0 0 1 -6 2 + 125 14 32 0 0 0 -4 0 + 125 16 32 0 0 -1 -3 0 + 125 18 32 0 0 0 -3 0 + 125 20 32 0 0 3 -7 3 + 125 20 32 0 0 4 -7 3 + 125 22 32 0 0 2 -6 0 + 125 24 32 0 0 1 -5 0 + 125 26 32 0 0 1 -4 0 + 125 28 32 0 0 2 -5 0 + 125 30 32 0 0 1 -3 0 + 125 32 32 0 0 0 -2 0 + 125 34 32 0 0 0 -1 0 + 125 36 32 0 0 -1 0 0 + 125 38 32 0 0 -1 -1 0 + 125 40 32 0 0 -4 0 0 + 125 42 32 0 0 -3 0 0 + 125 44 32 0 0 -3 -1 0 + 125 46 32 0 0 -5 0 0 + 125 48 32 0 0 -5 -1 2 + 125 50 32 0 0 -4 -1 0 + 125 52 32 0 0 -2 -1 0 + 125 54 32 0 0 -1 -2 0 + 125 56 32 0 0 -2 -2 0 + 125 58 32 0 0 -3 -2 0 + 125 60 32 0 0 -4 -3 3 + 125 60 32 0 0 -3 -4 3 + 125 62 32 0 0 -4 -2 0 + 126 0 32 0 0 -4 3 0 + 126 2 32 0 0 -4 2 0 + 126 4 32 0 0 -5 3 0 + 126 6 32 0 0 -6 4 0 + 126 8 32 0 0 -5 1 0 + 126 10 32 0 0 -6 3 0 + 126 12 32 0 0 -7 4 3 + 126 12 32 0 0 -7 3 3 + 126 14 32 0 0 -6 2 0 + 126 16 32 0 0 -6 1 2 + 126 18 32 0 0 -5 2 0 + 126 20 32 0 0 -4 1 0 + 126 22 32 0 0 -3 1 0 + 126 24 32 0 0 -3 2 0 + 126 26 32 0 0 -2 1 0 + 126 28 32 0 0 -2 0 0 + 126 30 32 0 0 -3 3 0 + 126 32 32 0 0 -2 3 0 + 126 34 32 0 0 -2 2 0 + 126 36 32 0 0 0 0 0 + 126 38 32 0 0 -1 1 0 + 126 40 32 0 0 -1 2 4 + 126 42 32 0 0 -2 4 0 + 126 44 32 0 0 -3 4 0 + 126 46 32 0 0 -3 5 0 + 126 48 32 0 0 -4 6 0 + 126 50 32 0 0 -4 5 0 + 126 52 32 0 0 -5 6 2 + 126 54 32 0 0 -5 4 0 + 126 56 32 0 0 -5 5 0 + 126 58 32 0 0 -4 4 0 + 126 62 32 0 0 -6 5 2 + 127 0 32 0 0 2 2 0 + 127 2 32 0 0 1 3 0 + 127 4 32 0 0 2 3 0 + 127 6 32 0 0 0 4 0 + 127 8 32 0 0 3 3 0 + 127 10 32 0 0 -1 4 0 + 127 12 32 0 0 -1 5 0 + 127 14 32 0 0 4 2 0 + 127 16 32 0 0 3 4 3 + 127 16 32 0 0 4 3 3 + 127 18 32 0 0 2 4 0 + 127 20 32 0 0 1 4 0 + 127 22 32 0 0 1 5 2 + 127 24 32 0 0 0 5 0 + 127 26 32 0 0 -1 6 2 + 127 28 32 0 0 -2 6 0 + 127 30 32 0 0 -2 5 0 + 127 32 32 0 0 -3 6 0 + 127 34 32 0 0 -4 7 3 + 127 34 32 0 0 -3 7 3 + 127 36 32 0 0 0 1 0 + 127 38 32 0 0 0 2 0 + 127 40 32 0 0 -1 3 0 + 127 42 32 0 0 0 3 0 + 127 44 32 0 0 1 0 0 + 127 46 32 0 0 3 1 0 + 127 48 32 0 0 4 0 0 + 127 50 32 0 0 5 0 0 + 127 52 32 0 0 2 1 0 + 127 54 32 0 0 1 1 0 + 127 56 32 0 0 1 2 0 + 127 58 32 0 0 3 2 0 + 127 60 32 0 0 5 1 2 + 127 62 32 0 0 4 1 0 + 128 0 32 0 0 5 -2 0 + 128 2 32 0 0 4 -2 0 + 128 4 32 0 0 4 -1 0 + 128 6 32 0 0 6 -2 0 + 128 8 32 0 0 3 0 0 + 128 10 32 0 0 6 -1 2 + 128 12 32 0 0 5 -1 0 + 128 14 32 0 0 2 0 0 + 128 16 32 0 0 3 -1 0 + 128 18 32 0 0 2 -1 0 + 128 20 32 0 0 3 -2 0 + 128 22 32 0 0 2 -2 0 + 128 24 32 0 0 1 -1 0 + 128 26 32 0 0 1 -2 0 + 128 28 32 0 0 2 -3 0 + 128 30 32 0 0 2 -4 4 + 128 32 32 0 0 3 -5 0 + 128 34 32 0 0 3 -4 0 + 128 36 32 0 0 4 -5 0 + 128 38 32 0 0 4 -4 0 + 128 40 32 0 0 3 -3 0 + 128 42 32 0 0 4 -3 0 + 128 44 32 0 0 3 -6 0 + 128 46 32 0 0 7 -4 3 + 128 46 32 0 0 7 -3 3 + 128 48 32 0 0 4 -6 0 + 128 50 32 0 0 5 -6 2 + 128 52 32 0 0 5 -5 0 + 128 54 32 0 0 5 -4 0 + 128 56 32 0 0 6 -5 2 + 128 58 32 0 0 6 -3 0 + 128 60 32 0 0 5 -3 0 + 128 62 32 0 0 6 -4 0 + 141 0 32 1 0 -2 -3 0 + 141 2 32 1 0 -2 -4 0 + 141 4 32 1 0 -3 -3 0 + 141 6 32 1 0 -1 -4 0 + 141 8 32 1 0 0 -5 0 + 141 10 32 1 0 -1 -5 2 + 141 12 32 1 0 1 -6 2 + 141 14 32 1 0 0 -4 0 + 141 16 32 1 0 -1 -3 0 + 141 18 32 1 0 0 -3 0 + 141 20 32 1 0 3 -7 3 + 141 20 32 1 0 4 -7 3 + 141 22 32 1 0 2 -6 0 + 141 24 32 1 0 1 -5 0 + 141 26 32 1 0 1 -4 0 + 141 28 32 1 0 2 -5 0 + 141 30 32 1 0 1 -3 0 + 141 32 32 1 0 0 -2 0 + 141 34 32 1 0 0 -1 0 + 141 36 32 1 0 -1 0 0 + 141 38 32 1 0 -1 -1 0 + 141 40 32 1 0 -4 0 0 + 141 42 32 1 0 -3 0 0 + 141 44 32 1 0 -3 -1 0 + 141 46 32 1 0 -5 0 0 + 141 48 32 1 0 -5 -1 2 + 141 50 32 1 0 -4 -1 0 + 141 52 32 1 0 -2 -1 0 + 141 54 32 1 0 -1 -2 0 + 141 56 32 1 0 -2 -2 0 + 141 58 32 1 0 -3 -2 0 + 141 60 32 1 0 -4 -3 3 + 141 60 32 1 0 -3 -4 3 + 141 62 32 1 0 -4 -2 0 + 142 0 32 1 0 -4 3 0 + 142 2 32 1 0 -4 2 0 + 142 4 32 1 0 -5 3 0 + 142 6 32 1 0 -6 4 0 + 142 8 32 1 0 -5 1 0 + 142 10 32 1 0 -6 3 0 + 142 12 32 1 0 -7 4 3 + 142 12 32 1 0 -7 3 3 + 142 14 32 1 0 -6 2 0 + 142 16 32 1 0 -6 1 2 + 142 18 32 1 0 -5 2 0 + 142 20 32 1 0 -4 1 0 + 142 22 32 1 0 -3 1 0 + 142 24 32 1 0 -3 2 0 + 142 26 32 1 0 -2 1 0 + 142 28 32 1 0 -2 0 0 + 142 30 32 1 0 -3 3 0 + 142 32 32 1 0 -2 3 0 + 142 34 32 1 0 -2 2 0 + 142 36 32 1 0 0 0 0 + 142 38 32 1 0 -1 1 0 + 142 40 32 1 0 -1 2 4 + 142 42 32 1 0 -2 4 0 + 142 44 32 1 0 -3 4 0 + 142 46 32 1 0 -3 5 0 + 142 48 32 1 0 -4 6 0 + 142 50 32 1 0 -4 5 0 + 142 52 32 1 0 -5 6 2 + 142 54 32 1 0 -5 4 0 + 142 56 32 1 0 -5 5 0 + 142 58 32 1 0 -4 4 0 + 142 62 32 1 0 -6 5 2 + 143 0 32 1 0 2 2 0 + 143 2 32 1 0 1 3 0 + 143 4 32 1 0 2 3 0 + 143 6 32 1 0 0 4 0 + 143 8 32 1 0 3 3 0 + 143 10 32 1 0 -1 4 0 + 143 12 32 1 0 -1 5 0 + 143 14 32 1 0 4 2 0 + 143 16 32 1 0 3 4 3 + 143 16 32 1 0 4 3 3 + 143 18 32 1 0 2 4 0 + 143 20 32 1 0 1 4 0 + 143 22 32 1 0 1 5 2 + 143 24 32 1 0 0 5 0 + 143 26 32 1 0 -1 6 2 + 143 28 32 1 0 -2 6 0 + 143 30 32 1 0 -2 5 0 + 143 32 32 1 0 -3 6 0 + 143 34 32 1 0 -4 7 3 + 143 34 32 1 0 -3 7 3 + 143 36 32 1 0 0 1 0 + 143 38 32 1 0 0 2 0 + 143 40 32 1 0 -1 3 0 + 143 42 32 1 0 0 3 0 + 143 44 32 1 0 1 0 0 + 143 46 32 1 0 3 1 0 + 143 48 32 1 0 4 0 0 + 143 50 32 1 0 5 0 0 + 143 52 32 1 0 2 1 0 + 143 54 32 1 0 1 1 0 + 143 56 32 1 0 1 2 0 + 143 58 32 1 0 3 2 0 + 143 60 32 1 0 5 1 2 + 143 62 32 1 0 4 1 0 + 144 0 32 1 0 5 -2 0 + 144 2 32 1 0 4 -2 0 + 144 4 32 1 0 4 -1 0 + 144 6 32 1 0 6 -2 0 + 144 8 32 1 0 3 0 0 + 144 10 32 1 0 6 -1 2 + 144 12 32 1 0 5 -1 0 + 144 14 32 1 0 2 0 0 + 144 16 32 1 0 3 -1 0 + 144 18 32 1 0 2 -1 0 + 144 20 32 1 0 3 -2 0 + 144 22 32 1 0 2 -2 0 + 144 24 32 1 0 1 -1 0 + 144 26 32 1 0 1 -2 0 + 144 28 32 1 0 2 -3 0 + 144 30 32 1 0 2 -4 4 + 144 32 32 1 0 3 -5 0 + 144 34 32 1 0 3 -4 0 + 144 36 32 1 0 4 -5 0 + 144 38 32 1 0 4 -4 0 + 144 40 32 1 0 3 -3 0 + 144 42 32 1 0 4 -3 0 + 144 44 32 1 0 3 -6 0 + 144 46 32 1 0 7 -4 3 + 144 46 32 1 0 7 -3 3 + 144 48 32 1 0 4 -6 0 + 144 50 32 1 0 5 -6 2 + 144 52 32 1 0 5 -5 0 + 144 54 32 1 0 5 -4 0 + 144 56 32 1 0 6 -5 2 + 144 58 32 1 0 6 -3 0 + 144 60 32 1 0 5 -3 0 + 144 62 32 1 0 6 -4 0 + 145 0 32 -1 1 -2 -3 0 + 145 2 32 -1 1 -2 -4 0 + 145 4 32 -1 1 -3 -3 0 + 145 6 32 -1 1 -1 -4 0 + 145 8 32 -1 1 0 -5 0 + 145 10 32 -1 1 -1 -5 2 + 145 12 32 -1 1 1 -6 2 + 145 14 32 -1 1 0 -4 0 + 145 16 32 -1 1 -1 -3 0 + 145 18 32 -1 1 0 -3 0 + 145 20 32 -1 1 3 -7 3 + 145 20 32 -1 1 4 -7 3 + 145 22 32 -1 1 2 -6 0 + 145 24 32 -1 1 1 -5 0 + 145 26 32 -1 1 1 -4 0 + 145 28 32 -1 1 2 -5 0 + 145 30 32 -1 1 1 -3 0 + 145 32 32 -1 1 0 -2 0 + 145 34 32 -1 1 0 -1 0 + 145 36 32 -1 1 -1 0 0 + 145 38 32 -1 1 -1 -1 0 + 145 40 32 -1 1 -4 0 0 + 145 42 32 -1 1 -3 0 0 + 145 44 32 -1 1 -3 -1 0 + 145 46 32 -1 1 -5 0 0 + 145 48 32 -1 1 -5 -1 2 + 145 50 32 -1 1 -4 -1 0 + 145 52 32 -1 1 -2 -1 0 + 145 54 32 -1 1 -1 -2 0 + 145 56 32 -1 1 -2 -2 0 + 145 58 32 -1 1 -3 -2 0 + 145 60 32 -1 1 -4 -3 3 + 145 60 32 -1 1 -3 -4 3 + 145 62 32 -1 1 -4 -2 0 + 146 0 32 -1 1 -4 3 0 + 146 2 32 -1 1 -4 2 0 + 146 4 32 -1 1 -5 3 0 + 146 6 32 -1 1 -6 4 0 + 146 8 32 -1 1 -5 1 0 + 146 10 32 -1 1 -6 3 0 + 146 12 32 -1 1 -7 4 3 + 146 12 32 -1 1 -7 3 3 + 146 14 32 -1 1 -6 2 0 + 146 16 32 -1 1 -6 1 2 + 146 18 32 -1 1 -5 2 0 + 146 20 32 -1 1 -4 1 0 + 146 22 32 -1 1 -3 1 0 + 146 24 32 -1 1 -3 2 0 + 146 26 32 -1 1 -2 1 0 + 146 28 32 -1 1 -2 0 0 + 146 30 32 -1 1 -3 3 0 + 146 32 32 -1 1 -2 3 0 + 146 34 32 -1 1 -2 2 0 + 146 36 32 -1 1 0 0 0 + 146 38 32 -1 1 -1 1 0 + 146 40 32 -1 1 -1 2 4 + 146 42 32 -1 1 -2 4 0 + 146 44 32 -1 1 -3 4 0 + 146 46 32 -1 1 -3 5 0 + 146 48 32 -1 1 -4 6 0 + 146 50 32 -1 1 -4 5 0 + 146 52 32 -1 1 -5 6 2 + 146 54 32 -1 1 -5 4 0 + 146 56 32 -1 1 -5 5 0 + 146 58 32 -1 1 -4 4 0 + 146 62 32 -1 1 -6 5 2 + 147 0 32 -1 1 2 2 0 + 147 2 32 -1 1 1 3 0 + 147 4 32 -1 1 2 3 0 + 147 6 32 -1 1 0 4 0 + 147 8 32 -1 1 3 3 0 + 147 10 32 -1 1 -1 4 0 + 147 12 32 -1 1 -1 5 0 + 147 14 32 -1 1 4 2 0 + 147 16 32 -1 1 3 4 3 + 147 16 32 -1 1 4 3 3 + 147 18 32 -1 1 2 4 0 + 147 20 32 -1 1 1 4 0 + 147 22 32 -1 1 1 5 2 + 147 24 32 -1 1 0 5 0 + 147 26 32 -1 1 -1 6 2 + 147 28 32 -1 1 -2 6 0 + 147 30 32 -1 1 -2 5 0 + 147 32 32 -1 1 -3 6 0 + 147 34 32 -1 1 -4 7 3 + 147 34 32 -1 1 -3 7 3 + 147 36 32 -1 1 0 1 0 + 147 38 32 -1 1 0 2 0 + 147 40 32 -1 1 -1 3 0 + 147 42 32 -1 1 0 3 0 + 147 44 32 -1 1 1 0 0 + 147 46 32 -1 1 3 1 0 + 147 48 32 -1 1 4 0 0 + 147 50 32 -1 1 5 0 0 + 147 52 32 -1 1 2 1 0 + 147 54 32 -1 1 1 1 0 + 147 56 32 -1 1 1 2 0 + 147 58 32 -1 1 3 2 0 + 147 60 32 -1 1 5 1 2 + 147 62 32 -1 1 4 1 0 + 148 0 32 -1 1 5 -2 0 + 148 2 32 -1 1 4 -2 0 + 148 4 32 -1 1 4 -1 0 + 148 6 32 -1 1 6 -2 0 + 148 8 32 -1 1 3 0 0 + 148 10 32 -1 1 6 -1 2 + 148 12 32 -1 1 5 -1 0 + 148 14 32 -1 1 2 0 0 + 148 16 32 -1 1 3 -1 0 + 148 18 32 -1 1 2 -1 0 + 148 20 32 -1 1 3 -2 0 + 148 22 32 -1 1 2 -2 0 + 148 24 32 -1 1 1 -1 0 + 148 26 32 -1 1 1 -2 0 + 148 28 32 -1 1 2 -3 0 + 148 30 32 -1 1 2 -4 4 + 148 32 32 -1 1 3 -5 0 + 148 34 32 -1 1 3 -4 0 + 148 36 32 -1 1 4 -5 0 + 148 38 32 -1 1 4 -4 0 + 148 40 32 -1 1 3 -3 0 + 148 42 32 -1 1 4 -3 0 + 148 44 32 -1 1 3 -6 0 + 148 46 32 -1 1 7 -4 3 + 148 46 32 -1 1 7 -3 3 + 148 48 32 -1 1 4 -6 0 + 148 50 32 -1 1 5 -6 2 + 148 52 32 -1 1 5 -5 0 + 148 54 32 -1 1 5 -4 0 + 148 56 32 -1 1 6 -5 2 + 148 58 32 -1 1 6 -3 0 + 148 60 32 -1 1 5 -3 0 + 148 62 32 -1 1 6 -4 0 + 149 0 32 0 1 -2 -3 0 + 149 2 32 0 1 -2 -4 0 + 149 4 32 0 1 -3 -3 0 + 149 6 32 0 1 -1 -4 0 + 149 8 32 0 1 0 -5 0 + 149 10 32 0 1 -1 -5 2 + 149 12 32 0 1 1 -6 2 + 149 14 32 0 1 0 -4 0 + 149 16 32 0 1 -1 -3 0 + 149 18 32 0 1 0 -3 0 + 149 20 32 0 1 3 -7 3 + 149 20 32 0 1 4 -7 3 + 149 22 32 0 1 2 -6 0 + 149 24 32 0 1 1 -5 0 + 149 26 32 0 1 1 -4 0 + 149 28 32 0 1 2 -5 0 + 149 30 32 0 1 1 -3 0 + 149 32 32 0 1 0 -2 0 + 149 34 32 0 1 0 -1 0 + 149 36 32 0 1 -1 0 0 + 149 38 32 0 1 -1 -1 0 + 149 40 32 0 1 -4 0 0 + 149 42 32 0 1 -3 0 0 + 149 44 32 0 1 -3 -1 0 + 149 46 32 0 1 -5 0 0 + 149 48 32 0 1 -5 -1 2 + 149 50 32 0 1 -4 -1 0 + 149 52 32 0 1 -2 -1 0 + 149 54 32 0 1 -1 -2 0 + 149 56 32 0 1 -2 -2 0 + 149 58 32 0 1 -3 -2 0 + 149 60 32 0 1 -4 -3 3 + 149 60 32 0 1 -3 -4 3 + 149 62 32 0 1 -4 -2 0 + 150 0 32 0 1 -4 3 0 + 150 2 32 0 1 -4 2 0 + 150 4 32 0 1 -5 3 0 + 150 6 32 0 1 -6 4 0 + 150 8 32 0 1 -5 1 0 + 150 10 32 0 1 -6 3 0 + 150 12 32 0 1 -7 4 3 + 150 12 32 0 1 -7 3 3 + 150 14 32 0 1 -6 2 0 + 150 16 32 0 1 -6 1 2 + 150 18 32 0 1 -5 2 0 + 150 20 32 0 1 -4 1 0 + 150 22 32 0 1 -3 1 0 + 150 24 32 0 1 -3 2 0 + 150 26 32 0 1 -2 1 0 + 150 28 32 0 1 -2 0 0 + 150 30 32 0 1 -3 3 0 + 150 32 32 0 1 -2 3 0 + 150 34 32 0 1 -2 2 0 + 150 36 32 0 1 0 0 0 + 150 38 32 0 1 -1 1 0 + 150 40 32 0 1 -1 2 4 + 150 42 32 0 1 -2 4 0 + 150 44 32 0 1 -3 4 0 + 150 46 32 0 1 -3 5 0 + 150 48 32 0 1 -4 6 0 + 150 50 32 0 1 -4 5 0 + 150 52 32 0 1 -5 6 2 + 150 54 32 0 1 -5 4 0 + 150 56 32 0 1 -5 5 0 + 150 58 32 0 1 -4 4 0 + 150 62 32 0 1 -6 5 2 + 151 0 32 0 1 2 2 0 + 151 2 32 0 1 1 3 0 + 151 4 32 0 1 2 3 0 + 151 6 32 0 1 0 4 0 + 151 8 32 0 1 3 3 0 + 151 10 32 0 1 -1 4 0 + 151 12 32 0 1 -1 5 0 + 151 14 32 0 1 4 2 0 + 151 16 32 0 1 3 4 3 + 151 16 32 0 1 4 3 3 + 151 18 32 0 1 2 4 0 + 151 20 32 0 1 1 4 0 + 151 22 32 0 1 1 5 2 + 151 24 32 0 1 0 5 0 + 151 26 32 0 1 -1 6 2 + 151 28 32 0 1 -2 6 0 + 151 30 32 0 1 -2 5 0 + 151 32 32 0 1 -3 6 0 + 151 34 32 0 1 -4 7 3 + 151 34 32 0 1 -3 7 3 + 151 36 32 0 1 0 1 0 + 151 38 32 0 1 0 2 0 + 151 40 32 0 1 -1 3 0 + 151 42 32 0 1 0 3 0 + 151 44 32 0 1 1 0 0 + 151 46 32 0 1 3 1 0 + 151 48 32 0 1 4 0 0 + 151 50 32 0 1 5 0 0 + 151 52 32 0 1 2 1 0 + 151 54 32 0 1 1 1 0 + 151 56 32 0 1 1 2 0 + 151 58 32 0 1 3 2 0 + 151 60 32 0 1 5 1 2 + 151 62 32 0 1 4 1 0 + 152 0 32 0 1 5 -2 0 + 152 2 32 0 1 4 -2 0 + 152 4 32 0 1 4 -1 0 + 152 6 32 0 1 6 -2 0 + 152 8 32 0 1 3 0 0 + 152 10 32 0 1 6 -1 2 + 152 12 32 0 1 5 -1 0 + 152 14 32 0 1 2 0 0 + 152 16 32 0 1 3 -1 0 + 152 18 32 0 1 2 -1 0 + 152 20 32 0 1 3 -2 0 + 152 22 32 0 1 2 -2 0 + 152 24 32 0 1 1 -1 0 + 152 26 32 0 1 1 -2 0 + 152 28 32 0 1 2 -3 0 + 152 30 32 0 1 2 -4 4 + 152 32 32 0 1 3 -5 0 + 152 34 32 0 1 3 -4 0 + 152 36 32 0 1 4 -5 0 + 152 38 32 0 1 4 -4 0 + 152 40 32 0 1 3 -3 0 + 152 42 32 0 1 4 -3 0 + 152 44 32 0 1 3 -6 0 + 152 46 32 0 1 7 -4 3 + 152 46 32 0 1 7 -3 3 + 152 48 32 0 1 4 -6 0 + 152 50 32 0 1 5 -6 2 + 152 52 32 0 1 5 -5 0 + 152 54 32 0 1 5 -4 0 + 152 56 32 0 1 6 -5 2 + 152 58 32 0 1 6 -3 0 + 152 60 32 0 1 5 -3 0 + 152 62 32 0 1 6 -4 0 + 133 0 33 0 -1 -2 -3 0 + 133 2 33 0 -1 -2 -4 0 + 133 4 33 0 -1 -3 -3 0 + 133 6 33 0 -1 -1 -4 0 + 133 8 33 0 -1 0 -5 0 + 133 10 33 0 -1 -1 -5 2 + 133 12 33 0 -1 1 -6 2 + 133 14 33 0 -1 0 -4 0 + 133 16 33 0 -1 -1 -3 0 + 133 18 33 0 -1 0 -3 0 + 133 20 33 0 -1 3 -7 3 + 133 20 33 0 -1 4 -7 3 + 133 22 33 0 -1 2 -6 0 + 133 24 33 0 -1 1 -5 0 + 133 26 33 0 -1 1 -4 0 + 133 28 33 0 -1 2 -5 0 + 133 30 33 0 -1 1 -3 0 + 133 32 33 0 -1 0 -2 0 + 133 34 33 0 -1 0 -1 0 + 133 36 33 0 -1 -1 0 0 + 133 38 33 0 -1 -1 -1 0 + 133 40 33 0 -1 -4 0 0 + 133 42 33 0 -1 -3 0 0 + 133 44 33 0 -1 -3 -1 0 + 133 46 33 0 -1 -5 0 0 + 133 48 33 0 -1 -5 -1 2 + 133 50 33 0 -1 -4 -1 0 + 133 52 33 0 -1 -2 -1 0 + 133 54 33 0 -1 -1 -2 0 + 133 56 33 0 -1 -2 -2 0 + 133 58 33 0 -1 -3 -2 0 + 133 60 33 0 -1 -4 -3 3 + 133 60 33 0 -1 -3 -4 3 + 133 62 33 0 -1 -4 -2 0 + 134 0 33 0 -1 -4 3 0 + 134 2 33 0 -1 -4 2 0 + 134 4 33 0 -1 -5 3 0 + 134 6 33 0 -1 -6 4 0 + 134 8 33 0 -1 -5 1 0 + 134 10 33 0 -1 -6 3 0 + 134 12 33 0 -1 -7 4 3 + 134 12 33 0 -1 -7 3 3 + 134 14 33 0 -1 -6 2 0 + 134 16 33 0 -1 -6 1 2 + 134 18 33 0 -1 -5 2 0 + 134 20 33 0 -1 -4 1 0 + 134 22 33 0 -1 -3 1 0 + 134 24 33 0 -1 -3 2 0 + 134 26 33 0 -1 -2 1 0 + 134 28 33 0 -1 -2 0 0 + 134 30 33 0 -1 -3 3 0 + 134 32 33 0 -1 -2 3 0 + 134 34 33 0 -1 -2 2 0 + 134 36 33 0 -1 0 0 0 + 134 38 33 0 -1 -1 1 0 + 134 40 33 0 -1 -1 2 4 + 134 42 33 0 -1 -2 4 0 + 134 44 33 0 -1 -3 4 0 + 134 46 33 0 -1 -3 5 0 + 134 48 33 0 -1 -4 6 0 + 134 50 33 0 -1 -4 5 0 + 134 52 33 0 -1 -5 6 2 + 134 54 33 0 -1 -5 4 0 + 134 56 33 0 -1 -5 5 0 + 134 58 33 0 -1 -4 4 0 + 134 62 33 0 -1 -6 5 2 + 135 0 33 0 -1 2 2 0 + 135 2 33 0 -1 1 3 0 + 135 4 33 0 -1 2 3 0 + 135 6 33 0 -1 0 4 0 + 135 8 33 0 -1 3 3 0 + 135 10 33 0 -1 -1 4 0 + 135 12 33 0 -1 -1 5 0 + 135 14 33 0 -1 4 2 0 + 135 16 33 0 -1 3 4 3 + 135 16 33 0 -1 4 3 3 + 135 18 33 0 -1 2 4 0 + 135 20 33 0 -1 1 4 0 + 135 22 33 0 -1 1 5 2 + 135 24 33 0 -1 0 5 0 + 135 26 33 0 -1 -1 6 2 + 135 28 33 0 -1 -2 6 0 + 135 30 33 0 -1 -2 5 0 + 135 32 33 0 -1 -3 6 0 + 135 34 33 0 -1 -4 7 3 + 135 34 33 0 -1 -3 7 3 + 135 36 33 0 -1 0 1 0 + 135 38 33 0 -1 0 2 0 + 135 40 33 0 -1 -1 3 0 + 135 42 33 0 -1 0 3 0 + 135 44 33 0 -1 1 0 0 + 135 46 33 0 -1 3 1 0 + 135 48 33 0 -1 4 0 0 + 135 50 33 0 -1 5 0 0 + 135 52 33 0 -1 2 1 0 + 135 54 33 0 -1 1 1 0 + 135 56 33 0 -1 1 2 0 + 135 58 33 0 -1 3 2 0 + 135 60 33 0 -1 5 1 2 + 135 62 33 0 -1 4 1 0 + 136 0 33 0 -1 5 -2 0 + 136 2 33 0 -1 4 -2 0 + 136 4 33 0 -1 4 -1 0 + 136 6 33 0 -1 6 -2 0 + 136 8 33 0 -1 3 0 0 + 136 10 33 0 -1 6 -1 2 + 136 12 33 0 -1 5 -1 0 + 136 14 33 0 -1 2 0 0 + 136 16 33 0 -1 3 -1 0 + 136 18 33 0 -1 2 -1 0 + 136 20 33 0 -1 3 -2 0 + 136 22 33 0 -1 2 -2 0 + 136 24 33 0 -1 1 -1 0 + 136 26 33 0 -1 1 -2 0 + 136 28 33 0 -1 2 -3 0 + 136 30 33 0 -1 2 -4 4 + 136 32 33 0 -1 3 -5 0 + 136 34 33 0 -1 3 -4 0 + 136 36 33 0 -1 4 -5 0 + 136 38 33 0 -1 4 -4 0 + 136 40 33 0 -1 3 -3 0 + 136 42 33 0 -1 4 -3 0 + 136 44 33 0 -1 3 -6 0 + 136 46 33 0 -1 7 -4 3 + 136 46 33 0 -1 7 -3 3 + 136 48 33 0 -1 4 -6 0 + 136 50 33 0 -1 5 -6 2 + 136 52 33 0 -1 5 -5 0 + 136 54 33 0 -1 5 -4 0 + 136 56 33 0 -1 6 -5 2 + 136 58 33 0 -1 6 -3 0 + 136 60 33 0 -1 5 -3 0 + 136 62 33 0 -1 6 -4 0 + 137 0 33 1 -1 -2 -3 0 + 137 2 33 1 -1 -2 -4 0 + 137 4 33 1 -1 -3 -3 0 + 137 6 33 1 -1 -1 -4 0 + 137 8 33 1 -1 0 -5 0 + 137 10 33 1 -1 -1 -5 2 + 137 12 33 1 -1 1 -6 2 + 137 14 33 1 -1 0 -4 0 + 137 16 33 1 -1 -1 -3 0 + 137 18 33 1 -1 0 -3 0 + 137 20 33 1 -1 3 -7 3 + 137 20 33 1 -1 4 -7 3 + 137 22 33 1 -1 2 -6 0 + 137 24 33 1 -1 1 -5 0 + 137 26 33 1 -1 1 -4 0 + 137 28 33 1 -1 2 -5 0 + 137 30 33 1 -1 1 -3 0 + 137 32 33 1 -1 0 -2 0 + 137 34 33 1 -1 0 -1 0 + 137 36 33 1 -1 -1 0 0 + 137 38 33 1 -1 -1 -1 0 + 137 40 33 1 -1 -4 0 0 + 137 42 33 1 -1 -3 0 0 + 137 44 33 1 -1 -3 -1 0 + 137 46 33 1 -1 -5 0 0 + 137 48 33 1 -1 -5 -1 2 + 137 50 33 1 -1 -4 -1 0 + 137 52 33 1 -1 -2 -1 0 + 137 54 33 1 -1 -1 -2 0 + 137 56 33 1 -1 -2 -2 0 + 137 58 33 1 -1 -3 -2 0 + 137 60 33 1 -1 -4 -3 3 + 137 60 33 1 -1 -3 -4 3 + 137 62 33 1 -1 -4 -2 0 + 138 0 33 1 -1 -4 3 0 + 138 2 33 1 -1 -4 2 0 + 138 4 33 1 -1 -5 3 0 + 138 6 33 1 -1 -6 4 0 + 138 8 33 1 -1 -5 1 0 + 138 10 33 1 -1 -6 3 0 + 138 12 33 1 -1 -7 4 3 + 138 12 33 1 -1 -7 3 3 + 138 14 33 1 -1 -6 2 0 + 138 16 33 1 -1 -6 1 2 + 138 18 33 1 -1 -5 2 0 + 138 20 33 1 -1 -4 1 0 + 138 22 33 1 -1 -3 1 0 + 138 24 33 1 -1 -3 2 0 + 138 26 33 1 -1 -2 1 0 + 138 28 33 1 -1 -2 0 0 + 138 30 33 1 -1 -3 3 0 + 138 32 33 1 -1 -2 3 0 + 138 34 33 1 -1 -2 2 0 + 138 36 33 1 -1 0 0 0 + 138 38 33 1 -1 -1 1 0 + 138 40 33 1 -1 -1 2 4 + 138 42 33 1 -1 -2 4 0 + 138 44 33 1 -1 -3 4 0 + 138 46 33 1 -1 -3 5 0 + 138 48 33 1 -1 -4 6 0 + 138 50 33 1 -1 -4 5 0 + 138 52 33 1 -1 -5 6 2 + 138 54 33 1 -1 -5 4 0 + 138 56 33 1 -1 -5 5 0 + 138 58 33 1 -1 -4 4 0 + 138 62 33 1 -1 -6 5 2 + 139 0 33 1 -1 2 2 0 + 139 2 33 1 -1 1 3 0 + 139 4 33 1 -1 2 3 0 + 139 6 33 1 -1 0 4 0 + 139 8 33 1 -1 3 3 0 + 139 10 33 1 -1 -1 4 0 + 139 12 33 1 -1 -1 5 0 + 139 14 33 1 -1 4 2 0 + 139 16 33 1 -1 3 4 3 + 139 16 33 1 -1 4 3 3 + 139 18 33 1 -1 2 4 0 + 139 20 33 1 -1 1 4 0 + 139 22 33 1 -1 1 5 2 + 139 24 33 1 -1 0 5 0 + 139 26 33 1 -1 -1 6 2 + 139 28 33 1 -1 -2 6 0 + 139 30 33 1 -1 -2 5 0 + 139 32 33 1 -1 -3 6 0 + 139 34 33 1 -1 -4 7 3 + 139 34 33 1 -1 -3 7 3 + 139 36 33 1 -1 0 1 0 + 139 38 33 1 -1 0 2 0 + 139 40 33 1 -1 -1 3 0 + 139 42 33 1 -1 0 3 0 + 139 44 33 1 -1 1 0 0 + 139 46 33 1 -1 3 1 0 + 139 48 33 1 -1 4 0 0 + 139 50 33 1 -1 5 0 0 + 139 52 33 1 -1 2 1 0 + 139 54 33 1 -1 1 1 0 + 139 56 33 1 -1 1 2 0 + 139 58 33 1 -1 3 2 0 + 139 60 33 1 -1 5 1 2 + 139 62 33 1 -1 4 1 0 + 140 0 33 1 -1 5 -2 0 + 140 2 33 1 -1 4 -2 0 + 140 4 33 1 -1 4 -1 0 + 140 6 33 1 -1 6 -2 0 + 140 8 33 1 -1 3 0 0 + 140 10 33 1 -1 6 -1 2 + 140 12 33 1 -1 5 -1 0 + 140 14 33 1 -1 2 0 0 + 140 16 33 1 -1 3 -1 0 + 140 18 33 1 -1 2 -1 0 + 140 20 33 1 -1 3 -2 0 + 140 22 33 1 -1 2 -2 0 + 140 24 33 1 -1 1 -1 0 + 140 26 33 1 -1 1 -2 0 + 140 28 33 1 -1 2 -3 0 + 140 30 33 1 -1 2 -4 4 + 140 32 33 1 -1 3 -5 0 + 140 34 33 1 -1 3 -4 0 + 140 36 33 1 -1 4 -5 0 + 140 38 33 1 -1 4 -4 0 + 140 40 33 1 -1 3 -3 0 + 140 42 33 1 -1 4 -3 0 + 140 44 33 1 -1 3 -6 0 + 140 46 33 1 -1 7 -4 3 + 140 46 33 1 -1 7 -3 3 + 140 48 33 1 -1 4 -6 0 + 140 50 33 1 -1 5 -6 2 + 140 52 33 1 -1 5 -5 0 + 140 54 33 1 -1 5 -4 0 + 140 56 33 1 -1 6 -5 2 + 140 58 33 1 -1 6 -3 0 + 140 60 33 1 -1 5 -3 0 + 140 62 33 1 -1 6 -4 0 + 141 0 33 -1 0 -2 -3 0 + 141 2 33 -1 0 -2 -4 0 + 141 4 33 -1 0 -3 -3 0 + 141 6 33 -1 0 -1 -4 0 + 141 8 33 -1 0 0 -5 0 + 141 10 33 -1 0 -1 -5 2 + 141 12 33 -1 0 1 -6 2 + 141 14 33 -1 0 0 -4 0 + 141 16 33 -1 0 -1 -3 0 + 141 18 33 -1 0 0 -3 0 + 141 20 33 -1 0 3 -7 3 + 141 20 33 -1 0 4 -7 3 + 141 22 33 -1 0 2 -6 0 + 141 24 33 -1 0 1 -5 0 + 141 26 33 -1 0 1 -4 0 + 141 28 33 -1 0 2 -5 0 + 141 30 33 -1 0 1 -3 0 + 141 32 33 -1 0 0 -2 0 + 141 34 33 -1 0 0 -1 0 + 141 36 33 -1 0 -1 0 0 + 141 38 33 -1 0 -1 -1 0 + 141 40 33 -1 0 -4 0 0 + 141 42 33 -1 0 -3 0 0 + 141 44 33 -1 0 -3 -1 0 + 141 46 33 -1 0 -5 0 0 + 141 48 33 -1 0 -5 -1 2 + 141 50 33 -1 0 -4 -1 0 + 141 52 33 -1 0 -2 -1 0 + 141 54 33 -1 0 -1 -2 0 + 141 56 33 -1 0 -2 -2 0 + 141 58 33 -1 0 -3 -2 0 + 141 60 33 -1 0 -4 -3 3 + 141 60 33 -1 0 -3 -4 3 + 141 62 33 -1 0 -4 -2 0 + 142 0 33 -1 0 -4 3 0 + 142 2 33 -1 0 -4 2 0 + 142 4 33 -1 0 -5 3 0 + 142 6 33 -1 0 -6 4 0 + 142 8 33 -1 0 -5 1 0 + 142 10 33 -1 0 -6 3 0 + 142 12 33 -1 0 -7 4 3 + 142 12 33 -1 0 -7 3 3 + 142 14 33 -1 0 -6 2 0 + 142 16 33 -1 0 -6 1 2 + 142 18 33 -1 0 -5 2 0 + 142 20 33 -1 0 -4 1 0 + 142 22 33 -1 0 -3 1 0 + 142 24 33 -1 0 -3 2 0 + 142 26 33 -1 0 -2 1 0 + 142 28 33 -1 0 -2 0 0 + 142 30 33 -1 0 -3 3 0 + 142 32 33 -1 0 -2 3 0 + 142 34 33 -1 0 -2 2 0 + 142 36 33 -1 0 0 0 0 + 142 38 33 -1 0 -1 1 0 + 142 40 33 -1 0 -1 2 4 + 142 42 33 -1 0 -2 4 0 + 142 44 33 -1 0 -3 4 0 + 142 46 33 -1 0 -3 5 0 + 142 48 33 -1 0 -4 6 0 + 142 50 33 -1 0 -4 5 0 + 142 52 33 -1 0 -5 6 2 + 142 54 33 -1 0 -5 4 0 + 142 56 33 -1 0 -5 5 0 + 142 58 33 -1 0 -4 4 0 + 142 62 33 -1 0 -6 5 2 + 143 0 33 -1 0 2 2 0 + 143 2 33 -1 0 1 3 0 + 143 4 33 -1 0 2 3 0 + 143 6 33 -1 0 0 4 0 + 143 8 33 -1 0 3 3 0 + 143 10 33 -1 0 -1 4 0 + 143 12 33 -1 0 -1 5 0 + 143 14 33 -1 0 4 2 0 + 143 16 33 -1 0 3 4 3 + 143 16 33 -1 0 4 3 3 + 143 18 33 -1 0 2 4 0 + 143 20 33 -1 0 1 4 0 + 143 22 33 -1 0 1 5 2 + 143 24 33 -1 0 0 5 0 + 143 26 33 -1 0 -1 6 2 + 143 28 33 -1 0 -2 6 0 + 143 30 33 -1 0 -2 5 0 + 143 32 33 -1 0 -3 6 0 + 143 34 33 -1 0 -4 7 3 + 143 34 33 -1 0 -3 7 3 + 143 36 33 -1 0 0 1 0 + 143 38 33 -1 0 0 2 0 + 143 40 33 -1 0 -1 3 0 + 143 42 33 -1 0 0 3 0 + 143 44 33 -1 0 1 0 0 + 143 46 33 -1 0 3 1 0 + 143 48 33 -1 0 4 0 0 + 143 50 33 -1 0 5 0 0 + 143 52 33 -1 0 2 1 0 + 143 54 33 -1 0 1 1 0 + 143 56 33 -1 0 1 2 0 + 143 58 33 -1 0 3 2 0 + 143 60 33 -1 0 5 1 2 + 143 62 33 -1 0 4 1 0 + 144 0 33 -1 0 5 -2 0 + 144 2 33 -1 0 4 -2 0 + 144 4 33 -1 0 4 -1 0 + 144 6 33 -1 0 6 -2 0 + 144 8 33 -1 0 3 0 0 + 144 10 33 -1 0 6 -1 2 + 144 12 33 -1 0 5 -1 0 + 144 14 33 -1 0 2 0 0 + 144 16 33 -1 0 3 -1 0 + 144 18 33 -1 0 2 -1 0 + 144 20 33 -1 0 3 -2 0 + 144 22 33 -1 0 2 -2 0 + 144 24 33 -1 0 1 -1 0 + 144 26 33 -1 0 1 -2 0 + 144 28 33 -1 0 2 -3 0 + 144 30 33 -1 0 2 -4 4 + 144 32 33 -1 0 3 -5 0 + 144 34 33 -1 0 3 -4 0 + 144 36 33 -1 0 4 -5 0 + 144 38 33 -1 0 4 -4 0 + 144 40 33 -1 0 3 -3 0 + 144 42 33 -1 0 4 -3 0 + 144 44 33 -1 0 3 -6 0 + 144 46 33 -1 0 7 -4 3 + 144 46 33 -1 0 7 -3 3 + 144 48 33 -1 0 4 -6 0 + 144 50 33 -1 0 5 -6 2 + 144 52 33 -1 0 5 -5 0 + 144 54 33 -1 0 5 -4 0 + 144 56 33 -1 0 6 -5 2 + 144 58 33 -1 0 6 -3 0 + 144 60 33 -1 0 5 -3 0 + 144 62 33 -1 0 6 -4 0 + 129 0 33 0 0 -2 -3 0 + 129 2 33 0 0 -2 -4 0 + 129 4 33 0 0 -3 -3 0 + 129 6 33 0 0 -1 -4 0 + 129 8 33 0 0 0 -5 0 + 129 10 33 0 0 -1 -5 2 + 129 12 33 0 0 1 -6 2 + 129 14 33 0 0 0 -4 0 + 129 16 33 0 0 -1 -3 0 + 129 18 33 0 0 0 -3 0 + 129 20 33 0 0 3 -7 3 + 129 20 33 0 0 4 -7 3 + 129 22 33 0 0 2 -6 0 + 129 24 33 0 0 1 -5 0 + 129 26 33 0 0 1 -4 0 + 129 28 33 0 0 2 -5 0 + 129 30 33 0 0 1 -3 0 + 129 32 33 0 0 0 -2 0 + 129 34 33 0 0 0 -1 0 + 129 36 33 0 0 -1 0 0 + 129 38 33 0 0 -1 -1 0 + 129 40 33 0 0 -4 0 0 + 129 42 33 0 0 -3 0 0 + 129 44 33 0 0 -3 -1 0 + 129 46 33 0 0 -5 0 0 + 129 48 33 0 0 -5 -1 2 + 129 50 33 0 0 -4 -1 0 + 129 52 33 0 0 -2 -1 0 + 129 54 33 0 0 -1 -2 0 + 129 56 33 0 0 -2 -2 0 + 129 58 33 0 0 -3 -2 0 + 129 60 33 0 0 -4 -3 3 + 129 60 33 0 0 -3 -4 3 + 129 62 33 0 0 -4 -2 0 + 130 0 33 0 0 -4 3 0 + 130 2 33 0 0 -4 2 0 + 130 4 33 0 0 -5 3 0 + 130 6 33 0 0 -6 4 0 + 130 8 33 0 0 -5 1 0 + 130 10 33 0 0 -6 3 0 + 130 12 33 0 0 -7 4 3 + 130 12 33 0 0 -7 3 3 + 130 14 33 0 0 -6 2 0 + 130 16 33 0 0 -6 1 2 + 130 18 33 0 0 -5 2 0 + 130 20 33 0 0 -4 1 0 + 130 22 33 0 0 -3 1 0 + 130 24 33 0 0 -3 2 0 + 130 26 33 0 0 -2 1 0 + 130 28 33 0 0 -2 0 0 + 130 30 33 0 0 -3 3 0 + 130 32 33 0 0 -2 3 0 + 130 34 33 0 0 -2 2 0 + 130 36 33 0 0 0 0 0 + 130 38 33 0 0 -1 1 0 + 130 40 33 0 0 -1 2 4 + 130 42 33 0 0 -2 4 0 + 130 44 33 0 0 -3 4 0 + 130 46 33 0 0 -3 5 0 + 130 48 33 0 0 -4 6 0 + 130 50 33 0 0 -4 5 0 + 130 52 33 0 0 -5 6 2 + 130 54 33 0 0 -5 4 0 + 130 56 33 0 0 -5 5 0 + 130 58 33 0 0 -4 4 0 + 130 62 33 0 0 -6 5 2 + 131 0 33 0 0 2 2 0 + 131 2 33 0 0 1 3 0 + 131 4 33 0 0 2 3 0 + 131 6 33 0 0 0 4 0 + 131 8 33 0 0 3 3 0 + 131 10 33 0 0 -1 4 0 + 131 12 33 0 0 -1 5 0 + 131 14 33 0 0 4 2 0 + 131 16 33 0 0 3 4 3 + 131 16 33 0 0 4 3 3 + 131 18 33 0 0 2 4 0 + 131 20 33 0 0 1 4 0 + 131 22 33 0 0 1 5 2 + 131 24 33 0 0 0 5 0 + 131 26 33 0 0 -1 6 2 + 131 28 33 0 0 -2 6 0 + 131 30 33 0 0 -2 5 0 + 131 32 33 0 0 -3 6 0 + 131 34 33 0 0 -4 7 3 + 131 34 33 0 0 -3 7 3 + 131 36 33 0 0 0 1 0 + 131 38 33 0 0 0 2 0 + 131 40 33 0 0 -1 3 0 + 131 42 33 0 0 0 3 0 + 131 44 33 0 0 1 0 0 + 131 46 33 0 0 3 1 0 + 131 48 33 0 0 4 0 0 + 131 50 33 0 0 5 0 0 + 131 52 33 0 0 2 1 0 + 131 54 33 0 0 1 1 0 + 131 56 33 0 0 1 2 0 + 131 58 33 0 0 3 2 0 + 131 60 33 0 0 5 1 2 + 131 62 33 0 0 4 1 0 + 132 0 33 0 0 5 -2 0 + 132 2 33 0 0 4 -2 0 + 132 4 33 0 0 4 -1 0 + 132 6 33 0 0 6 -2 0 + 132 8 33 0 0 3 0 0 + 132 10 33 0 0 6 -1 2 + 132 12 33 0 0 5 -1 0 + 132 14 33 0 0 2 0 0 + 132 16 33 0 0 3 -1 0 + 132 18 33 0 0 2 -1 0 + 132 20 33 0 0 3 -2 0 + 132 22 33 0 0 2 -2 0 + 132 24 33 0 0 1 -1 0 + 132 26 33 0 0 1 -2 0 + 132 28 33 0 0 2 -3 0 + 132 30 33 0 0 2 -4 4 + 132 32 33 0 0 3 -5 0 + 132 34 33 0 0 3 -4 0 + 132 36 33 0 0 4 -5 0 + 132 38 33 0 0 4 -4 0 + 132 40 33 0 0 3 -3 0 + 132 42 33 0 0 4 -3 0 + 132 44 33 0 0 3 -6 0 + 132 46 33 0 0 7 -4 3 + 132 46 33 0 0 7 -3 3 + 132 48 33 0 0 4 -6 0 + 132 50 33 0 0 5 -6 2 + 132 52 33 0 0 5 -5 0 + 132 54 33 0 0 5 -4 0 + 132 56 33 0 0 6 -5 2 + 132 58 33 0 0 6 -3 0 + 132 60 33 0 0 5 -3 0 + 132 62 33 0 0 6 -4 0 + 145 0 33 1 0 -2 -3 0 + 145 2 33 1 0 -2 -4 0 + 145 4 33 1 0 -3 -3 0 + 145 6 33 1 0 -1 -4 0 + 145 8 33 1 0 0 -5 0 + 145 10 33 1 0 -1 -5 2 + 145 12 33 1 0 1 -6 2 + 145 14 33 1 0 0 -4 0 + 145 16 33 1 0 -1 -3 0 + 145 18 33 1 0 0 -3 0 + 145 20 33 1 0 3 -7 3 + 145 20 33 1 0 4 -7 3 + 145 22 33 1 0 2 -6 0 + 145 24 33 1 0 1 -5 0 + 145 26 33 1 0 1 -4 0 + 145 28 33 1 0 2 -5 0 + 145 30 33 1 0 1 -3 0 + 145 32 33 1 0 0 -2 0 + 145 34 33 1 0 0 -1 0 + 145 36 33 1 0 -1 0 0 + 145 38 33 1 0 -1 -1 0 + 145 40 33 1 0 -4 0 0 + 145 42 33 1 0 -3 0 0 + 145 44 33 1 0 -3 -1 0 + 145 46 33 1 0 -5 0 0 + 145 48 33 1 0 -5 -1 2 + 145 50 33 1 0 -4 -1 0 + 145 52 33 1 0 -2 -1 0 + 145 54 33 1 0 -1 -2 0 + 145 56 33 1 0 -2 -2 0 + 145 58 33 1 0 -3 -2 0 + 145 60 33 1 0 -4 -3 3 + 145 60 33 1 0 -3 -4 3 + 145 62 33 1 0 -4 -2 0 + 146 0 33 1 0 -4 3 0 + 146 2 33 1 0 -4 2 0 + 146 4 33 1 0 -5 3 0 + 146 6 33 1 0 -6 4 0 + 146 8 33 1 0 -5 1 0 + 146 10 33 1 0 -6 3 0 + 146 12 33 1 0 -7 4 3 + 146 12 33 1 0 -7 3 3 + 146 14 33 1 0 -6 2 0 + 146 16 33 1 0 -6 1 2 + 146 18 33 1 0 -5 2 0 + 146 20 33 1 0 -4 1 0 + 146 22 33 1 0 -3 1 0 + 146 24 33 1 0 -3 2 0 + 146 26 33 1 0 -2 1 0 + 146 28 33 1 0 -2 0 0 + 146 30 33 1 0 -3 3 0 + 146 32 33 1 0 -2 3 0 + 146 34 33 1 0 -2 2 0 + 146 36 33 1 0 0 0 0 + 146 38 33 1 0 -1 1 0 + 146 40 33 1 0 -1 2 4 + 146 42 33 1 0 -2 4 0 + 146 44 33 1 0 -3 4 0 + 146 46 33 1 0 -3 5 0 + 146 48 33 1 0 -4 6 0 + 146 50 33 1 0 -4 5 0 + 146 52 33 1 0 -5 6 2 + 146 54 33 1 0 -5 4 0 + 146 56 33 1 0 -5 5 0 + 146 58 33 1 0 -4 4 0 + 146 62 33 1 0 -6 5 2 + 147 0 33 1 0 2 2 0 + 147 2 33 1 0 1 3 0 + 147 4 33 1 0 2 3 0 + 147 6 33 1 0 0 4 0 + 147 8 33 1 0 3 3 0 + 147 10 33 1 0 -1 4 0 + 147 12 33 1 0 -1 5 0 + 147 14 33 1 0 4 2 0 + 147 16 33 1 0 3 4 3 + 147 16 33 1 0 4 3 3 + 147 18 33 1 0 2 4 0 + 147 20 33 1 0 1 4 0 + 147 22 33 1 0 1 5 2 + 147 24 33 1 0 0 5 0 + 147 26 33 1 0 -1 6 2 + 147 28 33 1 0 -2 6 0 + 147 30 33 1 0 -2 5 0 + 147 32 33 1 0 -3 6 0 + 147 34 33 1 0 -4 7 3 + 147 34 33 1 0 -3 7 3 + 147 36 33 1 0 0 1 0 + 147 38 33 1 0 0 2 0 + 147 40 33 1 0 -1 3 0 + 147 42 33 1 0 0 3 0 + 147 44 33 1 0 1 0 0 + 147 46 33 1 0 3 1 0 + 147 48 33 1 0 4 0 0 + 147 50 33 1 0 5 0 0 + 147 52 33 1 0 2 1 0 + 147 54 33 1 0 1 1 0 + 147 56 33 1 0 1 2 0 + 147 58 33 1 0 3 2 0 + 147 60 33 1 0 5 1 2 + 147 62 33 1 0 4 1 0 + 148 0 33 1 0 5 -2 0 + 148 2 33 1 0 4 -2 0 + 148 4 33 1 0 4 -1 0 + 148 6 33 1 0 6 -2 0 + 148 8 33 1 0 3 0 0 + 148 10 33 1 0 6 -1 2 + 148 12 33 1 0 5 -1 0 + 148 14 33 1 0 2 0 0 + 148 16 33 1 0 3 -1 0 + 148 18 33 1 0 2 -1 0 + 148 20 33 1 0 3 -2 0 + 148 22 33 1 0 2 -2 0 + 148 24 33 1 0 1 -1 0 + 148 26 33 1 0 1 -2 0 + 148 28 33 1 0 2 -3 0 + 148 30 33 1 0 2 -4 4 + 148 32 33 1 0 3 -5 0 + 148 34 33 1 0 3 -4 0 + 148 36 33 1 0 4 -5 0 + 148 38 33 1 0 4 -4 0 + 148 40 33 1 0 3 -3 0 + 148 42 33 1 0 4 -3 0 + 148 44 33 1 0 3 -6 0 + 148 46 33 1 0 7 -4 3 + 148 46 33 1 0 7 -3 3 + 148 48 33 1 0 4 -6 0 + 148 50 33 1 0 5 -6 2 + 148 52 33 1 0 5 -5 0 + 148 54 33 1 0 5 -4 0 + 148 56 33 1 0 6 -5 2 + 148 58 33 1 0 6 -3 0 + 148 60 33 1 0 5 -3 0 + 148 62 33 1 0 6 -4 0 + 149 0 33 -1 1 -2 -3 0 + 149 2 33 -1 1 -2 -4 0 + 149 4 33 -1 1 -3 -3 0 + 149 6 33 -1 1 -1 -4 0 + 149 8 33 -1 1 0 -5 0 + 149 10 33 -1 1 -1 -5 2 + 149 12 33 -1 1 1 -6 2 + 149 14 33 -1 1 0 -4 0 + 149 16 33 -1 1 -1 -3 0 + 149 18 33 -1 1 0 -3 0 + 149 20 33 -1 1 3 -7 3 + 149 20 33 -1 1 4 -7 3 + 149 22 33 -1 1 2 -6 0 + 149 24 33 -1 1 1 -5 0 + 149 26 33 -1 1 1 -4 0 + 149 28 33 -1 1 2 -5 0 + 149 30 33 -1 1 1 -3 0 + 149 32 33 -1 1 0 -2 0 + 149 34 33 -1 1 0 -1 0 + 149 36 33 -1 1 -1 0 0 + 149 38 33 -1 1 -1 -1 0 + 149 40 33 -1 1 -4 0 0 + 149 42 33 -1 1 -3 0 0 + 149 44 33 -1 1 -3 -1 0 + 149 46 33 -1 1 -5 0 0 + 149 48 33 -1 1 -5 -1 2 + 149 50 33 -1 1 -4 -1 0 + 149 52 33 -1 1 -2 -1 0 + 149 54 33 -1 1 -1 -2 0 + 149 56 33 -1 1 -2 -2 0 + 149 58 33 -1 1 -3 -2 0 + 149 60 33 -1 1 -4 -3 3 + 149 60 33 -1 1 -3 -4 3 + 149 62 33 -1 1 -4 -2 0 + 150 0 33 -1 1 -4 3 0 + 150 2 33 -1 1 -4 2 0 + 150 4 33 -1 1 -5 3 0 + 150 6 33 -1 1 -6 4 0 + 150 8 33 -1 1 -5 1 0 + 150 10 33 -1 1 -6 3 0 + 150 12 33 -1 1 -7 4 3 + 150 12 33 -1 1 -7 3 3 + 150 14 33 -1 1 -6 2 0 + 150 16 33 -1 1 -6 1 2 + 150 18 33 -1 1 -5 2 0 + 150 20 33 -1 1 -4 1 0 + 150 22 33 -1 1 -3 1 0 + 150 24 33 -1 1 -3 2 0 + 150 26 33 -1 1 -2 1 0 + 150 28 33 -1 1 -2 0 0 + 150 30 33 -1 1 -3 3 0 + 150 32 33 -1 1 -2 3 0 + 150 34 33 -1 1 -2 2 0 + 150 36 33 -1 1 0 0 0 + 150 38 33 -1 1 -1 1 0 + 150 40 33 -1 1 -1 2 4 + 150 42 33 -1 1 -2 4 0 + 150 44 33 -1 1 -3 4 0 + 150 46 33 -1 1 -3 5 0 + 150 48 33 -1 1 -4 6 0 + 150 50 33 -1 1 -4 5 0 + 150 52 33 -1 1 -5 6 2 + 150 54 33 -1 1 -5 4 0 + 150 56 33 -1 1 -5 5 0 + 150 58 33 -1 1 -4 4 0 + 150 62 33 -1 1 -6 5 2 + 151 0 33 -1 1 2 2 0 + 151 2 33 -1 1 1 3 0 + 151 4 33 -1 1 2 3 0 + 151 6 33 -1 1 0 4 0 + 151 8 33 -1 1 3 3 0 + 151 10 33 -1 1 -1 4 0 + 151 12 33 -1 1 -1 5 0 + 151 14 33 -1 1 4 2 0 + 151 16 33 -1 1 3 4 3 + 151 16 33 -1 1 4 3 3 + 151 18 33 -1 1 2 4 0 + 151 20 33 -1 1 1 4 0 + 151 22 33 -1 1 1 5 2 + 151 24 33 -1 1 0 5 0 + 151 26 33 -1 1 -1 6 2 + 151 28 33 -1 1 -2 6 0 + 151 30 33 -1 1 -2 5 0 + 151 32 33 -1 1 -3 6 0 + 151 34 33 -1 1 -4 7 3 + 151 34 33 -1 1 -3 7 3 + 151 36 33 -1 1 0 1 0 + 151 38 33 -1 1 0 2 0 + 151 40 33 -1 1 -1 3 0 + 151 42 33 -1 1 0 3 0 + 151 44 33 -1 1 1 0 0 + 151 46 33 -1 1 3 1 0 + 151 48 33 -1 1 4 0 0 + 151 50 33 -1 1 5 0 0 + 151 52 33 -1 1 2 1 0 + 151 54 33 -1 1 1 1 0 + 151 56 33 -1 1 1 2 0 + 151 58 33 -1 1 3 2 0 + 151 60 33 -1 1 5 1 2 + 151 62 33 -1 1 4 1 0 + 152 0 33 -1 1 5 -2 0 + 152 2 33 -1 1 4 -2 0 + 152 4 33 -1 1 4 -1 0 + 152 6 33 -1 1 6 -2 0 + 152 8 33 -1 1 3 0 0 + 152 10 33 -1 1 6 -1 2 + 152 12 33 -1 1 5 -1 0 + 152 14 33 -1 1 2 0 0 + 152 16 33 -1 1 3 -1 0 + 152 18 33 -1 1 2 -1 0 + 152 20 33 -1 1 3 -2 0 + 152 22 33 -1 1 2 -2 0 + 152 24 33 -1 1 1 -1 0 + 152 26 33 -1 1 1 -2 0 + 152 28 33 -1 1 2 -3 0 + 152 30 33 -1 1 2 -4 4 + 152 32 33 -1 1 3 -5 0 + 152 34 33 -1 1 3 -4 0 + 152 36 33 -1 1 4 -5 0 + 152 38 33 -1 1 4 -4 0 + 152 40 33 -1 1 3 -3 0 + 152 42 33 -1 1 4 -3 0 + 152 44 33 -1 1 3 -6 0 + 152 46 33 -1 1 7 -4 3 + 152 46 33 -1 1 7 -3 3 + 152 48 33 -1 1 4 -6 0 + 152 50 33 -1 1 5 -6 2 + 152 52 33 -1 1 5 -5 0 + 152 54 33 -1 1 5 -4 0 + 152 56 33 -1 1 6 -5 2 + 152 58 33 -1 1 6 -3 0 + 152 60 33 -1 1 5 -3 0 + 152 62 33 -1 1 6 -4 0 + 153 0 33 0 1 -2 -3 0 + 153 2 33 0 1 -2 -4 0 + 153 4 33 0 1 -3 -3 0 + 153 6 33 0 1 -1 -4 0 + 153 8 33 0 1 0 -5 0 + 153 10 33 0 1 -1 -5 2 + 153 12 33 0 1 1 -6 2 + 153 14 33 0 1 0 -4 0 + 153 16 33 0 1 -1 -3 0 + 153 18 33 0 1 0 -3 0 + 153 20 33 0 1 3 -7 3 + 153 20 33 0 1 4 -7 3 + 153 22 33 0 1 2 -6 0 + 153 24 33 0 1 1 -5 0 + 153 26 33 0 1 1 -4 0 + 153 28 33 0 1 2 -5 0 + 153 30 33 0 1 1 -3 0 + 153 32 33 0 1 0 -2 0 + 153 34 33 0 1 0 -1 0 + 153 36 33 0 1 -1 0 0 + 153 38 33 0 1 -1 -1 0 + 153 40 33 0 1 -4 0 0 + 153 42 33 0 1 -3 0 0 + 153 44 33 0 1 -3 -1 0 + 153 46 33 0 1 -5 0 0 + 153 48 33 0 1 -5 -1 2 + 153 50 33 0 1 -4 -1 0 + 153 52 33 0 1 -2 -1 0 + 153 54 33 0 1 -1 -2 0 + 153 56 33 0 1 -2 -2 0 + 153 58 33 0 1 -3 -2 0 + 153 60 33 0 1 -4 -3 3 + 153 60 33 0 1 -3 -4 3 + 153 62 33 0 1 -4 -2 0 + 154 0 33 0 1 -4 3 0 + 154 2 33 0 1 -4 2 0 + 154 4 33 0 1 -5 3 0 + 154 6 33 0 1 -6 4 0 + 154 8 33 0 1 -5 1 0 + 154 10 33 0 1 -6 3 0 + 154 12 33 0 1 -7 4 3 + 154 12 33 0 1 -7 3 3 + 154 14 33 0 1 -6 2 0 + 154 16 33 0 1 -6 1 2 + 154 18 33 0 1 -5 2 0 + 154 20 33 0 1 -4 1 0 + 154 22 33 0 1 -3 1 0 + 154 24 33 0 1 -3 2 0 + 154 26 33 0 1 -2 1 0 + 154 28 33 0 1 -2 0 0 + 154 30 33 0 1 -3 3 0 + 154 32 33 0 1 -2 3 0 + 154 34 33 0 1 -2 2 0 + 154 36 33 0 1 0 0 0 + 154 38 33 0 1 -1 1 0 + 154 40 33 0 1 -1 2 4 + 154 42 33 0 1 -2 4 0 + 154 44 33 0 1 -3 4 0 + 154 46 33 0 1 -3 5 0 + 154 48 33 0 1 -4 6 0 + 154 50 33 0 1 -4 5 0 + 154 52 33 0 1 -5 6 2 + 154 54 33 0 1 -5 4 0 + 154 56 33 0 1 -5 5 0 + 154 58 33 0 1 -4 4 0 + 154 62 33 0 1 -6 5 2 + 155 0 33 0 1 2 2 0 + 155 2 33 0 1 1 3 0 + 155 4 33 0 1 2 3 0 + 155 6 33 0 1 0 4 0 + 155 8 33 0 1 3 3 0 + 155 10 33 0 1 -1 4 0 + 155 12 33 0 1 -1 5 0 + 155 14 33 0 1 4 2 0 + 155 16 33 0 1 3 4 3 + 155 16 33 0 1 4 3 3 + 155 18 33 0 1 2 4 0 + 155 20 33 0 1 1 4 0 + 155 22 33 0 1 1 5 2 + 155 24 33 0 1 0 5 0 + 155 26 33 0 1 -1 6 2 + 155 28 33 0 1 -2 6 0 + 155 30 33 0 1 -2 5 0 + 155 32 33 0 1 -3 6 0 + 155 34 33 0 1 -4 7 3 + 155 34 33 0 1 -3 7 3 + 155 36 33 0 1 0 1 0 + 155 38 33 0 1 0 2 0 + 155 40 33 0 1 -1 3 0 + 155 42 33 0 1 0 3 0 + 155 44 33 0 1 1 0 0 + 155 46 33 0 1 3 1 0 + 155 48 33 0 1 4 0 0 + 155 50 33 0 1 5 0 0 + 155 52 33 0 1 2 1 0 + 155 54 33 0 1 1 1 0 + 155 56 33 0 1 1 2 0 + 155 58 33 0 1 3 2 0 + 155 60 33 0 1 5 1 2 + 155 62 33 0 1 4 1 0 + 156 0 33 0 1 5 -2 0 + 156 2 33 0 1 4 -2 0 + 156 4 33 0 1 4 -1 0 + 156 6 33 0 1 6 -2 0 + 156 8 33 0 1 3 0 0 + 156 10 33 0 1 6 -1 2 + 156 12 33 0 1 5 -1 0 + 156 14 33 0 1 2 0 0 + 156 16 33 0 1 3 -1 0 + 156 18 33 0 1 2 -1 0 + 156 20 33 0 1 3 -2 0 + 156 22 33 0 1 2 -2 0 + 156 24 33 0 1 1 -1 0 + 156 26 33 0 1 1 -2 0 + 156 28 33 0 1 2 -3 0 + 156 30 33 0 1 2 -4 4 + 156 32 33 0 1 3 -5 0 + 156 34 33 0 1 3 -4 0 + 156 36 33 0 1 4 -5 0 + 156 38 33 0 1 4 -4 0 + 156 40 33 0 1 3 -3 0 + 156 42 33 0 1 4 -3 0 + 156 44 33 0 1 3 -6 0 + 156 46 33 0 1 7 -4 3 + 156 46 33 0 1 7 -3 3 + 156 48 33 0 1 4 -6 0 + 156 50 33 0 1 5 -6 2 + 156 52 33 0 1 5 -5 0 + 156 54 33 0 1 5 -4 0 + 156 56 33 0 1 6 -5 2 + 156 58 33 0 1 6 -3 0 + 156 60 33 0 1 5 -3 0 + 156 62 33 0 1 6 -4 0 + 137 0 34 0 -1 -2 -3 0 + 137 2 34 0 -1 -2 -4 0 + 137 4 34 0 -1 -3 -3 0 + 137 6 34 0 -1 -1 -4 0 + 137 8 34 0 -1 0 -5 0 + 137 10 34 0 -1 -1 -5 2 + 137 12 34 0 -1 1 -6 2 + 137 14 34 0 -1 0 -4 0 + 137 16 34 0 -1 -1 -3 0 + 137 18 34 0 -1 0 -3 0 + 137 20 34 0 -1 3 -7 3 + 137 20 34 0 -1 4 -7 3 + 137 22 34 0 -1 2 -6 0 + 137 24 34 0 -1 1 -5 0 + 137 26 34 0 -1 1 -4 0 + 137 28 34 0 -1 2 -5 0 + 137 30 34 0 -1 1 -3 0 + 137 32 34 0 -1 0 -2 0 + 137 34 34 0 -1 0 -1 0 + 137 36 34 0 -1 -1 0 0 + 137 38 34 0 -1 -1 -1 0 + 137 40 34 0 -1 -4 0 0 + 137 42 34 0 -1 -3 0 0 + 137 44 34 0 -1 -3 -1 0 + 137 46 34 0 -1 -5 0 0 + 137 48 34 0 -1 -5 -1 2 + 137 50 34 0 -1 -4 -1 0 + 137 52 34 0 -1 -2 -1 0 + 137 54 34 0 -1 -1 -2 0 + 137 56 34 0 -1 -2 -2 0 + 137 58 34 0 -1 -3 -2 0 + 137 60 34 0 -1 -4 -3 3 + 137 60 34 0 -1 -3 -4 3 + 137 62 34 0 -1 -4 -2 0 + 138 0 34 0 -1 -4 3 0 + 138 2 34 0 -1 -4 2 0 + 138 4 34 0 -1 -5 3 0 + 138 6 34 0 -1 -6 4 0 + 138 8 34 0 -1 -5 1 0 + 138 10 34 0 -1 -6 3 0 + 138 12 34 0 -1 -7 4 3 + 138 12 34 0 -1 -7 3 3 + 138 14 34 0 -1 -6 2 0 + 138 16 34 0 -1 -6 1 2 + 138 18 34 0 -1 -5 2 0 + 138 20 34 0 -1 -4 1 0 + 138 22 34 0 -1 -3 1 0 + 138 24 34 0 -1 -3 2 0 + 138 26 34 0 -1 -2 1 0 + 138 28 34 0 -1 -2 0 0 + 138 30 34 0 -1 -3 3 0 + 138 32 34 0 -1 -2 3 0 + 138 34 34 0 -1 -2 2 0 + 138 36 34 0 -1 0 0 0 + 138 38 34 0 -1 -1 1 0 + 138 40 34 0 -1 -1 2 4 + 138 42 34 0 -1 -2 4 0 + 138 44 34 0 -1 -3 4 0 + 138 46 34 0 -1 -3 5 0 + 138 48 34 0 -1 -4 6 0 + 138 50 34 0 -1 -4 5 0 + 138 52 34 0 -1 -5 6 2 + 138 54 34 0 -1 -5 4 0 + 138 56 34 0 -1 -5 5 0 + 138 58 34 0 -1 -4 4 0 + 138 62 34 0 -1 -6 5 2 + 139 0 34 0 -1 2 2 0 + 139 2 34 0 -1 1 3 0 + 139 4 34 0 -1 2 3 0 + 139 6 34 0 -1 0 4 0 + 139 8 34 0 -1 3 3 0 + 139 10 34 0 -1 -1 4 0 + 139 12 34 0 -1 -1 5 0 + 139 14 34 0 -1 4 2 0 + 139 16 34 0 -1 3 4 3 + 139 16 34 0 -1 4 3 3 + 139 18 34 0 -1 2 4 0 + 139 20 34 0 -1 1 4 0 + 139 22 34 0 -1 1 5 2 + 139 24 34 0 -1 0 5 0 + 139 26 34 0 -1 -1 6 2 + 139 28 34 0 -1 -2 6 0 + 139 30 34 0 -1 -2 5 0 + 139 32 34 0 -1 -3 6 0 + 139 34 34 0 -1 -4 7 3 + 139 34 34 0 -1 -3 7 3 + 139 36 34 0 -1 0 1 0 + 139 38 34 0 -1 0 2 0 + 139 40 34 0 -1 -1 3 0 + 139 42 34 0 -1 0 3 0 + 139 44 34 0 -1 1 0 0 + 139 46 34 0 -1 3 1 0 + 139 48 34 0 -1 4 0 0 + 139 50 34 0 -1 5 0 0 + 139 52 34 0 -1 2 1 0 + 139 54 34 0 -1 1 1 0 + 139 56 34 0 -1 1 2 0 + 139 58 34 0 -1 3 2 0 + 139 60 34 0 -1 5 1 2 + 139 62 34 0 -1 4 1 0 + 140 0 34 0 -1 5 -2 0 + 140 2 34 0 -1 4 -2 0 + 140 4 34 0 -1 4 -1 0 + 140 6 34 0 -1 6 -2 0 + 140 8 34 0 -1 3 0 0 + 140 10 34 0 -1 6 -1 2 + 140 12 34 0 -1 5 -1 0 + 140 14 34 0 -1 2 0 0 + 140 16 34 0 -1 3 -1 0 + 140 18 34 0 -1 2 -1 0 + 140 20 34 0 -1 3 -2 0 + 140 22 34 0 -1 2 -2 0 + 140 24 34 0 -1 1 -1 0 + 140 26 34 0 -1 1 -2 0 + 140 28 34 0 -1 2 -3 0 + 140 30 34 0 -1 2 -4 4 + 140 32 34 0 -1 3 -5 0 + 140 34 34 0 -1 3 -4 0 + 140 36 34 0 -1 4 -5 0 + 140 38 34 0 -1 4 -4 0 + 140 40 34 0 -1 3 -3 0 + 140 42 34 0 -1 4 -3 0 + 140 44 34 0 -1 3 -6 0 + 140 46 34 0 -1 7 -4 3 + 140 46 34 0 -1 7 -3 3 + 140 48 34 0 -1 4 -6 0 + 140 50 34 0 -1 5 -6 2 + 140 52 34 0 -1 5 -5 0 + 140 54 34 0 -1 5 -4 0 + 140 56 34 0 -1 6 -5 2 + 140 58 34 0 -1 6 -3 0 + 140 60 34 0 -1 5 -3 0 + 140 62 34 0 -1 6 -4 0 + 141 0 34 1 -1 -2 -3 0 + 141 2 34 1 -1 -2 -4 0 + 141 4 34 1 -1 -3 -3 0 + 141 6 34 1 -1 -1 -4 0 + 141 8 34 1 -1 0 -5 0 + 141 10 34 1 -1 -1 -5 2 + 141 12 34 1 -1 1 -6 2 + 141 14 34 1 -1 0 -4 0 + 141 16 34 1 -1 -1 -3 0 + 141 18 34 1 -1 0 -3 0 + 141 20 34 1 -1 3 -7 3 + 141 20 34 1 -1 4 -7 3 + 141 22 34 1 -1 2 -6 0 + 141 24 34 1 -1 1 -5 0 + 141 26 34 1 -1 1 -4 0 + 141 28 34 1 -1 2 -5 0 + 141 30 34 1 -1 1 -3 0 + 141 32 34 1 -1 0 -2 0 + 141 34 34 1 -1 0 -1 0 + 141 36 34 1 -1 -1 0 0 + 141 38 34 1 -1 -1 -1 0 + 141 40 34 1 -1 -4 0 0 + 141 42 34 1 -1 -3 0 0 + 141 44 34 1 -1 -3 -1 0 + 141 46 34 1 -1 -5 0 0 + 141 48 34 1 -1 -5 -1 2 + 141 50 34 1 -1 -4 -1 0 + 141 52 34 1 -1 -2 -1 0 + 141 54 34 1 -1 -1 -2 0 + 141 56 34 1 -1 -2 -2 0 + 141 58 34 1 -1 -3 -2 0 + 141 60 34 1 -1 -4 -3 3 + 141 60 34 1 -1 -3 -4 3 + 141 62 34 1 -1 -4 -2 0 + 142 0 34 1 -1 -4 3 0 + 142 2 34 1 -1 -4 2 0 + 142 4 34 1 -1 -5 3 0 + 142 6 34 1 -1 -6 4 0 + 142 8 34 1 -1 -5 1 0 + 142 10 34 1 -1 -6 3 0 + 142 12 34 1 -1 -7 4 3 + 142 12 34 1 -1 -7 3 3 + 142 14 34 1 -1 -6 2 0 + 142 16 34 1 -1 -6 1 2 + 142 18 34 1 -1 -5 2 0 + 142 20 34 1 -1 -4 1 0 + 142 22 34 1 -1 -3 1 0 + 142 24 34 1 -1 -3 2 0 + 142 26 34 1 -1 -2 1 0 + 142 28 34 1 -1 -2 0 0 + 142 30 34 1 -1 -3 3 0 + 142 32 34 1 -1 -2 3 0 + 142 34 34 1 -1 -2 2 0 + 142 36 34 1 -1 0 0 0 + 142 38 34 1 -1 -1 1 0 + 142 40 34 1 -1 -1 2 4 + 142 42 34 1 -1 -2 4 0 + 142 44 34 1 -1 -3 4 0 + 142 46 34 1 -1 -3 5 0 + 142 48 34 1 -1 -4 6 0 + 142 50 34 1 -1 -4 5 0 + 142 52 34 1 -1 -5 6 2 + 142 54 34 1 -1 -5 4 0 + 142 56 34 1 -1 -5 5 0 + 142 58 34 1 -1 -4 4 0 + 142 62 34 1 -1 -6 5 2 + 143 0 34 1 -1 2 2 0 + 143 2 34 1 -1 1 3 0 + 143 4 34 1 -1 2 3 0 + 143 6 34 1 -1 0 4 0 + 143 8 34 1 -1 3 3 0 + 143 10 34 1 -1 -1 4 0 + 143 12 34 1 -1 -1 5 0 + 143 14 34 1 -1 4 2 0 + 143 16 34 1 -1 3 4 3 + 143 16 34 1 -1 4 3 3 + 143 18 34 1 -1 2 4 0 + 143 20 34 1 -1 1 4 0 + 143 22 34 1 -1 1 5 2 + 143 24 34 1 -1 0 5 0 + 143 26 34 1 -1 -1 6 2 + 143 28 34 1 -1 -2 6 0 + 143 30 34 1 -1 -2 5 0 + 143 32 34 1 -1 -3 6 0 + 143 34 34 1 -1 -4 7 3 + 143 34 34 1 -1 -3 7 3 + 143 36 34 1 -1 0 1 0 + 143 38 34 1 -1 0 2 0 + 143 40 34 1 -1 -1 3 0 + 143 42 34 1 -1 0 3 0 + 143 44 34 1 -1 1 0 0 + 143 46 34 1 -1 3 1 0 + 143 48 34 1 -1 4 0 0 + 143 50 34 1 -1 5 0 0 + 143 52 34 1 -1 2 1 0 + 143 54 34 1 -1 1 1 0 + 143 56 34 1 -1 1 2 0 + 143 58 34 1 -1 3 2 0 + 143 60 34 1 -1 5 1 2 + 143 62 34 1 -1 4 1 0 + 144 0 34 1 -1 5 -2 0 + 144 2 34 1 -1 4 -2 0 + 144 4 34 1 -1 4 -1 0 + 144 6 34 1 -1 6 -2 0 + 144 8 34 1 -1 3 0 0 + 144 10 34 1 -1 6 -1 2 + 144 12 34 1 -1 5 -1 0 + 144 14 34 1 -1 2 0 0 + 144 16 34 1 -1 3 -1 0 + 144 18 34 1 -1 2 -1 0 + 144 20 34 1 -1 3 -2 0 + 144 22 34 1 -1 2 -2 0 + 144 24 34 1 -1 1 -1 0 + 144 26 34 1 -1 1 -2 0 + 144 28 34 1 -1 2 -3 0 + 144 30 34 1 -1 2 -4 4 + 144 32 34 1 -1 3 -5 0 + 144 34 34 1 -1 3 -4 0 + 144 36 34 1 -1 4 -5 0 + 144 38 34 1 -1 4 -4 0 + 144 40 34 1 -1 3 -3 0 + 144 42 34 1 -1 4 -3 0 + 144 44 34 1 -1 3 -6 0 + 144 46 34 1 -1 7 -4 3 + 144 46 34 1 -1 7 -3 3 + 144 48 34 1 -1 4 -6 0 + 144 50 34 1 -1 5 -6 2 + 144 52 34 1 -1 5 -5 0 + 144 54 34 1 -1 5 -4 0 + 144 56 34 1 -1 6 -5 2 + 144 58 34 1 -1 6 -3 0 + 144 60 34 1 -1 5 -3 0 + 144 62 34 1 -1 6 -4 0 + 145 0 34 -1 0 -2 -3 0 + 145 2 34 -1 0 -2 -4 0 + 145 4 34 -1 0 -3 -3 0 + 145 6 34 -1 0 -1 -4 0 + 145 8 34 -1 0 0 -5 0 + 145 10 34 -1 0 -1 -5 2 + 145 12 34 -1 0 1 -6 2 + 145 14 34 -1 0 0 -4 0 + 145 16 34 -1 0 -1 -3 0 + 145 18 34 -1 0 0 -3 0 + 145 20 34 -1 0 3 -7 3 + 145 20 34 -1 0 4 -7 3 + 145 22 34 -1 0 2 -6 0 + 145 24 34 -1 0 1 -5 0 + 145 26 34 -1 0 1 -4 0 + 145 28 34 -1 0 2 -5 0 + 145 30 34 -1 0 1 -3 0 + 145 32 34 -1 0 0 -2 0 + 145 34 34 -1 0 0 -1 0 + 145 36 34 -1 0 -1 0 0 + 145 38 34 -1 0 -1 -1 0 + 145 40 34 -1 0 -4 0 0 + 145 42 34 -1 0 -3 0 0 + 145 44 34 -1 0 -3 -1 0 + 145 46 34 -1 0 -5 0 0 + 145 48 34 -1 0 -5 -1 2 + 145 50 34 -1 0 -4 -1 0 + 145 52 34 -1 0 -2 -1 0 + 145 54 34 -1 0 -1 -2 0 + 145 56 34 -1 0 -2 -2 0 + 145 58 34 -1 0 -3 -2 0 + 145 60 34 -1 0 -4 -3 3 + 145 60 34 -1 0 -3 -4 3 + 145 62 34 -1 0 -4 -2 0 + 146 0 34 -1 0 -4 3 0 + 146 2 34 -1 0 -4 2 0 + 146 4 34 -1 0 -5 3 0 + 146 6 34 -1 0 -6 4 0 + 146 8 34 -1 0 -5 1 0 + 146 10 34 -1 0 -6 3 0 + 146 12 34 -1 0 -7 4 3 + 146 12 34 -1 0 -7 3 3 + 146 14 34 -1 0 -6 2 0 + 146 16 34 -1 0 -6 1 2 + 146 18 34 -1 0 -5 2 0 + 146 20 34 -1 0 -4 1 0 + 146 22 34 -1 0 -3 1 0 + 146 24 34 -1 0 -3 2 0 + 146 26 34 -1 0 -2 1 0 + 146 28 34 -1 0 -2 0 0 + 146 30 34 -1 0 -3 3 0 + 146 32 34 -1 0 -2 3 0 + 146 34 34 -1 0 -2 2 0 + 146 36 34 -1 0 0 0 0 + 146 38 34 -1 0 -1 1 0 + 146 40 34 -1 0 -1 2 4 + 146 42 34 -1 0 -2 4 0 + 146 44 34 -1 0 -3 4 0 + 146 46 34 -1 0 -3 5 0 + 146 48 34 -1 0 -4 6 0 + 146 50 34 -1 0 -4 5 0 + 146 52 34 -1 0 -5 6 2 + 146 54 34 -1 0 -5 4 0 + 146 56 34 -1 0 -5 5 0 + 146 58 34 -1 0 -4 4 0 + 146 62 34 -1 0 -6 5 2 + 147 0 34 -1 0 2 2 0 + 147 2 34 -1 0 1 3 0 + 147 4 34 -1 0 2 3 0 + 147 6 34 -1 0 0 4 0 + 147 8 34 -1 0 3 3 0 + 147 10 34 -1 0 -1 4 0 + 147 12 34 -1 0 -1 5 0 + 147 14 34 -1 0 4 2 0 + 147 16 34 -1 0 3 4 3 + 147 16 34 -1 0 4 3 3 + 147 18 34 -1 0 2 4 0 + 147 20 34 -1 0 1 4 0 + 147 22 34 -1 0 1 5 2 + 147 24 34 -1 0 0 5 0 + 147 26 34 -1 0 -1 6 2 + 147 28 34 -1 0 -2 6 0 + 147 30 34 -1 0 -2 5 0 + 147 32 34 -1 0 -3 6 0 + 147 34 34 -1 0 -4 7 3 + 147 34 34 -1 0 -3 7 3 + 147 36 34 -1 0 0 1 0 + 147 38 34 -1 0 0 2 0 + 147 40 34 -1 0 -1 3 0 + 147 42 34 -1 0 0 3 0 + 147 44 34 -1 0 1 0 0 + 147 46 34 -1 0 3 1 0 + 147 48 34 -1 0 4 0 0 + 147 50 34 -1 0 5 0 0 + 147 52 34 -1 0 2 1 0 + 147 54 34 -1 0 1 1 0 + 147 56 34 -1 0 1 2 0 + 147 58 34 -1 0 3 2 0 + 147 60 34 -1 0 5 1 2 + 147 62 34 -1 0 4 1 0 + 148 0 34 -1 0 5 -2 0 + 148 2 34 -1 0 4 -2 0 + 148 4 34 -1 0 4 -1 0 + 148 6 34 -1 0 6 -2 0 + 148 8 34 -1 0 3 0 0 + 148 10 34 -1 0 6 -1 2 + 148 12 34 -1 0 5 -1 0 + 148 14 34 -1 0 2 0 0 + 148 16 34 -1 0 3 -1 0 + 148 18 34 -1 0 2 -1 0 + 148 20 34 -1 0 3 -2 0 + 148 22 34 -1 0 2 -2 0 + 148 24 34 -1 0 1 -1 0 + 148 26 34 -1 0 1 -2 0 + 148 28 34 -1 0 2 -3 0 + 148 30 34 -1 0 2 -4 4 + 148 32 34 -1 0 3 -5 0 + 148 34 34 -1 0 3 -4 0 + 148 36 34 -1 0 4 -5 0 + 148 38 34 -1 0 4 -4 0 + 148 40 34 -1 0 3 -3 0 + 148 42 34 -1 0 4 -3 0 + 148 44 34 -1 0 3 -6 0 + 148 46 34 -1 0 7 -4 3 + 148 46 34 -1 0 7 -3 3 + 148 48 34 -1 0 4 -6 0 + 148 50 34 -1 0 5 -6 2 + 148 52 34 -1 0 5 -5 0 + 148 54 34 -1 0 5 -4 0 + 148 56 34 -1 0 6 -5 2 + 148 58 34 -1 0 6 -3 0 + 148 60 34 -1 0 5 -3 0 + 148 62 34 -1 0 6 -4 0 + 133 0 34 0 0 -2 -3 0 + 133 2 34 0 0 -2 -4 0 + 133 4 34 0 0 -3 -3 0 + 133 6 34 0 0 -1 -4 0 + 133 8 34 0 0 0 -5 0 + 133 10 34 0 0 -1 -5 2 + 133 12 34 0 0 1 -6 2 + 133 14 34 0 0 0 -4 0 + 133 16 34 0 0 -1 -3 0 + 133 18 34 0 0 0 -3 0 + 133 20 34 0 0 3 -7 3 + 133 20 34 0 0 4 -7 3 + 133 22 34 0 0 2 -6 0 + 133 24 34 0 0 1 -5 0 + 133 26 34 0 0 1 -4 0 + 133 28 34 0 0 2 -5 0 + 133 30 34 0 0 1 -3 0 + 133 32 34 0 0 0 -2 0 + 133 34 34 0 0 0 -1 0 + 133 36 34 0 0 -1 0 0 + 133 38 34 0 0 -1 -1 0 + 133 40 34 0 0 -4 0 0 + 133 42 34 0 0 -3 0 0 + 133 44 34 0 0 -3 -1 0 + 133 46 34 0 0 -5 0 0 + 133 48 34 0 0 -5 -1 2 + 133 50 34 0 0 -4 -1 0 + 133 52 34 0 0 -2 -1 0 + 133 54 34 0 0 -1 -2 0 + 133 56 34 0 0 -2 -2 0 + 133 58 34 0 0 -3 -2 0 + 133 60 34 0 0 -4 -3 3 + 133 60 34 0 0 -3 -4 3 + 133 62 34 0 0 -4 -2 0 + 134 0 34 0 0 -4 3 0 + 134 2 34 0 0 -4 2 0 + 134 4 34 0 0 -5 3 0 + 134 6 34 0 0 -6 4 0 + 134 8 34 0 0 -5 1 0 + 134 10 34 0 0 -6 3 0 + 134 12 34 0 0 -7 4 3 + 134 12 34 0 0 -7 3 3 + 134 14 34 0 0 -6 2 0 + 134 16 34 0 0 -6 1 2 + 134 18 34 0 0 -5 2 0 + 134 20 34 0 0 -4 1 0 + 134 22 34 0 0 -3 1 0 + 134 24 34 0 0 -3 2 0 + 134 26 34 0 0 -2 1 0 + 134 28 34 0 0 -2 0 0 + 134 30 34 0 0 -3 3 0 + 134 32 34 0 0 -2 3 0 + 134 34 34 0 0 -2 2 0 + 134 36 34 0 0 0 0 0 + 134 38 34 0 0 -1 1 0 + 134 40 34 0 0 -1 2 4 + 134 42 34 0 0 -2 4 0 + 134 44 34 0 0 -3 4 0 + 134 46 34 0 0 -3 5 0 + 134 48 34 0 0 -4 6 0 + 134 50 34 0 0 -4 5 0 + 134 52 34 0 0 -5 6 2 + 134 54 34 0 0 -5 4 0 + 134 56 34 0 0 -5 5 0 + 134 58 34 0 0 -4 4 0 + 134 62 34 0 0 -6 5 2 + 135 0 34 0 0 2 2 0 + 135 2 34 0 0 1 3 0 + 135 4 34 0 0 2 3 0 + 135 6 34 0 0 0 4 0 + 135 8 34 0 0 3 3 0 + 135 10 34 0 0 -1 4 0 + 135 12 34 0 0 -1 5 0 + 135 14 34 0 0 4 2 0 + 135 16 34 0 0 3 4 3 + 135 16 34 0 0 4 3 3 + 135 18 34 0 0 2 4 0 + 135 20 34 0 0 1 4 0 + 135 22 34 0 0 1 5 2 + 135 24 34 0 0 0 5 0 + 135 26 34 0 0 -1 6 2 + 135 28 34 0 0 -2 6 0 + 135 30 34 0 0 -2 5 0 + 135 32 34 0 0 -3 6 0 + 135 34 34 0 0 -4 7 3 + 135 34 34 0 0 -3 7 3 + 135 36 34 0 0 0 1 0 + 135 38 34 0 0 0 2 0 + 135 40 34 0 0 -1 3 0 + 135 42 34 0 0 0 3 0 + 135 44 34 0 0 1 0 0 + 135 46 34 0 0 3 1 0 + 135 48 34 0 0 4 0 0 + 135 50 34 0 0 5 0 0 + 135 52 34 0 0 2 1 0 + 135 54 34 0 0 1 1 0 + 135 56 34 0 0 1 2 0 + 135 58 34 0 0 3 2 0 + 135 60 34 0 0 5 1 2 + 135 62 34 0 0 4 1 0 + 136 0 34 0 0 5 -2 0 + 136 2 34 0 0 4 -2 0 + 136 4 34 0 0 4 -1 0 + 136 6 34 0 0 6 -2 0 + 136 8 34 0 0 3 0 0 + 136 10 34 0 0 6 -1 2 + 136 12 34 0 0 5 -1 0 + 136 14 34 0 0 2 0 0 + 136 16 34 0 0 3 -1 0 + 136 18 34 0 0 2 -1 0 + 136 20 34 0 0 3 -2 0 + 136 22 34 0 0 2 -2 0 + 136 24 34 0 0 1 -1 0 + 136 26 34 0 0 1 -2 0 + 136 28 34 0 0 2 -3 0 + 136 30 34 0 0 2 -4 4 + 136 32 34 0 0 3 -5 0 + 136 34 34 0 0 3 -4 0 + 136 36 34 0 0 4 -5 0 + 136 38 34 0 0 4 -4 0 + 136 40 34 0 0 3 -3 0 + 136 42 34 0 0 4 -3 0 + 136 44 34 0 0 3 -6 0 + 136 46 34 0 0 7 -4 3 + 136 46 34 0 0 7 -3 3 + 136 48 34 0 0 4 -6 0 + 136 50 34 0 0 5 -6 2 + 136 52 34 0 0 5 -5 0 + 136 54 34 0 0 5 -4 0 + 136 56 34 0 0 6 -5 2 + 136 58 34 0 0 6 -3 0 + 136 60 34 0 0 5 -3 0 + 136 62 34 0 0 6 -4 0 + 149 0 34 1 0 -2 -3 0 + 149 2 34 1 0 -2 -4 0 + 149 4 34 1 0 -3 -3 0 + 149 6 34 1 0 -1 -4 0 + 149 8 34 1 0 0 -5 0 + 149 10 34 1 0 -1 -5 2 + 149 12 34 1 0 1 -6 2 + 149 14 34 1 0 0 -4 0 + 149 16 34 1 0 -1 -3 0 + 149 18 34 1 0 0 -3 0 + 149 20 34 1 0 3 -7 3 + 149 20 34 1 0 4 -7 3 + 149 22 34 1 0 2 -6 0 + 149 24 34 1 0 1 -5 0 + 149 26 34 1 0 1 -4 0 + 149 28 34 1 0 2 -5 0 + 149 30 34 1 0 1 -3 0 + 149 32 34 1 0 0 -2 0 + 149 34 34 1 0 0 -1 0 + 149 36 34 1 0 -1 0 0 + 149 38 34 1 0 -1 -1 0 + 149 40 34 1 0 -4 0 0 + 149 42 34 1 0 -3 0 0 + 149 44 34 1 0 -3 -1 0 + 149 46 34 1 0 -5 0 0 + 149 48 34 1 0 -5 -1 2 + 149 50 34 1 0 -4 -1 0 + 149 52 34 1 0 -2 -1 0 + 149 54 34 1 0 -1 -2 0 + 149 56 34 1 0 -2 -2 0 + 149 58 34 1 0 -3 -2 0 + 149 60 34 1 0 -4 -3 3 + 149 60 34 1 0 -3 -4 3 + 149 62 34 1 0 -4 -2 0 + 150 0 34 1 0 -4 3 0 + 150 2 34 1 0 -4 2 0 + 150 4 34 1 0 -5 3 0 + 150 6 34 1 0 -6 4 0 + 150 8 34 1 0 -5 1 0 + 150 10 34 1 0 -6 3 0 + 150 12 34 1 0 -7 4 3 + 150 12 34 1 0 -7 3 3 + 150 14 34 1 0 -6 2 0 + 150 16 34 1 0 -6 1 2 + 150 18 34 1 0 -5 2 0 + 150 20 34 1 0 -4 1 0 + 150 22 34 1 0 -3 1 0 + 150 24 34 1 0 -3 2 0 + 150 26 34 1 0 -2 1 0 + 150 28 34 1 0 -2 0 0 + 150 30 34 1 0 -3 3 0 + 150 32 34 1 0 -2 3 0 + 150 34 34 1 0 -2 2 0 + 150 36 34 1 0 0 0 0 + 150 38 34 1 0 -1 1 0 + 150 40 34 1 0 -1 2 4 + 150 42 34 1 0 -2 4 0 + 150 44 34 1 0 -3 4 0 + 150 46 34 1 0 -3 5 0 + 150 48 34 1 0 -4 6 0 + 150 50 34 1 0 -4 5 0 + 150 52 34 1 0 -5 6 2 + 150 54 34 1 0 -5 4 0 + 150 56 34 1 0 -5 5 0 + 150 58 34 1 0 -4 4 0 + 150 62 34 1 0 -6 5 2 + 151 0 34 1 0 2 2 0 + 151 2 34 1 0 1 3 0 + 151 4 34 1 0 2 3 0 + 151 6 34 1 0 0 4 0 + 151 8 34 1 0 3 3 0 + 151 10 34 1 0 -1 4 0 + 151 12 34 1 0 -1 5 0 + 151 14 34 1 0 4 2 0 + 151 16 34 1 0 3 4 3 + 151 16 34 1 0 4 3 3 + 151 18 34 1 0 2 4 0 + 151 20 34 1 0 1 4 0 + 151 22 34 1 0 1 5 2 + 151 24 34 1 0 0 5 0 + 151 26 34 1 0 -1 6 2 + 151 28 34 1 0 -2 6 0 + 151 30 34 1 0 -2 5 0 + 151 32 34 1 0 -3 6 0 + 151 34 34 1 0 -4 7 3 + 151 34 34 1 0 -3 7 3 + 151 36 34 1 0 0 1 0 + 151 38 34 1 0 0 2 0 + 151 40 34 1 0 -1 3 0 + 151 42 34 1 0 0 3 0 + 151 44 34 1 0 1 0 0 + 151 46 34 1 0 3 1 0 + 151 48 34 1 0 4 0 0 + 151 50 34 1 0 5 0 0 + 151 52 34 1 0 2 1 0 + 151 54 34 1 0 1 1 0 + 151 56 34 1 0 1 2 0 + 151 58 34 1 0 3 2 0 + 151 60 34 1 0 5 1 2 + 151 62 34 1 0 4 1 0 + 152 0 34 1 0 5 -2 0 + 152 2 34 1 0 4 -2 0 + 152 4 34 1 0 4 -1 0 + 152 6 34 1 0 6 -2 0 + 152 8 34 1 0 3 0 0 + 152 10 34 1 0 6 -1 2 + 152 12 34 1 0 5 -1 0 + 152 14 34 1 0 2 0 0 + 152 16 34 1 0 3 -1 0 + 152 18 34 1 0 2 -1 0 + 152 20 34 1 0 3 -2 0 + 152 22 34 1 0 2 -2 0 + 152 24 34 1 0 1 -1 0 + 152 26 34 1 0 1 -2 0 + 152 28 34 1 0 2 -3 0 + 152 30 34 1 0 2 -4 4 + 152 32 34 1 0 3 -5 0 + 152 34 34 1 0 3 -4 0 + 152 36 34 1 0 4 -5 0 + 152 38 34 1 0 4 -4 0 + 152 40 34 1 0 3 -3 0 + 152 42 34 1 0 4 -3 0 + 152 44 34 1 0 3 -6 0 + 152 46 34 1 0 7 -4 3 + 152 46 34 1 0 7 -3 3 + 152 48 34 1 0 4 -6 0 + 152 50 34 1 0 5 -6 2 + 152 52 34 1 0 5 -5 0 + 152 54 34 1 0 5 -4 0 + 152 56 34 1 0 6 -5 2 + 152 58 34 1 0 6 -3 0 + 152 60 34 1 0 5 -3 0 + 152 62 34 1 0 6 -4 0 + 153 0 34 -1 1 -2 -3 0 + 153 2 34 -1 1 -2 -4 0 + 153 4 34 -1 1 -3 -3 0 + 153 6 34 -1 1 -1 -4 0 + 153 8 34 -1 1 0 -5 0 + 153 10 34 -1 1 -1 -5 2 + 153 12 34 -1 1 1 -6 2 + 153 14 34 -1 1 0 -4 0 + 153 16 34 -1 1 -1 -3 0 + 153 18 34 -1 1 0 -3 0 + 153 20 34 -1 1 3 -7 3 + 153 20 34 -1 1 4 -7 3 + 153 22 34 -1 1 2 -6 0 + 153 24 34 -1 1 1 -5 0 + 153 26 34 -1 1 1 -4 0 + 153 28 34 -1 1 2 -5 0 + 153 30 34 -1 1 1 -3 0 + 153 32 34 -1 1 0 -2 0 + 153 34 34 -1 1 0 -1 0 + 153 36 34 -1 1 -1 0 0 + 153 38 34 -1 1 -1 -1 0 + 153 40 34 -1 1 -4 0 0 + 153 42 34 -1 1 -3 0 0 + 153 44 34 -1 1 -3 -1 0 + 153 46 34 -1 1 -5 0 0 + 153 48 34 -1 1 -5 -1 2 + 153 50 34 -1 1 -4 -1 0 + 153 52 34 -1 1 -2 -1 0 + 153 54 34 -1 1 -1 -2 0 + 153 56 34 -1 1 -2 -2 0 + 153 58 34 -1 1 -3 -2 0 + 153 60 34 -1 1 -4 -3 3 + 153 60 34 -1 1 -3 -4 3 + 153 62 34 -1 1 -4 -2 0 + 154 0 34 -1 1 -4 3 0 + 154 2 34 -1 1 -4 2 0 + 154 4 34 -1 1 -5 3 0 + 154 6 34 -1 1 -6 4 0 + 154 8 34 -1 1 -5 1 0 + 154 10 34 -1 1 -6 3 0 + 154 12 34 -1 1 -7 4 3 + 154 12 34 -1 1 -7 3 3 + 154 14 34 -1 1 -6 2 0 + 154 16 34 -1 1 -6 1 2 + 154 18 34 -1 1 -5 2 0 + 154 20 34 -1 1 -4 1 0 + 154 22 34 -1 1 -3 1 0 + 154 24 34 -1 1 -3 2 0 + 154 26 34 -1 1 -2 1 0 + 154 28 34 -1 1 -2 0 0 + 154 30 34 -1 1 -3 3 0 + 154 32 34 -1 1 -2 3 0 + 154 34 34 -1 1 -2 2 0 + 154 36 34 -1 1 0 0 0 + 154 38 34 -1 1 -1 1 0 + 154 40 34 -1 1 -1 2 4 + 154 42 34 -1 1 -2 4 0 + 154 44 34 -1 1 -3 4 0 + 154 46 34 -1 1 -3 5 0 + 154 48 34 -1 1 -4 6 0 + 154 50 34 -1 1 -4 5 0 + 154 52 34 -1 1 -5 6 2 + 154 54 34 -1 1 -5 4 0 + 154 56 34 -1 1 -5 5 0 + 154 58 34 -1 1 -4 4 0 + 154 62 34 -1 1 -6 5 2 + 155 0 34 -1 1 2 2 0 + 155 2 34 -1 1 1 3 0 + 155 4 34 -1 1 2 3 0 + 155 6 34 -1 1 0 4 0 + 155 8 34 -1 1 3 3 0 + 155 10 34 -1 1 -1 4 0 + 155 12 34 -1 1 -1 5 0 + 155 14 34 -1 1 4 2 0 + 155 16 34 -1 1 3 4 3 + 155 16 34 -1 1 4 3 3 + 155 18 34 -1 1 2 4 0 + 155 20 34 -1 1 1 4 0 + 155 22 34 -1 1 1 5 2 + 155 24 34 -1 1 0 5 0 + 155 26 34 -1 1 -1 6 2 + 155 28 34 -1 1 -2 6 0 + 155 30 34 -1 1 -2 5 0 + 155 32 34 -1 1 -3 6 0 + 155 34 34 -1 1 -4 7 3 + 155 34 34 -1 1 -3 7 3 + 155 36 34 -1 1 0 1 0 + 155 38 34 -1 1 0 2 0 + 155 40 34 -1 1 -1 3 0 + 155 42 34 -1 1 0 3 0 + 155 44 34 -1 1 1 0 0 + 155 46 34 -1 1 3 1 0 + 155 48 34 -1 1 4 0 0 + 155 50 34 -1 1 5 0 0 + 155 52 34 -1 1 2 1 0 + 155 54 34 -1 1 1 1 0 + 155 56 34 -1 1 1 2 0 + 155 58 34 -1 1 3 2 0 + 155 60 34 -1 1 5 1 2 + 155 62 34 -1 1 4 1 0 + 156 0 34 -1 1 5 -2 0 + 156 2 34 -1 1 4 -2 0 + 156 4 34 -1 1 4 -1 0 + 156 6 34 -1 1 6 -2 0 + 156 8 34 -1 1 3 0 0 + 156 10 34 -1 1 6 -1 2 + 156 12 34 -1 1 5 -1 0 + 156 14 34 -1 1 2 0 0 + 156 16 34 -1 1 3 -1 0 + 156 18 34 -1 1 2 -1 0 + 156 20 34 -1 1 3 -2 0 + 156 22 34 -1 1 2 -2 0 + 156 24 34 -1 1 1 -1 0 + 156 26 34 -1 1 1 -2 0 + 156 28 34 -1 1 2 -3 0 + 156 30 34 -1 1 2 -4 4 + 156 32 34 -1 1 3 -5 0 + 156 34 34 -1 1 3 -4 0 + 156 36 34 -1 1 4 -5 0 + 156 38 34 -1 1 4 -4 0 + 156 40 34 -1 1 3 -3 0 + 156 42 34 -1 1 4 -3 0 + 156 44 34 -1 1 3 -6 0 + 156 46 34 -1 1 7 -4 3 + 156 46 34 -1 1 7 -3 3 + 156 48 34 -1 1 4 -6 0 + 156 50 34 -1 1 5 -6 2 + 156 52 34 -1 1 5 -5 0 + 156 54 34 -1 1 5 -4 0 + 156 56 34 -1 1 6 -5 2 + 156 58 34 -1 1 6 -3 0 + 156 60 34 -1 1 5 -3 0 + 156 62 34 -1 1 6 -4 0 + 157 0 34 0 1 -2 -3 0 + 157 2 34 0 1 -2 -4 0 + 157 4 34 0 1 -3 -3 0 + 157 6 34 0 1 -1 -4 0 + 157 8 34 0 1 0 -5 0 + 157 10 34 0 1 -1 -5 2 + 157 12 34 0 1 1 -6 2 + 157 14 34 0 1 0 -4 0 + 157 16 34 0 1 -1 -3 0 + 157 18 34 0 1 0 -3 0 + 157 20 34 0 1 3 -7 3 + 157 20 34 0 1 4 -7 3 + 157 22 34 0 1 2 -6 0 + 157 24 34 0 1 1 -5 0 + 157 26 34 0 1 1 -4 0 + 157 28 34 0 1 2 -5 0 + 157 30 34 0 1 1 -3 0 + 157 32 34 0 1 0 -2 0 + 157 34 34 0 1 0 -1 0 + 157 36 34 0 1 -1 0 0 + 157 38 34 0 1 -1 -1 0 + 157 40 34 0 1 -4 0 0 + 157 42 34 0 1 -3 0 0 + 157 44 34 0 1 -3 -1 0 + 157 46 34 0 1 -5 0 0 + 157 48 34 0 1 -5 -1 2 + 157 50 34 0 1 -4 -1 0 + 157 52 34 0 1 -2 -1 0 + 157 54 34 0 1 -1 -2 0 + 157 56 34 0 1 -2 -2 0 + 157 58 34 0 1 -3 -2 0 + 157 60 34 0 1 -4 -3 3 + 157 60 34 0 1 -3 -4 3 + 157 62 34 0 1 -4 -2 0 + 158 0 34 0 1 -4 3 0 + 158 2 34 0 1 -4 2 0 + 158 4 34 0 1 -5 3 0 + 158 6 34 0 1 -6 4 0 + 158 8 34 0 1 -5 1 0 + 158 10 34 0 1 -6 3 0 + 158 12 34 0 1 -7 4 3 + 158 12 34 0 1 -7 3 3 + 158 14 34 0 1 -6 2 0 + 158 16 34 0 1 -6 1 2 + 158 18 34 0 1 -5 2 0 + 158 20 34 0 1 -4 1 0 + 158 22 34 0 1 -3 1 0 + 158 24 34 0 1 -3 2 0 + 158 26 34 0 1 -2 1 0 + 158 28 34 0 1 -2 0 0 + 158 30 34 0 1 -3 3 0 + 158 32 34 0 1 -2 3 0 + 158 34 34 0 1 -2 2 0 + 158 36 34 0 1 0 0 0 + 158 38 34 0 1 -1 1 0 + 158 40 34 0 1 -1 2 4 + 158 42 34 0 1 -2 4 0 + 158 44 34 0 1 -3 4 0 + 158 46 34 0 1 -3 5 0 + 158 48 34 0 1 -4 6 0 + 158 50 34 0 1 -4 5 0 + 158 52 34 0 1 -5 6 2 + 158 54 34 0 1 -5 4 0 + 158 56 34 0 1 -5 5 0 + 158 58 34 0 1 -4 4 0 + 158 62 34 0 1 -6 5 2 + 159 0 34 0 1 2 2 0 + 159 2 34 0 1 1 3 0 + 159 4 34 0 1 2 3 0 + 159 6 34 0 1 0 4 0 + 159 8 34 0 1 3 3 0 + 159 10 34 0 1 -1 4 0 + 159 12 34 0 1 -1 5 0 + 159 14 34 0 1 4 2 0 + 159 16 34 0 1 3 4 3 + 159 16 34 0 1 4 3 3 + 159 18 34 0 1 2 4 0 + 159 20 34 0 1 1 4 0 + 159 22 34 0 1 1 5 2 + 159 24 34 0 1 0 5 0 + 159 26 34 0 1 -1 6 2 + 159 28 34 0 1 -2 6 0 + 159 30 34 0 1 -2 5 0 + 159 32 34 0 1 -3 6 0 + 159 34 34 0 1 -4 7 3 + 159 34 34 0 1 -3 7 3 + 159 36 34 0 1 0 1 0 + 159 38 34 0 1 0 2 0 + 159 40 34 0 1 -1 3 0 + 159 42 34 0 1 0 3 0 + 159 44 34 0 1 1 0 0 + 159 46 34 0 1 3 1 0 + 159 48 34 0 1 4 0 0 + 159 50 34 0 1 5 0 0 + 159 52 34 0 1 2 1 0 + 159 54 34 0 1 1 1 0 + 159 56 34 0 1 1 2 0 + 159 58 34 0 1 3 2 0 + 159 60 34 0 1 5 1 2 + 159 62 34 0 1 4 1 0 + 160 0 34 0 1 5 -2 0 + 160 2 34 0 1 4 -2 0 + 160 4 34 0 1 4 -1 0 + 160 6 34 0 1 6 -2 0 + 160 8 34 0 1 3 0 0 + 160 10 34 0 1 6 -1 2 + 160 12 34 0 1 5 -1 0 + 160 14 34 0 1 2 0 0 + 160 16 34 0 1 3 -1 0 + 160 18 34 0 1 2 -1 0 + 160 20 34 0 1 3 -2 0 + 160 22 34 0 1 2 -2 0 + 160 24 34 0 1 1 -1 0 + 160 26 34 0 1 1 -2 0 + 160 28 34 0 1 2 -3 0 + 160 30 34 0 1 2 -4 4 + 160 32 34 0 1 3 -5 0 + 160 34 34 0 1 3 -4 0 + 160 36 34 0 1 4 -5 0 + 160 38 34 0 1 4 -4 0 + 160 40 34 0 1 3 -3 0 + 160 42 34 0 1 4 -3 0 + 160 44 34 0 1 3 -6 0 + 160 46 34 0 1 7 -4 3 + 160 46 34 0 1 7 -3 3 + 160 48 34 0 1 4 -6 0 + 160 50 34 0 1 5 -6 2 + 160 52 34 0 1 5 -5 0 + 160 54 34 0 1 5 -4 0 + 160 56 34 0 1 6 -5 2 + 160 58 34 0 1 6 -3 0 + 160 60 34 0 1 5 -3 0 + 160 62 34 0 1 6 -4 0 + 141 0 35 0 -1 -2 -3 0 + 141 2 35 0 -1 -2 -4 0 + 141 4 35 0 -1 -3 -3 0 + 141 6 35 0 -1 -1 -4 0 + 141 8 35 0 -1 0 -5 0 + 141 10 35 0 -1 -1 -5 2 + 141 12 35 0 -1 1 -6 2 + 141 14 35 0 -1 0 -4 0 + 141 16 35 0 -1 -1 -3 0 + 141 18 35 0 -1 0 -3 0 + 141 20 35 0 -1 3 -7 3 + 141 20 35 0 -1 4 -7 3 + 141 22 35 0 -1 2 -6 0 + 141 24 35 0 -1 1 -5 0 + 141 26 35 0 -1 1 -4 0 + 141 28 35 0 -1 2 -5 0 + 141 30 35 0 -1 1 -3 0 + 141 32 35 0 -1 0 -2 0 + 141 34 35 0 -1 0 -1 0 + 141 36 35 0 -1 -1 0 0 + 141 38 35 0 -1 -1 -1 0 + 141 40 35 0 -1 -4 0 0 + 141 42 35 0 -1 -3 0 0 + 141 44 35 0 -1 -3 -1 0 + 141 46 35 0 -1 -5 0 0 + 141 48 35 0 -1 -5 -1 2 + 141 50 35 0 -1 -4 -1 0 + 141 52 35 0 -1 -2 -1 0 + 141 54 35 0 -1 -1 -2 0 + 141 56 35 0 -1 -2 -2 0 + 141 58 35 0 -1 -3 -2 0 + 141 60 35 0 -1 -4 -3 3 + 141 60 35 0 -1 -3 -4 3 + 141 62 35 0 -1 -4 -2 0 + 142 0 35 0 -1 -4 3 0 + 142 2 35 0 -1 -4 2 0 + 142 4 35 0 -1 -5 3 0 + 142 6 35 0 -1 -6 4 0 + 142 8 35 0 -1 -5 1 0 + 142 10 35 0 -1 -6 3 0 + 142 12 35 0 -1 -7 4 3 + 142 12 35 0 -1 -7 3 3 + 142 14 35 0 -1 -6 2 0 + 142 16 35 0 -1 -6 1 2 + 142 18 35 0 -1 -5 2 0 + 142 20 35 0 -1 -4 1 0 + 142 22 35 0 -1 -3 1 0 + 142 24 35 0 -1 -3 2 0 + 142 26 35 0 -1 -2 1 0 + 142 28 35 0 -1 -2 0 0 + 142 30 35 0 -1 -3 3 0 + 142 32 35 0 -1 -2 3 0 + 142 34 35 0 -1 -2 2 0 + 142 36 35 0 -1 0 0 0 + 142 38 35 0 -1 -1 1 0 + 142 40 35 0 -1 -1 2 4 + 142 42 35 0 -1 -2 4 0 + 142 44 35 0 -1 -3 4 0 + 142 46 35 0 -1 -3 5 0 + 142 48 35 0 -1 -4 6 0 + 142 50 35 0 -1 -4 5 0 + 142 52 35 0 -1 -5 6 2 + 142 54 35 0 -1 -5 4 0 + 142 56 35 0 -1 -5 5 0 + 142 58 35 0 -1 -4 4 0 + 142 62 35 0 -1 -6 5 2 + 143 0 35 0 -1 2 2 0 + 143 2 35 0 -1 1 3 0 + 143 4 35 0 -1 2 3 0 + 143 6 35 0 -1 0 4 0 + 143 8 35 0 -1 3 3 0 + 143 10 35 0 -1 -1 4 0 + 143 12 35 0 -1 -1 5 0 + 143 14 35 0 -1 4 2 0 + 143 16 35 0 -1 3 4 3 + 143 16 35 0 -1 4 3 3 + 143 18 35 0 -1 2 4 0 + 143 20 35 0 -1 1 4 0 + 143 22 35 0 -1 1 5 2 + 143 24 35 0 -1 0 5 0 + 143 26 35 0 -1 -1 6 2 + 143 28 35 0 -1 -2 6 0 + 143 30 35 0 -1 -2 5 0 + 143 32 35 0 -1 -3 6 0 + 143 34 35 0 -1 -4 7 3 + 143 34 35 0 -1 -3 7 3 + 143 36 35 0 -1 0 1 0 + 143 38 35 0 -1 0 2 0 + 143 40 35 0 -1 -1 3 0 + 143 42 35 0 -1 0 3 0 + 143 44 35 0 -1 1 0 0 + 143 46 35 0 -1 3 1 0 + 143 48 35 0 -1 4 0 0 + 143 50 35 0 -1 5 0 0 + 143 52 35 0 -1 2 1 0 + 143 54 35 0 -1 1 1 0 + 143 56 35 0 -1 1 2 0 + 143 58 35 0 -1 3 2 0 + 143 60 35 0 -1 5 1 2 + 143 62 35 0 -1 4 1 0 + 144 0 35 0 -1 5 -2 0 + 144 2 35 0 -1 4 -2 0 + 144 4 35 0 -1 4 -1 0 + 144 6 35 0 -1 6 -2 0 + 144 8 35 0 -1 3 0 0 + 144 10 35 0 -1 6 -1 2 + 144 12 35 0 -1 5 -1 0 + 144 14 35 0 -1 2 0 0 + 144 16 35 0 -1 3 -1 0 + 144 18 35 0 -1 2 -1 0 + 144 20 35 0 -1 3 -2 0 + 144 22 35 0 -1 2 -2 0 + 144 24 35 0 -1 1 -1 0 + 144 26 35 0 -1 1 -2 0 + 144 28 35 0 -1 2 -3 0 + 144 30 35 0 -1 2 -4 4 + 144 32 35 0 -1 3 -5 0 + 144 34 35 0 -1 3 -4 0 + 144 36 35 0 -1 4 -5 0 + 144 38 35 0 -1 4 -4 0 + 144 40 35 0 -1 3 -3 0 + 144 42 35 0 -1 4 -3 0 + 144 44 35 0 -1 3 -6 0 + 144 46 35 0 -1 7 -4 3 + 144 46 35 0 -1 7 -3 3 + 144 48 35 0 -1 4 -6 0 + 144 50 35 0 -1 5 -6 2 + 144 52 35 0 -1 5 -5 0 + 144 54 35 0 -1 5 -4 0 + 144 56 35 0 -1 6 -5 2 + 144 58 35 0 -1 6 -3 0 + 144 60 35 0 -1 5 -3 0 + 144 62 35 0 -1 6 -4 0 + 145 0 35 1 -1 -2 -3 0 + 145 2 35 1 -1 -2 -4 0 + 145 4 35 1 -1 -3 -3 0 + 145 6 35 1 -1 -1 -4 0 + 145 8 35 1 -1 0 -5 0 + 145 10 35 1 -1 -1 -5 2 + 145 12 35 1 -1 1 -6 2 + 145 14 35 1 -1 0 -4 0 + 145 16 35 1 -1 -1 -3 0 + 145 18 35 1 -1 0 -3 0 + 145 20 35 1 -1 3 -7 3 + 145 20 35 1 -1 4 -7 3 + 145 22 35 1 -1 2 -6 0 + 145 24 35 1 -1 1 -5 0 + 145 26 35 1 -1 1 -4 0 + 145 28 35 1 -1 2 -5 0 + 145 30 35 1 -1 1 -3 0 + 145 32 35 1 -1 0 -2 0 + 145 34 35 1 -1 0 -1 0 + 145 36 35 1 -1 -1 0 0 + 145 38 35 1 -1 -1 -1 0 + 145 40 35 1 -1 -4 0 0 + 145 42 35 1 -1 -3 0 0 + 145 44 35 1 -1 -3 -1 0 + 145 46 35 1 -1 -5 0 0 + 145 48 35 1 -1 -5 -1 2 + 145 50 35 1 -1 -4 -1 0 + 145 52 35 1 -1 -2 -1 0 + 145 54 35 1 -1 -1 -2 0 + 145 56 35 1 -1 -2 -2 0 + 145 58 35 1 -1 -3 -2 0 + 145 60 35 1 -1 -4 -3 3 + 145 60 35 1 -1 -3 -4 3 + 145 62 35 1 -1 -4 -2 0 + 146 0 35 1 -1 -4 3 0 + 146 2 35 1 -1 -4 2 0 + 146 4 35 1 -1 -5 3 0 + 146 6 35 1 -1 -6 4 0 + 146 8 35 1 -1 -5 1 0 + 146 10 35 1 -1 -6 3 0 + 146 12 35 1 -1 -7 4 3 + 146 12 35 1 -1 -7 3 3 + 146 14 35 1 -1 -6 2 0 + 146 16 35 1 -1 -6 1 2 + 146 18 35 1 -1 -5 2 0 + 146 20 35 1 -1 -4 1 0 + 146 22 35 1 -1 -3 1 0 + 146 24 35 1 -1 -3 2 0 + 146 26 35 1 -1 -2 1 0 + 146 28 35 1 -1 -2 0 0 + 146 30 35 1 -1 -3 3 0 + 146 32 35 1 -1 -2 3 0 + 146 34 35 1 -1 -2 2 0 + 146 36 35 1 -1 0 0 0 + 146 38 35 1 -1 -1 1 0 + 146 40 35 1 -1 -1 2 4 + 146 42 35 1 -1 -2 4 0 + 146 44 35 1 -1 -3 4 0 + 146 46 35 1 -1 -3 5 0 + 146 48 35 1 -1 -4 6 0 + 146 50 35 1 -1 -4 5 0 + 146 52 35 1 -1 -5 6 2 + 146 54 35 1 -1 -5 4 0 + 146 56 35 1 -1 -5 5 0 + 146 58 35 1 -1 -4 4 0 + 146 62 35 1 -1 -6 5 2 + 147 0 35 1 -1 2 2 0 + 147 2 35 1 -1 1 3 0 + 147 4 35 1 -1 2 3 0 + 147 6 35 1 -1 0 4 0 + 147 8 35 1 -1 3 3 0 + 147 10 35 1 -1 -1 4 0 + 147 12 35 1 -1 -1 5 0 + 147 14 35 1 -1 4 2 0 + 147 16 35 1 -1 3 4 3 + 147 16 35 1 -1 4 3 3 + 147 18 35 1 -1 2 4 0 + 147 20 35 1 -1 1 4 0 + 147 22 35 1 -1 1 5 2 + 147 24 35 1 -1 0 5 0 + 147 26 35 1 -1 -1 6 2 + 147 28 35 1 -1 -2 6 0 + 147 30 35 1 -1 -2 5 0 + 147 32 35 1 -1 -3 6 0 + 147 34 35 1 -1 -4 7 3 + 147 34 35 1 -1 -3 7 3 + 147 36 35 1 -1 0 1 0 + 147 38 35 1 -1 0 2 0 + 147 40 35 1 -1 -1 3 0 + 147 42 35 1 -1 0 3 0 + 147 44 35 1 -1 1 0 0 + 147 46 35 1 -1 3 1 0 + 147 48 35 1 -1 4 0 0 + 147 50 35 1 -1 5 0 0 + 147 52 35 1 -1 2 1 0 + 147 54 35 1 -1 1 1 0 + 147 56 35 1 -1 1 2 0 + 147 58 35 1 -1 3 2 0 + 147 60 35 1 -1 5 1 2 + 147 62 35 1 -1 4 1 0 + 148 0 35 1 -1 5 -2 0 + 148 2 35 1 -1 4 -2 0 + 148 4 35 1 -1 4 -1 0 + 148 6 35 1 -1 6 -2 0 + 148 8 35 1 -1 3 0 0 + 148 10 35 1 -1 6 -1 2 + 148 12 35 1 -1 5 -1 0 + 148 14 35 1 -1 2 0 0 + 148 16 35 1 -1 3 -1 0 + 148 18 35 1 -1 2 -1 0 + 148 20 35 1 -1 3 -2 0 + 148 22 35 1 -1 2 -2 0 + 148 24 35 1 -1 1 -1 0 + 148 26 35 1 -1 1 -2 0 + 148 28 35 1 -1 2 -3 0 + 148 30 35 1 -1 2 -4 4 + 148 32 35 1 -1 3 -5 0 + 148 34 35 1 -1 3 -4 0 + 148 36 35 1 -1 4 -5 0 + 148 38 35 1 -1 4 -4 0 + 148 40 35 1 -1 3 -3 0 + 148 42 35 1 -1 4 -3 0 + 148 44 35 1 -1 3 -6 0 + 148 46 35 1 -1 7 -4 3 + 148 46 35 1 -1 7 -3 3 + 148 48 35 1 -1 4 -6 0 + 148 50 35 1 -1 5 -6 2 + 148 52 35 1 -1 5 -5 0 + 148 54 35 1 -1 5 -4 0 + 148 56 35 1 -1 6 -5 2 + 148 58 35 1 -1 6 -3 0 + 148 60 35 1 -1 5 -3 0 + 148 62 35 1 -1 6 -4 0 + 149 0 35 -1 0 -2 -3 0 + 149 2 35 -1 0 -2 -4 0 + 149 4 35 -1 0 -3 -3 0 + 149 6 35 -1 0 -1 -4 0 + 149 8 35 -1 0 0 -5 0 + 149 10 35 -1 0 -1 -5 2 + 149 12 35 -1 0 1 -6 2 + 149 14 35 -1 0 0 -4 0 + 149 16 35 -1 0 -1 -3 0 + 149 18 35 -1 0 0 -3 0 + 149 20 35 -1 0 3 -7 3 + 149 20 35 -1 0 4 -7 3 + 149 22 35 -1 0 2 -6 0 + 149 24 35 -1 0 1 -5 0 + 149 26 35 -1 0 1 -4 0 + 149 28 35 -1 0 2 -5 0 + 149 30 35 -1 0 1 -3 0 + 149 32 35 -1 0 0 -2 0 + 149 34 35 -1 0 0 -1 0 + 149 36 35 -1 0 -1 0 0 + 149 38 35 -1 0 -1 -1 0 + 149 40 35 -1 0 -4 0 0 + 149 42 35 -1 0 -3 0 0 + 149 44 35 -1 0 -3 -1 0 + 149 46 35 -1 0 -5 0 0 + 149 48 35 -1 0 -5 -1 2 + 149 50 35 -1 0 -4 -1 0 + 149 52 35 -1 0 -2 -1 0 + 149 54 35 -1 0 -1 -2 0 + 149 56 35 -1 0 -2 -2 0 + 149 58 35 -1 0 -3 -2 0 + 149 60 35 -1 0 -4 -3 3 + 149 60 35 -1 0 -3 -4 3 + 149 62 35 -1 0 -4 -2 0 + 150 0 35 -1 0 -4 3 0 + 150 2 35 -1 0 -4 2 0 + 150 4 35 -1 0 -5 3 0 + 150 6 35 -1 0 -6 4 0 + 150 8 35 -1 0 -5 1 0 + 150 10 35 -1 0 -6 3 0 + 150 12 35 -1 0 -7 4 3 + 150 12 35 -1 0 -7 3 3 + 150 14 35 -1 0 -6 2 0 + 150 16 35 -1 0 -6 1 2 + 150 18 35 -1 0 -5 2 0 + 150 20 35 -1 0 -4 1 0 + 150 22 35 -1 0 -3 1 0 + 150 24 35 -1 0 -3 2 0 + 150 26 35 -1 0 -2 1 0 + 150 28 35 -1 0 -2 0 0 + 150 30 35 -1 0 -3 3 0 + 150 32 35 -1 0 -2 3 0 + 150 34 35 -1 0 -2 2 0 + 150 36 35 -1 0 0 0 0 + 150 38 35 -1 0 -1 1 0 + 150 40 35 -1 0 -1 2 4 + 150 42 35 -1 0 -2 4 0 + 150 44 35 -1 0 -3 4 0 + 150 46 35 -1 0 -3 5 0 + 150 48 35 -1 0 -4 6 0 + 150 50 35 -1 0 -4 5 0 + 150 52 35 -1 0 -5 6 2 + 150 54 35 -1 0 -5 4 0 + 150 56 35 -1 0 -5 5 0 + 150 58 35 -1 0 -4 4 0 + 150 62 35 -1 0 -6 5 2 + 151 0 35 -1 0 2 2 0 + 151 2 35 -1 0 1 3 0 + 151 4 35 -1 0 2 3 0 + 151 6 35 -1 0 0 4 0 + 151 8 35 -1 0 3 3 0 + 151 10 35 -1 0 -1 4 0 + 151 12 35 -1 0 -1 5 0 + 151 14 35 -1 0 4 2 0 + 151 16 35 -1 0 3 4 3 + 151 16 35 -1 0 4 3 3 + 151 18 35 -1 0 2 4 0 + 151 20 35 -1 0 1 4 0 + 151 22 35 -1 0 1 5 2 + 151 24 35 -1 0 0 5 0 + 151 26 35 -1 0 -1 6 2 + 151 28 35 -1 0 -2 6 0 + 151 30 35 -1 0 -2 5 0 + 151 32 35 -1 0 -3 6 0 + 151 34 35 -1 0 -4 7 3 + 151 34 35 -1 0 -3 7 3 + 151 36 35 -1 0 0 1 0 + 151 38 35 -1 0 0 2 0 + 151 40 35 -1 0 -1 3 0 + 151 42 35 -1 0 0 3 0 + 151 44 35 -1 0 1 0 0 + 151 46 35 -1 0 3 1 0 + 151 48 35 -1 0 4 0 0 + 151 50 35 -1 0 5 0 0 + 151 52 35 -1 0 2 1 0 + 151 54 35 -1 0 1 1 0 + 151 56 35 -1 0 1 2 0 + 151 58 35 -1 0 3 2 0 + 151 60 35 -1 0 5 1 2 + 151 62 35 -1 0 4 1 0 + 152 0 35 -1 0 5 -2 0 + 152 2 35 -1 0 4 -2 0 + 152 4 35 -1 0 4 -1 0 + 152 6 35 -1 0 6 -2 0 + 152 8 35 -1 0 3 0 0 + 152 10 35 -1 0 6 -1 2 + 152 12 35 -1 0 5 -1 0 + 152 14 35 -1 0 2 0 0 + 152 16 35 -1 0 3 -1 0 + 152 18 35 -1 0 2 -1 0 + 152 20 35 -1 0 3 -2 0 + 152 22 35 -1 0 2 -2 0 + 152 24 35 -1 0 1 -1 0 + 152 26 35 -1 0 1 -2 0 + 152 28 35 -1 0 2 -3 0 + 152 30 35 -1 0 2 -4 4 + 152 32 35 -1 0 3 -5 0 + 152 34 35 -1 0 3 -4 0 + 152 36 35 -1 0 4 -5 0 + 152 38 35 -1 0 4 -4 0 + 152 40 35 -1 0 3 -3 0 + 152 42 35 -1 0 4 -3 0 + 152 44 35 -1 0 3 -6 0 + 152 46 35 -1 0 7 -4 3 + 152 46 35 -1 0 7 -3 3 + 152 48 35 -1 0 4 -6 0 + 152 50 35 -1 0 5 -6 2 + 152 52 35 -1 0 5 -5 0 + 152 54 35 -1 0 5 -4 0 + 152 56 35 -1 0 6 -5 2 + 152 58 35 -1 0 6 -3 0 + 152 60 35 -1 0 5 -3 0 + 152 62 35 -1 0 6 -4 0 + 137 0 35 0 0 -2 -3 0 + 137 2 35 0 0 -2 -4 0 + 137 4 35 0 0 -3 -3 0 + 137 6 35 0 0 -1 -4 0 + 137 8 35 0 0 0 -5 0 + 137 10 35 0 0 -1 -5 2 + 137 12 35 0 0 1 -6 2 + 137 14 35 0 0 0 -4 0 + 137 16 35 0 0 -1 -3 0 + 137 18 35 0 0 0 -3 0 + 137 20 35 0 0 3 -7 3 + 137 20 35 0 0 4 -7 3 + 137 22 35 0 0 2 -6 0 + 137 24 35 0 0 1 -5 0 + 137 26 35 0 0 1 -4 0 + 137 28 35 0 0 2 -5 0 + 137 30 35 0 0 1 -3 0 + 137 32 35 0 0 0 -2 0 + 137 34 35 0 0 0 -1 0 + 137 36 35 0 0 -1 0 0 + 137 38 35 0 0 -1 -1 0 + 137 40 35 0 0 -4 0 0 + 137 42 35 0 0 -3 0 0 + 137 44 35 0 0 -3 -1 0 + 137 46 35 0 0 -5 0 0 + 137 48 35 0 0 -5 -1 2 + 137 50 35 0 0 -4 -1 0 + 137 52 35 0 0 -2 -1 0 + 137 54 35 0 0 -1 -2 0 + 137 56 35 0 0 -2 -2 0 + 137 58 35 0 0 -3 -2 0 + 137 60 35 0 0 -4 -3 3 + 137 60 35 0 0 -3 -4 3 + 137 62 35 0 0 -4 -2 0 + 138 0 35 0 0 -4 3 0 + 138 2 35 0 0 -4 2 0 + 138 4 35 0 0 -5 3 0 + 138 6 35 0 0 -6 4 0 + 138 8 35 0 0 -5 1 0 + 138 10 35 0 0 -6 3 0 + 138 12 35 0 0 -7 4 3 + 138 12 35 0 0 -7 3 3 + 138 14 35 0 0 -6 2 0 + 138 16 35 0 0 -6 1 2 + 138 18 35 0 0 -5 2 0 + 138 20 35 0 0 -4 1 0 + 138 22 35 0 0 -3 1 0 + 138 24 35 0 0 -3 2 0 + 138 26 35 0 0 -2 1 0 + 138 28 35 0 0 -2 0 0 + 138 30 35 0 0 -3 3 0 + 138 32 35 0 0 -2 3 0 + 138 34 35 0 0 -2 2 0 + 138 36 35 0 0 0 0 0 + 138 38 35 0 0 -1 1 0 + 138 40 35 0 0 -1 2 4 + 138 42 35 0 0 -2 4 0 + 138 44 35 0 0 -3 4 0 + 138 46 35 0 0 -3 5 0 + 138 48 35 0 0 -4 6 0 + 138 50 35 0 0 -4 5 0 + 138 52 35 0 0 -5 6 2 + 138 54 35 0 0 -5 4 0 + 138 56 35 0 0 -5 5 0 + 138 58 35 0 0 -4 4 0 + 138 62 35 0 0 -6 5 2 + 139 0 35 0 0 2 2 0 + 139 2 35 0 0 1 3 0 + 139 4 35 0 0 2 3 0 + 139 6 35 0 0 0 4 0 + 139 8 35 0 0 3 3 0 + 139 10 35 0 0 -1 4 0 + 139 12 35 0 0 -1 5 0 + 139 14 35 0 0 4 2 0 + 139 16 35 0 0 3 4 3 + 139 16 35 0 0 4 3 3 + 139 18 35 0 0 2 4 0 + 139 20 35 0 0 1 4 0 + 139 22 35 0 0 1 5 2 + 139 24 35 0 0 0 5 0 + 139 26 35 0 0 -1 6 2 + 139 28 35 0 0 -2 6 0 + 139 30 35 0 0 -2 5 0 + 139 32 35 0 0 -3 6 0 + 139 34 35 0 0 -4 7 3 + 139 34 35 0 0 -3 7 3 + 139 36 35 0 0 0 1 0 + 139 38 35 0 0 0 2 0 + 139 40 35 0 0 -1 3 0 + 139 42 35 0 0 0 3 0 + 139 44 35 0 0 1 0 0 + 139 46 35 0 0 3 1 0 + 139 48 35 0 0 4 0 0 + 139 50 35 0 0 5 0 0 + 139 52 35 0 0 2 1 0 + 139 54 35 0 0 1 1 0 + 139 56 35 0 0 1 2 0 + 139 58 35 0 0 3 2 0 + 139 60 35 0 0 5 1 2 + 139 62 35 0 0 4 1 0 + 140 0 35 0 0 5 -2 0 + 140 2 35 0 0 4 -2 0 + 140 4 35 0 0 4 -1 0 + 140 6 35 0 0 6 -2 0 + 140 8 35 0 0 3 0 0 + 140 10 35 0 0 6 -1 2 + 140 12 35 0 0 5 -1 0 + 140 14 35 0 0 2 0 0 + 140 16 35 0 0 3 -1 0 + 140 18 35 0 0 2 -1 0 + 140 20 35 0 0 3 -2 0 + 140 22 35 0 0 2 -2 0 + 140 24 35 0 0 1 -1 0 + 140 26 35 0 0 1 -2 0 + 140 28 35 0 0 2 -3 0 + 140 30 35 0 0 2 -4 4 + 140 32 35 0 0 3 -5 0 + 140 34 35 0 0 3 -4 0 + 140 36 35 0 0 4 -5 0 + 140 38 35 0 0 4 -4 0 + 140 40 35 0 0 3 -3 0 + 140 42 35 0 0 4 -3 0 + 140 44 35 0 0 3 -6 0 + 140 46 35 0 0 7 -4 3 + 140 46 35 0 0 7 -3 3 + 140 48 35 0 0 4 -6 0 + 140 50 35 0 0 5 -6 2 + 140 52 35 0 0 5 -5 0 + 140 54 35 0 0 5 -4 0 + 140 56 35 0 0 6 -5 2 + 140 58 35 0 0 6 -3 0 + 140 60 35 0 0 5 -3 0 + 140 62 35 0 0 6 -4 0 + 153 0 35 1 0 -2 -3 0 + 153 2 35 1 0 -2 -4 0 + 153 4 35 1 0 -3 -3 0 + 153 6 35 1 0 -1 -4 0 + 153 8 35 1 0 0 -5 0 + 153 10 35 1 0 -1 -5 2 + 153 12 35 1 0 1 -6 2 + 153 14 35 1 0 0 -4 0 + 153 16 35 1 0 -1 -3 0 + 153 18 35 1 0 0 -3 0 + 153 20 35 1 0 3 -7 3 + 153 20 35 1 0 4 -7 3 + 153 22 35 1 0 2 -6 0 + 153 24 35 1 0 1 -5 0 + 153 26 35 1 0 1 -4 0 + 153 28 35 1 0 2 -5 0 + 153 30 35 1 0 1 -3 0 + 153 32 35 1 0 0 -2 0 + 153 34 35 1 0 0 -1 0 + 153 36 35 1 0 -1 0 0 + 153 38 35 1 0 -1 -1 0 + 153 40 35 1 0 -4 0 0 + 153 42 35 1 0 -3 0 0 + 153 44 35 1 0 -3 -1 0 + 153 46 35 1 0 -5 0 0 + 153 48 35 1 0 -5 -1 2 + 153 50 35 1 0 -4 -1 0 + 153 52 35 1 0 -2 -1 0 + 153 54 35 1 0 -1 -2 0 + 153 56 35 1 0 -2 -2 0 + 153 58 35 1 0 -3 -2 0 + 153 60 35 1 0 -4 -3 3 + 153 60 35 1 0 -3 -4 3 + 153 62 35 1 0 -4 -2 0 + 154 0 35 1 0 -4 3 0 + 154 2 35 1 0 -4 2 0 + 154 4 35 1 0 -5 3 0 + 154 6 35 1 0 -6 4 0 + 154 8 35 1 0 -5 1 0 + 154 10 35 1 0 -6 3 0 + 154 12 35 1 0 -7 4 3 + 154 12 35 1 0 -7 3 3 + 154 14 35 1 0 -6 2 0 + 154 16 35 1 0 -6 1 2 + 154 18 35 1 0 -5 2 0 + 154 20 35 1 0 -4 1 0 + 154 22 35 1 0 -3 1 0 + 154 24 35 1 0 -3 2 0 + 154 26 35 1 0 -2 1 0 + 154 28 35 1 0 -2 0 0 + 154 30 35 1 0 -3 3 0 + 154 32 35 1 0 -2 3 0 + 154 34 35 1 0 -2 2 0 + 154 36 35 1 0 0 0 0 + 154 38 35 1 0 -1 1 0 + 154 40 35 1 0 -1 2 4 + 154 42 35 1 0 -2 4 0 + 154 44 35 1 0 -3 4 0 + 154 46 35 1 0 -3 5 0 + 154 48 35 1 0 -4 6 0 + 154 50 35 1 0 -4 5 0 + 154 52 35 1 0 -5 6 2 + 154 54 35 1 0 -5 4 0 + 154 56 35 1 0 -5 5 0 + 154 58 35 1 0 -4 4 0 + 154 62 35 1 0 -6 5 2 + 155 0 35 1 0 2 2 0 + 155 2 35 1 0 1 3 0 + 155 4 35 1 0 2 3 0 + 155 6 35 1 0 0 4 0 + 155 8 35 1 0 3 3 0 + 155 10 35 1 0 -1 4 0 + 155 12 35 1 0 -1 5 0 + 155 14 35 1 0 4 2 0 + 155 16 35 1 0 3 4 3 + 155 16 35 1 0 4 3 3 + 155 18 35 1 0 2 4 0 + 155 20 35 1 0 1 4 0 + 155 22 35 1 0 1 5 2 + 155 24 35 1 0 0 5 0 + 155 26 35 1 0 -1 6 2 + 155 28 35 1 0 -2 6 0 + 155 30 35 1 0 -2 5 0 + 155 32 35 1 0 -3 6 0 + 155 34 35 1 0 -4 7 3 + 155 34 35 1 0 -3 7 3 + 155 36 35 1 0 0 1 0 + 155 38 35 1 0 0 2 0 + 155 40 35 1 0 -1 3 0 + 155 42 35 1 0 0 3 0 + 155 44 35 1 0 1 0 0 + 155 46 35 1 0 3 1 0 + 155 48 35 1 0 4 0 0 + 155 50 35 1 0 5 0 0 + 155 52 35 1 0 2 1 0 + 155 54 35 1 0 1 1 0 + 155 56 35 1 0 1 2 0 + 155 58 35 1 0 3 2 0 + 155 60 35 1 0 5 1 2 + 155 62 35 1 0 4 1 0 + 156 0 35 1 0 5 -2 0 + 156 2 35 1 0 4 -2 0 + 156 4 35 1 0 4 -1 0 + 156 6 35 1 0 6 -2 0 + 156 8 35 1 0 3 0 0 + 156 10 35 1 0 6 -1 2 + 156 12 35 1 0 5 -1 0 + 156 14 35 1 0 2 0 0 + 156 16 35 1 0 3 -1 0 + 156 18 35 1 0 2 -1 0 + 156 20 35 1 0 3 -2 0 + 156 22 35 1 0 2 -2 0 + 156 24 35 1 0 1 -1 0 + 156 26 35 1 0 1 -2 0 + 156 28 35 1 0 2 -3 0 + 156 30 35 1 0 2 -4 4 + 156 32 35 1 0 3 -5 0 + 156 34 35 1 0 3 -4 0 + 156 36 35 1 0 4 -5 0 + 156 38 35 1 0 4 -4 0 + 156 40 35 1 0 3 -3 0 + 156 42 35 1 0 4 -3 0 + 156 44 35 1 0 3 -6 0 + 156 46 35 1 0 7 -4 3 + 156 46 35 1 0 7 -3 3 + 156 48 35 1 0 4 -6 0 + 156 50 35 1 0 5 -6 2 + 156 52 35 1 0 5 -5 0 + 156 54 35 1 0 5 -4 0 + 156 56 35 1 0 6 -5 2 + 156 58 35 1 0 6 -3 0 + 156 60 35 1 0 5 -3 0 + 156 62 35 1 0 6 -4 0 + 157 0 35 -1 1 -2 -3 0 + 157 2 35 -1 1 -2 -4 0 + 157 4 35 -1 1 -3 -3 0 + 157 6 35 -1 1 -1 -4 0 + 157 8 35 -1 1 0 -5 0 + 157 10 35 -1 1 -1 -5 2 + 157 12 35 -1 1 1 -6 2 + 157 14 35 -1 1 0 -4 0 + 157 16 35 -1 1 -1 -3 0 + 157 18 35 -1 1 0 -3 0 + 157 20 35 -1 1 3 -7 3 + 157 20 35 -1 1 4 -7 3 + 157 22 35 -1 1 2 -6 0 + 157 24 35 -1 1 1 -5 0 + 157 26 35 -1 1 1 -4 0 + 157 28 35 -1 1 2 -5 0 + 157 30 35 -1 1 1 -3 0 + 157 32 35 -1 1 0 -2 0 + 157 34 35 -1 1 0 -1 0 + 157 36 35 -1 1 -1 0 0 + 157 38 35 -1 1 -1 -1 0 + 157 40 35 -1 1 -4 0 0 + 157 42 35 -1 1 -3 0 0 + 157 44 35 -1 1 -3 -1 0 + 157 46 35 -1 1 -5 0 0 + 157 48 35 -1 1 -5 -1 2 + 157 50 35 -1 1 -4 -1 0 + 157 52 35 -1 1 -2 -1 0 + 157 54 35 -1 1 -1 -2 0 + 157 56 35 -1 1 -2 -2 0 + 157 58 35 -1 1 -3 -2 0 + 157 60 35 -1 1 -4 -3 3 + 157 60 35 -1 1 -3 -4 3 + 157 62 35 -1 1 -4 -2 0 + 158 0 35 -1 1 -4 3 0 + 158 2 35 -1 1 -4 2 0 + 158 4 35 -1 1 -5 3 0 + 158 6 35 -1 1 -6 4 0 + 158 8 35 -1 1 -5 1 0 + 158 10 35 -1 1 -6 3 0 + 158 12 35 -1 1 -7 4 3 + 158 12 35 -1 1 -7 3 3 + 158 14 35 -1 1 -6 2 0 + 158 16 35 -1 1 -6 1 2 + 158 18 35 -1 1 -5 2 0 + 158 20 35 -1 1 -4 1 0 + 158 22 35 -1 1 -3 1 0 + 158 24 35 -1 1 -3 2 0 + 158 26 35 -1 1 -2 1 0 + 158 28 35 -1 1 -2 0 0 + 158 30 35 -1 1 -3 3 0 + 158 32 35 -1 1 -2 3 0 + 158 34 35 -1 1 -2 2 0 + 158 36 35 -1 1 0 0 0 + 158 38 35 -1 1 -1 1 0 + 158 40 35 -1 1 -1 2 4 + 158 42 35 -1 1 -2 4 0 + 158 44 35 -1 1 -3 4 0 + 158 46 35 -1 1 -3 5 0 + 158 48 35 -1 1 -4 6 0 + 158 50 35 -1 1 -4 5 0 + 158 52 35 -1 1 -5 6 2 + 158 54 35 -1 1 -5 4 0 + 158 56 35 -1 1 -5 5 0 + 158 58 35 -1 1 -4 4 0 + 158 62 35 -1 1 -6 5 2 + 159 0 35 -1 1 2 2 0 + 159 2 35 -1 1 1 3 0 + 159 4 35 -1 1 2 3 0 + 159 6 35 -1 1 0 4 0 + 159 8 35 -1 1 3 3 0 + 159 10 35 -1 1 -1 4 0 + 159 12 35 -1 1 -1 5 0 + 159 14 35 -1 1 4 2 0 + 159 16 35 -1 1 3 4 3 + 159 16 35 -1 1 4 3 3 + 159 18 35 -1 1 2 4 0 + 159 20 35 -1 1 1 4 0 + 159 22 35 -1 1 1 5 2 + 159 24 35 -1 1 0 5 0 + 159 26 35 -1 1 -1 6 2 + 159 28 35 -1 1 -2 6 0 + 159 30 35 -1 1 -2 5 0 + 159 32 35 -1 1 -3 6 0 + 159 34 35 -1 1 -4 7 3 + 159 34 35 -1 1 -3 7 3 + 159 36 35 -1 1 0 1 0 + 159 38 35 -1 1 0 2 0 + 159 40 35 -1 1 -1 3 0 + 159 42 35 -1 1 0 3 0 + 159 44 35 -1 1 1 0 0 + 159 46 35 -1 1 3 1 0 + 159 48 35 -1 1 4 0 0 + 159 50 35 -1 1 5 0 0 + 159 52 35 -1 1 2 1 0 + 159 54 35 -1 1 1 1 0 + 159 56 35 -1 1 1 2 0 + 159 58 35 -1 1 3 2 0 + 159 60 35 -1 1 5 1 2 + 159 62 35 -1 1 4 1 0 + 160 0 35 -1 1 5 -2 0 + 160 2 35 -1 1 4 -2 0 + 160 4 35 -1 1 4 -1 0 + 160 6 35 -1 1 6 -2 0 + 160 8 35 -1 1 3 0 0 + 160 10 35 -1 1 6 -1 2 + 160 12 35 -1 1 5 -1 0 + 160 14 35 -1 1 2 0 0 + 160 16 35 -1 1 3 -1 0 + 160 18 35 -1 1 2 -1 0 + 160 20 35 -1 1 3 -2 0 + 160 22 35 -1 1 2 -2 0 + 160 24 35 -1 1 1 -1 0 + 160 26 35 -1 1 1 -2 0 + 160 28 35 -1 1 2 -3 0 + 160 30 35 -1 1 2 -4 4 + 160 32 35 -1 1 3 -5 0 + 160 34 35 -1 1 3 -4 0 + 160 36 35 -1 1 4 -5 0 + 160 38 35 -1 1 4 -4 0 + 160 40 35 -1 1 3 -3 0 + 160 42 35 -1 1 4 -3 0 + 160 44 35 -1 1 3 -6 0 + 160 46 35 -1 1 7 -4 3 + 160 46 35 -1 1 7 -3 3 + 160 48 35 -1 1 4 -6 0 + 160 50 35 -1 1 5 -6 2 + 160 52 35 -1 1 5 -5 0 + 160 54 35 -1 1 5 -4 0 + 160 56 35 -1 1 6 -5 2 + 160 58 35 -1 1 6 -3 0 + 160 60 35 -1 1 5 -3 0 + 160 62 35 -1 1 6 -4 0 + 161 0 35 0 1 -2 -3 0 + 161 2 35 0 1 -2 -4 0 + 161 4 35 0 1 -3 -3 0 + 161 6 35 0 1 -1 -4 0 + 161 8 35 0 1 0 -5 0 + 161 10 35 0 1 -1 -5 2 + 161 12 35 0 1 1 -6 2 + 161 14 35 0 1 0 -4 0 + 161 16 35 0 1 -1 -3 0 + 161 18 35 0 1 0 -3 0 + 161 20 35 0 1 3 -7 3 + 161 20 35 0 1 4 -7 3 + 161 22 35 0 1 2 -6 0 + 161 24 35 0 1 1 -5 0 + 161 26 35 0 1 1 -4 0 + 161 28 35 0 1 2 -5 0 + 161 30 35 0 1 1 -3 0 + 161 32 35 0 1 0 -2 0 + 161 34 35 0 1 0 -1 0 + 161 36 35 0 1 -1 0 0 + 161 38 35 0 1 -1 -1 0 + 161 40 35 0 1 -4 0 0 + 161 42 35 0 1 -3 0 0 + 161 44 35 0 1 -3 -1 0 + 161 46 35 0 1 -5 0 0 + 161 48 35 0 1 -5 -1 2 + 161 50 35 0 1 -4 -1 0 + 161 52 35 0 1 -2 -1 0 + 161 54 35 0 1 -1 -2 0 + 161 56 35 0 1 -2 -2 0 + 161 58 35 0 1 -3 -2 0 + 161 60 35 0 1 -4 -3 3 + 161 60 35 0 1 -3 -4 3 + 161 62 35 0 1 -4 -2 0 + 162 0 35 0 1 -4 3 0 + 162 2 35 0 1 -4 2 0 + 162 4 35 0 1 -5 3 0 + 162 6 35 0 1 -6 4 0 + 162 8 35 0 1 -5 1 0 + 162 10 35 0 1 -6 3 0 + 162 12 35 0 1 -7 4 3 + 162 12 35 0 1 -7 3 3 + 162 14 35 0 1 -6 2 0 + 162 16 35 0 1 -6 1 2 + 162 18 35 0 1 -5 2 0 + 162 20 35 0 1 -4 1 0 + 162 22 35 0 1 -3 1 0 + 162 24 35 0 1 -3 2 0 + 162 26 35 0 1 -2 1 0 + 162 28 35 0 1 -2 0 0 + 162 30 35 0 1 -3 3 0 + 162 32 35 0 1 -2 3 0 + 162 34 35 0 1 -2 2 0 + 162 36 35 0 1 0 0 0 + 162 38 35 0 1 -1 1 0 + 162 40 35 0 1 -1 2 4 + 162 42 35 0 1 -2 4 0 + 162 44 35 0 1 -3 4 0 + 162 46 35 0 1 -3 5 0 + 162 48 35 0 1 -4 6 0 + 162 50 35 0 1 -4 5 0 + 162 52 35 0 1 -5 6 2 + 162 54 35 0 1 -5 4 0 + 162 56 35 0 1 -5 5 0 + 162 58 35 0 1 -4 4 0 + 162 62 35 0 1 -6 5 2 + 163 0 35 0 1 2 2 0 + 163 2 35 0 1 1 3 0 + 163 4 35 0 1 2 3 0 + 163 6 35 0 1 0 4 0 + 163 8 35 0 1 3 3 0 + 163 10 35 0 1 -1 4 0 + 163 12 35 0 1 -1 5 0 + 163 14 35 0 1 4 2 0 + 163 16 35 0 1 3 4 3 + 163 16 35 0 1 4 3 3 + 163 18 35 0 1 2 4 0 + 163 20 35 0 1 1 4 0 + 163 22 35 0 1 1 5 2 + 163 24 35 0 1 0 5 0 + 163 26 35 0 1 -1 6 2 + 163 28 35 0 1 -2 6 0 + 163 30 35 0 1 -2 5 0 + 163 32 35 0 1 -3 6 0 + 163 34 35 0 1 -4 7 3 + 163 34 35 0 1 -3 7 3 + 163 36 35 0 1 0 1 0 + 163 38 35 0 1 0 2 0 + 163 40 35 0 1 -1 3 0 + 163 42 35 0 1 0 3 0 + 163 44 35 0 1 1 0 0 + 163 46 35 0 1 3 1 0 + 163 48 35 0 1 4 0 0 + 163 50 35 0 1 5 0 0 + 163 52 35 0 1 2 1 0 + 163 54 35 0 1 1 1 0 + 163 56 35 0 1 1 2 0 + 163 58 35 0 1 3 2 0 + 163 60 35 0 1 5 1 2 + 163 62 35 0 1 4 1 0 + 164 0 35 0 1 5 -2 0 + 164 2 35 0 1 4 -2 0 + 164 4 35 0 1 4 -1 0 + 164 6 35 0 1 6 -2 0 + 164 8 35 0 1 3 0 0 + 164 10 35 0 1 6 -1 2 + 164 12 35 0 1 5 -1 0 + 164 14 35 0 1 2 0 0 + 164 16 35 0 1 3 -1 0 + 164 18 35 0 1 2 -1 0 + 164 20 35 0 1 3 -2 0 + 164 22 35 0 1 2 -2 0 + 164 24 35 0 1 1 -1 0 + 164 26 35 0 1 1 -2 0 + 164 28 35 0 1 2 -3 0 + 164 30 35 0 1 2 -4 4 + 164 32 35 0 1 3 -5 0 + 164 34 35 0 1 3 -4 0 + 164 36 35 0 1 4 -5 0 + 164 38 35 0 1 4 -4 0 + 164 40 35 0 1 3 -3 0 + 164 42 35 0 1 4 -3 0 + 164 44 35 0 1 3 -6 0 + 164 46 35 0 1 7 -4 3 + 164 46 35 0 1 7 -3 3 + 164 48 35 0 1 4 -6 0 + 164 50 35 0 1 5 -6 2 + 164 52 35 0 1 5 -5 0 + 164 54 35 0 1 5 -4 0 + 164 56 35 0 1 6 -5 2 + 164 58 35 0 1 6 -3 0 + 164 60 35 0 1 5 -3 0 + 164 62 35 0 1 6 -4 0 + 145 0 36 0 -1 -2 -3 0 + 145 2 36 0 -1 -2 -4 0 + 145 4 36 0 -1 -3 -3 0 + 145 6 36 0 -1 -1 -4 0 + 145 8 36 0 -1 0 -5 0 + 145 10 36 0 -1 -1 -5 2 + 145 12 36 0 -1 1 -6 2 + 145 14 36 0 -1 0 -4 0 + 145 16 36 0 -1 -1 -3 0 + 145 18 36 0 -1 0 -3 0 + 145 20 36 0 -1 3 -7 3 + 145 20 36 0 -1 4 -7 3 + 145 22 36 0 -1 2 -6 0 + 145 24 36 0 -1 1 -5 0 + 145 26 36 0 -1 1 -4 0 + 145 28 36 0 -1 2 -5 0 + 145 30 36 0 -1 1 -3 0 + 145 32 36 0 -1 0 -2 0 + 145 34 36 0 -1 0 -1 0 + 145 36 36 0 -1 -1 0 0 + 145 38 36 0 -1 -1 -1 0 + 145 40 36 0 -1 -4 0 0 + 145 42 36 0 -1 -3 0 0 + 145 44 36 0 -1 -3 -1 0 + 145 46 36 0 -1 -5 0 0 + 145 48 36 0 -1 -5 -1 2 + 145 50 36 0 -1 -4 -1 0 + 145 52 36 0 -1 -2 -1 0 + 145 54 36 0 -1 -1 -2 0 + 145 56 36 0 -1 -2 -2 0 + 145 58 36 0 -1 -3 -2 0 + 145 60 36 0 -1 -4 -3 3 + 145 60 36 0 -1 -3 -4 3 + 145 62 36 0 -1 -4 -2 0 + 146 0 36 0 -1 -4 3 0 + 146 2 36 0 -1 -4 2 0 + 146 4 36 0 -1 -5 3 0 + 146 6 36 0 -1 -6 4 0 + 146 8 36 0 -1 -5 1 0 + 146 10 36 0 -1 -6 3 0 + 146 12 36 0 -1 -7 4 3 + 146 12 36 0 -1 -7 3 3 + 146 14 36 0 -1 -6 2 0 + 146 16 36 0 -1 -6 1 2 + 146 18 36 0 -1 -5 2 0 + 146 20 36 0 -1 -4 1 0 + 146 22 36 0 -1 -3 1 0 + 146 24 36 0 -1 -3 2 0 + 146 26 36 0 -1 -2 1 0 + 146 28 36 0 -1 -2 0 0 + 146 30 36 0 -1 -3 3 0 + 146 32 36 0 -1 -2 3 0 + 146 34 36 0 -1 -2 2 0 + 146 36 36 0 -1 0 0 0 + 146 38 36 0 -1 -1 1 0 + 146 40 36 0 -1 -1 2 4 + 146 42 36 0 -1 -2 4 0 + 146 44 36 0 -1 -3 4 0 + 146 46 36 0 -1 -3 5 0 + 146 48 36 0 -1 -4 6 0 + 146 50 36 0 -1 -4 5 0 + 146 52 36 0 -1 -5 6 2 + 146 54 36 0 -1 -5 4 0 + 146 56 36 0 -1 -5 5 0 + 146 58 36 0 -1 -4 4 0 + 146 62 36 0 -1 -6 5 2 + 147 0 36 0 -1 2 2 0 + 147 2 36 0 -1 1 3 0 + 147 4 36 0 -1 2 3 0 + 147 6 36 0 -1 0 4 0 + 147 8 36 0 -1 3 3 0 + 147 10 36 0 -1 -1 4 0 + 147 12 36 0 -1 -1 5 0 + 147 14 36 0 -1 4 2 0 + 147 16 36 0 -1 3 4 3 + 147 16 36 0 -1 4 3 3 + 147 18 36 0 -1 2 4 0 + 147 20 36 0 -1 1 4 0 + 147 22 36 0 -1 1 5 2 + 147 24 36 0 -1 0 5 0 + 147 26 36 0 -1 -1 6 2 + 147 28 36 0 -1 -2 6 0 + 147 30 36 0 -1 -2 5 0 + 147 32 36 0 -1 -3 6 0 + 147 34 36 0 -1 -4 7 3 + 147 34 36 0 -1 -3 7 3 + 147 36 36 0 -1 0 1 0 + 147 38 36 0 -1 0 2 0 + 147 40 36 0 -1 -1 3 0 + 147 42 36 0 -1 0 3 0 + 147 44 36 0 -1 1 0 0 + 147 46 36 0 -1 3 1 0 + 147 48 36 0 -1 4 0 0 + 147 50 36 0 -1 5 0 0 + 147 52 36 0 -1 2 1 0 + 147 54 36 0 -1 1 1 0 + 147 56 36 0 -1 1 2 0 + 147 58 36 0 -1 3 2 0 + 147 60 36 0 -1 5 1 2 + 147 62 36 0 -1 4 1 0 + 148 0 36 0 -1 5 -2 0 + 148 2 36 0 -1 4 -2 0 + 148 4 36 0 -1 4 -1 0 + 148 6 36 0 -1 6 -2 0 + 148 8 36 0 -1 3 0 0 + 148 10 36 0 -1 6 -1 2 + 148 12 36 0 -1 5 -1 0 + 148 14 36 0 -1 2 0 0 + 148 16 36 0 -1 3 -1 0 + 148 18 36 0 -1 2 -1 0 + 148 20 36 0 -1 3 -2 0 + 148 22 36 0 -1 2 -2 0 + 148 24 36 0 -1 1 -1 0 + 148 26 36 0 -1 1 -2 0 + 148 28 36 0 -1 2 -3 0 + 148 30 36 0 -1 2 -4 4 + 148 32 36 0 -1 3 -5 0 + 148 34 36 0 -1 3 -4 0 + 148 36 36 0 -1 4 -5 0 + 148 38 36 0 -1 4 -4 0 + 148 40 36 0 -1 3 -3 0 + 148 42 36 0 -1 4 -3 0 + 148 44 36 0 -1 3 -6 0 + 148 46 36 0 -1 7 -4 3 + 148 46 36 0 -1 7 -3 3 + 148 48 36 0 -1 4 -6 0 + 148 50 36 0 -1 5 -6 2 + 148 52 36 0 -1 5 -5 0 + 148 54 36 0 -1 5 -4 0 + 148 56 36 0 -1 6 -5 2 + 148 58 36 0 -1 6 -3 0 + 148 60 36 0 -1 5 -3 0 + 148 62 36 0 -1 6 -4 0 + 149 0 36 1 -1 -2 -3 0 + 149 2 36 1 -1 -2 -4 0 + 149 4 36 1 -1 -3 -3 0 + 149 6 36 1 -1 -1 -4 0 + 149 8 36 1 -1 0 -5 0 + 149 10 36 1 -1 -1 -5 2 + 149 12 36 1 -1 1 -6 2 + 149 14 36 1 -1 0 -4 0 + 149 16 36 1 -1 -1 -3 0 + 149 18 36 1 -1 0 -3 0 + 149 20 36 1 -1 3 -7 3 + 149 20 36 1 -1 4 -7 3 + 149 22 36 1 -1 2 -6 0 + 149 24 36 1 -1 1 -5 0 + 149 26 36 1 -1 1 -4 0 + 149 28 36 1 -1 2 -5 0 + 149 30 36 1 -1 1 -3 0 + 149 32 36 1 -1 0 -2 0 + 149 34 36 1 -1 0 -1 0 + 149 36 36 1 -1 -1 0 0 + 149 38 36 1 -1 -1 -1 0 + 149 40 36 1 -1 -4 0 0 + 149 42 36 1 -1 -3 0 0 + 149 44 36 1 -1 -3 -1 0 + 149 46 36 1 -1 -5 0 0 + 149 48 36 1 -1 -5 -1 2 + 149 50 36 1 -1 -4 -1 0 + 149 52 36 1 -1 -2 -1 0 + 149 54 36 1 -1 -1 -2 0 + 149 56 36 1 -1 -2 -2 0 + 149 58 36 1 -1 -3 -2 0 + 149 60 36 1 -1 -4 -3 3 + 149 60 36 1 -1 -3 -4 3 + 149 62 36 1 -1 -4 -2 0 + 150 0 36 1 -1 -4 3 0 + 150 2 36 1 -1 -4 2 0 + 150 4 36 1 -1 -5 3 0 + 150 6 36 1 -1 -6 4 0 + 150 8 36 1 -1 -5 1 0 + 150 10 36 1 -1 -6 3 0 + 150 12 36 1 -1 -7 4 3 + 150 12 36 1 -1 -7 3 3 + 150 14 36 1 -1 -6 2 0 + 150 16 36 1 -1 -6 1 2 + 150 18 36 1 -1 -5 2 0 + 150 20 36 1 -1 -4 1 0 + 150 22 36 1 -1 -3 1 0 + 150 24 36 1 -1 -3 2 0 + 150 26 36 1 -1 -2 1 0 + 150 28 36 1 -1 -2 0 0 + 150 30 36 1 -1 -3 3 0 + 150 32 36 1 -1 -2 3 0 + 150 34 36 1 -1 -2 2 0 + 150 36 36 1 -1 0 0 0 + 150 38 36 1 -1 -1 1 0 + 150 40 36 1 -1 -1 2 4 + 150 42 36 1 -1 -2 4 0 + 150 44 36 1 -1 -3 4 0 + 150 46 36 1 -1 -3 5 0 + 150 48 36 1 -1 -4 6 0 + 150 50 36 1 -1 -4 5 0 + 150 52 36 1 -1 -5 6 2 + 150 54 36 1 -1 -5 4 0 + 150 56 36 1 -1 -5 5 0 + 150 58 36 1 -1 -4 4 0 + 150 62 36 1 -1 -6 5 2 + 151 0 36 1 -1 2 2 0 + 151 2 36 1 -1 1 3 0 + 151 4 36 1 -1 2 3 0 + 151 6 36 1 -1 0 4 0 + 151 8 36 1 -1 3 3 0 + 151 10 36 1 -1 -1 4 0 + 151 12 36 1 -1 -1 5 0 + 151 14 36 1 -1 4 2 0 + 151 16 36 1 -1 3 4 3 + 151 16 36 1 -1 4 3 3 + 151 18 36 1 -1 2 4 0 + 151 20 36 1 -1 1 4 0 + 151 22 36 1 -1 1 5 2 + 151 24 36 1 -1 0 5 0 + 151 26 36 1 -1 -1 6 2 + 151 28 36 1 -1 -2 6 0 + 151 30 36 1 -1 -2 5 0 + 151 32 36 1 -1 -3 6 0 + 151 34 36 1 -1 -4 7 3 + 151 34 36 1 -1 -3 7 3 + 151 36 36 1 -1 0 1 0 + 151 38 36 1 -1 0 2 0 + 151 40 36 1 -1 -1 3 0 + 151 42 36 1 -1 0 3 0 + 151 44 36 1 -1 1 0 0 + 151 46 36 1 -1 3 1 0 + 151 48 36 1 -1 4 0 0 + 151 50 36 1 -1 5 0 0 + 151 52 36 1 -1 2 1 0 + 151 54 36 1 -1 1 1 0 + 151 56 36 1 -1 1 2 0 + 151 58 36 1 -1 3 2 0 + 151 60 36 1 -1 5 1 2 + 151 62 36 1 -1 4 1 0 + 152 0 36 1 -1 5 -2 0 + 152 2 36 1 -1 4 -2 0 + 152 4 36 1 -1 4 -1 0 + 152 6 36 1 -1 6 -2 0 + 152 8 36 1 -1 3 0 0 + 152 10 36 1 -1 6 -1 2 + 152 12 36 1 -1 5 -1 0 + 152 14 36 1 -1 2 0 0 + 152 16 36 1 -1 3 -1 0 + 152 18 36 1 -1 2 -1 0 + 152 20 36 1 -1 3 -2 0 + 152 22 36 1 -1 2 -2 0 + 152 24 36 1 -1 1 -1 0 + 152 26 36 1 -1 1 -2 0 + 152 28 36 1 -1 2 -3 0 + 152 30 36 1 -1 2 -4 4 + 152 32 36 1 -1 3 -5 0 + 152 34 36 1 -1 3 -4 0 + 152 36 36 1 -1 4 -5 0 + 152 38 36 1 -1 4 -4 0 + 152 40 36 1 -1 3 -3 0 + 152 42 36 1 -1 4 -3 0 + 152 44 36 1 -1 3 -6 0 + 152 46 36 1 -1 7 -4 3 + 152 46 36 1 -1 7 -3 3 + 152 48 36 1 -1 4 -6 0 + 152 50 36 1 -1 5 -6 2 + 152 52 36 1 -1 5 -5 0 + 152 54 36 1 -1 5 -4 0 + 152 56 36 1 -1 6 -5 2 + 152 58 36 1 -1 6 -3 0 + 152 60 36 1 -1 5 -3 0 + 152 62 36 1 -1 6 -4 0 + 153 0 36 -1 0 -2 -3 0 + 153 2 36 -1 0 -2 -4 0 + 153 4 36 -1 0 -3 -3 0 + 153 6 36 -1 0 -1 -4 0 + 153 8 36 -1 0 0 -5 0 + 153 10 36 -1 0 -1 -5 2 + 153 12 36 -1 0 1 -6 2 + 153 14 36 -1 0 0 -4 0 + 153 16 36 -1 0 -1 -3 0 + 153 18 36 -1 0 0 -3 0 + 153 20 36 -1 0 3 -7 3 + 153 20 36 -1 0 4 -7 3 + 153 22 36 -1 0 2 -6 0 + 153 24 36 -1 0 1 -5 0 + 153 26 36 -1 0 1 -4 0 + 153 28 36 -1 0 2 -5 0 + 153 30 36 -1 0 1 -3 0 + 153 32 36 -1 0 0 -2 0 + 153 34 36 -1 0 0 -1 0 + 153 36 36 -1 0 -1 0 0 + 153 38 36 -1 0 -1 -1 0 + 153 40 36 -1 0 -4 0 0 + 153 42 36 -1 0 -3 0 0 + 153 44 36 -1 0 -3 -1 0 + 153 46 36 -1 0 -5 0 0 + 153 48 36 -1 0 -5 -1 2 + 153 50 36 -1 0 -4 -1 0 + 153 52 36 -1 0 -2 -1 0 + 153 54 36 -1 0 -1 -2 0 + 153 56 36 -1 0 -2 -2 0 + 153 58 36 -1 0 -3 -2 0 + 153 60 36 -1 0 -4 -3 3 + 153 60 36 -1 0 -3 -4 3 + 153 62 36 -1 0 -4 -2 0 + 154 0 36 -1 0 -4 3 0 + 154 2 36 -1 0 -4 2 0 + 154 4 36 -1 0 -5 3 0 + 154 6 36 -1 0 -6 4 0 + 154 8 36 -1 0 -5 1 0 + 154 10 36 -1 0 -6 3 0 + 154 12 36 -1 0 -7 4 3 + 154 12 36 -1 0 -7 3 3 + 154 14 36 -1 0 -6 2 0 + 154 16 36 -1 0 -6 1 2 + 154 18 36 -1 0 -5 2 0 + 154 20 36 -1 0 -4 1 0 + 154 22 36 -1 0 -3 1 0 + 154 24 36 -1 0 -3 2 0 + 154 26 36 -1 0 -2 1 0 + 154 28 36 -1 0 -2 0 0 + 154 30 36 -1 0 -3 3 0 + 154 32 36 -1 0 -2 3 0 + 154 34 36 -1 0 -2 2 0 + 154 36 36 -1 0 0 0 0 + 154 38 36 -1 0 -1 1 0 + 154 40 36 -1 0 -1 2 4 + 154 42 36 -1 0 -2 4 0 + 154 44 36 -1 0 -3 4 0 + 154 46 36 -1 0 -3 5 0 + 154 48 36 -1 0 -4 6 0 + 154 50 36 -1 0 -4 5 0 + 154 52 36 -1 0 -5 6 2 + 154 54 36 -1 0 -5 4 0 + 154 56 36 -1 0 -5 5 0 + 154 58 36 -1 0 -4 4 0 + 154 62 36 -1 0 -6 5 2 + 155 0 36 -1 0 2 2 0 + 155 2 36 -1 0 1 3 0 + 155 4 36 -1 0 2 3 0 + 155 6 36 -1 0 0 4 0 + 155 8 36 -1 0 3 3 0 + 155 10 36 -1 0 -1 4 0 + 155 12 36 -1 0 -1 5 0 + 155 14 36 -1 0 4 2 0 + 155 16 36 -1 0 3 4 3 + 155 16 36 -1 0 4 3 3 + 155 18 36 -1 0 2 4 0 + 155 20 36 -1 0 1 4 0 + 155 22 36 -1 0 1 5 2 + 155 24 36 -1 0 0 5 0 + 155 26 36 -1 0 -1 6 2 + 155 28 36 -1 0 -2 6 0 + 155 30 36 -1 0 -2 5 0 + 155 32 36 -1 0 -3 6 0 + 155 34 36 -1 0 -4 7 3 + 155 34 36 -1 0 -3 7 3 + 155 36 36 -1 0 0 1 0 + 155 38 36 -1 0 0 2 0 + 155 40 36 -1 0 -1 3 0 + 155 42 36 -1 0 0 3 0 + 155 44 36 -1 0 1 0 0 + 155 46 36 -1 0 3 1 0 + 155 48 36 -1 0 4 0 0 + 155 50 36 -1 0 5 0 0 + 155 52 36 -1 0 2 1 0 + 155 54 36 -1 0 1 1 0 + 155 56 36 -1 0 1 2 0 + 155 58 36 -1 0 3 2 0 + 155 60 36 -1 0 5 1 2 + 155 62 36 -1 0 4 1 0 + 156 0 36 -1 0 5 -2 0 + 156 2 36 -1 0 4 -2 0 + 156 4 36 -1 0 4 -1 0 + 156 6 36 -1 0 6 -2 0 + 156 8 36 -1 0 3 0 0 + 156 10 36 -1 0 6 -1 2 + 156 12 36 -1 0 5 -1 0 + 156 14 36 -1 0 2 0 0 + 156 16 36 -1 0 3 -1 0 + 156 18 36 -1 0 2 -1 0 + 156 20 36 -1 0 3 -2 0 + 156 22 36 -1 0 2 -2 0 + 156 24 36 -1 0 1 -1 0 + 156 26 36 -1 0 1 -2 0 + 156 28 36 -1 0 2 -3 0 + 156 30 36 -1 0 2 -4 4 + 156 32 36 -1 0 3 -5 0 + 156 34 36 -1 0 3 -4 0 + 156 36 36 -1 0 4 -5 0 + 156 38 36 -1 0 4 -4 0 + 156 40 36 -1 0 3 -3 0 + 156 42 36 -1 0 4 -3 0 + 156 44 36 -1 0 3 -6 0 + 156 46 36 -1 0 7 -4 3 + 156 46 36 -1 0 7 -3 3 + 156 48 36 -1 0 4 -6 0 + 156 50 36 -1 0 5 -6 2 + 156 52 36 -1 0 5 -5 0 + 156 54 36 -1 0 5 -4 0 + 156 56 36 -1 0 6 -5 2 + 156 58 36 -1 0 6 -3 0 + 156 60 36 -1 0 5 -3 0 + 156 62 36 -1 0 6 -4 0 + 141 0 36 0 0 -2 -3 0 + 141 2 36 0 0 -2 -4 0 + 141 4 36 0 0 -3 -3 0 + 141 6 36 0 0 -1 -4 0 + 141 8 36 0 0 0 -5 0 + 141 10 36 0 0 -1 -5 2 + 141 12 36 0 0 1 -6 2 + 141 14 36 0 0 0 -4 0 + 141 16 36 0 0 -1 -3 0 + 141 18 36 0 0 0 -3 0 + 141 20 36 0 0 3 -7 3 + 141 20 36 0 0 4 -7 3 + 141 22 36 0 0 2 -6 0 + 141 24 36 0 0 1 -5 0 + 141 26 36 0 0 1 -4 0 + 141 28 36 0 0 2 -5 0 + 141 30 36 0 0 1 -3 0 + 141 32 36 0 0 0 -2 0 + 141 34 36 0 0 0 -1 0 + 141 36 36 0 0 -1 0 0 + 141 38 36 0 0 -1 -1 0 + 141 40 36 0 0 -4 0 0 + 141 42 36 0 0 -3 0 0 + 141 44 36 0 0 -3 -1 0 + 141 46 36 0 0 -5 0 0 + 141 48 36 0 0 -5 -1 2 + 141 50 36 0 0 -4 -1 0 + 141 52 36 0 0 -2 -1 0 + 141 54 36 0 0 -1 -2 0 + 141 56 36 0 0 -2 -2 0 + 141 58 36 0 0 -3 -2 0 + 141 60 36 0 0 -4 -3 3 + 141 60 36 0 0 -3 -4 3 + 141 62 36 0 0 -4 -2 0 + 142 0 36 0 0 -4 3 0 + 142 2 36 0 0 -4 2 0 + 142 4 36 0 0 -5 3 0 + 142 6 36 0 0 -6 4 0 + 142 8 36 0 0 -5 1 0 + 142 10 36 0 0 -6 3 0 + 142 12 36 0 0 -7 4 3 + 142 12 36 0 0 -7 3 3 + 142 14 36 0 0 -6 2 0 + 142 16 36 0 0 -6 1 2 + 142 18 36 0 0 -5 2 0 + 142 20 36 0 0 -4 1 0 + 142 22 36 0 0 -3 1 0 + 142 24 36 0 0 -3 2 0 + 142 26 36 0 0 -2 1 0 + 142 28 36 0 0 -2 0 0 + 142 30 36 0 0 -3 3 0 + 142 32 36 0 0 -2 3 0 + 142 34 36 0 0 -2 2 0 + 142 36 36 0 0 0 0 0 + 142 38 36 0 0 -1 1 0 + 142 40 36 0 0 -1 2 4 + 142 42 36 0 0 -2 4 0 + 142 44 36 0 0 -3 4 0 + 142 46 36 0 0 -3 5 0 + 142 48 36 0 0 -4 6 0 + 142 50 36 0 0 -4 5 0 + 142 52 36 0 0 -5 6 2 + 142 54 36 0 0 -5 4 0 + 142 56 36 0 0 -5 5 0 + 142 58 36 0 0 -4 4 0 + 142 62 36 0 0 -6 5 2 + 143 0 36 0 0 2 2 0 + 143 2 36 0 0 1 3 0 + 143 4 36 0 0 2 3 0 + 143 6 36 0 0 0 4 0 + 143 8 36 0 0 3 3 0 + 143 10 36 0 0 -1 4 0 + 143 12 36 0 0 -1 5 0 + 143 14 36 0 0 4 2 0 + 143 16 36 0 0 3 4 3 + 143 16 36 0 0 4 3 3 + 143 18 36 0 0 2 4 0 + 143 20 36 0 0 1 4 0 + 143 22 36 0 0 1 5 2 + 143 24 36 0 0 0 5 0 + 143 26 36 0 0 -1 6 2 + 143 28 36 0 0 -2 6 0 + 143 30 36 0 0 -2 5 0 + 143 32 36 0 0 -3 6 0 + 143 34 36 0 0 -4 7 3 + 143 34 36 0 0 -3 7 3 + 143 36 36 0 0 0 1 0 + 143 38 36 0 0 0 2 0 + 143 40 36 0 0 -1 3 0 + 143 42 36 0 0 0 3 0 + 143 44 36 0 0 1 0 0 + 143 46 36 0 0 3 1 0 + 143 48 36 0 0 4 0 0 + 143 50 36 0 0 5 0 0 + 143 52 36 0 0 2 1 0 + 143 54 36 0 0 1 1 0 + 143 56 36 0 0 1 2 0 + 143 58 36 0 0 3 2 0 + 143 60 36 0 0 5 1 2 + 143 62 36 0 0 4 1 0 + 144 0 36 0 0 5 -2 0 + 144 2 36 0 0 4 -2 0 + 144 4 36 0 0 4 -1 0 + 144 6 36 0 0 6 -2 0 + 144 8 36 0 0 3 0 0 + 144 10 36 0 0 6 -1 2 + 144 12 36 0 0 5 -1 0 + 144 14 36 0 0 2 0 0 + 144 16 36 0 0 3 -1 0 + 144 18 36 0 0 2 -1 0 + 144 20 36 0 0 3 -2 0 + 144 22 36 0 0 2 -2 0 + 144 24 36 0 0 1 -1 0 + 144 26 36 0 0 1 -2 0 + 144 28 36 0 0 2 -3 0 + 144 30 36 0 0 2 -4 4 + 144 32 36 0 0 3 -5 0 + 144 34 36 0 0 3 -4 0 + 144 36 36 0 0 4 -5 0 + 144 38 36 0 0 4 -4 0 + 144 40 36 0 0 3 -3 0 + 144 42 36 0 0 4 -3 0 + 144 44 36 0 0 3 -6 0 + 144 46 36 0 0 7 -4 3 + 144 46 36 0 0 7 -3 3 + 144 48 36 0 0 4 -6 0 + 144 50 36 0 0 5 -6 2 + 144 52 36 0 0 5 -5 0 + 144 54 36 0 0 5 -4 0 + 144 56 36 0 0 6 -5 2 + 144 58 36 0 0 6 -3 0 + 144 60 36 0 0 5 -3 0 + 144 62 36 0 0 6 -4 0 + 157 0 36 1 0 -2 -3 0 + 157 2 36 1 0 -2 -4 0 + 157 4 36 1 0 -3 -3 0 + 157 6 36 1 0 -1 -4 0 + 157 8 36 1 0 0 -5 0 + 157 10 36 1 0 -1 -5 2 + 157 12 36 1 0 1 -6 2 + 157 14 36 1 0 0 -4 0 + 157 16 36 1 0 -1 -3 0 + 157 18 36 1 0 0 -3 0 + 157 20 36 1 0 3 -7 3 + 157 20 36 1 0 4 -7 3 + 157 22 36 1 0 2 -6 0 + 157 24 36 1 0 1 -5 0 + 157 26 36 1 0 1 -4 0 + 157 28 36 1 0 2 -5 0 + 157 30 36 1 0 1 -3 0 + 157 32 36 1 0 0 -2 0 + 157 34 36 1 0 0 -1 0 + 157 36 36 1 0 -1 0 0 + 157 38 36 1 0 -1 -1 0 + 157 40 36 1 0 -4 0 0 + 157 42 36 1 0 -3 0 0 + 157 44 36 1 0 -3 -1 0 + 157 46 36 1 0 -5 0 0 + 157 48 36 1 0 -5 -1 2 + 157 50 36 1 0 -4 -1 0 + 157 52 36 1 0 -2 -1 0 + 157 54 36 1 0 -1 -2 0 + 157 56 36 1 0 -2 -2 0 + 157 58 36 1 0 -3 -2 0 + 157 60 36 1 0 -4 -3 3 + 157 60 36 1 0 -3 -4 3 + 157 62 36 1 0 -4 -2 0 + 158 0 36 1 0 -4 3 0 + 158 2 36 1 0 -4 2 0 + 158 4 36 1 0 -5 3 0 + 158 6 36 1 0 -6 4 0 + 158 8 36 1 0 -5 1 0 + 158 10 36 1 0 -6 3 0 + 158 12 36 1 0 -7 4 3 + 158 12 36 1 0 -7 3 3 + 158 14 36 1 0 -6 2 0 + 158 16 36 1 0 -6 1 2 + 158 18 36 1 0 -5 2 0 + 158 20 36 1 0 -4 1 0 + 158 22 36 1 0 -3 1 0 + 158 24 36 1 0 -3 2 0 + 158 26 36 1 0 -2 1 0 + 158 28 36 1 0 -2 0 0 + 158 30 36 1 0 -3 3 0 + 158 32 36 1 0 -2 3 0 + 158 34 36 1 0 -2 2 0 + 158 36 36 1 0 0 0 0 + 158 38 36 1 0 -1 1 0 + 158 40 36 1 0 -1 2 4 + 158 42 36 1 0 -2 4 0 + 158 44 36 1 0 -3 4 0 + 158 46 36 1 0 -3 5 0 + 158 48 36 1 0 -4 6 0 + 158 50 36 1 0 -4 5 0 + 158 52 36 1 0 -5 6 2 + 158 54 36 1 0 -5 4 0 + 158 56 36 1 0 -5 5 0 + 158 58 36 1 0 -4 4 0 + 158 62 36 1 0 -6 5 2 + 159 0 36 1 0 2 2 0 + 159 2 36 1 0 1 3 0 + 159 4 36 1 0 2 3 0 + 159 6 36 1 0 0 4 0 + 159 8 36 1 0 3 3 0 + 159 10 36 1 0 -1 4 0 + 159 12 36 1 0 -1 5 0 + 159 14 36 1 0 4 2 0 + 159 16 36 1 0 3 4 3 + 159 16 36 1 0 4 3 3 + 159 18 36 1 0 2 4 0 + 159 20 36 1 0 1 4 0 + 159 22 36 1 0 1 5 2 + 159 24 36 1 0 0 5 0 + 159 26 36 1 0 -1 6 2 + 159 28 36 1 0 -2 6 0 + 159 30 36 1 0 -2 5 0 + 159 32 36 1 0 -3 6 0 + 159 34 36 1 0 -4 7 3 + 159 34 36 1 0 -3 7 3 + 159 36 36 1 0 0 1 0 + 159 38 36 1 0 0 2 0 + 159 40 36 1 0 -1 3 0 + 159 42 36 1 0 0 3 0 + 159 44 36 1 0 1 0 0 + 159 46 36 1 0 3 1 0 + 159 48 36 1 0 4 0 0 + 159 50 36 1 0 5 0 0 + 159 52 36 1 0 2 1 0 + 159 54 36 1 0 1 1 0 + 159 56 36 1 0 1 2 0 + 159 58 36 1 0 3 2 0 + 159 60 36 1 0 5 1 2 + 159 62 36 1 0 4 1 0 + 160 0 36 1 0 5 -2 0 + 160 2 36 1 0 4 -2 0 + 160 4 36 1 0 4 -1 0 + 160 6 36 1 0 6 -2 0 + 160 8 36 1 0 3 0 0 + 160 10 36 1 0 6 -1 2 + 160 12 36 1 0 5 -1 0 + 160 14 36 1 0 2 0 0 + 160 16 36 1 0 3 -1 0 + 160 18 36 1 0 2 -1 0 + 160 20 36 1 0 3 -2 0 + 160 22 36 1 0 2 -2 0 + 160 24 36 1 0 1 -1 0 + 160 26 36 1 0 1 -2 0 + 160 28 36 1 0 2 -3 0 + 160 30 36 1 0 2 -4 4 + 160 32 36 1 0 3 -5 0 + 160 34 36 1 0 3 -4 0 + 160 36 36 1 0 4 -5 0 + 160 38 36 1 0 4 -4 0 + 160 40 36 1 0 3 -3 0 + 160 42 36 1 0 4 -3 0 + 160 44 36 1 0 3 -6 0 + 160 46 36 1 0 7 -4 3 + 160 46 36 1 0 7 -3 3 + 160 48 36 1 0 4 -6 0 + 160 50 36 1 0 5 -6 2 + 160 52 36 1 0 5 -5 0 + 160 54 36 1 0 5 -4 0 + 160 56 36 1 0 6 -5 2 + 160 58 36 1 0 6 -3 0 + 160 60 36 1 0 5 -3 0 + 160 62 36 1 0 6 -4 0 + 161 0 36 -1 1 -2 -3 0 + 161 2 36 -1 1 -2 -4 0 + 161 4 36 -1 1 -3 -3 0 + 161 6 36 -1 1 -1 -4 0 + 161 8 36 -1 1 0 -5 0 + 161 10 36 -1 1 -1 -5 2 + 161 12 36 -1 1 1 -6 2 + 161 14 36 -1 1 0 -4 0 + 161 16 36 -1 1 -1 -3 0 + 161 18 36 -1 1 0 -3 0 + 161 20 36 -1 1 3 -7 3 + 161 20 36 -1 1 4 -7 3 + 161 22 36 -1 1 2 -6 0 + 161 24 36 -1 1 1 -5 0 + 161 26 36 -1 1 1 -4 0 + 161 28 36 -1 1 2 -5 0 + 161 30 36 -1 1 1 -3 0 + 161 32 36 -1 1 0 -2 0 + 161 34 36 -1 1 0 -1 0 + 161 36 36 -1 1 -1 0 0 + 161 38 36 -1 1 -1 -1 0 + 161 40 36 -1 1 -4 0 0 + 161 42 36 -1 1 -3 0 0 + 161 44 36 -1 1 -3 -1 0 + 161 46 36 -1 1 -5 0 0 + 161 48 36 -1 1 -5 -1 2 + 161 50 36 -1 1 -4 -1 0 + 161 52 36 -1 1 -2 -1 0 + 161 54 36 -1 1 -1 -2 0 + 161 56 36 -1 1 -2 -2 0 + 161 58 36 -1 1 -3 -2 0 + 161 60 36 -1 1 -4 -3 3 + 161 60 36 -1 1 -3 -4 3 + 161 62 36 -1 1 -4 -2 0 + 162 0 36 -1 1 -4 3 0 + 162 2 36 -1 1 -4 2 0 + 162 4 36 -1 1 -5 3 0 + 162 6 36 -1 1 -6 4 0 + 162 8 36 -1 1 -5 1 0 + 162 10 36 -1 1 -6 3 0 + 162 12 36 -1 1 -7 4 3 + 162 12 36 -1 1 -7 3 3 + 162 14 36 -1 1 -6 2 0 + 162 16 36 -1 1 -6 1 2 + 162 18 36 -1 1 -5 2 0 + 162 20 36 -1 1 -4 1 0 + 162 22 36 -1 1 -3 1 0 + 162 24 36 -1 1 -3 2 0 + 162 26 36 -1 1 -2 1 0 + 162 28 36 -1 1 -2 0 0 + 162 30 36 -1 1 -3 3 0 + 162 32 36 -1 1 -2 3 0 + 162 34 36 -1 1 -2 2 0 + 162 36 36 -1 1 0 0 0 + 162 38 36 -1 1 -1 1 0 + 162 40 36 -1 1 -1 2 4 + 162 42 36 -1 1 -2 4 0 + 162 44 36 -1 1 -3 4 0 + 162 46 36 -1 1 -3 5 0 + 162 48 36 -1 1 -4 6 0 + 162 50 36 -1 1 -4 5 0 + 162 52 36 -1 1 -5 6 2 + 162 54 36 -1 1 -5 4 0 + 162 56 36 -1 1 -5 5 0 + 162 58 36 -1 1 -4 4 0 + 162 62 36 -1 1 -6 5 2 + 163 0 36 -1 1 2 2 0 + 163 2 36 -1 1 1 3 0 + 163 4 36 -1 1 2 3 0 + 163 6 36 -1 1 0 4 0 + 163 8 36 -1 1 3 3 0 + 163 10 36 -1 1 -1 4 0 + 163 12 36 -1 1 -1 5 0 + 163 14 36 -1 1 4 2 0 + 163 16 36 -1 1 3 4 3 + 163 16 36 -1 1 4 3 3 + 163 18 36 -1 1 2 4 0 + 163 20 36 -1 1 1 4 0 + 163 22 36 -1 1 1 5 2 + 163 24 36 -1 1 0 5 0 + 163 26 36 -1 1 -1 6 2 + 163 28 36 -1 1 -2 6 0 + 163 30 36 -1 1 -2 5 0 + 163 32 36 -1 1 -3 6 0 + 163 34 36 -1 1 -4 7 3 + 163 34 36 -1 1 -3 7 3 + 163 36 36 -1 1 0 1 0 + 163 38 36 -1 1 0 2 0 + 163 40 36 -1 1 -1 3 0 + 163 42 36 -1 1 0 3 0 + 163 44 36 -1 1 1 0 0 + 163 46 36 -1 1 3 1 0 + 163 48 36 -1 1 4 0 0 + 163 50 36 -1 1 5 0 0 + 163 52 36 -1 1 2 1 0 + 163 54 36 -1 1 1 1 0 + 163 56 36 -1 1 1 2 0 + 163 58 36 -1 1 3 2 0 + 163 60 36 -1 1 5 1 2 + 163 62 36 -1 1 4 1 0 + 164 0 36 -1 1 5 -2 0 + 164 2 36 -1 1 4 -2 0 + 164 4 36 -1 1 4 -1 0 + 164 6 36 -1 1 6 -2 0 + 164 8 36 -1 1 3 0 0 + 164 10 36 -1 1 6 -1 2 + 164 12 36 -1 1 5 -1 0 + 164 14 36 -1 1 2 0 0 + 164 16 36 -1 1 3 -1 0 + 164 18 36 -1 1 2 -1 0 + 164 20 36 -1 1 3 -2 0 + 164 22 36 -1 1 2 -2 0 + 164 24 36 -1 1 1 -1 0 + 164 26 36 -1 1 1 -2 0 + 164 28 36 -1 1 2 -3 0 + 164 30 36 -1 1 2 -4 4 + 164 32 36 -1 1 3 -5 0 + 164 34 36 -1 1 3 -4 0 + 164 36 36 -1 1 4 -5 0 + 164 38 36 -1 1 4 -4 0 + 164 40 36 -1 1 3 -3 0 + 164 42 36 -1 1 4 -3 0 + 164 44 36 -1 1 3 -6 0 + 164 46 36 -1 1 7 -4 3 + 164 46 36 -1 1 7 -3 3 + 164 48 36 -1 1 4 -6 0 + 164 50 36 -1 1 5 -6 2 + 164 52 36 -1 1 5 -5 0 + 164 54 36 -1 1 5 -4 0 + 164 56 36 -1 1 6 -5 2 + 164 58 36 -1 1 6 -3 0 + 164 60 36 -1 1 5 -3 0 + 164 62 36 -1 1 6 -4 0 + 165 0 36 0 1 -2 -3 0 + 165 2 36 0 1 -2 -4 0 + 165 4 36 0 1 -3 -3 0 + 165 6 36 0 1 -1 -4 0 + 165 8 36 0 1 0 -5 0 + 165 10 36 0 1 -1 -5 2 + 165 12 36 0 1 1 -6 2 + 165 14 36 0 1 0 -4 0 + 165 16 36 0 1 -1 -3 0 + 165 18 36 0 1 0 -3 0 + 165 20 36 0 1 3 -7 3 + 165 20 36 0 1 4 -7 3 + 165 22 36 0 1 2 -6 0 + 165 24 36 0 1 1 -5 0 + 165 26 36 0 1 1 -4 0 + 165 28 36 0 1 2 -5 0 + 165 30 36 0 1 1 -3 0 + 165 32 36 0 1 0 -2 0 + 165 34 36 0 1 0 -1 0 + 165 36 36 0 1 -1 0 0 + 165 38 36 0 1 -1 -1 0 + 165 40 36 0 1 -4 0 0 + 165 42 36 0 1 -3 0 0 + 165 44 36 0 1 -3 -1 0 + 165 46 36 0 1 -5 0 0 + 165 48 36 0 1 -5 -1 2 + 165 50 36 0 1 -4 -1 0 + 165 52 36 0 1 -2 -1 0 + 165 54 36 0 1 -1 -2 0 + 165 56 36 0 1 -2 -2 0 + 165 58 36 0 1 -3 -2 0 + 165 60 36 0 1 -4 -3 3 + 165 60 36 0 1 -3 -4 3 + 165 62 36 0 1 -4 -2 0 + 166 0 36 0 1 -4 3 0 + 166 2 36 0 1 -4 2 0 + 166 4 36 0 1 -5 3 0 + 166 6 36 0 1 -6 4 0 + 166 8 36 0 1 -5 1 0 + 166 10 36 0 1 -6 3 0 + 166 12 36 0 1 -7 4 3 + 166 12 36 0 1 -7 3 3 + 166 14 36 0 1 -6 2 0 + 166 16 36 0 1 -6 1 2 + 166 18 36 0 1 -5 2 0 + 166 20 36 0 1 -4 1 0 + 166 22 36 0 1 -3 1 0 + 166 24 36 0 1 -3 2 0 + 166 26 36 0 1 -2 1 0 + 166 28 36 0 1 -2 0 0 + 166 30 36 0 1 -3 3 0 + 166 32 36 0 1 -2 3 0 + 166 34 36 0 1 -2 2 0 + 166 36 36 0 1 0 0 0 + 166 38 36 0 1 -1 1 0 + 166 40 36 0 1 -1 2 4 + 166 42 36 0 1 -2 4 0 + 166 44 36 0 1 -3 4 0 + 166 46 36 0 1 -3 5 0 + 166 48 36 0 1 -4 6 0 + 166 50 36 0 1 -4 5 0 + 166 52 36 0 1 -5 6 2 + 166 54 36 0 1 -5 4 0 + 166 56 36 0 1 -5 5 0 + 166 58 36 0 1 -4 4 0 + 166 62 36 0 1 -6 5 2 + 167 0 36 0 1 2 2 0 + 167 2 36 0 1 1 3 0 + 167 4 36 0 1 2 3 0 + 167 6 36 0 1 0 4 0 + 167 8 36 0 1 3 3 0 + 167 10 36 0 1 -1 4 0 + 167 12 36 0 1 -1 5 0 + 167 14 36 0 1 4 2 0 + 167 16 36 0 1 3 4 3 + 167 16 36 0 1 4 3 3 + 167 18 36 0 1 2 4 0 + 167 20 36 0 1 1 4 0 + 167 22 36 0 1 1 5 2 + 167 24 36 0 1 0 5 0 + 167 26 36 0 1 -1 6 2 + 167 28 36 0 1 -2 6 0 + 167 30 36 0 1 -2 5 0 + 167 32 36 0 1 -3 6 0 + 167 34 36 0 1 -4 7 3 + 167 34 36 0 1 -3 7 3 + 167 36 36 0 1 0 1 0 + 167 38 36 0 1 0 2 0 + 167 40 36 0 1 -1 3 0 + 167 42 36 0 1 0 3 0 + 167 44 36 0 1 1 0 0 + 167 46 36 0 1 3 1 0 + 167 48 36 0 1 4 0 0 + 167 50 36 0 1 5 0 0 + 167 52 36 0 1 2 1 0 + 167 54 36 0 1 1 1 0 + 167 56 36 0 1 1 2 0 + 167 58 36 0 1 3 2 0 + 167 60 36 0 1 5 1 2 + 167 62 36 0 1 4 1 0 + 168 0 36 0 1 5 -2 0 + 168 2 36 0 1 4 -2 0 + 168 4 36 0 1 4 -1 0 + 168 6 36 0 1 6 -2 0 + 168 8 36 0 1 3 0 0 + 168 10 36 0 1 6 -1 2 + 168 12 36 0 1 5 -1 0 + 168 14 36 0 1 2 0 0 + 168 16 36 0 1 3 -1 0 + 168 18 36 0 1 2 -1 0 + 168 20 36 0 1 3 -2 0 + 168 22 36 0 1 2 -2 0 + 168 24 36 0 1 1 -1 0 + 168 26 36 0 1 1 -2 0 + 168 28 36 0 1 2 -3 0 + 168 30 36 0 1 2 -4 4 + 168 32 36 0 1 3 -5 0 + 168 34 36 0 1 3 -4 0 + 168 36 36 0 1 4 -5 0 + 168 38 36 0 1 4 -4 0 + 168 40 36 0 1 3 -3 0 + 168 42 36 0 1 4 -3 0 + 168 44 36 0 1 3 -6 0 + 168 46 36 0 1 7 -4 3 + 168 46 36 0 1 7 -3 3 + 168 48 36 0 1 4 -6 0 + 168 50 36 0 1 5 -6 2 + 168 52 36 0 1 5 -5 0 + 168 54 36 0 1 5 -4 0 + 168 56 36 0 1 6 -5 2 + 168 58 36 0 1 6 -3 0 + 168 60 36 0 1 5 -3 0 + 168 62 36 0 1 6 -4 0 + 149 0 37 0 -1 -2 -3 0 + 149 2 37 0 -1 -2 -4 0 + 149 4 37 0 -1 -3 -3 0 + 149 6 37 0 -1 -1 -4 0 + 149 8 37 0 -1 0 -5 0 + 149 10 37 0 -1 -1 -5 2 + 149 12 37 0 -1 1 -6 2 + 149 14 37 0 -1 0 -4 0 + 149 16 37 0 -1 -1 -3 0 + 149 18 37 0 -1 0 -3 0 + 149 20 37 0 -1 3 -7 3 + 149 20 37 0 -1 4 -7 3 + 149 22 37 0 -1 2 -6 0 + 149 24 37 0 -1 1 -5 0 + 149 26 37 0 -1 1 -4 0 + 149 28 37 0 -1 2 -5 0 + 149 30 37 0 -1 1 -3 0 + 149 32 37 0 -1 0 -2 0 + 149 34 37 0 -1 0 -1 0 + 149 36 37 0 -1 -1 0 0 + 149 38 37 0 -1 -1 -1 0 + 149 40 37 0 -1 -4 0 0 + 149 42 37 0 -1 -3 0 0 + 149 44 37 0 -1 -3 -1 0 + 149 46 37 0 -1 -5 0 0 + 149 48 37 0 -1 -5 -1 2 + 149 50 37 0 -1 -4 -1 0 + 149 52 37 0 -1 -2 -1 0 + 149 54 37 0 -1 -1 -2 0 + 149 56 37 0 -1 -2 -2 0 + 149 58 37 0 -1 -3 -2 0 + 149 60 37 0 -1 -4 -3 3 + 149 60 37 0 -1 -3 -4 3 + 149 62 37 0 -1 -4 -2 0 + 150 0 37 0 -1 -4 3 0 + 150 2 37 0 -1 -4 2 0 + 150 4 37 0 -1 -5 3 0 + 150 6 37 0 -1 -6 4 0 + 150 8 37 0 -1 -5 1 0 + 150 10 37 0 -1 -6 3 0 + 150 12 37 0 -1 -7 4 3 + 150 12 37 0 -1 -7 3 3 + 150 14 37 0 -1 -6 2 0 + 150 16 37 0 -1 -6 1 2 + 150 18 37 0 -1 -5 2 0 + 150 20 37 0 -1 -4 1 0 + 150 22 37 0 -1 -3 1 0 + 150 24 37 0 -1 -3 2 0 + 150 26 37 0 -1 -2 1 0 + 150 28 37 0 -1 -2 0 0 + 150 30 37 0 -1 -3 3 0 + 150 32 37 0 -1 -2 3 0 + 150 34 37 0 -1 -2 2 0 + 150 36 37 0 -1 0 0 0 + 150 38 37 0 -1 -1 1 0 + 150 40 37 0 -1 -1 2 4 + 150 42 37 0 -1 -2 4 0 + 150 44 37 0 -1 -3 4 0 + 150 46 37 0 -1 -3 5 0 + 150 48 37 0 -1 -4 6 0 + 150 50 37 0 -1 -4 5 0 + 150 52 37 0 -1 -5 6 2 + 150 54 37 0 -1 -5 4 0 + 150 56 37 0 -1 -5 5 0 + 150 58 37 0 -1 -4 4 0 + 150 62 37 0 -1 -6 5 2 + 151 0 37 0 -1 2 2 0 + 151 2 37 0 -1 1 3 0 + 151 4 37 0 -1 2 3 0 + 151 6 37 0 -1 0 4 0 + 151 8 37 0 -1 3 3 0 + 151 10 37 0 -1 -1 4 0 + 151 12 37 0 -1 -1 5 0 + 151 14 37 0 -1 4 2 0 + 151 16 37 0 -1 3 4 3 + 151 16 37 0 -1 4 3 3 + 151 18 37 0 -1 2 4 0 + 151 20 37 0 -1 1 4 0 + 151 22 37 0 -1 1 5 2 + 151 24 37 0 -1 0 5 0 + 151 26 37 0 -1 -1 6 2 + 151 28 37 0 -1 -2 6 0 + 151 30 37 0 -1 -2 5 0 + 151 32 37 0 -1 -3 6 0 + 151 34 37 0 -1 -4 7 3 + 151 34 37 0 -1 -3 7 3 + 151 36 37 0 -1 0 1 0 + 151 38 37 0 -1 0 2 0 + 151 40 37 0 -1 -1 3 0 + 151 42 37 0 -1 0 3 0 + 151 44 37 0 -1 1 0 0 + 151 46 37 0 -1 3 1 0 + 151 48 37 0 -1 4 0 0 + 151 50 37 0 -1 5 0 0 + 151 52 37 0 -1 2 1 0 + 151 54 37 0 -1 1 1 0 + 151 56 37 0 -1 1 2 0 + 151 58 37 0 -1 3 2 0 + 151 60 37 0 -1 5 1 2 + 151 62 37 0 -1 4 1 0 + 152 0 37 0 -1 5 -2 0 + 152 2 37 0 -1 4 -2 0 + 152 4 37 0 -1 4 -1 0 + 152 6 37 0 -1 6 -2 0 + 152 8 37 0 -1 3 0 0 + 152 10 37 0 -1 6 -1 2 + 152 12 37 0 -1 5 -1 0 + 152 14 37 0 -1 2 0 0 + 152 16 37 0 -1 3 -1 0 + 152 18 37 0 -1 2 -1 0 + 152 20 37 0 -1 3 -2 0 + 152 22 37 0 -1 2 -2 0 + 152 24 37 0 -1 1 -1 0 + 152 26 37 0 -1 1 -2 0 + 152 28 37 0 -1 2 -3 0 + 152 30 37 0 -1 2 -4 4 + 152 32 37 0 -1 3 -5 0 + 152 34 37 0 -1 3 -4 0 + 152 36 37 0 -1 4 -5 0 + 152 38 37 0 -1 4 -4 0 + 152 40 37 0 -1 3 -3 0 + 152 42 37 0 -1 4 -3 0 + 152 44 37 0 -1 3 -6 0 + 152 46 37 0 -1 7 -4 3 + 152 46 37 0 -1 7 -3 3 + 152 48 37 0 -1 4 -6 0 + 152 50 37 0 -1 5 -6 2 + 152 52 37 0 -1 5 -5 0 + 152 54 37 0 -1 5 -4 0 + 152 56 37 0 -1 6 -5 2 + 152 58 37 0 -1 6 -3 0 + 152 60 37 0 -1 5 -3 0 + 152 62 37 0 -1 6 -4 0 + 153 0 37 1 -1 -2 -3 0 + 153 2 37 1 -1 -2 -4 0 + 153 4 37 1 -1 -3 -3 0 + 153 6 37 1 -1 -1 -4 0 + 153 8 37 1 -1 0 -5 0 + 153 10 37 1 -1 -1 -5 2 + 153 12 37 1 -1 1 -6 2 + 153 14 37 1 -1 0 -4 0 + 153 16 37 1 -1 -1 -3 0 + 153 18 37 1 -1 0 -3 0 + 153 20 37 1 -1 3 -7 3 + 153 20 37 1 -1 4 -7 3 + 153 22 37 1 -1 2 -6 0 + 153 24 37 1 -1 1 -5 0 + 153 26 37 1 -1 1 -4 0 + 153 28 37 1 -1 2 -5 0 + 153 30 37 1 -1 1 -3 0 + 153 32 37 1 -1 0 -2 0 + 153 34 37 1 -1 0 -1 0 + 153 36 37 1 -1 -1 0 0 + 153 38 37 1 -1 -1 -1 0 + 153 40 37 1 -1 -4 0 0 + 153 42 37 1 -1 -3 0 0 + 153 44 37 1 -1 -3 -1 0 + 153 46 37 1 -1 -5 0 0 + 153 48 37 1 -1 -5 -1 2 + 153 50 37 1 -1 -4 -1 0 + 153 52 37 1 -1 -2 -1 0 + 153 54 37 1 -1 -1 -2 0 + 153 56 37 1 -1 -2 -2 0 + 153 58 37 1 -1 -3 -2 0 + 153 60 37 1 -1 -4 -3 3 + 153 60 37 1 -1 -3 -4 3 + 153 62 37 1 -1 -4 -2 0 + 154 0 37 1 -1 -4 3 0 + 154 2 37 1 -1 -4 2 0 + 154 4 37 1 -1 -5 3 0 + 154 6 37 1 -1 -6 4 0 + 154 8 37 1 -1 -5 1 0 + 154 10 37 1 -1 -6 3 0 + 154 12 37 1 -1 -7 4 3 + 154 12 37 1 -1 -7 3 3 + 154 14 37 1 -1 -6 2 0 + 154 16 37 1 -1 -6 1 2 + 154 18 37 1 -1 -5 2 0 + 154 20 37 1 -1 -4 1 0 + 154 22 37 1 -1 -3 1 0 + 154 24 37 1 -1 -3 2 0 + 154 26 37 1 -1 -2 1 0 + 154 28 37 1 -1 -2 0 0 + 154 30 37 1 -1 -3 3 0 + 154 32 37 1 -1 -2 3 0 + 154 34 37 1 -1 -2 2 0 + 154 36 37 1 -1 0 0 0 + 154 38 37 1 -1 -1 1 0 + 154 40 37 1 -1 -1 2 4 + 154 42 37 1 -1 -2 4 0 + 154 44 37 1 -1 -3 4 0 + 154 46 37 1 -1 -3 5 0 + 154 48 37 1 -1 -4 6 0 + 154 50 37 1 -1 -4 5 0 + 154 52 37 1 -1 -5 6 2 + 154 54 37 1 -1 -5 4 0 + 154 56 37 1 -1 -5 5 0 + 154 58 37 1 -1 -4 4 0 + 154 62 37 1 -1 -6 5 2 + 155 0 37 1 -1 2 2 0 + 155 2 37 1 -1 1 3 0 + 155 4 37 1 -1 2 3 0 + 155 6 37 1 -1 0 4 0 + 155 8 37 1 -1 3 3 0 + 155 10 37 1 -1 -1 4 0 + 155 12 37 1 -1 -1 5 0 + 155 14 37 1 -1 4 2 0 + 155 16 37 1 -1 3 4 3 + 155 16 37 1 -1 4 3 3 + 155 18 37 1 -1 2 4 0 + 155 20 37 1 -1 1 4 0 + 155 22 37 1 -1 1 5 2 + 155 24 37 1 -1 0 5 0 + 155 26 37 1 -1 -1 6 2 + 155 28 37 1 -1 -2 6 0 + 155 30 37 1 -1 -2 5 0 + 155 32 37 1 -1 -3 6 0 + 155 34 37 1 -1 -4 7 3 + 155 34 37 1 -1 -3 7 3 + 155 36 37 1 -1 0 1 0 + 155 38 37 1 -1 0 2 0 + 155 40 37 1 -1 -1 3 0 + 155 42 37 1 -1 0 3 0 + 155 44 37 1 -1 1 0 0 + 155 46 37 1 -1 3 1 0 + 155 48 37 1 -1 4 0 0 + 155 50 37 1 -1 5 0 0 + 155 52 37 1 -1 2 1 0 + 155 54 37 1 -1 1 1 0 + 155 56 37 1 -1 1 2 0 + 155 58 37 1 -1 3 2 0 + 155 60 37 1 -1 5 1 2 + 155 62 37 1 -1 4 1 0 + 156 0 37 1 -1 5 -2 0 + 156 2 37 1 -1 4 -2 0 + 156 4 37 1 -1 4 -1 0 + 156 6 37 1 -1 6 -2 0 + 156 8 37 1 -1 3 0 0 + 156 10 37 1 -1 6 -1 2 + 156 12 37 1 -1 5 -1 0 + 156 14 37 1 -1 2 0 0 + 156 16 37 1 -1 3 -1 0 + 156 18 37 1 -1 2 -1 0 + 156 20 37 1 -1 3 -2 0 + 156 22 37 1 -1 2 -2 0 + 156 24 37 1 -1 1 -1 0 + 156 26 37 1 -1 1 -2 0 + 156 28 37 1 -1 2 -3 0 + 156 30 37 1 -1 2 -4 4 + 156 32 37 1 -1 3 -5 0 + 156 34 37 1 -1 3 -4 0 + 156 36 37 1 -1 4 -5 0 + 156 38 37 1 -1 4 -4 0 + 156 40 37 1 -1 3 -3 0 + 156 42 37 1 -1 4 -3 0 + 156 44 37 1 -1 3 -6 0 + 156 46 37 1 -1 7 -4 3 + 156 46 37 1 -1 7 -3 3 + 156 48 37 1 -1 4 -6 0 + 156 50 37 1 -1 5 -6 2 + 156 52 37 1 -1 5 -5 0 + 156 54 37 1 -1 5 -4 0 + 156 56 37 1 -1 6 -5 2 + 156 58 37 1 -1 6 -3 0 + 156 60 37 1 -1 5 -3 0 + 156 62 37 1 -1 6 -4 0 + 157 0 37 -1 0 -2 -3 0 + 157 2 37 -1 0 -2 -4 0 + 157 4 37 -1 0 -3 -3 0 + 157 6 37 -1 0 -1 -4 0 + 157 8 37 -1 0 0 -5 0 + 157 10 37 -1 0 -1 -5 2 + 157 12 37 -1 0 1 -6 2 + 157 14 37 -1 0 0 -4 0 + 157 16 37 -1 0 -1 -3 0 + 157 18 37 -1 0 0 -3 0 + 157 20 37 -1 0 3 -7 3 + 157 20 37 -1 0 4 -7 3 + 157 22 37 -1 0 2 -6 0 + 157 24 37 -1 0 1 -5 0 + 157 26 37 -1 0 1 -4 0 + 157 28 37 -1 0 2 -5 0 + 157 30 37 -1 0 1 -3 0 + 157 32 37 -1 0 0 -2 0 + 157 34 37 -1 0 0 -1 0 + 157 36 37 -1 0 -1 0 0 + 157 38 37 -1 0 -1 -1 0 + 157 40 37 -1 0 -4 0 0 + 157 42 37 -1 0 -3 0 0 + 157 44 37 -1 0 -3 -1 0 + 157 46 37 -1 0 -5 0 0 + 157 48 37 -1 0 -5 -1 2 + 157 50 37 -1 0 -4 -1 0 + 157 52 37 -1 0 -2 -1 0 + 157 54 37 -1 0 -1 -2 0 + 157 56 37 -1 0 -2 -2 0 + 157 58 37 -1 0 -3 -2 0 + 157 60 37 -1 0 -4 -3 3 + 157 60 37 -1 0 -3 -4 3 + 157 62 37 -1 0 -4 -2 0 + 158 0 37 -1 0 -4 3 0 + 158 2 37 -1 0 -4 2 0 + 158 4 37 -1 0 -5 3 0 + 158 6 37 -1 0 -6 4 0 + 158 8 37 -1 0 -5 1 0 + 158 10 37 -1 0 -6 3 0 + 158 12 37 -1 0 -7 4 3 + 158 12 37 -1 0 -7 3 3 + 158 14 37 -1 0 -6 2 0 + 158 16 37 -1 0 -6 1 2 + 158 18 37 -1 0 -5 2 0 + 158 20 37 -1 0 -4 1 0 + 158 22 37 -1 0 -3 1 0 + 158 24 37 -1 0 -3 2 0 + 158 26 37 -1 0 -2 1 0 + 158 28 37 -1 0 -2 0 0 + 158 30 37 -1 0 -3 3 0 + 158 32 37 -1 0 -2 3 0 + 158 34 37 -1 0 -2 2 0 + 158 36 37 -1 0 0 0 0 + 158 38 37 -1 0 -1 1 0 + 158 40 37 -1 0 -1 2 4 + 158 42 37 -1 0 -2 4 0 + 158 44 37 -1 0 -3 4 0 + 158 46 37 -1 0 -3 5 0 + 158 48 37 -1 0 -4 6 0 + 158 50 37 -1 0 -4 5 0 + 158 52 37 -1 0 -5 6 2 + 158 54 37 -1 0 -5 4 0 + 158 56 37 -1 0 -5 5 0 + 158 58 37 -1 0 -4 4 0 + 158 62 37 -1 0 -6 5 2 + 159 0 37 -1 0 2 2 0 + 159 2 37 -1 0 1 3 0 + 159 4 37 -1 0 2 3 0 + 159 6 37 -1 0 0 4 0 + 159 8 37 -1 0 3 3 0 + 159 10 37 -1 0 -1 4 0 + 159 12 37 -1 0 -1 5 0 + 159 14 37 -1 0 4 2 0 + 159 16 37 -1 0 3 4 3 + 159 16 37 -1 0 4 3 3 + 159 18 37 -1 0 2 4 0 + 159 20 37 -1 0 1 4 0 + 159 22 37 -1 0 1 5 2 + 159 24 37 -1 0 0 5 0 + 159 26 37 -1 0 -1 6 2 + 159 28 37 -1 0 -2 6 0 + 159 30 37 -1 0 -2 5 0 + 159 32 37 -1 0 -3 6 0 + 159 34 37 -1 0 -4 7 3 + 159 34 37 -1 0 -3 7 3 + 159 36 37 -1 0 0 1 0 + 159 38 37 -1 0 0 2 0 + 159 40 37 -1 0 -1 3 0 + 159 42 37 -1 0 0 3 0 + 159 44 37 -1 0 1 0 0 + 159 46 37 -1 0 3 1 0 + 159 48 37 -1 0 4 0 0 + 159 50 37 -1 0 5 0 0 + 159 52 37 -1 0 2 1 0 + 159 54 37 -1 0 1 1 0 + 159 56 37 -1 0 1 2 0 + 159 58 37 -1 0 3 2 0 + 159 60 37 -1 0 5 1 2 + 159 62 37 -1 0 4 1 0 + 160 0 37 -1 0 5 -2 0 + 160 2 37 -1 0 4 -2 0 + 160 4 37 -1 0 4 -1 0 + 160 6 37 -1 0 6 -2 0 + 160 8 37 -1 0 3 0 0 + 160 10 37 -1 0 6 -1 2 + 160 12 37 -1 0 5 -1 0 + 160 14 37 -1 0 2 0 0 + 160 16 37 -1 0 3 -1 0 + 160 18 37 -1 0 2 -1 0 + 160 20 37 -1 0 3 -2 0 + 160 22 37 -1 0 2 -2 0 + 160 24 37 -1 0 1 -1 0 + 160 26 37 -1 0 1 -2 0 + 160 28 37 -1 0 2 -3 0 + 160 30 37 -1 0 2 -4 4 + 160 32 37 -1 0 3 -5 0 + 160 34 37 -1 0 3 -4 0 + 160 36 37 -1 0 4 -5 0 + 160 38 37 -1 0 4 -4 0 + 160 40 37 -1 0 3 -3 0 + 160 42 37 -1 0 4 -3 0 + 160 44 37 -1 0 3 -6 0 + 160 46 37 -1 0 7 -4 3 + 160 46 37 -1 0 7 -3 3 + 160 48 37 -1 0 4 -6 0 + 160 50 37 -1 0 5 -6 2 + 160 52 37 -1 0 5 -5 0 + 160 54 37 -1 0 5 -4 0 + 160 56 37 -1 0 6 -5 2 + 160 58 37 -1 0 6 -3 0 + 160 60 37 -1 0 5 -3 0 + 160 62 37 -1 0 6 -4 0 + 145 0 37 0 0 -2 -3 0 + 145 2 37 0 0 -2 -4 0 + 145 4 37 0 0 -3 -3 0 + 145 6 37 0 0 -1 -4 0 + 145 8 37 0 0 0 -5 0 + 145 10 37 0 0 -1 -5 2 + 145 12 37 0 0 1 -6 2 + 145 14 37 0 0 0 -4 0 + 145 16 37 0 0 -1 -3 0 + 145 18 37 0 0 0 -3 0 + 145 20 37 0 0 3 -7 3 + 145 20 37 0 0 4 -7 3 + 145 22 37 0 0 2 -6 0 + 145 24 37 0 0 1 -5 0 + 145 26 37 0 0 1 -4 0 + 145 28 37 0 0 2 -5 0 + 145 30 37 0 0 1 -3 0 + 145 32 37 0 0 0 -2 0 + 145 34 37 0 0 0 -1 0 + 145 36 37 0 0 -1 0 0 + 145 38 37 0 0 -1 -1 0 + 145 40 37 0 0 -4 0 0 + 145 42 37 0 0 -3 0 0 + 145 44 37 0 0 -3 -1 0 + 145 46 37 0 0 -5 0 0 + 145 48 37 0 0 -5 -1 2 + 145 50 37 0 0 -4 -1 0 + 145 52 37 0 0 -2 -1 0 + 145 54 37 0 0 -1 -2 0 + 145 56 37 0 0 -2 -2 0 + 145 58 37 0 0 -3 -2 0 + 145 60 37 0 0 -4 -3 3 + 145 60 37 0 0 -3 -4 3 + 145 62 37 0 0 -4 -2 0 + 146 0 37 0 0 -4 3 0 + 146 2 37 0 0 -4 2 0 + 146 4 37 0 0 -5 3 0 + 146 6 37 0 0 -6 4 0 + 146 8 37 0 0 -5 1 0 + 146 10 37 0 0 -6 3 0 + 146 12 37 0 0 -7 4 3 + 146 12 37 0 0 -7 3 3 + 146 14 37 0 0 -6 2 0 + 146 16 37 0 0 -6 1 2 + 146 18 37 0 0 -5 2 0 + 146 20 37 0 0 -4 1 0 + 146 22 37 0 0 -3 1 0 + 146 24 37 0 0 -3 2 0 + 146 26 37 0 0 -2 1 0 + 146 28 37 0 0 -2 0 0 + 146 30 37 0 0 -3 3 0 + 146 32 37 0 0 -2 3 0 + 146 34 37 0 0 -2 2 0 + 146 36 37 0 0 0 0 0 + 146 38 37 0 0 -1 1 0 + 146 40 37 0 0 -1 2 4 + 146 42 37 0 0 -2 4 0 + 146 44 37 0 0 -3 4 0 + 146 46 37 0 0 -3 5 0 + 146 48 37 0 0 -4 6 0 + 146 50 37 0 0 -4 5 0 + 146 52 37 0 0 -5 6 2 + 146 54 37 0 0 -5 4 0 + 146 56 37 0 0 -5 5 0 + 146 58 37 0 0 -4 4 0 + 146 62 37 0 0 -6 5 2 + 147 0 37 0 0 2 2 0 + 147 2 37 0 0 1 3 0 + 147 4 37 0 0 2 3 0 + 147 6 37 0 0 0 4 0 + 147 8 37 0 0 3 3 0 + 147 10 37 0 0 -1 4 0 + 147 12 37 0 0 -1 5 0 + 147 14 37 0 0 4 2 0 + 147 16 37 0 0 3 4 3 + 147 16 37 0 0 4 3 3 + 147 18 37 0 0 2 4 0 + 147 20 37 0 0 1 4 0 + 147 22 37 0 0 1 5 2 + 147 24 37 0 0 0 5 0 + 147 26 37 0 0 -1 6 2 + 147 28 37 0 0 -2 6 0 + 147 30 37 0 0 -2 5 0 + 147 32 37 0 0 -3 6 0 + 147 34 37 0 0 -4 7 3 + 147 34 37 0 0 -3 7 3 + 147 36 37 0 0 0 1 0 + 147 38 37 0 0 0 2 0 + 147 40 37 0 0 -1 3 0 + 147 42 37 0 0 0 3 0 + 147 44 37 0 0 1 0 0 + 147 46 37 0 0 3 1 0 + 147 48 37 0 0 4 0 0 + 147 50 37 0 0 5 0 0 + 147 52 37 0 0 2 1 0 + 147 54 37 0 0 1 1 0 + 147 56 37 0 0 1 2 0 + 147 58 37 0 0 3 2 0 + 147 60 37 0 0 5 1 2 + 147 62 37 0 0 4 1 0 + 148 0 37 0 0 5 -2 0 + 148 2 37 0 0 4 -2 0 + 148 4 37 0 0 4 -1 0 + 148 6 37 0 0 6 -2 0 + 148 8 37 0 0 3 0 0 + 148 10 37 0 0 6 -1 2 + 148 12 37 0 0 5 -1 0 + 148 14 37 0 0 2 0 0 + 148 16 37 0 0 3 -1 0 + 148 18 37 0 0 2 -1 0 + 148 20 37 0 0 3 -2 0 + 148 22 37 0 0 2 -2 0 + 148 24 37 0 0 1 -1 0 + 148 26 37 0 0 1 -2 0 + 148 28 37 0 0 2 -3 0 + 148 30 37 0 0 2 -4 4 + 148 32 37 0 0 3 -5 0 + 148 34 37 0 0 3 -4 0 + 148 36 37 0 0 4 -5 0 + 148 38 37 0 0 4 -4 0 + 148 40 37 0 0 3 -3 0 + 148 42 37 0 0 4 -3 0 + 148 44 37 0 0 3 -6 0 + 148 46 37 0 0 7 -4 3 + 148 46 37 0 0 7 -3 3 + 148 48 37 0 0 4 -6 0 + 148 50 37 0 0 5 -6 2 + 148 52 37 0 0 5 -5 0 + 148 54 37 0 0 5 -4 0 + 148 56 37 0 0 6 -5 2 + 148 58 37 0 0 6 -3 0 + 148 60 37 0 0 5 -3 0 + 148 62 37 0 0 6 -4 0 + 161 0 37 1 0 -2 -3 0 + 161 2 37 1 0 -2 -4 0 + 161 4 37 1 0 -3 -3 0 + 161 6 37 1 0 -1 -4 0 + 161 8 37 1 0 0 -5 0 + 161 10 37 1 0 -1 -5 2 + 161 12 37 1 0 1 -6 2 + 161 14 37 1 0 0 -4 0 + 161 16 37 1 0 -1 -3 0 + 161 18 37 1 0 0 -3 0 + 161 20 37 1 0 3 -7 3 + 161 20 37 1 0 4 -7 3 + 161 22 37 1 0 2 -6 0 + 161 24 37 1 0 1 -5 0 + 161 26 37 1 0 1 -4 0 + 161 28 37 1 0 2 -5 0 + 161 30 37 1 0 1 -3 0 + 161 32 37 1 0 0 -2 0 + 161 34 37 1 0 0 -1 0 + 161 36 37 1 0 -1 0 0 + 161 38 37 1 0 -1 -1 0 + 161 40 37 1 0 -4 0 0 + 161 42 37 1 0 -3 0 0 + 161 44 37 1 0 -3 -1 0 + 161 46 37 1 0 -5 0 0 + 161 48 37 1 0 -5 -1 2 + 161 50 37 1 0 -4 -1 0 + 161 52 37 1 0 -2 -1 0 + 161 54 37 1 0 -1 -2 0 + 161 56 37 1 0 -2 -2 0 + 161 58 37 1 0 -3 -2 0 + 161 60 37 1 0 -4 -3 3 + 161 60 37 1 0 -3 -4 3 + 161 62 37 1 0 -4 -2 0 + 162 0 37 1 0 -4 3 0 + 162 2 37 1 0 -4 2 0 + 162 4 37 1 0 -5 3 0 + 162 6 37 1 0 -6 4 0 + 162 8 37 1 0 -5 1 0 + 162 10 37 1 0 -6 3 0 + 162 12 37 1 0 -7 4 3 + 162 12 37 1 0 -7 3 3 + 162 14 37 1 0 -6 2 0 + 162 16 37 1 0 -6 1 2 + 162 18 37 1 0 -5 2 0 + 162 20 37 1 0 -4 1 0 + 162 22 37 1 0 -3 1 0 + 162 24 37 1 0 -3 2 0 + 162 26 37 1 0 -2 1 0 + 162 28 37 1 0 -2 0 0 + 162 30 37 1 0 -3 3 0 + 162 32 37 1 0 -2 3 0 + 162 34 37 1 0 -2 2 0 + 162 36 37 1 0 0 0 0 + 162 38 37 1 0 -1 1 0 + 162 40 37 1 0 -1 2 4 + 162 42 37 1 0 -2 4 0 + 162 44 37 1 0 -3 4 0 + 162 46 37 1 0 -3 5 0 + 162 48 37 1 0 -4 6 0 + 162 50 37 1 0 -4 5 0 + 162 52 37 1 0 -5 6 2 + 162 54 37 1 0 -5 4 0 + 162 56 37 1 0 -5 5 0 + 162 58 37 1 0 -4 4 0 + 162 62 37 1 0 -6 5 2 + 163 0 37 1 0 2 2 0 + 163 2 37 1 0 1 3 0 + 163 4 37 1 0 2 3 0 + 163 6 37 1 0 0 4 0 + 163 8 37 1 0 3 3 0 + 163 10 37 1 0 -1 4 0 + 163 12 37 1 0 -1 5 0 + 163 14 37 1 0 4 2 0 + 163 16 37 1 0 3 4 3 + 163 16 37 1 0 4 3 3 + 163 18 37 1 0 2 4 0 + 163 20 37 1 0 1 4 0 + 163 22 37 1 0 1 5 2 + 163 24 37 1 0 0 5 0 + 163 26 37 1 0 -1 6 2 + 163 28 37 1 0 -2 6 0 + 163 30 37 1 0 -2 5 0 + 163 32 37 1 0 -3 6 0 + 163 34 37 1 0 -4 7 3 + 163 34 37 1 0 -3 7 3 + 163 36 37 1 0 0 1 0 + 163 38 37 1 0 0 2 0 + 163 40 37 1 0 -1 3 0 + 163 42 37 1 0 0 3 0 + 163 44 37 1 0 1 0 0 + 163 46 37 1 0 3 1 0 + 163 48 37 1 0 4 0 0 + 163 50 37 1 0 5 0 0 + 163 52 37 1 0 2 1 0 + 163 54 37 1 0 1 1 0 + 163 56 37 1 0 1 2 0 + 163 58 37 1 0 3 2 0 + 163 60 37 1 0 5 1 2 + 163 62 37 1 0 4 1 0 + 164 0 37 1 0 5 -2 0 + 164 2 37 1 0 4 -2 0 + 164 4 37 1 0 4 -1 0 + 164 6 37 1 0 6 -2 0 + 164 8 37 1 0 3 0 0 + 164 10 37 1 0 6 -1 2 + 164 12 37 1 0 5 -1 0 + 164 14 37 1 0 2 0 0 + 164 16 37 1 0 3 -1 0 + 164 18 37 1 0 2 -1 0 + 164 20 37 1 0 3 -2 0 + 164 22 37 1 0 2 -2 0 + 164 24 37 1 0 1 -1 0 + 164 26 37 1 0 1 -2 0 + 164 28 37 1 0 2 -3 0 + 164 30 37 1 0 2 -4 4 + 164 32 37 1 0 3 -5 0 + 164 34 37 1 0 3 -4 0 + 164 36 37 1 0 4 -5 0 + 164 38 37 1 0 4 -4 0 + 164 40 37 1 0 3 -3 0 + 164 42 37 1 0 4 -3 0 + 164 44 37 1 0 3 -6 0 + 164 46 37 1 0 7 -4 3 + 164 46 37 1 0 7 -3 3 + 164 48 37 1 0 4 -6 0 + 164 50 37 1 0 5 -6 2 + 164 52 37 1 0 5 -5 0 + 164 54 37 1 0 5 -4 0 + 164 56 37 1 0 6 -5 2 + 164 58 37 1 0 6 -3 0 + 164 60 37 1 0 5 -3 0 + 164 62 37 1 0 6 -4 0 + 165 0 37 -1 1 -2 -3 0 + 165 2 37 -1 1 -2 -4 0 + 165 4 37 -1 1 -3 -3 0 + 165 6 37 -1 1 -1 -4 0 + 165 8 37 -1 1 0 -5 0 + 165 10 37 -1 1 -1 -5 2 + 165 12 37 -1 1 1 -6 2 + 165 14 37 -1 1 0 -4 0 + 165 16 37 -1 1 -1 -3 0 + 165 18 37 -1 1 0 -3 0 + 165 20 37 -1 1 3 -7 3 + 165 20 37 -1 1 4 -7 3 + 165 22 37 -1 1 2 -6 0 + 165 24 37 -1 1 1 -5 0 + 165 26 37 -1 1 1 -4 0 + 165 28 37 -1 1 2 -5 0 + 165 30 37 -1 1 1 -3 0 + 165 32 37 -1 1 0 -2 0 + 165 34 37 -1 1 0 -1 0 + 165 36 37 -1 1 -1 0 0 + 165 38 37 -1 1 -1 -1 0 + 165 40 37 -1 1 -4 0 0 + 165 42 37 -1 1 -3 0 0 + 165 44 37 -1 1 -3 -1 0 + 165 46 37 -1 1 -5 0 0 + 165 48 37 -1 1 -5 -1 2 + 165 50 37 -1 1 -4 -1 0 + 165 52 37 -1 1 -2 -1 0 + 165 54 37 -1 1 -1 -2 0 + 165 56 37 -1 1 -2 -2 0 + 165 58 37 -1 1 -3 -2 0 + 165 60 37 -1 1 -4 -3 3 + 165 60 37 -1 1 -3 -4 3 + 165 62 37 -1 1 -4 -2 0 + 166 0 37 -1 1 -4 3 0 + 166 2 37 -1 1 -4 2 0 + 166 4 37 -1 1 -5 3 0 + 166 6 37 -1 1 -6 4 0 + 166 8 37 -1 1 -5 1 0 + 166 10 37 -1 1 -6 3 0 + 166 12 37 -1 1 -7 4 3 + 166 12 37 -1 1 -7 3 3 + 166 14 37 -1 1 -6 2 0 + 166 16 37 -1 1 -6 1 2 + 166 18 37 -1 1 -5 2 0 + 166 20 37 -1 1 -4 1 0 + 166 22 37 -1 1 -3 1 0 + 166 24 37 -1 1 -3 2 0 + 166 26 37 -1 1 -2 1 0 + 166 28 37 -1 1 -2 0 0 + 166 30 37 -1 1 -3 3 0 + 166 32 37 -1 1 -2 3 0 + 166 34 37 -1 1 -2 2 0 + 166 36 37 -1 1 0 0 0 + 166 38 37 -1 1 -1 1 0 + 166 40 37 -1 1 -1 2 4 + 166 42 37 -1 1 -2 4 0 + 166 44 37 -1 1 -3 4 0 + 166 46 37 -1 1 -3 5 0 + 166 48 37 -1 1 -4 6 0 + 166 50 37 -1 1 -4 5 0 + 166 52 37 -1 1 -5 6 2 + 166 54 37 -1 1 -5 4 0 + 166 56 37 -1 1 -5 5 0 + 166 58 37 -1 1 -4 4 0 + 166 62 37 -1 1 -6 5 2 + 167 0 37 -1 1 2 2 0 + 167 2 37 -1 1 1 3 0 + 167 4 37 -1 1 2 3 0 + 167 6 37 -1 1 0 4 0 + 167 8 37 -1 1 3 3 0 + 167 10 37 -1 1 -1 4 0 + 167 12 37 -1 1 -1 5 0 + 167 14 37 -1 1 4 2 0 + 167 16 37 -1 1 3 4 3 + 167 16 37 -1 1 4 3 3 + 167 18 37 -1 1 2 4 0 + 167 20 37 -1 1 1 4 0 + 167 22 37 -1 1 1 5 2 + 167 24 37 -1 1 0 5 0 + 167 26 37 -1 1 -1 6 2 + 167 28 37 -1 1 -2 6 0 + 167 30 37 -1 1 -2 5 0 + 167 32 37 -1 1 -3 6 0 + 167 34 37 -1 1 -4 7 3 + 167 34 37 -1 1 -3 7 3 + 167 36 37 -1 1 0 1 0 + 167 38 37 -1 1 0 2 0 + 167 40 37 -1 1 -1 3 0 + 167 42 37 -1 1 0 3 0 + 167 44 37 -1 1 1 0 0 + 167 46 37 -1 1 3 1 0 + 167 48 37 -1 1 4 0 0 + 167 50 37 -1 1 5 0 0 + 167 52 37 -1 1 2 1 0 + 167 54 37 -1 1 1 1 0 + 167 56 37 -1 1 1 2 0 + 167 58 37 -1 1 3 2 0 + 167 60 37 -1 1 5 1 2 + 167 62 37 -1 1 4 1 0 + 168 0 37 -1 1 5 -2 0 + 168 2 37 -1 1 4 -2 0 + 168 4 37 -1 1 4 -1 0 + 168 6 37 -1 1 6 -2 0 + 168 8 37 -1 1 3 0 0 + 168 10 37 -1 1 6 -1 2 + 168 12 37 -1 1 5 -1 0 + 168 14 37 -1 1 2 0 0 + 168 16 37 -1 1 3 -1 0 + 168 18 37 -1 1 2 -1 0 + 168 20 37 -1 1 3 -2 0 + 168 22 37 -1 1 2 -2 0 + 168 24 37 -1 1 1 -1 0 + 168 26 37 -1 1 1 -2 0 + 168 28 37 -1 1 2 -3 0 + 168 30 37 -1 1 2 -4 4 + 168 32 37 -1 1 3 -5 0 + 168 34 37 -1 1 3 -4 0 + 168 36 37 -1 1 4 -5 0 + 168 38 37 -1 1 4 -4 0 + 168 40 37 -1 1 3 -3 0 + 168 42 37 -1 1 4 -3 0 + 168 44 37 -1 1 3 -6 0 + 168 46 37 -1 1 7 -4 3 + 168 46 37 -1 1 7 -3 3 + 168 48 37 -1 1 4 -6 0 + 168 50 37 -1 1 5 -6 2 + 168 52 37 -1 1 5 -5 0 + 168 54 37 -1 1 5 -4 0 + 168 56 37 -1 1 6 -5 2 + 168 58 37 -1 1 6 -3 0 + 168 60 37 -1 1 5 -3 0 + 168 62 37 -1 1 6 -4 0 + 169 0 37 0 1 -2 -3 0 + 169 2 37 0 1 -2 -4 0 + 169 4 37 0 1 -3 -3 0 + 169 6 37 0 1 -1 -4 0 + 169 8 37 0 1 0 -5 0 + 169 10 37 0 1 -1 -5 2 + 169 12 37 0 1 1 -6 2 + 169 14 37 0 1 0 -4 0 + 169 16 37 0 1 -1 -3 0 + 169 18 37 0 1 0 -3 0 + 169 20 37 0 1 3 -7 3 + 169 20 37 0 1 4 -7 3 + 169 22 37 0 1 2 -6 0 + 169 24 37 0 1 1 -5 0 + 169 26 37 0 1 1 -4 0 + 169 28 37 0 1 2 -5 0 + 169 30 37 0 1 1 -3 0 + 169 32 37 0 1 0 -2 0 + 169 34 37 0 1 0 -1 0 + 169 36 37 0 1 -1 0 0 + 169 38 37 0 1 -1 -1 0 + 169 40 37 0 1 -4 0 0 + 169 42 37 0 1 -3 0 0 + 169 44 37 0 1 -3 -1 0 + 169 46 37 0 1 -5 0 0 + 169 48 37 0 1 -5 -1 2 + 169 50 37 0 1 -4 -1 0 + 169 52 37 0 1 -2 -1 0 + 169 54 37 0 1 -1 -2 0 + 169 56 37 0 1 -2 -2 0 + 169 58 37 0 1 -3 -2 0 + 169 60 37 0 1 -4 -3 3 + 169 60 37 0 1 -3 -4 3 + 169 62 37 0 1 -4 -2 0 + 170 0 37 0 1 -4 3 0 + 170 2 37 0 1 -4 2 0 + 170 4 37 0 1 -5 3 0 + 170 6 37 0 1 -6 4 0 + 170 8 37 0 1 -5 1 0 + 170 10 37 0 1 -6 3 0 + 170 12 37 0 1 -7 4 3 + 170 12 37 0 1 -7 3 3 + 170 14 37 0 1 -6 2 0 + 170 16 37 0 1 -6 1 2 + 170 18 37 0 1 -5 2 0 + 170 20 37 0 1 -4 1 0 + 170 22 37 0 1 -3 1 0 + 170 24 37 0 1 -3 2 0 + 170 26 37 0 1 -2 1 0 + 170 28 37 0 1 -2 0 0 + 170 30 37 0 1 -3 3 0 + 170 32 37 0 1 -2 3 0 + 170 34 37 0 1 -2 2 0 + 170 36 37 0 1 0 0 0 + 170 38 37 0 1 -1 1 0 + 170 40 37 0 1 -1 2 4 + 170 42 37 0 1 -2 4 0 + 170 44 37 0 1 -3 4 0 + 170 46 37 0 1 -3 5 0 + 170 48 37 0 1 -4 6 0 + 170 50 37 0 1 -4 5 0 + 170 52 37 0 1 -5 6 2 + 170 54 37 0 1 -5 4 0 + 170 56 37 0 1 -5 5 0 + 170 58 37 0 1 -4 4 0 + 170 62 37 0 1 -6 5 2 + 171 0 37 0 1 2 2 0 + 171 2 37 0 1 1 3 0 + 171 4 37 0 1 2 3 0 + 171 6 37 0 1 0 4 0 + 171 8 37 0 1 3 3 0 + 171 10 37 0 1 -1 4 0 + 171 12 37 0 1 -1 5 0 + 171 14 37 0 1 4 2 0 + 171 16 37 0 1 3 4 3 + 171 16 37 0 1 4 3 3 + 171 18 37 0 1 2 4 0 + 171 20 37 0 1 1 4 0 + 171 22 37 0 1 1 5 2 + 171 24 37 0 1 0 5 0 + 171 26 37 0 1 -1 6 2 + 171 28 37 0 1 -2 6 0 + 171 30 37 0 1 -2 5 0 + 171 32 37 0 1 -3 6 0 + 171 34 37 0 1 -4 7 3 + 171 34 37 0 1 -3 7 3 + 171 36 37 0 1 0 1 0 + 171 38 37 0 1 0 2 0 + 171 40 37 0 1 -1 3 0 + 171 42 37 0 1 0 3 0 + 171 44 37 0 1 1 0 0 + 171 46 37 0 1 3 1 0 + 171 48 37 0 1 4 0 0 + 171 50 37 0 1 5 0 0 + 171 52 37 0 1 2 1 0 + 171 54 37 0 1 1 1 0 + 171 56 37 0 1 1 2 0 + 171 58 37 0 1 3 2 0 + 171 60 37 0 1 5 1 2 + 171 62 37 0 1 4 1 0 + 172 0 37 0 1 5 -2 0 + 172 2 37 0 1 4 -2 0 + 172 4 37 0 1 4 -1 0 + 172 6 37 0 1 6 -2 0 + 172 8 37 0 1 3 0 0 + 172 10 37 0 1 6 -1 2 + 172 12 37 0 1 5 -1 0 + 172 14 37 0 1 2 0 0 + 172 16 37 0 1 3 -1 0 + 172 18 37 0 1 2 -1 0 + 172 20 37 0 1 3 -2 0 + 172 22 37 0 1 2 -2 0 + 172 24 37 0 1 1 -1 0 + 172 26 37 0 1 1 -2 0 + 172 28 37 0 1 2 -3 0 + 172 30 37 0 1 2 -4 4 + 172 32 37 0 1 3 -5 0 + 172 34 37 0 1 3 -4 0 + 172 36 37 0 1 4 -5 0 + 172 38 37 0 1 4 -4 0 + 172 40 37 0 1 3 -3 0 + 172 42 37 0 1 4 -3 0 + 172 44 37 0 1 3 -6 0 + 172 46 37 0 1 7 -4 3 + 172 46 37 0 1 7 -3 3 + 172 48 37 0 1 4 -6 0 + 172 50 37 0 1 5 -6 2 + 172 52 37 0 1 5 -5 0 + 172 54 37 0 1 5 -4 0 + 172 56 37 0 1 6 -5 2 + 172 58 37 0 1 6 -3 0 + 172 60 37 0 1 5 -3 0 + 172 62 37 0 1 6 -4 0 + 153 0 38 0 -1 -2 -3 0 + 153 2 38 0 -1 -2 -4 0 + 153 4 38 0 -1 -3 -3 0 + 153 6 38 0 -1 -1 -4 0 + 153 8 38 0 -1 0 -5 0 + 153 10 38 0 -1 -1 -5 2 + 153 12 38 0 -1 1 -6 2 + 153 14 38 0 -1 0 -4 0 + 153 16 38 0 -1 -1 -3 0 + 153 18 38 0 -1 0 -3 0 + 153 20 38 0 -1 3 -7 3 + 153 20 38 0 -1 4 -7 3 + 153 22 38 0 -1 2 -6 0 + 153 24 38 0 -1 1 -5 0 + 153 26 38 0 -1 1 -4 0 + 153 28 38 0 -1 2 -5 0 + 153 30 38 0 -1 1 -3 0 + 153 32 38 0 -1 0 -2 0 + 153 34 38 0 -1 0 -1 0 + 153 36 38 0 -1 -1 0 0 + 153 38 38 0 -1 -1 -1 0 + 153 40 38 0 -1 -4 0 0 + 153 42 38 0 -1 -3 0 0 + 153 44 38 0 -1 -3 -1 0 + 153 46 38 0 -1 -5 0 0 + 153 48 38 0 -1 -5 -1 2 + 153 50 38 0 -1 -4 -1 0 + 153 52 38 0 -1 -2 -1 0 + 153 54 38 0 -1 -1 -2 0 + 153 56 38 0 -1 -2 -2 0 + 153 58 38 0 -1 -3 -2 0 + 153 60 38 0 -1 -4 -3 3 + 153 60 38 0 -1 -3 -4 3 + 153 62 38 0 -1 -4 -2 0 + 154 0 38 0 -1 -4 3 0 + 154 2 38 0 -1 -4 2 0 + 154 4 38 0 -1 -5 3 0 + 154 6 38 0 -1 -6 4 0 + 154 8 38 0 -1 -5 1 0 + 154 10 38 0 -1 -6 3 0 + 154 12 38 0 -1 -7 4 3 + 154 12 38 0 -1 -7 3 3 + 154 14 38 0 -1 -6 2 0 + 154 16 38 0 -1 -6 1 2 + 154 18 38 0 -1 -5 2 0 + 154 20 38 0 -1 -4 1 0 + 154 22 38 0 -1 -3 1 0 + 154 24 38 0 -1 -3 2 0 + 154 26 38 0 -1 -2 1 0 + 154 28 38 0 -1 -2 0 0 + 154 30 38 0 -1 -3 3 0 + 154 32 38 0 -1 -2 3 0 + 154 34 38 0 -1 -2 2 0 + 154 36 38 0 -1 0 0 0 + 154 38 38 0 -1 -1 1 0 + 154 40 38 0 -1 -1 2 4 + 154 42 38 0 -1 -2 4 0 + 154 44 38 0 -1 -3 4 0 + 154 46 38 0 -1 -3 5 0 + 154 48 38 0 -1 -4 6 0 + 154 50 38 0 -1 -4 5 0 + 154 52 38 0 -1 -5 6 2 + 154 54 38 0 -1 -5 4 0 + 154 56 38 0 -1 -5 5 0 + 154 58 38 0 -1 -4 4 0 + 154 62 38 0 -1 -6 5 2 + 155 0 38 0 -1 2 2 0 + 155 2 38 0 -1 1 3 0 + 155 4 38 0 -1 2 3 0 + 155 6 38 0 -1 0 4 0 + 155 8 38 0 -1 3 3 0 + 155 10 38 0 -1 -1 4 0 + 155 12 38 0 -1 -1 5 0 + 155 14 38 0 -1 4 2 0 + 155 16 38 0 -1 3 4 3 + 155 16 38 0 -1 4 3 3 + 155 18 38 0 -1 2 4 0 + 155 20 38 0 -1 1 4 0 + 155 22 38 0 -1 1 5 2 + 155 24 38 0 -1 0 5 0 + 155 26 38 0 -1 -1 6 2 + 155 28 38 0 -1 -2 6 0 + 155 30 38 0 -1 -2 5 0 + 155 32 38 0 -1 -3 6 0 + 155 34 38 0 -1 -4 7 3 + 155 34 38 0 -1 -3 7 3 + 155 36 38 0 -1 0 1 0 + 155 38 38 0 -1 0 2 0 + 155 40 38 0 -1 -1 3 0 + 155 42 38 0 -1 0 3 0 + 155 44 38 0 -1 1 0 0 + 155 46 38 0 -1 3 1 0 + 155 48 38 0 -1 4 0 0 + 155 50 38 0 -1 5 0 0 + 155 52 38 0 -1 2 1 0 + 155 54 38 0 -1 1 1 0 + 155 56 38 0 -1 1 2 0 + 155 58 38 0 -1 3 2 0 + 155 60 38 0 -1 5 1 2 + 155 62 38 0 -1 4 1 0 + 156 0 38 0 -1 5 -2 0 + 156 2 38 0 -1 4 -2 0 + 156 4 38 0 -1 4 -1 0 + 156 6 38 0 -1 6 -2 0 + 156 8 38 0 -1 3 0 0 + 156 10 38 0 -1 6 -1 2 + 156 12 38 0 -1 5 -1 0 + 156 14 38 0 -1 2 0 0 + 156 16 38 0 -1 3 -1 0 + 156 18 38 0 -1 2 -1 0 + 156 20 38 0 -1 3 -2 0 + 156 22 38 0 -1 2 -2 0 + 156 24 38 0 -1 1 -1 0 + 156 26 38 0 -1 1 -2 0 + 156 28 38 0 -1 2 -3 0 + 156 30 38 0 -1 2 -4 4 + 156 32 38 0 -1 3 -5 0 + 156 34 38 0 -1 3 -4 0 + 156 36 38 0 -1 4 -5 0 + 156 38 38 0 -1 4 -4 0 + 156 40 38 0 -1 3 -3 0 + 156 42 38 0 -1 4 -3 0 + 156 44 38 0 -1 3 -6 0 + 156 46 38 0 -1 7 -4 3 + 156 46 38 0 -1 7 -3 3 + 156 48 38 0 -1 4 -6 0 + 156 50 38 0 -1 5 -6 2 + 156 52 38 0 -1 5 -5 0 + 156 54 38 0 -1 5 -4 0 + 156 56 38 0 -1 6 -5 2 + 156 58 38 0 -1 6 -3 0 + 156 60 38 0 -1 5 -3 0 + 156 62 38 0 -1 6 -4 0 + 157 0 38 1 -1 -2 -3 0 + 157 2 38 1 -1 -2 -4 0 + 157 4 38 1 -1 -3 -3 0 + 157 6 38 1 -1 -1 -4 0 + 157 8 38 1 -1 0 -5 0 + 157 10 38 1 -1 -1 -5 2 + 157 12 38 1 -1 1 -6 2 + 157 14 38 1 -1 0 -4 0 + 157 16 38 1 -1 -1 -3 0 + 157 18 38 1 -1 0 -3 0 + 157 20 38 1 -1 3 -7 3 + 157 20 38 1 -1 4 -7 3 + 157 22 38 1 -1 2 -6 0 + 157 24 38 1 -1 1 -5 0 + 157 26 38 1 -1 1 -4 0 + 157 28 38 1 -1 2 -5 0 + 157 30 38 1 -1 1 -3 0 + 157 32 38 1 -1 0 -2 0 + 157 34 38 1 -1 0 -1 0 + 157 36 38 1 -1 -1 0 0 + 157 38 38 1 -1 -1 -1 0 + 157 40 38 1 -1 -4 0 0 + 157 42 38 1 -1 -3 0 0 + 157 44 38 1 -1 -3 -1 0 + 157 46 38 1 -1 -5 0 0 + 157 48 38 1 -1 -5 -1 2 + 157 50 38 1 -1 -4 -1 0 + 157 52 38 1 -1 -2 -1 0 + 157 54 38 1 -1 -1 -2 0 + 157 56 38 1 -1 -2 -2 0 + 157 58 38 1 -1 -3 -2 0 + 157 60 38 1 -1 -4 -3 3 + 157 60 38 1 -1 -3 -4 3 + 157 62 38 1 -1 -4 -2 0 + 158 0 38 1 -1 -4 3 0 + 158 2 38 1 -1 -4 2 0 + 158 4 38 1 -1 -5 3 0 + 158 6 38 1 -1 -6 4 0 + 158 8 38 1 -1 -5 1 0 + 158 10 38 1 -1 -6 3 0 + 158 12 38 1 -1 -7 4 3 + 158 12 38 1 -1 -7 3 3 + 158 14 38 1 -1 -6 2 0 + 158 16 38 1 -1 -6 1 2 + 158 18 38 1 -1 -5 2 0 + 158 20 38 1 -1 -4 1 0 + 158 22 38 1 -1 -3 1 0 + 158 24 38 1 -1 -3 2 0 + 158 26 38 1 -1 -2 1 0 + 158 28 38 1 -1 -2 0 0 + 158 30 38 1 -1 -3 3 0 + 158 32 38 1 -1 -2 3 0 + 158 34 38 1 -1 -2 2 0 + 158 36 38 1 -1 0 0 0 + 158 38 38 1 -1 -1 1 0 + 158 40 38 1 -1 -1 2 4 + 158 42 38 1 -1 -2 4 0 + 158 44 38 1 -1 -3 4 0 + 158 46 38 1 -1 -3 5 0 + 158 48 38 1 -1 -4 6 0 + 158 50 38 1 -1 -4 5 0 + 158 52 38 1 -1 -5 6 2 + 158 54 38 1 -1 -5 4 0 + 158 56 38 1 -1 -5 5 0 + 158 58 38 1 -1 -4 4 0 + 158 62 38 1 -1 -6 5 2 + 159 0 38 1 -1 2 2 0 + 159 2 38 1 -1 1 3 0 + 159 4 38 1 -1 2 3 0 + 159 6 38 1 -1 0 4 0 + 159 8 38 1 -1 3 3 0 + 159 10 38 1 -1 -1 4 0 + 159 12 38 1 -1 -1 5 0 + 159 14 38 1 -1 4 2 0 + 159 16 38 1 -1 3 4 3 + 159 16 38 1 -1 4 3 3 + 159 18 38 1 -1 2 4 0 + 159 20 38 1 -1 1 4 0 + 159 22 38 1 -1 1 5 2 + 159 24 38 1 -1 0 5 0 + 159 26 38 1 -1 -1 6 2 + 159 28 38 1 -1 -2 6 0 + 159 30 38 1 -1 -2 5 0 + 159 32 38 1 -1 -3 6 0 + 159 34 38 1 -1 -4 7 3 + 159 34 38 1 -1 -3 7 3 + 159 36 38 1 -1 0 1 0 + 159 38 38 1 -1 0 2 0 + 159 40 38 1 -1 -1 3 0 + 159 42 38 1 -1 0 3 0 + 159 44 38 1 -1 1 0 0 + 159 46 38 1 -1 3 1 0 + 159 48 38 1 -1 4 0 0 + 159 50 38 1 -1 5 0 0 + 159 52 38 1 -1 2 1 0 + 159 54 38 1 -1 1 1 0 + 159 56 38 1 -1 1 2 0 + 159 58 38 1 -1 3 2 0 + 159 60 38 1 -1 5 1 2 + 159 62 38 1 -1 4 1 0 + 160 0 38 1 -1 5 -2 0 + 160 2 38 1 -1 4 -2 0 + 160 4 38 1 -1 4 -1 0 + 160 6 38 1 -1 6 -2 0 + 160 8 38 1 -1 3 0 0 + 160 10 38 1 -1 6 -1 2 + 160 12 38 1 -1 5 -1 0 + 160 14 38 1 -1 2 0 0 + 160 16 38 1 -1 3 -1 0 + 160 18 38 1 -1 2 -1 0 + 160 20 38 1 -1 3 -2 0 + 160 22 38 1 -1 2 -2 0 + 160 24 38 1 -1 1 -1 0 + 160 26 38 1 -1 1 -2 0 + 160 28 38 1 -1 2 -3 0 + 160 30 38 1 -1 2 -4 4 + 160 32 38 1 -1 3 -5 0 + 160 34 38 1 -1 3 -4 0 + 160 36 38 1 -1 4 -5 0 + 160 38 38 1 -1 4 -4 0 + 160 40 38 1 -1 3 -3 0 + 160 42 38 1 -1 4 -3 0 + 160 44 38 1 -1 3 -6 0 + 160 46 38 1 -1 7 -4 3 + 160 46 38 1 -1 7 -3 3 + 160 48 38 1 -1 4 -6 0 + 160 50 38 1 -1 5 -6 2 + 160 52 38 1 -1 5 -5 0 + 160 54 38 1 -1 5 -4 0 + 160 56 38 1 -1 6 -5 2 + 160 58 38 1 -1 6 -3 0 + 160 60 38 1 -1 5 -3 0 + 160 62 38 1 -1 6 -4 0 + 161 0 38 -1 0 -2 -3 0 + 161 2 38 -1 0 -2 -4 0 + 161 4 38 -1 0 -3 -3 0 + 161 6 38 -1 0 -1 -4 0 + 161 8 38 -1 0 0 -5 0 + 161 10 38 -1 0 -1 -5 2 + 161 12 38 -1 0 1 -6 2 + 161 14 38 -1 0 0 -4 0 + 161 16 38 -1 0 -1 -3 0 + 161 18 38 -1 0 0 -3 0 + 161 20 38 -1 0 3 -7 3 + 161 20 38 -1 0 4 -7 3 + 161 22 38 -1 0 2 -6 0 + 161 24 38 -1 0 1 -5 0 + 161 26 38 -1 0 1 -4 0 + 161 28 38 -1 0 2 -5 0 + 161 30 38 -1 0 1 -3 0 + 161 32 38 -1 0 0 -2 0 + 161 34 38 -1 0 0 -1 0 + 161 36 38 -1 0 -1 0 0 + 161 38 38 -1 0 -1 -1 0 + 161 40 38 -1 0 -4 0 0 + 161 42 38 -1 0 -3 0 0 + 161 44 38 -1 0 -3 -1 0 + 161 46 38 -1 0 -5 0 0 + 161 48 38 -1 0 -5 -1 2 + 161 50 38 -1 0 -4 -1 0 + 161 52 38 -1 0 -2 -1 0 + 161 54 38 -1 0 -1 -2 0 + 161 56 38 -1 0 -2 -2 0 + 161 58 38 -1 0 -3 -2 0 + 161 60 38 -1 0 -4 -3 3 + 161 60 38 -1 0 -3 -4 3 + 161 62 38 -1 0 -4 -2 0 + 162 0 38 -1 0 -4 3 0 + 162 2 38 -1 0 -4 2 0 + 162 4 38 -1 0 -5 3 0 + 162 6 38 -1 0 -6 4 0 + 162 8 38 -1 0 -5 1 0 + 162 10 38 -1 0 -6 3 0 + 162 12 38 -1 0 -7 4 3 + 162 12 38 -1 0 -7 3 3 + 162 14 38 -1 0 -6 2 0 + 162 16 38 -1 0 -6 1 2 + 162 18 38 -1 0 -5 2 0 + 162 20 38 -1 0 -4 1 0 + 162 22 38 -1 0 -3 1 0 + 162 24 38 -1 0 -3 2 0 + 162 26 38 -1 0 -2 1 0 + 162 28 38 -1 0 -2 0 0 + 162 30 38 -1 0 -3 3 0 + 162 32 38 -1 0 -2 3 0 + 162 34 38 -1 0 -2 2 0 + 162 36 38 -1 0 0 0 0 + 162 38 38 -1 0 -1 1 0 + 162 40 38 -1 0 -1 2 4 + 162 42 38 -1 0 -2 4 0 + 162 44 38 -1 0 -3 4 0 + 162 46 38 -1 0 -3 5 0 + 162 48 38 -1 0 -4 6 0 + 162 50 38 -1 0 -4 5 0 + 162 52 38 -1 0 -5 6 2 + 162 54 38 -1 0 -5 4 0 + 162 56 38 -1 0 -5 5 0 + 162 58 38 -1 0 -4 4 0 + 162 62 38 -1 0 -6 5 2 + 163 0 38 -1 0 2 2 0 + 163 2 38 -1 0 1 3 0 + 163 4 38 -1 0 2 3 0 + 163 6 38 -1 0 0 4 0 + 163 8 38 -1 0 3 3 0 + 163 10 38 -1 0 -1 4 0 + 163 12 38 -1 0 -1 5 0 + 163 14 38 -1 0 4 2 0 + 163 16 38 -1 0 3 4 3 + 163 16 38 -1 0 4 3 3 + 163 18 38 -1 0 2 4 0 + 163 20 38 -1 0 1 4 0 + 163 22 38 -1 0 1 5 2 + 163 24 38 -1 0 0 5 0 + 163 26 38 -1 0 -1 6 2 + 163 28 38 -1 0 -2 6 0 + 163 30 38 -1 0 -2 5 0 + 163 32 38 -1 0 -3 6 0 + 163 34 38 -1 0 -4 7 3 + 163 34 38 -1 0 -3 7 3 + 163 36 38 -1 0 0 1 0 + 163 38 38 -1 0 0 2 0 + 163 40 38 -1 0 -1 3 0 + 163 42 38 -1 0 0 3 0 + 163 44 38 -1 0 1 0 0 + 163 46 38 -1 0 3 1 0 + 163 48 38 -1 0 4 0 0 + 163 50 38 -1 0 5 0 0 + 163 52 38 -1 0 2 1 0 + 163 54 38 -1 0 1 1 0 + 163 56 38 -1 0 1 2 0 + 163 58 38 -1 0 3 2 0 + 163 60 38 -1 0 5 1 2 + 163 62 38 -1 0 4 1 0 + 164 0 38 -1 0 5 -2 0 + 164 2 38 -1 0 4 -2 0 + 164 4 38 -1 0 4 -1 0 + 164 6 38 -1 0 6 -2 0 + 164 8 38 -1 0 3 0 0 + 164 10 38 -1 0 6 -1 2 + 164 12 38 -1 0 5 -1 0 + 164 14 38 -1 0 2 0 0 + 164 16 38 -1 0 3 -1 0 + 164 18 38 -1 0 2 -1 0 + 164 20 38 -1 0 3 -2 0 + 164 22 38 -1 0 2 -2 0 + 164 24 38 -1 0 1 -1 0 + 164 26 38 -1 0 1 -2 0 + 164 28 38 -1 0 2 -3 0 + 164 30 38 -1 0 2 -4 4 + 164 32 38 -1 0 3 -5 0 + 164 34 38 -1 0 3 -4 0 + 164 36 38 -1 0 4 -5 0 + 164 38 38 -1 0 4 -4 0 + 164 40 38 -1 0 3 -3 0 + 164 42 38 -1 0 4 -3 0 + 164 44 38 -1 0 3 -6 0 + 164 46 38 -1 0 7 -4 3 + 164 46 38 -1 0 7 -3 3 + 164 48 38 -1 0 4 -6 0 + 164 50 38 -1 0 5 -6 2 + 164 52 38 -1 0 5 -5 0 + 164 54 38 -1 0 5 -4 0 + 164 56 38 -1 0 6 -5 2 + 164 58 38 -1 0 6 -3 0 + 164 60 38 -1 0 5 -3 0 + 164 62 38 -1 0 6 -4 0 + 149 0 38 0 0 -2 -3 0 + 149 2 38 0 0 -2 -4 0 + 149 4 38 0 0 -3 -3 0 + 149 6 38 0 0 -1 -4 0 + 149 8 38 0 0 0 -5 0 + 149 10 38 0 0 -1 -5 2 + 149 12 38 0 0 1 -6 2 + 149 14 38 0 0 0 -4 0 + 149 16 38 0 0 -1 -3 0 + 149 18 38 0 0 0 -3 0 + 149 20 38 0 0 3 -7 3 + 149 20 38 0 0 4 -7 3 + 149 22 38 0 0 2 -6 0 + 149 24 38 0 0 1 -5 0 + 149 26 38 0 0 1 -4 0 + 149 28 38 0 0 2 -5 0 + 149 30 38 0 0 1 -3 0 + 149 32 38 0 0 0 -2 0 + 149 34 38 0 0 0 -1 0 + 149 36 38 0 0 -1 0 0 + 149 38 38 0 0 -1 -1 0 + 149 40 38 0 0 -4 0 0 + 149 42 38 0 0 -3 0 0 + 149 44 38 0 0 -3 -1 0 + 149 46 38 0 0 -5 0 0 + 149 48 38 0 0 -5 -1 2 + 149 50 38 0 0 -4 -1 0 + 149 52 38 0 0 -2 -1 0 + 149 54 38 0 0 -1 -2 0 + 149 56 38 0 0 -2 -2 0 + 149 58 38 0 0 -3 -2 0 + 149 60 38 0 0 -4 -3 3 + 149 60 38 0 0 -3 -4 3 + 149 62 38 0 0 -4 -2 0 + 150 0 38 0 0 -4 3 0 + 150 2 38 0 0 -4 2 0 + 150 4 38 0 0 -5 3 0 + 150 6 38 0 0 -6 4 0 + 150 8 38 0 0 -5 1 0 + 150 10 38 0 0 -6 3 0 + 150 12 38 0 0 -7 4 3 + 150 12 38 0 0 -7 3 3 + 150 14 38 0 0 -6 2 0 + 150 16 38 0 0 -6 1 2 + 150 18 38 0 0 -5 2 0 + 150 20 38 0 0 -4 1 0 + 150 22 38 0 0 -3 1 0 + 150 24 38 0 0 -3 2 0 + 150 26 38 0 0 -2 1 0 + 150 28 38 0 0 -2 0 0 + 150 30 38 0 0 -3 3 0 + 150 32 38 0 0 -2 3 0 + 150 34 38 0 0 -2 2 0 + 150 36 38 0 0 0 0 0 + 150 38 38 0 0 -1 1 0 + 150 40 38 0 0 -1 2 4 + 150 42 38 0 0 -2 4 0 + 150 44 38 0 0 -3 4 0 + 150 46 38 0 0 -3 5 0 + 150 48 38 0 0 -4 6 0 + 150 50 38 0 0 -4 5 0 + 150 52 38 0 0 -5 6 2 + 150 54 38 0 0 -5 4 0 + 150 56 38 0 0 -5 5 0 + 150 58 38 0 0 -4 4 0 + 150 62 38 0 0 -6 5 2 + 151 0 38 0 0 2 2 0 + 151 2 38 0 0 1 3 0 + 151 4 38 0 0 2 3 0 + 151 6 38 0 0 0 4 0 + 151 8 38 0 0 3 3 0 + 151 10 38 0 0 -1 4 0 + 151 12 38 0 0 -1 5 0 + 151 14 38 0 0 4 2 0 + 151 16 38 0 0 3 4 3 + 151 16 38 0 0 4 3 3 + 151 18 38 0 0 2 4 0 + 151 20 38 0 0 1 4 0 + 151 22 38 0 0 1 5 2 + 151 24 38 0 0 0 5 0 + 151 26 38 0 0 -1 6 2 + 151 28 38 0 0 -2 6 0 + 151 30 38 0 0 -2 5 0 + 151 32 38 0 0 -3 6 0 + 151 34 38 0 0 -4 7 3 + 151 34 38 0 0 -3 7 3 + 151 36 38 0 0 0 1 0 + 151 38 38 0 0 0 2 0 + 151 40 38 0 0 -1 3 0 + 151 42 38 0 0 0 3 0 + 151 44 38 0 0 1 0 0 + 151 46 38 0 0 3 1 0 + 151 48 38 0 0 4 0 0 + 151 50 38 0 0 5 0 0 + 151 52 38 0 0 2 1 0 + 151 54 38 0 0 1 1 0 + 151 56 38 0 0 1 2 0 + 151 58 38 0 0 3 2 0 + 151 60 38 0 0 5 1 2 + 151 62 38 0 0 4 1 0 + 152 0 38 0 0 5 -2 0 + 152 2 38 0 0 4 -2 0 + 152 4 38 0 0 4 -1 0 + 152 6 38 0 0 6 -2 0 + 152 8 38 0 0 3 0 0 + 152 10 38 0 0 6 -1 2 + 152 12 38 0 0 5 -1 0 + 152 14 38 0 0 2 0 0 + 152 16 38 0 0 3 -1 0 + 152 18 38 0 0 2 -1 0 + 152 20 38 0 0 3 -2 0 + 152 22 38 0 0 2 -2 0 + 152 24 38 0 0 1 -1 0 + 152 26 38 0 0 1 -2 0 + 152 28 38 0 0 2 -3 0 + 152 30 38 0 0 2 -4 4 + 152 32 38 0 0 3 -5 0 + 152 34 38 0 0 3 -4 0 + 152 36 38 0 0 4 -5 0 + 152 38 38 0 0 4 -4 0 + 152 40 38 0 0 3 -3 0 + 152 42 38 0 0 4 -3 0 + 152 44 38 0 0 3 -6 0 + 152 46 38 0 0 7 -4 3 + 152 46 38 0 0 7 -3 3 + 152 48 38 0 0 4 -6 0 + 152 50 38 0 0 5 -6 2 + 152 52 38 0 0 5 -5 0 + 152 54 38 0 0 5 -4 0 + 152 56 38 0 0 6 -5 2 + 152 58 38 0 0 6 -3 0 + 152 60 38 0 0 5 -3 0 + 152 62 38 0 0 6 -4 0 + 165 0 38 1 0 -2 -3 0 + 165 2 38 1 0 -2 -4 0 + 165 4 38 1 0 -3 -3 0 + 165 6 38 1 0 -1 -4 0 + 165 8 38 1 0 0 -5 0 + 165 10 38 1 0 -1 -5 2 + 165 12 38 1 0 1 -6 2 + 165 14 38 1 0 0 -4 0 + 165 16 38 1 0 -1 -3 0 + 165 18 38 1 0 0 -3 0 + 165 20 38 1 0 3 -7 3 + 165 20 38 1 0 4 -7 3 + 165 22 38 1 0 2 -6 0 + 165 24 38 1 0 1 -5 0 + 165 26 38 1 0 1 -4 0 + 165 28 38 1 0 2 -5 0 + 165 30 38 1 0 1 -3 0 + 165 32 38 1 0 0 -2 0 + 165 34 38 1 0 0 -1 0 + 165 36 38 1 0 -1 0 0 + 165 38 38 1 0 -1 -1 0 + 165 40 38 1 0 -4 0 0 + 165 42 38 1 0 -3 0 0 + 165 44 38 1 0 -3 -1 0 + 165 46 38 1 0 -5 0 0 + 165 48 38 1 0 -5 -1 2 + 165 50 38 1 0 -4 -1 0 + 165 52 38 1 0 -2 -1 0 + 165 54 38 1 0 -1 -2 0 + 165 56 38 1 0 -2 -2 0 + 165 58 38 1 0 -3 -2 0 + 165 60 38 1 0 -4 -3 3 + 165 60 38 1 0 -3 -4 3 + 165 62 38 1 0 -4 -2 0 + 166 0 38 1 0 -4 3 0 + 166 2 38 1 0 -4 2 0 + 166 4 38 1 0 -5 3 0 + 166 6 38 1 0 -6 4 0 + 166 8 38 1 0 -5 1 0 + 166 10 38 1 0 -6 3 0 + 166 12 38 1 0 -7 4 3 + 166 12 38 1 0 -7 3 3 + 166 14 38 1 0 -6 2 0 + 166 16 38 1 0 -6 1 2 + 166 18 38 1 0 -5 2 0 + 166 20 38 1 0 -4 1 0 + 166 22 38 1 0 -3 1 0 + 166 24 38 1 0 -3 2 0 + 166 26 38 1 0 -2 1 0 + 166 28 38 1 0 -2 0 0 + 166 30 38 1 0 -3 3 0 + 166 32 38 1 0 -2 3 0 + 166 34 38 1 0 -2 2 0 + 166 36 38 1 0 0 0 0 + 166 38 38 1 0 -1 1 0 + 166 40 38 1 0 -1 2 4 + 166 42 38 1 0 -2 4 0 + 166 44 38 1 0 -3 4 0 + 166 46 38 1 0 -3 5 0 + 166 48 38 1 0 -4 6 0 + 166 50 38 1 0 -4 5 0 + 166 52 38 1 0 -5 6 2 + 166 54 38 1 0 -5 4 0 + 166 56 38 1 0 -5 5 0 + 166 58 38 1 0 -4 4 0 + 166 62 38 1 0 -6 5 2 + 167 0 38 1 0 2 2 0 + 167 2 38 1 0 1 3 0 + 167 4 38 1 0 2 3 0 + 167 6 38 1 0 0 4 0 + 167 8 38 1 0 3 3 0 + 167 10 38 1 0 -1 4 0 + 167 12 38 1 0 -1 5 0 + 167 14 38 1 0 4 2 0 + 167 16 38 1 0 3 4 3 + 167 16 38 1 0 4 3 3 + 167 18 38 1 0 2 4 0 + 167 20 38 1 0 1 4 0 + 167 22 38 1 0 1 5 2 + 167 24 38 1 0 0 5 0 + 167 26 38 1 0 -1 6 2 + 167 28 38 1 0 -2 6 0 + 167 30 38 1 0 -2 5 0 + 167 32 38 1 0 -3 6 0 + 167 34 38 1 0 -4 7 3 + 167 34 38 1 0 -3 7 3 + 167 36 38 1 0 0 1 0 + 167 38 38 1 0 0 2 0 + 167 40 38 1 0 -1 3 0 + 167 42 38 1 0 0 3 0 + 167 44 38 1 0 1 0 0 + 167 46 38 1 0 3 1 0 + 167 48 38 1 0 4 0 0 + 167 50 38 1 0 5 0 0 + 167 52 38 1 0 2 1 0 + 167 54 38 1 0 1 1 0 + 167 56 38 1 0 1 2 0 + 167 58 38 1 0 3 2 0 + 167 60 38 1 0 5 1 2 + 167 62 38 1 0 4 1 0 + 168 0 38 1 0 5 -2 0 + 168 2 38 1 0 4 -2 0 + 168 4 38 1 0 4 -1 0 + 168 6 38 1 0 6 -2 0 + 168 8 38 1 0 3 0 0 + 168 10 38 1 0 6 -1 2 + 168 12 38 1 0 5 -1 0 + 168 14 38 1 0 2 0 0 + 168 16 38 1 0 3 -1 0 + 168 18 38 1 0 2 -1 0 + 168 20 38 1 0 3 -2 0 + 168 22 38 1 0 2 -2 0 + 168 24 38 1 0 1 -1 0 + 168 26 38 1 0 1 -2 0 + 168 28 38 1 0 2 -3 0 + 168 30 38 1 0 2 -4 4 + 168 32 38 1 0 3 -5 0 + 168 34 38 1 0 3 -4 0 + 168 36 38 1 0 4 -5 0 + 168 38 38 1 0 4 -4 0 + 168 40 38 1 0 3 -3 0 + 168 42 38 1 0 4 -3 0 + 168 44 38 1 0 3 -6 0 + 168 46 38 1 0 7 -4 3 + 168 46 38 1 0 7 -3 3 + 168 48 38 1 0 4 -6 0 + 168 50 38 1 0 5 -6 2 + 168 52 38 1 0 5 -5 0 + 168 54 38 1 0 5 -4 0 + 168 56 38 1 0 6 -5 2 + 168 58 38 1 0 6 -3 0 + 168 60 38 1 0 5 -3 0 + 168 62 38 1 0 6 -4 0 + 169 0 38 -1 1 -2 -3 0 + 169 2 38 -1 1 -2 -4 0 + 169 4 38 -1 1 -3 -3 0 + 169 6 38 -1 1 -1 -4 0 + 169 8 38 -1 1 0 -5 0 + 169 10 38 -1 1 -1 -5 2 + 169 12 38 -1 1 1 -6 2 + 169 14 38 -1 1 0 -4 0 + 169 16 38 -1 1 -1 -3 0 + 169 18 38 -1 1 0 -3 0 + 169 20 38 -1 1 3 -7 3 + 169 20 38 -1 1 4 -7 3 + 169 22 38 -1 1 2 -6 0 + 169 24 38 -1 1 1 -5 0 + 169 26 38 -1 1 1 -4 0 + 169 28 38 -1 1 2 -5 0 + 169 30 38 -1 1 1 -3 0 + 169 32 38 -1 1 0 -2 0 + 169 34 38 -1 1 0 -1 0 + 169 36 38 -1 1 -1 0 0 + 169 38 38 -1 1 -1 -1 0 + 169 40 38 -1 1 -4 0 0 + 169 42 38 -1 1 -3 0 0 + 169 44 38 -1 1 -3 -1 0 + 169 46 38 -1 1 -5 0 0 + 169 48 38 -1 1 -5 -1 2 + 169 50 38 -1 1 -4 -1 0 + 169 52 38 -1 1 -2 -1 0 + 169 54 38 -1 1 -1 -2 0 + 169 56 38 -1 1 -2 -2 0 + 169 58 38 -1 1 -3 -2 0 + 169 60 38 -1 1 -4 -3 3 + 169 60 38 -1 1 -3 -4 3 + 169 62 38 -1 1 -4 -2 0 + 170 0 38 -1 1 -4 3 0 + 170 2 38 -1 1 -4 2 0 + 170 4 38 -1 1 -5 3 0 + 170 6 38 -1 1 -6 4 0 + 170 8 38 -1 1 -5 1 0 + 170 10 38 -1 1 -6 3 0 + 170 12 38 -1 1 -7 4 3 + 170 12 38 -1 1 -7 3 3 + 170 14 38 -1 1 -6 2 0 + 170 16 38 -1 1 -6 1 2 + 170 18 38 -1 1 -5 2 0 + 170 20 38 -1 1 -4 1 0 + 170 22 38 -1 1 -3 1 0 + 170 24 38 -1 1 -3 2 0 + 170 26 38 -1 1 -2 1 0 + 170 28 38 -1 1 -2 0 0 + 170 30 38 -1 1 -3 3 0 + 170 32 38 -1 1 -2 3 0 + 170 34 38 -1 1 -2 2 0 + 170 36 38 -1 1 0 0 0 + 170 38 38 -1 1 -1 1 0 + 170 40 38 -1 1 -1 2 4 + 170 42 38 -1 1 -2 4 0 + 170 44 38 -1 1 -3 4 0 + 170 46 38 -1 1 -3 5 0 + 170 48 38 -1 1 -4 6 0 + 170 50 38 -1 1 -4 5 0 + 170 52 38 -1 1 -5 6 2 + 170 54 38 -1 1 -5 4 0 + 170 56 38 -1 1 -5 5 0 + 170 58 38 -1 1 -4 4 0 + 170 62 38 -1 1 -6 5 2 + 171 0 38 -1 1 2 2 0 + 171 2 38 -1 1 1 3 0 + 171 4 38 -1 1 2 3 0 + 171 6 38 -1 1 0 4 0 + 171 8 38 -1 1 3 3 0 + 171 10 38 -1 1 -1 4 0 + 171 12 38 -1 1 -1 5 0 + 171 14 38 -1 1 4 2 0 + 171 16 38 -1 1 3 4 3 + 171 16 38 -1 1 4 3 3 + 171 18 38 -1 1 2 4 0 + 171 20 38 -1 1 1 4 0 + 171 22 38 -1 1 1 5 2 + 171 24 38 -1 1 0 5 0 + 171 26 38 -1 1 -1 6 2 + 171 28 38 -1 1 -2 6 0 + 171 30 38 -1 1 -2 5 0 + 171 32 38 -1 1 -3 6 0 + 171 34 38 -1 1 -4 7 3 + 171 34 38 -1 1 -3 7 3 + 171 36 38 -1 1 0 1 0 + 171 38 38 -1 1 0 2 0 + 171 40 38 -1 1 -1 3 0 + 171 42 38 -1 1 0 3 0 + 171 44 38 -1 1 1 0 0 + 171 46 38 -1 1 3 1 0 + 171 48 38 -1 1 4 0 0 + 171 50 38 -1 1 5 0 0 + 171 52 38 -1 1 2 1 0 + 171 54 38 -1 1 1 1 0 + 171 56 38 -1 1 1 2 0 + 171 58 38 -1 1 3 2 0 + 171 60 38 -1 1 5 1 2 + 171 62 38 -1 1 4 1 0 + 172 0 38 -1 1 5 -2 0 + 172 2 38 -1 1 4 -2 0 + 172 4 38 -1 1 4 -1 0 + 172 6 38 -1 1 6 -2 0 + 172 8 38 -1 1 3 0 0 + 172 10 38 -1 1 6 -1 2 + 172 12 38 -1 1 5 -1 0 + 172 14 38 -1 1 2 0 0 + 172 16 38 -1 1 3 -1 0 + 172 18 38 -1 1 2 -1 0 + 172 20 38 -1 1 3 -2 0 + 172 22 38 -1 1 2 -2 0 + 172 24 38 -1 1 1 -1 0 + 172 26 38 -1 1 1 -2 0 + 172 28 38 -1 1 2 -3 0 + 172 30 38 -1 1 2 -4 4 + 172 32 38 -1 1 3 -5 0 + 172 34 38 -1 1 3 -4 0 + 172 36 38 -1 1 4 -5 0 + 172 38 38 -1 1 4 -4 0 + 172 40 38 -1 1 3 -3 0 + 172 42 38 -1 1 4 -3 0 + 172 44 38 -1 1 3 -6 0 + 172 46 38 -1 1 7 -4 3 + 172 46 38 -1 1 7 -3 3 + 172 48 38 -1 1 4 -6 0 + 172 50 38 -1 1 5 -6 2 + 172 52 38 -1 1 5 -5 0 + 172 54 38 -1 1 5 -4 0 + 172 56 38 -1 1 6 -5 2 + 172 58 38 -1 1 6 -3 0 + 172 60 38 -1 1 5 -3 0 + 172 62 38 -1 1 6 -4 0 + 173 0 38 0 1 -2 -3 0 + 173 2 38 0 1 -2 -4 0 + 173 4 38 0 1 -3 -3 0 + 173 6 38 0 1 -1 -4 0 + 173 8 38 0 1 0 -5 0 + 173 10 38 0 1 -1 -5 2 + 173 12 38 0 1 1 -6 2 + 173 14 38 0 1 0 -4 0 + 173 16 38 0 1 -1 -3 0 + 173 18 38 0 1 0 -3 0 + 173 20 38 0 1 3 -7 3 + 173 20 38 0 1 4 -7 3 + 173 22 38 0 1 2 -6 0 + 173 24 38 0 1 1 -5 0 + 173 26 38 0 1 1 -4 0 + 173 28 38 0 1 2 -5 0 + 173 30 38 0 1 1 -3 0 + 173 32 38 0 1 0 -2 0 + 173 34 38 0 1 0 -1 0 + 173 36 38 0 1 -1 0 0 + 173 38 38 0 1 -1 -1 0 + 173 40 38 0 1 -4 0 0 + 173 42 38 0 1 -3 0 0 + 173 44 38 0 1 -3 -1 0 + 173 46 38 0 1 -5 0 0 + 173 48 38 0 1 -5 -1 2 + 173 50 38 0 1 -4 -1 0 + 173 52 38 0 1 -2 -1 0 + 173 54 38 0 1 -1 -2 0 + 173 56 38 0 1 -2 -2 0 + 173 58 38 0 1 -3 -2 0 + 173 60 38 0 1 -4 -3 3 + 173 60 38 0 1 -3 -4 3 + 173 62 38 0 1 -4 -2 0 + 174 0 38 0 1 -4 3 0 + 174 2 38 0 1 -4 2 0 + 174 4 38 0 1 -5 3 0 + 174 6 38 0 1 -6 4 0 + 174 8 38 0 1 -5 1 0 + 174 10 38 0 1 -6 3 0 + 174 12 38 0 1 -7 4 3 + 174 12 38 0 1 -7 3 3 + 174 14 38 0 1 -6 2 0 + 174 16 38 0 1 -6 1 2 + 174 18 38 0 1 -5 2 0 + 174 20 38 0 1 -4 1 0 + 174 22 38 0 1 -3 1 0 + 174 24 38 0 1 -3 2 0 + 174 26 38 0 1 -2 1 0 + 174 28 38 0 1 -2 0 0 + 174 30 38 0 1 -3 3 0 + 174 32 38 0 1 -2 3 0 + 174 34 38 0 1 -2 2 0 + 174 36 38 0 1 0 0 0 + 174 38 38 0 1 -1 1 0 + 174 40 38 0 1 -1 2 4 + 174 42 38 0 1 -2 4 0 + 174 44 38 0 1 -3 4 0 + 174 46 38 0 1 -3 5 0 + 174 48 38 0 1 -4 6 0 + 174 50 38 0 1 -4 5 0 + 174 52 38 0 1 -5 6 2 + 174 54 38 0 1 -5 4 0 + 174 56 38 0 1 -5 5 0 + 174 58 38 0 1 -4 4 0 + 174 62 38 0 1 -6 5 2 + 175 0 38 0 1 2 2 0 + 175 2 38 0 1 1 3 0 + 175 4 38 0 1 2 3 0 + 175 6 38 0 1 0 4 0 + 175 8 38 0 1 3 3 0 + 175 10 38 0 1 -1 4 0 + 175 12 38 0 1 -1 5 0 + 175 14 38 0 1 4 2 0 + 175 16 38 0 1 3 4 3 + 175 16 38 0 1 4 3 3 + 175 18 38 0 1 2 4 0 + 175 20 38 0 1 1 4 0 + 175 22 38 0 1 1 5 2 + 175 24 38 0 1 0 5 0 + 175 26 38 0 1 -1 6 2 + 175 28 38 0 1 -2 6 0 + 175 30 38 0 1 -2 5 0 + 175 32 38 0 1 -3 6 0 + 175 34 38 0 1 -4 7 3 + 175 34 38 0 1 -3 7 3 + 175 36 38 0 1 0 1 0 + 175 38 38 0 1 0 2 0 + 175 40 38 0 1 -1 3 0 + 175 42 38 0 1 0 3 0 + 175 44 38 0 1 1 0 0 + 175 46 38 0 1 3 1 0 + 175 48 38 0 1 4 0 0 + 175 50 38 0 1 5 0 0 + 175 52 38 0 1 2 1 0 + 175 54 38 0 1 1 1 0 + 175 56 38 0 1 1 2 0 + 175 58 38 0 1 3 2 0 + 175 60 38 0 1 5 1 2 + 175 62 38 0 1 4 1 0 + 176 0 38 0 1 5 -2 0 + 176 2 38 0 1 4 -2 0 + 176 4 38 0 1 4 -1 0 + 176 6 38 0 1 6 -2 0 + 176 8 38 0 1 3 0 0 + 176 10 38 0 1 6 -1 2 + 176 12 38 0 1 5 -1 0 + 176 14 38 0 1 2 0 0 + 176 16 38 0 1 3 -1 0 + 176 18 38 0 1 2 -1 0 + 176 20 38 0 1 3 -2 0 + 176 22 38 0 1 2 -2 0 + 176 24 38 0 1 1 -1 0 + 176 26 38 0 1 1 -2 0 + 176 28 38 0 1 2 -3 0 + 176 30 38 0 1 2 -4 4 + 176 32 38 0 1 3 -5 0 + 176 34 38 0 1 3 -4 0 + 176 36 38 0 1 4 -5 0 + 176 38 38 0 1 4 -4 0 + 176 40 38 0 1 3 -3 0 + 176 42 38 0 1 4 -3 0 + 176 44 38 0 1 3 -6 0 + 176 46 38 0 1 7 -4 3 + 176 46 38 0 1 7 -3 3 + 176 48 38 0 1 4 -6 0 + 176 50 38 0 1 5 -6 2 + 176 52 38 0 1 5 -5 0 + 176 54 38 0 1 5 -4 0 + 176 56 38 0 1 6 -5 2 + 176 58 38 0 1 6 -3 0 + 176 60 38 0 1 5 -3 0 + 176 62 38 0 1 6 -4 0 + 157 0 39 0 -1 -2 -3 0 + 157 2 39 0 -1 -2 -4 0 + 157 4 39 0 -1 -3 -3 0 + 157 6 39 0 -1 -1 -4 0 + 157 8 39 0 -1 0 -5 0 + 157 10 39 0 -1 -1 -5 2 + 157 12 39 0 -1 1 -6 2 + 157 14 39 0 -1 0 -4 0 + 157 16 39 0 -1 -1 -3 0 + 157 18 39 0 -1 0 -3 0 + 157 20 39 0 -1 3 -7 3 + 157 20 39 0 -1 4 -7 3 + 157 22 39 0 -1 2 -6 0 + 157 24 39 0 -1 1 -5 0 + 157 26 39 0 -1 1 -4 0 + 157 28 39 0 -1 2 -5 0 + 157 30 39 0 -1 1 -3 0 + 157 32 39 0 -1 0 -2 0 + 157 34 39 0 -1 0 -1 0 + 157 36 39 0 -1 -1 0 0 + 157 38 39 0 -1 -1 -1 0 + 157 40 39 0 -1 -4 0 0 + 157 42 39 0 -1 -3 0 0 + 157 44 39 0 -1 -3 -1 0 + 157 46 39 0 -1 -5 0 0 + 157 48 39 0 -1 -5 -1 2 + 157 50 39 0 -1 -4 -1 0 + 157 52 39 0 -1 -2 -1 0 + 157 54 39 0 -1 -1 -2 0 + 157 56 39 0 -1 -2 -2 0 + 157 58 39 0 -1 -3 -2 0 + 157 60 39 0 -1 -4 -3 3 + 157 60 39 0 -1 -3 -4 3 + 157 62 39 0 -1 -4 -2 0 + 158 0 39 0 -1 -4 3 0 + 158 2 39 0 -1 -4 2 0 + 158 4 39 0 -1 -5 3 0 + 158 6 39 0 -1 -6 4 0 + 158 8 39 0 -1 -5 1 0 + 158 10 39 0 -1 -6 3 0 + 158 12 39 0 -1 -7 4 3 + 158 12 39 0 -1 -7 3 3 + 158 14 39 0 -1 -6 2 0 + 158 16 39 0 -1 -6 1 2 + 158 18 39 0 -1 -5 2 0 + 158 20 39 0 -1 -4 1 0 + 158 22 39 0 -1 -3 1 0 + 158 24 39 0 -1 -3 2 0 + 158 26 39 0 -1 -2 1 0 + 158 28 39 0 -1 -2 0 0 + 158 30 39 0 -1 -3 3 0 + 158 32 39 0 -1 -2 3 0 + 158 34 39 0 -1 -2 2 0 + 158 36 39 0 -1 0 0 0 + 158 38 39 0 -1 -1 1 0 + 158 40 39 0 -1 -1 2 4 + 158 42 39 0 -1 -2 4 0 + 158 44 39 0 -1 -3 4 0 + 158 46 39 0 -1 -3 5 0 + 158 48 39 0 -1 -4 6 0 + 158 50 39 0 -1 -4 5 0 + 158 52 39 0 -1 -5 6 2 + 158 54 39 0 -1 -5 4 0 + 158 56 39 0 -1 -5 5 0 + 158 58 39 0 -1 -4 4 0 + 158 62 39 0 -1 -6 5 2 + 159 0 39 0 -1 2 2 0 + 159 2 39 0 -1 1 3 0 + 159 4 39 0 -1 2 3 0 + 159 6 39 0 -1 0 4 0 + 159 8 39 0 -1 3 3 0 + 159 10 39 0 -1 -1 4 0 + 159 12 39 0 -1 -1 5 0 + 159 14 39 0 -1 4 2 0 + 159 16 39 0 -1 3 4 3 + 159 16 39 0 -1 4 3 3 + 159 18 39 0 -1 2 4 0 + 159 20 39 0 -1 1 4 0 + 159 22 39 0 -1 1 5 2 + 159 24 39 0 -1 0 5 0 + 159 26 39 0 -1 -1 6 2 + 159 28 39 0 -1 -2 6 0 + 159 30 39 0 -1 -2 5 0 + 159 32 39 0 -1 -3 6 0 + 159 34 39 0 -1 -4 7 3 + 159 34 39 0 -1 -3 7 3 + 159 36 39 0 -1 0 1 0 + 159 38 39 0 -1 0 2 0 + 159 40 39 0 -1 -1 3 0 + 159 42 39 0 -1 0 3 0 + 159 44 39 0 -1 1 0 0 + 159 46 39 0 -1 3 1 0 + 159 48 39 0 -1 4 0 0 + 159 50 39 0 -1 5 0 0 + 159 52 39 0 -1 2 1 0 + 159 54 39 0 -1 1 1 0 + 159 56 39 0 -1 1 2 0 + 159 58 39 0 -1 3 2 0 + 159 60 39 0 -1 5 1 2 + 159 62 39 0 -1 4 1 0 + 160 0 39 0 -1 5 -2 0 + 160 2 39 0 -1 4 -2 0 + 160 4 39 0 -1 4 -1 0 + 160 6 39 0 -1 6 -2 0 + 160 8 39 0 -1 3 0 0 + 160 10 39 0 -1 6 -1 2 + 160 12 39 0 -1 5 -1 0 + 160 14 39 0 -1 2 0 0 + 160 16 39 0 -1 3 -1 0 + 160 18 39 0 -1 2 -1 0 + 160 20 39 0 -1 3 -2 0 + 160 22 39 0 -1 2 -2 0 + 160 24 39 0 -1 1 -1 0 + 160 26 39 0 -1 1 -2 0 + 160 28 39 0 -1 2 -3 0 + 160 30 39 0 -1 2 -4 4 + 160 32 39 0 -1 3 -5 0 + 160 34 39 0 -1 3 -4 0 + 160 36 39 0 -1 4 -5 0 + 160 38 39 0 -1 4 -4 0 + 160 40 39 0 -1 3 -3 0 + 160 42 39 0 -1 4 -3 0 + 160 44 39 0 -1 3 -6 0 + 160 46 39 0 -1 7 -4 3 + 160 46 39 0 -1 7 -3 3 + 160 48 39 0 -1 4 -6 0 + 160 50 39 0 -1 5 -6 2 + 160 52 39 0 -1 5 -5 0 + 160 54 39 0 -1 5 -4 0 + 160 56 39 0 -1 6 -5 2 + 160 58 39 0 -1 6 -3 0 + 160 60 39 0 -1 5 -3 0 + 160 62 39 0 -1 6 -4 0 + 161 0 39 1 -1 -2 -3 0 + 161 2 39 1 -1 -2 -4 0 + 161 4 39 1 -1 -3 -3 0 + 161 6 39 1 -1 -1 -4 0 + 161 8 39 1 -1 0 -5 0 + 161 10 39 1 -1 -1 -5 2 + 161 12 39 1 -1 1 -6 2 + 161 14 39 1 -1 0 -4 0 + 161 16 39 1 -1 -1 -3 0 + 161 18 39 1 -1 0 -3 0 + 161 20 39 1 -1 3 -7 3 + 161 20 39 1 -1 4 -7 3 + 161 22 39 1 -1 2 -6 0 + 161 24 39 1 -1 1 -5 0 + 161 26 39 1 -1 1 -4 0 + 161 28 39 1 -1 2 -5 0 + 161 30 39 1 -1 1 -3 0 + 161 32 39 1 -1 0 -2 0 + 161 34 39 1 -1 0 -1 0 + 161 36 39 1 -1 -1 0 0 + 161 38 39 1 -1 -1 -1 0 + 161 40 39 1 -1 -4 0 0 + 161 42 39 1 -1 -3 0 0 + 161 44 39 1 -1 -3 -1 0 + 161 46 39 1 -1 -5 0 0 + 161 48 39 1 -1 -5 -1 2 + 161 50 39 1 -1 -4 -1 0 + 161 52 39 1 -1 -2 -1 0 + 161 54 39 1 -1 -1 -2 0 + 161 56 39 1 -1 -2 -2 0 + 161 58 39 1 -1 -3 -2 0 + 161 60 39 1 -1 -4 -3 3 + 161 60 39 1 -1 -3 -4 3 + 161 62 39 1 -1 -4 -2 0 + 162 0 39 1 -1 -4 3 0 + 162 2 39 1 -1 -4 2 0 + 162 4 39 1 -1 -5 3 0 + 162 6 39 1 -1 -6 4 0 + 162 8 39 1 -1 -5 1 0 + 162 10 39 1 -1 -6 3 0 + 162 12 39 1 -1 -7 4 3 + 162 12 39 1 -1 -7 3 3 + 162 14 39 1 -1 -6 2 0 + 162 16 39 1 -1 -6 1 2 + 162 18 39 1 -1 -5 2 0 + 162 20 39 1 -1 -4 1 0 + 162 22 39 1 -1 -3 1 0 + 162 24 39 1 -1 -3 2 0 + 162 26 39 1 -1 -2 1 0 + 162 28 39 1 -1 -2 0 0 + 162 30 39 1 -1 -3 3 0 + 162 32 39 1 -1 -2 3 0 + 162 34 39 1 -1 -2 2 0 + 162 36 39 1 -1 0 0 0 + 162 38 39 1 -1 -1 1 0 + 162 40 39 1 -1 -1 2 4 + 162 42 39 1 -1 -2 4 0 + 162 44 39 1 -1 -3 4 0 + 162 46 39 1 -1 -3 5 0 + 162 48 39 1 -1 -4 6 0 + 162 50 39 1 -1 -4 5 0 + 162 52 39 1 -1 -5 6 2 + 162 54 39 1 -1 -5 4 0 + 162 56 39 1 -1 -5 5 0 + 162 58 39 1 -1 -4 4 0 + 162 62 39 1 -1 -6 5 2 + 163 0 39 1 -1 2 2 0 + 163 2 39 1 -1 1 3 0 + 163 4 39 1 -1 2 3 0 + 163 6 39 1 -1 0 4 0 + 163 8 39 1 -1 3 3 0 + 163 10 39 1 -1 -1 4 0 + 163 12 39 1 -1 -1 5 0 + 163 14 39 1 -1 4 2 0 + 163 16 39 1 -1 3 4 3 + 163 16 39 1 -1 4 3 3 + 163 18 39 1 -1 2 4 0 + 163 20 39 1 -1 1 4 0 + 163 22 39 1 -1 1 5 2 + 163 24 39 1 -1 0 5 0 + 163 26 39 1 -1 -1 6 2 + 163 28 39 1 -1 -2 6 0 + 163 30 39 1 -1 -2 5 0 + 163 32 39 1 -1 -3 6 0 + 163 34 39 1 -1 -4 7 3 + 163 34 39 1 -1 -3 7 3 + 163 36 39 1 -1 0 1 0 + 163 38 39 1 -1 0 2 0 + 163 40 39 1 -1 -1 3 0 + 163 42 39 1 -1 0 3 0 + 163 44 39 1 -1 1 0 0 + 163 46 39 1 -1 3 1 0 + 163 48 39 1 -1 4 0 0 + 163 50 39 1 -1 5 0 0 + 163 52 39 1 -1 2 1 0 + 163 54 39 1 -1 1 1 0 + 163 56 39 1 -1 1 2 0 + 163 58 39 1 -1 3 2 0 + 163 60 39 1 -1 5 1 2 + 163 62 39 1 -1 4 1 0 + 164 0 39 1 -1 5 -2 0 + 164 2 39 1 -1 4 -2 0 + 164 4 39 1 -1 4 -1 0 + 164 6 39 1 -1 6 -2 0 + 164 8 39 1 -1 3 0 0 + 164 10 39 1 -1 6 -1 2 + 164 12 39 1 -1 5 -1 0 + 164 14 39 1 -1 2 0 0 + 164 16 39 1 -1 3 -1 0 + 164 18 39 1 -1 2 -1 0 + 164 20 39 1 -1 3 -2 0 + 164 22 39 1 -1 2 -2 0 + 164 24 39 1 -1 1 -1 0 + 164 26 39 1 -1 1 -2 0 + 164 28 39 1 -1 2 -3 0 + 164 30 39 1 -1 2 -4 4 + 164 32 39 1 -1 3 -5 0 + 164 34 39 1 -1 3 -4 0 + 164 36 39 1 -1 4 -5 0 + 164 38 39 1 -1 4 -4 0 + 164 40 39 1 -1 3 -3 0 + 164 42 39 1 -1 4 -3 0 + 164 44 39 1 -1 3 -6 0 + 164 46 39 1 -1 7 -4 3 + 164 46 39 1 -1 7 -3 3 + 164 48 39 1 -1 4 -6 0 + 164 50 39 1 -1 5 -6 2 + 164 52 39 1 -1 5 -5 0 + 164 54 39 1 -1 5 -4 0 + 164 56 39 1 -1 6 -5 2 + 164 58 39 1 -1 6 -3 0 + 164 60 39 1 -1 5 -3 0 + 164 62 39 1 -1 6 -4 0 + 165 0 39 -1 0 -2 -3 0 + 165 2 39 -1 0 -2 -4 0 + 165 4 39 -1 0 -3 -3 0 + 165 6 39 -1 0 -1 -4 0 + 165 8 39 -1 0 0 -5 0 + 165 10 39 -1 0 -1 -5 2 + 165 12 39 -1 0 1 -6 2 + 165 14 39 -1 0 0 -4 0 + 165 16 39 -1 0 -1 -3 0 + 165 18 39 -1 0 0 -3 0 + 165 20 39 -1 0 3 -7 3 + 165 20 39 -1 0 4 -7 3 + 165 22 39 -1 0 2 -6 0 + 165 24 39 -1 0 1 -5 0 + 165 26 39 -1 0 1 -4 0 + 165 28 39 -1 0 2 -5 0 + 165 30 39 -1 0 1 -3 0 + 165 32 39 -1 0 0 -2 0 + 165 34 39 -1 0 0 -1 0 + 165 36 39 -1 0 -1 0 0 + 165 38 39 -1 0 -1 -1 0 + 165 40 39 -1 0 -4 0 0 + 165 42 39 -1 0 -3 0 0 + 165 44 39 -1 0 -3 -1 0 + 165 46 39 -1 0 -5 0 0 + 165 48 39 -1 0 -5 -1 2 + 165 50 39 -1 0 -4 -1 0 + 165 52 39 -1 0 -2 -1 0 + 165 54 39 -1 0 -1 -2 0 + 165 56 39 -1 0 -2 -2 0 + 165 58 39 -1 0 -3 -2 0 + 165 60 39 -1 0 -4 -3 3 + 165 60 39 -1 0 -3 -4 3 + 165 62 39 -1 0 -4 -2 0 + 166 0 39 -1 0 -4 3 0 + 166 2 39 -1 0 -4 2 0 + 166 4 39 -1 0 -5 3 0 + 166 6 39 -1 0 -6 4 0 + 166 8 39 -1 0 -5 1 0 + 166 10 39 -1 0 -6 3 0 + 166 12 39 -1 0 -7 4 3 + 166 12 39 -1 0 -7 3 3 + 166 14 39 -1 0 -6 2 0 + 166 16 39 -1 0 -6 1 2 + 166 18 39 -1 0 -5 2 0 + 166 20 39 -1 0 -4 1 0 + 166 22 39 -1 0 -3 1 0 + 166 24 39 -1 0 -3 2 0 + 166 26 39 -1 0 -2 1 0 + 166 28 39 -1 0 -2 0 0 + 166 30 39 -1 0 -3 3 0 + 166 32 39 -1 0 -2 3 0 + 166 34 39 -1 0 -2 2 0 + 166 36 39 -1 0 0 0 0 + 166 38 39 -1 0 -1 1 0 + 166 40 39 -1 0 -1 2 4 + 166 42 39 -1 0 -2 4 0 + 166 44 39 -1 0 -3 4 0 + 166 46 39 -1 0 -3 5 0 + 166 48 39 -1 0 -4 6 0 + 166 50 39 -1 0 -4 5 0 + 166 52 39 -1 0 -5 6 2 + 166 54 39 -1 0 -5 4 0 + 166 56 39 -1 0 -5 5 0 + 166 58 39 -1 0 -4 4 0 + 166 62 39 -1 0 -6 5 2 + 167 0 39 -1 0 2 2 0 + 167 2 39 -1 0 1 3 0 + 167 4 39 -1 0 2 3 0 + 167 6 39 -1 0 0 4 0 + 167 8 39 -1 0 3 3 0 + 167 10 39 -1 0 -1 4 0 + 167 12 39 -1 0 -1 5 0 + 167 14 39 -1 0 4 2 0 + 167 16 39 -1 0 3 4 3 + 167 16 39 -1 0 4 3 3 + 167 18 39 -1 0 2 4 0 + 167 20 39 -1 0 1 4 0 + 167 22 39 -1 0 1 5 2 + 167 24 39 -1 0 0 5 0 + 167 26 39 -1 0 -1 6 2 + 167 28 39 -1 0 -2 6 0 + 167 30 39 -1 0 -2 5 0 + 167 32 39 -1 0 -3 6 0 + 167 34 39 -1 0 -4 7 3 + 167 34 39 -1 0 -3 7 3 + 167 36 39 -1 0 0 1 0 + 167 38 39 -1 0 0 2 0 + 167 40 39 -1 0 -1 3 0 + 167 42 39 -1 0 0 3 0 + 167 44 39 -1 0 1 0 0 + 167 46 39 -1 0 3 1 0 + 167 48 39 -1 0 4 0 0 + 167 50 39 -1 0 5 0 0 + 167 52 39 -1 0 2 1 0 + 167 54 39 -1 0 1 1 0 + 167 56 39 -1 0 1 2 0 + 167 58 39 -1 0 3 2 0 + 167 60 39 -1 0 5 1 2 + 167 62 39 -1 0 4 1 0 + 168 0 39 -1 0 5 -2 0 + 168 2 39 -1 0 4 -2 0 + 168 4 39 -1 0 4 -1 0 + 168 6 39 -1 0 6 -2 0 + 168 8 39 -1 0 3 0 0 + 168 10 39 -1 0 6 -1 2 + 168 12 39 -1 0 5 -1 0 + 168 14 39 -1 0 2 0 0 + 168 16 39 -1 0 3 -1 0 + 168 18 39 -1 0 2 -1 0 + 168 20 39 -1 0 3 -2 0 + 168 22 39 -1 0 2 -2 0 + 168 24 39 -1 0 1 -1 0 + 168 26 39 -1 0 1 -2 0 + 168 28 39 -1 0 2 -3 0 + 168 30 39 -1 0 2 -4 4 + 168 32 39 -1 0 3 -5 0 + 168 34 39 -1 0 3 -4 0 + 168 36 39 -1 0 4 -5 0 + 168 38 39 -1 0 4 -4 0 + 168 40 39 -1 0 3 -3 0 + 168 42 39 -1 0 4 -3 0 + 168 44 39 -1 0 3 -6 0 + 168 46 39 -1 0 7 -4 3 + 168 46 39 -1 0 7 -3 3 + 168 48 39 -1 0 4 -6 0 + 168 50 39 -1 0 5 -6 2 + 168 52 39 -1 0 5 -5 0 + 168 54 39 -1 0 5 -4 0 + 168 56 39 -1 0 6 -5 2 + 168 58 39 -1 0 6 -3 0 + 168 60 39 -1 0 5 -3 0 + 168 62 39 -1 0 6 -4 0 + 153 0 39 0 0 -2 -3 0 + 153 2 39 0 0 -2 -4 0 + 153 4 39 0 0 -3 -3 0 + 153 6 39 0 0 -1 -4 0 + 153 8 39 0 0 0 -5 0 + 153 10 39 0 0 -1 -5 2 + 153 12 39 0 0 1 -6 2 + 153 14 39 0 0 0 -4 0 + 153 16 39 0 0 -1 -3 0 + 153 18 39 0 0 0 -3 0 + 153 20 39 0 0 3 -7 3 + 153 20 39 0 0 4 -7 3 + 153 22 39 0 0 2 -6 0 + 153 24 39 0 0 1 -5 0 + 153 26 39 0 0 1 -4 0 + 153 28 39 0 0 2 -5 0 + 153 30 39 0 0 1 -3 0 + 153 32 39 0 0 0 -2 0 + 153 34 39 0 0 0 -1 0 + 153 36 39 0 0 -1 0 0 + 153 38 39 0 0 -1 -1 0 + 153 40 39 0 0 -4 0 0 + 153 42 39 0 0 -3 0 0 + 153 44 39 0 0 -3 -1 0 + 153 46 39 0 0 -5 0 0 + 153 48 39 0 0 -5 -1 2 + 153 50 39 0 0 -4 -1 0 + 153 52 39 0 0 -2 -1 0 + 153 54 39 0 0 -1 -2 0 + 153 56 39 0 0 -2 -2 0 + 153 58 39 0 0 -3 -2 0 + 153 60 39 0 0 -4 -3 3 + 153 60 39 0 0 -3 -4 3 + 153 62 39 0 0 -4 -2 0 + 154 0 39 0 0 -4 3 0 + 154 2 39 0 0 -4 2 0 + 154 4 39 0 0 -5 3 0 + 154 6 39 0 0 -6 4 0 + 154 8 39 0 0 -5 1 0 + 154 10 39 0 0 -6 3 0 + 154 12 39 0 0 -7 4 3 + 154 12 39 0 0 -7 3 3 + 154 14 39 0 0 -6 2 0 + 154 16 39 0 0 -6 1 2 + 154 18 39 0 0 -5 2 0 + 154 20 39 0 0 -4 1 0 + 154 22 39 0 0 -3 1 0 + 154 24 39 0 0 -3 2 0 + 154 26 39 0 0 -2 1 0 + 154 28 39 0 0 -2 0 0 + 154 30 39 0 0 -3 3 0 + 154 32 39 0 0 -2 3 0 + 154 34 39 0 0 -2 2 0 + 154 36 39 0 0 0 0 0 + 154 38 39 0 0 -1 1 0 + 154 40 39 0 0 -1 2 4 + 154 42 39 0 0 -2 4 0 + 154 44 39 0 0 -3 4 0 + 154 46 39 0 0 -3 5 0 + 154 48 39 0 0 -4 6 0 + 154 50 39 0 0 -4 5 0 + 154 52 39 0 0 -5 6 2 + 154 54 39 0 0 -5 4 0 + 154 56 39 0 0 -5 5 0 + 154 58 39 0 0 -4 4 0 + 154 62 39 0 0 -6 5 2 + 155 0 39 0 0 2 2 0 + 155 2 39 0 0 1 3 0 + 155 4 39 0 0 2 3 0 + 155 6 39 0 0 0 4 0 + 155 8 39 0 0 3 3 0 + 155 10 39 0 0 -1 4 0 + 155 12 39 0 0 -1 5 0 + 155 14 39 0 0 4 2 0 + 155 16 39 0 0 3 4 3 + 155 16 39 0 0 4 3 3 + 155 18 39 0 0 2 4 0 + 155 20 39 0 0 1 4 0 + 155 22 39 0 0 1 5 2 + 155 24 39 0 0 0 5 0 + 155 26 39 0 0 -1 6 2 + 155 28 39 0 0 -2 6 0 + 155 30 39 0 0 -2 5 0 + 155 32 39 0 0 -3 6 0 + 155 34 39 0 0 -4 7 3 + 155 34 39 0 0 -3 7 3 + 155 36 39 0 0 0 1 0 + 155 38 39 0 0 0 2 0 + 155 40 39 0 0 -1 3 0 + 155 42 39 0 0 0 3 0 + 155 44 39 0 0 1 0 0 + 155 46 39 0 0 3 1 0 + 155 48 39 0 0 4 0 0 + 155 50 39 0 0 5 0 0 + 155 52 39 0 0 2 1 0 + 155 54 39 0 0 1 1 0 + 155 56 39 0 0 1 2 0 + 155 58 39 0 0 3 2 0 + 155 60 39 0 0 5 1 2 + 155 62 39 0 0 4 1 0 + 156 0 39 0 0 5 -2 0 + 156 2 39 0 0 4 -2 0 + 156 4 39 0 0 4 -1 0 + 156 6 39 0 0 6 -2 0 + 156 8 39 0 0 3 0 0 + 156 10 39 0 0 6 -1 2 + 156 12 39 0 0 5 -1 0 + 156 14 39 0 0 2 0 0 + 156 16 39 0 0 3 -1 0 + 156 18 39 0 0 2 -1 0 + 156 20 39 0 0 3 -2 0 + 156 22 39 0 0 2 -2 0 + 156 24 39 0 0 1 -1 0 + 156 26 39 0 0 1 -2 0 + 156 28 39 0 0 2 -3 0 + 156 30 39 0 0 2 -4 4 + 156 32 39 0 0 3 -5 0 + 156 34 39 0 0 3 -4 0 + 156 36 39 0 0 4 -5 0 + 156 38 39 0 0 4 -4 0 + 156 40 39 0 0 3 -3 0 + 156 42 39 0 0 4 -3 0 + 156 44 39 0 0 3 -6 0 + 156 46 39 0 0 7 -4 3 + 156 46 39 0 0 7 -3 3 + 156 48 39 0 0 4 -6 0 + 156 50 39 0 0 5 -6 2 + 156 52 39 0 0 5 -5 0 + 156 54 39 0 0 5 -4 0 + 156 56 39 0 0 6 -5 2 + 156 58 39 0 0 6 -3 0 + 156 60 39 0 0 5 -3 0 + 156 62 39 0 0 6 -4 0 + 169 0 39 1 0 -2 -3 0 + 169 2 39 1 0 -2 -4 0 + 169 4 39 1 0 -3 -3 0 + 169 6 39 1 0 -1 -4 0 + 169 8 39 1 0 0 -5 0 + 169 10 39 1 0 -1 -5 2 + 169 12 39 1 0 1 -6 2 + 169 14 39 1 0 0 -4 0 + 169 16 39 1 0 -1 -3 0 + 169 18 39 1 0 0 -3 0 + 169 20 39 1 0 3 -7 3 + 169 20 39 1 0 4 -7 3 + 169 22 39 1 0 2 -6 0 + 169 24 39 1 0 1 -5 0 + 169 26 39 1 0 1 -4 0 + 169 28 39 1 0 2 -5 0 + 169 30 39 1 0 1 -3 0 + 169 32 39 1 0 0 -2 0 + 169 34 39 1 0 0 -1 0 + 169 36 39 1 0 -1 0 0 + 169 38 39 1 0 -1 -1 0 + 169 40 39 1 0 -4 0 0 + 169 42 39 1 0 -3 0 0 + 169 44 39 1 0 -3 -1 0 + 169 46 39 1 0 -5 0 0 + 169 48 39 1 0 -5 -1 2 + 169 50 39 1 0 -4 -1 0 + 169 52 39 1 0 -2 -1 0 + 169 54 39 1 0 -1 -2 0 + 169 56 39 1 0 -2 -2 0 + 169 58 39 1 0 -3 -2 0 + 169 60 39 1 0 -4 -3 3 + 169 60 39 1 0 -3 -4 3 + 169 62 39 1 0 -4 -2 0 + 170 0 39 1 0 -4 3 0 + 170 2 39 1 0 -4 2 0 + 170 4 39 1 0 -5 3 0 + 170 6 39 1 0 -6 4 0 + 170 8 39 1 0 -5 1 0 + 170 10 39 1 0 -6 3 0 + 170 12 39 1 0 -7 4 3 + 170 12 39 1 0 -7 3 3 + 170 14 39 1 0 -6 2 0 + 170 16 39 1 0 -6 1 2 + 170 18 39 1 0 -5 2 0 + 170 20 39 1 0 -4 1 0 + 170 22 39 1 0 -3 1 0 + 170 24 39 1 0 -3 2 0 + 170 26 39 1 0 -2 1 0 + 170 28 39 1 0 -2 0 0 + 170 30 39 1 0 -3 3 0 + 170 32 39 1 0 -2 3 0 + 170 34 39 1 0 -2 2 0 + 170 36 39 1 0 0 0 0 + 170 38 39 1 0 -1 1 0 + 170 40 39 1 0 -1 2 4 + 170 42 39 1 0 -2 4 0 + 170 44 39 1 0 -3 4 0 + 170 46 39 1 0 -3 5 0 + 170 48 39 1 0 -4 6 0 + 170 50 39 1 0 -4 5 0 + 170 52 39 1 0 -5 6 2 + 170 54 39 1 0 -5 4 0 + 170 56 39 1 0 -5 5 0 + 170 58 39 1 0 -4 4 0 + 170 62 39 1 0 -6 5 2 + 171 0 39 1 0 2 2 0 + 171 2 39 1 0 1 3 0 + 171 4 39 1 0 2 3 0 + 171 6 39 1 0 0 4 0 + 171 8 39 1 0 3 3 0 + 171 10 39 1 0 -1 4 0 + 171 12 39 1 0 -1 5 0 + 171 14 39 1 0 4 2 0 + 171 16 39 1 0 3 4 3 + 171 16 39 1 0 4 3 3 + 171 18 39 1 0 2 4 0 + 171 20 39 1 0 1 4 0 + 171 22 39 1 0 1 5 2 + 171 24 39 1 0 0 5 0 + 171 26 39 1 0 -1 6 2 + 171 28 39 1 0 -2 6 0 + 171 30 39 1 0 -2 5 0 + 171 32 39 1 0 -3 6 0 + 171 34 39 1 0 -4 7 3 + 171 34 39 1 0 -3 7 3 + 171 36 39 1 0 0 1 0 + 171 38 39 1 0 0 2 0 + 171 40 39 1 0 -1 3 0 + 171 42 39 1 0 0 3 0 + 171 44 39 1 0 1 0 0 + 171 46 39 1 0 3 1 0 + 171 48 39 1 0 4 0 0 + 171 50 39 1 0 5 0 0 + 171 52 39 1 0 2 1 0 + 171 54 39 1 0 1 1 0 + 171 56 39 1 0 1 2 0 + 171 58 39 1 0 3 2 0 + 171 60 39 1 0 5 1 2 + 171 62 39 1 0 4 1 0 + 172 0 39 1 0 5 -2 0 + 172 2 39 1 0 4 -2 0 + 172 4 39 1 0 4 -1 0 + 172 6 39 1 0 6 -2 0 + 172 8 39 1 0 3 0 0 + 172 10 39 1 0 6 -1 2 + 172 12 39 1 0 5 -1 0 + 172 14 39 1 0 2 0 0 + 172 16 39 1 0 3 -1 0 + 172 18 39 1 0 2 -1 0 + 172 20 39 1 0 3 -2 0 + 172 22 39 1 0 2 -2 0 + 172 24 39 1 0 1 -1 0 + 172 26 39 1 0 1 -2 0 + 172 28 39 1 0 2 -3 0 + 172 30 39 1 0 2 -4 4 + 172 32 39 1 0 3 -5 0 + 172 34 39 1 0 3 -4 0 + 172 36 39 1 0 4 -5 0 + 172 38 39 1 0 4 -4 0 + 172 40 39 1 0 3 -3 0 + 172 42 39 1 0 4 -3 0 + 172 44 39 1 0 3 -6 0 + 172 46 39 1 0 7 -4 3 + 172 46 39 1 0 7 -3 3 + 172 48 39 1 0 4 -6 0 + 172 50 39 1 0 5 -6 2 + 172 52 39 1 0 5 -5 0 + 172 54 39 1 0 5 -4 0 + 172 56 39 1 0 6 -5 2 + 172 58 39 1 0 6 -3 0 + 172 60 39 1 0 5 -3 0 + 172 62 39 1 0 6 -4 0 + 173 0 39 -1 1 -2 -3 0 + 173 2 39 -1 1 -2 -4 0 + 173 4 39 -1 1 -3 -3 0 + 173 6 39 -1 1 -1 -4 0 + 173 8 39 -1 1 0 -5 0 + 173 10 39 -1 1 -1 -5 2 + 173 12 39 -1 1 1 -6 2 + 173 14 39 -1 1 0 -4 0 + 173 16 39 -1 1 -1 -3 0 + 173 18 39 -1 1 0 -3 0 + 173 20 39 -1 1 3 -7 3 + 173 20 39 -1 1 4 -7 3 + 173 22 39 -1 1 2 -6 0 + 173 24 39 -1 1 1 -5 0 + 173 26 39 -1 1 1 -4 0 + 173 28 39 -1 1 2 -5 0 + 173 30 39 -1 1 1 -3 0 + 173 32 39 -1 1 0 -2 0 + 173 34 39 -1 1 0 -1 0 + 173 36 39 -1 1 -1 0 0 + 173 38 39 -1 1 -1 -1 0 + 173 40 39 -1 1 -4 0 0 + 173 42 39 -1 1 -3 0 0 + 173 44 39 -1 1 -3 -1 0 + 173 46 39 -1 1 -5 0 0 + 173 48 39 -1 1 -5 -1 2 + 173 50 39 -1 1 -4 -1 0 + 173 52 39 -1 1 -2 -1 0 + 173 54 39 -1 1 -1 -2 0 + 173 56 39 -1 1 -2 -2 0 + 173 58 39 -1 1 -3 -2 0 + 173 60 39 -1 1 -4 -3 3 + 173 60 39 -1 1 -3 -4 3 + 173 62 39 -1 1 -4 -2 0 + 174 0 39 -1 1 -4 3 0 + 174 2 39 -1 1 -4 2 0 + 174 4 39 -1 1 -5 3 0 + 174 6 39 -1 1 -6 4 0 + 174 8 39 -1 1 -5 1 0 + 174 10 39 -1 1 -6 3 0 + 174 12 39 -1 1 -7 4 3 + 174 12 39 -1 1 -7 3 3 + 174 14 39 -1 1 -6 2 0 + 174 16 39 -1 1 -6 1 2 + 174 18 39 -1 1 -5 2 0 + 174 20 39 -1 1 -4 1 0 + 174 22 39 -1 1 -3 1 0 + 174 24 39 -1 1 -3 2 0 + 174 26 39 -1 1 -2 1 0 + 174 28 39 -1 1 -2 0 0 + 174 30 39 -1 1 -3 3 0 + 174 32 39 -1 1 -2 3 0 + 174 34 39 -1 1 -2 2 0 + 174 36 39 -1 1 0 0 0 + 174 38 39 -1 1 -1 1 0 + 174 40 39 -1 1 -1 2 4 + 174 42 39 -1 1 -2 4 0 + 174 44 39 -1 1 -3 4 0 + 174 46 39 -1 1 -3 5 0 + 174 48 39 -1 1 -4 6 0 + 174 50 39 -1 1 -4 5 0 + 174 52 39 -1 1 -5 6 2 + 174 54 39 -1 1 -5 4 0 + 174 56 39 -1 1 -5 5 0 + 174 58 39 -1 1 -4 4 0 + 174 62 39 -1 1 -6 5 2 + 175 0 39 -1 1 2 2 0 + 175 2 39 -1 1 1 3 0 + 175 4 39 -1 1 2 3 0 + 175 6 39 -1 1 0 4 0 + 175 8 39 -1 1 3 3 0 + 175 10 39 -1 1 -1 4 0 + 175 12 39 -1 1 -1 5 0 + 175 14 39 -1 1 4 2 0 + 175 16 39 -1 1 3 4 3 + 175 16 39 -1 1 4 3 3 + 175 18 39 -1 1 2 4 0 + 175 20 39 -1 1 1 4 0 + 175 22 39 -1 1 1 5 2 + 175 24 39 -1 1 0 5 0 + 175 26 39 -1 1 -1 6 2 + 175 28 39 -1 1 -2 6 0 + 175 30 39 -1 1 -2 5 0 + 175 32 39 -1 1 -3 6 0 + 175 34 39 -1 1 -4 7 3 + 175 34 39 -1 1 -3 7 3 + 175 36 39 -1 1 0 1 0 + 175 38 39 -1 1 0 2 0 + 175 40 39 -1 1 -1 3 0 + 175 42 39 -1 1 0 3 0 + 175 44 39 -1 1 1 0 0 + 175 46 39 -1 1 3 1 0 + 175 48 39 -1 1 4 0 0 + 175 50 39 -1 1 5 0 0 + 175 52 39 -1 1 2 1 0 + 175 54 39 -1 1 1 1 0 + 175 56 39 -1 1 1 2 0 + 175 58 39 -1 1 3 2 0 + 175 60 39 -1 1 5 1 2 + 175 62 39 -1 1 4 1 0 + 176 0 39 -1 1 5 -2 0 + 176 2 39 -1 1 4 -2 0 + 176 4 39 -1 1 4 -1 0 + 176 6 39 -1 1 6 -2 0 + 176 8 39 -1 1 3 0 0 + 176 10 39 -1 1 6 -1 2 + 176 12 39 -1 1 5 -1 0 + 176 14 39 -1 1 2 0 0 + 176 16 39 -1 1 3 -1 0 + 176 18 39 -1 1 2 -1 0 + 176 20 39 -1 1 3 -2 0 + 176 22 39 -1 1 2 -2 0 + 176 24 39 -1 1 1 -1 0 + 176 26 39 -1 1 1 -2 0 + 176 28 39 -1 1 2 -3 0 + 176 30 39 -1 1 2 -4 4 + 176 32 39 -1 1 3 -5 0 + 176 34 39 -1 1 3 -4 0 + 176 36 39 -1 1 4 -5 0 + 176 38 39 -1 1 4 -4 0 + 176 40 39 -1 1 3 -3 0 + 176 42 39 -1 1 4 -3 0 + 176 44 39 -1 1 3 -6 0 + 176 46 39 -1 1 7 -4 3 + 176 46 39 -1 1 7 -3 3 + 176 48 39 -1 1 4 -6 0 + 176 50 39 -1 1 5 -6 2 + 176 52 39 -1 1 5 -5 0 + 176 54 39 -1 1 5 -4 0 + 176 56 39 -1 1 6 -5 2 + 176 58 39 -1 1 6 -3 0 + 176 60 39 -1 1 5 -3 0 + 176 62 39 -1 1 6 -4 0 + 177 0 39 0 1 -2 -3 0 + 177 2 39 0 1 -2 -4 0 + 177 4 39 0 1 -3 -3 0 + 177 6 39 0 1 -1 -4 0 + 177 8 39 0 1 0 -5 0 + 177 10 39 0 1 -1 -5 2 + 177 12 39 0 1 1 -6 2 + 177 14 39 0 1 0 -4 0 + 177 16 39 0 1 -1 -3 0 + 177 18 39 0 1 0 -3 0 + 177 20 39 0 1 3 -7 3 + 177 20 39 0 1 4 -7 3 + 177 22 39 0 1 2 -6 0 + 177 24 39 0 1 1 -5 0 + 177 26 39 0 1 1 -4 0 + 177 28 39 0 1 2 -5 0 + 177 30 39 0 1 1 -3 0 + 177 32 39 0 1 0 -2 0 + 177 34 39 0 1 0 -1 0 + 177 36 39 0 1 -1 0 0 + 177 38 39 0 1 -1 -1 0 + 177 40 39 0 1 -4 0 0 + 177 42 39 0 1 -3 0 0 + 177 44 39 0 1 -3 -1 0 + 177 46 39 0 1 -5 0 0 + 177 48 39 0 1 -5 -1 2 + 177 50 39 0 1 -4 -1 0 + 177 52 39 0 1 -2 -1 0 + 177 54 39 0 1 -1 -2 0 + 177 56 39 0 1 -2 -2 0 + 177 58 39 0 1 -3 -2 0 + 177 60 39 0 1 -4 -3 3 + 177 60 39 0 1 -3 -4 3 + 177 62 39 0 1 -4 -2 0 + 178 0 39 0 1 -4 3 0 + 178 2 39 0 1 -4 2 0 + 178 4 39 0 1 -5 3 0 + 178 6 39 0 1 -6 4 0 + 178 8 39 0 1 -5 1 0 + 178 10 39 0 1 -6 3 0 + 178 12 39 0 1 -7 4 3 + 178 12 39 0 1 -7 3 3 + 178 14 39 0 1 -6 2 0 + 178 16 39 0 1 -6 1 2 + 178 18 39 0 1 -5 2 0 + 178 20 39 0 1 -4 1 0 + 178 22 39 0 1 -3 1 0 + 178 24 39 0 1 -3 2 0 + 178 26 39 0 1 -2 1 0 + 178 28 39 0 1 -2 0 0 + 178 30 39 0 1 -3 3 0 + 178 32 39 0 1 -2 3 0 + 178 34 39 0 1 -2 2 0 + 178 36 39 0 1 0 0 0 + 178 38 39 0 1 -1 1 0 + 178 40 39 0 1 -1 2 4 + 178 42 39 0 1 -2 4 0 + 178 44 39 0 1 -3 4 0 + 178 46 39 0 1 -3 5 0 + 178 48 39 0 1 -4 6 0 + 178 50 39 0 1 -4 5 0 + 178 52 39 0 1 -5 6 2 + 178 54 39 0 1 -5 4 0 + 178 56 39 0 1 -5 5 0 + 178 58 39 0 1 -4 4 0 + 178 62 39 0 1 -6 5 2 + 179 0 39 0 1 2 2 0 + 179 2 39 0 1 1 3 0 + 179 4 39 0 1 2 3 0 + 179 6 39 0 1 0 4 0 + 179 8 39 0 1 3 3 0 + 179 10 39 0 1 -1 4 0 + 179 12 39 0 1 -1 5 0 + 179 14 39 0 1 4 2 0 + 179 16 39 0 1 3 4 3 + 179 16 39 0 1 4 3 3 + 179 18 39 0 1 2 4 0 + 179 20 39 0 1 1 4 0 + 179 22 39 0 1 1 5 2 + 179 24 39 0 1 0 5 0 + 179 26 39 0 1 -1 6 2 + 179 28 39 0 1 -2 6 0 + 179 30 39 0 1 -2 5 0 + 179 32 39 0 1 -3 6 0 + 179 34 39 0 1 -4 7 3 + 179 34 39 0 1 -3 7 3 + 179 36 39 0 1 0 1 0 + 179 38 39 0 1 0 2 0 + 179 40 39 0 1 -1 3 0 + 179 42 39 0 1 0 3 0 + 179 44 39 0 1 1 0 0 + 179 46 39 0 1 3 1 0 + 179 48 39 0 1 4 0 0 + 179 50 39 0 1 5 0 0 + 179 52 39 0 1 2 1 0 + 179 54 39 0 1 1 1 0 + 179 56 39 0 1 1 2 0 + 179 58 39 0 1 3 2 0 + 179 60 39 0 1 5 1 2 + 179 62 39 0 1 4 1 0 + 180 0 39 0 1 5 -2 0 + 180 2 39 0 1 4 -2 0 + 180 4 39 0 1 4 -1 0 + 180 6 39 0 1 6 -2 0 + 180 8 39 0 1 3 0 0 + 180 10 39 0 1 6 -1 2 + 180 12 39 0 1 5 -1 0 + 180 14 39 0 1 2 0 0 + 180 16 39 0 1 3 -1 0 + 180 18 39 0 1 2 -1 0 + 180 20 39 0 1 3 -2 0 + 180 22 39 0 1 2 -2 0 + 180 24 39 0 1 1 -1 0 + 180 26 39 0 1 1 -2 0 + 180 28 39 0 1 2 -3 0 + 180 30 39 0 1 2 -4 4 + 180 32 39 0 1 3 -5 0 + 180 34 39 0 1 3 -4 0 + 180 36 39 0 1 4 -5 0 + 180 38 39 0 1 4 -4 0 + 180 40 39 0 1 3 -3 0 + 180 42 39 0 1 4 -3 0 + 180 44 39 0 1 3 -6 0 + 180 46 39 0 1 7 -4 3 + 180 46 39 0 1 7 -3 3 + 180 48 39 0 1 4 -6 0 + 180 50 39 0 1 5 -6 2 + 180 52 39 0 1 5 -5 0 + 180 54 39 0 1 5 -4 0 + 180 56 39 0 1 6 -5 2 + 180 58 39 0 1 6 -3 0 + 180 60 39 0 1 5 -3 0 + 180 62 39 0 1 6 -4 0 + 161 0 40 0 -1 -2 -3 0 + 161 2 40 0 -1 -2 -4 0 + 161 4 40 0 -1 -3 -3 0 + 161 6 40 0 -1 -1 -4 0 + 161 8 40 0 -1 0 -5 0 + 161 10 40 0 -1 -1 -5 2 + 161 12 40 0 -1 1 -6 2 + 161 14 40 0 -1 0 -4 0 + 161 16 40 0 -1 -1 -3 0 + 161 18 40 0 -1 0 -3 0 + 161 20 40 0 -1 3 -7 3 + 161 20 40 0 -1 4 -7 3 + 161 22 40 0 -1 2 -6 0 + 161 24 40 0 -1 1 -5 0 + 161 26 40 0 -1 1 -4 0 + 161 28 40 0 -1 2 -5 0 + 161 30 40 0 -1 1 -3 0 + 161 32 40 0 -1 0 -2 0 + 161 34 40 0 -1 0 -1 0 + 161 36 40 0 -1 -1 0 0 + 161 38 40 0 -1 -1 -1 0 + 161 40 40 0 -1 -4 0 0 + 161 42 40 0 -1 -3 0 0 + 161 44 40 0 -1 -3 -1 0 + 161 46 40 0 -1 -5 0 0 + 161 48 40 0 -1 -5 -1 2 + 161 50 40 0 -1 -4 -1 0 + 161 52 40 0 -1 -2 -1 0 + 161 54 40 0 -1 -1 -2 0 + 161 56 40 0 -1 -2 -2 0 + 161 58 40 0 -1 -3 -2 0 + 161 60 40 0 -1 -4 -3 3 + 161 60 40 0 -1 -3 -4 3 + 161 62 40 0 -1 -4 -2 0 + 162 0 40 0 -1 -4 3 0 + 162 2 40 0 -1 -4 2 0 + 162 4 40 0 -1 -5 3 0 + 162 6 40 0 -1 -6 4 0 + 162 8 40 0 -1 -5 1 0 + 162 10 40 0 -1 -6 3 0 + 162 12 40 0 -1 -7 4 3 + 162 12 40 0 -1 -7 3 3 + 162 14 40 0 -1 -6 2 0 + 162 16 40 0 -1 -6 1 2 + 162 18 40 0 -1 -5 2 0 + 162 20 40 0 -1 -4 1 0 + 162 22 40 0 -1 -3 1 0 + 162 24 40 0 -1 -3 2 0 + 162 26 40 0 -1 -2 1 0 + 162 28 40 0 -1 -2 0 0 + 162 30 40 0 -1 -3 3 0 + 162 32 40 0 -1 -2 3 0 + 162 34 40 0 -1 -2 2 0 + 162 36 40 0 -1 0 0 0 + 162 38 40 0 -1 -1 1 0 + 162 40 40 0 -1 -1 2 4 + 162 42 40 0 -1 -2 4 0 + 162 44 40 0 -1 -3 4 0 + 162 46 40 0 -1 -3 5 0 + 162 48 40 0 -1 -4 6 0 + 162 50 40 0 -1 -4 5 0 + 162 52 40 0 -1 -5 6 2 + 162 54 40 0 -1 -5 4 0 + 162 56 40 0 -1 -5 5 0 + 162 58 40 0 -1 -4 4 0 + 162 62 40 0 -1 -6 5 2 + 163 0 40 0 -1 2 2 0 + 163 2 40 0 -1 1 3 0 + 163 4 40 0 -1 2 3 0 + 163 6 40 0 -1 0 4 0 + 163 8 40 0 -1 3 3 0 + 163 10 40 0 -1 -1 4 0 + 163 12 40 0 -1 -1 5 0 + 163 14 40 0 -1 4 2 0 + 163 16 40 0 -1 3 4 3 + 163 16 40 0 -1 4 3 3 + 163 18 40 0 -1 2 4 0 + 163 20 40 0 -1 1 4 0 + 163 22 40 0 -1 1 5 2 + 163 24 40 0 -1 0 5 0 + 163 26 40 0 -1 -1 6 2 + 163 28 40 0 -1 -2 6 0 + 163 30 40 0 -1 -2 5 0 + 163 32 40 0 -1 -3 6 0 + 163 34 40 0 -1 -4 7 3 + 163 34 40 0 -1 -3 7 3 + 163 36 40 0 -1 0 1 0 + 163 38 40 0 -1 0 2 0 + 163 40 40 0 -1 -1 3 0 + 163 42 40 0 -1 0 3 0 + 163 44 40 0 -1 1 0 0 + 163 46 40 0 -1 3 1 0 + 163 48 40 0 -1 4 0 0 + 163 50 40 0 -1 5 0 0 + 163 52 40 0 -1 2 1 0 + 163 54 40 0 -1 1 1 0 + 163 56 40 0 -1 1 2 0 + 163 58 40 0 -1 3 2 0 + 163 60 40 0 -1 5 1 2 + 163 62 40 0 -1 4 1 0 + 164 0 40 0 -1 5 -2 0 + 164 2 40 0 -1 4 -2 0 + 164 4 40 0 -1 4 -1 0 + 164 6 40 0 -1 6 -2 0 + 164 8 40 0 -1 3 0 0 + 164 10 40 0 -1 6 -1 2 + 164 12 40 0 -1 5 -1 0 + 164 14 40 0 -1 2 0 0 + 164 16 40 0 -1 3 -1 0 + 164 18 40 0 -1 2 -1 0 + 164 20 40 0 -1 3 -2 0 + 164 22 40 0 -1 2 -2 0 + 164 24 40 0 -1 1 -1 0 + 164 26 40 0 -1 1 -2 0 + 164 28 40 0 -1 2 -3 0 + 164 30 40 0 -1 2 -4 4 + 164 32 40 0 -1 3 -5 0 + 164 34 40 0 -1 3 -4 0 + 164 36 40 0 -1 4 -5 0 + 164 38 40 0 -1 4 -4 0 + 164 40 40 0 -1 3 -3 0 + 164 42 40 0 -1 4 -3 0 + 164 44 40 0 -1 3 -6 0 + 164 46 40 0 -1 7 -4 3 + 164 46 40 0 -1 7 -3 3 + 164 48 40 0 -1 4 -6 0 + 164 50 40 0 -1 5 -6 2 + 164 52 40 0 -1 5 -5 0 + 164 54 40 0 -1 5 -4 0 + 164 56 40 0 -1 6 -5 2 + 164 58 40 0 -1 6 -3 0 + 164 60 40 0 -1 5 -3 0 + 164 62 40 0 -1 6 -4 0 + 165 0 40 1 -1 -2 -3 0 + 165 2 40 1 -1 -2 -4 0 + 165 4 40 1 -1 -3 -3 0 + 165 6 40 1 -1 -1 -4 0 + 165 8 40 1 -1 0 -5 0 + 165 10 40 1 -1 -1 -5 2 + 165 12 40 1 -1 1 -6 2 + 165 14 40 1 -1 0 -4 0 + 165 16 40 1 -1 -1 -3 0 + 165 18 40 1 -1 0 -3 0 + 165 20 40 1 -1 3 -7 3 + 165 20 40 1 -1 4 -7 3 + 165 22 40 1 -1 2 -6 0 + 165 24 40 1 -1 1 -5 0 + 165 26 40 1 -1 1 -4 0 + 165 28 40 1 -1 2 -5 0 + 165 30 40 1 -1 1 -3 0 + 165 32 40 1 -1 0 -2 0 + 165 34 40 1 -1 0 -1 0 + 165 36 40 1 -1 -1 0 0 + 165 38 40 1 -1 -1 -1 0 + 165 40 40 1 -1 -4 0 0 + 165 42 40 1 -1 -3 0 0 + 165 44 40 1 -1 -3 -1 0 + 165 46 40 1 -1 -5 0 0 + 165 48 40 1 -1 -5 -1 2 + 165 50 40 1 -1 -4 -1 0 + 165 52 40 1 -1 -2 -1 0 + 165 54 40 1 -1 -1 -2 0 + 165 56 40 1 -1 -2 -2 0 + 165 58 40 1 -1 -3 -2 0 + 165 60 40 1 -1 -4 -3 3 + 165 60 40 1 -1 -3 -4 3 + 165 62 40 1 -1 -4 -2 0 + 166 0 40 1 -1 -4 3 0 + 166 2 40 1 -1 -4 2 0 + 166 4 40 1 -1 -5 3 0 + 166 6 40 1 -1 -6 4 0 + 166 8 40 1 -1 -5 1 0 + 166 10 40 1 -1 -6 3 0 + 166 12 40 1 -1 -7 4 3 + 166 12 40 1 -1 -7 3 3 + 166 14 40 1 -1 -6 2 0 + 166 16 40 1 -1 -6 1 2 + 166 18 40 1 -1 -5 2 0 + 166 20 40 1 -1 -4 1 0 + 166 22 40 1 -1 -3 1 0 + 166 24 40 1 -1 -3 2 0 + 166 26 40 1 -1 -2 1 0 + 166 28 40 1 -1 -2 0 0 + 166 30 40 1 -1 -3 3 0 + 166 32 40 1 -1 -2 3 0 + 166 34 40 1 -1 -2 2 0 + 166 36 40 1 -1 0 0 0 + 166 38 40 1 -1 -1 1 0 + 166 40 40 1 -1 -1 2 4 + 166 42 40 1 -1 -2 4 0 + 166 44 40 1 -1 -3 4 0 + 166 46 40 1 -1 -3 5 0 + 166 48 40 1 -1 -4 6 0 + 166 50 40 1 -1 -4 5 0 + 166 52 40 1 -1 -5 6 2 + 166 54 40 1 -1 -5 4 0 + 166 56 40 1 -1 -5 5 0 + 166 58 40 1 -1 -4 4 0 + 166 62 40 1 -1 -6 5 2 + 167 0 40 1 -1 2 2 0 + 167 2 40 1 -1 1 3 0 + 167 4 40 1 -1 2 3 0 + 167 6 40 1 -1 0 4 0 + 167 8 40 1 -1 3 3 0 + 167 10 40 1 -1 -1 4 0 + 167 12 40 1 -1 -1 5 0 + 167 14 40 1 -1 4 2 0 + 167 16 40 1 -1 3 4 3 + 167 16 40 1 -1 4 3 3 + 167 18 40 1 -1 2 4 0 + 167 20 40 1 -1 1 4 0 + 167 22 40 1 -1 1 5 2 + 167 24 40 1 -1 0 5 0 + 167 26 40 1 -1 -1 6 2 + 167 28 40 1 -1 -2 6 0 + 167 30 40 1 -1 -2 5 0 + 167 32 40 1 -1 -3 6 0 + 167 34 40 1 -1 -4 7 3 + 167 34 40 1 -1 -3 7 3 + 167 36 40 1 -1 0 1 0 + 167 38 40 1 -1 0 2 0 + 167 40 40 1 -1 -1 3 0 + 167 42 40 1 -1 0 3 0 + 167 44 40 1 -1 1 0 0 + 167 46 40 1 -1 3 1 0 + 167 48 40 1 -1 4 0 0 + 167 50 40 1 -1 5 0 0 + 167 52 40 1 -1 2 1 0 + 167 54 40 1 -1 1 1 0 + 167 56 40 1 -1 1 2 0 + 167 58 40 1 -1 3 2 0 + 167 60 40 1 -1 5 1 2 + 167 62 40 1 -1 4 1 0 + 168 0 40 1 -1 5 -2 0 + 168 2 40 1 -1 4 -2 0 + 168 4 40 1 -1 4 -1 0 + 168 6 40 1 -1 6 -2 0 + 168 8 40 1 -1 3 0 0 + 168 10 40 1 -1 6 -1 2 + 168 12 40 1 -1 5 -1 0 + 168 14 40 1 -1 2 0 0 + 168 16 40 1 -1 3 -1 0 + 168 18 40 1 -1 2 -1 0 + 168 20 40 1 -1 3 -2 0 + 168 22 40 1 -1 2 -2 0 + 168 24 40 1 -1 1 -1 0 + 168 26 40 1 -1 1 -2 0 + 168 28 40 1 -1 2 -3 0 + 168 30 40 1 -1 2 -4 4 + 168 32 40 1 -1 3 -5 0 + 168 34 40 1 -1 3 -4 0 + 168 36 40 1 -1 4 -5 0 + 168 38 40 1 -1 4 -4 0 + 168 40 40 1 -1 3 -3 0 + 168 42 40 1 -1 4 -3 0 + 168 44 40 1 -1 3 -6 0 + 168 46 40 1 -1 7 -4 3 + 168 46 40 1 -1 7 -3 3 + 168 48 40 1 -1 4 -6 0 + 168 50 40 1 -1 5 -6 2 + 168 52 40 1 -1 5 -5 0 + 168 54 40 1 -1 5 -4 0 + 168 56 40 1 -1 6 -5 2 + 168 58 40 1 -1 6 -3 0 + 168 60 40 1 -1 5 -3 0 + 168 62 40 1 -1 6 -4 0 + 169 0 40 -1 0 -2 -3 0 + 169 2 40 -1 0 -2 -4 0 + 169 4 40 -1 0 -3 -3 0 + 169 6 40 -1 0 -1 -4 0 + 169 8 40 -1 0 0 -5 0 + 169 10 40 -1 0 -1 -5 2 + 169 12 40 -1 0 1 -6 2 + 169 14 40 -1 0 0 -4 0 + 169 16 40 -1 0 -1 -3 0 + 169 18 40 -1 0 0 -3 0 + 169 20 40 -1 0 3 -7 3 + 169 20 40 -1 0 4 -7 3 + 169 22 40 -1 0 2 -6 0 + 169 24 40 -1 0 1 -5 0 + 169 26 40 -1 0 1 -4 0 + 169 28 40 -1 0 2 -5 0 + 169 30 40 -1 0 1 -3 0 + 169 32 40 -1 0 0 -2 0 + 169 34 40 -1 0 0 -1 0 + 169 36 40 -1 0 -1 0 0 + 169 38 40 -1 0 -1 -1 0 + 169 40 40 -1 0 -4 0 0 + 169 42 40 -1 0 -3 0 0 + 169 44 40 -1 0 -3 -1 0 + 169 46 40 -1 0 -5 0 0 + 169 48 40 -1 0 -5 -1 2 + 169 50 40 -1 0 -4 -1 0 + 169 52 40 -1 0 -2 -1 0 + 169 54 40 -1 0 -1 -2 0 + 169 56 40 -1 0 -2 -2 0 + 169 58 40 -1 0 -3 -2 0 + 169 60 40 -1 0 -4 -3 3 + 169 60 40 -1 0 -3 -4 3 + 169 62 40 -1 0 -4 -2 0 + 170 0 40 -1 0 -4 3 0 + 170 2 40 -1 0 -4 2 0 + 170 4 40 -1 0 -5 3 0 + 170 6 40 -1 0 -6 4 0 + 170 8 40 -1 0 -5 1 0 + 170 10 40 -1 0 -6 3 0 + 170 12 40 -1 0 -7 4 3 + 170 12 40 -1 0 -7 3 3 + 170 14 40 -1 0 -6 2 0 + 170 16 40 -1 0 -6 1 2 + 170 18 40 -1 0 -5 2 0 + 170 20 40 -1 0 -4 1 0 + 170 22 40 -1 0 -3 1 0 + 170 24 40 -1 0 -3 2 0 + 170 26 40 -1 0 -2 1 0 + 170 28 40 -1 0 -2 0 0 + 170 30 40 -1 0 -3 3 0 + 170 32 40 -1 0 -2 3 0 + 170 34 40 -1 0 -2 2 0 + 170 36 40 -1 0 0 0 0 + 170 38 40 -1 0 -1 1 0 + 170 40 40 -1 0 -1 2 4 + 170 42 40 -1 0 -2 4 0 + 170 44 40 -1 0 -3 4 0 + 170 46 40 -1 0 -3 5 0 + 170 48 40 -1 0 -4 6 0 + 170 50 40 -1 0 -4 5 0 + 170 52 40 -1 0 -5 6 2 + 170 54 40 -1 0 -5 4 0 + 170 56 40 -1 0 -5 5 0 + 170 58 40 -1 0 -4 4 0 + 170 62 40 -1 0 -6 5 2 + 171 0 40 -1 0 2 2 0 + 171 2 40 -1 0 1 3 0 + 171 4 40 -1 0 2 3 0 + 171 6 40 -1 0 0 4 0 + 171 8 40 -1 0 3 3 0 + 171 10 40 -1 0 -1 4 0 + 171 12 40 -1 0 -1 5 0 + 171 14 40 -1 0 4 2 0 + 171 16 40 -1 0 3 4 3 + 171 16 40 -1 0 4 3 3 + 171 18 40 -1 0 2 4 0 + 171 20 40 -1 0 1 4 0 + 171 22 40 -1 0 1 5 2 + 171 24 40 -1 0 0 5 0 + 171 26 40 -1 0 -1 6 2 + 171 28 40 -1 0 -2 6 0 + 171 30 40 -1 0 -2 5 0 + 171 32 40 -1 0 -3 6 0 + 171 34 40 -1 0 -4 7 3 + 171 34 40 -1 0 -3 7 3 + 171 36 40 -1 0 0 1 0 + 171 38 40 -1 0 0 2 0 + 171 40 40 -1 0 -1 3 0 + 171 42 40 -1 0 0 3 0 + 171 44 40 -1 0 1 0 0 + 171 46 40 -1 0 3 1 0 + 171 48 40 -1 0 4 0 0 + 171 50 40 -1 0 5 0 0 + 171 52 40 -1 0 2 1 0 + 171 54 40 -1 0 1 1 0 + 171 56 40 -1 0 1 2 0 + 171 58 40 -1 0 3 2 0 + 171 60 40 -1 0 5 1 2 + 171 62 40 -1 0 4 1 0 + 172 0 40 -1 0 5 -2 0 + 172 2 40 -1 0 4 -2 0 + 172 4 40 -1 0 4 -1 0 + 172 6 40 -1 0 6 -2 0 + 172 8 40 -1 0 3 0 0 + 172 10 40 -1 0 6 -1 2 + 172 12 40 -1 0 5 -1 0 + 172 14 40 -1 0 2 0 0 + 172 16 40 -1 0 3 -1 0 + 172 18 40 -1 0 2 -1 0 + 172 20 40 -1 0 3 -2 0 + 172 22 40 -1 0 2 -2 0 + 172 24 40 -1 0 1 -1 0 + 172 26 40 -1 0 1 -2 0 + 172 28 40 -1 0 2 -3 0 + 172 30 40 -1 0 2 -4 4 + 172 32 40 -1 0 3 -5 0 + 172 34 40 -1 0 3 -4 0 + 172 36 40 -1 0 4 -5 0 + 172 38 40 -1 0 4 -4 0 + 172 40 40 -1 0 3 -3 0 + 172 42 40 -1 0 4 -3 0 + 172 44 40 -1 0 3 -6 0 + 172 46 40 -1 0 7 -4 3 + 172 46 40 -1 0 7 -3 3 + 172 48 40 -1 0 4 -6 0 + 172 50 40 -1 0 5 -6 2 + 172 52 40 -1 0 5 -5 0 + 172 54 40 -1 0 5 -4 0 + 172 56 40 -1 0 6 -5 2 + 172 58 40 -1 0 6 -3 0 + 172 60 40 -1 0 5 -3 0 + 172 62 40 -1 0 6 -4 0 + 157 0 40 0 0 -2 -3 0 + 157 2 40 0 0 -2 -4 0 + 157 4 40 0 0 -3 -3 0 + 157 6 40 0 0 -1 -4 0 + 157 8 40 0 0 0 -5 0 + 157 10 40 0 0 -1 -5 2 + 157 12 40 0 0 1 -6 2 + 157 14 40 0 0 0 -4 0 + 157 16 40 0 0 -1 -3 0 + 157 18 40 0 0 0 -3 0 + 157 20 40 0 0 3 -7 3 + 157 20 40 0 0 4 -7 3 + 157 22 40 0 0 2 -6 0 + 157 24 40 0 0 1 -5 0 + 157 26 40 0 0 1 -4 0 + 157 28 40 0 0 2 -5 0 + 157 30 40 0 0 1 -3 0 + 157 32 40 0 0 0 -2 0 + 157 34 40 0 0 0 -1 0 + 157 36 40 0 0 -1 0 0 + 157 38 40 0 0 -1 -1 0 + 157 40 40 0 0 -4 0 0 + 157 42 40 0 0 -3 0 0 + 157 44 40 0 0 -3 -1 0 + 157 46 40 0 0 -5 0 0 + 157 48 40 0 0 -5 -1 2 + 157 50 40 0 0 -4 -1 0 + 157 52 40 0 0 -2 -1 0 + 157 54 40 0 0 -1 -2 0 + 157 56 40 0 0 -2 -2 0 + 157 58 40 0 0 -3 -2 0 + 157 60 40 0 0 -4 -3 3 + 157 60 40 0 0 -3 -4 3 + 157 62 40 0 0 -4 -2 0 + 158 0 40 0 0 -4 3 0 + 158 2 40 0 0 -4 2 0 + 158 4 40 0 0 -5 3 0 + 158 6 40 0 0 -6 4 0 + 158 8 40 0 0 -5 1 0 + 158 10 40 0 0 -6 3 0 + 158 12 40 0 0 -7 4 3 + 158 12 40 0 0 -7 3 3 + 158 14 40 0 0 -6 2 0 + 158 16 40 0 0 -6 1 2 + 158 18 40 0 0 -5 2 0 + 158 20 40 0 0 -4 1 0 + 158 22 40 0 0 -3 1 0 + 158 24 40 0 0 -3 2 0 + 158 26 40 0 0 -2 1 0 + 158 28 40 0 0 -2 0 0 + 158 30 40 0 0 -3 3 0 + 158 32 40 0 0 -2 3 0 + 158 34 40 0 0 -2 2 0 + 158 36 40 0 0 0 0 0 + 158 38 40 0 0 -1 1 0 + 158 40 40 0 0 -1 2 4 + 158 42 40 0 0 -2 4 0 + 158 44 40 0 0 -3 4 0 + 158 46 40 0 0 -3 5 0 + 158 48 40 0 0 -4 6 0 + 158 50 40 0 0 -4 5 0 + 158 52 40 0 0 -5 6 2 + 158 54 40 0 0 -5 4 0 + 158 56 40 0 0 -5 5 0 + 158 58 40 0 0 -4 4 0 + 158 62 40 0 0 -6 5 2 + 159 0 40 0 0 2 2 0 + 159 2 40 0 0 1 3 0 + 159 4 40 0 0 2 3 0 + 159 6 40 0 0 0 4 0 + 159 8 40 0 0 3 3 0 + 159 10 40 0 0 -1 4 0 + 159 12 40 0 0 -1 5 0 + 159 14 40 0 0 4 2 0 + 159 16 40 0 0 3 4 3 + 159 16 40 0 0 4 3 3 + 159 18 40 0 0 2 4 0 + 159 20 40 0 0 1 4 0 + 159 22 40 0 0 1 5 2 + 159 24 40 0 0 0 5 0 + 159 26 40 0 0 -1 6 2 + 159 28 40 0 0 -2 6 0 + 159 30 40 0 0 -2 5 0 + 159 32 40 0 0 -3 6 0 + 159 34 40 0 0 -4 7 3 + 159 34 40 0 0 -3 7 3 + 159 36 40 0 0 0 1 0 + 159 38 40 0 0 0 2 0 + 159 40 40 0 0 -1 3 0 + 159 42 40 0 0 0 3 0 + 159 44 40 0 0 1 0 0 + 159 46 40 0 0 3 1 0 + 159 48 40 0 0 4 0 0 + 159 50 40 0 0 5 0 0 + 159 52 40 0 0 2 1 0 + 159 54 40 0 0 1 1 0 + 159 56 40 0 0 1 2 0 + 159 58 40 0 0 3 2 0 + 159 60 40 0 0 5 1 2 + 159 62 40 0 0 4 1 0 + 160 0 40 0 0 5 -2 0 + 160 2 40 0 0 4 -2 0 + 160 4 40 0 0 4 -1 0 + 160 6 40 0 0 6 -2 0 + 160 8 40 0 0 3 0 0 + 160 10 40 0 0 6 -1 2 + 160 12 40 0 0 5 -1 0 + 160 14 40 0 0 2 0 0 + 160 16 40 0 0 3 -1 0 + 160 18 40 0 0 2 -1 0 + 160 20 40 0 0 3 -2 0 + 160 22 40 0 0 2 -2 0 + 160 24 40 0 0 1 -1 0 + 160 26 40 0 0 1 -2 0 + 160 28 40 0 0 2 -3 0 + 160 30 40 0 0 2 -4 4 + 160 32 40 0 0 3 -5 0 + 160 34 40 0 0 3 -4 0 + 160 36 40 0 0 4 -5 0 + 160 38 40 0 0 4 -4 0 + 160 40 40 0 0 3 -3 0 + 160 42 40 0 0 4 -3 0 + 160 44 40 0 0 3 -6 0 + 160 46 40 0 0 7 -4 3 + 160 46 40 0 0 7 -3 3 + 160 48 40 0 0 4 -6 0 + 160 50 40 0 0 5 -6 2 + 160 52 40 0 0 5 -5 0 + 160 54 40 0 0 5 -4 0 + 160 56 40 0 0 6 -5 2 + 160 58 40 0 0 6 -3 0 + 160 60 40 0 0 5 -3 0 + 160 62 40 0 0 6 -4 0 + 173 0 40 1 0 -2 -3 0 + 173 2 40 1 0 -2 -4 0 + 173 4 40 1 0 -3 -3 0 + 173 6 40 1 0 -1 -4 0 + 173 8 40 1 0 0 -5 0 + 173 10 40 1 0 -1 -5 2 + 173 12 40 1 0 1 -6 2 + 173 14 40 1 0 0 -4 0 + 173 16 40 1 0 -1 -3 0 + 173 18 40 1 0 0 -3 0 + 173 20 40 1 0 3 -7 3 + 173 20 40 1 0 4 -7 3 + 173 22 40 1 0 2 -6 0 + 173 24 40 1 0 1 -5 0 + 173 26 40 1 0 1 -4 0 + 173 28 40 1 0 2 -5 0 + 173 30 40 1 0 1 -3 0 + 173 32 40 1 0 0 -2 0 + 173 34 40 1 0 0 -1 0 + 173 36 40 1 0 -1 0 0 + 173 38 40 1 0 -1 -1 0 + 173 40 40 1 0 -4 0 0 + 173 42 40 1 0 -3 0 0 + 173 44 40 1 0 -3 -1 0 + 173 46 40 1 0 -5 0 0 + 173 48 40 1 0 -5 -1 2 + 173 50 40 1 0 -4 -1 0 + 173 52 40 1 0 -2 -1 0 + 173 54 40 1 0 -1 -2 0 + 173 56 40 1 0 -2 -2 0 + 173 58 40 1 0 -3 -2 0 + 173 60 40 1 0 -4 -3 3 + 173 60 40 1 0 -3 -4 3 + 173 62 40 1 0 -4 -2 0 + 174 0 40 1 0 -4 3 0 + 174 2 40 1 0 -4 2 0 + 174 4 40 1 0 -5 3 0 + 174 6 40 1 0 -6 4 0 + 174 8 40 1 0 -5 1 0 + 174 10 40 1 0 -6 3 0 + 174 12 40 1 0 -7 4 3 + 174 12 40 1 0 -7 3 3 + 174 14 40 1 0 -6 2 0 + 174 16 40 1 0 -6 1 2 + 174 18 40 1 0 -5 2 0 + 174 20 40 1 0 -4 1 0 + 174 22 40 1 0 -3 1 0 + 174 24 40 1 0 -3 2 0 + 174 26 40 1 0 -2 1 0 + 174 28 40 1 0 -2 0 0 + 174 30 40 1 0 -3 3 0 + 174 32 40 1 0 -2 3 0 + 174 34 40 1 0 -2 2 0 + 174 36 40 1 0 0 0 0 + 174 38 40 1 0 -1 1 0 + 174 40 40 1 0 -1 2 4 + 174 42 40 1 0 -2 4 0 + 174 44 40 1 0 -3 4 0 + 174 46 40 1 0 -3 5 0 + 174 48 40 1 0 -4 6 0 + 174 50 40 1 0 -4 5 0 + 174 52 40 1 0 -5 6 2 + 174 54 40 1 0 -5 4 0 + 174 56 40 1 0 -5 5 0 + 174 58 40 1 0 -4 4 0 + 174 62 40 1 0 -6 5 2 + 175 0 40 1 0 2 2 0 + 175 2 40 1 0 1 3 0 + 175 4 40 1 0 2 3 0 + 175 6 40 1 0 0 4 0 + 175 8 40 1 0 3 3 0 + 175 10 40 1 0 -1 4 0 + 175 12 40 1 0 -1 5 0 + 175 14 40 1 0 4 2 0 + 175 16 40 1 0 3 4 3 + 175 16 40 1 0 4 3 3 + 175 18 40 1 0 2 4 0 + 175 20 40 1 0 1 4 0 + 175 22 40 1 0 1 5 2 + 175 24 40 1 0 0 5 0 + 175 26 40 1 0 -1 6 2 + 175 28 40 1 0 -2 6 0 + 175 30 40 1 0 -2 5 0 + 175 32 40 1 0 -3 6 0 + 175 34 40 1 0 -4 7 3 + 175 34 40 1 0 -3 7 3 + 175 36 40 1 0 0 1 0 + 175 38 40 1 0 0 2 0 + 175 40 40 1 0 -1 3 0 + 175 42 40 1 0 0 3 0 + 175 44 40 1 0 1 0 0 + 175 46 40 1 0 3 1 0 + 175 48 40 1 0 4 0 0 + 175 50 40 1 0 5 0 0 + 175 52 40 1 0 2 1 0 + 175 54 40 1 0 1 1 0 + 175 56 40 1 0 1 2 0 + 175 58 40 1 0 3 2 0 + 175 60 40 1 0 5 1 2 + 175 62 40 1 0 4 1 0 + 176 0 40 1 0 5 -2 0 + 176 2 40 1 0 4 -2 0 + 176 4 40 1 0 4 -1 0 + 176 6 40 1 0 6 -2 0 + 176 8 40 1 0 3 0 0 + 176 10 40 1 0 6 -1 2 + 176 12 40 1 0 5 -1 0 + 176 14 40 1 0 2 0 0 + 176 16 40 1 0 3 -1 0 + 176 18 40 1 0 2 -1 0 + 176 20 40 1 0 3 -2 0 + 176 22 40 1 0 2 -2 0 + 176 24 40 1 0 1 -1 0 + 176 26 40 1 0 1 -2 0 + 176 28 40 1 0 2 -3 0 + 176 30 40 1 0 2 -4 4 + 176 32 40 1 0 3 -5 0 + 176 34 40 1 0 3 -4 0 + 176 36 40 1 0 4 -5 0 + 176 38 40 1 0 4 -4 0 + 176 40 40 1 0 3 -3 0 + 176 42 40 1 0 4 -3 0 + 176 44 40 1 0 3 -6 0 + 176 46 40 1 0 7 -4 3 + 176 46 40 1 0 7 -3 3 + 176 48 40 1 0 4 -6 0 + 176 50 40 1 0 5 -6 2 + 176 52 40 1 0 5 -5 0 + 176 54 40 1 0 5 -4 0 + 176 56 40 1 0 6 -5 2 + 176 58 40 1 0 6 -3 0 + 176 60 40 1 0 5 -3 0 + 176 62 40 1 0 6 -4 0 + 177 0 40 -1 1 -2 -3 0 + 177 2 40 -1 1 -2 -4 0 + 177 4 40 -1 1 -3 -3 0 + 177 6 40 -1 1 -1 -4 0 + 177 8 40 -1 1 0 -5 0 + 177 10 40 -1 1 -1 -5 2 + 177 12 40 -1 1 1 -6 2 + 177 14 40 -1 1 0 -4 0 + 177 16 40 -1 1 -1 -3 0 + 177 18 40 -1 1 0 -3 0 + 177 20 40 -1 1 3 -7 3 + 177 20 40 -1 1 4 -7 3 + 177 22 40 -1 1 2 -6 0 + 177 24 40 -1 1 1 -5 0 + 177 26 40 -1 1 1 -4 0 + 177 28 40 -1 1 2 -5 0 + 177 30 40 -1 1 1 -3 0 + 177 32 40 -1 1 0 -2 0 + 177 34 40 -1 1 0 -1 0 + 177 36 40 -1 1 -1 0 0 + 177 38 40 -1 1 -1 -1 0 + 177 40 40 -1 1 -4 0 0 + 177 42 40 -1 1 -3 0 0 + 177 44 40 -1 1 -3 -1 0 + 177 46 40 -1 1 -5 0 0 + 177 48 40 -1 1 -5 -1 2 + 177 50 40 -1 1 -4 -1 0 + 177 52 40 -1 1 -2 -1 0 + 177 54 40 -1 1 -1 -2 0 + 177 56 40 -1 1 -2 -2 0 + 177 58 40 -1 1 -3 -2 0 + 177 60 40 -1 1 -4 -3 3 + 177 60 40 -1 1 -3 -4 3 + 177 62 40 -1 1 -4 -2 0 + 178 0 40 -1 1 -4 3 0 + 178 2 40 -1 1 -4 2 0 + 178 4 40 -1 1 -5 3 0 + 178 6 40 -1 1 -6 4 0 + 178 8 40 -1 1 -5 1 0 + 178 10 40 -1 1 -6 3 0 + 178 12 40 -1 1 -7 4 3 + 178 12 40 -1 1 -7 3 3 + 178 14 40 -1 1 -6 2 0 + 178 16 40 -1 1 -6 1 2 + 178 18 40 -1 1 -5 2 0 + 178 20 40 -1 1 -4 1 0 + 178 22 40 -1 1 -3 1 0 + 178 24 40 -1 1 -3 2 0 + 178 26 40 -1 1 -2 1 0 + 178 28 40 -1 1 -2 0 0 + 178 30 40 -1 1 -3 3 0 + 178 32 40 -1 1 -2 3 0 + 178 34 40 -1 1 -2 2 0 + 178 36 40 -1 1 0 0 0 + 178 38 40 -1 1 -1 1 0 + 178 40 40 -1 1 -1 2 4 + 178 42 40 -1 1 -2 4 0 + 178 44 40 -1 1 -3 4 0 + 178 46 40 -1 1 -3 5 0 + 178 48 40 -1 1 -4 6 0 + 178 50 40 -1 1 -4 5 0 + 178 52 40 -1 1 -5 6 2 + 178 54 40 -1 1 -5 4 0 + 178 56 40 -1 1 -5 5 0 + 178 58 40 -1 1 -4 4 0 + 178 62 40 -1 1 -6 5 2 + 179 0 40 -1 1 2 2 0 + 179 2 40 -1 1 1 3 0 + 179 4 40 -1 1 2 3 0 + 179 6 40 -1 1 0 4 0 + 179 8 40 -1 1 3 3 0 + 179 10 40 -1 1 -1 4 0 + 179 12 40 -1 1 -1 5 0 + 179 14 40 -1 1 4 2 0 + 179 16 40 -1 1 3 4 3 + 179 16 40 -1 1 4 3 3 + 179 18 40 -1 1 2 4 0 + 179 20 40 -1 1 1 4 0 + 179 22 40 -1 1 1 5 2 + 179 24 40 -1 1 0 5 0 + 179 26 40 -1 1 -1 6 2 + 179 28 40 -1 1 -2 6 0 + 179 30 40 -1 1 -2 5 0 + 179 32 40 -1 1 -3 6 0 + 179 34 40 -1 1 -4 7 3 + 179 34 40 -1 1 -3 7 3 + 179 36 40 -1 1 0 1 0 + 179 38 40 -1 1 0 2 0 + 179 40 40 -1 1 -1 3 0 + 179 42 40 -1 1 0 3 0 + 179 44 40 -1 1 1 0 0 + 179 46 40 -1 1 3 1 0 + 179 48 40 -1 1 4 0 0 + 179 50 40 -1 1 5 0 0 + 179 52 40 -1 1 2 1 0 + 179 54 40 -1 1 1 1 0 + 179 56 40 -1 1 1 2 0 + 179 58 40 -1 1 3 2 0 + 179 60 40 -1 1 5 1 2 + 179 62 40 -1 1 4 1 0 + 180 0 40 -1 1 5 -2 0 + 180 2 40 -1 1 4 -2 0 + 180 4 40 -1 1 4 -1 0 + 180 6 40 -1 1 6 -2 0 + 180 8 40 -1 1 3 0 0 + 180 10 40 -1 1 6 -1 2 + 180 12 40 -1 1 5 -1 0 + 180 14 40 -1 1 2 0 0 + 180 16 40 -1 1 3 -1 0 + 180 18 40 -1 1 2 -1 0 + 180 20 40 -1 1 3 -2 0 + 180 22 40 -1 1 2 -2 0 + 180 24 40 -1 1 1 -1 0 + 180 26 40 -1 1 1 -2 0 + 180 28 40 -1 1 2 -3 0 + 180 30 40 -1 1 2 -4 4 + 180 32 40 -1 1 3 -5 0 + 180 34 40 -1 1 3 -4 0 + 180 36 40 -1 1 4 -5 0 + 180 38 40 -1 1 4 -4 0 + 180 40 40 -1 1 3 -3 0 + 180 42 40 -1 1 4 -3 0 + 180 44 40 -1 1 3 -6 0 + 180 46 40 -1 1 7 -4 3 + 180 46 40 -1 1 7 -3 3 + 180 48 40 -1 1 4 -6 0 + 180 50 40 -1 1 5 -6 2 + 180 52 40 -1 1 5 -5 0 + 180 54 40 -1 1 5 -4 0 + 180 56 40 -1 1 6 -5 2 + 180 58 40 -1 1 6 -3 0 + 180 60 40 -1 1 5 -3 0 + 180 62 40 -1 1 6 -4 0 + 181 0 40 0 1 -2 -3 0 + 181 2 40 0 1 -2 -4 0 + 181 4 40 0 1 -3 -3 0 + 181 6 40 0 1 -1 -4 0 + 181 8 40 0 1 0 -5 0 + 181 10 40 0 1 -1 -5 2 + 181 12 40 0 1 1 -6 2 + 181 14 40 0 1 0 -4 0 + 181 16 40 0 1 -1 -3 0 + 181 18 40 0 1 0 -3 0 + 181 20 40 0 1 3 -7 3 + 181 20 40 0 1 4 -7 3 + 181 22 40 0 1 2 -6 0 + 181 24 40 0 1 1 -5 0 + 181 26 40 0 1 1 -4 0 + 181 28 40 0 1 2 -5 0 + 181 30 40 0 1 1 -3 0 + 181 32 40 0 1 0 -2 0 + 181 34 40 0 1 0 -1 0 + 181 36 40 0 1 -1 0 0 + 181 38 40 0 1 -1 -1 0 + 181 40 40 0 1 -4 0 0 + 181 42 40 0 1 -3 0 0 + 181 44 40 0 1 -3 -1 0 + 181 46 40 0 1 -5 0 0 + 181 48 40 0 1 -5 -1 2 + 181 50 40 0 1 -4 -1 0 + 181 52 40 0 1 -2 -1 0 + 181 54 40 0 1 -1 -2 0 + 181 56 40 0 1 -2 -2 0 + 181 58 40 0 1 -3 -2 0 + 181 60 40 0 1 -4 -3 3 + 181 60 40 0 1 -3 -4 3 + 181 62 40 0 1 -4 -2 0 + 182 0 40 0 1 -4 3 0 + 182 2 40 0 1 -4 2 0 + 182 4 40 0 1 -5 3 0 + 182 6 40 0 1 -6 4 0 + 182 8 40 0 1 -5 1 0 + 182 10 40 0 1 -6 3 0 + 182 12 40 0 1 -7 4 3 + 182 12 40 0 1 -7 3 3 + 182 14 40 0 1 -6 2 0 + 182 16 40 0 1 -6 1 2 + 182 18 40 0 1 -5 2 0 + 182 20 40 0 1 -4 1 0 + 182 22 40 0 1 -3 1 0 + 182 24 40 0 1 -3 2 0 + 182 26 40 0 1 -2 1 0 + 182 28 40 0 1 -2 0 0 + 182 30 40 0 1 -3 3 0 + 182 32 40 0 1 -2 3 0 + 182 34 40 0 1 -2 2 0 + 182 36 40 0 1 0 0 0 + 182 38 40 0 1 -1 1 0 + 182 40 40 0 1 -1 2 4 + 182 42 40 0 1 -2 4 0 + 182 44 40 0 1 -3 4 0 + 182 46 40 0 1 -3 5 0 + 182 48 40 0 1 -4 6 0 + 182 50 40 0 1 -4 5 0 + 182 52 40 0 1 -5 6 2 + 182 54 40 0 1 -5 4 0 + 182 56 40 0 1 -5 5 0 + 182 58 40 0 1 -4 4 0 + 182 62 40 0 1 -6 5 2 + 183 0 40 0 1 2 2 0 + 183 2 40 0 1 1 3 0 + 183 4 40 0 1 2 3 0 + 183 6 40 0 1 0 4 0 + 183 8 40 0 1 3 3 0 + 183 10 40 0 1 -1 4 0 + 183 12 40 0 1 -1 5 0 + 183 14 40 0 1 4 2 0 + 183 16 40 0 1 3 4 3 + 183 16 40 0 1 4 3 3 + 183 18 40 0 1 2 4 0 + 183 20 40 0 1 1 4 0 + 183 22 40 0 1 1 5 2 + 183 24 40 0 1 0 5 0 + 183 26 40 0 1 -1 6 2 + 183 28 40 0 1 -2 6 0 + 183 30 40 0 1 -2 5 0 + 183 32 40 0 1 -3 6 0 + 183 34 40 0 1 -4 7 3 + 183 34 40 0 1 -3 7 3 + 183 36 40 0 1 0 1 0 + 183 38 40 0 1 0 2 0 + 183 40 40 0 1 -1 3 0 + 183 42 40 0 1 0 3 0 + 183 44 40 0 1 1 0 0 + 183 46 40 0 1 3 1 0 + 183 48 40 0 1 4 0 0 + 183 50 40 0 1 5 0 0 + 183 52 40 0 1 2 1 0 + 183 54 40 0 1 1 1 0 + 183 56 40 0 1 1 2 0 + 183 58 40 0 1 3 2 0 + 183 60 40 0 1 5 1 2 + 183 62 40 0 1 4 1 0 + 184 0 40 0 1 5 -2 0 + 184 2 40 0 1 4 -2 0 + 184 4 40 0 1 4 -1 0 + 184 6 40 0 1 6 -2 0 + 184 8 40 0 1 3 0 0 + 184 10 40 0 1 6 -1 2 + 184 12 40 0 1 5 -1 0 + 184 14 40 0 1 2 0 0 + 184 16 40 0 1 3 -1 0 + 184 18 40 0 1 2 -1 0 + 184 20 40 0 1 3 -2 0 + 184 22 40 0 1 2 -2 0 + 184 24 40 0 1 1 -1 0 + 184 26 40 0 1 1 -2 0 + 184 28 40 0 1 2 -3 0 + 184 30 40 0 1 2 -4 4 + 184 32 40 0 1 3 -5 0 + 184 34 40 0 1 3 -4 0 + 184 36 40 0 1 4 -5 0 + 184 38 40 0 1 4 -4 0 + 184 40 40 0 1 3 -3 0 + 184 42 40 0 1 4 -3 0 + 184 44 40 0 1 3 -6 0 + 184 46 40 0 1 7 -4 3 + 184 46 40 0 1 7 -3 3 + 184 48 40 0 1 4 -6 0 + 184 50 40 0 1 5 -6 2 + 184 52 40 0 1 5 -5 0 + 184 54 40 0 1 5 -4 0 + 184 56 40 0 1 6 -5 2 + 184 58 40 0 1 6 -3 0 + 184 60 40 0 1 5 -3 0 + 184 62 40 0 1 6 -4 0 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1.txt deleted file mode 100644 index 6e512ca..0000000 --- a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1.txt +++ /dev/null @@ -1,8 +0,0 @@ -0 14 15 17 18 19 21 -12 12 13 16 20 22 23 24 25 26 27 28 -11 10 9 63 42 35 33 32 31 30 29 -7 8 6 2 57 49 43 40 37 36 34 38 -7 5 3 62 56 51 47 44 41 39 38 -4 1 60 55 52 48 46 45 -61 59 54 53 50 -58 58 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1_Hexaboard.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1_Hexaboard.txt new file mode 100644 index 0000000..eb9de06 --- /dev/null +++ b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC1_Hexaboard.txt @@ -0,0 +1,8 @@ +20 20 +12 22 +10 8 24 28 +60 2 6 14 26 +60 4 0 16 18 30 +62 58 56 54 32 +48 50 44 52 38 34 +46 40 42 36 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2.txt deleted file mode 100644 index d9560a9..0000000 --- a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2.txt +++ /dev/null @@ -1,8 +0,0 @@ -0 62 60 59 57 56 -9 7 6 5 3 2 1 61 58 55 53 52 -13 12 11 10 8 4 63 54 51 50 49 -14 15 16 17 18 20 27 41 45 46 47 48 -14 19 21 22 25 29 35 40 43 44 48 -23 24 26 30 34 37 39 42 -28 31 33 36 38 -32 32 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2_Hexaboard.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2_Hexaboard.txt new file mode 100644 index 0000000..6622482 --- /dev/null +++ b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC2_Hexaboard.txt @@ -0,0 +1,7 @@ +28 36 +16 8 20 22 26 38 +14 18 2 24 34 40 +12 10 4 0 30 32 +12 6 54 58 44 42 +62 56 50 46 +52 48 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC3_Hexaboard.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC3_Hexaboard.txt new file mode 100644 index 0000000..d0e32eb --- /dev/null +++ b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC3_Hexaboard.txt @@ -0,0 +1,8 @@ +44 48 50 +36 54 52 46 62 60 +38 56 0 58 14 +40 42 2 4 8 16 +10 6 20 18 16 +30 12 24 22 +32 28 26 +34 34 diff --git a/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC4_Hexaboard.txt b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC4_Hexaboard.txt new file mode 100644 index 0000000..bf5cc29 --- /dev/null +++ b/CondObjects/test/MapGenerator/Channel_Numbers_SKIROC4_Hexaboard.txt @@ -0,0 +1,7 @@ +44 48 50 +32 36 52 56 +30 34 38 54 62 46 +28 40 42 60 58 46 +26 22 20 2 0 6 +24 18 16 4 12 10 +14 8 diff --git a/CondObjects/test/MapGenerator/Mapping.cpp b/CondObjects/test/MapGenerator/Mapping.cpp deleted file mode 100644 index af42784..0000000 --- a/CondObjects/test/MapGenerator/Mapping.cpp +++ /dev/null @@ -1,199 +0,0 @@ -#include -#include -#include -using namespace std; -ofstream fs; -bool ix_iv_valid(int ix, int iv, int sensorSize); -void swap(int (&a)[69], int (&b)[69], int (&c)[69], int size); -void Print_Map_Line(int sk, int channel, int layer, int sensor_iu, int sensor_iv, int cell_iu, int cell_iv, int type); -int Cell_Type(int channel, int skiroc);// 0 for Full-Hex, 1 for calib pad, 2 for half-hex, 3 for mouse-bite, 4 outer calib-pad, 5 for merged-cell - -//////Harcoded entries for the calibration pad//////////////////////////// -const int number_of_calib_pads = 1; -int Map_Calib_Pad[number_of_calib_pads] = {0}; -///////////////Hardcoded Map entries for mouse bites///////////////// -const int number_of_mouse_bites = 3;// Please note its 3 per sensor -int Map_Mouse_Bites_SK1[number_of_mouse_bites] = {7,38,58}; -int Map_Mouse_Bites_SK2[number_of_mouse_bites] = {14,32,48}; -/////////////////Hardcoded Map entries for half hex//////////////////// -const int number_of_half_hex_SK1 = 5;// one less due to merges 12SR#1 -const int number_of_half_hex_SK2 = 6; -int Map_Half_Hex_SK1[number_of_half_hex_SK1] = {4, 28, 45, 50, 61}; -int Map_Half_Hex_SK2[number_of_half_hex_SK2] = {9, 23, 28, 38, 42, 52}; -//////////////////Hardcoded entry for merged cell////////////////////// -const int number_of_merged_cells = 1; -int Map_Merged_Cells_SKI1[number_of_merged_cells] = {12}; -/////////////////Hardcoded entries Outer Calib Pad//////////////////////////// -const int number_of_outer_calib_pads = 1; -int Map_Merged_Outer_Calib_Pad_SK1[number_of_outer_calib_pads] = {35}; -int Map_Merged_Outer_Calib_Pad_SK2[number_of_outer_calib_pads] = {29}; -////////Hard Coded entries for the calibration pads//////////// -//Calib pad 1, closer to the central full-hex -int IU_1_Calib = -1; -int IV_1_Calib = 2; -//Calib pad 2, farther from the central full-hex w.r.t Calb pad 1 -int IU_2_Calib = 2; -int IV_2_Calib = -4; -/////////////////////////////////////////////////////////// - - -main(){ - const int size = 69; - ifstream Channel_SKIROC1("Channel_Numbers_SKIROC1.txt");// Mapping of the first SKIROC(upper half in the u,v system) - ifstream Channel_SKIROC2("Channel_Numbers_SKIROC2.txt");// Mapping of the first SKIROC(lower half in the u,v system) - fs.open("/afs/cern.ch/work/r/rchatter/CMSSW_7_6_3_patch2/src/HGCal/CondObjects/data/map_FNAL_2.txt"); - - if(!Channel_SKIROC1) { - cout << "Unable to open file Channel_Numbers_SKIROC1.txt"; - exit(1); // terminate with error - } - if(!Channel_SKIROC2) { - cout << "Unable to open file Channel_Numbers_SKIROC2.txt"; - exit(1); // terminate with error - } - - int sensorsize = 128; - int Channel_1[size]={0}; - int IU_1[size]={0}; - int IV_1[size]={0}; - int Channel_2[size]={0}; - int IU_2[size]={0}; - int IV_2[size]={0}; - int iterator = 0; -//Print the heading - fs<<"# "<<"SKIROC"<<" "<<"CHANNEL"<<" | "<<"LAYER"<<" "<<"SENSOR_IX"<<" "<<"SENSOR_IV"<<" "<<"IX"<<" "<<"IV"<<" "<<"TYPE"< Det ID association for SKIROC 1 - Channel_SKIROC1>>Channel_1[iterator] ; - if(iterator == 0){ - IU_1[iterator] = IU_1_Calib; - IV_1[iterator++] = IV_1_Calib; - } - for(int vvv=0;vvv<8;vvv++){ - for(int uuu=-7;uuu<8;uuu++){ - if(!ix_iv_valid(uuu,vvv,sensorsize)) continue; - if(vvv == 0 && uuu > 0) continue; - Channel_SKIROC1>>Channel_1[iterator] ; - IU_1[iterator] = uuu; - IV_1[iterator++] = vvv; - } - } - swap(Channel_1,IU_1,IV_1,iterator);//Sort by SKIROC channel number -//filling the El ID -> Det ID association for SKIROC 2 - iterator = 0; - Channel_SKIROC2>>Channel_2[iterator]; - if(iterator == 0){ - IU_2[iterator] = IU_2_Calib; - IV_2[iterator++] = IV_2_Calib; - } - for(int vvv=0;vvv> -8;vvv--){ - for(int uuu=-7;uuu<8;uuu++){ - if(!ix_iv_valid(uuu,vvv,sensorsize)) continue; - if(vvv == 0 && uuu <= 0) continue; - Channel_SKIROC2>>Channel_2[iterator]; - IU_2[iterator] = uuu; - IV_2[iterator++] = vvv; - } - } - swap(Channel_2,IU_2,IV_2,67);//Sort by SKIROC channel number - -//////////Currently we have only one sensor per layer, cell type to be implemeted//////////////////// - int sensor_iu = 0; - int sensor_iv = 0; -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//Print the El ID -> Det ID map -// Due to layer rotation a cell marked u,v in odd layers goes to (u+v),-v in even layer. The logic used in this scheme is that the relative orientation of axes do not change on layer inversion in alternate layers. The ElID->DetID mapping is consistently flipped accordingly. -int hike = 0; -for(int ILayer=1;ILayer<=4;ILayer++){ - hike = 2*(ILayer - 1); - for(int sk = 1; sk <= 2; sk++){ - - for(int iii = 0; iii < 68; iii++){ - if(sk == 2 && iii > 66) continue; - if((ILayer % 2) == 1){ - if(sk == 1) Print_Map_Line(sk + hike,Channel_1[iii],ILayer,sensor_iu,sensor_iv,IU_1[iii],IV_1[iii],Cell_Type(Channel_1[iii], sk)); - if(sk == 2) Print_Map_Line(sk + hike,Channel_2[iii],ILayer,sensor_iu,sensor_iv,IU_2[iii],IV_2[iii],Cell_Type(Channel_2[iii], sk)); - } - else{ - if(sk == 1) Print_Map_Line(sk + hike,Channel_1[iii],ILayer,sensor_iu,sensor_iv,(IU_1[iii]+IV_1[iii]),-IV_1[iii],Cell_Type(Channel_1[iii], sk)); - if(sk == 2) Print_Map_Line(sk + hike,Channel_2[iii],ILayer,sensor_iu,sensor_iv,(IU_2[iii]+IV_2[iii]),-IV_2[iii],Cell_Type(Channel_1[iii], sk)); - } - - }// loop over the channels per SKIROC ends here - }// loop over 2 SKIROCs per layer ends here - }// loop over layer ends here - - -}//main ends here - - -bool ix_iv_valid(int ix, int iv, int sensorSize){ - int aiv=abs(iv); - int ixc=(iv<0)?(-ix):(ix); - if(sensorSize==128) { - if (iv==0) return (ix>=-5 && ix<=5); - else if (aiv==1) return (ixc>=-6 && ixc<=5); - else if (aiv==2) return (ixc>=-6 && ixc<=4); - else if (aiv==3) return (ixc>=-7 && ixc<=4); - else if (aiv==4) return (ixc>=-7 && ixc<=3); - else if (aiv==5) return (ixc>=-6 && ixc<=1); - else if (aiv==6) return (ixc>=-5 && ixc<=-1); - else if (aiv==7) return (ixc==-3 || ixc==-4); - else return false; - } - else return false; -} - -void swap(int (&a)[69], int (&b)[69], int (&c)[69], int size){ - int tmp1 = 0, tmp2=0, tmp3=0; - for(int iii=0;iii a[jjj]){ - tmp1 = a[iii]; tmp2 = b[iii]; tmp3 = c[iii]; - a[iii] = a[jjj]; b[iii] = b[jjj]; c[iii] = c[jjj]; - a[jjj] = tmp1; b[jjj] = tmp2; c[jjj] = tmp3; - } - }// loop over jjj ends here - }// loop over iii ends here - } - -void Print_Map_Line(int sk, int channel, int layer, int sensor_iu, int sensor_iv, int cell_iu, int cell_iv, int type){ - fs<<"\t"< +#include +#include +#include +using namespace std; +ofstream fs; +bool ix_iv_valid(int ix, int iv, int sensorSize); +void swap(int (&a)[69], int (&b)[69], int (&c)[69], int size); +void Print_Map_Line(int sk, int channel, int layer, int sensor_iu, int sensor_iv, int cell_iu, int cell_iv, int type); +int Cell_Type(int channel, int skiroc);// 0 for Full-Hex, 1 for calib pad, 2 for half-hex, 3 for mouse-bite, 4 outer calib-pad, 5 for merged-cell + +//////Harcoded entries for the calibration pad//////////////////////////// +/* +const int number_of_calib_pads = 1; +int Map_Calib_Pad_SK1[number_of_calib_pads] = {22}; +int Map_Calib_Pad_SK2[number_of_calib_pads] = {22}; +*/ +///////////////Hardcoded Map entries for mouse bites///////////////////// +const int number_of_mouse_bites_SK1 = 2; +const int number_of_mouse_bites_SK2 = 1; +const int number_of_mouse_bites_SK3 = 2; +const int number_of_mouse_bites_SK4 = 1; +int Map_Mouse_Bites_SK1[number_of_mouse_bites_SK1] = {20, 60}; +int Map_Mouse_Bites_SK2[number_of_mouse_bites_SK2] = {12}; +int Map_Mouse_Bites_SK3[number_of_mouse_bites_SK3] = {34, 16}; +int Map_Mouse_Bites_SK4[number_of_mouse_bites_SK4] = {46}; +/////////////////Hardcoded Map entries for half hex//////////////////// +const int number_of_half_hex = 3; +int Map_Half_Hex_SK1[number_of_half_hex] = {12, 10, 48}; +int Map_Half_Hex_SK2[number_of_half_hex] = {16, 62, 52}; +int Map_Half_Hex_SK3[number_of_half_hex] = {26, 22, 60}; +int Map_Half_Hex_SK4[number_of_half_hex] = {10, 56, 50}; +//////////////////Hardcoded entry for merged cell////////////////////// +/* +const int number_of_merged_cells = 2; +int Map_Merged_Cells_SKI1[number_of_merged_cells] = {0,60}; +const int number_of_merged_cells_SKI2 = 2; +int Map_Merged_Cells_SKI2[number_of_merged_cells] = {0,60}; +*/ +/////////////////Hardcoded entries Outer Calib Pad//////////////////////////// +const int number_of_outer_calib_pads = 1; +int Map_Merged_Outer_Calib_Pad_SK2[number_of_outer_calib_pads] = {40}; +int Map_Merged_Outer_Calib_Pad_SK4[number_of_outer_calib_pads] = {30}; +/////////////////////////////////////////////////////////// + + +main(){ + + +/* + ifstream MapFile("Mapping.txt"); + int Cell, Channel; + map SkirocToCell; + map::iterator Ski_It; + int MapFileCounter=1; + while(!MapFile.eof() && MapFileCounter<=127){ + MapFile>>Cell; + MapFile>>Channel; + SkirocToCell[Cell] = Channel; + } +*/ + + const int size = 69; + ifstream Channel_SKIROC1("Channel_Numbers_SKIROC1_Hexaboard.txt");// Mapping of the first SKIROC(upper half in the u,v system) + ifstream Channel_SKIROC2("Channel_Numbers_SKIROC2_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC3("Channel_Numbers_SKIROC3_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC4("Channel_Numbers_SKIROC4_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) +// fs.open("/afs/cern.ch/work/r/rchatter/May_Test_Beam_Test/CMSSW_8_0_1/src/HGCal/CondObjects/data/map_FNAL_SB1.txt"); + fs.open("map_CERN_Hexaboard_28Layers.txt"); + + if(!Channel_SKIROC1) { + cout << "Unable to open file Channel_Numbers_SKIROC1.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC2) { + cout << "Unable to open file Channel_Numbers_SKIROC2.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC3) { + cout << "Unable to open file Channel_Numbers_SKIROC3.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC4) { + cout << "Unable to open file Channel_Numbers_SKIROC4.txt"; + exit(1); // terminate with error + } + + int sensorsize = 128; + int Channel_1[size]={0}; + int IU_1[size]={0}; + int IV_1[size]={0}; + int Channel_2[size]={0}; + int IU_2[size]={0}; + int IV_2[size]={0}; + int Channel_3[size]={0}; + int IU_3[size]={0}; + int IV_3[size]={0}; + int Channel_4[size]={0}; + int IU_4[size]={0}; + int IV_4[size]={0}; + int iterator = 0; + int SKI_Channels[4] = {0}; + +//Print the heading + fs<<"# "<<"SKIROC"<<" "<<"CHANNEL"<<" | "<<"LAYER"<<" "<<"SENSOR_IX"<<" "<<"SENSOR_IV"<<" "<<"IX"<<" "<<"IV"<<" "<<"TYPE"< 4) continue; + if(vvv == -6 && uuu > 2) continue; + if(vvv == -5 && uuu > 2) continue; + if(vvv == -4 && uuu > 1) continue; + if(vvv == -3 && uuu > 1) continue; + if(vvv == -2 && uuu > 0) continue; + if(vvv == -1 && uuu > 0) continue; + if( vvv == 0 && ( (uuu >= 0) || (uuu == -2) ) ) continue; + Channel_SKIROC1>>Channel_1[iterator]; + IU_1[iterator] = uuu; + IV_1[iterator++] = vvv; + } + } + + swap(Channel_1,IU_1,IV_1,iterator); + SKI_Channels[0] = iterator; + + iterator = 0; + + for(int vvv = 0; vvv < 8; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if((vvv == 0) && ( (uuu != 0) && (uuu != -2) ) ) continue; + if(vvv == 1 && uuu > -1) continue; + if(vvv == 2 && uuu > -1) continue; + if(vvv == 3 && uuu > -2) continue; + if(vvv == 4 && uuu > -2) continue; + if(vvv == 5 && uuu > -3) continue; + if(vvv == 6 && uuu > -4) continue; + if(vvv == 7) continue; + Channel_SKIROC2>>Channel_2[iterator]; + IU_2[iterator] = uuu; + IV_2[iterator++] = vvv; + } + } + swap(Channel_2,IU_2,IV_2,iterator); + SKI_Channels[1] = iterator; + + iterator = 0; + + for(int vvv = 0; vvv < 8; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if(vvv == 0 && ( (uuu != 1) && (uuu != 4) && (uuu != 5) ) ) continue; + if(vvv == 1 && uuu < 0) continue; + if(vvv == 2 && uuu < 0) continue; + if(vvv == 3 && uuu < -1) continue; + if(vvv == 4 && uuu < -1) continue; + if(vvv == 5 && uuu < -2) continue; + if(vvv == 6 && uuu < -3) continue; + if(vvv == 7 && uuu < -4) continue; + Channel_SKIROC3>>Channel_3[iterator]; + IU_3[iterator] = uuu; + IV_3[iterator++] = vvv; + } + } + swap(Channel_3,IU_3,IV_3,iterator); + SKI_Channels[2] = iterator; + + iterator = 0; + + for(int vvv = -7; vvv <= 0; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if(vvv == -7) continue; + if(vvv == -6 && uuu < 3) continue; + if(vvv == -5 && uuu < 3) continue; + if(vvv == -4 && uuu < 2) continue; + if(vvv == -3 && uuu < 2) continue; + if(vvv == -2 && uuu < 1) continue; + if(vvv == -1 && uuu < 1) continue; + if(vvv == 0 && ( (uuu != 2) && (uuu != 3) )) continue; + Channel_SKIROC4>>Channel_4[iterator]; + IU_4[iterator] = uuu; + IV_4[iterator++] = vvv; + } + } + swap(Channel_4,IU_4,IV_4,iterator); + SKI_Channels[3] = iterator; +//////////Currently we have only one sensor per layer, cell type to be implemeted//////////////////// + int sensor_iu = 0; + int sensor_iv = 0; +//////////////////////////////////////////////////////////////////////////////////////////////////// +//Print the El ID -> Det ID map +// Due to layer rotation a cell marked u,v in odd layers goes to (u+v),-v in even layer. The logic used in this scheme is that the relative orientation of axes do not change on layer inversion in alternate layers. The ElID->DetID mapping is consistently flipped accordingly. +int hike = 0; +for(int ILayer = 1; ILayer <= 28; ILayer++){ + hike = 4*(ILayer - 1); + for(int sk = 1; sk <= 4; sk++){ + + for(int iii = 0; iii < 68; iii++){ + if( iii >= SKI_Channels[sk - 1] ) continue; + if(ILayer%2 == 0){ + if(sk == 1) Print_Map_Line(sk + hike,Channel_1[iii],ILayer,sensor_iu,sensor_iv,IU_1[iii],IV_1[iii],Cell_Type(Channel_1[iii], sk)); + if(sk == 2) Print_Map_Line(sk + hike,Channel_2[iii],ILayer,sensor_iu,sensor_iv,IU_2[iii],IV_2[iii],Cell_Type(Channel_2[iii], sk)); + if(sk == 3) Print_Map_Line(sk + hike,Channel_3[iii],ILayer,sensor_iu,sensor_iv,IU_3[iii],IV_3[iii],Cell_Type(Channel_3[iii], sk)); + if(sk == 4) Print_Map_Line(sk + hike,Channel_4[iii],ILayer,sensor_iu,sensor_iv,IU_4[iii],IV_4[iii],Cell_Type(Channel_4[iii], sk)); + } + else{ + if(sk == 1) Print_Map_Line(sk + hike,Channel_1[iii],ILayer,sensor_iu,sensor_iv,(IU_1[iii]+IV_1[iii]),-IV_1[iii],Cell_Type(Channel_1[iii], sk)); + if(sk == 2){ + Print_Map_Line(sk + hike,Channel_2[iii],ILayer,sensor_iu,sensor_iv,(IU_2[iii]+IV_2[iii]),-IV_2[iii],Cell_Type(Channel_2[iii], sk)); + } + if(sk == 3) Print_Map_Line(sk + hike,Channel_3[iii],ILayer,sensor_iu,sensor_iv,(IU_3[iii]+IV_3[iii]),-IV_3[iii],Cell_Type(Channel_3[iii], sk)); + if(sk == 4) Print_Map_Line(sk + hike,Channel_4[iii],ILayer,sensor_iu,sensor_iv,(IU_4[iii]+IV_4[iii]),-IV_4[iii],Cell_Type(Channel_4[iii], sk)); + } + }// loop over the channels per SKIROC ends here + }// loop over 2 SKIROCs per layer ends here + }// loop over layer ends here + + +}//main ends here + + +bool ix_iv_valid(int ix, int iv, int sensorSize){ + int aiv=abs(iv); + int ixc=(iv<0)?(-ix):(ix); + if(sensorSize==128) { + if (iv==0) return (ix>=-5 && ix<=5); + else if (aiv==1) return (ixc>=-6 && ixc<=5); + else if (aiv==2) return (ixc>=-6 && ixc<=4); + else if (aiv==3) return (ixc>=-7 && ixc<=4); + else if (aiv==4) return (ixc>=-7 && ixc<=3); + else if (aiv==5) return (ixc>=-6 && ixc<=1); + else if (aiv==6) return (ixc>=-5 && ixc<=-1); + else if (aiv==7) return (ixc==-3 || ixc==-4); + else return false; + } + else return false; +} + +void swap(int (&a)[69], int (&b)[69], int (&c)[69], int size){ + int tmp1 = 0, tmp2=0, tmp3=0; + for(int iii=0;iii a[jjj]){ + tmp1 = a[iii]; tmp2 = b[iii]; tmp3 = c[iii]; + a[iii] = a[jjj]; b[iii] = b[jjj]; c[iii] = c[jjj]; + a[jjj] = tmp1; b[jjj] = tmp2; c[jjj] = tmp3; + } + }// loop over jjj ends here + }// loop over iii ends here + } + +void Print_Map_Line(int sk, int channel, int layer, int sensor_iu, int sensor_iv, int cell_iu, int cell_iv, int type){ + fs<<"\t"< +#include +#include +#include +using namespace std; +ofstream fs; +bool SENSOR_Ix_Iv_valid(int Sensor_Ix, int Sensor_Iv); +bool ix_iv_valid(int ix, int iv, int sensorSize); +void swap(int (&a)[69], int (&b)[69], int (&c)[69], int size); +void Print_Map_Line(int sk, int channel, int layer, int sensor_iu, int sensor_iv, int cell_iu, int cell_iv, int type); +int Cell_Type(int channel, int skiroc);// 0 for Full-Hex, 1 for calib pad, 2 for half-hex, 3 for mouse-bite, 4 outer calib-pad, 5 for merged-cell + +//////Harcoded entries for the calibration pad//////////////////////////// +/* +const int number_of_calib_pads = 1; +int Map_Calib_Pad_SK1[number_of_calib_pads] = {22}; +int Map_Calib_Pad_SK2[number_of_calib_pads] = {22}; +*/ +///////////////Hardcoded Map entries for mouse bites///////////////////// +const int number_of_mouse_bites_SK1 = 2; +const int number_of_mouse_bites_SK2 = 1; +const int number_of_mouse_bites_SK3 = 2; +const int number_of_mouse_bites_SK4 = 1; +int Map_Mouse_Bites_SK1[number_of_mouse_bites_SK1] = {20, 60}; +int Map_Mouse_Bites_SK2[number_of_mouse_bites_SK2] = {12}; +int Map_Mouse_Bites_SK3[number_of_mouse_bites_SK3] = {34, 16}; +int Map_Mouse_Bites_SK4[number_of_mouse_bites_SK4] = {46}; +/////////////////Hardcoded Map entries for half hex//////////////////// +const int number_of_half_hex = 3; +int Map_Half_Hex_SK1[number_of_half_hex] = {12, 10, 48}; +int Map_Half_Hex_SK2[number_of_half_hex] = {16, 62, 52}; +int Map_Half_Hex_SK3[number_of_half_hex] = {26, 22, 60}; +int Map_Half_Hex_SK4[number_of_half_hex] = {10, 56, 50}; +//////////////////Hardcoded entry for merged cell////////////////////// +/* +const int number_of_merged_cells = 2; +int Map_Merged_Cells_SKI1[number_of_merged_cells] = {0,60}; +const int number_of_merged_cells_SKI2 = 2; +int Map_Merged_Cells_SKI2[number_of_merged_cells] = {0,60}; +*/ +/////////////////Hardcoded entries Outer Calib Pad//////////////////////////// +const int number_of_outer_calib_pads = 1; +int Map_Merged_Outer_Calib_Pad_SK2[number_of_outer_calib_pads] = {40}; +int Map_Merged_Outer_Calib_Pad_SK4[number_of_outer_calib_pads] = {30}; +/////////////////////////////////////////////////////////// + + +main(){ + + +/* + ifstream MapFile("Mapping.txt"); + int Cell, Channel; + map SkirocToCell; + map::iterator Ski_It; + int MapFileCounter=1; + while(!MapFile.eof() && MapFileCounter<=127){ + MapFile>>Cell; + MapFile>>Channel; + SkirocToCell[Cell] = Channel; + } +*/ + + const int size = 69; + ifstream Channel_SKIROC1("Channel_Numbers_SKIROC1_Hexaboard.txt");// Mapping of the first SKIROC(upper half in the u,v system) + ifstream Channel_SKIROC2("Channel_Numbers_SKIROC2_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC3("Channel_Numbers_SKIROC3_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC4("Channel_Numbers_SKIROC4_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) +// fs.open("/afs/cern.ch/work/r/rchatter/May_Test_Beam_Test/CMSSW_8_0_1/src/HGCal/CondObjects/data/map_FNAL_SB1.txt"); + fs.open("map_CERN_Hexaboard_FH_12Layers.txt"); + + if(!Channel_SKIROC1) { + cout << "Unable to open file Channel_Numbers_SKIROC1.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC2) { + cout << "Unable to open file Channel_Numbers_SKIROC2.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC3) { + cout << "Unable to open file Channel_Numbers_SKIROC3.txt"; + exit(1); // terminate with error + } + if(!Channel_SKIROC4) { + cout << "Unable to open file Channel_Numbers_SKIROC4.txt"; + exit(1); // terminate with error + } + + int sensorsize = 128; + int Channel_1[size]={0}; + int IU_1[size]={0}; + int IV_1[size]={0}; + int Channel_2[size]={0}; + int IU_2[size]={0}; + int IV_2[size]={0}; + int Channel_3[size]={0}; + int IU_3[size]={0}; + int IV_3[size]={0}; + int Channel_4[size]={0}; + int IU_4[size]={0}; + int IV_4[size]={0}; + int iterator = 0; + int SKI_Channels[4] = {0}; + +//Print the heading + fs<<"# "<<"SKIROC"<<" "<<"CHANNEL"<<" | "<<"LAYER"<<" "<<"SENSOR_IX"<<" "<<"SENSOR_IV"<<" "<<"IX"<<" "<<"IV"<<" "<<"TYPE"< 4) continue; + if(vvv == -6 && uuu > 2) continue; + if(vvv == -5 && uuu > 2) continue; + if(vvv == -4 && uuu > 1) continue; + if(vvv == -3 && uuu > 1) continue; + if(vvv == -2 && uuu > 0) continue; + if(vvv == -1 && uuu > 0) continue; + if( vvv == 0 && ( (uuu >= 0) || (uuu == -2) ) ) continue; + Channel_SKIROC1>>Channel_1[iterator]; + IU_1[iterator] = uuu; + IV_1[iterator++] = vvv; + } + } + + swap(Channel_1,IU_1,IV_1,iterator); + SKI_Channels[0] = iterator; + + iterator = 0; + + for(int vvv = 0; vvv < 8; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if((vvv == 0) && ( (uuu != 0) && (uuu != -2) ) ) continue; + if(vvv == 1 && uuu > -1) continue; + if(vvv == 2 && uuu > -1) continue; + if(vvv == 3 && uuu > -2) continue; + if(vvv == 4 && uuu > -2) continue; + if(vvv == 5 && uuu > -3) continue; + if(vvv == 6 && uuu > -4) continue; + if(vvv == 7) continue; + Channel_SKIROC2>>Channel_2[iterator]; + IU_2[iterator] = uuu; + IV_2[iterator++] = vvv; + } + } + swap(Channel_2,IU_2,IV_2,iterator); + SKI_Channels[1] = iterator; + + iterator = 0; + + for(int vvv = 0; vvv < 8; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if(vvv == 0 && ( (uuu != 1) && (uuu != 4) && (uuu != 5) ) ) continue; + if(vvv == 1 && uuu < 0) continue; + if(vvv == 2 && uuu < 0) continue; + if(vvv == 3 && uuu < -1) continue; + if(vvv == 4 && uuu < -1) continue; + if(vvv == 5 && uuu < -2) continue; + if(vvv == 6 && uuu < -3) continue; + if(vvv == 7 && uuu < -4) continue; + Channel_SKIROC3>>Channel_3[iterator]; + IU_3[iterator] = uuu; + IV_3[iterator++] = vvv; + } + } + swap(Channel_3,IU_3,IV_3,iterator); + SKI_Channels[2] = iterator; + + iterator = 0; + + for(int vvv = -7; vvv <= 0; vvv++){ + for(int uuu = -7; uuu < 8; uuu++){ + if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; + if(vvv == -7) continue; + if(vvv == -6 && uuu < 3) continue; + if(vvv == -5 && uuu < 3) continue; + if(vvv == -4 && uuu < 2) continue; + if(vvv == -3 && uuu < 2) continue; + if(vvv == -2 && uuu < 1) continue; + if(vvv == -1 && uuu < 1) continue; + if(vvv == 0 && ( (uuu != 2) && (uuu != 3) )) continue; + Channel_SKIROC4>>Channel_4[iterator]; + IU_4[iterator] = uuu; + IV_4[iterator++] = vvv; + } + } + swap(Channel_4,IU_4,IV_4,iterator); + SKI_Channels[3] = iterator; +//////////Currently we have only one sensor per layer, cell type to be implemeted//////////////////// + int sensor_iu = 0; + int sensor_iv = 0; +//////////////////////////////////////////////////////////////////////////////////////////////////// +//Print the El ID -> Det ID map +// Due to layer rotation a cell marked u,v in odd layers goes to (u+v),-v in even layer. The logic used in this scheme is that the relative orientation of axes do not change on layer inversion in alternate layers. The ElID->DetID mapping is consistently flipped accordingly. +int hike = 0; +int hike_extra = 0; +for(int ILayer = 29; ILayer <= 40; ILayer++){ + hike = 4*(ILayer - 1); +//////////////add nested loop over SENSOR_IU and SENSOR_IV + for(int Sensor_Iv = -1; Sensor_Iv <= 1; Sensor_Iv++){ + for(int Sensor_Iu = -1; Sensor_Iu <= 1; Sensor_Iu++){ + if( !SENSOR_Ix_Iv_valid(Sensor_Iu, Sensor_Iv) ) continue; + if( Sensor_Iu == 0 && Sensor_Iv == 0) hike_extra = 0; + else if(Sensor_Iv == -1) hike_extra = 4*(Sensor_Iu + 1); + else if(Sensor_Iv == 0){ + if( Sensor_Iu == -1) hike_extra = 4*3; + else if( Sensor_Iu == 1) hike_extra = 4*4; + } + else if(Sensor_Iv == 1){ + if( Sensor_Iu == -1) hike_extra = 4*5; + else if( Sensor_Iu == 0) hike_extra = 4*6; + } + + for(int sk = 1; sk <= 4; sk++){ + for(int iii = 0; iii < 68; iii++){ + if( iii >= SKI_Channels[sk - 1] ) continue; +// if(ILayer == 29 && iii == 0) cout<> HGCalTBCellVertices::GetCellCoordinates(i vertex_y_tmp = y_co_FullHex[iii] + iv * vy0; //The general strategy is to translate starting from the central hexagonal cell to the iu,iv desired. If any vertex goes out of the sensor boundary its cordinates are not filled into the vector of pairs. if(fabs(vertex_x_tmp) <= Xmax(iv, fabs(vertex_y_tmp)) + delta) { + vertex_x_tmp += sensor_iu*X0 + sensor_iv*VX0; + vertex_y_tmp += sensor_iv*VY0; auto point = RotateLayer(std::make_pair(vertex_x_tmp, vertex_y_tmp), TEST_BEAM_LAYER_ROTATION); // if(flipX==true) point.first=-point.first; Cell_co.push_back(point); @@ -53,8 +55,8 @@ std::pair HGCalTBCellVertices::GetCellCentreCoordinates(int laye double centre_x_tmp = 0., centre_y_tmp = 0.; bool ValidFlag = Top.iu_iv_valid(layer, sensor_iu, sensor_iv, iu, iv, sensorsize); if(ValidFlag) { - centre_x_tmp = iu * x0 + iv * vx0; - centre_y_tmp = iv * vy0; + centre_x_tmp = iu * x0 + iv * vx0 + sensor_iu*X0 + sensor_iv*VX0; + centre_y_tmp = iv * vy0 + iv * vy0 + sensor_iv*VY0; auto point = RotateLayer(std::make_pair(centre_x_tmp, centre_y_tmp), TEST_BEAM_LAYER_ROTATION); // if(flipX==true) point.first = - point.first; return point; diff --git a/Geometry/src/HGCalTBTopology.cc b/Geometry/src/HGCalTBTopology.cc index 400f219..55bf4d8 100644 --- a/Geometry/src/HGCalTBTopology.cc +++ b/Geometry/src/HGCalTBTopology.cc @@ -7,9 +7,20 @@ bool HGCalTBTopology::iu_iv_valid(int layer, int sensor_iu, int sensor_iv, int iu, int iv, int sensorSize) const { - int aiv = abs(iv); - int iuc = (iv < 0) ? (-iu) : (iu); - if(layer <= 28 && sensor_iu == 0 && sensor_iv == 0) { + bool Is_Valid_sensor_iu_iv = 0; + int aiv = abs(iv); + int iuc = (iv < 0) ? (-iu) : (iu); + + int aIv = abs(sensor_iv); + int Iuc = (sensor_iv < 0)?(-sensor_iu):(sensor_iu); + + if(layer <= 28) Is_Valid_sensor_iu_iv = (Iuc == 0 && aIv == 0); + else{ + if(aIv == 0) Is_Valid_sensor_iu_iv = (Iuc >= -1 && Iuc <= 1); + else if(aIv == 1) Is_Valid_sensor_iu_iv = (Iuc >= -1 && Iuc <= 0); + } + + if(layer <= 40 && Is_Valid_sensor_iu_iv) { if(sensorSize == 128) { if (iv == 0) return (iu >= -5 && iu <= 5); else if (aiv == 1) return (iuc >= -6 && iuc <= 5); @@ -46,6 +57,7 @@ double HGCalTBTopology::Cell_Area(int cell_type) const else return -1.; //signifies an invalid cell type } + std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId detid, int sensorSize, int maxDistance, const HGCalElectronicsMap& emap) const { int layer=detid.layer(); @@ -74,3 +86,4 @@ std::set HGCalTBTopology::getNeighboringCellsDetID(HGCalTBDetId de } return detids; } + From 9054bba82b94ea70461f5fdec7a76dcb3b0724dc Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Sat, 8 Apr 2017 18:59:53 +0200 Subject: [PATCH 245/297] Test converter from Sim Hits to TBRecHits[ (Based on Thorben's HGCalTBGenSimSource, removing wirechanber input files/info)] --- RawToDigi/plugins/HGCalTBGenSimSource_Only.cc | 120 +++++++++++ RawToDigi/plugins/HGCalTBGenSimSource_Only.h | 89 +++++++++ Sim_To_TBRecHits_cfg.py | 186 ++++++++++++++++++ 3 files changed, 395 insertions(+) create mode 100644 RawToDigi/plugins/HGCalTBGenSimSource_Only.cc create mode 100644 RawToDigi/plugins/HGCalTBGenSimSource_Only.h create mode 100644 Sim_To_TBRecHits_cfg.py diff --git a/RawToDigi/plugins/HGCalTBGenSimSource_Only.cc b/RawToDigi/plugins/HGCalTBGenSimSource_Only.cc new file mode 100644 index 0000000..f1fe3c4 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBGenSimSource_Only.cc @@ -0,0 +1,120 @@ +#include "HGCal/RawToDigi/plugins/HGCalTBGenSimSource_Only.h" + +using namespace std; + +HGCalTBGenSimSource_Only::HGCalTBGenSimSource_Only(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : edm::ProducerSourceFromFiles(pset, desc, true), + currentRun(-1), + currentEvent(-1), + rootFile(NULL) +{ + eventCounter = 0; + + //find and fill the configured runs + outputCollectionName = pset.getParameter("OutputCollectionName"); + fileNames_ = pset.getUntrackedParameter>("fileNames"); + produces (outputCollectionName); + + _e_mapFile = pset.getParameter("e_mapFile_CERN"); + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(_e_mapFile); + + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + + geomc = new HexGeometry(false); + + tree = 0; + simHitCellIdE = 0; + simHitCellEnE = 0; + beamX = 0; + beamY = 0; + +} + +bool HGCalTBGenSimSource_Only::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) +{ + + if (currentRun == -1) { //initial loading of a file + currentRun = 1; + currentEvent = 0; + + if (!(fileNames_.size())) return false; // need a file... + std::string fileName = fileNames_[0].c_str(); // currently works with only one file + if (fileName.find("file:") == 0) fileName = fileName.substr(5); + + rootFile = new TFile((fileName).c_str()); + dir = (TDirectory*)rootFile->FindObjectAny("HGCalTBAnalyzer"); + if (dir != NULL) { + tree = (TTree*)dir->Get("HGCTB"); + } else { + tree = (TTree*)rootFile->Get("HGCTB"); + } + + tree->SetBranchAddress("simHitCellIdE", &simHitCellIdE, &b_simHitCellIdE); + tree->SetBranchAddress("simHitCellEnE", &simHitCellEnE, &b_simHitCellEnE); + tree->SetBranchAddress("xBeam", &beamX, &b_beamX); + tree->SetBranchAddress("yBeam", &beamY, &b_beamY); + tree->SetBranchAddress("pBeam", &beamP, &b_beamP); + } + +/* + if (currentEvent == tree->GetEntries()) { + currentRun = -1; + setRunAndEventInfo(id, time, evType); + } +*/ + + if(currentEvent <= tree->GetEntries()){ + tree->GetEntry(currentEvent); + currentEvent++; + return true; + } + else return false; + +} + + +void HGCalTBGenSimSource_Only::produce(edm::Event & event) +{ + + eventCounter++; //indexes each event chronologically passing this plugin + //first: fill the rechits + std::auto_ptr rechits(new HGCalTBRecHitCollection); + + for(unsigned int icell=0; icellsize(); icell++){ + int layer = ((simHitCellIdE->at(icell)>>19)&0x7F); + + int cellno = (simHitCellIdE->at(icell)>>0)&0xFF; + std::pair xy = geomc->position(cellno); + double x = xy.first / 10.; //values are converted from mm to cm + double y = xy.second / 10.; //values are converted from mm to cm + int cellType = geomc->cellType(cellno); + std::pair iuiv = TheCell.GetCellIUIVCoordinates(x, y); + + HGCalTBRecHit recHit(HGCalTBDetId(layer, 0, 0, iuiv.first, iuiv.second, cellType), 0., 0., 0., 0); + + recHit.setCellCenterCoordinate(x, y); + + uint32_t EID = essource_.emap_.detId2eid(recHit.id()); + HGCalTBElectronicsId eid(EID); + + double energy = simHitCellEnE->at(icell); + + recHit.setEnergy(energy); + recHit._energyLow = energy; + recHit._energyHigh = energy; + + rechits->push_back(recHit); + } + event.put(rechits, outputCollectionName); + +} + +void HGCalTBGenSimSource_Only::endJob() { +} + + +#include "FWCore/Framework/interface/InputSourceMacros.h" + +DEFINE_FWK_INPUT_SOURCE(HGCalTBGenSimSource_Only); diff --git a/RawToDigi/plugins/HGCalTBGenSimSource_Only.h b/RawToDigi/plugins/HGCalTBGenSimSource_Only.h new file mode 100644 index 0000000..a8fc57f --- /dev/null +++ b/RawToDigi/plugins/HGCalTBGenSimSource_Only.h @@ -0,0 +1,89 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Sources/interface/ProducerSourceFromFiles.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRunData.h" +#include "HGCal/DataFormats/interface/HGCalTBMultiWireChamberData.h" +#include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalWaferGeometry.h" +#include +#include +#include +#include +#include +#include "stdlib.h" +#include +#include + +#include "TFile.h" +#include "TBranch.h" +#include "TTree.h" +#include "TDirectory.h" +#include "TRandom.h" +/** + * + * + * + * + * +**/ + +//must be a globally available variable, otherwise a segmentation fault is thrown +struct { + HGCalElectronicsMap emap_; +} essource_; + + +//to the EDM::Event via auxiliary information + +class HGCalTBGenSimSource_Only : public edm::ProducerSourceFromFiles +{ +private: + bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); + virtual void produce(edm::Event & e); + virtual void endJob() override; + + std::string outputCollectionName; + std::vector fileNames_; + + + int currentRun; + int currentEvent; + int eventCounter; + + TFile *rootFile; + TTree *tree; //!pointer to the analyzed TTree or TChain + TDirectory *dir; + + std::vector *simHitCellIdE; + std::vector *simHitCellEnE; + double beamX; + double beamY; + double beamP; + TBranch *b_simHitCellIdE; + TBranch *b_simHitCellEnE; + TBranch *b_beamX; + TBranch *b_beamY; + TBranch *b_beamP; + + //getting the required electronic mapping + std::string _e_mapFile; + + HGCalTBCellVertices TheCell; + HexGeometry* geomc; + +public: + explicit HGCalTBGenSimSource_Only(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc); + virtual ~HGCalTBGenSimSource_Only() + { + delete rootFile; + + } + +}; diff --git a/Sim_To_TBRecHits_cfg.py b/Sim_To_TBRecHits_cfg.py new file mode 100644 index 0000000..ddc3b36 --- /dev/null +++ b/Sim_To_TBRecHits_cfg.py @@ -0,0 +1,186 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +import os,sys + + +options = VarParsing.VarParsing('standard') + +#################################### +# Options for reading in the data +options.register('repoFolder', + '/afs/cern.ch/work/r/rchatter/CERN_TestBeam_2017/CMSSW_8_0_21/src/HGCal', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Directory to the repository to correctly navigate to some file in CondObjects' + ) + +options.register('dataFolder', + '/eos/cms/store/group/upgrade/HGCAL/simulation/8moduleIv8_PhysicsList_FTFP_BERT_EMM_allImprovements_2017Jan/mc/CRAB_PrivateMC/crab_Ele100GeV/170102_203458/0000', #use this for running on pclcd + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Main directory containing raw text input') + +options.register('readOnlyRuns', + '', + VarParsing.VarParsing.multiplicity.list, + VarParsing.VarParsing.varType.int, + 'Run the analysis only for the indicated runs.' + ) + +options.register('isData', + False, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.bool, + 'Is the analysis run on real data (otherwise on simulated samples)?') + +options.register('nSpills', + 15, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Number of spills per run before read-out is stopped.') + + +#################################### +# Options specific for the pedestal subtraction +options.register('pedestalsHighGain', + '%s/CondObjects/data/Ped_HighGain_L8.txt' % options.repoFolder, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to high gain pedestals file.') + +options.register('pedestalsLowGain', + '%s/CondObjects/data/Ped_LowGain_L8.txt' % options.repoFolder, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Path to low gain pedestals file.') + +#################################### +# Options for running the analysis, e.g. indicating what sequence is to be run +options.register('chainSequence', + 8, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Here: only 8 (position resolution) and 9 (writing of millepede binary) is configured.') + +options.register('reportEvery', + 100, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Frequency of event count printouts on the console.') + +#################################### +# Options related to the experimental setup +options.register('configuration', + -1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + '1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower') + +#################################### +# Output file options +options.register('outputFolder', + '/tmp/', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Main directory of the output files.') + +options.register('outputPostfix', + 'default', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Postfix to the output file.') + + +options.parseArguments() +#################################### +# Check if necessary folders exist +if not os.path.isdir(options.dataFolder): + sys.exit("Error: Data folder not found or inaccessible!") + +if not os.path.isdir(options.outputFolder): + os.system("mkdir -p " + options.outputFolder) + +################################ +# Setting an upper limit for the events to be processed, e.g. for debugging +options.maxEvents = -1 +process = cms.Process("unpack") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + +#################################### +# Reduces the frequency of event count couts +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = options.reportEvery + +#################################### +# Load the standard sequences +process.load('HGCal.StandardSequences.RawToDigi_cff') +process.load('HGCal.StandardSequences.LocalReco_cff') +process.load('HGCal.StandardSequences.dqm_cff') +#################################### + + +#################################### +# Initialize the data read-in plugins +if not options.isData: + process.source = cms.Source("HGCalTBGenSimSource_Only", + OutputCollectionName = cms.string(''), + e_mapFile_CERN = cms.string('HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt'), + fileNames=cms.untracked.vstring(["file:/eos/cms/store/group/upgrade/HGCAL/simulation/8moduleIv8_PhysicsList_FTFP_BERT_EMM_allImprovements_2017Jan/mc/CRAB_PrivateMC/crab_Ele100GeV/170102_203458/0000/TBGenSim_803.root"]) + ) + + +#################################### +#add skip event exception which might occur for simulated samples because the last event is not properly passed forward +process.options = cms.untracked.PSet( + SkipEvent = cms.untracked.vstring('ProductNotFound') +) + +#################################### +# BadSpillFilter options +process.BadSpillFilter.nameCFG1 = cms.string("%s/CondObjects/data/Bad_Run_Spill_CFG1.txt" % options.repoFolder) +process.BadSpillFilter.nameCFG2 = cms.string("%s/CondObjects/data/Bad_Run_Spill_CFG2.txt" % options.repoFolder) + +#################################### +# hgcaltbdigisplotter options +process.hgcaltbdigisplotter.pedestalsHighGain = cms.untracked.string(options.pedestalsHighGain) +process.hgcaltbdigisplotter.pedestalsLowGain = cms.untracked.string(options.pedestalsLowGain) + +#################################### +# hgcaltbrechits options +process.hgcaltbrechits.pedestalLow = cms.string(options.pedestalsLowGain) +process.hgcaltbrechits.pedestalHigh = cms.string(options.pedestalsHighGain) +process.hgcaltbrechits.gainLow = cms.string('') +process.hgcaltbrechits.gainHigh = cms.string('') + +#################################### +# Set the configuration in the appropriate plugins that need this information +if(options.configuration == "1"): + process.BadSpillFilter.layers_config = cms.int32(1) + process.hgcaltbrechits.layers_config = cms.int32(1) + process.position_resolution_analyzer.layers_config = cms.int32(1) +elif(options.configuration == "2"): + process.BadSpillFilter.layers_config = cms.int32(2) + process.hgcaltbrechits.layers_config = cms.int32(2) + process.position_resolution_analyzer.layers_config = cms.int32(2) +else: + sys.exit("Error: Configuarion % is not supported in the position resolution analysis" % options.configuration) +###################################### +process.output = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('Test_SimToTBRecHits_803.root') + ) +#################################### +# Define the output file using TFileService. The MillepedeBinaryWriter defines its own, non-ROOT file as output +if (options.chainSequence == 8): + process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/HGCRun_Output_Position_Resolution_%s.root"%(options.outputFolder,options.outputPostfix))) + +#################################### +# Setup the sequences. With simulated data, 'process.hgcaltbdigis*process.BadSpillFilter*process.hgcaltbrechits' do not run but are replaced by the HGCalTBGenSimSource plugin that converts +# the root tuples to HGCalRechits. +if not options.isData: + if (options.chainSequence == 8): + process.p =cms.Path() + +process.end = cms.EndPath(process.output) From 66486d14c1fb366d21e531a0007e92e2bf8897b9 Mon Sep 17 00:00:00 2001 From: asteencern Date: Wed, 10 May 2017 19:23:34 +0200 Subject: [PATCH 246/297] first commit with new data unpacker for 2017 data (not tested yet) --- DataFormats/interface/HGCalTBSkiroc2CMS.h | 63 ++++++++ .../interface/HGCalTBSkiroc2CMSCollection.h | 15 ++ DataFormats/src/HGCalTBSkiroc2CMS.cc | 70 +++++++++ DataFormats/src/classes.h | 5 + DataFormats/src/classes_def.xml | 4 + RawToDigi/plugins/HGCalTBRawDataSource.cc | 144 ++++++++++++++++++ RawToDigi/plugins/HGCalTBRawDataSource.h | 64 ++++++++ 7 files changed, 365 insertions(+) create mode 100644 DataFormats/interface/HGCalTBSkiroc2CMS.h create mode 100644 DataFormats/interface/HGCalTBSkiroc2CMSCollection.h create mode 100644 DataFormats/src/HGCalTBSkiroc2CMS.cc create mode 100644 RawToDigi/plugins/HGCalTBRawDataSource.cc create mode 100644 RawToDigi/plugins/HGCalTBRawDataSource.h diff --git a/DataFormats/interface/HGCalTBSkiroc2CMS.h b/DataFormats/interface/HGCalTBSkiroc2CMS.h new file mode 100644 index 0000000..9a583be --- /dev/null +++ b/DataFormats/interface/HGCalTBSkiroc2CMS.h @@ -0,0 +1,63 @@ +#ifndef HGCALTBSKIROC2CMS_H_INCLUDED +#define HGCALTBSKIROC2CMS_H_INCLUDED 1 + +#include +#include +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" + +static const int MASK_ADC = 0x0FFF; +static const int MASK_ROLL = 0x1FFF; +static const int MASK_GTS_MSB = 0x2FFF; +static const int MASK_GTS_LSB = 0x1FFF; +static const int MASK_ID = 0xFF; +static const int MASK_HEAD = 0xF000; + +static const size_t NUMBER_OF_SCA = 15; +static const size_t NUMBER_OF_CHANNELS = 64; +static const size_t ADCLOW_SHIFT = 0; +static const size_t ADCHIGH_SHIFT = 64; +static const size_t SCA_SHIFT = 128; +static const size_t SKIROC_DATA_SIZE = 1924; //number of 16 bits words + +class HGCalTBSkiroc2CMS +{ + public: + + HGCalTBSkiroc2CMS( const std::array& data, const std::array &ids ) : + m_data(data), + m_id(ids) + {;} + uint16_t gray_to_brady(const uint16_t gray) const; + + uint16_t ADCLow( int chan, int sca ) const { return (sca>0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000 ; } + uint16_t ADCHigh( int chan, int sca ) const {return (sca>0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} + uint16_t TOTSlow( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*15) & MASK_ADC );} + uint16_t TOTFast( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*15) & MASK_ADC );} + uint16_t TOAFall( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + uint16_t TOARise( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + bool TOAHitFall(int chan) const { return ((m_data.at(chan+ADCLOW_SHIFT)&~MASK_ADC)>>4*3) ;} + bool TOAHitRise(int chan) const { return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3) ;} + uint16_t rollMask() const { return (m_data.at(SKIROC_DATA_SIZE-4)&MASK_ROLL); } + + private: + uint32_t globalTS_MSB() const { return (m_data.at(SKIROC_DATA_SIZE-3) & MASK_GTS_MSB ); } + uint32_t globalTS_LSB() const { return ( (m_data.at(SKIROC_DATA_SIZE-2) & MASK_GTS_LSB)>>1 ); } + public: + uint32_t globalTS()const{ return gray_to_brady( globalTS_MSB() | globalTS_LSB()); } + int skirocId()const{ return (m_data.at(SKIROC_DATA_SIZE-1) & MASK_ID); } + bool check(); + + + HGCalTBDetId detid( int chan ) const + { + return HGCalTBDetId(m_id.at(chan)); + } + + private: + std::array m_data; + std::array m_id; +}; + +std::ostream& operator<<(std::ostream&, const HGCalTBSkiroc2CMS&); + +#endif // SKIROC2DATAFRAME_H_INCLUDED diff --git a/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h b/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h new file mode 100644 index 0000000..be90173 --- /dev/null +++ b/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h @@ -0,0 +1,15 @@ +#ifndef DATAFORMATS_HGCALTBSKIROC2CMSCOLLECTION_H +#define DATAFORMATS_HGCALTBSKIROC2CMSCOLLECTION_H + +#include "DataFormats/Common/interface/EDCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +typedef edm::EDCollection HGCalTBSkiroc2CMSCollection; +typedef edm::Ref HGCalTBSkiroc2CMSRef; +typedef edm::RefVector HGCalTBSkiroc2CMSRefs; +typedef edm::RefProd HGCalTBSkiroc2CMSRefProd; + + +#endif diff --git a/DataFormats/src/HGCalTBSkiroc2CMS.cc b/DataFormats/src/HGCalTBSkiroc2CMS.cc new file mode 100644 index 0000000..aac59c9 --- /dev/null +++ b/DataFormats/src/HGCalTBSkiroc2CMS.cc @@ -0,0 +1,70 @@ +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" + +uint16_t HGCalTBSkiroc2CMS::gray_to_brady(const uint16_t gray) const +{ + uint16_t result = gray & (1 << 11); + result |= (gray ^ (result >> 1)) & (1 << 10); + result |= (gray ^ (result >> 1)) & (1 << 9); + result |= (gray ^ (result >> 1)) & (1 << 8); + result |= (gray ^ (result >> 1)) & (1 << 7); + result |= (gray ^ (result >> 1)) & (1 << 6); + result |= (gray ^ (result >> 1)) & (1 << 5); + result |= (gray ^ (result >> 1)) & (1 << 4); + result |= (gray ^ (result >> 1)) & (1 << 3); + result |= (gray ^ (result >> 1)) & (1 << 2); + result |= (gray ^ (result >> 1)) & (1 << 1); + result |= (gray ^ (result >> 1)) & (1 << 0); + return result; + +} + + +bool HGCalTBSkiroc2CMS::check() +{ + for( size_t j=0; j>4*3; + if(head!=8&&head!=9){ + std::cout << "ISSUE : we expected 8(1000) or 9(1001) for the adc header and I find " << head << std::endl; + return false; + } + for( size_t k=0; k>4*3)!=head ){ + std::cout << "\n We have a major issue (LG)-> " << head << " should be the same as " << ((m_data.at(j+SCA_SHIFT*k)&MASK_HEAD)>>4*3) << std::endl; + return false; + } + } + head=(m_data.at(j+NUMBER_OF_CHANNELS)&MASK_HEAD)>>4*3; + if(head!=8&&head!=9){ + std::cout << "ISSUE : we expected 8(1000) or 9(1001) for the adc header and I find " << head << std::endl; + return false; + } + for( size_t k=0; k>4*3)!=head ){ + std::cout << "\n We have a major issue (HG)-> " << head << " should be the same as " << ((m_data.at(j+SCA_SHIFT*k+NUMBER_OF_CHANNELS)&MASK_HEAD)>>4*3) << std::endl; + return false; + } + } + } + return true; +} + +std::ostream& operator<<(std::ostream& s, const HGCalTBSkiroc2CMS& ski) +{ + for (size_t i = 0; i < NUMBER_OF_CHANNELS; i++){ + s << "Channel det id : " << ski.detid(i) << "\t High gain ADC => " << ski.TOAHitRise(i) ; + for( size_t j=0; j " << ski.TOAHitFall(i) ; + for( size_t j=0; j _HGCTBClusterVect; + + HGCalTBSkiroc2CMS _aSki; + std::vector _skiVect; SKIROC2DigiCollection _SR2DC; edm::Wrapper _theSR2DC; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index ca96415..6ec367a 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -22,6 +22,10 @@ + + + + diff --git a/RawToDigi/plugins/HGCalTBRawDataSource.cc b/RawToDigi/plugins/HGCalTBRawDataSource.cc new file mode 100644 index 0000000..f549510 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBRawDataSource.cc @@ -0,0 +1,144 @@ +#include "HGCal/RawToDigi/plugins/HGCalTBRawDataSource.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" + +HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc) : + edm::ProducerSourceFromFiles(pset, desc, true), + m_filePath(pset.getUntrackedParameter("FilePath", "./data/")), + m_fileName(pset.getUntrackedParameter("FileName", "HexaData_Run0000.raw")), + m_electronicMap(pset.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt")), + m_outputCollectionName(pset.getUntrackedParameter("OutputCollectionName","SKIROC2CMSDATA")), + m_nOrmBoards(pset.getUntrackedParameter("NOrmBoards", 1)), + m_nHexaboards(pset.getUntrackedParameter("NHexaBoards", 1)), + m_nSkirocsPerHexa(pset.getUntrackedParameter("NSkirocsPerHexa", 4)), + m_nChannelsPerSkiroc(pset.getUntrackedParameter("NChannelsPerSkiroc", 64)), + m_nWords(pset.getUntrackedParameter ("NumberOf32BitsWordsPerReadOut",30788)) +{ + std::cout << "Hey je commence" << std::endl; + sleep(10); + + produces(); + //produces("RunData"); + + m_event = 0; + m_fileId=0; + + m_skiMask = 0xffffffff; + switch( m_nOrmBoards ){ + case 1 : m_skiMask = 0x0f000000;break; + case 2 : m_skiMask = 0xff000000;break; + case 3 : m_skiMask = 0xff0f0000;break; + case 4 : m_skiMask = 0xffff0000;break; + case 5 : m_skiMask = 0xffff0f00;break; + case 6 : m_skiMask = 0xffffff00;break; + case 7 : m_skiMask = 0xffffff0f;break; + case 8 : m_skiMask = 0xffffffff;break; + default : { std::cout << "wrong skiroc number: " << m_nOrmBoards << std::endl; exit(1); } + } + + m_buffer=new char[m_nWords*4]; + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(m_electronicMap); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + } + +} + +bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) +{ + + if( m_event==0 ){ + m_input.open(m_fileName.c_str(), std::ios::in|std::ios::binary); + if( !m_input.is_open() ){ + std::cout << "PROBLEM : Not able to open " << m_fileName << "\t -> return false (so end of process I guess)" << std::endl; + return false; + } + } + if( !m_input.good() ) return false; + std::cout << "start reading event " << m_event << std::endl; + m_input.read ( m_buffer, m_nWords*4 ); + m_input.seekg( (m_event+1)*m_nWords*4, std::ios::beg ); + std::vector rawData; + for( size_t i=0; i > HGCalTBRawDataSource::decode_raw_32bit(std::vector &raw){ + std::cout<<"In decoder"< ski_mask(m_skiMask); + const int mask_count = ski_mask.count(); + std::vector< std::array > skirocs(mask_count, std::array()); + uint32_t x; + const int offset = 1; // Due to FF or other things in data head + for(int i = 0; i < 1924; i++){ + for (int j = 0; j < 16; j++){ + x = raw[offset + i*16 + j]; + int k = 0; + for (int fifo = 0; fifo < 32; fifo++){ + if (m_skiMask & (1<> fifo ) & 1) << (15 - j)); + k++; + } + } + } + } + return skirocs; +} + +void HGCalTBRawDataSource::produce(edm::Event & e) +{ + std::auto_ptr skirocs(new HGCalTBSkiroc2CMSCollection); + + for( size_t iski=0; iski detids; + for (size_t ichan = 0; ichan < m_nChannelsPerSkiroc; ichan++) { + HGCalTBElectronicsId eid(iski, ichan); + if (!essource_.emap_.existsEId(eid.rawId())) { + std::cout << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; + //exit(1); + } + else{ + HGCalTBDetId did = essource_.emap_.eid2detId(eid); + detids[ichan]=did; + } + } + HGCalTBSkiroc2CMS skiroc( m_decodedData.at(iski),detids); + if(!skiroc.check()) + exit(1); + std::cout << skiroc << std::endl; + getchar(); + skirocs->push_back(skiroc); + } + e.put(skirocs, m_outputCollectionName); + + m_event++; + +} + +void HGCalTBRawDataSource::endJob() +{ + delete m_buffer; +} diff --git a/RawToDigi/plugins/HGCalTBRawDataSource.h b/RawToDigi/plugins/HGCalTBRawDataSource.h new file mode 100644 index 0000000..fcc9819 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBRawDataSource.h @@ -0,0 +1,64 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Sources/interface/ProducerSourceFromFiles.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include +#include +#include +#include +#include +#include "stdlib.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +/** + * \class HGCalTBRawDataSource HGCal/RawToDigi/plugins/HGCalTBRawDataSource.h + * + * \brief convert data from raw file to FEDRawData + * + */ + + +class HGCalTBRawDataSource : public edm::ProducerSourceFromFiles +{ + + public: + explicit HGCalTBRawDataSource(const edm::ParameterSet & pset, edm::InputSourceDescription const& desc); + + virtual ~HGCalTBRawDataSource(){;} + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + private: + bool setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType&); + virtual void produce(edm::Event & e); + virtual void endJob() override; + + bool readRaw(void); + std::vector< std::array > decode_raw_32bit(std::vector &raw); + + private: + std::string m_filePath; + std::string m_fileName; + std::string m_electronicMap; + std::string m_outputCollectionName; + //std::vector::iterator fileIterator; + unsigned int m_nOrmBoards; + unsigned int m_nHexaboards; + unsigned int m_nSkirocsPerHexa; + unsigned int m_nChannelsPerSkiroc; + unsigned int m_nWords; + + unsigned int m_time; + unsigned int m_event, m_run, m_spill; + int m_eventSize,m_nevents; + int m_fileId; + + uint32_t m_skiMask; + char* m_buffer; + std::ifstream m_input; + std::vector< std::array > m_decodedData; + + struct { + HGCalElectronicsMap emap_; + } essource_; +}; From b7db57cc4c1759e023a390424d90b460596476ea Mon Sep 17 00:00:00 2001 From: asteencern Date: Thu, 11 May 2017 15:31:56 +0200 Subject: [PATCH 247/297] debug HGCalTBRawDataSource.cc, HGCalTBSkiroc2CMS.h and HGCalTBSkiroc2CMS.cc + add the script to run --- DataFormats/interface/HGCalTBSkiroc2CMS.h | 27 +++++----- DataFormats/src/HGCalTBSkiroc2CMS.cc | 6 +-- RawToDigi/plugins/HGCalTBRawDataSource.cc | 49 +++++++++++++----- run2017_cfg.py | 60 +++++++++++++++++++++++ 4 files changed, 113 insertions(+), 29 deletions(-) create mode 100644 run2017_cfg.py diff --git a/DataFormats/interface/HGCalTBSkiroc2CMS.h b/DataFormats/interface/HGCalTBSkiroc2CMS.h index 9a583be..43729bc 100644 --- a/DataFormats/interface/HGCalTBSkiroc2CMS.h +++ b/DataFormats/interface/HGCalTBSkiroc2CMS.h @@ -1,8 +1,7 @@ #ifndef HGCALTBSKIROC2CMS_H_INCLUDED #define HGCALTBSKIROC2CMS_H_INCLUDED 1 -#include -#include +#include #include "HGCal/DataFormats/interface/HGCalTBDetId.h" static const int MASK_ADC = 0x0FFF; @@ -23,20 +22,20 @@ class HGCalTBSkiroc2CMS { public: - HGCalTBSkiroc2CMS( const std::array& data, const std::array &ids ) : + HGCalTBSkiroc2CMS( const std::vector data, const std::vector &ids ) : m_data(data), m_id(ids) {;} uint16_t gray_to_brady(const uint16_t gray) const; - uint16_t ADCLow( int chan, int sca ) const { return (sca>0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000 ; } - uint16_t ADCHigh( int chan, int sca ) const {return (sca>0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} - uint16_t TOTSlow( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*15) & MASK_ADC );} - uint16_t TOTFast( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*15) & MASK_ADC );} - uint16_t TOAFall( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - uint16_t TOARise( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - bool TOAHitFall(int chan) const { return ((m_data.at(chan+ADCLOW_SHIFT)&~MASK_ADC)>>4*3) ;} - bool TOAHitRise(int chan) const { return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3) ;} + uint16_t ADCLow( int chan, int sca ) const { return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} + uint16_t ADCHigh( int chan, int sca ) const {return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} + uint16_t TOTSlow( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + uint16_t TOTFast( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + uint16_t TOAFall( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*13) & MASK_ADC );} + uint16_t TOARise( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*13) & MASK_ADC );} + bool TOAHitFall(int chan) const { return ((m_data.at(chan+ADCLOW_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} + bool TOAHitRise(int chan) const { return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} uint16_t rollMask() const { return (m_data.at(SKIROC_DATA_SIZE-4)&MASK_ROLL); } private: @@ -54,10 +53,10 @@ class HGCalTBSkiroc2CMS } private: - std::array m_data; - std::array m_id; + std::vector m_data; + std::vector m_id; }; std::ostream& operator<<(std::ostream&, const HGCalTBSkiroc2CMS&); -#endif // SKIROC2DATAFRAME_H_INCLUDED +#endif diff --git a/DataFormats/src/HGCalTBSkiroc2CMS.cc b/DataFormats/src/HGCalTBSkiroc2CMS.cc index aac59c9..8042542 100644 --- a/DataFormats/src/HGCalTBSkiroc2CMS.cc +++ b/DataFormats/src/HGCalTBSkiroc2CMS.cc @@ -51,18 +51,18 @@ bool HGCalTBSkiroc2CMS::check() std::ostream& operator<<(std::ostream& s, const HGCalTBSkiroc2CMS& ski) { for (size_t i = 0; i < NUMBER_OF_CHANNELS; i++){ - s << "Channel det id : " << ski.detid(i) << "\t High gain ADC => " << ski.TOAHitRise(i) ; + s << "\n Channel det id : " << ski.detid(i) << "\n High gain ADC => " << ski.TOAHitRise(i) ; for( size_t j=0; j " << ski.TOAHitFall(i) ; + s << "\n Low gain ADC => " << ski.TOAHitFall(i) ; for( size_t j=0; j("FilePath", "./data/")), - m_fileName(pset.getUntrackedParameter("FileName", "HexaData_Run0000.raw")), + //m_filePath(pset.getUntrackedParameter("FilePath", "./data/")), + //m_fileName(pset.getUntrackedParameter("FileName", "HexaData_Run0000.raw")), m_electronicMap(pset.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt")), m_outputCollectionName(pset.getUntrackedParameter("OutputCollectionName","SKIROC2CMSDATA")), m_nOrmBoards(pset.getUntrackedParameter("NOrmBoards", 1)), @@ -17,9 +17,9 @@ HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm:: m_nWords(pset.getUntrackedParameter ("NumberOf32BitsWordsPerReadOut",30788)) { std::cout << "Hey je commence" << std::endl; - sleep(10); + sleep(1); - produces(); + produces(m_outputCollectionName); //produces("RunData"); m_event = 0; @@ -49,7 +49,10 @@ HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm:: bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) { - + std::cout << "here i am" << std::endl; + if (fileNames()[0] != "file:DUMMY") + m_fileName = fileNames()[0]; + if (m_fileName.find("file:") == 0) m_fileName = m_fileName.substr(5); if( m_event==0 ){ m_input.open(m_fileName.c_str(), std::ios::in|std::ios::binary); if( !m_input.is_open() ){ @@ -76,7 +79,7 @@ bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t std::vector< std::array > HGCalTBRawDataSource::decode_raw_32bit(std::vector &raw){ std::cout<<"In decoder"< skirocs(new HGCalTBSkiroc2CMSCollection); for( size_t iski=0; iski detids; + std::vector detids; for (size_t ichan = 0; ichan < m_nChannelsPerSkiroc; ichan++) { HGCalTBElectronicsId eid(iski, ichan); if (!essource_.emap_.existsEId(eid.rawId())) { - std::cout << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; + std::cout << std::dec << "skiroc " << iski << "; channel " << ichan << "; electronic id " << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; //exit(1); + HGCalTBDetId did(0); + detids.push_back(did); } else{ HGCalTBDetId did = essource_.emap_.eid2detId(eid); - detids[ichan]=did; + detids.push_back(did); } } - HGCalTBSkiroc2CMS skiroc( m_decodedData.at(iski),detids); + std::vector vdata;vdata.insert(vdata.end(),m_decodedData.at(iski).begin(),m_decodedData.at(iski).end()); + HGCalTBSkiroc2CMS skiroc( vdata,detids); if(!skiroc.check()) exit(1); - std::cout << skiroc << std::endl; - getchar(); + //std::cout << skiroc << std::endl; + //std::cout <<"finish print info" << std::endl; skirocs->push_back(skiroc); } e.put(skirocs, m_outputCollectionName); @@ -138,7 +144,26 @@ void HGCalTBRawDataSource::produce(edm::Event & e) } +void HGCalTBRawDataSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + edm::ParameterSetDescription desc; + desc.setComment("TEST"); + desc.addUntracked("run", 101); + desc.addUntracked >("fileNames"); + desc.addUntracked("ElectronicMap"); + desc.addUntracked("OutputCollectionName"); + desc.addUntracked("NOrmBoards"); + desc.addUntracked("NHexaBoards"); + desc.addUntracked("NSkirocsPerHexa"); + desc.addUntracked("NChannelsPerSkiroc"); + desc.addUntracked("NumberOf32BitsWordsPerReadOut"); + descriptions.add("source", desc); +} + void HGCalTBRawDataSource::endJob() { delete m_buffer; } + +#include "FWCore/Framework/interface/InputSourceMacros.h" +DEFINE_FWK_INPUT_SOURCE(HGCalTBRawDataSource); diff --git a/run2017_cfg.py b/run2017_cfg.py new file mode 100644 index 0000000..320ac46 --- /dev/null +++ b/run2017_cfg.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +import os,sys + +options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' +#Change the data folder appropriately to where you wish to access the files from: +options.register('dataFolder', + '/afs/cern.ch/work/a/asteen/public/data/may2017/raw', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'folder containing raw input') + +options.register('runNumber', + 850, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + 'Input file to process') + +options.register('outputFolder', + '/tmp/asteen', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + 'Result of processing') + +options.maxEvents = -1 +options.output = "toto.root" + +options.parseArguments() +print options +if not os.path.isdir(options.dataFolder): + sys.exit("Error: Data folder not found or inaccessible!") + +################################ +process = cms.Process("unpack") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents) +) + +#################################### +process.source = cms.Source("HGCalTBRawDataSource", + #FilePath=cms.untracked.string(options.dataFolder), + #FileName=cms.untracked.string("file:HexaData_Run00%d.raw"%(options.runNumber)), + ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt"), + fileNames=cms.untracked.vstring("file:%s/HexaData_Run00%d.raw"%(options.dataFolder,options.runNumber)), + OutputCollectionName=cms.untracked.string("skiroc2cmsdata"), + NOrmBoards=cms.untracked.uint32(1), + NHexaBoards=cms.untracked.uint32(1), + NSkirocsPerHexa=cms.untracked.uint32(4), + NChannelsPerSkiroc=cms.untracked.uint32(64), + NumberOf32BitsWordsPerReadOut=cms.untracked.uint32(30788) +) + +process.output = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string(options.output) + ) + +process.end = cms.EndPath(process.output) + +#help(process) From eb0478dec04faa16581ecaf5fb969c56f7c3dc0c Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 12 May 2017 14:16:26 +0200 Subject: [PATCH 248/297] add roll positions finder + small debug in HGCalTBSkiroc2CMS --- DataFormats/interface/HGCalTBSkiroc2CMS.h | 23 +++++++------- DataFormats/src/HGCalTBSkiroc2CMS.cc | 38 ++++++++++++++++++++--- RawToDigi/plugins/HGCalTBRawDataSource.cc | 2 +- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/DataFormats/interface/HGCalTBSkiroc2CMS.h b/DataFormats/interface/HGCalTBSkiroc2CMS.h index 43729bc..14d2c52 100644 --- a/DataFormats/interface/HGCalTBSkiroc2CMS.h +++ b/DataFormats/interface/HGCalTBSkiroc2CMS.h @@ -28,24 +28,25 @@ class HGCalTBSkiroc2CMS {;} uint16_t gray_to_brady(const uint16_t gray) const; - uint16_t ADCLow( int chan, int sca ) const { return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} - uint16_t ADCHigh( int chan, int sca ) const {return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} - uint16_t TOTSlow( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - uint16_t TOTFast( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - uint16_t TOAFall( int chan ) const {return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*13) & MASK_ADC );} - uint16_t TOARise( int chan ) const {return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*13) & MASK_ADC );} - bool TOAHitFall(int chan) const { return ((m_data.at(chan+ADCLOW_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} - bool TOAHitRise(int chan) const { return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} + uint16_t ADCLow( int chan, int sca ) const {chan=NUMBER_OF_CHANNELS-1-chan; sca=NUMBER_OF_SCA-2-sca; return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} + uint16_t ADCHigh( int chan, int sca ) const {chan=NUMBER_OF_CHANNELS-1-chan; sca=NUMBER_OF_SCA-2-sca; return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} + uint16_t TOTSlow( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + uint16_t TOTFast( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} + uint16_t TOAFall( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*13) & MASK_ADC );} + uint16_t TOARise( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*13) & MASK_ADC );} + bool TOAHitFall(int chan) const {chan=NUMBER_OF_CHANNELS-1-chan; return ((m_data.at(chan+ADCLOW_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} + bool TOAHitRise(int chan) const {chan=NUMBER_OF_CHANNELS-1-chan; return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} uint16_t rollMask() const { return (m_data.at(SKIROC_DATA_SIZE-4)&MASK_ROLL); } - + std::vector rollPositions() const ; + private: uint32_t globalTS_MSB() const { return (m_data.at(SKIROC_DATA_SIZE-3) & MASK_GTS_MSB ); } uint32_t globalTS_LSB() const { return ( (m_data.at(SKIROC_DATA_SIZE-2) & MASK_GTS_LSB)>>1 ); } + public: uint32_t globalTS()const{ return gray_to_brady( globalTS_MSB() | globalTS_LSB()); } int skirocId()const{ return (m_data.at(SKIROC_DATA_SIZE-1) & MASK_ID); } bool check(); - HGCalTBDetId detid( int chan ) const { @@ -57,6 +58,6 @@ class HGCalTBSkiroc2CMS std::vector m_id; }; -std::ostream& operator<<(std::ostream&, const HGCalTBSkiroc2CMS&); +std::ostream& operator<<(std::ostream&, HGCalTBSkiroc2CMS&); #endif diff --git a/DataFormats/src/HGCalTBSkiroc2CMS.cc b/DataFormats/src/HGCalTBSkiroc2CMS.cc index 8042542..0106bfc 100644 --- a/DataFormats/src/HGCalTBSkiroc2CMS.cc +++ b/DataFormats/src/HGCalTBSkiroc2CMS.cc @@ -1,5 +1,6 @@ #include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" - +#include +#include uint16_t HGCalTBSkiroc2CMS::gray_to_brady(const uint16_t gray) const { uint16_t result = gray & (1 << 11); @@ -48,8 +49,38 @@ bool HGCalTBSkiroc2CMS::check() return true; } -std::ostream& operator<<(std::ostream& s, const HGCalTBSkiroc2CMS& ski) +std::vector HGCalTBSkiroc2CMS::rollPositions() const { + std::bitset bits=rollMask(); + std::vector rollpositions(NUMBER_OF_SCA-2); + if(bits.test(0)&&bits.test(12)){ + rollpositions[0]=12; + for(size_t i=1; i rollpositions=ski.rollPositions(); + std::cout << "rollMask = " << ski.rollMask() << "\t"; + for(size_t i=0; i<13; i++) + std::cout << rollpositions[i] << " "; + std::cout << "\n"; for (size_t i = 0; i < NUMBER_OF_CHANNELS; i++){ s << "\n Channel det id : " << ski.detid(i) << "\n High gain ADC => " << ski.TOAHitRise(i) ; for( size_t j=0; jpush_back(skiroc); } From 805cc7b5fd9feb6a2f9363ea34b8731a8a51107f Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 16 May 2017 15:07:02 +0200 Subject: [PATCH 249/297] debug HGCalTBSkiroc2CMS (.cc and .h), rm print out, add RawDataPlotter (still in development) and modify run2017_cfg.py accordingly --- DataFormats/interface/HGCalTBSkiroc2CMS.h | 24 ++++++++-------- DataFormats/src/HGCalTBSkiroc2CMS.cc | 18 ++++++------ RawToDigi/plugins/HGCalTBRawDataSource.cc | 35 ++++------------------- run2017_cfg.py | 17 +++++++++-- 4 files changed, 41 insertions(+), 53 deletions(-) diff --git a/DataFormats/interface/HGCalTBSkiroc2CMS.h b/DataFormats/interface/HGCalTBSkiroc2CMS.h index 14d2c52..c117cff 100644 --- a/DataFormats/interface/HGCalTBSkiroc2CMS.h +++ b/DataFormats/interface/HGCalTBSkiroc2CMS.h @@ -11,12 +11,12 @@ static const int MASK_GTS_LSB = 0x1FFF; static const int MASK_ID = 0xFF; static const int MASK_HEAD = 0xF000; -static const size_t NUMBER_OF_SCA = 15; -static const size_t NUMBER_OF_CHANNELS = 64; -static const size_t ADCLOW_SHIFT = 0; -static const size_t ADCHIGH_SHIFT = 64; -static const size_t SCA_SHIFT = 128; -static const size_t SKIROC_DATA_SIZE = 1924; //number of 16 bits words +static const int NUMBER_OF_SCA = 13; +static const int NUMBER_OF_CHANNELS = 64; +static const int ADCLOW_SHIFT = 0; +static const int ADCHIGH_SHIFT = 64; +static const int SCA_SHIFT = 128; +static const int SKIROC_DATA_SIZE = 1924; //number of 16 bits words class HGCalTBSkiroc2CMS { @@ -28,12 +28,12 @@ class HGCalTBSkiroc2CMS {;} uint16_t gray_to_brady(const uint16_t gray) const; - uint16_t ADCLow( int chan, int sca ) const {chan=NUMBER_OF_CHANNELS-1-chan; sca=NUMBER_OF_SCA-2-sca; return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(ADCLOW_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} - uint16_t ADCHigh( int chan, int sca ) const {chan=NUMBER_OF_CHANNELS-1-chan; sca=NUMBER_OF_SCA-2-sca; return (sca>=0 && sca<14) ? gray_to_brady( m_data.at(ADCHIGH_SHIFT+SCA_SHIFT*sca) & MASK_ADC ) : 10000;} - uint16_t TOTSlow( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - uint16_t TOTFast( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*14) & MASK_ADC );} - uint16_t TOAFall( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCLOW_SHIFT+SCA_SHIFT*13) & MASK_ADC );} - uint16_t TOARise( int chan ) const {chan=NUMBER_OF_CHANNELS-1-chan; return gray_to_brady( m_data.at(chan+ADCHIGH_SHIFT+SCA_SHIFT*13) & MASK_ADC );} + uint16_t ADCLow( int chan, int sca ) const {chan=NUMBER_OF_CHANNELS-1-chan; sca=NUMBER_OF_SCA-1-sca; return (sca>=0 && sca=0 && sca>4*3)&0x1 ;} bool TOAHitRise(int chan) const {chan=NUMBER_OF_CHANNELS-1-chan; return ((m_data.at(chan+ADCHIGH_SHIFT)&~MASK_ADC)>>4*3)&0x1 ;} uint16_t rollMask() const { return (m_data.at(SKIROC_DATA_SIZE-4)&MASK_ROLL); } diff --git a/DataFormats/src/HGCalTBSkiroc2CMS.cc b/DataFormats/src/HGCalTBSkiroc2CMS.cc index 0106bfc..af572c1 100644 --- a/DataFormats/src/HGCalTBSkiroc2CMS.cc +++ b/DataFormats/src/HGCalTBSkiroc2CMS.cc @@ -28,7 +28,7 @@ bool HGCalTBSkiroc2CMS::check() std::cout << "ISSUE : we expected 8(1000) or 9(1001) for the adc header and I find " << head << std::endl; return false; } - for( size_t k=0; k>4*3)!=head ){ std::cout << "\n We have a major issue (LG)-> " << head << " should be the same as " << ((m_data.at(j+SCA_SHIFT*k)&MASK_HEAD)>>4*3) << std::endl; return false; @@ -39,7 +39,7 @@ bool HGCalTBSkiroc2CMS::check() std::cout << "ISSUE : we expected 8(1000) or 9(1001) for the adc header and I find " << head << std::endl; return false; } - for( size_t k=0; k>4*3)!=head ){ std::cout << "\n We have a major issue (HG)-> " << head << " should be the same as " << ((m_data.at(j+SCA_SHIFT*k+NUMBER_OF_CHANNELS)&MASK_HEAD)>>4*3) << std::endl; return false; @@ -51,21 +51,21 @@ bool HGCalTBSkiroc2CMS::check() std::vector HGCalTBSkiroc2CMS::rollPositions() const { - std::bitset bits=rollMask(); - std::vector rollpositions(NUMBER_OF_SCA-2); + std::bitset bits=rollMask(); + std::vector rollpositions(NUMBER_OF_SCA); if(bits.test(0)&&bits.test(12)){ rollpositions[0]=12; - for(size_t i=1; i " << ski.TOAHitRise(i) ; - for( size_t j=0; j " << ski.TOAHitFall(i) ; - for( size_t j=0; j("FilePath", "./data/")), - //m_fileName(pset.getUntrackedParameter("FileName", "HexaData_Run0000.raw")), m_electronicMap(pset.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt")), m_outputCollectionName(pset.getUntrackedParameter("OutputCollectionName","SKIROC2CMSDATA")), m_nOrmBoards(pset.getUntrackedParameter("NOrmBoards", 1)), @@ -16,11 +14,7 @@ HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm:: m_nChannelsPerSkiroc(pset.getUntrackedParameter("NChannelsPerSkiroc", 64)), m_nWords(pset.getUntrackedParameter ("NumberOf32BitsWordsPerReadOut",30788)) { - std::cout << "Hey je commence" << std::endl; - sleep(1); - produces(m_outputCollectionName); - //produces("RunData"); m_event = 0; m_fileId=0; @@ -49,7 +43,6 @@ HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm:: bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) { - std::cout << "here i am" << std::endl; if (fileNames()[0] != "file:DUMMY") m_fileName = fileNames()[0]; if (m_fileName.find("file:") == 0) m_fileName = m_fileName.substr(5); @@ -61,7 +54,6 @@ bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t } } if( !m_input.good() ) return false; - std::cout << "start reading event " << m_event << std::endl; m_input.read ( m_buffer, m_nWords*4 ); m_input.seekg( (m_event+1)*m_nWords*4, std::ios::beg ); std::vector rawData; @@ -77,20 +69,6 @@ bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t } std::vector< std::array > HGCalTBRawDataSource::decode_raw_32bit(std::vector &raw){ - std::cout<<"In decoder"< ski_mask(m_skiMask); const int mask_count = ski_mask.count(); std::vector< std::array > skirocs(mask_count, std::array()); @@ -120,7 +98,7 @@ void HGCalTBRawDataSource::produce(edm::Event & e) for (size_t ichan = 0; ichan < m_nChannelsPerSkiroc; ichan++) { HGCalTBElectronicsId eid(iski, ichan); if (!essource_.emap_.existsEId(eid.rawId())) { - std::cout << std::dec << "skiroc " << iski << "; channel " << ichan << "; electronic id " << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; + //std::cout << std::dec << "skiroc " << iski << "; channel " << ichan << "; electronic id " << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; //exit(1); HGCalTBDetId did(0); detids.push_back(did); @@ -131,17 +109,14 @@ void HGCalTBRawDataSource::produce(edm::Event & e) } } std::vector vdata;vdata.insert(vdata.end(),m_decodedData.at(iski).begin(),m_decodedData.at(iski).end()); - HGCalTBSkiroc2CMS skiroc( vdata,detids); + HGCalTBSkiroc2CMS skiroc( vdata,detids ); if(!skiroc.check()) exit(1); - std::cout << skiroc << std::endl; - //std::cout <<"finish print info" << std::endl; + //std::cout << skiroc << std::endl; skirocs->push_back(skiroc); } e.put(skirocs, m_outputCollectionName); - - m_event++; - + m_event++; } void HGCalTBRawDataSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) @@ -162,7 +137,7 @@ void HGCalTBRawDataSource::fillDescriptions(edm::ConfigurationDescriptions& desc void HGCalTBRawDataSource::endJob() { - delete m_buffer; + //delete m_buffer; } #include "FWCore/Framework/interface/InputSourceMacros.h" diff --git a/run2017_cfg.py b/run2017_cfg.py index 320ac46..38c871d 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -6,7 +6,8 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' #Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', - '/afs/cern.ch/work/a/asteen/public/data/may2017/raw', + #'/afs/cern.ch/work/a/asteen/public/data/may2017/raw', + '/afs/cern.ch/work/b/barneyd/public/data_May_2017/disk2_2TB/eudaq_data', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'folder containing raw input') @@ -38,11 +39,13 @@ ) #################################### +#process.load('HGCal.StandardSequences.RawToDigi_cff') + process.source = cms.Source("HGCalTBRawDataSource", #FilePath=cms.untracked.string(options.dataFolder), #FileName=cms.untracked.string("file:HexaData_Run00%d.raw"%(options.runNumber)), ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt"), - fileNames=cms.untracked.vstring("file:%s/HexaData_Run00%d.raw"%(options.dataFolder,options.runNumber)), + fileNames=cms.untracked.vstring("file:%s/HexaData_Run%04d.raw"%(options.dataFolder,options.runNumber)), OutputCollectionName=cms.untracked.string("skiroc2cmsdata"), NOrmBoards=cms.untracked.uint32(1), NHexaBoards=cms.untracked.uint32(1), @@ -51,10 +54,20 @@ NumberOf32BitsWordsPerReadOut=cms.untracked.uint32(30788) ) +process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/toto_%d.root"%(options.outputFolder,options.runNumber))) + process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string(options.output) ) + +process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", + SensorSize=cms.untracked.int32(128), + InputCollection=cms.InputTag("source","skiroc2cmsdata") + ) +process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event +process.p = cms.Path( process.rawdataplotter ) + process.end = cms.EndPath(process.output) #help(process) From 40179d37719c57dcada62e0ca8e212dec0b106fd Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 16 May 2017 15:10:00 +0200 Subject: [PATCH 250/297] add RawDataPlotter.cc (forgot in prev commit) --- RawToDigi/plugins/RawDataPlotter.cc | 154 ++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 RawToDigi/plugins/RawDataPlotter.cc diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc new file mode 100644 index 0000000..a4cf819 --- /dev/null +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -0,0 +1,154 @@ +#include +#include "TH1F.h" +#include "TH2F.h" +#include "TTree.h" +#include "TProfile.h" +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" + +const static size_t N_HEXABOARDS = 1; +const static size_t N_TIME_SAMPLES = 13; +const static size_t N_SKIROC_PER_HEXA = 4; +const static size_t N_CHANNELS_PER_SKIROC = 64; + +class RawDataPlotter : public edm::one::EDAnalyzer +{ +public: + explicit RawDataPlotter(const edm::ParameterSet&); + ~RawDataPlotter(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); +private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + std::string m_electronicMap; + + struct { + HGCalElectronicsMap emap_; + } essource_; + int m_sensorsize; + + TTree* m_tree; + int m_evtID; + std::map m_adcHigh; + std::map m_adcLow; + std::map m_h_pulseHigh; + std::map m_h_pulseLow; + + edm::EDGetTokenT m_HGCalTBSkiroc2CMSCollection; +}; + +RawDataPlotter::RawDataPlotter(const edm::ParameterSet& iConfig) : + m_sensorsize(iConfig.getUntrackedParameter("SensorSize")) +{ + usesResource("TFileService"); + edm::Service fs; + + m_tree = fs->make("tree", "HGCAL TB variables tree"); + + m_HGCalTBSkiroc2CMSCollection = consumes(iConfig.getParameter("InputCollection")); + + m_evtID=0; + + m_tree->Branch( "evtID" , &m_evtID); + std::ostringstream os( std::ostringstream::ate ); + TH2F* htmp; + for(size_t ib = 0; ib(ib*100000+iski*10000+ichan*100+it, 0.) ); + os.str(""); + os << "HighGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; + m_tree->Branch( os.str().c_str(),&m_adcHigh[ib*100000+iski*10000+ichan*100+it]); + m_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, 0.) ); + os.str(""); + os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; + m_tree->Branch( os.str().c_str(),&m_adcLow[ib*100000+iski*10000+ichan*100+it]); + } + if( ichan%2==0 ){ + os.str(""); + os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; + htmp=fs->make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp) ); + os.str(""); + os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; + htmp=fs->make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp) ); + } + } + } + } + std::cout << iConfig.dump() << std::endl; +} + + +RawDataPlotter::~RawDataPlotter() +{ + +} + +void RawDataPlotter::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + edm::Handle skirocs; + event.getByToken(m_HGCalTBSkiroc2CMSCollection, skirocs); + + for( size_t iski=0;iskisize(); iski++ ){ + HGCalTBSkiroc2CMS skiroc=skirocs->at(iski); + std::vector rollpositions=skiroc.rollPositions(); + int iboard=iski/N_SKIROC_PER_HEXA; + for( size_t ichan=0; ichanFill( rollpositions[it]*25,skiroc.ADCHigh(ichan,it) ); + m_h_pulseLow[iboard*1000+iski*100+ichan]->Fill( rollpositions[it]*25,skiroc.ADCLow(ichan,it) ); + } + } + } + } + } + m_tree->Fill(); +} + +void RawDataPlotter::beginJob() +{ +} + +void RawDataPlotter::endJob() +{ +} + +void RawDataPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(RawDataPlotter); From d61d840805c2801592da27b903a358ca96ce4073 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Wed, 17 May 2017 15:18:13 +0200 Subject: [PATCH 251/297] Correct map for one layer CERN May TB, /CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt , as per ~rchatter/public/EMAP_Ski2CMS_Hexaboard.pdf [Flipped] --- .../test/MapGenerator/Mapping_Hexaboard.cpp | 112 +++++----- .../map_CERN_Hexaboard_OneLayers_May2017.txt | 128 +++++++++++ RawToDigi/plugins/DigiPlotter.cc | 198 +----------------- 3 files changed, 193 insertions(+), 245 deletions(-) create mode 100644 CondObjects/test/MapGenerator/map_CERN_Hexaboard_OneLayers_May2017.txt diff --git a/CondObjects/test/MapGenerator/Mapping_Hexaboard.cpp b/CondObjects/test/MapGenerator/Mapping_Hexaboard.cpp index f58420e..f5838e3 100644 --- a/CondObjects/test/MapGenerator/Mapping_Hexaboard.cpp +++ b/CondObjects/test/MapGenerator/Mapping_Hexaboard.cpp @@ -16,20 +16,20 @@ int Map_Calib_Pad_SK1[number_of_calib_pads] = {22}; int Map_Calib_Pad_SK2[number_of_calib_pads] = {22}; */ ///////////////Hardcoded Map entries for mouse bites///////////////////// -const int number_of_mouse_bites_SK1 = 2; -const int number_of_mouse_bites_SK2 = 1; -const int number_of_mouse_bites_SK3 = 2; -const int number_of_mouse_bites_SK4 = 1; -int Map_Mouse_Bites_SK1[number_of_mouse_bites_SK1] = {20, 60}; -int Map_Mouse_Bites_SK2[number_of_mouse_bites_SK2] = {12}; -int Map_Mouse_Bites_SK3[number_of_mouse_bites_SK3] = {34, 16}; -int Map_Mouse_Bites_SK4[number_of_mouse_bites_SK4] = {46}; +const int number_of_mouse_bites_SK1 = 1; +const int number_of_mouse_bites_SK2 = 2; +const int number_of_mouse_bites_SK3 = 1; +const int number_of_mouse_bites_SK4 = 2; +int Map_Mouse_Bites_SK1[number_of_mouse_bites_SK1] = {46}; +int Map_Mouse_Bites_SK2[number_of_mouse_bites_SK2] = {20, 60}; +int Map_Mouse_Bites_SK3[number_of_mouse_bites_SK3] = {12}; +int Map_Mouse_Bites_SK4[number_of_mouse_bites_SK4] = {34, 16}; /////////////////Hardcoded Map entries for half hex//////////////////// const int number_of_half_hex = 3; -int Map_Half_Hex_SK1[number_of_half_hex] = {12, 10, 48}; -int Map_Half_Hex_SK2[number_of_half_hex] = {16, 62, 52}; -int Map_Half_Hex_SK3[number_of_half_hex] = {26, 22, 60}; -int Map_Half_Hex_SK4[number_of_half_hex] = {10, 56, 50}; +int Map_Half_Hex_SK1[number_of_half_hex] = {10, 56, 50}; +int Map_Half_Hex_SK2[number_of_half_hex] = {12, 10, 48}; +int Map_Half_Hex_SK3[number_of_half_hex] = {16, 62, 52}; +int Map_Half_Hex_SK4[number_of_half_hex] = {26, 22, 60}; //////////////////Hardcoded entry for merged cell////////////////////// /* const int number_of_merged_cells = 2; @@ -39,8 +39,8 @@ int Map_Merged_Cells_SKI2[number_of_merged_cells] = {0,60}; */ /////////////////Hardcoded entries Outer Calib Pad//////////////////////////// const int number_of_outer_calib_pads = 1; -int Map_Merged_Outer_Calib_Pad_SK2[number_of_outer_calib_pads] = {40}; -int Map_Merged_Outer_Calib_Pad_SK4[number_of_outer_calib_pads] = {30}; +int Map_Merged_Outer_Calib_Pad_SK1[number_of_outer_calib_pads] = {2}; +int Map_Merged_Outer_Calib_Pad_SK3[number_of_outer_calib_pads] = {26}; /////////////////////////////////////////////////////////// @@ -61,10 +61,10 @@ main(){ */ const int size = 69; - ifstream Channel_SKIROC1("Channel_Numbers_SKIROC1_Hexaboard.txt");// Mapping of the first SKIROC(upper half in the u,v system) - ifstream Channel_SKIROC2("Channel_Numbers_SKIROC2_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) - ifstream Channel_SKIROC3("Channel_Numbers_SKIROC3_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) - ifstream Channel_SKIROC4("Channel_Numbers_SKIROC4_Hexaboard.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC1("Channel_Numbers_SKIROC1_Hexaboard_Updated.txt");// Mapping of the first SKIROC(upper half in the u,v system) + ifstream Channel_SKIROC2("Channel_Numbers_SKIROC2_Hexaboard_Updated.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC3("Channel_Numbers_SKIROC3_Hexaboard_Updated.txt");// Mapping of the first SKIROC(lower half in the u,v system) + ifstream Channel_SKIROC4("Channel_Numbers_SKIROC4_Hexaboard_Updated.txt");// Mapping of the first SKIROC(lower half in the u,v system) // fs.open("/afs/cern.ch/work/r/rchatter/May_Test_Beam_Test/CMSSW_8_0_1/src/HGCal/CondObjects/data/map_FNAL_SB1.txt"); fs.open("map_CERN_Hexaboard_28Layers.txt"); @@ -103,18 +103,18 @@ main(){ //Print the heading fs<<"# "<<"SKIROC"<<" "<<"CHANNEL"<<" | "<<"LAYER"<<" "<<"SENSOR_IX"<<" "<<"SENSOR_IV"<<" "<<"IX"<<" "<<"IV"<<" "<<"TYPE"< 4) continue; - if(vvv == -6 && uuu > 2) continue; - if(vvv == -5 && uuu > 2) continue; - if(vvv == -4 && uuu > 1) continue; - if(vvv == -3 && uuu > 1) continue; - if(vvv == -2 && uuu > 0) continue; - if(vvv == -1 && uuu > 0) continue; - if( vvv == 0 && ( (uuu >= 0) || (uuu == -2) ) ) continue; + if(vvv == -7 && uuu != 4) continue; + if(vvv == -6 && uuu > 5) continue; + if(vvv == -5 && uuu > 4) continue; + if(vvv == -4 && (uuu == -3 || uuu > 3)) continue; + if(vvv == -3 && (uuu == -4 || uuu > 3)) continue; + if(vvv == -2 && (uuu < -2 || uuu > 2)) continue; + if(vvv == -1 && (uuu < -1 || uuu > 0)) continue; + if(vvv >= 0) continue; Channel_SKIROC1>>Channel_1[iterator]; IU_1[iterator] = uuu; IV_1[iterator++] = vvv; @@ -126,17 +126,20 @@ main(){ iterator = 0; - for(int vvv = 0; vvv < 8; vvv++){ + for(int vvv = -7; vvv < 8; vvv++){ for(int uuu = -7; uuu < 8; uuu++){ if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; - if((vvv == 0) && ( (uuu != 0) && (uuu != -2) ) ) continue; + if(vvv < -3) continue; + if(vvv == -3 && uuu != -4 ) continue; + if(vvv == -2 && uuu > -3 ) continue; + if(vvv == -1 && uuu > -2 ) continue; + if(vvv == 0 && uuu > -1 ) continue; if(vvv == 1 && uuu > -1) continue; - if(vvv == 2 && uuu > -1) continue; - if(vvv == 3 && uuu > -2) continue; - if(vvv == 4 && uuu > -2) continue; - if(vvv == 5 && uuu > -3) continue; - if(vvv == 6 && uuu > -4) continue; - if(vvv == 7) continue; + if(vvv == 2 && uuu > -3) continue; + if(vvv == 3 && (uuu == -7 || uuu > -3)) continue; + if(vvv == 4 && uuu > -4) continue; + if(vvv == 5 && uuu > -5) continue; + if(vvv > 5) continue; Channel_SKIROC2>>Channel_2[iterator]; IU_2[iterator] = uuu; IV_2[iterator++] = vvv; @@ -147,17 +150,18 @@ main(){ iterator = 0; - for(int vvv = 0; vvv < 8; vvv++){ + for(int vvv = -7; vvv < 8; vvv++){ for(int uuu = -7; uuu < 8; uuu++){ if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; - if(vvv == 0 && ( (uuu != 1) && (uuu != 4) && (uuu != 5) ) ) continue; - if(vvv == 1 && uuu < 0) continue; - if(vvv == 2 && uuu < 0) continue; - if(vvv == 3 && uuu < -1) continue; - if(vvv == 4 && uuu < -1) continue; - if(vvv == 5 && uuu < -2) continue; - if(vvv == 6 && uuu < -3) continue; - if(vvv == 7 && uuu < -4) continue; + if(vvv < 0) continue; + if(vvv == 0 && uuu != 0 ) continue; + if(vvv == 1 && (uuu < 0 || uuu > 1)) continue; + if(vvv == 2 && (uuu < -2 || uuu > 2)) continue; + if(vvv == 3 && (uuu < -2 || uuu > 2)) continue; + if(vvv == 4 && (uuu < -3 || uuu > 2)) continue; + if(vvv == 5 && (uuu < -4 || uuu > 1)) continue; + if(vvv == 6 && uuu < -5) continue; + if(vvv == 7 && uuu != -3) continue; Channel_SKIROC3>>Channel_3[iterator]; IU_3[iterator] = uuu; IV_3[iterator++] = vvv; @@ -168,17 +172,21 @@ main(){ iterator = 0; - for(int vvv = -7; vvv <= 0; vvv++){ + for(int vvv = -7; vvv <= 8; vvv++){ for(int uuu = -7; uuu < 8; uuu++){ if(!ix_iv_valid(uuu, vvv, sensorsize)) continue; - if(vvv == -7) continue; - if(vvv == -6 && uuu < 3) continue; - if(vvv == -5 && uuu < 3) continue; - if(vvv == -4 && uuu < 2) continue; - if(vvv == -3 && uuu < 2) continue; - if(vvv == -2 && uuu < 1) continue; + if(vvv < -5) continue; + if(vvv == -5 && uuu < 5) continue; + if(vvv == -4 && uuu < 4) continue; + if(vvv == -3 && (uuu == 7 || uuu < 4)) continue; + if(vvv == -2 && uuu < 3) continue; if(vvv == -1 && uuu < 1) continue; - if(vvv == 0 && ( (uuu != 2) && (uuu != 3) )) continue; + if(vvv == 0 && uuu < 1) continue; + if(vvv == 1 && uuu < 2) continue; + if(vvv == 2 && uuu < 3) continue; + if(vvv == 3 && uuu != 3) continue; + if(vvv == 4 && uuu != 3) continue; + if(vvv > 4) continue; Channel_SKIROC4>>Channel_4[iterator]; IU_4[iterator] = uuu; IV_4[iterator++] = vvv; diff --git a/CondObjects/test/MapGenerator/map_CERN_Hexaboard_OneLayers_May2017.txt b/CondObjects/test/MapGenerator/map_CERN_Hexaboard_OneLayers_May2017.txt new file mode 100644 index 0000000..cdc6f64 --- /dev/null +++ b/CondObjects/test/MapGenerator/map_CERN_Hexaboard_OneLayers_May2017.txt @@ -0,0 +1,128 @@ +# SKIROC CHANNEL | LAYER SENSOR_IX SENSOR_IV IX IV TYPE + 1 0 1 0 0 -2 5 0 + 1 2 1 0 0 -2 4 4 + 1 4 1 0 0 -1 4 0 + 1 6 1 0 0 -2 6 0 + 1 8 1 0 0 0 3 0 + 1 10 1 0 0 -1 6 2 + 1 12 1 0 0 -1 5 0 + 1 14 1 0 0 0 2 0 + 1 16 1 0 0 -1 3 0 + 1 18 1 0 0 -1 2 0 + 1 20 1 0 0 -2 3 0 + 1 22 1 0 0 -2 2 0 + 1 24 1 0 0 -1 1 0 + 1 26 1 0 0 -2 1 0 + 1 28 1 0 0 -3 2 0 + 1 30 1 0 0 -4 2 0 + 1 32 1 0 0 -5 3 0 + 1 34 1 0 0 -4 3 0 + 1 36 1 0 0 -5 4 0 + 1 38 1 0 0 -4 4 0 + 1 40 1 0 0 -3 3 0 + 1 42 1 0 0 -3 4 0 + 1 44 1 0 0 -6 3 0 + 1 46 1 0 0 -3 7 3 + 1 48 1 0 0 -6 4 0 + 1 50 1 0 0 -6 5 2 + 1 52 1 0 0 -5 5 0 + 1 54 1 0 0 -4 5 0 + 1 56 1 0 0 -5 6 2 + 1 58 1 0 0 -3 6 0 + 1 60 1 0 0 -3 5 0 + 1 62 1 0 0 -4 6 0 + 2 0 1 0 0 -3 -2 0 + 2 2 1 0 0 -4 -2 0 + 2 4 1 0 0 -3 -3 0 + 2 6 1 0 0 -4 -1 0 + 2 8 1 0 0 -5 0 0 + 2 10 1 0 0 -5 -1 2 + 2 12 1 0 0 -6 1 2 + 2 14 1 0 0 -4 0 0 + 2 16 1 0 0 -3 -1 0 + 2 18 1 0 0 -3 0 0 + 2 20 1 0 0 -7 3 3 + 2 22 1 0 0 -6 2 0 + 2 24 1 0 0 -5 1 0 + 2 26 1 0 0 -4 1 0 + 2 28 1 0 0 -5 2 0 + 2 30 1 0 0 -3 1 0 + 2 32 1 0 0 -2 0 0 + 2 34 1 0 0 -1 0 0 + 2 36 1 0 0 0 -1 0 + 2 38 1 0 0 -1 -1 0 + 2 40 1 0 0 0 -4 0 + 2 42 1 0 0 0 -3 0 + 2 44 1 0 0 -1 -3 0 + 2 46 1 0 0 0 -5 0 + 2 48 1 0 0 -1 -5 2 + 2 50 1 0 0 -1 -4 0 + 2 52 1 0 0 -1 -2 0 + 2 54 1 0 0 -2 -1 0 + 2 56 1 0 0 -2 -2 0 + 2 58 1 0 0 -2 -3 0 + 2 60 1 0 0 -3 -4 3 + 2 62 1 0 0 -2 -4 0 + 3 0 1 0 0 3 -4 0 + 3 2 1 0 0 2 -4 0 + 3 4 1 0 0 3 -5 0 + 3 6 1 0 0 4 -6 0 + 3 8 1 0 0 1 -5 0 + 3 10 1 0 0 3 -6 0 + 3 12 1 0 0 4 -7 3 + 3 14 1 0 0 2 -6 0 + 3 16 1 0 0 1 -6 2 + 3 18 1 0 0 2 -5 0 + 3 20 1 0 0 1 -4 0 + 3 22 1 0 0 1 -3 0 + 3 24 1 0 0 2 -3 0 + 3 26 1 0 0 1 -2 4 + 3 28 1 0 0 0 -2 0 + 3 30 1 0 0 3 -3 0 + 3 32 1 0 0 3 -2 0 + 3 34 1 0 0 2 -2 0 + 3 36 1 0 0 0 0 0 + 3 38 1 0 0 1 -1 0 + 3 40 1 0 0 2 -1 0 + 3 42 1 0 0 4 -2 0 + 3 44 1 0 0 4 -3 0 + 3 46 1 0 0 5 -3 0 + 3 48 1 0 0 6 -4 0 + 3 50 1 0 0 5 -4 0 + 3 52 1 0 0 6 -5 2 + 3 54 1 0 0 4 -5 0 + 3 56 1 0 0 5 -5 0 + 3 58 1 0 0 4 -4 0 + 3 62 1 0 0 5 -6 2 + 4 0 1 0 0 2 2 0 + 4 2 1 0 0 3 1 0 + 4 4 1 0 0 3 2 0 + 4 6 1 0 0 4 0 0 + 4 8 1 0 0 3 3 0 + 4 10 1 0 0 4 -1 0 + 4 12 1 0 0 5 -1 0 + 4 14 1 0 0 2 4 0 + 4 16 1 0 0 3 4 3 + 4 18 1 0 0 4 2 0 + 4 20 1 0 0 4 1 0 + 4 22 1 0 0 5 1 2 + 4 24 1 0 0 5 0 0 + 4 26 1 0 0 6 -1 2 + 4 28 1 0 0 6 -2 0 + 4 30 1 0 0 5 -2 0 + 4 32 1 0 0 6 -3 0 + 4 34 1 0 0 7 -4 3 + 4 36 1 0 0 1 0 0 + 4 38 1 0 0 2 0 0 + 4 40 1 0 0 3 -1 0 + 4 42 1 0 0 3 0 0 + 4 44 1 0 0 0 1 0 + 4 46 1 0 0 1 3 0 + 4 48 1 0 0 0 4 0 + 4 50 1 0 0 0 5 0 + 4 52 1 0 0 1 2 0 + 4 54 1 0 0 1 1 0 + 4 56 1 0 0 2 1 0 + 4 58 1 0 0 2 3 0 + 4 60 1 0 0 1 5 2 + 4 62 1 0 0 1 4 0 diff --git a/RawToDigi/plugins/DigiPlotter.cc b/RawToDigi/plugins/DigiPlotter.cc index 17eb028..11d9eae 100644 --- a/RawToDigi/plugins/DigiPlotter.cc +++ b/RawToDigi/plugins/DigiPlotter.cc @@ -41,6 +41,8 @@ #include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" #include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" #include "HGCal/Geometry/interface/HGCalTBGeometryParameters.h" using namespace std; @@ -71,7 +73,7 @@ class DigiPlotter : public edm::one::EDAnalyzer bool DEBUG = 0; HGCalTBTopology IsCellValid; HGCalTBCellVertices TheCell; - std::string mapfile_ = "HGCal/CondObjects/data/map_CERN_8Layers_Sept2016.txt"; + std::string mapfile_ = "HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt"; struct { HGCalElectronicsMap emap_; } essource_; @@ -80,111 +82,16 @@ class DigiPlotter : public edm::one::EDAnalyzer std::pair CellCentreXY; std::vector>::const_iterator it; const static int NSAMPLES = 2; - TH2Poly *h_digi_layer[NSAMPLES][MAXLAYERS]; - TH1F *h_digi_layer_summed[NSAMPLES][MAXLAYERS]; - TProfile *h_digi_layer_profile[NSAMPLES][MAXLAYERS]; - const static int cellx = 15; - const static int celly = 15; - int Sensor_Iu = 0; - int Sensor_Iv = 0; - TH2F* Noise_2D_Profile[NSAMPLES][MAXLAYERS]; - TH1F *h_digi_layer_channel[MAXSKIROCS][64][NSAMPLES]; -// TH1F *h_digi_layer_cell_event[NSAMPLES][MAXLAYERS][cellx][celly][512]; char name[50], title[50]; - double ADC_Sum_SKI_Layer[2][MAXLAYERS][2]; // 2 SKIROCs per layer, High gain and low gain ADC HARD CODED - int Cell_Count_SKI_Layer[2][4]; // 2 SKIROCs per layer, High gain and low gain ADC HARD CODED - string m_pedestalsHighGain; - string m_pedestalsLowGain; }; -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// DigiPlotter::DigiPlotter(const edm::ParameterSet& iConfig) { //now do what ever initialization is needed usesResource("TFileService"); edm::Service fs; - consumesMany(); - const int HalfHexVertices = 4; - double HalfHexX[HalfHexVertices] = {0.}; - double HalfHexY[HalfHexVertices] = {0.}; - const int FullHexVertices = 6; - double FullHexX[FullHexVertices] = {0.}; - double FullHexY[FullHexVertices] = {0.}; - for(int nsample = 0; nsample < NSAMPLES; nsample++) { - for(int nlayers = 0; nlayers < MAXLAYERS; nlayers++) { - sprintf(name, "Noise_2D_Profile_ADC%i_Layer%i", nsample, nlayers); - sprintf(title, "Noise 2D Profile ADC%i Layer%i", nsample, nlayers); - Noise_2D_Profile[nsample][nlayers] = fs->make(name, title, 128, 0, 127, 2000, -1000, 1000); - } - } - for(int ISkiroc = 1; ISkiroc <= MAXSKIROCS; ISkiroc++) { - for(int Channel = 0; Channel < 64; Channel++) { - for(int iii = 0; iii < NSAMPLES; iii++) { - sprintf(name, "Ski_%i_Channel_%i_ADC%i", ISkiroc, Channel, iii); - sprintf(title, "Ski %i Channel %i ADC%i", ISkiroc, Channel, iii); - h_digi_layer_channel[ISkiroc - 1][Channel][iii] = fs->make(name, title, 4096, 0., 4095.); - } - } - } - int iii = 0; - for(int nsample = 0; nsample < NSAMPLES; nsample++) { - for(int nlayers = 0; nlayers < MAXLAYERS; nlayers++) { -//Booking a "hexagonal" histograms to display the sum of Digis for NSAMPLES, in 1 SKIROC in 1 layer. To include all layers soon. Also the 1D Digis per cell in a sensor is booked here for NSAMPLES. - sprintf(name, "FullLayer_ADC%i_Layer%i", nsample, nlayers + 1); - sprintf(title, "Sum of adc counts per cell for ADC%i Layer%i", nsample, nlayers + 1); - h_digi_layer[nsample][nlayers] = fs->make(); - h_digi_layer[nsample][nlayers]->SetName(name); - h_digi_layer[nsample][nlayers]->SetTitle(title); - sprintf(name, "FullLayer_ADC%i_Layer%i_summed", nsample, nlayers + 1); - sprintf(title, "Sum of adc counts for all cells in ADC%i Layer%i", nsample, nlayers + 1); - h_digi_layer_summed[nsample][nlayers] = fs->make(name, title, 4096, 0., 4095.); - h_digi_layer_summed[nsample][nlayers]->GetXaxis()->SetTitle("Digis[adc counts]"); - sprintf(name, "FullLayer_ADC%i_Layer%i_profile", nsample, nlayers + 1); - sprintf(title, "profile of adc counts for all cells in ADC%i Layer%i", nsample, nlayers + 1); - h_digi_layer_profile[nsample][nlayers] = fs->make(name, title, 128, 0, 127, 0., 4095.); - h_digi_layer_profile[nsample][nlayers]->GetXaxis()->SetTitle("Channel #"); - h_digi_layer_profile[nsample][nlayers]->GetYaxis()->SetTitle("ADC counts"); + consumesMany(); - - for(int iv = -7; iv < 8; iv++) { - for(int iu = -7; iu < 8; iu++) { - if(!IsCellValid.iu_iv_valid(nlayers, Sensor_Iu, Sensor_Iv, iu, iv, sensorsize)) continue; - CellXY = TheCell.GetCellCoordinatesForPlots(nlayers, Sensor_Iu, Sensor_Iv, iu, iv, sensorsize); - int NumberOfCellVertices = CellXY.size(); - iii = 0; - if(NumberOfCellVertices == 4) { - for(it = CellXY.begin(); it != CellXY.end(); it++) { - HalfHexX[iii] = it->first; - HalfHexY[iii++] = it->second; - } -//Somehow cloning of the TH2Poly was not working. Need to look at it. Currently physically booked another one. - h_digi_layer[nsample][nlayers]->AddBin(NumberOfCellVertices, HalfHexX, HalfHexY); - } else if(NumberOfCellVertices == 6) { - iii = 0; - for(it = CellXY.begin(); it != CellXY.end(); it++) { - FullHexX[iii] = it->first; - FullHexY[iii++] = it->second; - } - h_digi_layer[nsample][nlayers]->AddBin(NumberOfCellVertices, FullHexX, FullHexY); - } - - }//loop over iu - }//loop over iv - }//loop over nlayers - }//loop over nsamples - - m_pedestalsHighGain = iConfig.getUntrackedParameter("pedestalsHighGain", ""); - m_pedestalsLowGain = iConfig.getUntrackedParameter("pedestalsLowGain", ""); }//contructor ends here @@ -206,79 +113,11 @@ void DigiPlotter::analyze(const edm::Event& event, const edm::EventSetup& setup) { using namespace edm; - std::vector > ski; + std::vector> ski; event.getManyByType(ski); -// int Event = event.id().event(); - /* - for(int ski=0;ski<2;ski++){ - for(int layers =0; layers >::iterator i; - int counter1 = 0, counter2 = 0; - for(i = ski.begin(); i != ski.end(); i++) { - const SKIROC2DigiCollection& Coll = *(*i); - -//////////////////////////////////Evaluate average pedestal per event to subtract out////////////////////////////////// - for(SKIROC2DigiCollection::const_iterator k = Coll.begin(); k != Coll.end(); k++) { - const SKIROC2DataFrame& SKI_1 = *k ; - int n_layer = (SKI_1.detid()).layer(); - int n_sensor_IU = (SKI_1.detid()).sensorIU(); - int n_sensor_IV = (SKI_1.detid()).sensorIV(); - int n_cell_iu = (SKI_1.detid()).iu(); - int n_cell_iv = (SKI_1.detid()).iv(); - uint32_t EID = essource_.emap_.detId2eid(SKI_1.detid()); - HGCalTBElectronicsId eid(EID); - if(DEBUG) cout << endl << " Layer = " << n_layer << " Sensor IU = " << n_sensor_IU << " Sensor IV = " << n_sensor_IV << " Cell iu = " << n_cell_iu << " Cell iu = " << n_cell_iv << endl; - if(!IsCellValid.iu_iv_valid(n_layer, n_sensor_IU, n_sensor_IV, n_cell_iu, n_cell_iv, sensorsize)) continue; -// ADC_Sum_SKI_Layer[eid.iskiroc() - 2*(n_layer - 1) - 1][n_layer - 1][1] += SKI_1[0].adcHigh(); -// ADC_Sum_SKI_Layer[eid.iskiroc() - 2*(n_layer - 1) - 1][n_layer - 1][0] += SKI_1[0].adcLow(); -// Cell_Count_SKI_Layer[eid.iskiroc() - 2*(n_layer - 1) - 1][n_layer - 1] += 1; - } -// cout << "SKIROC2 Digis: " << i->provenance()->branchName() << endl; - for(SKIROC2DigiCollection::const_iterator j = Coll.begin(); j != Coll.end(); j++) { - const SKIROC2DataFrame& SKI = *j ; - int n_layer = (SKI.detid()).layer(); - int n_sensor_IU = (SKI.detid()).sensorIU(); - int n_sensor_IV = (SKI.detid()).sensorIV(); - int n_cell_iu = (SKI.detid()).iu(); - int n_cell_iv = (SKI.detid()).iv(); - uint32_t EID = essource_.emap_.detId2eid(SKI.detid()); - HGCalTBElectronicsId eid(EID); - if(DEBUG) cout << endl << " Layer = " << n_layer << " Sensor IU = " << n_sensor_IU << " Sensor IV = " << n_sensor_IV << " Cell iu = " << n_cell_iu << " Cell iu = " << n_cell_iv << endl; - if(!IsCellValid.iu_iv_valid(n_layer, n_sensor_IU, n_sensor_IV, n_cell_iu, n_cell_iv, sensorsize)) continue; - CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots(n_layer, n_sensor_IU, n_sensor_IV, n_cell_iu, n_cell_iv, sensorsize); - double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + 0.0001) : (CellCentreXY.first - 0.0001) ; - double iyy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + 0.0001) : (CellCentreXY.second - 0.0001); - int nsample = 0; - h_digi_layer[nsample][n_layer - 1]->Fill(iux , iyy, SKI[nsample].adcLow()); - h_digi_layer_profile[nsample][n_layer - 1]->Fill(counter1++, SKI[nsample].adcLow(), 1); -// h_digi_layer_summed[nsample][n_layer - 1]->Fill(ADC_Sum_SKI_Layer[eid.iskiroc() - 2*(n_layer - 1) - 1][n_layer - 1][0]); - if(eid.iskiroc() > 0) h_digi_layer_channel[eid.iskiroc() - 1][eid.ichan()][nsample]->Fill(SKI[nsample].adcLow()); - nsample = 1; - h_digi_layer[nsample][n_layer - 1]->Fill(iux , iyy, SKI[nsample - 1].adcHigh()); -// Noise_2D_Profile[nsample][n_layer - 1]->Fill(); - h_digi_layer_profile[nsample][n_layer - 1]->Fill(counter2++, SKI[nsample - 1].adcHigh(), 1); -// h_digi_layer_summed[nsample][n_layer - 1]->Fill(ADC_Sum_SKI_Layer[eid.iskiroc() - 2*(n_layer - 1) - 1][n_layer - 1][1]); -// if(((SKI.detid()).cellType() != 4) && (eid.ichan() == 0) ) cout<GetMean() << endl; - fs2 << " " << Code << " " << DetId.layer() << " " << SENSOR_IX << " " << SENSOR_IV << " " << DetId.iu() << " " << DetId.iv() << " " << " " << DetId.cellType() << " " << h_digi_layer_channel[ISkiroc - 1][Channel][0]->GetMean() << endl; - } - } - } } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void DigiPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters - // not sure what the above means or if it is still valid after my changes -- Tanmay edm::ParameterSetDescription desc; - // desc.setUnknown(); - // descriptions.addDefault(desc); - desc.addUntracked("pedestalsHighGain", ""); - desc.addUntracked("pedestalsLowGain", ""); descriptions.add("hgcaltbdigisplotter", desc); } From b768937332533f58e442cbceda55286d8d3f9420 Mon Sep 17 00:00:00 2001 From: Rajdeep Date: Wed, 17 May 2017 15:20:56 +0200 Subject: [PATCH 252/297] Correct map for one layer CERN May TB, /CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt , as per ~rchatter/public/EMAP_Ski2CMS_Hexaboard.pdf [Flipped] --- .../map_CERN_Hexaboard_OneLayers_May2017.txt | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt diff --git a/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt b/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt new file mode 100644 index 0000000..cdc6f64 --- /dev/null +++ b/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt @@ -0,0 +1,128 @@ +# SKIROC CHANNEL | LAYER SENSOR_IX SENSOR_IV IX IV TYPE + 1 0 1 0 0 -2 5 0 + 1 2 1 0 0 -2 4 4 + 1 4 1 0 0 -1 4 0 + 1 6 1 0 0 -2 6 0 + 1 8 1 0 0 0 3 0 + 1 10 1 0 0 -1 6 2 + 1 12 1 0 0 -1 5 0 + 1 14 1 0 0 0 2 0 + 1 16 1 0 0 -1 3 0 + 1 18 1 0 0 -1 2 0 + 1 20 1 0 0 -2 3 0 + 1 22 1 0 0 -2 2 0 + 1 24 1 0 0 -1 1 0 + 1 26 1 0 0 -2 1 0 + 1 28 1 0 0 -3 2 0 + 1 30 1 0 0 -4 2 0 + 1 32 1 0 0 -5 3 0 + 1 34 1 0 0 -4 3 0 + 1 36 1 0 0 -5 4 0 + 1 38 1 0 0 -4 4 0 + 1 40 1 0 0 -3 3 0 + 1 42 1 0 0 -3 4 0 + 1 44 1 0 0 -6 3 0 + 1 46 1 0 0 -3 7 3 + 1 48 1 0 0 -6 4 0 + 1 50 1 0 0 -6 5 2 + 1 52 1 0 0 -5 5 0 + 1 54 1 0 0 -4 5 0 + 1 56 1 0 0 -5 6 2 + 1 58 1 0 0 -3 6 0 + 1 60 1 0 0 -3 5 0 + 1 62 1 0 0 -4 6 0 + 2 0 1 0 0 -3 -2 0 + 2 2 1 0 0 -4 -2 0 + 2 4 1 0 0 -3 -3 0 + 2 6 1 0 0 -4 -1 0 + 2 8 1 0 0 -5 0 0 + 2 10 1 0 0 -5 -1 2 + 2 12 1 0 0 -6 1 2 + 2 14 1 0 0 -4 0 0 + 2 16 1 0 0 -3 -1 0 + 2 18 1 0 0 -3 0 0 + 2 20 1 0 0 -7 3 3 + 2 22 1 0 0 -6 2 0 + 2 24 1 0 0 -5 1 0 + 2 26 1 0 0 -4 1 0 + 2 28 1 0 0 -5 2 0 + 2 30 1 0 0 -3 1 0 + 2 32 1 0 0 -2 0 0 + 2 34 1 0 0 -1 0 0 + 2 36 1 0 0 0 -1 0 + 2 38 1 0 0 -1 -1 0 + 2 40 1 0 0 0 -4 0 + 2 42 1 0 0 0 -3 0 + 2 44 1 0 0 -1 -3 0 + 2 46 1 0 0 0 -5 0 + 2 48 1 0 0 -1 -5 2 + 2 50 1 0 0 -1 -4 0 + 2 52 1 0 0 -1 -2 0 + 2 54 1 0 0 -2 -1 0 + 2 56 1 0 0 -2 -2 0 + 2 58 1 0 0 -2 -3 0 + 2 60 1 0 0 -3 -4 3 + 2 62 1 0 0 -2 -4 0 + 3 0 1 0 0 3 -4 0 + 3 2 1 0 0 2 -4 0 + 3 4 1 0 0 3 -5 0 + 3 6 1 0 0 4 -6 0 + 3 8 1 0 0 1 -5 0 + 3 10 1 0 0 3 -6 0 + 3 12 1 0 0 4 -7 3 + 3 14 1 0 0 2 -6 0 + 3 16 1 0 0 1 -6 2 + 3 18 1 0 0 2 -5 0 + 3 20 1 0 0 1 -4 0 + 3 22 1 0 0 1 -3 0 + 3 24 1 0 0 2 -3 0 + 3 26 1 0 0 1 -2 4 + 3 28 1 0 0 0 -2 0 + 3 30 1 0 0 3 -3 0 + 3 32 1 0 0 3 -2 0 + 3 34 1 0 0 2 -2 0 + 3 36 1 0 0 0 0 0 + 3 38 1 0 0 1 -1 0 + 3 40 1 0 0 2 -1 0 + 3 42 1 0 0 4 -2 0 + 3 44 1 0 0 4 -3 0 + 3 46 1 0 0 5 -3 0 + 3 48 1 0 0 6 -4 0 + 3 50 1 0 0 5 -4 0 + 3 52 1 0 0 6 -5 2 + 3 54 1 0 0 4 -5 0 + 3 56 1 0 0 5 -5 0 + 3 58 1 0 0 4 -4 0 + 3 62 1 0 0 5 -6 2 + 4 0 1 0 0 2 2 0 + 4 2 1 0 0 3 1 0 + 4 4 1 0 0 3 2 0 + 4 6 1 0 0 4 0 0 + 4 8 1 0 0 3 3 0 + 4 10 1 0 0 4 -1 0 + 4 12 1 0 0 5 -1 0 + 4 14 1 0 0 2 4 0 + 4 16 1 0 0 3 4 3 + 4 18 1 0 0 4 2 0 + 4 20 1 0 0 4 1 0 + 4 22 1 0 0 5 1 2 + 4 24 1 0 0 5 0 0 + 4 26 1 0 0 6 -1 2 + 4 28 1 0 0 6 -2 0 + 4 30 1 0 0 5 -2 0 + 4 32 1 0 0 6 -3 0 + 4 34 1 0 0 7 -4 3 + 4 36 1 0 0 1 0 0 + 4 38 1 0 0 2 0 0 + 4 40 1 0 0 3 -1 0 + 4 42 1 0 0 3 0 0 + 4 44 1 0 0 0 1 0 + 4 46 1 0 0 1 3 0 + 4 48 1 0 0 0 4 0 + 4 50 1 0 0 0 5 0 + 4 52 1 0 0 1 2 0 + 4 54 1 0 0 1 1 0 + 4 56 1 0 0 2 1 0 + 4 58 1 0 0 2 3 0 + 4 60 1 0 0 1 5 2 + 4 62 1 0 0 1 4 0 From 3b678479750d43cb945f2634e452d03e9f632fcf Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 19 May 2017 13:36:48 +0200 Subject: [PATCH 253/297] Modif unpacker: electronic id assignment is now well done, accordingly with the map + assign rawid=-1 instead of 0 for non connected channel --- RawToDigi/plugins/HGCalTBRawDataSource.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBRawDataSource.cc b/RawToDigi/plugins/HGCalTBRawDataSource.cc index ecb52a4..be4c201 100644 --- a/RawToDigi/plugins/HGCalTBRawDataSource.cc +++ b/RawToDigi/plugins/HGCalTBRawDataSource.cc @@ -39,6 +39,8 @@ HGCalTBRawDataSource::HGCalTBRawDataSource(const edm::ParameterSet & pset, edm:: throw cms::Exception("Unable to load electronics map"); } + std::cout << pset << std::endl; + } bool HGCalTBRawDataSource::setRunAndEventInfo(edm::EventID& id, edm::TimeValue_t& time, edm::EventAuxiliary::ExperimentType& evType) @@ -96,11 +98,21 @@ void HGCalTBRawDataSource::produce(edm::Event & e) for( size_t iski=0; iski detids; for (size_t ichan = 0; ichan < m_nChannelsPerSkiroc; ichan++) { - HGCalTBElectronicsId eid(iski, ichan); + + + HGCalTBElectronicsId eid; + switch( iski ){ + case 0 : eid=HGCalTBElectronicsId( 1, ichan);break; + case 1 : eid=HGCalTBElectronicsId( 4, ichan);break; + case 2 : eid=HGCalTBElectronicsId( 3, ichan);break; + case 3 : eid=HGCalTBElectronicsId( 2, ichan);break; + } + // if( iski%2 ) eid=HGCalTBElectronicsId + // else eid=HGCalTBElectronicsId(iski, ichan); if (!essource_.emap_.existsEId(eid.rawId())) { //std::cout << std::dec << "skiroc " << iski << "; channel " << ichan << "; electronic id " << eid.rawId() << " is not a correct id, or can not be found in electronics map" << std::endl; //exit(1); - HGCalTBDetId did(0); + HGCalTBDetId did(-1); detids.push_back(did); } else{ From b7fdd5e6619ba530dbb9328ed335a25d85ac7f78 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 19 May 2017 13:37:53 +0200 Subject: [PATCH 254/297] debug roll position finder --- DataFormats/src/HGCalTBSkiroc2CMS.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DataFormats/src/HGCalTBSkiroc2CMS.cc b/DataFormats/src/HGCalTBSkiroc2CMS.cc index af572c1..3ad3350 100644 --- a/DataFormats/src/HGCalTBSkiroc2CMS.cc +++ b/DataFormats/src/HGCalTBSkiroc2CMS.cc @@ -51,7 +51,10 @@ bool HGCalTBSkiroc2CMS::check() std::vector HGCalTBSkiroc2CMS::rollPositions() const { - std::bitset bits=rollMask(); + std::bitset bitstmp=rollMask(); + std::bitset bits; + for( size_t i=0; i rollpositions(NUMBER_OF_SCA); if(bits.test(0)&&bits.test(12)){ rollpositions[0]=12; From 4fc6dffd4ed4dbf68cbf5636f16a6f8e5f145228 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 19 May 2017 13:38:30 +0200 Subject: [PATCH 255/297] dev RawDataPlotter --- RawToDigi/plugins/RawDataPlotter.cc | 172 +++++++++++++++++++++++----- run2017_cfg.py | 5 +- 2 files changed, 144 insertions(+), 33 deletions(-) diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc index a4cf819..016c1e7 100644 --- a/RawToDigi/plugins/RawDataPlotter.cc +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -1,8 +1,7 @@ #include #include "TH1F.h" #include "TH2F.h" -#include "TTree.h" -#include "TProfile.h" +#include "TH2Poly.h" #include #include // user include files @@ -18,12 +17,19 @@ #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" #include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include +#include const static size_t N_HEXABOARDS = 1; const static size_t N_TIME_SAMPLES = 13; const static size_t N_SKIROC_PER_HEXA = 4; const static size_t N_CHANNELS_PER_SKIROC = 64; +#define MAXVERTICES 6 +static const double delta = 0.00001;//Add/subtract delta = 0.00001 to x,y of a cell centre so the TH2Poly::Fill doesnt have a problem at the edges where the centre of a half-hex cell passes through the sennsor boundary line. + class RawDataPlotter : public edm::one::EDAnalyzer { public: @@ -34,6 +40,7 @@ class RawDataPlotter : public edm::one::EDAnalyzer virtual void beginJob() override; void analyze(const edm::Event& , const edm::EventSetup&) override; virtual void endJob() override; + void InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV); std::string m_electronicMap; @@ -41,54 +48,61 @@ class RawDataPlotter : public edm::one::EDAnalyzer HGCalElectronicsMap emap_; } essource_; int m_sensorsize; + bool m_eventPlotter; - TTree* m_tree; int m_evtID; - std::map m_adcHigh; - std::map m_adcLow; + std::map m_h_adcHigh; + std::map m_h_adcLow; std::map m_h_pulseHigh; std::map m_h_pulseLow; edm::EDGetTokenT m_HGCalTBSkiroc2CMSCollection; + + HGCalTBTopology IsCellValid; + HGCalTBCellVertices TheCell; + std::vector> CellXY; + std::pair CellCentreXY; + std::set< std::pair > setOfConnectedDetId; }; RawDataPlotter::RawDataPlotter(const edm::ParameterSet& iConfig) : - m_sensorsize(iConfig.getUntrackedParameter("SensorSize")) + m_sensorsize(iConfig.getUntrackedParameter("SensorSize",128)), + m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)) { usesResource("TFileService"); edm::Service fs; - m_tree = fs->make("tree", "HGCAL TB variables tree"); - m_HGCalTBSkiroc2CMSCollection = consumes(iConfig.getParameter("InputCollection")); m_evtID=0; - m_tree->Branch( "evtID" , &m_evtID); std::ostringstream os( std::ostringstream::ate ); - TH2F* htmp; + TH2F* htmp2; + TH1F* htmp1; for(size_t ib = 0; ibmkdir( os.str().c_str() ); for( size_t ichan=0; ichan(ib*100000+iski*10000+ichan*100+it, 0.) ); os.str(""); os << "HighGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; - m_tree->Branch( os.str().c_str(),&m_adcHigh[ib*100000+iski*10000+ichan*100+it]); - m_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, 0.) ); + htmp1=dir.make(os.str().c_str(),os.str().c_str(),1000,0,4096); + m_h_adcHigh.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); os.str(""); os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; - m_tree->Branch( os.str().c_str(),&m_adcLow[ib*100000+iski*10000+ichan*100+it]); + htmp1=dir.make(os.str().c_str(),os.str().c_str(),1000,0,4096); + m_h_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); } if( ichan%2==0 ){ os.str(""); os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp=fs->make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); - m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp) ); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); os.str(""); os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp=fs->make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); - m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp) ); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); } } } @@ -104,9 +118,30 @@ RawDataPlotter::~RawDataPlotter() void RawDataPlotter::analyze(const edm::Event& event, const edm::EventSetup& setup) { + usesResource("TFileService"); + edm::Service fs; + edm::Handle skirocs; event.getByToken(m_HGCalTBSkiroc2CMSCollection, skirocs); + std::map polyMap; + if( m_eventPlotter ){ + std::ostringstream os( std::ostringstream::ate ); + os << "Event" << event.id().event(); + TFileDirectory dir = fs->mkdir( os.str().c_str() ); + for(size_t ib = 0; ib(); + os.str(""); + os<<"HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + polyMap.insert( std::pair(100*ib+it,h) ); + } + } + } + for( size_t iski=0;iskisize(); iski++ ){ HGCalTBSkiroc2CMS skiroc=skirocs->at(iski); std::vector rollpositions=skiroc.rollPositions(); @@ -114,34 +149,109 @@ void RawDataPlotter::analyze(const edm::Event& event, const edm::EventSetup& set for( size_t ichan=0; ichanFill(skiroc.ADCHigh(ichan,it)); + m_h_adcLow[iboard*100000+iski*10000+ichan*100+it]->Fill(skiroc.ADCLow(ichan,it)); + if( ichan%2==0 ){ m_h_pulseHigh[iboard*1000+iski*100+ichan]->Fill( rollpositions[it]*25,skiroc.ADCHigh(ichan,it) ); m_h_pulseLow[iboard*1000+iski*100+ichan]->Fill( rollpositions[it]*25,skiroc.ADCLow(ichan,it) ); + + HGCalTBDetId detid=skiroc.detid( ichan ); + if(!IsCellValid.iu_iv_valid( detid.layer(),detid.sensorIU(), detid.sensorIV(), detid.iu(), detid.iv(), m_sensorsize ) ) continue; + if(m_eventPlotter){ + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detid.layer(), detid.sensorIU(), detid.sensorIV(), detid.iu(), detid.iv(), m_sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + polyMap[ 100*iboard+rollpositions[it] ]->Fill(iux/2 , iuy, skiroc.ADCHigh(ichan,it) ); + } + std::pair p( iboard*1000+iski*100+ichan,detid ); + setOfConnectedDetId.insert(p); } } } } } - m_tree->Fill(); +} + +void RawDataPlotter::InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV) +{ + double HexX[MAXVERTICES] = {0.}; + double HexY[MAXVERTICES] = {0.}; + for(int iv = -7; iv < 8; iv++) { + for(int iu = -7; iu < 8; iu++) { + if(!IsCellValid.iu_iv_valid(layerID, sensorIU, sensorIV, iu, iv, m_sensorsize)) continue; + CellXY = TheCell.GetCellCoordinatesForPlots(layerID, sensorIU, sensorIV, iu, iv, m_sensorsize); + assert(CellXY.size() == 4 || CellXY.size() == 6); + unsigned int iVertex = 0; + for(std::vector>::const_iterator it = CellXY.begin(); it != CellXY.end(); it++) { + HexX[iVertex] = it->first; + HexY[iVertex] = it->second; + ++iVertex; + } + //Somehow cloning of the TH2Poly was not working. Need to look at it. Currently physically booked another one. + poly.AddBin(CellXY.size(), HexX, HexY); + }//loop over iu + }//loop over iv } void RawDataPlotter::beginJob() { } +// const static size_t N_HEXABOARDS = 1; +// const static size_t N_TIME_SAMPLES = 13; +// const static size_t N_SKIROC_PER_HEXA = 4; +// const static size_t N_CHANNELS_PER_SKIROC = 64; void RawDataPlotter::endJob() { + usesResource("TFileService"); + edm::Service fs; + TFileDirectory dir = fs->mkdir( "PedestalPlotter" ); + std::map polyMap; + std::map polyMapNC; + std::map chanMap; + std::ostringstream os( std::ostringstream::ate ); + TH2Poly *h; + for(size_t ib = 0; ib(); + os.str(""); + os<<"HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + polyMap.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"NC_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + polyMapNC.insert( std::pair(100*ib+it,h) ); + } + h=dir.make(); + os.str(""); + os<<"ChannelMapping"; + h->SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + chanMap.insert( std::pair(ib,h) ); + } + + for( std::set< std::pair >::iterator it=setOfConnectedDetId.begin(); it!=setOfConnectedDetId.end(); ++it ){ + int iboard=(*it).first/1000; + int iski=((*it).first%1000)/100; + int ichan=(*it).first%100; + int ichanNC=(*it).first%100+1; + HGCalTBDetId detid=(*it).second; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detid.layer(), detid.sensorIU(), detid.sensorIV(), detid.iu(), detid.iv(), m_sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + for( size_t it=0; itFill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); + polyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); + } + chanMap[ iboard ]->Fill(iux/2 , iuy, iski*1000+ichan ); + } } void RawDataPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) diff --git a/run2017_cfg.py b/run2017_cfg.py index 38c871d..f994c0b 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -19,7 +19,7 @@ 'Input file to process') options.register('outputFolder', - '/tmp/asteen', + '/afs/cern.ch/work/a/asteen/public/data/may2017/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, 'Result of processing') @@ -44,7 +44,7 @@ process.source = cms.Source("HGCalTBRawDataSource", #FilePath=cms.untracked.string(options.dataFolder), #FileName=cms.untracked.string("file:HexaData_Run00%d.raw"%(options.runNumber)), - ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_28Layers.txt"), + ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), fileNames=cms.untracked.vstring("file:%s/HexaData_Run%04d.raw"%(options.dataFolder,options.runNumber)), OutputCollectionName=cms.untracked.string("skiroc2cmsdata"), NOrmBoards=cms.untracked.uint32(1), @@ -63,6 +63,7 @@ process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), + EventPlotter=cms.untracked.bool(False), InputCollection=cms.InputTag("source","skiroc2cmsdata") ) process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event From 21c295cd973ead93e512cf51f0839d91807c1b37 Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 23 May 2017 14:59:00 +0200 Subject: [PATCH 256/297] store high/low gain pedestal/noise value in .txt at the of RawDataPlotter + add th2poly of noise --- RawToDigi/plugins/RawDataPlotter.cc | 57 +++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc index 016c1e7..8063ac5 100644 --- a/RawToDigi/plugins/RawDataPlotter.cc +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -63,11 +63,16 @@ class RawDataPlotter : public edm::one::EDAnalyzer std::vector> CellXY; std::pair CellCentreXY; std::set< std::pair > setOfConnectedDetId; + std::string m_pedHighGainFileName; + std::string m_pedLowGainFileName; + }; RawDataPlotter::RawDataPlotter(const edm::ParameterSet& iConfig) : m_sensorsize(iConfig.getUntrackedParameter("SensorSize",128)), - m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)) + m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)), + m_pedHighGainFileName(iConfig.getParameter("HighGainPedestalFileName")), + m_pedLowGainFileName(iConfig.getParameter("LowGainPedestalFileName")) { usesResource("TFileService"); edm::Service fs; @@ -206,8 +211,10 @@ void RawDataPlotter::endJob() usesResource("TFileService"); edm::Service fs; TFileDirectory dir = fs->mkdir( "PedestalPlotter" ); - std::map polyMap; - std::map polyMapNC; + std::map pedPolyMap; + std::map pedPolyMapNC; + std::map noisePolyMap; + std::map noisePolyMapNC; std::map chanMap; std::ostringstream os( std::ostringstream::ate ); TH2Poly *h; @@ -219,14 +226,28 @@ void RawDataPlotter::endJob() h->SetName(os.str().c_str()); h->SetTitle(os.str().c_str()); InitTH2Poly(*h, (int)ib, 0, 0); - polyMap.insert( std::pair(100*ib+it,h) ); + pedPolyMap.insert( std::pair(100*ib+it,h) ); h=dir.make(); os.str(""); os<<"NC_HighGain_HexaBoard"<SetName(os.str().c_str()); h->SetTitle(os.str().c_str()); InitTH2Poly(*h, (int)ib, 0, 0); - polyMapNC.insert( std::pair(100*ib+it,h) ); + pedPolyMapNC.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"Noise_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + noisePolyMap.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"NC_Noise_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + noisePolyMapNC.insert( std::pair(100*ib+it,h) ); } h=dir.make(); os.str(""); @@ -247,11 +268,33 @@ void RawDataPlotter::endJob() double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); for( size_t it=0; itFill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); - polyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); + pedPolyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); + pedPolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); + noisePolyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetRMS() ); + noisePolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetRMS() ); } chanMap[ iboard ]->Fill(iux/2 , iuy, iski*1000+ichan ); } + + std::fstream pedestalHG;pedestalHG.open(m_pedHighGainFileName,std::ios::out); + std::fstream pedestalLG;pedestalLG.open(m_pedLowGainFileName,std::ios::out); + for(size_t ib = 0; ibGetMean() << " " << m_h_adcHigh[key]->GetRMS() << " "; + pedestalLG << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS() << " "; + } + pedestalHG << "\n" ; + pedestalLG << "\n" ; + } + } + } + pedestalHG.close(); + pedestalLG.close(); } void RawDataPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) From 145c08849484cb4d40cf4a01c47231469f705515 Mon Sep 17 00:00:00 2001 From: asteencern Date: Wed, 24 May 2017 14:03:35 +0200 Subject: [PATCH 257/297] small modif of run2017_cfg.py and RawDataPlotter.cc --- RawToDigi/plugins/RawDataPlotter.cc | 8 ++++---- run2017_cfg.py | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc index 8063ac5..fa69bd3 100644 --- a/RawToDigi/plugins/RawDataPlotter.cc +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -281,12 +281,12 @@ void RawDataPlotter::endJob() for(size_t ib = 0; ibGetMean() << " " << m_h_adcHigh[key]->GetRMS() << " "; - pedestalLG << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS() << " "; + pedestalHG << " " << m_h_adcHigh[key]->GetMean() << " " << m_h_adcHigh[key]->GetRMS(); + pedestalLG << " " << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS(); } pedestalHG << "\n" ; pedestalLG << "\n" ; diff --git a/run2017_cfg.py b/run2017_cfg.py index f994c0b..c652075 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -6,7 +6,8 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' #Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', - #'/afs/cern.ch/work/a/asteen/public/data/may2017/raw', + #'./', + #'/afs/cern.ch/work/a/asteen/public/data/may2017/raw', '/afs/cern.ch/work/b/barneyd/public/data_May_2017/disk2_2TB/eudaq_data', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, @@ -61,10 +62,14 @@ ) +pedestalHighGain="pedestalHG_"+str(options.runNumber)+".txt" +pedestalLowGain="pedestalLG_"+str(options.runNumber)+".txt" process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), EventPlotter=cms.untracked.bool(False), - InputCollection=cms.InputTag("source","skiroc2cmsdata") + InputCollection=cms.InputTag("source","skiroc2cmsdata"), + HighGainPedestalFileName=cms.string(pedestalHighGain), + LowGainPedestalFileName=cms.string(pedestalLowGain) ) process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event process.p = cms.Path( process.rawdataplotter ) From e37b2b6c5c00bfa43e0f5549b10f164e221ef1d9 Mon Sep 17 00:00:00 2001 From: asteencern Date: Wed, 24 May 2017 18:36:25 +0200 Subject: [PATCH 258/297] add HGCalTBRawHit dataformats (equiv digi) and HGCalTBRawHitProducer, adapt run2017_cfg.py --- DataFormats/interface/HGCalTBRawHit.h | 35 +++++ .../interface/HGCalTBRawHitCollection.h | 15 +++ DataFormats/src/HGCalTBRawHit.cc | 14 ++ DataFormats/src/classes.h | 6 + DataFormats/src/classes_def.xml | 4 + RawToDigi/plugins/HGCalTBRawHitProducer.cc | 123 ++++++++++++++++++ RawToDigi/plugins/HGCalTBRawHitProducer.h | 50 +++++++ run2017_cfg.py | 16 ++- 8 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 DataFormats/interface/HGCalTBRawHit.h create mode 100644 DataFormats/interface/HGCalTBRawHitCollection.h create mode 100644 DataFormats/src/HGCalTBRawHit.cc create mode 100644 RawToDigi/plugins/HGCalTBRawHitProducer.cc create mode 100644 RawToDigi/plugins/HGCalTBRawHitProducer.h diff --git a/DataFormats/interface/HGCalTBRawHit.h b/DataFormats/interface/HGCalTBRawHit.h new file mode 100644 index 0000000..59690cd --- /dev/null +++ b/DataFormats/interface/HGCalTBRawHit.h @@ -0,0 +1,35 @@ +#ifndef HGCALTBRAWHIT_H_INCLUDED +#define HGCALTBRAWHIT_H_INCLUDED 1 + +#include +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" + +const static int NUMBER_OF_TIME_SAMPLES = 11; + +class HGCalTBRawHit +{ + public: + + HGCalTBRawHit( ){;} + HGCalTBRawHit( unsigned int rawid, std::vector &adcHigh, std::vector &adcLow) : + m_rawid(rawid), + m_adcHigh(adcHigh), + m_adcLow(adcLow) + {;} + + HGCalTBDetId detid() const {return HGCalTBDetId(m_rawid);} + void setRawId(unsigned int rawid){m_rawid=rawid;} + void setHighGainADCs(std::vector vec){m_adcHigh=vec;} + void setLowGainADCs(std::vector vec){m_adcLow=vec;} + float highGainADC(int timeSample){return m_adcHigh.at(timeSample);} + float lowGainADC(int timeSample){return m_adcHigh.at(timeSample);} + + private: + unsigned int m_rawid; //for some reasons (I don't know) root does not allow saving HGCalTBDetId because of some dictionary issue. + std::vector m_adcHigh; + std::vector m_adcLow; +}; + +std::ostream& operator<<(std::ostream&, HGCalTBRawHit&); + +#endif diff --git a/DataFormats/interface/HGCalTBRawHitCollection.h b/DataFormats/interface/HGCalTBRawHitCollection.h new file mode 100644 index 0000000..986be82 --- /dev/null +++ b/DataFormats/interface/HGCalTBRawHitCollection.h @@ -0,0 +1,15 @@ +#ifndef DATAFORMATS_HGCALTBRAWHITCOLLECTION_H +#define DATAFORMATS_HGCALTBRAWHITCOLLECTION_H + +#include "DataFormats/Common/interface/EDCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBRawHit.h" +#include "DataFormats/Common/interface/Ref.h" +#include "DataFormats/Common/interface/RefVector.h" + +typedef edm::EDCollection HGCalTBRawHitCollection; +typedef edm::Ref HGCalTBRawHitRef; +typedef edm::RefVector HGCalTBRawHitRefs; +typedef edm::RefProd HGCalTBRawHitRefProd; + + +#endif diff --git a/DataFormats/src/HGCalTBRawHit.cc b/DataFormats/src/HGCalTBRawHit.cc new file mode 100644 index 0000000..c6756c0 --- /dev/null +++ b/DataFormats/src/HGCalTBRawHit.cc @@ -0,0 +1,14 @@ +#include "HGCal/DataFormats/interface/HGCalTBRawHit.h" + +std::ostream& operator<<(std::ostream& s, HGCalTBRawHit& hit) +{ + s << "Channel det id : " << hit.detid() << "\n"; + s << "High gain ADC => " ; + for (size_t i = 0; i < NUMBER_OF_TIME_SAMPLES; i++) + s << hit.highGainADC(i) << " "; + s << "Low gain ADC => " ; + for (size_t i = 0; i < NUMBER_OF_TIME_SAMPLES; i++) + s << hit.lowGainADC(i) << " "; + s << std::endl; + return s; +} diff --git a/DataFormats/src/classes.h b/DataFormats/src/classes.h index 11dfd30..937a8cc 100644 --- a/DataFormats/src/classes.h +++ b/DataFormats/src/classes.h @@ -4,6 +4,9 @@ #include "HGCal/DataFormats/interface/HGCalTBClusterCollection.h" #include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMS.h" #include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBRawHit.h" +#include "HGCal/DataFormats/interface/HGCalTBRawHitCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" #include "HGCal/DataFormats/interface/HGCalTBDataFrameContainers.h" #include "HGCal/DataFormats/interface/HGCalTBTrackCollection.h" #include "HGCal/DataFormats/interface/HGCalTBRunData.h" @@ -29,6 +32,9 @@ struct dictionary { HGCalTBSkiroc2CMS _aSki; std::vector _skiVect; + HGCalTBRawHit _aRawHit; + std::vector _rawHitVec; + SKIROC2DigiCollection _SR2DC; edm::Wrapper _theSR2DC; diff --git a/DataFormats/src/classes_def.xml b/DataFormats/src/classes_def.xml index 6ec367a..cdf9daa 100644 --- a/DataFormats/src/classes_def.xml +++ b/DataFormats/src/classes_def.xml @@ -26,6 +26,10 @@ + + + + diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.cc b/RawToDigi/plugins/HGCalTBRawHitProducer.cc new file mode 100644 index 0000000..0c7c863 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.cc @@ -0,0 +1,123 @@ +#include "HGCal/RawToDigi/plugins/HGCalTBRawHitProducer.h" +#include + + +HGCalTBRawHitProducer::HGCalTBRawHitProducer(const edm::ParameterSet& cfg) : + m_outputCollectionName(cfg.getParameter("OutputCollectionName")), + m_electronicMap(cfg.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt")), + m_pedestalLow_filename(cfg.getParameter("pedestalLow")), + m_pedestalHigh_filename(cfg.getParameter("pedestalHigh")) +{ + m_HGCalTBSkiroc2CMSCollection = consumes(cfg.getParameter("InputCollection")); + produces (m_outputCollectionName); + + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(m_electronicMap); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + + std::cout << cfg.dump() << std::endl; +} + +void HGCalTBRawHitProducer::beginJob() +{ + //maybe not the correct place to start pedestal subtraction, but OK this is a try + FILE* file; + char buffer[300]; + file = fopen (m_pedestalHigh_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal high gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + HGCalTBElectronicsId eid(4-skiroc+1,channel); + if (!essource_.emap_.existsEId(eid.rawId())) + ped.id = HGCalTBDetId(-1); + else + ped.id = essource_.emap_.eid2detId(eid); + //std::cout << hexaboard << " " << skiroc << " " << channel << " " ; + index+=ptr; + }else continue; + for( int ii=0; ii(10000*hexaboard+100*skiroc+channel,ped) ); + //std::cout << std::endl; + } + fclose (file); + } + + file = fopen (m_pedestalLow_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal low gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval,key; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + key=10000*hexaboard+100*skiroc+channel; + index+=ptr; + }else continue; + for( int ii=0; ii::iterator it=m_pedMap.begin(); it!=m_pedMap.end(); ++it ){ + std::cout << it->first/10000 << " " << (it->first%10000)/100 << " " << it->first%100 ; + for( int ii=0; iisecond.pedHGMean[ii] << " " << it->second.pedHGRMS[ii] ; + std::cout << std::endl; + for( int ii=0; iisecond.pedLGMean[ii] << " " << it->second.pedLGRMS[ii] ; + std::cout << std::endl; + } +} + +void HGCalTBRawHitProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) +{ + + std::auto_ptr hits(new HGCalTBRawHitCollection); + + edm::Handle skirocs; + event.getByToken(m_HGCalTBSkiroc2CMSCollection, skirocs); + for( size_t iski=0; iskisize(); iski++ ){ + for( int ichan=0; ichanat(iski); + unsigned int rawid=skiroc.detid(ichan).rawId(); + std::vector adchigh; + std::vector adclow; + std::vector rollpositions=skiroc.rollPositions(); + for( int it=0; itpush_back(hit); + } + } + event.put(hits, m_outputCollectionName); +} + +DEFINE_FWK_MODULE(HGCalTBRawHitProducer); diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.h b/RawToDigi/plugins/HGCalTBRawHitProducer.h new file mode 100644 index 0000000..e676499 --- /dev/null +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.h @@ -0,0 +1,50 @@ +#ifndef HGCALTBRECHITPRODUCER_H +#define HGCALTBRECHITPRODUCER_H + +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Framework/interface/ESHandle.h" + +#include "HGCal/DataFormats/interface/HGCalTBRawHitCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" + +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" + +//NUMBER_OF_SCA defined in HGCalTBSkiroc2CMS.h +struct pedestalChannel{ + HGCalTBDetId id; + float pedHGMean[NUMBER_OF_SCA]; + float pedLGMean[NUMBER_OF_SCA]; + float pedHGRMS[NUMBER_OF_SCA]; + float pedLGRMS[NUMBER_OF_SCA]; +}; + +class HGCalTBRawHitProducer : public edm::EDProducer +{ + + public: + HGCalTBRawHitProducer(const edm::ParameterSet&); + virtual void produce(edm::Event&, const edm::EventSetup&); + virtual void beginJob(); + private: + std::string m_outputCollectionName; + std::string m_electronicMap; + std::string m_pedestalLow_filename; + std::string m_pedestalHigh_filename; + + std::map m_pedMap; //key=10000*hexa+100*chip+chan + + edm::EDGetTokenT m_HGCalTBSkiroc2CMSCollection; + + struct { + HGCalElectronicsMap emap_; + } essource_; + +}; +#endif diff --git a/run2017_cfg.py b/run2017_cfg.py index c652075..b5f164e 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -64,6 +64,7 @@ pedestalHighGain="pedestalHG_"+str(options.runNumber)+".txt" pedestalLowGain="pedestalLG_"+str(options.runNumber)+".txt" + process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), EventPlotter=cms.untracked.bool(False), @@ -72,7 +73,20 @@ LowGainPedestalFileName=cms.string(pedestalLowGain) ) process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event -process.p = cms.Path( process.rawdataplotter ) + +process.rawhitproducer = cms.EDProducer("HGCalTBRawHitProducer", + OutputCollectionName=cms.string("HGCALTBRAWHITS"), + ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), + pedestalLow=cms.string(pedestalLowGain), + pedestalHigh=cms.string(pedestalHighGain), + InputCollection=cms.InputTag("source","skiroc2cmsdata") + ) + + + + +#process.p = cms.Path( process.rawdataplotter ) +process.p = cms.Path( process.rawhitproducer ) process.end = cms.EndPath(process.output) From d1a70b17f0624af224e7d724cd8235e32524de19 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 26 May 2017 18:24:34 +0200 Subject: [PATCH 259/297] small modif in RawDataPlotter, rm two last time sample when filling histos --- RawToDigi/plugins/RawDataPlotter.cc | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc index fa69bd3..73e022c 100644 --- a/RawToDigi/plugins/RawDataPlotter.cc +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -23,7 +23,6 @@ #include const static size_t N_HEXABOARDS = 1; -const static size_t N_TIME_SAMPLES = 13; const static size_t N_SKIROC_PER_HEXA = 4; const static size_t N_CHANNELS_PER_SKIROC = 64; @@ -89,24 +88,24 @@ RawDataPlotter::RawDataPlotter(const edm::ParameterSet& iConfig) : os.str("");os<<"HexaBoard"<mkdir( os.str().c_str() ); for( size_t ichan=0; ichan(os.str().c_str(),os.str().c_str(),1000,0,4096); m_h_adcHigh.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); os.str(""); - os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; + os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_SCA" << it ; htmp1=dir.make(os.str().c_str(),os.str().c_str(),1000,0,4096); m_h_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); } if( ichan%2==0 ){ os.str(""); os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_SCA-2,0, (NUMBER_OF_SCA-2)*25,1000,0,4096); m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); os.str(""); os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),N_TIME_SAMPLES-2,0, (N_TIME_SAMPLES-2)*25,1000,0,4096); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_SCA-2,0, (NUMBER_OF_SCA-2)*25,1000,0,4096); m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); } } @@ -135,7 +134,7 @@ void RawDataPlotter::analyze(const edm::Event& event, const edm::EventSetup& set os << "Event" << event.id().event(); TFileDirectory dir = fs->mkdir( os.str().c_str() ); for(size_t ib = 0; ib(); os.str(""); os<<"HexaBoard"< rollpositions=skiroc.rollPositions(); int iboard=iski/N_SKIROC_PER_HEXA; for( size_t ichan=0; ichan8 ){ //rm on track samples+2 last time sample which show weird behaviour m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->Fill(skiroc.ADCHigh(ichan,it)); m_h_adcLow[iboard*100000+iski*10000+ichan*100+it]->Fill(skiroc.ADCLow(ichan,it)); if( ichan%2==0 ){ @@ -202,10 +201,6 @@ void RawDataPlotter::beginJob() { } -// const static size_t N_HEXABOARDS = 1; -// const static size_t N_TIME_SAMPLES = 13; -// const static size_t N_SKIROC_PER_HEXA = 4; -// const static size_t N_CHANNELS_PER_SKIROC = 64; void RawDataPlotter::endJob() { usesResource("TFileService"); @@ -219,7 +214,7 @@ void RawDataPlotter::endJob() std::ostringstream os( std::ostringstream::ate ); TH2Poly *h; for(size_t ib = 0; ib(); os.str(""); os<<"HighGain_HexaBoard"<Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); pedPolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); noisePolyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetRMS() ); @@ -283,7 +278,7 @@ void RawDataPlotter::endJob() for( size_t ichan=0; ichanGetMean() << " " << m_h_adcHigh[key]->GetRMS(); pedestalLG << " " << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS(); From c4c51f14e7a6bf5493baa9641606d6f79d8d925b Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 26 May 2017 18:27:22 +0200 Subject: [PATCH 260/297] small modif in HGCalTBRawHit.h --- DataFormats/interface/HGCalTBRawHit.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/DataFormats/interface/HGCalTBRawHit.h b/DataFormats/interface/HGCalTBRawHit.h index 59690cd..d3aa15c 100644 --- a/DataFormats/interface/HGCalTBRawHit.h +++ b/DataFormats/interface/HGCalTBRawHit.h @@ -11,13 +11,17 @@ class HGCalTBRawHit public: HGCalTBRawHit( ){;} - HGCalTBRawHit( unsigned int rawid, std::vector &adcHigh, std::vector &adcLow) : + HGCalTBRawHit( unsigned int rawid, unsigned int skiroc, unsigned int channel, std::vector &adcHigh, std::vector &adcLow) : m_rawid(rawid), + m_skiroc(skiroc), + m_channel(channel), m_adcHigh(adcHigh), m_adcLow(adcLow) {;} HGCalTBDetId detid() const {return HGCalTBDetId(m_rawid);} + unsigned int skiroc() const{return m_skiroc;} + unsigned int channel() const{return m_channel;} void setRawId(unsigned int rawid){m_rawid=rawid;} void setHighGainADCs(std::vector vec){m_adcHigh=vec;} void setLowGainADCs(std::vector vec){m_adcLow=vec;} @@ -26,6 +30,9 @@ class HGCalTBRawHit private: unsigned int m_rawid; //for some reasons (I don't know) root does not allow saving HGCalTBDetId because of some dictionary issue. + // because of non-connected channels for which we assign dummy det id, we must keep skiroc and channel here + unsigned int m_skiroc; + unsigned int m_channel; std::vector m_adcHigh; std::vector m_adcLow; }; From 3b08358e7de6d09684575590d50d256d2424d7a6 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 26 May 2017 18:28:38 +0200 Subject: [PATCH 261/297] simplify HGCalTBRawHitProducer (pedestal subtraction is not done anymore), construction of hit now ok with new HGCalTBRawHit class --- RawToDigi/plugins/HGCalTBRawHitProducer.cc | 91 ++-------------------- RawToDigi/plugins/HGCalTBRawHitProducer.h | 21 ----- 2 files changed, 5 insertions(+), 107 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.cc b/RawToDigi/plugins/HGCalTBRawHitProducer.cc index 0c7c863..50037d1 100644 --- a/RawToDigi/plugins/HGCalTBRawHitProducer.cc +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.cc @@ -3,96 +3,15 @@ HGCalTBRawHitProducer::HGCalTBRawHitProducer(const edm::ParameterSet& cfg) : - m_outputCollectionName(cfg.getParameter("OutputCollectionName")), - m_electronicMap(cfg.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt")), - m_pedestalLow_filename(cfg.getParameter("pedestalLow")), - m_pedestalHigh_filename(cfg.getParameter("pedestalHigh")) + m_outputCollectionName(cfg.getParameter("OutputCollectionName")) { m_HGCalTBSkiroc2CMSCollection = consumes(cfg.getParameter("InputCollection")); produces (m_outputCollectionName); - - HGCalCondObjectTextIO io(0); - edm::FileInPath fip(m_electronicMap); - if (!io.load(fip.fullPath(), essource_.emap_)) { - throw cms::Exception("Unable to load electronics map"); - }; - std::cout << cfg.dump() << std::endl; } void HGCalTBRawHitProducer::beginJob() { - //maybe not the correct place to start pedestal subtraction, but OK this is a try - FILE* file; - char buffer[300]; - file = fopen (m_pedestalHigh_filename.c_str() , "r"); - if (file == NULL){ perror ("Error opening pedestal high gain"); exit(1); } - else{ - while ( ! feof (file) ){ - if ( fgets (buffer , 300 , file) == NULL ) break; - pedestalChannel ped; - const char* index = buffer; - int hexaboard,skiroc,channel,ptr,nval; - nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); - if( nval==3 ){ - HGCalTBElectronicsId eid(4-skiroc+1,channel); - if (!essource_.emap_.existsEId(eid.rawId())) - ped.id = HGCalTBDetId(-1); - else - ped.id = essource_.emap_.eid2detId(eid); - //std::cout << hexaboard << " " << skiroc << " " << channel << " " ; - index+=ptr; - }else continue; - for( int ii=0; ii(10000*hexaboard+100*skiroc+channel,ped) ); - //std::cout << std::endl; - } - fclose (file); - } - - file = fopen (m_pedestalLow_filename.c_str() , "r"); - if (file == NULL){ perror ("Error opening pedestal low gain"); exit(1); } - else{ - while ( ! feof (file) ){ - if ( fgets (buffer , 300 , file) == NULL ) break; - pedestalChannel ped; - const char* index = buffer; - int hexaboard,skiroc,channel,ptr,nval,key; - nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); - if( nval==3 ){ - key=10000*hexaboard+100*skiroc+channel; - index+=ptr; - }else continue; - for( int ii=0; ii::iterator it=m_pedMap.begin(); it!=m_pedMap.end(); ++it ){ - std::cout << it->first/10000 << " " << (it->first%10000)/100 << " " << it->first%100 ; - for( int ii=0; iisecond.pedHGMean[ii] << " " << it->second.pedHGRMS[ii] ; - std::cout << std::endl; - for( int ii=0; iisecond.pedLGMean[ii] << " " << it->second.pedLGRMS[ii] ; - std::cout << std::endl; - } } void HGCalTBRawHitProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) @@ -109,11 +28,11 @@ void HGCalTBRawHitProducer::produce(edm::Event& event, const edm::EventSetup& iS std::vector adchigh; std::vector adclow; std::vector rollpositions=skiroc.rollPositions(); - for( int it=0; itpush_back(hit); } } diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.h b/RawToDigi/plugins/HGCalTBRawHitProducer.h index e676499..fee3fd3 100644 --- a/RawToDigi/plugins/HGCalTBRawHitProducer.h +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.h @@ -12,18 +12,6 @@ #include "HGCal/DataFormats/interface/HGCalTBSkiroc2CMSCollection.h" #include "HGCal/DataFormats/interface/HGCalTBDetId.h" -#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" -#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" -#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" - -//NUMBER_OF_SCA defined in HGCalTBSkiroc2CMS.h -struct pedestalChannel{ - HGCalTBDetId id; - float pedHGMean[NUMBER_OF_SCA]; - float pedLGMean[NUMBER_OF_SCA]; - float pedHGRMS[NUMBER_OF_SCA]; - float pedLGRMS[NUMBER_OF_SCA]; -}; class HGCalTBRawHitProducer : public edm::EDProducer { @@ -34,17 +22,8 @@ class HGCalTBRawHitProducer : public edm::EDProducer virtual void beginJob(); private: std::string m_outputCollectionName; - std::string m_electronicMap; - std::string m_pedestalLow_filename; - std::string m_pedestalHigh_filename; - std::map m_pedMap; //key=10000*hexa+100*chip+chan - edm::EDGetTokenT m_HGCalTBSkiroc2CMSCollection; - struct { - HGCalElectronicsMap emap_; - } essource_; - }; #endif From 8bb1d55e670dfeeba7bdadf4d5e759b14836f667 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 26 May 2017 18:29:19 +0200 Subject: [PATCH 262/297] add RawHitPlotter and modify run2017_cfg.py accordingly --- RawToDigi/plugins/RawHitPlotter.cc | 425 +++++++++++++++++++++++++++++ run2017_cfg.py | 20 +- 2 files changed, 439 insertions(+), 6 deletions(-) create mode 100644 RawToDigi/plugins/RawHitPlotter.cc diff --git a/RawToDigi/plugins/RawHitPlotter.cc b/RawToDigi/plugins/RawHitPlotter.cc new file mode 100644 index 0000000..c5a955c --- /dev/null +++ b/RawToDigi/plugins/RawHitPlotter.cc @@ -0,0 +1,425 @@ +#include +#include "TH1F.h" +#include "TH2F.h" +#include "TH2Poly.h" +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "HGCal/DataFormats/interface/HGCalTBRawHitCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" +#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" +#include "HGCal/Geometry/interface/HGCalTBTopology.h" +#include +#include + +const static size_t N_HEXABOARDS = 1; +const static size_t N_SKIROC_PER_HEXA = 4; +const static size_t N_CHANNELS_PER_SKIROC = 64; + +#define MAXVERTICES 6 +static const double delta = 0.00001;//Add/subtract delta = 0.00001 to x,y of a cell centre so the TH2Poly::Fill doesnt have a problem at the edges where the centre of a half-hex cell passes through the sennsor boundary line. + +class RawHitPlotter : public edm::one::EDAnalyzer +{ +public: + explicit RawHitPlotter(const edm::ParameterSet&); + ~RawHitPlotter(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); +private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + void InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV); + + std::string m_electronicMap; + + struct { + HGCalElectronicsMap emap_; + } essource_; + int m_sensorsize; + bool m_eventPlotter; + bool m_subtractPedestal; + bool m_subtractCommonMode; + + int m_evtID; + std::map m_h_adcHigh; + std::map m_h_adcLow; + std::map m_h_pulseHigh; + std::map m_h_pulseLow; + + edm::EDGetTokenT m_HGCalTBRawHitCollection; + + HGCalTBTopology IsCellValid; + HGCalTBCellVertices TheCell; + std::vector> CellXY; + std::pair CellCentreXY; + std::set< std::pair > setOfConnectedDetId; + std::string m_pedestalHigh_filename; + std::string m_pedestalLow_filename; + + struct pedestalChannel{ + HGCalTBDetId id; + float pedHGMean[NUMBER_OF_TIME_SAMPLES-2]; + float pedLGMean[NUMBER_OF_TIME_SAMPLES-2]; + float pedHGRMS[NUMBER_OF_TIME_SAMPLES-2]; + float pedLGRMS[NUMBER_OF_TIME_SAMPLES-2]; + }; + std::map m_pedMap; //key=10000*hexa+100*chip+chan + + struct commonModeNoise{ + commonModeNoise():fullHG(0),halfHG(0),mouseBiteHG(0),outerHG(0),fullLG(0),halfLG(0),mouseBiteLG(0),outerLG(0),fullCounter(0),halfCounter(0),mouseBiteCounter(0),outerCounter(0){;} + float fullHG,halfHG,mouseBiteHG,outerHG; + float fullLG,halfLG,mouseBiteLG,outerLG; + int fullCounter,halfCounter,mouseBiteCounter,outerCounter; + }; + +}; + +RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : + m_electronicMap(iConfig.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt")), + m_sensorsize(iConfig.getUntrackedParameter("SensorSize",128)), + m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)), + m_subtractPedestal(iConfig.getUntrackedParameter("SubtractPedestal",false)), + m_subtractCommonMode(iConfig.getUntrackedParameter("SubtractCommonMode",false)), + m_pedestalHigh_filename(iConfig.getParameter("HighGainPedestalFileName")), + m_pedestalLow_filename(iConfig.getParameter("LowGainPedestalFileName")) +{ + usesResource("TFileService"); + edm::Service fs; + + m_HGCalTBRawHitCollection = consumes(iConfig.getParameter("InputCollection")); + + m_evtID=0; + + std::ostringstream os( std::ostringstream::ate ); + TH2F* htmp2; + TH1F* htmp1; + for(size_t ib = 0; ibmkdir( os.str().c_str() ); + for( size_t ichan=0; ichan(os.str().c_str(),os.str().c_str(),1000,-500,3500); + m_h_adcHigh.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); + os.str(""); + os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; + htmp1=dir.make(os.str().c_str(),os.str().c_str(),-500,0,3500); + m_h_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); + } + os.str(""); + os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-2,0,(NUMBER_OF_TIME_SAMPLES-2)*25,1000,-500,3500); + m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); + os.str(""); + os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-2,0,(NUMBER_OF_TIME_SAMPLES-2)*25,1000,-500,3500); + m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); + } + } + } + std::cout << iConfig.dump() << std::endl; +} + + +RawHitPlotter::~RawHitPlotter() +{ + +} + +void RawHitPlotter::beginJob() +{ + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(m_electronicMap); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + + if( m_subtractPedestal ){ + FILE* file; + char buffer[300]; + file = fopen (m_pedestalHigh_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal high gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + HGCalTBElectronicsId eid(4-skiroc+1,channel); + if (!essource_.emap_.existsEId(eid.rawId())) + ped.id = HGCalTBDetId(-1); + else + ped.id = essource_.emap_.eid2detId(eid); + index+=ptr; + }else continue; + for( unsigned int ii=0; ii(10000*hexaboard+100*skiroc+channel,ped) ); + } + fclose (file); + } + + file = fopen (m_pedestalLow_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal low gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval,key; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + key=10000*hexaboard+100*skiroc+channel; + index+=ptr; + }else continue; + for( unsigned int ii=0; ii::iterator it=m_pedMap.begin(); it!=m_pedMap.end(); ++it ){ + // std::cout << it->first/10000 << " " << (it->first%10000)/100 << " " << it->first%100 ; + // for( unsigned int ii=0; iisecond.pedHGMean[ii] << " " << it->second.pedHGRMS[ii] ; + // std::cout << std::endl; + // for( unsigned int ii=0; iisecond.pedLGMean[ii] << " " << it->second.pedLGRMS[ii] ; + // std::cout << std::endl; + // } + } +} + +void RawHitPlotter::analyze(const edm::Event& event, const edm::EventSetup& setup) +{ + usesResource("TFileService"); + edm::Service fs; + + edm::Handle hits; + event.getByToken(m_HGCalTBRawHitCollection, hits); + + std::map polyMap; + if( m_eventPlotter ){ + std::ostringstream os( std::ostringstream::ate ); + os << "Event" << event.id().event(); + TFileDirectory dir = fs->mkdir( os.str().c_str() ); + for(size_t ib = 0; ib(); + os.str(""); + os<<"HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + polyMap.insert( std::pair(100*ib+it,h) ); + } + } + } + + commonModeNoise cm[NUMBER_OF_TIME_SAMPLES-2][4]; + if( m_subtractPedestal && m_subtractCommonMode ){ + for( auto hit : *hits ){ + int iboard=hit.skiroc()/N_SKIROC_PER_HEXA; + int iski=hit.skiroc(); + int ichan=hit.channel(); + if( !essource_.emap_.existsDetId(hit.detid()) ) continue; + for( size_t it=0; itFill(highGain); + m_h_adcLow[iboard*100000+iski*10000+ichan*100+it]->Fill(lowGain); + m_h_pulseHigh[iboard*1000+iski*100+ichan]->Fill(it*25,highGain); + m_h_pulseLow[iboard*1000+iski*100+ichan]->Fill(it*25,lowGain); + if( !essource_.emap_.existsDetId(hit.detid()) ) continue; + std::pair p( iboard*1000+iski*100+ichan,hit.detid() ); + setOfConnectedDetId.insert(p); + if(!IsCellValid.iu_iv_valid(hit.detid().layer(),hit.detid().sensorIU(),hit.detid().sensorIV(),hit.detid().iu(),hit.detid().iv(),m_sensorsize)) continue; + if(m_eventPlotter){ + CellCentreXY=TheCell.GetCellCentreCoordinatesForPlots(hit.detid().layer(),hit.detid().sensorIU(),hit.detid().sensorIV(),hit.detid().iu(),hit.detid().iv(),m_sensorsize); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + polyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, highGain); + } + } + } +} + +void RawHitPlotter::InitTH2Poly(TH2Poly& poly, int layerID, int sensorIU, int sensorIV) +{ + double HexX[MAXVERTICES] = {0.}; + double HexY[MAXVERTICES] = {0.}; + for(int iv = -7; iv < 8; iv++) { + for(int iu = -7; iu < 8; iu++) { + if(!IsCellValid.iu_iv_valid(layerID, sensorIU, sensorIV, iu, iv, m_sensorsize)) continue; + CellXY = TheCell.GetCellCoordinatesForPlots(layerID, sensorIU, sensorIV, iu, iv, m_sensorsize); + assert(CellXY.size() == 4 || CellXY.size() == 6); + unsigned int iVertex = 0; + for(std::vector>::const_iterator it = CellXY.begin(); it != CellXY.end(); it++) { + HexX[iVertex] = it->first; + HexY[iVertex] = it->second; + ++iVertex; + } + //Somehow cloning of the TH2Poly was not working. Need to look at it. Currently physically booked another one. + poly.AddBin(CellXY.size(), HexX, HexY); + }//loop over iu + }//loop over iv +} + + +void RawHitPlotter::endJob() +{ + usesResource("TFileService"); + edm::Service fs; + TFileDirectory dir = fs->mkdir( "HexagonalPlotter" ); + std::map pedPolyMap; + std::map pedPolyMapNC; + std::map noisePolyMap; + std::map noisePolyMapNC; + std::map chanMap; + std::ostringstream os( std::ostringstream::ate ); + TH2Poly *h; + for(size_t ib = 0; ib(); + os.str(""); + os<<"HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + pedPolyMap.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"NC_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + pedPolyMapNC.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"Noise_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + noisePolyMap.insert( std::pair(100*ib+it,h) ); + h=dir.make(); + os.str(""); + os<<"NC_Noise_HighGain_HexaBoard"<SetName(os.str().c_str()); + h->SetTitle(os.str().c_str()); + InitTH2Poly(*h, (int)ib, 0, 0); + noisePolyMapNC.insert( std::pair(100*ib+it,h) ); + } + } + + for( std::set< std::pair >::iterator it=setOfConnectedDetId.begin(); it!=setOfConnectedDetId.end(); ++it ){ + int iboard=(*it).first/1000; + int iski=((*it).first%1000)/100; + int ichan=(*it).first%100; + int ichanNC=(*it).first%100+1; + HGCalTBDetId detid=(*it).second; + CellCentreXY = TheCell.GetCellCentreCoordinatesForPlots( detid.layer(), detid.sensorIU(), detid.sensorIV(), detid.iu(), detid.iv(), m_sensorsize ); + double iux = (CellCentreXY.first < 0 ) ? (CellCentreXY.first + delta) : (CellCentreXY.first - delta) ; + double iuy = (CellCentreXY.second < 0 ) ? (CellCentreXY.second + delta) : (CellCentreXY.second - delta); + for( size_t it=0; itFill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); + pedPolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); + noisePolyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetRMS() ); + noisePolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetRMS() ); + } + } + + if( !m_subtractPedestal ){ + std::fstream pedestalHG;pedestalHG.open(m_pedestalHigh_filename,std::ios::out); + std::fstream pedestalLG;pedestalLG.open(m_pedestalLow_filename,std::ios::out); + for(size_t ib = 0; ibGetMean() << " " << m_h_adcHigh[key]->GetRMS(); + pedestalLG << " " << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS(); + } + pedestalHG << "\n" ; + pedestalLG << "\n" ; + } + } + } + pedestalHG.close(); + pedestalLG.close(); + } +} + +void RawHitPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(RawHitPlotter); diff --git a/run2017_cfg.py b/run2017_cfg.py index b5f164e..57ccb65 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -62,8 +62,8 @@ ) -pedestalHighGain="pedestalHG_"+str(options.runNumber)+".txt" -pedestalLowGain="pedestalLG_"+str(options.runNumber)+".txt" +pedestalHighGain="pedestalHG_125.txt" +pedestalLowGain="pedestalLG_125.txt" process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), @@ -76,17 +76,25 @@ process.rawhitproducer = cms.EDProducer("HGCalTBRawHitProducer", OutputCollectionName=cms.string("HGCALTBRAWHITS"), - ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), - pedestalLow=cms.string(pedestalLowGain), - pedestalHigh=cms.string(pedestalHighGain), InputCollection=cms.InputTag("source","skiroc2cmsdata") ) +process.rawhitplotter = cms.EDAnalyzer("RawHitPlotter", + InputCollection=cms.InputTag("rawhitproducer","HGCALTBRAWHITS"), + ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), + SensorSize=cms.untracked.int32(128), + EventPlotter=cms.untracked.bool(False), + SubtractPedestal=cms.untracked.bool(True), + SubtractCommonMode=cms.untracked.bool(True), + HighGainPedestalFileName=cms.string(pedestalHighGain), + LowGainPedestalFileName=cms.string(pedestalLowGain) + ) + #process.p = cms.Path( process.rawdataplotter ) -process.p = cms.Path( process.rawhitproducer ) +process.p = cms.Path( process.rawhitproducer*process.rawhitplotter ) process.end = cms.EndPath(process.output) From ab7895f6cd11aca7acece411aa95ae603a9ad316 Mon Sep 17 00:00:00 2001 From: asteencern Date: Mon, 29 May 2017 15:33:13 +0200 Subject: [PATCH 263/297] small debug in HGCalTBSkiroc2CMS.h and RawDataPlotter.cc --- DataFormats/interface/HGCalTBSkiroc2CMS.h | 2 +- RawToDigi/plugins/RawDataPlotter.cc | 33 +++++------------------ 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/DataFormats/interface/HGCalTBSkiroc2CMS.h b/DataFormats/interface/HGCalTBSkiroc2CMS.h index c117cff..23aad65 100644 --- a/DataFormats/interface/HGCalTBSkiroc2CMS.h +++ b/DataFormats/interface/HGCalTBSkiroc2CMS.h @@ -44,7 +44,7 @@ class HGCalTBSkiroc2CMS uint32_t globalTS_LSB() const { return ( (m_data.at(SKIROC_DATA_SIZE-2) & MASK_GTS_LSB)>>1 ); } public: - uint32_t globalTS()const{ return gray_to_brady( globalTS_MSB() | globalTS_LSB()); } + uint32_t globalTS()const{ return gray_to_brady( globalTS_MSB()<<12 | globalTS_LSB()); } int skirocId()const{ return (m_data.at(SKIROC_DATA_SIZE-1) & MASK_ID); } bool check(); diff --git a/RawToDigi/plugins/RawDataPlotter.cc b/RawToDigi/plugins/RawDataPlotter.cc index 73e022c..af34050 100644 --- a/RawToDigi/plugins/RawDataPlotter.cc +++ b/RawToDigi/plugins/RawDataPlotter.cc @@ -62,16 +62,11 @@ class RawDataPlotter : public edm::one::EDAnalyzer std::vector> CellXY; std::pair CellCentreXY; std::set< std::pair > setOfConnectedDetId; - std::string m_pedHighGainFileName; - std::string m_pedLowGainFileName; - }; RawDataPlotter::RawDataPlotter(const edm::ParameterSet& iConfig) : m_sensorsize(iConfig.getUntrackedParameter("SensorSize",128)), - m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)), - m_pedHighGainFileName(iConfig.getParameter("HighGainPedestalFileName")), - m_pedLowGainFileName(iConfig.getParameter("LowGainPedestalFileName")) + m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)) { usesResource("TFileService"); edm::Service fs; @@ -152,13 +147,16 @@ void RawDataPlotter::analyze(const edm::Event& event, const edm::EventSetup& set int iboard=iski/N_SKIROC_PER_HEXA; for( size_t ichan=0; ichan8 ){ //rm on track samples+2 last time sample which show weird behaviour + if( rollpositions[it]<9 ){ //rm on track samples+2 last time sample which show weird behaviour m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->Fill(skiroc.ADCHigh(ichan,it)); m_h_adcLow[iboard*100000+iski*10000+ichan*100+it]->Fill(skiroc.ADCLow(ichan,it)); if( ichan%2==0 ){ m_h_pulseHigh[iboard*1000+iski*100+ichan]->Fill( rollpositions[it]*25,skiroc.ADCHigh(ichan,it) ); m_h_pulseLow[iboard*1000+iski*100+ichan]->Fill( rollpositions[it]*25,skiroc.ADCLow(ichan,it) ); - + } + } + if( rollpositions[it]Fill(iux/2 , iuy, iski*1000+ichan ); } - std::fstream pedestalHG;pedestalHG.open(m_pedHighGainFileName,std::ios::out); - std::fstream pedestalLG;pedestalLG.open(m_pedLowGainFileName,std::ios::out); - for(size_t ib = 0; ibGetMean() << " " << m_h_adcHigh[key]->GetRMS(); - pedestalLG << " " << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS(); - } - pedestalHG << "\n" ; - pedestalLG << "\n" ; - } - } - } - pedestalHG.close(); - pedestalLG.close(); } void RawDataPlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) From aad1b38ec09cb40b22336990138e7fe73f0adc0a Mon Sep 17 00:00:00 2001 From: asteencern Date: Mon, 29 May 2017 15:35:40 +0200 Subject: [PATCH 264/297] debug unrolling time pos in HGCalTBRawHitProducer + add pedestal threshold in RawHitPlotter --- RawToDigi/plugins/HGCalTBRawHitProducer.cc | 14 +++++--- RawToDigi/plugins/RawHitPlotter.cc | 39 ++++++++++++---------- run2017_cfg.py | 4 +-- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.cc b/RawToDigi/plugins/HGCalTBRawHitProducer.cc index 50037d1..10c057e 100644 --- a/RawToDigi/plugins/HGCalTBRawHitProducer.cc +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.cc @@ -25,12 +25,16 @@ void HGCalTBRawHitProducer::produce(edm::Event& event, const edm::EventSetup& iS for( int ichan=0; ichanat(iski); unsigned int rawid=skiroc.detid(ichan).rawId(); - std::vector adchigh; - std::vector adclow; + std::vector adchigh(NUMBER_OF_SCA,0); + std::vector adclow(NUMBER_OF_SCA,0); std::vector rollpositions=skiroc.rollPositions(); - for( int it=0; itpush_back(hit); diff --git a/RawToDigi/plugins/RawHitPlotter.cc b/RawToDigi/plugins/RawHitPlotter.cc index c5a955c..0f60173 100644 --- a/RawToDigi/plugins/RawHitPlotter.cc +++ b/RawToDigi/plugins/RawHitPlotter.cc @@ -52,6 +52,7 @@ class RawHitPlotter : public edm::one::EDAnalyzer bool m_eventPlotter; bool m_subtractPedestal; bool m_subtractCommonMode; + double m_commonModeThreshold; //number of sigmas from ped mean int m_evtID; std::map m_h_adcHigh; @@ -71,10 +72,10 @@ class RawHitPlotter : public edm::one::EDAnalyzer struct pedestalChannel{ HGCalTBDetId id; - float pedHGMean[NUMBER_OF_TIME_SAMPLES-2]; - float pedLGMean[NUMBER_OF_TIME_SAMPLES-2]; - float pedHGRMS[NUMBER_OF_TIME_SAMPLES-2]; - float pedLGRMS[NUMBER_OF_TIME_SAMPLES-2]; + float pedHGMean[NUMBER_OF_TIME_SAMPLES-0]; + float pedLGMean[NUMBER_OF_TIME_SAMPLES-0]; + float pedHGRMS[NUMBER_OF_TIME_SAMPLES-0]; + float pedLGRMS[NUMBER_OF_TIME_SAMPLES-0]; }; std::map m_pedMap; //key=10000*hexa+100*chip+chan @@ -93,6 +94,7 @@ RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : m_eventPlotter(iConfig.getUntrackedParameter("EventPlotter",false)), m_subtractPedestal(iConfig.getUntrackedParameter("SubtractPedestal",false)), m_subtractCommonMode(iConfig.getUntrackedParameter("SubtractCommonMode",false)), + m_commonModeThreshold(iConfig.getUntrackedParameter("CommonModeThreshold",3)), m_pedestalHigh_filename(iConfig.getParameter("HighGainPedestalFileName")), m_pedestalLow_filename(iConfig.getParameter("LowGainPedestalFileName")) { @@ -111,7 +113,7 @@ RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : os.str("");os<<"HexaBoard"<mkdir( os.str().c_str() ); for( size_t ichan=0; ichan(os.str().c_str(),os.str().c_str(),1000,-500,3500); @@ -123,11 +125,11 @@ RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : } os.str(""); os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-2,0,(NUMBER_OF_TIME_SAMPLES-2)*25,1000,-500,3500); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,1000,-500,3500); m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); os.str(""); os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-2,0,(NUMBER_OF_TIME_SAMPLES-2)*25,1000,-500,3500); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,1000,-500,3500); m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); } } @@ -169,7 +171,7 @@ void RawHitPlotter::beginJob() ped.id = essource_.emap_.eid2detId(eid); index+=ptr; }else continue; - for( unsigned int ii=0; ii::iterator it=m_pedMap.begin(); it!=m_pedMap.end(); ++it ){ // std::cout << it->first/10000 << " " << (it->first%10000)/100 << " " << it->first%100 ; - // for( unsigned int ii=0; iisecond.pedHGMean[ii] << " " << it->second.pedHGRMS[ii] ; // std::cout << std::endl; - // for( unsigned int ii=0; iisecond.pedLGMean[ii] << " " << it->second.pedLGRMS[ii] ; // std::cout << std::endl; // } @@ -234,7 +236,7 @@ void RawHitPlotter::analyze(const edm::Event& event, const edm::EventSetup& setu os << "Event" << event.id().event(); TFileDirectory dir = fs->mkdir( os.str().c_str() ); for(size_t ib = 0; ib(); os.str(""); os<<"HexaBoard"<m_commonModeThreshold*m_pedMap[10000*iboard+100*iski+ichan].pedHGRMS[it] ) continue; float highGain = hit.highGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[it]; float lowGain = hit.lowGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedLGMean[it]; switch ( hit.detid().cellType() ){ @@ -269,7 +272,7 @@ void RawHitPlotter::analyze(const edm::Event& event, const edm::EventSetup& setu int iboard=hit.skiroc()/N_SKIROC_PER_HEXA; int iski=hit.skiroc(); int ichan=hit.channel(); - for( size_t it=0; it(); os.str(""); os<<"HighGain_HexaBoard"<Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetMean() ); pedPolyMapNC[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichanNC*100+it]->GetMean() ); noisePolyMap[ 100*iboard+it ]->Fill(iux/2 , iuy, m_h_adcHigh[iboard*100000+iski*10000+ichan*100+it]->GetRMS() ); @@ -400,7 +403,7 @@ void RawHitPlotter::endJob() for( size_t ichan=0; ichanGetMean() << " " << m_h_adcHigh[key]->GetRMS(); pedestalLG << " " << m_h_adcLow[key]->GetMean() << " " << m_h_adcLow[key]->GetRMS(); diff --git a/run2017_cfg.py b/run2017_cfg.py index 57ccb65..dd3c9a9 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -67,10 +67,8 @@ process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), - EventPlotter=cms.untracked.bool(False), + EventPlotter=cms.untracked.bool(True), InputCollection=cms.InputTag("source","skiroc2cmsdata"), - HighGainPedestalFileName=cms.string(pedestalHighGain), - LowGainPedestalFileName=cms.string(pedestalLowGain) ) process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event From cbeee0f2cf640d2a90500e5bca17dea49c56872a Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 30 May 2017 10:33:11 +0200 Subject: [PATCH 265/297] minor debug in RawHitPlotter and HGCalTBRawHit.h --- DataFormats/interface/HGCalTBRawHit.h | 2 +- RawToDigi/plugins/RawHitPlotter.cc | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/DataFormats/interface/HGCalTBRawHit.h b/DataFormats/interface/HGCalTBRawHit.h index d3aa15c..55ebd67 100644 --- a/DataFormats/interface/HGCalTBRawHit.h +++ b/DataFormats/interface/HGCalTBRawHit.h @@ -26,7 +26,7 @@ class HGCalTBRawHit void setHighGainADCs(std::vector vec){m_adcHigh=vec;} void setLowGainADCs(std::vector vec){m_adcLow=vec;} float highGainADC(int timeSample){return m_adcHigh.at(timeSample);} - float lowGainADC(int timeSample){return m_adcHigh.at(timeSample);} + float lowGainADC(int timeSample){return m_adcLow.at(timeSample);} private: unsigned int m_rawid; //for some reasons (I don't know) root does not allow saving HGCalTBDetId because of some dictionary issue. diff --git a/RawToDigi/plugins/RawHitPlotter.cc b/RawToDigi/plugins/RawHitPlotter.cc index 0f60173..15629cb 100644 --- a/RawToDigi/plugins/RawHitPlotter.cc +++ b/RawToDigi/plugins/RawHitPlotter.cc @@ -120,7 +120,7 @@ RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : m_h_adcHigh.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); os.str(""); os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; - htmp1=dir.make(os.str().c_str(),os.str().c_str(),-500,0,3500); + htmp1=dir.make(os.str().c_str(),os.str().c_str(),1000,-500,3500); m_h_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); } os.str(""); @@ -164,7 +164,13 @@ void RawHitPlotter::beginJob() int hexaboard,skiroc,channel,ptr,nval; nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); if( nval==3 ){ - HGCalTBElectronicsId eid(4-skiroc+1,channel); + HGCalTBElectronicsId eid; + switch( skiroc ){ + case 0 : eid=HGCalTBElectronicsId( 1, channel);break; + case 1 : eid=HGCalTBElectronicsId( 4, channel);break; + case 2 : eid=HGCalTBElectronicsId( 3, channel);break; + case 3 : eid=HGCalTBElectronicsId( 2, channel);break; + } if (!essource_.emap_.existsEId(eid.rawId())) ped.id = HGCalTBDetId(-1); else From 44bea199cc480049d62d23f45e5929ecf9cb4084 Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 30 May 2017 12:58:02 +0200 Subject: [PATCH 266/297] add PulseShapePlotter --- RawToDigi/plugins/PulseShapePlotter.cc | 243 +++++++++++++++++++++++++ run2017_cfg.py | 29 +-- 2 files changed, 258 insertions(+), 14 deletions(-) create mode 100644 RawToDigi/plugins/PulseShapePlotter.cc diff --git a/RawToDigi/plugins/PulseShapePlotter.cc b/RawToDigi/plugins/PulseShapePlotter.cc new file mode 100644 index 0000000..3fc421d --- /dev/null +++ b/RawToDigi/plugins/PulseShapePlotter.cc @@ -0,0 +1,243 @@ +#include +#include "TH1F.h" +#include "TH2F.h" +#include "TH2Poly.h" +#include +#include +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" + +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "HGCal/DataFormats/interface/HGCalTBRawHitCollection.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" +#include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" + +#include +#include + +const static size_t N_HEXABOARDS = 1; +const static size_t N_SKIROC_PER_HEXA = 4; +const static size_t N_CHANNELS_PER_SKIROC = 64; + +class PulseShapePlotter : public edm::one::EDAnalyzer +{ +public: + explicit PulseShapePlotter(const edm::ParameterSet&); + ~PulseShapePlotter(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); +private: + virtual void beginJob() override; + void analyze(const edm::Event& , const edm::EventSetup&) override; + virtual void endJob() override; + + std::string m_electronicMap; + struct { + HGCalElectronicsMap emap_; + } essource_; + double m_commonModeThreshold; //number of sigmas from ped mean + + int m_evtID; + edm::EDGetTokenT m_HGCalTBRawHitCollection; + + std::string m_pedestalHigh_filename; + std::string m_pedestalLow_filename; + + struct pedestalChannel{ + HGCalTBDetId id; + float pedHGMean[NUMBER_OF_TIME_SAMPLES]; + float pedLGMean[NUMBER_OF_TIME_SAMPLES]; + float pedHGRMS[NUMBER_OF_TIME_SAMPLES]; + float pedLGRMS[NUMBER_OF_TIME_SAMPLES]; + }; + std::map m_pedMap; //key=10000*hexa+100*chip+chan + + struct commonModeNoise{ + commonModeNoise():fullHG(0),halfHG(0),mouseBiteHG(0),outerHG(0),fullLG(0),halfLG(0),mouseBiteLG(0),outerLG(0),fullCounter(0),halfCounter(0),mouseBiteCounter(0),outerCounter(0){;} + float fullHG,halfHG,mouseBiteHG,outerHG; + float fullLG,halfLG,mouseBiteLG,outerLG; + int fullCounter,halfCounter,mouseBiteCounter,outerCounter; + }; + +}; + +PulseShapePlotter::PulseShapePlotter(const edm::ParameterSet& iConfig) : + m_electronicMap(iConfig.getUntrackedParameter("ElectronicMap","HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt")), + m_commonModeThreshold(iConfig.getUntrackedParameter("CommonModeThreshold",3)), + m_pedestalHigh_filename(iConfig.getParameter("HighGainPedestalFileName")), + m_pedestalLow_filename(iConfig.getParameter("LowGainPedestalFileName")) +{ + m_HGCalTBRawHitCollection = consumes(iConfig.getParameter("InputCollection")); + m_evtID=0; + std::cout << iConfig.dump() << std::endl; +} + + +PulseShapePlotter::~PulseShapePlotter() +{ + +} + +void PulseShapePlotter::beginJob() +{ + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(m_electronicMap); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + FILE* file; + char buffer[300]; + file = fopen (m_pedestalHigh_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal high gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + HGCalTBElectronicsId eid(4-skiroc+1,channel); + if (!essource_.emap_.existsEId(eid.rawId())) + ped.id = HGCalTBDetId(-1); + else + ped.id = essource_.emap_.eid2detId(eid); + index+=ptr; + }else continue; + for( unsigned int ii=0; ii(10000*hexaboard+100*skiroc+channel,ped) ); + } + fclose (file); + } + + file = fopen (m_pedestalLow_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal low gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval,key; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + key=10000*hexaboard+100*skiroc+channel; + index+=ptr; + }else continue; + for( unsigned int ii=0; ii fs; + std::map hMapHG,hMapLG; + std::ostringstream os( std::ostringstream::ate ); + os << "Event" << event.id().event(); + TFileDirectory dir = fs->mkdir( os.str().c_str() ); + for(size_t ib = 0; ib(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES,0,NUMBER_OF_TIME_SAMPLES*25); + hMapHG.insert( std::pair(1000*ib+100*is+ic,hHG) ); + os.str(""); + os<<"HexaBoard"<(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES,0,NUMBER_OF_TIME_SAMPLES*25); + hMapLG.insert( std::pair(1000*ib+100*is+ic,hLG) ); + } + } + } + + edm::Handle hits; + event.getByToken(m_HGCalTBRawHitCollection, hits); + + commonModeNoise cm[NUMBER_OF_TIME_SAMPLES-0][4]; + for( auto hit : *hits ){ + int iboard=hit.skiroc()/N_SKIROC_PER_HEXA; + int iski=hit.skiroc(); + int ichan=hit.channel(); + if( !essource_.emap_.existsDetId(hit.detid()) ) continue; + for( size_t it=0; itm_commonModeThreshold*m_pedMap[10000*iboard+100*iski+ichan].pedHGRMS[it] ) continue; + float highGain = hit.highGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[it]; + float lowGain = hit.lowGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedLGMean[it]; + switch ( hit.detid().cellType() ){ + case 0 : cm[it][iski].fullHG += highGain; cm[it][iski].fullLG += lowGain; cm[it][iski].fullCounter++; break; + case 2 : cm[it][iski].halfHG += highGain; cm[it][iski].halfLG += lowGain; cm[it][iski].halfCounter++; break; + case 3 : cm[it][iski].mouseBiteHG += highGain; cm[it][iski].mouseBiteLG += lowGain; cm[it][iski].mouseBiteCounter++; break; + case 4 : cm[it][iski].outerHG += highGain; cm[it][iski].outerLG += lowGain; cm[it][iski].outerCounter++; break; + } + } + } + + for( auto hit : *hits ){ + int iboard=hit.skiroc()/N_SKIROC_PER_HEXA; + int iski=hit.skiroc(); + int ichan=hit.channel(); + if( essource_.emap_.existsDetId(hit.detid()) ){ + for( size_t it=0; itFill(25*it,highGain); + hMapLG[1000*iboard+100*iski+ichan]->Fill(25*it,lowGain); + } + } + } + m_evtID++; +} + +void PulseShapePlotter::endJob() +{ +} + +void PulseShapePlotter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) +{ + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(PulseShapePlotter); diff --git a/run2017_cfg.py b/run2017_cfg.py index dd3c9a9..c7aa1d4 100644 --- a/run2017_cfg.py +++ b/run2017_cfg.py @@ -6,8 +6,6 @@ options = VarParsing.VarParsing('standard') # avoid the options: maxEvents, files, secondaryFiles, output, secondaryOutput because they are already defined in 'standard' #Change the data folder appropriately to where you wish to access the files from: options.register('dataFolder', - #'./', - #'/afs/cern.ch/work/a/asteen/public/data/may2017/raw', '/afs/cern.ch/work/b/barneyd/public/data_May_2017/disk2_2TB/eudaq_data', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, @@ -17,16 +15,16 @@ 850, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, - 'Input file to process') + 'Input run to process') options.register('outputFolder', '/afs/cern.ch/work/a/asteen/public/data/may2017/', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - 'Result of processing') + 'Output folder where analysis output are stored') options.maxEvents = -1 -options.output = "toto.root" +options.output = "cmsswEvents.root" options.parseArguments() print options @@ -40,13 +38,10 @@ ) #################################### -#process.load('HGCal.StandardSequences.RawToDigi_cff') process.source = cms.Source("HGCalTBRawDataSource", - #FilePath=cms.untracked.string(options.dataFolder), - #FileName=cms.untracked.string("file:HexaData_Run00%d.raw"%(options.runNumber)), ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), - fileNames=cms.untracked.vstring("file:%s/HexaData_Run%04d.raw"%(options.dataFolder,options.runNumber)), + fileNames=cms.untracked.vstring("file:%s/HexaData_Run%04d.raw"%(options.dataFolder,options.runNumber)),#the current version can handle only one file OutputCollectionName=cms.untracked.string("skiroc2cmsdata"), NOrmBoards=cms.untracked.uint32(1), NHexaBoards=cms.untracked.uint32(1), @@ -55,7 +50,7 @@ NumberOf32BitsWordsPerReadOut=cms.untracked.uint32(30788) ) -process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/toto_%d.root"%(options.outputFolder,options.runNumber))) +process.TFileService = cms.Service("TFileService", fileName = cms.string("%s/HexaOutput_%d.root"%(options.outputFolder,options.runNumber))) process.output = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string(options.output) @@ -67,7 +62,7 @@ process.rawdataplotter = cms.EDAnalyzer("RawDataPlotter", SensorSize=cms.untracked.int32(128), - EventPlotter=cms.untracked.bool(True), + EventPlotter=cms.untracked.bool(False), InputCollection=cms.InputTag("source","skiroc2cmsdata"), ) process.content = cms.EDAnalyzer("EventContentAnalyzer") #add process.content in cms.Path if you want to check which collections are in the event @@ -82,18 +77,24 @@ ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), SensorSize=cms.untracked.int32(128), EventPlotter=cms.untracked.bool(False), - SubtractPedestal=cms.untracked.bool(True), - SubtractCommonMode=cms.untracked.bool(True), + SubtractPedestal=cms.untracked.bool(False), + SubtractCommonMode=cms.untracked.bool(False), HighGainPedestalFileName=cms.string(pedestalHighGain), LowGainPedestalFileName=cms.string(pedestalLowGain) ) +process.pulseshapeplotter = cms.EDAnalyzer("PulseShapePlotter", + InputCollection=cms.InputTag("rawhitproducer","HGCALTBRAWHITS"), + ElectronicMap=cms.untracked.string("HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt"), + HighGainPedestalFileName=cms.string(pedestalHighGain), + LowGainPedestalFileName=cms.string(pedestalLowGain) + ) #process.p = cms.Path( process.rawdataplotter ) process.p = cms.Path( process.rawhitproducer*process.rawhitplotter ) +#process.p = cms.Path( process.rawdataplotter*process.rawhitproducer*process.rawhitplotter*process.pulseshapeplotter ) process.end = cms.EndPath(process.output) -#help(process) From ce4314398447c1663bd11ef51ab389079075cd13 Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 30 May 2017 17:00:12 +0200 Subject: [PATCH 267/297] Update README.md --- README.md | 630 ++---------------------------------------------------- 1 file changed, 21 insertions(+), 609 deletions(-) diff --git a/README.md b/README.md index f1cd06e..fe80eb6 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,19 @@ CMS HGCal Testbeam Analysis Framework ============================================= +* This new branch is to be used for analysing data from 2017 test beam. +* The code runs with the one layer data, and will probably need (major) updates when we will have more layers. +* This readme assumes one layer data. +* The README.md in other branches contain useful information about 2016 test beam analysis which might be still useful. ### Content - [Download the code](#download-the-code) - [Location of data files](#location-of-data-files) +- [Content of the code](#content-of-the-code) - [Running the code](#running-the-code) -- [positionResolution branch](#positionresolution-branch) - - [TextInput Plugin](#textinput-plugin) - - [GenSim to RecHit Converter](#gensim-to-rechit-converter) - - [HGCalTBRecHitProducer](#hgcaltbrechitproducer) - - [PositionResolutionAnalyzer](#positionresolutionanalyzer) - - [MillepedeBinaryWriter](#millepedebinarywriter) - - [Helper Classes](#helper-classes) - - [Steering files](#steering-files) - - [Run Commands](#run-commands) - [More information](#more-information) - - ## Download the code * CMSSW Version 8.0.1 @@ -29,7 +23,7 @@ CMS HGCal Testbeam Analysis Framework >> cmsenv >> git cms-init >> git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/ ->> git checkout FNAL_TB_4Layers +>> git checkout CERN_TestBeam_2017 >> git pull >> scram b -j16 ``` @@ -37,607 +31,25 @@ CMS HGCal Testbeam Analysis Framework ## Location of data files #### Raw data files -The RAW files can be found in **`/afs/cern.ch/user/r/rchatter/public/FNAL_TB_May/FNAL_TB_May_4Module_Runs`**. -This is structured by beam type and for the Electrons further by the energy of the electron beam. - -#### Electronics map and pedestal files -* The EMAP for this run **`map_FNAL_Layer1234.txt`** can be found in CondObjects/data -The event average pedestal files for both low and high gain can be found in -**`Ped_LowGain_M1254.txt`** and **`Ped_HighGain_M1254.txt`** also in **`CondObjects/data`**. -* The information of the EMAP is needed by the framework when producing the digis from the -RAW and is provided in the file **`RawToDigi/python/hgcaltbdigis_cfi.py`**. -It is also needed in analysis code if a conversion from Detector Id to Electronics Id is needed. -* May refer to the example **`RawToDigi/plugins/DigiPlotter.cc`** . In the **`EndJob()`** function of this same -code the format needed in which the pedestal files are to be written out can be found. -* The Pedestal information is needed in the step from Digis to Reco. And it is provided from -**`Reco/python/hgcaltbrechitproducer_cfi.py`**. - -## Running the code -* In **`test_cfg.py`** the RAW data file to be run is to be provides in the line: - -```python -process.source = -cms.Source("HGCalTBTextSource", - run=cms.untracked.int32(1), - fileNames=cms.untracked.vstring("file:FNAL_TB_May_4Module_Runs/PED/HGC_Output_1600.txt") -) -``` - -* In **`cms.Path`**: -**`process.hgcaltbdigis`** produces digis and **`process.hgcaltbrechits`** produces the rechits. The analyzer to be run can come after this. There are a few provided: -**`RawToDigi/plugins/DigiPlotter.cc`** to generate the pedestals -**`Reco/plugins/RecHitPlotter_HighGain_Correlation_CM.cc`** for the noise studies starting from pedestal subtracted digis. - -* The output root file name is set in: - -```python -process.TFileService = cms.Service("TFileService", fileName = cms.string("HGC_Output_1600_Reco.root") ) -``` - -#### Event-based reconstruction -```bash -sh scripts/rearrangeTxtFile.sh input.txt ->> CERN raw data rearranged in /eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/ ->> cmsRun test_cfg_newEB.py chainSequence=6 pedestalsHighGain=CondObjects/data/Ped_HighGain_L8.txt pedestalsLowGain=CondObjects/data/Ped_LowGain_L8.txt runNumber=930 configuration=2 runType=HGCRun ->> chainSequence= ->> test_cfg_newEB.py to load the reqarranged .txt: --> mount eos --> options.register('dataFolder','~/eos/cms/store/group/upgrade/HGCAL/TestBeam/CERN/Sept2016/',.... -``` - -#### Overview of analysis configurations -* **`chainSequence=1`** Runs on Digis produces pedestal files in the path specifienfied under pedestalsHighGain and pedestalsLowGain -* **`chainSequence=4`** Runs event Display analyzer -* **`chainSequence=5`** Runs on Recos for each cell of the detector across layers. Use for pion, muon and pedestal run. Correlation across cells as implemented by Kai-Yu are evaluated. -* **`chainSequence=6`** to run **`Layer_Sum_Analyzer`**: Evaluates for each layer as well as summed across layers: Max hit, Max hit + 6 nearest neighbours(7 cells), 19 cells and All cells --- **with each cell picked subject to a 2 MIP cut**. Results are available considering only the energy deposited in Silicon, and with dE/dx weights to recover the total energy deposited in the absorbers and the silicon sensors. - -* **`configuration=-1`** ADCtoMIP for CERN (0 = ADCtoMIP for FNAL) -* **`configuration=1`** (2) to select weights for 5X0 (25X0) 8 layers cern runs - -## PositionResolution branch - -### TextInput Plugin -The `HGCalTextSource` plugin has been modified to cope with the analysis of multiple runs / data files per execution. Except for the removed veto on `Danger=true` events, downward compatibility is granted. Application of the `BadSpillFilter` plugin should restore the compatibility. -The usage of the new features is optional. Besides the usual data readout, this plugin also adds a `RunData` collection: - -```c++ -produces("RunData"); -``` -to the event, such that the information on beam energies, run numbers, ... is available for all subsequent plugins in the chain on an event-basis. Furthermore, MWC data are read and put to the event as `HGCalTBMultiWireChamberData`: - -```c++ -produces("MultiWireChambers"); -``` -Hereby, it is assumed that the reconstructed coordinates are given in [mm]. - - __**Options:**__ - -* **`fileNames`**: Array of file paths to be processed in that execution. Before, the plugin could only deal with one file at a time. If the paths to files are indicated, `runData` objects obtain dummy values. -* **`nSpills`**: Number of spills to be processed before the read-out is stopped. The spill number is read from the .txt files such that the according variable is reset for each file. -* **`runEnergyMapFile`**: Path to the configuration file that defines the mapping between the run numbers, H4DAQ run numbers, the appropriate beam momenta (labeled 'energy'), the run type (e.g. electron, muon, ...) and the setup configuration (e.g. 1, 2). An exemplary mapping file is added to `CondObjects/Data/runEnergiesPositionResolution.txt`. Missing H4 runs, i.e. such that do not have 6000 events, are marked by `xxx`. If ```python fileNames=cms.untracked.vstring(["file:DUMMY"])``` is set, the plugin reads the runs that are defined in this file. Otherwise, the **`fileNames`** has preference. -* **`inputPathFormat`**: Generic format of the path to the run data files. The setting of this parameter is obligatory if the read-out with the **`runEnergyMapFile`** is aimed. The placeholder for the run number is ``. Up to five zeros are added to the run string, e.g. run=1 corresponds to 000001. -In summary, an exemplary setting could be: - -```python -inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.dataFolder) -``` - -* **`MWCInputPathFormat`**: Similar to **`inputPathFormat`**. Zeros are not added to the run number string. Example: - -```python -inputPathFormat=cms.untracked.string("file:%s/HGCRun_Output_.txt"%options.dataFolder) -``` - -* **`readOnlyRuns`**: Array of run numbers to choose only a subset of runs for the processing. Those runs must be defined in the `runEnergyMapFile`. -* **`mwcRotation`**: Initial rotation of the multi-wire chamber coordinate system in degrees. The original coordinate information from the H4-files are rotated counter-clockwise along the z-axis after the readout. Set to 270 degrees in the position resolution analysis. -* **`mwc2DeltaX`**: Translation of the second multi-wire chamber with respect to the first one in x-direction AFTER the initial rotation. Set to zero in the position resolution analysis. -* **`mwc2DeltaY`**: Translation of the second multi-wire chamber with respect to the first one in y-direction AFTER the initial rotation. Set to zero in the position resolution analysis. +* The RAW files can be found in **`/afs/cern.ch/work/b/barneyb/public/data_May_2017/disk2_2TB/eudaq_data`**. +#### Electronics map +* The EMAP for this run **`map_CERN_Hexaboard_OneLayers_May2017.txt`** can be found in CondObjects/data +## Content of the code +* The data are read using the EDProducer in **`RawToDigi/plugins/HGCalTBRawDataSource.cc(.h)`**. The data are rearranged to recreate the Skiroc2CMS raw data map (Skiroc2CMS information: [https://cms-docdb.cern.ch/cgi-bin/DocDB/ShowDocument?docid=13121](https://cms-docdb.cern.ch/cgi-bin/DocDB/ShowDocument?docid=13121)). The object storing those data is defined in **`DataFormats/interface/HGCalTBSkiroc2CMS.h`**. This producer is creating a collection of these objects. With the one layer data, the size of the collection should be 4 (4 Skiroc2CMS chips per layer). +* An example of EDAnalyzer, reading the collection of **`HGCalTBSkirocCMS`** is available in **`RawToDigi/plugins/RawDataPlotter.cc`**. It produces a root file output with basic histograms: high/low gain ADC distribution for all channels for all SCA, high/low gain as a function of the time for all channels, plots of mean and stdev of ADC distribution using hexagonal geometry. There is also an option to set to **`True`** to create event displays (One display per time sample). When the event display option is set, the code is slown down quite a lot, so my advice is to run only on few events. +* Another EDProducer **`RawToDigi/plugins/HGCalTBRawHitProducer.cc(.h)`** transforms the data format (HGCalTBSkiroc2CMS) into a digi format defined in **`DataFormats/interface/HGCalTBRawHit.h`** and stores collection these raw hits (the size of the collection should correspond to the number of channels = 4\*64 ). +* The EDAnalyzer **`RawToDigi/plugins/RawHitPlotter.cc`** analyzes the collection of HGCalTBRawHit. It creates the same kind of plots as in RawDataPlotter (high/low gain ADC distribution for each time sample, versus time sample, event display). It also creates 2 .txt files, containing high (resp. low) gain pedestal mean and standard deviation for each channel, for each time sample. Two other options are available to run with pedestal subtraction (please check that the pedestal files are alreday created) and to run with common mode evaluation and subtraction. +* The EDAnalyzer **`RawToDigi/plugins/PulseShapePlotter`** reads the collection of HGCalTBRawHit, perform the pedestal subtraction (pedestal files are mandatory) and the common mode subtraction. It creates for each event, for each channel two histograms (high/low gain) of ADC counts as a function of the time. When signals are high enough, one should be able to see pulse shapes. -### GenSim to RecHit Converter -This plugin reads the simulated simulated data formats and converts the information into **`HGCalTBRecHit`** collections. Multi-wire chamber data are faked using the xBeam and yBeam branch of the input trees. Their distance w.r.t. the first module is hard-coded. -(x,y) position information of the cells are computed from the cell IDs as they are placed in the Geant4 simulation. So far, only the sensors with `133 cells` are implemented. Energies are converted from GeV to MIPs to ADC using the identical conversion factors in data. -Smearing effects in the fake MWC measurements and the noise have appropriate parameters. - - __**Options:**__ - - * **`OutputCollectionName`**: Name of the HGCalTBRecHit collection that is put to the event. - * **`fileNames`**: See description of TextInput plugin. - * **`e_mapFile_CERN`**: Electronics mapping file to perform the matching of the cell IDs to the hypothetical skiRocs on which MIP to ADC conversions depend. - * **`runEnergyMapFile`**: See description of TextInput plugin. Since MWCs are faked and do not have their own files, according mapping files contain only four (instead of five) columns. An example is shown in `CondObjects/Data/runEnergiesPositionResolutionSimulation.txt`. - - * **`inputPathFormat`**: See description of the TextInput plugin. Paths to simulated files are assumed to have a placeholder for the simulated energy and a file index (=`run`). Therefore, an example is: - -```python -inputPathFormat=cms.untracked.string("file:%s/GeV/TBGenSim_.root"%(options.dataFolder)) -``` - - * **`energyNoise`**: Energy noise that is added to the energy per cell. This parameter represents the mean value of a Gaussian in MIP unit from which the additional summands are diced. The parameter is set to zero in the position resolution analysis. - * **`energyNoiseResolution`**: Energy noise that is added to the energy per cell. This parameter represents the RMS of a Gaussian in MIP unit from which the additional summands are diced. The parameter is set to zero in the position resolution analysis. Thus, no energy smearing is applied. - * **`MWCSmearingResolution`**: Resolution of the multi-wire chamber fake measurements. The coordinates are smeared by a Gaussian centered at zero with width `MWCSmearingResolution` (in microns). - - -### HGCalTBRecHitProducer -* HGCalTBRecHits have the cell center coordinates as additional members `cellCenter_x`, `cellCenter_y`. -* The center's coordinates are set in this producer (lines 99 ff.) or in the `HGCalTBGenSimSource` plugin to grant a common interface for the position retrieval in the next steps. - - -### PositionResolutionAnalyzer -Plugin that reconstructs impact positions of the incident particles for each layer, extra- or interpolates them and computes the differences of both approaches. Both the reconstruction and the inter-/extrapolation schemes are configurable. Output of this plugin is a ROOT TTree (name: `deviations`) with information on the layerIndex, the impacts positions in x&y, the deviations to the reference, ... (see lines 351 ff in `Position_Resolution_Analyzer.cc`). -Z-positioning of the layers along the beam line in cm and radiation length is hard-coded. - -In principle, the procedure can be segmented into the following: - -1. Loop through the `recHits`. Instantiate `sensor` objects, fill them with `recHits`. Alignment parameters are set if available. -2. Subtract the common mode noise for each layer (=`sensor`). -3. Reconstruction of the impact position for each layer. -4. Compute electron tracks using either the multi-wire chambers (extrapolation) or the impact positions from the stack ignoring the layer under investigation (interpolation). Implemented track models are straight lines (preferred, chosen model) and general broken lines (deprecated, since electron-induced shower axis' scattering angle cannot be computed trivially after certain raditiation lengths). -5. Calculation of deviations and writing to the output tree once per layer and event. - - __**Framework Options:**__ - -* **`RUNDATA`**: Input tag to the RunData collection. Name is fixed in the read-out plugins. E.g. - -```python -RUNDATA = cms.InputTag("source","RunData","unpack" ) -``` - -* **`MWCHAMBERS`**: Input tag to the multi-wire chambers collection. Name is fixed in the read-out plugins. E.g. - -```python -MWCHAMBERS = cms.InputTag("source","MultiWireChambers","unpack" ) -``` - -* **`HGCALTBRECHITS`**: Input tag to the recHits collection. E.g. - -```python -HGCALTBRECHITS = cms.InputTag("hgcaltbrechits","","unpack" ) -``` - -* **`HGCALTBCLUSTERS`**: Input tag to the cluster collection. E.g. - -```python -HGCALTBCLUSTERS = cms.InputTag("hgcaltbclusters","","unpack" ) -``` - -* **`HGCALTBCLUSTERS7`**: Input tag to the cluster (with seven closest cells) collection. E.g. - -```python -HGCALTBCLUSTERS7 = cms.InputTag("hgcaltbclusters","7","unpack" ) -``` - -* **`HGCALTBCLUSTERS19`**: Input tag to the cluster (with 19 closest cells) collection. E.g. - -```python -HGCALTBCLUSTERS19 = cms.InputTag("hgcaltbclusters","19","unpack" ) -``` - -* **`e_mapFile_CERN`**: Electronics mapping file to perform the matching of the cell IDs to the hypothetical skiRocs on which MIP to ADC conversions depend. - - __**Experimental Setup Options:**__ - -* **`layers_config`**: Index of the layer configuration (1: CERN <15 X0, 2: CERN <25X0). `Default: 1`. -* **`nLayers`**: Number of sensors/layers in the setup. `Default: 8`. -* **`SensorSize`**: Size of the sensors in terms of number of cells. `Supported: 133`. -* **`ADC_per_MIP`**: MIP to ADC conversion factors for each of the 2x8 skirocs. Example: - -```python -ADC_per_MIP = cms.vdouble([17.31, 17.12, 16.37, 17.45, 17.31, 16.98, 16.45, 16.19, 17.55, 17.19, 16.99, 17.92, 15.95, 16.64, 16.79, 15.66]) -``` - -* **`pedestalThreshold`**: Threshold in MIP unit to specify the boundary under which cell energy deposits are included in the common mode noise calculation and subsequent subtraction. `Default: 2`. -* **`alignmentParameterFiles`**: Array of paths to alignment files. The content of such files must follow the format as dictated by the `millepede` program. The parameter files are matched to each run. For this purpose, the path to the corresponding alignment parameter file must contain the substring `RUN__`. Otherwise, i.e. if not available, values are assumed to be zero (=no alignment). The functionality of the readout is implemented in `Reco/src/PositionResolutionHelpers.cc`. - - __**Reconstruction Options:**__ - - * **`considerationMethod`**: Specifies the set of cells that are considered in the impact position reconstruction for each layer. `all`, `closest7` (=one ring around the cell with highest energy deposit), `closest19`(=two rings) as well as the cells from the clustering algorithm (`clustersAll`, `clusters7`, `clusters19`) can be specified. `Default: closest19`. - * **`weightingMethod`**: Specifies the weighting formula for the impact position reconstruction. Besides a logarithmic weightig scheme, linear and squared energy schemes are implemented. `Default: logWeighting_3.5_1.0`. - - __**Reference Options:**__ - - * **`useMWCReference`**: Boolean flag indicating if multi-wire chamber extrapolation of HGCal stack interpolation is used as reference for the impact position. - * **`fittingMethod`**: Corresponds to the track model of the electron shower's trajectory. Implemented are a straight line computed through an analytic chi2 minimisation (`lineAnalytical`), polynomial fits up to degree three using ROOT's minimisation (e.g. `pol3TGraphErrors`) and General Broken lines using the GBL core functions that are available in cmssw (`gblTrack`). The position resolution analysis makes exclusive use of the `lineAnalytical`. - * **`fitPointWeightingMethod`**: Rescaling scheme of errors on the reconstructed impact positions prior to the reference computation. This way, inaccurate positions, e.g. through uniform energy distribution across all cells in one layers, have less influence on the track fit. This procedure has been found to have no significant impact on the results. Therefore, the default configuration is `none`. - - - - -### MillepedeBinaryWriter -This plugin is very similar to the PositionResolutionAnalyzer as it also reconstructs impact positions and compares those references. -Yet, the output is not a voluminous ROOT TTree but a binary file that is subsequently input to the alignment procedure using `Millepede`. -Thus, the main difference is the track model derivation which is either done using the two MWCs in front (extrapolation) or all eight HGC stack layers only (for interpolation). Besides the residuals, their local derivatives w.r.t. the alignment parameters are computed and written to the binary file. [Link to the millepde manual.](http://www.desy.de/~blobel/Mptwo.pdf) - -__**Options:**__ - -* **Same as for the PositionResolutionAnalyzer** - -__**Additional options: Quality cuts:**__ - -* **`totalEnergyThreshold`**: Energy threshold in units of MIPs for an event to be added to the binary file. If the energy sum across all cells in all layers after common mode subtraction is below this threshold, the entire event is discarded. `Default: 1000`. -* **`MWCQualityCut`**: Applies an event selection to the MWC measurement if it is set to `True`. The exact threshold of this cut is hard-coded for this analysis: - -```c++ -double delta_x12 = mwcs->at(0).x - mwcs->at(1).x; -double delta_y12 = mwcs->at(0).y - mwcs->at(1).y; -//Todo: Hard coded numbers! Offsets correspond to angles -if (fabs(delta_x12-0.45) > 1.0 || fabs(delta_y12-0.076) > 1.0) return; -``` - - - - -### Helper Classes -#### HGCalTBRunData -An object that is created for each event in the data read-out with runEnergyMapFiles and passed to the central event objects to subsequent plugins. - -```c++ - int configuration; //index of the configuration - int run; //number of the run - int event; //event counter, counting occurs during the data readout prior to any cuts (e.g. before the bad-spill filtering) - double energy; //more precisely: the set beam momentum - std::string runType; //electrons, muons, pions - bool hasValidMWCMeasurement; //an MWC measurement is valid if no coordinate shows -999 - bool hasDanger; //events that show Danger=true are not filtered but are flagged through this boolean. Therefore, the event filtering may occur later if necessary. -``` -Note that certain variables, namely `hasValidMWCMeasurement`, `hasDanger`and `event` are properly set, even if runEnergyMap files are not indicated. - -#### HGCalTBMultiWireChamberData -Simple structure to pass the read multi-wire chamber data to the event. - -```c++ - explicit MultiWireChamberData(int _ID, double _x, double _y, double _z): ID(_ID), x(_x), y(_y), z(_z) {}; //default consructor - - int ID; //index of the MWC in the setup (e.g. 1, 2) - double x; //reconstructed x-coordinate - double y; //reconstructed y-coordinate - double z; //position of the MWC in the setup, hard-coded values -}; - -typedef std::vector MultiWireChambers; //two MWCs per event --> create a vector -``` - -#### Geometry -* **`HGCalWaferGeometry.cc`**: Conversion of cell IDs in simulation to x,y positions and cell types. Hard-coded mapping depending on the configuration in simulation. - -* **`HGCalTBCellVertices::GetCellIUIVCoordinates`**: A function that returns the iu, iv coordinates of a cell on the 133 cell sensor with input of its x, y coordinates. It represents a useful function to retrieve iu, iv as those are input to the constructor of `HGCalTBDetId` which are required to instantiate `HGCalTBRecHits` like it is done in the GenSim to recHit conversion. - - -#### Sensors -Central class to perform all relevant steps on the sensors/layers for impact position reconstruction. - -```c++ - SensorHitMap(int _label); - //constructor, must indicate a label which could be the layer number (1-8) - //most internal parameters are set to zero - - ~SensorHitMap(); - //default destructor - - /************* - setters - *************/ - - void setLabZ(double z_cm, double X0); - //z-coordinate in cm and radiation lengths - - void setParticleEnergy(double e); - //Sets the particle energy at the layer. For instance, one could approximate te electron energy using the PDG loss formula (implemented by `computeEnergyLoss` in Reco/interface/Tracks.h) . - //The energy is input to the kink angle RMW calculation for gbl tracks which are deprecated in the position resolution analysis. - - void setAlignmentParameters(double d_alpha, double d_beta, double d_gamma, - double d_x0, double d_y0, double d_z0); - //Assigns up to six alignment parameters (three infinitesimal rotations and three translations) to each layer. - - void setResidualResolution(double r); - //Sets the residual width to the layer. This information is required within the alignment binary writer. - - void setSensorSize(int s); - //Sets the sensor size (default: 133). Used to boundary checks in position computations. - - void setPedestalThreshold(double t); - //Sets the pedestal threshold under which all cells are input for the common mode noise subtraction. - - void setCenterHitPosition(double x, double y, double x_err, double y_err); - //Manually fake the reconstructed impact position, e.g. if multi wire chambers are represented as instances of the sensor class. - - /************* - computation - *************/ - void addHit(HGCalTBRecHit Rechit, double ADC_per_MIP); - //Register a HGCalTBRecHit to the sensor. For the conversion of the energy to MIPs, the skiroc dependent ADC to MIP conversion factor has to be passed as an argument. Only cells of type '0' are incorporated. - - void registerClusterHit(HGCalTBDetId hit, int N_considered); - //Registers a hit to be part of a cluster. - //The passed hit must have already been added via addHit(...) in order to be properly registered - otherwise it is ignored. - //N_considered=-1 refers to the 'all' scheme, N_considered=7 for one ring and N_considered=19 for two rings around the cell with highest energy deposit. - - std::pair subtractCM(); - //Subtracts the common mode of each cell. Negative values are set to zero. - //Returns the common mode noise and the number of contributing cells. - - void calculateCenterPosition(ConsiderationMethod considerationMethod, - WeightingMethod weightingMethod); - //Applies the main impact position reconstruction for the layer. - //Consideration- and WeightingMethod are dedicated enum data types. - - /************* - getters - *************/ - int label(); - //returns the initially set label - - double getTotalEnergy(); - //Returns the total energy summed over all cells after common mode subtraction in units of MIPs - - double getTotalClusterEnergy(int N_considered); - //Returns the total energy summed over all cells which are entries in clusters before common mode subtraction in units of MIPs - - double getTotalWeight(); - //Returns the sum of all weights, equal to the denominator value in the weighting formula - - double getLabZ(); - //Returns the initially set z-coordinate in cm - - double getX0(); - //Returns the initially set z-coordinate in radiation lengths - - double getParticleEnergy(); - //Returns the initially energy at the layer in GeV - - double getIntrinsicHitZPosition(); - //Returns the z-coordinate of the main impact position in the sensor's reference frame. - //If no alignment is applied, it returns 0. - - double getResidualResolution(); - //Returns the initially set residual resolution or -1 if it has not been set. - - std::pair getHitPosition(); - //Returns central main impact position in layer's own frame - - std::pair getLabHitPosition(); - //Returns central main impact position in the lab frame - - std::pair getHitPositionError(); - //Returns the error of the reconstruction, calculated as the RMS of the weighting formula - - std::pair getCenterOfClosestCell(std::pair X_ref); - //Returns the coordinates of the cell's center with minimal distance to X_ref. - //Function considers only those hits, that have been added to the sensor at this point. - //Has to be used with caution for running on simulation where not every cell on each sensor is available in the input data. -``` - - -#### Tracks -Central class wrapping the functionality to make electron shower trajectory models in the position resolution analysis. - -```c++ - ParticleTrack(); - //default constructor - - ~ParticleTrack(); - //default destructor - - void addFitPoint(SensorHitMap* sensor); - //Adds a point to the model prior to any fit. - //Those points are the main impact position members of the sensor class. - //Thus, on the passed sensors, the reconstruction must be run in advance. - //MWC measurements are added setting impact positions manually. - - void addReferenceSensor(SensorHitMap* reference); - //Defines the reference sensor with which the trajectory model prediction is compared to the reconstruction. - - void weightFitPoints(FitPointWeightingMethod method); - //Performs the energy-dependent rescaling of fit point errors. - - void fitTrack(TrackFittingMethod method); - //Fits the trajectory. TrackFittingMethod is an enum type. - - std::pair calculateReferenceXY(); - //Calculates the reference coordinates using the trajectory model on the reference sensor. - - std::pair calculateReferenceErrorXY(); - //Calculates the reference coordinates uncertainties using the trajectory model on the reference sensor. - - std::pair calculatePositionXY(double z, int layerLabel); - //Calculates the reference coordinates using the trajectory model indicating any position on the z-axis (analytic models for the trajectory), - //or through indication of a sensor label (e.g. for the general broken line trajectory). - - std::pair calculatePositionErrorXY(double z, int layerLabel); - //Calculates the reference coordinate uncertainties using the trajectory model indicating any position on the z-axis (analytic models for the trajectory), - //or through indication of a sensor label (e.g. for the general broken line trajectory). - - double getSumOfEnergies(); - //Returns the sum over all energies of the fit point's total energies. - - /***** - GBL specific members: - *****/ +## Running the code +* **`run2017_cfg.py`** is the script to run to start the analysis. This script is less complex (and less convenient) than the **`test_cfg.py`** in other branches. The chain sequence tool is absent, and will be re-implemented later. +* All the EDProducer and EDAnalyzer (described above) are loaded with default parameters. Some paths might need modification depending on the user. +* 3 different cms.Path are pre-filled (2 are actually commented). One of them allows to run the RawDataPlotter plugin analysis, the 2nd runs the HGCalTBRawHitProducer and the RawHitPlotter analyzer and the last one runs the PulseShapePlotter analyzer. These 3 cms.Path creates 2 root files: + - **`cmsswEvents.root`** which contains the cmssw objects (HGCalTBSkiroc2CMS,HGCalTBRawHit). Running the following command should return the list of cmssw collections in the events:```edmDumpEventContent cmsswEvents.root``` + - **`HexaOutput_${runnumber}.root`** contains the analysis output histograms - void addDummySensor(SensorHitMap* dummy); - //Adds a sensor to the GBL formalism. - //Measurement is not specified but the absorbers/thin scatterers are placed. - - void gblTrackToMilleBinary(gbl::MilleBinary *milleBinary); - //Practical, external interface to write out the necessary derivatives for alignment with millepede into the binary form. -``` - -### Steering files - -**`test_cgf_newEB.py`**: Minimally adjusted old steering file to grant full compatibility with the existing code. Chains such as the LayerSumAnalyzer can be run as before. Only the arguments for the `HGCalTBTExtSource` plugin had to be extended. - -**`position_resolution_cgf.py`**: Alternative steering file to run either the position resolution analyzer (producing the TTree) and/or the binary file creator for the alignment using Millepede. - -__**Reading Options:**__ - -* **`repoFolder`**: Directory to the repository to correctly navigate to some file in CondObjects. - -* **`dataFolder`**: Main directory containing the raw text input. - -* **`pathToRunEnergyFile`**: (Absolute) path to the file that indicates the runs to run the analysis on. - -* **`readOnlyRuns`**: Run the analysis only for the indicated runs. - -* **`isData`**: Is the analysis run on real data (otherwise on simulated samples)? - -* **`nSpills`**: Number of spills per run before read-out is stopped. - -__**Pedestal Subtraction Options:**__ - -* **`pedestalsHighGain`**: Path to high gain pedestals file. - -* **`pedestalsLowGain`**: Path to low gain pedestals file. - -__**Analysis Execution Options:**__ - -* **`chainSequence`**: Here: only 8 (position resolution) and 9 (writing of millepede binary) is configured. - -* **`reportEvery`**: Frequency of event count printouts on the console. - -__**Experimental Setup Options:**__ - -* **`configuration`**: 1 if 8Layers with 5X0 sampling the center of the shower only; 2 if 8Layers with 25X0 sampling up to the tail of the shower. - -* **`alignmentParameterFiles`**: Alignment parameter files as obtained from the (mille)pede framework. - -__**Reference Trajectory Options:**__ - -* **`useMWCReference`**: Are the multi wire chamber information used for the exrapolation of referemce impact points? - -* **`fittingMethod`**: Model of the electron tracks. - -__**Reconstruction Options:**__ - -* **`considerationMethod`**: Possible arguments are: `all`, `closest7`, `closest19`, `clusters`. - -* **`weightingMethod`**: Possible arguments are: `squaredWeighting`, `linearWeighting`, `logWeighting_3.5_1.0`, ... . - -* **`pedestalThreshold`**: Threshold for the common mode noise subtraction. Unit is MIP. - -__**Output Options:**__ - -* **`outputFolder`**: Main directory of the output files. - -* **`outputPostfix`**: Postfix to the output file. - -#### Run Commands -For the following run command examples, these assumptions are made: - -* *`repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal`*: Location of the analysis framework repository. It corresponds to the ROOT directory in which the run steering file is executed. - -* *`configuration=1`*: CERN 6-15X0 setup is chosen. The second configuration could be analysed the same way. - -* *`dataFolder=/home/data/Testbeam/September2016`*: Main directory of the data files in which the text files (e.g. `HGCRun_Output_000927.txt`) are located. The multi-wire chamber text files are located in its subdirectory `MWC` (e.g. `MWC/WC_H4Run4814.txt`). - -* *`pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt`*: Path to the run-energy mapping file. - -* *`useMWCReference=1`*: Selects the extrapolation from the MWC measurements as reference. If set to `=0`, the HGC stack interpolation is used. - -* *`fittingMethod=lineAnalytical`*: Track model - assumes the electron induced showers to follow straight lines. - -* *`considerationMethod=closest19`*: Considers two rings around the cell with highest energy deposition for the impact position reconstruction. - -* *`weightingMethod=logWeighting_3.5_1.0`*: Specification of the weighting formula for the impact position reconstruction. - -* *`pedestalThreshold=2.`*: Threshold at 2 MIPs under which all cells are taken into account during the common mode noise calculation. - -* *`outputFolder=/tmp/`*: Output-folder to which the files are being written. - -* *`reportEvery=1000`*: Optional parameter. Sets the event number print-out frequency to every 1000. - -__**Running the Millepede Binary Writer Analyzer:**__ - -__I. Creation of binary files for the alignment program `pede`. In the position resolution analysis, this is done for each run seperately:__ - -* *`chainSequence=9`*: Index of the corresponding chain is 9. -* *`readOnlyRuns=927`*: Only run number 927 is processed in this example. -* *`outputPostfix=testOnData`*: Specifies a postfix to the default filename. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=9 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 -``` -It creates a binary file, `/tmp/HGCRun_MillepedeBinary_testOnData.bin`. - - -__II. An internal alignment of the HGC stack using all runs in the run-energy mapping file is possible:__ - -* Ommit the *`readOnlyRuns`* parameter. -* *`useMWCReference=0`*: No MWC but stack reference. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=9 configuration=1 reportEvery=1000 useMWCReference=0 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataStack isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 -``` -The file *`/tmp/HGCRun_MillepedeBinary_testOnDataStack.bin`* should be created. - -__**Running the Position Resolution Analyzer:**__ - -__I. Calculation of deviations for the aligned run 927 using the MWC reference:__ - -* *`chainSequence=8`*: Index of the corresponding chain is 8. -* *`readOnlyRuns=927`*: Only run 927. -* *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt`*: Indication of the alignment parameter file as it is output from the `pede` execution. It is obligatory to include the substring `RUN__` in the filename, as the mapping of the files to the events is based on the run numbers. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataRun927 isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt -``` - -The output .root file is stored in `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927.root`. It contains a TTree with a tabular-like storage of many relevant computed quantities that can be plotted in various ways. - - -__II. Calculation of deviations for multiple aligned runs using the MWC reference:__ - -* *`readOnlyRuns=927 readOnlyRuns=927`*: Only runs 927 and 937. -* *`alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt`*: Indicate paths of both. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataRun927Run937 isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 readOnlyRuns=927 readOnlyRuns=937 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/alignmentParameters__RUN_937_.txt -``` - -Output file `/tmp/HGCRun_Output_Position_Resolution_testOnDataRun927Run937.root` with same format as before but for the analysis of two runs with one execution. - - -__III. Consideration of all runs using the MWC reference with alignment:__ - -* Ommit the *`readOnlyRuns`* parameter. -* Indicate all available `alignmentParameterFiles`. - -Full command (remove `...`): - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnDataAllRuns isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 alignmentParameterFiles=/tmp/alignmentParameters__RUN_927_.txt alignmentParameterFiles=/tmp/... -``` - -__IV. Consideration of all runs using the MWC reference without alignment:__ - -* Omit the `alignmentParameterFiles` parameter. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnData isData=True pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolution.txt dataFolder=/home/data/Testbeam/September2016 -``` - -__V. Run on simulated samples (no alignment):__ - -* `dataFolder=/home/data/MC/September2016`: Main directory in which the simulated samples are stored. It must contain the structure `GeV/TBGenSim_.root`. -* `isData=False`: Important to specify that data are not real, because the chaining of plugins depend on it. - -Full command: - -```bash ->> cmsRun position_resolution_cfg.py repoFolder=/afs/cern.ch/user/t/tquast/CMSSW_8_0_0_pre5/src/HGCal chainSequence=8 configuration=1 reportEvery=1000 useMWCReference=1 fittingMethod=lineAnalytical considerationMethod=closest19 weightingMethod=logWeighting_3.5_1.0 pedestalThreshold=2. outputFolder=/tmp/ outputPostfix=testOnSim isData=False pathToRunEnergyFile=CondObjects/data/runEnergiesPositionResolutionSimulation.txt dataFolder=/home/data/MC/September2016 -``` -The event loop frequency is noticeably higher compared to the analysis of real data. (It seems that most of the CPU resources are spent on the conversion of the original string inputs to HGCalTBRecHits.) -The output file is `/tmp/HGCRun_Output_Position_Resolution_testOnSim.root`. - ## More Information For general instructions on the framework, co-ordinate system, reconstruction sequence, etc please refer to [http://cms-hgcal.github.io/TestBeam/](http://cms-hgcal.github.io/TestBeam/) From a2417f0f376d9557bcf97ccdb43090380bf6e058 Mon Sep 17 00:00:00 2001 From: asteencern Date: Tue, 30 May 2017 17:15:37 +0200 Subject: [PATCH 268/297] Update README.md --- README.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fe80eb6..aad988f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ CMS HGCal Testbeam Analysis Framework ============================================= * This new branch is to be used for analysing data from 2017 test beam. -* The code runs with the one layer data, and will probably need (major) updates when we will have more layers. +* The code runs with the one layer data, and will need (major) updates when we will have more layers. * This readme assumes one layer data. * The README.md in other branches contain useful information about 2016 test beam analysis which might be still useful. @@ -18,29 +18,35 @@ CMS HGCal Testbeam Analysis Framework * CMSSW Version 8.0.1 ```bash ->> scram project ${RELEASE} ->> cd ${RELEASE}/src/ ->> cmsenv ->> git cms-init ->> git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/ ->> git checkout CERN_TestBeam_2017 ->> git pull ->> scram b -j16 +scram project ${RELEASE} +cd ${RELEASE}/src/ +cmsenv +git cms-init +git clone git@github.com:CMS-HGCAL/TestBeam.git HGCal/ +git checkout CERN_TestBeam_2017 +git pull +scram b -j16 ``` ## Location of data files #### Raw data files -* The RAW files can be found in **`/afs/cern.ch/work/b/barneyb/public/data_May_2017/disk2_2TB/eudaq_data`**. +* The RAW files can be found in **`/afs/cern.ch/work/b/barneyd/public/data_May_2017/disk2_2TB/eudaq_data`**. #### Electronics map * The EMAP for this run **`map_CERN_Hexaboard_OneLayers_May2017.txt`** can be found in CondObjects/data ## Content of the code * The data are read using the EDProducer in **`RawToDigi/plugins/HGCalTBRawDataSource.cc(.h)`**. The data are rearranged to recreate the Skiroc2CMS raw data map (Skiroc2CMS information: [https://cms-docdb.cern.ch/cgi-bin/DocDB/ShowDocument?docid=13121](https://cms-docdb.cern.ch/cgi-bin/DocDB/ShowDocument?docid=13121)). The object storing those data is defined in **`DataFormats/interface/HGCalTBSkiroc2CMS.h`**. This producer is creating a collection of these objects. With the one layer data, the size of the collection should be 4 (4 Skiroc2CMS chips per layer). -* An example of EDAnalyzer, reading the collection of **`HGCalTBSkirocCMS`** is available in **`RawToDigi/plugins/RawDataPlotter.cc`**. It produces a root file output with basic histograms: high/low gain ADC distribution for all channels for all SCA, high/low gain as a function of the time for all channels, plots of mean and stdev of ADC distribution using hexagonal geometry. There is also an option to set to **`True`** to create event displays (One display per time sample). When the event display option is set, the code is slown down quite a lot, so my advice is to run only on few events. +* An example of EDAnalyzer, reading the collection of **`HGCalTBSkirocCMS`** is available in **`RawToDigi/plugins/RawDataPlotter.cc`**. It produces a root file output with basic histograms: + - high/low gain ADC distribution for all channels for all SCA + - high/low gain as a function of the time for all channels + - plots of mean and standard deviation of ADC counts using hexagonal geometry. + - there is also an option to set to **`True`** to create event displays (One display per time sample). When the event display option is set, the code is slown down quite a lot, so my advice is to run only on few events. * Another EDProducer **`RawToDigi/plugins/HGCalTBRawHitProducer.cc(.h)`** transforms the data format (HGCalTBSkiroc2CMS) into a digi format defined in **`DataFormats/interface/HGCalTBRawHit.h`** and stores collection these raw hits (the size of the collection should correspond to the number of channels = 4\*64 ). -* The EDAnalyzer **`RawToDigi/plugins/RawHitPlotter.cc`** analyzes the collection of HGCalTBRawHit. It creates the same kind of plots as in RawDataPlotter (high/low gain ADC distribution for each time sample, versus time sample, event display). It also creates 2 .txt files, containing high (resp. low) gain pedestal mean and standard deviation for each channel, for each time sample. Two other options are available to run with pedestal subtraction (please check that the pedestal files are alreday created) and to run with common mode evaluation and subtraction. +* The EDAnalyzer **`RawToDigi/plugins/RawHitPlotter.cc`** analyzes the collection of HGCalTBRawHit. It creates the same kind of plots as in RawDataPlotter (high/low gain ADC distribution for each time sample, versus time sample, event display). It also creates 2 .txt files, containing high (resp. low) gain pedestal mean and standard deviation for each channel, for each time sample. Two other options are available to: + - run with pedestal subtraction (please check that the pedestal files are alreday created) + - run with common mode evaluation and subtraction. * The EDAnalyzer **`RawToDigi/plugins/PulseShapePlotter`** reads the collection of HGCalTBRawHit, perform the pedestal subtraction (pedestal files are mandatory) and the common mode subtraction. It creates for each event, for each channel two histograms (high/low gain) of ADC counts as a function of the time. When signals are high enough, one should be able to see pulse shapes. ## Running the code From 4309a9f1a34826ce4c6522dcc7a2d55aff15c3e7 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 2 Jun 2017 15:17:32 +0200 Subject: [PATCH 269/297] add TOT and TOA info in HGCalTBRawHit --- DataFormats/interface/HGCalTBRawHit.h | 28 +++++++++++++++++++++- RawToDigi/plugins/HGCalTBRawHitProducer.cc | 4 +++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/DataFormats/interface/HGCalTBRawHit.h b/DataFormats/interface/HGCalTBRawHit.h index 55ebd67..0050b92 100644 --- a/DataFormats/interface/HGCalTBRawHit.h +++ b/DataFormats/interface/HGCalTBRawHit.h @@ -18,16 +18,38 @@ class HGCalTBRawHit m_adcHigh(adcHigh), m_adcLow(adcLow) {;} + HGCalTBRawHit( unsigned int rawid, unsigned int skiroc, unsigned int channel, std::vector &adcHigh, std::vector &adcLow, float toaRise, float toaFall, float totSlow, float totFast ) : + m_rawid(rawid), + m_skiroc(skiroc), + m_channel(channel), + m_adcHigh(adcHigh), + m_adcLow(adcLow), + m_toaRise(toaRise), + m_toaFall(toaFall), + m_totSlow(totSlow), + m_totFast(totFast) + {;} HGCalTBDetId detid() const {return HGCalTBDetId(m_rawid);} + void setRawId(unsigned int rawid){m_rawid=rawid;} + unsigned int skiroc() const{return m_skiroc;} unsigned int channel() const{return m_channel;} - void setRawId(unsigned int rawid){m_rawid=rawid;} + void setHighGainADCs(std::vector vec){m_adcHigh=vec;} void setLowGainADCs(std::vector vec){m_adcLow=vec;} float highGainADC(int timeSample){return m_adcHigh.at(timeSample);} float lowGainADC(int timeSample){return m_adcLow.at(timeSample);} + void setToaRise(float val){m_toaRise=val;} + void setToaFall(float val){m_toaFall=val;} + void setTotFast(float val){m_totFast=val;} + void setTotSlow(float val){m_totSlow=val;} + float toaRise(){return m_toaRise;} + float toaFall(){return m_toaFall;} + float totFast(){return m_totFast;} + float totSlow(){return m_totSlow;} + private: unsigned int m_rawid; //for some reasons (I don't know) root does not allow saving HGCalTBDetId because of some dictionary issue. // because of non-connected channels for which we assign dummy det id, we must keep skiroc and channel here @@ -35,6 +57,10 @@ class HGCalTBRawHit unsigned int m_channel; std::vector m_adcHigh; std::vector m_adcLow; + float m_toaRise; + float m_toaFall; + float m_totSlow; + float m_totFast; }; std::ostream& operator<<(std::ostream&, HGCalTBRawHit&); diff --git a/RawToDigi/plugins/HGCalTBRawHitProducer.cc b/RawToDigi/plugins/HGCalTBRawHitProducer.cc index 10c057e..997a0b1 100644 --- a/RawToDigi/plugins/HGCalTBRawHitProducer.cc +++ b/RawToDigi/plugins/HGCalTBRawHitProducer.cc @@ -36,7 +36,9 @@ void HGCalTBRawHitProducer::produce(edm::Event& event, const edm::EventSetup& iS adchigh.pop_back(); adclow.pop_back(); } - HGCalTBRawHit hit( rawid, iski, ichan, adchigh, adclow); + HGCalTBRawHit hit(rawid, iski, ichan, adchigh, adclow, + skiroc.TOARise(ichan), skiroc.TOAFall(ichan), + skiroc.TOTSlow(ichan), skiroc.TOTFast(ichan)); hits->push_back(hit); } } From ae9a18b9ea386d0cf255d82e2038f4d4527eec38 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 2 Jun 2017 15:18:02 +0200 Subject: [PATCH 270/297] modify range of histograms --- RawToDigi/plugins/RawHitPlotter.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/RawToDigi/plugins/RawHitPlotter.cc b/RawToDigi/plugins/RawHitPlotter.cc index 15629cb..545513b 100644 --- a/RawToDigi/plugins/RawHitPlotter.cc +++ b/RawToDigi/plugins/RawHitPlotter.cc @@ -116,20 +116,20 @@ RawHitPlotter::RawHitPlotter(const edm::ParameterSet& iConfig) : for( size_t it=0; it(os.str().c_str(),os.str().c_str(),1000,-500,3500); + htmp1=dir.make(os.str().c_str(),os.str().c_str(),4000,-500,3500); m_h_adcHigh.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); os.str(""); os << "LowGain_HexaBoard" << ib << "_Chip" << iski << "_Channel" << ichan << "_Sample" << it ; - htmp1=dir.make(os.str().c_str(),os.str().c_str(),1000,-500,3500); + htmp1=dir.make(os.str().c_str(),os.str().c_str(),4000,-500,3500); m_h_adcLow.insert( std::pair(ib*100000+iski*10000+ichan*100+it, htmp1) ); } os.str(""); os << "PulseHighGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,1000,-500,3500); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,4000,-500,3500); m_h_pulseHigh.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); os.str(""); os << "PulseLowGain_Hexa" << ib << "_Chip" << iski << "_Channel" << ichan; - htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,1000,-500,3500); + htmp2=dir.make(os.str().c_str(),os.str().c_str(),NUMBER_OF_TIME_SAMPLES-0,0,(NUMBER_OF_TIME_SAMPLES-0)*25,4000,-500,3500); m_h_pulseLow.insert( std::pair(ib*1000+iski*100+ichan, htmp2) ); } } @@ -216,15 +216,6 @@ void RawHitPlotter::beginJob() } fclose (file); } - // for( std::map::iterator it=m_pedMap.begin(); it!=m_pedMap.end(); ++it ){ - // std::cout << it->first/10000 << " " << (it->first%10000)/100 << " " << it->first%100 ; - // for( unsigned int ii=0; iisecond.pedHGMean[ii] << " " << it->second.pedHGRMS[ii] ; - // std::cout << std::endl; - // for( unsigned int ii=0; iisecond.pedLGMean[ii] << " " << it->second.pedLGRMS[ii] ; - // std::cout << std::endl; - // } } } @@ -270,6 +261,10 @@ void RawHitPlotter::analyze(const edm::Event& event, const edm::EventSetup& setu case 2 : cm[it][iski].halfHG += highGain; cm[it][iski].halfLG += lowGain; cm[it][iski].halfCounter++; break; case 3 : cm[it][iski].mouseBiteHG += highGain; cm[it][iski].mouseBiteLG += lowGain; cm[it][iski].mouseBiteCounter++; break; case 4 : cm[it][iski].outerHG += highGain; cm[it][iski].outerLG += lowGain; cm[it][iski].outerCounter++; break; + // case 0 : cm[it].fullHG += highGain; cm[it].fullLG += lowGain; cm[it].fullCounter++; break; + // case 2 : cm[it].halfHG += highGain; cm[it].halfLG += lowGain; cm[it].halfCounter++; break; + // case 3 : cm[it].mouseBiteHG += highGain; cm[it].mouseBiteLG += lowGain; cm[it].mouseBiteCounter++; break; + // case 4 : cm[it].outerHG += highGain; cm[it].outerLG += lowGain; cm[it].outerCounter++; break; } } } @@ -287,6 +282,10 @@ void RawHitPlotter::analyze(const edm::Event& event, const edm::EventSetup& setu case 2 : subHG=cm[it][iski].halfHG/cm[it][iski].halfCounter; subLG=cm[it][iski].halfLG/cm[it][iski].halfCounter; break; case 3 : subHG=cm[it][iski].mouseBiteHG/cm[it][iski].mouseBiteCounter; subLG=cm[it][iski].mouseBiteLG/cm[it][iski].mouseBiteCounter; break; case 4 : subHG=cm[it][iski].outerHG/cm[it][iski].outerCounter; subLG=cm[it][iski].outerLG/cm[it][iski].outerCounter; break; + // case 0 : subHG=cm[it].fullHG/cm[it].fullCounter; subLG=cm[it].fullLG/cm[it].fullCounter; break; + // case 2 : subHG=cm[it].halfHG/cm[it].halfCounter; subLG=cm[it].halfLG/cm[it].halfCounter; break; + // case 3 : subHG=cm[it].mouseBiteHG/cm[it].mouseBiteCounter; subLG=cm[it].mouseBiteLG/cm[it].mouseBiteCounter; break; + // case 4 : subHG=cm[it].outerHG/cm[it].outerCounter; subLG=cm[it].outerLG/cm[it].outerCounter; break; } highGain=hit.highGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[it]-subHG; lowGain=hit.lowGainADC(it)-m_pedMap[10000*iboard+100*iski+ichan].pedLGMean[it]-subLG; From c89f9dd97fde2f799e008d89019f2880accec6e3 Mon Sep 17 00:00:00 2001 From: asteencern Date: Fri, 2 Jun 2017 15:21:29 +0200 Subject: [PATCH 271/297] new HGCalTBRecHitProducer.cc(.h) to read HGCalTBRawHit, new RecHitPlotter.cc + add the according settings in run2017_cfg.py --- Reco/plugins/HGCalTBRecHitProducer.cc | 257 ++++++++++-------- Reco/plugins/HGCalTBRecHitProducer.h | 78 +++--- Reco/plugins/RecHitPlotter.cc | 373 ++++++++++++-------------- run2017_cfg.py | 27 +- 4 files changed, 383 insertions(+), 352 deletions(-) diff --git a/Reco/plugins/HGCalTBRecHitProducer.cc b/Reco/plugins/HGCalTBRecHitProducer.cc index d3c2498..fbda339 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.cc +++ b/Reco/plugins/HGCalTBRecHitProducer.cc @@ -1,126 +1,157 @@ #include "HGCal/Reco/plugins/HGCalTBRecHitProducer.h" #include -using namespace std; - -HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) - : outputCollectionName(cfg.getParameter("OutputCollectionName")), - _digisToken(consumes(cfg.getParameter("digiCollection"))), - _pedestalLow_filename(cfg.getParameter("pedestalLow")), - _pedestalHigh_filename(cfg.getParameter("pedestalHigh")), - _gainsLow_filename(cfg.getParameter("gainLow")), - _gainsHigh_filename(cfg.getParameter("gainHigh")), - _adcSaturation(cfg.getParameter("adcSaturation")), - //_LG2HG_value(cfg.getParameter >("LG2HG_CERN")), - //_mapFile(cfg.getParameter("mapFile")), - _layers_config(cfg.getParameter("layers_config")) +const static size_t N_SKIROC_PER_HEXA = 4; + +HGCalTBRecHitProducer::HGCalTBRecHitProducer(const edm::ParameterSet& cfg) : + m_pedestalHigh_filename(cfg.getParameter("HighGainPedestalFileName")), + m_pedestalLow_filename(cfg.getParameter("LowGainPedestalFileName")), + m_outputCollectionName(cfg.getParameter("OutputCollectionName")), + m_electronicMap(cfg.getUntrackedParameter("ElectronicsMap","HGCal/CondObjects/data/map_CERN_Hexaboard_OneLayers_May2017.txt")), + m_commonModeThreshold(cfg.getUntrackedParameter("CommonModeThreshold",3)), + m_highGainADCSaturation(cfg.getUntrackedParameter("HighGainADCSaturation",1800)), + m_lowGainADCSaturation(cfg.getUntrackedParameter("LowGainADCSaturation",1800)), + m_keepOnlyTimeSample3(cfg.getUntrackedParameter("KeepOnlyTimeSample3",true)) { - produces (outputCollectionName); - // std::cout << " >>> _LG2HG_value size = " << _LG2HG_value.size() << std::endl; - if(_layers_config == 0){ - _LG2HG_value = cfg.getParameter >("LG2HG_FNAL"); - _mapFile = cfg.getParameter("mapFile_FNAL"); - } - else{ - _LG2HG_value = cfg.getParameter >("LG2HG_CERN"); - _mapFile = cfg.getParameter("mapFile_CERN"); - } + m_HGCalTBRawHitCollection = consumes(cfg.getParameter("InputCollection")); + + produces (m_outputCollectionName); + std::vector v0(1,10.); + m_LG2HG_value = cfg.getUntrackedParameter >("LG2HG",v0); + std::vector v1(1,10.); + m_TOT2LG_value = cfg.getUntrackedParameter >("TOT2LG",v1); - HGCalCondObjectTextIO io(0); - edm::FileInPath fip(_mapFile); - if (!io.load(fip.fullPath(), essource_.emap_)) { - throw cms::Exception("Unable to load electronics map"); - }; + HGCalCondObjectTextIO io(0); + edm::FileInPath fip(m_electronicMap); + if (!io.load(fip.fullPath(), essource_.emap_)) { + throw cms::Exception("Unable to load electronics map"); + }; + std::cout << cfg.dump() << std::endl; } -void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) +void HGCalTBRecHitProducer::beginJob() { + FILE* file; + char buffer[300]; + file = fopen (m_pedestalHigh_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal high gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + HGCalTBElectronicsId eid( (4-skiroc)%4+1 ); + if (!essource_.emap_.existsEId(eid.rawId())) + ped.id = HGCalTBDetId(-1); + else + ped.id = essource_.emap_.eid2detId(eid); + index+=ptr; + }else continue; + for( unsigned int ii=0; ii(10000*hexaboard+100*skiroc+channel,ped) ); + } + fclose (file); + } + + file = fopen (m_pedestalLow_filename.c_str() , "r"); + if (file == NULL){ perror ("Error opening pedestal low gain"); exit(1); } + else{ + while ( ! feof (file) ){ + if ( fgets (buffer , 300 , file) == NULL ) break; + pedestalChannel ped; + const char* index = buffer; + int hexaboard,skiroc,channel,ptr,nval,key; + nval=sscanf( index, "%d %d %d %n",&hexaboard,&skiroc,&channel,&ptr ); + if( nval==3 ){ + key=10000*hexaboard+100*skiroc+channel; + index+=ptr; + }else continue; + for( unsigned int ii=0; ii rechits(new HGCalTBRecHitCollection); //auto_ptr are automatically deleted when out of scope - - edm::Handle digisHandle; - event.getByToken(_digisToken, digisHandle); - -#ifdef DEBUG - int runId = event.id().run(); - int spillId = event.luminosityBlock(); - cout<begin(); digi_itr != digisHandle->end(); ++digi_itr) { -#ifdef DEBUG - std::cout << "[RECHIT PRODUCER: digi]" << *digi_itr << std::endl; -#endif - -//------------------------------ this part should go into HGCalTBRecoAlgo class - - SKIROC2DataFrame digi(*digi_itr); - unsigned int nSamples = digi.samples(); - - // if there are more than 1 sample, we need to define a reconstruction algorithm - // now taking the first sample - for(unsigned int iSample = 0; iSample < nSamples; ++iSample) { - - float pedestal_low_value = (pedestals_low.size() > 0) ? pedestals_low.get(digi.detid())->value : 0; - float pedestal_high_value = (pedestals_high.size() > 0) ? pedestals_high.get(digi.detid())->value : 0; - float adcToGeV_low_value = (adcToGeV_low.size() > 0) ? adcToGeV_low.get(digi.detid())->value : 1; - float adcToGeV_high_value = (adcToGeV_high.size() > 0) ? adcToGeV_high.get(digi.detid())->value : 1; - - float energyLow = digi[iSample].adcLow() - pedestal_low_value * adcToGeV_low_value; - float energyHigh = digi[iSample].adcHigh() - pedestal_high_value * adcToGeV_high_value; - - float energy = -1.; - - HGCalTBRecHit recHit(digi.detid(), energy, energyLow, energyHigh, digi[iSample].tdc()); - CellCenterXY = TheCell.GetCellCentreCoordinatesForPlots((recHit.id()).layer(), (recHit.id()).sensorIU(), (recHit.id()).sensorIV(), (recHit.id()).iu(), (recHit.id()).iv(), 128); - recHit.setCellCenterCoordinate(CellCenterXY.first, CellCenterXY.second); - //Consistency check if the reversion of the x,y - iu iv formula can be reverted - //std::pair iuiv = TheCell.GetCellIUIVCoordinates(CellCenterXY.first, CellCenterXY.second); - //std::cout< _adcSaturation) recHit.setFlag(HGCalTBRecHit::kHighGainSaturated); - if(digi[iSample].adcLow() > _adcSaturation) recHit.setFlag(HGCalTBRecHit::kLowGainSaturated); - -#ifdef DEBUG - std::cout << recHit << std::endl; -#endif - if(iSample == 0) rechits->push_back(recHit); ///\todo define an algorithm for the energy if more than 1 sample, code inefficient - } - } - event.put(rechits, outputCollectionName); +void HGCalTBRecHitProducer::produce(edm::Event& event, const edm::EventSetup& iSetup) +{ + std::auto_ptr rechits(new HGCalTBRecHitCollection); + + edm::Handle rawhits; + event.getByToken(m_HGCalTBRawHitCollection, rawhits); + commonModeNoise cm[NUMBER_OF_TIME_SAMPLES][4]; + for( auto rawhit : *rawhits ){ + if( !essource_.emap_.existsDetId(rawhit.detid()) ) continue; + HGCalTBElectronicsId eid( essource_.emap_.detId2eid(rawhit.detid()) ); + int iboard=(eid.iskiroc()-1)/N_SKIROC_PER_HEXA; + int iski=eid.iskiroc()-1; + int ichan=eid.ichan(); + if(m_keepOnlyTimeSample3){ + if( fabs(rawhit.highGainADC(3)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[3])>m_commonModeThreshold*m_pedMap[10000*iboard+100*iski+ichan].pedHGRMS[3] ) continue; + float highGain = rawhit.highGainADC(3)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[3]; + float lowGain = rawhit.lowGainADC(3)-m_pedMap[10000*iboard+100*iski+ichan].pedLGMean[3]; + switch ( rawhit.detid().cellType() ){ + case 0 : cm[3][iski].fullHG += highGain; cm[3][iski].fullLG += lowGain; cm[3][iski].fullCounter++; break; + case 2 : cm[3][iski].fullHG += highGain; cm[3][iski].fullLG += lowGain; cm[3][iski].fullCounter++; break; + //case 2 : cm[3][iski].halfHG += highGain; cm[3][iski].halfLG += lowGain; cm[3][iski].halfCounter++; break; + case 3 : cm[3][iski].mouseBiteHG += highGain; cm[3][iski].mouseBiteLG += lowGain; cm[3][iski].mouseBiteCounter++; break; + case 4 : cm[3][iski].outerHG += highGain; cm[3][iski].outerLG += lowGain; cm[3][iski].outerCounter++; break; + } + } + else{ + std::cout << "Should run with m_keepOnlyTimeSample3 sets to true, other method not yet implemented -> exit" << std::endl; + exit(1); + } + } + for( auto rawhit : *rawhits ){ + if( !essource_.emap_.existsDetId(rawhit.detid()) ) continue; + HGCalTBElectronicsId eid( essource_.emap_.detId2eid(rawhit.detid()) ); + int iboard=(eid.iskiroc()-1)/N_SKIROC_PER_HEXA; + int iski=eid.iskiroc()-1; + int ichan=eid.ichan(); + if(m_keepOnlyTimeSample3){ + float highGain,lowGain; + float subHG(0),subLG(0); + switch ( rawhit.detid().cellType() ){ + case 0 : subHG=cm[3][iski].fullHG/cm[3][iski].fullCounter; subLG=cm[3][iski].fullLG/cm[3][iski].fullCounter; break; + case 2 : subHG=cm[3][iski].fullHG/cm[3][iski].fullCounter; subLG=cm[3][iski].fullLG/cm[3][iski].fullCounter; break; + //case 2 : subHG=cm[3][iski].halfHG/cm[3][iski].halfCounter; subLG=cm[3][iski].halfLG/cm[3][iski].halfCounter; break; + case 3 : subHG=cm[3][iski].mouseBiteHG/cm[3][iski].mouseBiteCounter; subLG=cm[3][iski].mouseBiteLG/cm[3][iski].mouseBiteCounter; break; + case 4 : subHG=cm[3][iski].outerHG/cm[3][iski].outerCounter; subLG=cm[3][iski].outerLG/cm[3][iski].outerCounter; break; + } + highGain=rawhit.highGainADC(3)-m_pedMap[10000*iboard+100*iski+ichan].pedHGMean[3]-subHG; + lowGain=rawhit.lowGainADC(3)-m_pedMap[10000*iboard+100*iski+ichan].pedLGMean[3]-subLG; + + float energy = (highGainpush_back( HGCalTBRecHit(rawhit.detid(), energy, lowGain, highGain, time) ); + } + else{ + std::cout << "Should run with m_keepOnlyTimeSample3 sets to true, other method not yet implemented -> exit" << std::endl; + exit(1); + } + } + event.put(rechits, m_outputCollectionName); } -// Should there be a destructor ?? + DEFINE_FWK_MODULE(HGCalTBRecHitProducer); diff --git a/Reco/plugins/HGCalTBRecHitProducer.h b/Reco/plugins/HGCalTBRecHitProducer.h index 6e459f2..c6b079d 100644 --- a/Reco/plugins/HGCalTBRecHitProducer.h +++ b/Reco/plugins/HGCalTBRecHitProducer.h @@ -1,10 +1,5 @@ #ifndef HGCALTBRECHITPRODUCER_H #define HGCALTBRECHITPRODUCER_H -/** \class Reco/plugins/HGCalTBRecHitProducer.h HGCalTBRecHitProducer HGCalTBRecHitProducer - \brief - - \author Shervin Nourbakhsh - */ #include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" @@ -14,46 +9,51 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "HGCal/DataFormats/interface/HGCalTBRecHitCollections.h" -//#include "HGCal/DataFormats/interface/HGCalTBDetId.h" -#include "HGCal/DataFormats/interface/HGCalTBDigiCollections.h" - - -// here are defined objects containing pedestals and ADCtoGeV factors -#include "HGCal/CondObjects/interface/HGCalCondObjects.h" -#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" -#include "HGCal/CondObjects/interface/HGCalTBNumberingScheme.h" +#include "HGCal/DataFormats/interface/HGCalTBDetId.h" +#include "HGCal/DataFormats/interface/HGCalTBRawHitCollection.h" #include "HGCal/CondObjects/interface/HGCalElectronicsMap.h" +#include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h" #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h" -#include "HGCal/Geometry/interface/HGCalTBCellVertices.h" -//#define DEBUG - - -#ifdef DEBUG -#include -#endif class HGCalTBRecHitProducer : public edm::EDProducer { + public: + HGCalTBRecHitProducer(const edm::ParameterSet&); + virtual void produce(edm::Event&, const edm::EventSetup&); + private: + virtual void beginJob() override; + std::string m_pedestalHigh_filename; + std::string m_pedestalLow_filename; + std::string m_outputCollectionName; + std::string m_electronicMap; + double m_commonModeThreshold; + int m_highGainADCSaturation; + int m_lowGainADCSaturation; + bool m_keepOnlyTimeSample3; + + edm::EDGetTokenT m_HGCalTBRawHitCollection; + std::vector m_LG2HG_value; + std::vector m_TOT2LG_value; + + struct { + HGCalElectronicsMap emap_; + } essource_; + struct pedestalChannel{ + HGCalTBDetId id; + float pedHGMean[NUMBER_OF_TIME_SAMPLES]; + float pedLGMean[NUMBER_OF_TIME_SAMPLES]; + float pedHGRMS[NUMBER_OF_TIME_SAMPLES]; + float pedLGRMS[NUMBER_OF_TIME_SAMPLES]; + }; + std::map m_pedMap; //key=10000*hexa+100*chip+chan + + struct commonModeNoise{ + commonModeNoise():fullHG(0),halfHG(0),mouseBiteHG(0),outerHG(0),fullLG(0),halfLG(0),mouseBiteLG(0),outerLG(0),fullCounter(0),halfCounter(0),mouseBiteCounter(0),outerCounter(0){;} + float fullHG,halfHG,mouseBiteHG,outerHG; + float fullLG,halfLG,mouseBiteLG,outerLG; + int fullCounter,halfCounter,mouseBiteCounter,outerCounter; + }; -public: - HGCalTBRecHitProducer(const edm::ParameterSet&); - virtual void produce(edm::Event&, const edm::EventSetup&); -private: - std::string outputCollectionName; ///