00001
00002
00003
00005
00006 #include "SimDataFormats/CaloTest/interface/HcalTestHistoClass.h"
00007 #include "SimDataFormats/CaloTest/interface/HcalTestNumbering.h"
00008
00009 #include <iostream>
00010 #include <cmath>
00011
00012 void HcalTestHistoClass::setCounters(){
00013 nLayers = 0;
00014 nHits = 0;
00015 nQIE = 0;
00016 nTowerQIE = 0;
00017 nGroupQIE = 0;
00018 }
00019
00020 void HcalTestHistoClass::fillLayers(double* edepl, double edepHO,
00021 double edepHBHE, double* muxy) {
00022
00023 nLayers = 0;
00024 layers.resize(nLayersMAX);
00025 for (int i = 0; i < 20; i++) {
00026 double ed = 0.001*edepl[i];
00027 LogDebug("HcalSim") << "HcalTestHistoClass:: fillLayer: nLayers, ed " << i
00028 << " " << ed;
00029 if (nLayers < nLayersMAX) {
00030 layers[i].e = ed;
00031 layers[i].muDist = muxy[i];
00032 nLayers++;
00033 }
00034 }
00035
00036 eHO = edepHO;
00037 eHBHE = edepHBHE;
00038 }
00039
00040 void HcalTestHistoClass::fillHits(std::vector<CaloHit> hitcache) {
00041
00042 int nHit = hitcache.size();
00043 int hit = 0;
00044 int i;
00045 std::vector<CaloHit>::iterator itr;
00046 std::vector<CaloHit*> lhits(nHit);
00047 for (i = 0, itr = hitcache.begin(); itr != hitcache.end(); i++, itr++) {
00048 uint32_t unitID=itr->id();
00049 int subdet, zside, group, ieta, iphi, lay;
00050 HcalTestNumbering::unpackHcalIndex(unitID, subdet, zside, group,
00051 ieta, iphi, lay);
00052 subdet = itr->det();
00053 lay = itr->layer();
00054 group = (subdet&15)<<20;
00055 group += ((lay-1)&31)<<15;
00056 group += (zside&1)<<14;
00057 group += (ieta&127)<<7;
00058 group += (iphi&127);
00059 itr->setId(group);
00060 lhits[i] = &hitcache[i];
00061 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits:Original " << i
00062 << " " << hitcache[i];
00063 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits:Copied " << i
00064 << " " << *lhits[i];
00065 }
00066 sort(lhits.begin(),lhits.end(),CaloHitIdMore());
00067 std::vector<CaloHit*>::iterator k1, k2;
00068 for (i = 0, k1 = lhits.begin(); k1 != lhits.end(); i++, k1++)
00069 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits:Sorted " << i << " "
00070 << **k1;
00071
00072 hits.resize(lhits.size());
00073 for (i = 0, k1 = lhits.begin(); k1 != lhits.end(); i++, k1++) {
00074 double ehit = (**k1).e();
00075 double jitter= (**k1).t();
00076 unsigned int unitID= (**k1).id();
00077 int jump = 0;
00078 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits:Start " << i
00079 << " U/T/E 0x" << std::hex << unitID << std::dec << " "
00080 << jitter << " " << ehit;
00081 for (k2 = k1+1; k2 != lhits.end() && (jitter-(**k2).t())<1. &&
00082 (jitter-(**k2).t())>-1. && unitID==(**k2).id(); k2++) {
00083 ehit += (**k2).e();
00084 LogDebug("HcalSim") << " + " << (**k2).e();
00085 jump++;
00086 }
00087 LogDebug("HcalSim") << " = " << ehit << " in " << jump;
00088
00089 float eta = itr->eta();
00090 float phi = itr->phi();
00091 float t = itr->t();
00092 int lay = (unitID>>15)&31 + 1;
00093
00094 hits[nHits].layer = lay;
00095 hits[nHits].id = unitID;
00096 hits[nHits].eta = eta;
00097 hits[nHits].phi = phi;
00098 hits[nHits].e = ehit;
00099 hits[nHits].t = t;
00100 hits[nHits].jitter = jitter;
00101 nHits++;
00102 hit++;
00103
00104 int subdet = (unitID>>20)&15;
00105 int zside = (unitID>>14)&1;
00106 int ieta = (unitID>>7)&127;
00107 int iphi = (unitID)&127;
00108 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits:Hit " << hit << " "
00109 << i << " ID 0x" << std::hex << unitID << std::dec
00110 << " " << subdet << " " << lay << " " << zside << " "
00111 << ieta << " " << iphi << " Time " << jitter << " E "
00112 << ehit;
00113
00114 i += jump;
00115 k1 += jump;
00116 }
00117
00118 LogDebug("HcalSim") << "HcalTestHistoClass::fillHits called with " << nHit
00119 << " hits" << " and writes out " << nHits << '(' << hit
00120 << ") hits";
00121
00122 }
00123
00124 void HcalTestHistoClass::fillQie (int id, double esimtot, double eqietot,
00125 int nGroup, std::vector<double> longs,
00126 std::vector<double> longq, int nTower,
00127 std::vector<double> latphi,
00128 std::vector<double> latfs,
00129 std::vector<double> latfq) {
00130
00131 nGroupQIE = 0;
00132 nTowerQIE = 0;
00133
00134 if (id>=0 && id<4) {
00135 unsigned int qiesiz = (unsigned int)(id+1);
00136 if (qie.size()<qiesiz) {
00137 qie.resize(qiesiz);
00138 }
00139
00140 qie[id].sim=esimtot;
00141 qie[id].qie=eqietot;
00142 qie[id].id = id;
00143 nQIE++;
00144
00145 LogDebug("HcalSim") << "HcalTestHistoClass::fillQie: id, esimtot, eqietot"
00146 << " = " << id << " " << esimtot << " " << eqietot;
00147
00148 for (int i=0; i<nGroup; i++) {
00149 LogDebug("HcalSim") << "HcalTestHistoClass::fillQie: id, nGroupQIE, "
00150 << "longs, longq = " << id << " " << nGroupQIE
00151 << " " << longs[i] << " " << longq[i];
00152 qie[id].lngs.push_back(longs[i]);
00153 qie[id].lngq.push_back(longq[i]);
00154 nGroupQIE++;
00155 }
00156
00157 for (int i=0; i<nTower; i++) {
00158 int tow = (int)latphi[i];
00159 LogDebug("HcalSim") << "HcalTestHistoClass::fillQie: id, nTowerQIE, "
00160 << "tower, latfs, latfq = " << id << " " << nTowerQIE
00161 << " " << tow << " " << latfs[i] << " " << latfq[i];
00162 qie[id].lats.push_back(latfs[i]);
00163 qie[id].latq.push_back(latfq[i]);
00164 qie[id].tow.push_back(tow);
00165 nTowerQIE++;
00166 }
00167 }
00168 LogDebug("HcalSim") << "HcalTestHistoClass::fillQie: Called with ID " << id
00169 << " nQIE " << nQIE << " nGroup " << nGroupQIE
00170 << " nTower " << nTowerQIE;
00171 }
00172