00001 #include "OnlineDB/CSCCondDB/interface/CSCAFEBConnectAnalysis.h"
00002 #include "OnlineDB/CSCCondDB/interface/CSCToAFEB.h"
00003 #include "OnlineDB/CSCCondDB/interface/CSCOnlineDB.h"
00004 #include "CondFormats/CSCObjects/interface/CSCobject.h"
00005 #include "TMath.h"
00006
00007 CSCAFEBConnectAnalysis::CSCAFEBConnectAnalysis() {
00008
00009 hist_file=0;
00010
00011 nmbev=0;
00012 nmbev_no_wire=0;
00013 npulses=0;
00014 nmblayers=6;
00015 nmbpulses.resize(6,0);
00016 pulsed_layer=0;
00017
00018 m_csc_list.clear();
00019 m_res_for_db.clear();
00020
00021 mh_LayerNmbPulses.clear();
00022 mh_WireEff.clear();
00023 mh_WirePairCrosstalk.clear();
00024 mh_WireNonPairCrosstalk.clear();
00025 mh_Eff.clear();
00026 mh_PairCrosstalk.clear();
00027 mh_NonPairCrosstalk.clear();
00028
00029 mh_FirstTime.clear();
00030
00031 }
00032
00033 void CSCAFEBConnectAnalysis::setup(const std::string& histoFileName) {
00035 hist_file=new TFile(histoFileName.c_str(),"RECREATE");
00036 hist_file->cd();
00037 }
00038
00039 void CSCAFEBConnectAnalysis::bookForId(int flag, const int& idint,
00040 const std::string& idstring ) {
00041 hist_file->cd();
00042
00043 std::ostringstream ss;
00044
00045 if(flag==1) {
00046 ss <<idint<<"_Anode_First_Time";
00047 mh_FirstTime[idint]=new TH2F(ss.str().c_str(),"",675,0.0,675.0,50,0.0,10.0);
00048 mh_FirstTime[idint]->GetXaxis()->SetTitle("(Layer-1)*Nwires+Wire");
00049 mh_FirstTime[idint]->GetYaxis()->SetTitle("Anode First Time Bin");
00050 mh_FirstTime[idint]->SetOption("BOX");
00051 ss.str("");
00052 }
00053
00054 if(flag==10) {
00055 ss <<"Layer_Nmb_Pulses";
00056 mh_LayerNmbPulses[idint]=new TH1F(ss.str().c_str(),"",7,0.0,7.0);
00057 mh_LayerNmbPulses[idint]->GetXaxis()->SetTitle("Layer");
00058 mh_LayerNmbPulses[idint]->GetYaxis()->SetTitle("Number of pulses");
00059 ss.str("");
00060 }
00061
00062 if(flag==101) {
00063 ss <<idint<<"_Anode_Wire_Eff";
00064 mh_WireEff[idint]=new TH1F(ss.str().c_str(),"",675,0.0,675.0);
00065 mh_WireEff[idint]->GetXaxis()->SetTitle("(Layer-1)*Nwires+Wire");
00066 mh_WireEff[idint]->GetYaxis()->SetTitle("Efficiency");
00067 ss.str("");
00068 }
00069
00070 if(flag==102) {
00071 ss <<idint<<"_Anode_Eff";
00072 mh_Eff[idint]=new TH1F(ss.str().c_str(),"",110,-0.05,1.05);
00073 mh_Eff[idint]->GetXaxis()->SetTitle("Efficiency");
00074 mh_Eff[idint]->GetYaxis()->SetTitle("Entries");
00075 ss.str("");
00076 }
00077
00078 if(flag==201) {
00079 ss <<idint<<"_Anode_Wire_Pair_Layer_Crosstalk";
00080 mh_WirePairCrosstalk[idint]=new TH1F(ss.str().c_str(),"",675,0.0,675.0);
00081 mh_WirePairCrosstalk[idint]->GetXaxis()->SetTitle("(Layer-1)*Nwires+Wire");
00082 mh_WirePairCrosstalk[idint]->GetYaxis()->SetTitle("Probability");
00083 ss.str("");
00084 }
00085
00086 if(flag==202) {
00087 ss <<idint<<"_Anode_Pair_Layer_Crosstalk";
00088 mh_PairCrosstalk[idint]=new TH1F(ss.str().c_str(),"",70,-0.05,0.3);
00089 mh_PairCrosstalk[idint]->GetXaxis()->SetTitle("Probability");
00090 mh_PairCrosstalk[idint]->GetYaxis()->SetTitle("Entries");
00091 ss.str("");
00092 }
00093
00094 if(flag==301) {
00095 ss <<idint<<"_Anode_Wire_NonPair_Layer_Crosstalk";
00096 mh_WireNonPairCrosstalk[idint]=new TH1F(ss.str().c_str(),"",675,0.0,675.0);
00097 mh_WireNonPairCrosstalk[idint]->GetXaxis()->SetTitle("(Layer-1)*Nwires+Wire");
00098 mh_WireNonPairCrosstalk[idint]->GetYaxis()->SetTitle("Probability");
00099 ss.str("");
00100 }
00101
00102 if(flag==302) {
00103 ss <<idint<<"_Anode_NonPair_Layer_Crosstalk";
00104 mh_NonPairCrosstalk[idint]=new TH1F(ss.str().c_str(),"",70,-0.05,0.3);
00105 mh_NonPairCrosstalk[idint]->GetXaxis()->SetTitle("Probability");
00106 mh_NonPairCrosstalk[idint]->GetYaxis()->SetTitle("Entries");
00107 ss.str("");
00108 }
00109
00110 }
00111
00112 void CSCAFEBConnectAnalysis::hf1ForId(std::map<int, TH1*>& mp, int flag,
00113 const int& id, float& x, float w) {
00114
00115 std::map<int,TH1*>::iterator h;
00116 h=mp.find(id);
00117 if (h==mp.end()) {
00118 bookForId(flag,id,"");
00119 h=mp.find(id);
00120 }
00121 h->second->Fill(x,w);
00122 }
00123
00124 void CSCAFEBConnectAnalysis::hf2ForId(std::map<int, TH2*>& mp, int flag,
00125 const int& id, float& x, float& y, float w) {
00126
00127 std::map<int,TH2*>::iterator h;
00128 h=mp.find(id);
00129 if (h==mp.end()) {
00130 bookForId(flag,id,"");
00131 h=mp.find(id);
00132 }
00133 h->second->Fill(x,y,w);
00134 }
00135
00136
00137
00138 void CSCAFEBConnectAnalysis::analyze(const CSCWireDigiCollection& wirecltn) {
00139
00140 std::ostringstream ss;
00141 std::map<int,std::vector<int> >::iterator viIt;
00142 std::map<int, std::vector<std::vector<float> > >::iterator vvfIt;
00143
00144 int current_layer;
00145 float x,y;
00146 m_wire_ev.clear();
00147
00149
00150 nmbev++;
00151 pulsed_layer++;
00152 if(pulsed_layer==7) pulsed_layer=1;
00153 nmbpulses[pulsed_layer-1]=nmbpulses[pulsed_layer-1]+1;
00154
00155
00156
00157 CSCWireDigiCollection::DigiRangeIterator wiredetUnitIt;
00158 if(wirecltn.begin() == wirecltn.end()) nmbev_no_wire++;
00159
00160 if(wirecltn.begin() != wirecltn.end()) {
00161
00162 for (wiredetUnitIt=wirecltn.begin();
00163 wiredetUnitIt!=wirecltn.end();
00164 ++wiredetUnitIt){
00165
00166 const CSCDetId& id = (*wiredetUnitIt).first;
00167 const int idchamber=id.endcap()*10000 +id.station()*1000+
00168 id.ring()*100 +id.chamber();
00169 const int idlayer =id.endcap()*100000+id.station()*10000+
00170 id.ring()*1000+id.chamber()*10+id.layer();
00171
00172 const int maxwire=csctoafeb.getMaxWire(id.station(),id.ring());
00173 std::vector<int> wireplane(maxwire,0);
00174
00175 const CSCWireDigiCollection::Range& range = (*wiredetUnitIt).second;
00176 for (CSCWireDigiCollection::const_iterator digiIt =
00177 range.first; digiIt!=range.second; ++digiIt){
00178
00179 int iwire=(*digiIt).getWireGroup();
00180 if(iwire<=maxwire) {
00181 if(wireplane[iwire-1]==0) {
00182 wireplane[iwire-1]=(*digiIt).getBeamCrossingTag()+1;
00183
00185 x=(id.layer()-1)*maxwire + iwire;
00186 y=wireplane[iwire-1];
00187 hf2ForId(mh_FirstTime, 1, idchamber,x, y, 1.0);
00188
00190 wireplane[iwire-1]=1;
00191
00192 }
00193 }
00194 }
00195
00196 if(m_wire_ev.count(idlayer)==0) m_wire_ev[idlayer]=wireplane;
00197
00198 }
00199
00201
00202 for(viIt=m_wire_ev.begin(); viIt!=m_wire_ev.end(); ++viIt) {
00203 const int idwirev=(*viIt).first;
00204 const std::vector<int> wiretemp=(*viIt).second;
00205 int nsize=4;
00206 std::vector<float> zer(nsize,0);
00207 vvfIt=m_res_for_db.find(idwirev);
00208 if(vvfIt==m_res_for_db.end()) {
00209 for(unsigned int j=0;j<wiretemp.size();j++)
00210 m_res_for_db[idwirev].push_back(zer);
00211 vvfIt=m_res_for_db.find(idwirev);
00212 }
00213 for(unsigned int i=0;i<(*viIt).second.size();i++) {
00214 current_layer=(*viIt).first/10;
00215 current_layer=(*viIt).first - current_layer*10;
00217 if(pulsed_layer==current_layer) {
00218 vvfIt->second[i][1]=vvfIt->second[i][1]+
00219 (*viIt).second[i];
00220 }
00222 if(pulsed_layer==1 || pulsed_layer==3 || pulsed_layer==5)
00223 if(current_layer == (pulsed_layer+1))
00224 vvfIt->second[i][2]=vvfIt->second[i][2]+
00225 (*viIt).second[i];
00226 if(pulsed_layer==2 || pulsed_layer==4 || pulsed_layer==6)
00227 if(current_layer == (pulsed_layer-1))
00228 vvfIt->second[i][2]=vvfIt->second[i][2]+
00229 (*viIt).second[i];
00231 if((pulsed_layer>2 && current_layer<3) ||
00232 (pulsed_layer!=3 && pulsed_layer!=4 &&
00233 current_layer>2 && current_layer<5) ||
00234 (pulsed_layer<5 && current_layer>4))
00235 vvfIt->second[i][3]=vvfIt->second[i][3]+
00236 (*viIt).second[i];
00237 }
00238 }
00239 }
00240 }
00241
00242
00243 void CSCAFEBConnectAnalysis::done() {
00244
00245 float x,y;
00246
00247
00248
00249
00250
00251 std::map<int, int>::iterator intIt;
00252 std::map<int, std::vector<std::vector<float> > >::iterator vvfIt;
00253 std::cout<<"Events analyzed "<<nmbev<<std::endl;
00254 std::cout<<"Events no anodes "<<nmbev_no_wire<<std::endl<<std::endl;
00255
00256 std::cout<<"Number of pulses per layer"<<std::endl;
00257 for(int i=0;i<nmblayers;i++) std::cout <<" "<<nmbpulses[i];
00258 std::cout<<"\n"<<std::endl;
00259
00260
00261
00262
00265
00266 for(int i=0;i<nmblayers;i++) {
00267 x=i+1;
00268 y=nmbpulses[i];
00269 hf1ForId(mh_LayerNmbPulses, 10, 1,x, y);
00270 }
00271 for(vvfIt=m_res_for_db.begin(); vvfIt!=m_res_for_db.end();
00272 ++vvfIt) {
00273 int idlayer=(*vvfIt).first;
00274 int idchmb=idlayer/10;
00275 int layer=idlayer-idchmb*10;
00276 for (unsigned int i=0;i<(*vvfIt).second.size();i++) {
00277 (*vvfIt).second[i][0]=nmbpulses[layer-1];
00278 (*vvfIt).second[i][3]=(*vvfIt).second[i][3]/4.0;
00279 (*vvfIt).second[i][1]=(*vvfIt).second[i][1]/(*vvfIt).second[i][0];
00280 (*vvfIt).second[i][2]=(*vvfIt).second[i][2]/(*vvfIt).second[i][0];
00281 (*vvfIt).second[i][3]=(*vvfIt).second[i][3]/(*vvfIt).second[i][0];
00282
00283 x=(layer-1)*(*vvfIt).second.size() + (i+1);
00284
00286 y=(*vvfIt).second[i][1];
00287 hf1ForId(mh_WireEff, 101, idchmb,x, y);
00288 hf1ForId(mh_Eff, 102, idchmb,y,1.0);
00289
00291 y=(*vvfIt).second[i][2];
00292 hf1ForId(mh_WirePairCrosstalk, 201, idchmb,x, y);
00293 hf1ForId(mh_PairCrosstalk, 202, idchmb,y,1.0);
00294
00296 y=(*vvfIt).second[i][3];
00297 hf1ForId(mh_WireNonPairCrosstalk, 301, idchmb,x, y);
00298 hf1ForId(mh_NonPairCrosstalk, 302, idchmb,y,1.0);
00299
00300 }
00301 }
00302 std::cout<<"Size of map for DB "<<m_res_for_db.size()<<std::endl;
00303
00304 std::cout<<"The following CSCs will go to DB"<<std::endl<<std::endl;
00305 for(vvfIt=m_res_for_db.begin(); vvfIt!=m_res_for_db.end();
00306 ++vvfIt) {
00307 int idchmb=(*vvfIt).first/10;
00308 if(m_csc_list.count(idchmb)==0) m_csc_list[idchmb]=0;
00309 if(m_csc_list.count(idchmb)>0)
00310 m_csc_list[idchmb]=m_csc_list[idchmb]+(*vvfIt).second.size();
00311 }
00312 int count=0;
00313 for(intIt=m_csc_list.begin(); intIt!=m_csc_list.end();
00314 ++intIt) {
00315 count++;
00316 std::cout<<count<<" "<<" CSC "<<(*intIt).first<<" "
00317 <<(*intIt).second<<std::endl;
00318 }
00319 std::cout<<std::endl;
00320
00321
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00343
00344
00345
00346
00347
00348
00349 if(hist_file!=0) {
00350 hist_file->Write();
00351 delete hist_file;
00352 hist_file=0;
00353 std::cout << "Hist. file was closed\n";
00354 }
00355 std::cout<<" End of CSCAFEBConnectAnalysis"<<std::endl;
00356 }