00001 #include "CommonTools/TrackerMap/interface/TrackerMap.h"
00002 #include "CommonTools/TrackerMap/interface/TmModule.h"
00003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00004 #include "FWCore/ParameterSet/interface/FileInPath.h"
00005 #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
00006 #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h"
00007 #include "CommonTools/TrackerMap/interface/TmApvPair.h"
00008 #include "CommonTools/TrackerMap/interface/TmCcu.h"
00009 #include "CommonTools/TrackerMap/interface/TmPsu.h"
00010 #include <fstream>
00011 #include <vector>
00012 #include <iostream>
00013 #include <sstream>
00014 #include "TCanvas.h"
00015 #include "TPolyLine.h"
00016 #include "TStyle.h"
00017 #include "TColor.h"
00018 #include "TROOT.h"
00019 #include "TGaxis.h"
00020 #include "TLatex.h"
00021 #include "TArrow.h"
00022
00023
00024
00025
00026
00027
00028
00029
00030 TrackerMap::TrackerMap(const edm::ParameterSet & tkmapPset,const edm::ESHandle<SiStripFedCabling> tkFed) {
00031
00032 psetAvailable=true;
00033 xsize=340;ysize=200;
00034 title=" ";
00035 jsPath="";
00036 jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
00037 infilename="CommonTools/TrackerMap/data/tracker.dat";
00038 saveAsSingleLayer=false;
00039 if(tkmapPset.exists("trackermaptxtPath")){
00040 jsPath=tkmapPset.getUntrackedParameter<std::string>("trackermaptxtPath",""
00041 );
00042 jsfilename=jsPath+"trackermap.txt";
00043 std::cout << jsfilename << std::endl;
00044 infilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"tracker.dat";
00045 std::cout << infilename << std::endl;
00046 ncrates=0;
00047 enableFedProcessing=tkmapPset.getUntrackedParameter<bool>("loadFedCabling",false);
00048 nfeccrates=0;
00049 enableFecProcessing=tkmapPset.getUntrackedParameter<bool>("loadFecCabling",false);
00050
00051 npsuracks=0;
00052 enableLVProcessing=tkmapPset.getUntrackedParameter<bool>("loadLVCabling",false);
00053
00054 enableHVProcessing=tkmapPset.getUntrackedParameter<bool>("loadHVCabling",false);
00055
00056 } else std::cout << "no parameters found" << std::endl;
00057
00058 init();
00059
00060 if(enableFedProcessing){
00061 const std::vector<unsigned short> feds = tkFed->feds();
00062 std::cout<<"SiStripFedCabling has "<< feds.size()<<" active FEDS"<<std::endl;
00063 int num_board=0;
00064 int num_crate=0;
00065 for(std::vector<unsigned short>::const_iterator ifed = feds.begin();ifed<feds.end();ifed++){
00066 const std::vector<FedChannelConnection> theconn = tkFed->connections( *ifed );
00067 int num_conn=0;
00068 for(std::vector<FedChannelConnection>::const_iterator iconn = theconn.begin();iconn<theconn.end();iconn++){
00069
00070 if( iconn->fedId()== sistrip::invalid_ ||
00071 iconn->detId() == sistrip::invalid_ ||
00072 iconn->detId() == sistrip::invalid32_ ||
00073 iconn->apvPairNumber() == sistrip::invalid_ ||
00074 iconn->nApvPairs() == sistrip::invalid_ ) {
00075 continue;
00076 }
00077
00078 TmModule *imod = imoduleMap[iconn->detId()];
00079 int key = iconn->fedId()*1000+iconn->fedCh();
00080 TmApvPair* apvpair = apvMap[key];
00081 if(apvpair!=0)std::cout << "Fed "<< iconn->fedId() << " channel " << iconn->fedCh() << " seem to be already loaded!"<<std::endl;
00082 else
00083 {
00084 num_conn++;
00085 if(num_conn==1){
00086 if(fedMap[iconn->fedId()]==0){num_crate=num_board/18+1;fedMap[iconn->fedId()]=num_crate;num_board++;}
00087 }
00088 apvpair = new TmApvPair(key,num_crate);
00089 apvpair->mod=imod;
00090 apvpair->mpos=iconn->apvPairNumber();
00091 apvMap[key] = apvpair;
00092 apvModuleMap.insert(std::make_pair(iconn->detId(),apvpair));
00093 std::stringstream s;
00094 iconn->print(s);
00095 apvpair->text=s.str();
00096 }
00097 }
00098 }
00099 ncrates=num_crate;
00100 std::cout << num_crate << " crates used "<< std::endl;
00101
00102 std::map<int , TmModule *>::iterator i_mod;
00103 for( i_mod=imoduleMap.begin();i_mod !=imoduleMap.end(); i_mod++){
00104 TmModule * mod= i_mod->second;
00105 if(mod!=0) {
00106 std::ostringstream outs,outs1;
00107 outs << " connected to ";
00108 outs1 << "(";
00109
00110 int idmod=mod->idex;
00111 int nchan=0;
00112 std::multimap<const int, TmApvPair*>::iterator pos;
00113 for (pos = apvModuleMap.lower_bound(idmod);
00114 pos != apvModuleMap.upper_bound(idmod); ++pos) {
00115 TmApvPair* apvpair = pos->second;
00116 if(apvpair!=0){
00117 outs << apvpair->mpos << " " <<apvpair->getFedId() << "/"<<apvpair->getFedCh()<<" ";
00118 outs1 << apvpair->idex+apvpair->crate*1000000<<",";
00119 nchan++;
00120 }
00121
00122 }
00123 outs<< "("<<nchan<<")";
00124 mod->name=mod->name + outs.str();
00125 std::string s = outs1.str(); s.erase(s.end()-1,s.end());
00126 mod->capvids=s+")";
00127 }
00128 }
00129 }
00130
00131 if(enableFecProcessing){
00132 int nfec=0; int nccu; int nmod;
00133 int crate,slot,ring,addr,pos;
00134 SiStripFecCabling* fecCabling_;
00135 fecCabling_ = new SiStripFecCabling( *tkFed );
00136 std::string Ccufilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"cculist.txt";
00137 ifstream Ccufile(edm::FileInPath(Ccufilename).fullPath().c_str(),std::ios::in);
00138 std::string dummys;
00139 while(!Ccufile.eof()) {
00140 Ccufile >> crate >> slot >> ring >> addr >> pos;
00141 getline(Ccufile,dummys);
00142 int key =crate*10000000+slot*100000+ring*1000+addr;
00143 TmCcu * ccu = ccuMap[key];
00144 if(ccu==0){
00145 ccu = new TmCcu(crate,slot,ring,addr);
00146 ccu->mpos=pos,
00147 ccuMap[key]=ccu;
00148 }
00149 }
00150
00151 for ( std::vector<SiStripFecCrate>::const_iterator icrate = fecCabling_->crates().begin(); icrate != fecCabling_->crates().end(); icrate++ ) {
00152 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
00153 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
00154 nccu=0;nfec++;
00155 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
00156 nccu++; nmod=0;
00157 int key = icrate->fecCrate()*10000000+ifec->fecSlot()*100000+iring->fecRing()*1000+iccu->ccuAddr();
00158 int layer=0;
00159 TmCcu * ccu = ccuMap[key];
00160 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
00161 nmod++;
00162 TmModule *imod1 = imoduleMap[imod->detId()];
00163 layer=imod1->layer;
00164 fecModuleMap.insert(std::make_pair(ccu,imod1));
00165 if(imod1!=0)imod1->CcuId=key;
00166 }
00167 if(ccu==0)std::cout <<key<< " This ccu seems to have not been stored! " << std::endl; else{ ccu->nmod=nmod;ccu->layer=layer;}
00168
00169
00170 }
00171 }
00172 }
00173 }
00174
00175 std::map<int , TmCcu *>::iterator i_ccu;
00176 std::multimap<TmCcu*, TmModule*>::iterator it;
00177 std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
00178 nccu=0;
00179 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
00180 TmCcu * ccu= i_ccu->second;
00181 nccu++;
00182 if(ccu!=0){
00183 std::ostringstream outs;
00184 std::ostringstream outs1;
00185 outs << "CCU "<<ccu->idex <<" connected to fec,ring " << ccu->getCcuSlot() <<","<<ccu->getCcuRing()<< " in crate " <<ccu->getCcuCrate()<<" at position "<< ccu->mpos << " with " << ccu->nmod << " modules: ";
00186 outs1<<"(";
00187 ret = fecModuleMap.equal_range(ccu);
00188 for (it = ret.first; it != ret.second; ++it)
00189 {
00190 outs << (*it).second->idex << " ";
00191 outs1 << (*it).second->getKey() <<",";
00192 }
00193 outs1 << ")";
00194 ccu->text=outs.str();
00195 ccu->cmodid=outs1.str();
00196
00197 }
00198
00199 }
00200 nfeccrates=4;
00201 std::cout << nccu << " ccu stored in " <<nfeccrates<< " crates"<< std::endl;
00202
00203 delete fecCabling_ ;
00204
00205 }
00206
00207
00208 if(enableLVProcessing || enableHVProcessing){
00209 int npsu=0; int nmod,nmodHV2,nmodHV3;
00210 int modId1,modId2, dcuId;
00211 int dcs,branch,crate,board;
00212 int rack=0;
00213 std::string channelstr1;
00214 short int channel;
00215 std::string psinfo;
00216
00217
00218
00219
00220
00221 std::string LVfilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"psdcumap.dat";
00222 std::string HVfilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"hvmap.dat";
00223
00224 ifstream LVfile(edm::FileInPath(LVfilename).fullPath().c_str(),std::ios::in);
00225
00226 std::cout<<LVfilename<<" "<<HVfilename<<std::endl;
00227
00228
00229 if(enableHVProcessing){
00230
00231 ifstream HVfile(edm::FileInPath(HVfilename).fullPath().c_str(),std::ios::in);
00232 while(!HVfile.eof()) {
00233 HVfile >> modId2 >> channelstr1;
00234 std::string channelstr2 = channelstr1.substr(9,1);
00235 channel= atoi(channelstr2.c_str());
00236 TmModule *imod = imoduleMap[modId2];
00237
00238 imod->HVchannel=channel;
00239
00240 }
00241
00242 }
00243
00244
00245 while(!LVfile.eof()) {
00246 LVfile >> modId1 >> dcuId >> psinfo;
00247
00248 int length=psinfo.length();
00249 std::string dcsinfo = psinfo.substr(39,1);
00250 std::string branchinfo = psinfo.substr(57,2);
00251 std::string crateinfo= psinfo.substr(69,1);
00252 std::string boardinfo = psinfo.substr(80,2);
00253 std::string psIdinfo = psinfo.substr(83,length-83);
00254
00255 dcs= atoi(dcsinfo.c_str());
00256 branch= atoi(branchinfo.c_str());
00257 crate= atoi(crateinfo.c_str())+1;
00258 board= atoi(boardinfo.c_str())+1;
00259
00260 if(dcs==1)rack=(branch+1)/2;
00261 if(dcs==2)rack=(branch+1)/2 + 7;
00262 if(dcs==3)rack=(branch+1)/2 + 15;
00263 if(dcs==4)rack=(branch+1)/2 + 22;
00264
00265 int key = rack*1000+crate*100+board;
00266
00267 TmPsu *psu = psuMap[key];
00268 TmModule *imod = imoduleMap[modId1];
00269 if(psu==0){
00270 psu = new TmPsu(dcs,branch,rack,crate,board);
00271 psuMap[key]=psu;
00272 psu->psId=psIdinfo;
00273 }
00274
00275 psuModuleMap.insert(std::make_pair(psu,imod));
00276 if(imod!=0)imod->PsuId=psIdinfo;imod->psuIdex=psu->idex;
00277
00278 }
00279
00280
00281
00282 std::map<int , TmPsu *>::iterator ipsu;
00283 std::multimap<TmPsu*, TmModule*>::iterator it;
00284 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
00285 npsu=0;
00286
00287 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
00288 TmPsu * psu= ipsu->second;
00289 npsu++;
00290
00291 if(psu!=0){
00292
00293 std::ostringstream outs;
00294 std::ostringstream outs1;
00295
00296 std::ostringstream outs3;
00297 std::ostringstream outs4;
00298
00299 std::ostringstream outs5;
00300 std::ostringstream outs6;
00301
00302 outs <<"PSU "<<psu->psId<<" connected to Mainframe "<<psu->getPsuDcs()<<" BranchController "<<psu->getPsuBranch()<<" (Rack "<<psu->getPsuRack()<<"), crate "<<psu->getPsuCrate()<<" in position "<< psu->getPsuBoard()<< " with modules: ";
00303 outs1<<"(";
00304
00305 if(enableHVProcessing){
00306 outs3 <<"PSU "<<psu->psId<<" connected to Mainframe "<<psu->getPsuDcs()<<" BranchController "<<psu->getPsuBranch()<<" (Rack "<<psu->getPsuRack()<<"),crate "<<psu->getPsuCrate()<<" in position "<< psu->getPsuBoard()<<" and HV channel 002 with modules: ";
00307 outs4<<"(";
00308
00309 outs5 <<"PSU "<<psu->psId<<" connected to Mainframe "<<psu->getPsuDcs()<<" BranchController "<<psu->getPsuBranch()<<" (Rack "<<psu->getPsuRack()<<"), crate "<<psu->getPsuCrate()<<" in position "<< psu->getPsuBoard()<<" and HV channel 002 with modules: ";
00310 outs6<<"(";}
00311
00312
00313 ret = psuModuleMap.equal_range(psu);
00314 nmod=0;
00315 nmodHV2=0;
00316 nmodHV3=0;
00317 for (it = ret.first; it != ret.second; ++it)
00318 {
00319 nmod++;
00320 outs << (*it).second->idex << ", ";
00321 outs1 << (*it).second->getKey() <<",";
00322
00323 if(enableHVProcessing){
00324 if((*it).second->HVchannel==2){
00325 nmodHV2++;
00326 outs3 << (*it).second->idex << ", ";
00327 outs4 << (*it).second->getKey() <<",";}
00328 else if((*it).second->HVchannel==3){
00329 nmodHV3++;
00330 outs5 << (*it).second->idex << ", ";
00331 outs6 << (*it).second->getKey() <<",";}
00332
00333 }
00334 }
00335
00336 outs1 << ")";
00337 psu->nmod=nmod;
00338 outs << "(" << psu->nmod << ")";
00339 psu->text=outs.str();
00340 psu->cmodid_LV=outs1.str();
00341 if(enableHVProcessing){
00342 outs4 << ")";
00343 outs6 << ")";
00344 psu->nmodHV2=nmodHV2;
00345 psu->nmodHV3=nmodHV3;
00346 outs3 << "(" << psu->nmodHV2 << ")";
00347 outs5 << "(" << psu->nmodHV3 << ")";
00348 psu->textHV2=outs3.str();
00349 psu->textHV3=outs5.str();
00350 psu->cmodid_HV2=outs4.str();
00351 psu->cmodid_HV3=outs6.str();
00352 }
00353 }
00354 }
00355
00356
00357 npsuracks=29;
00358 std::cout << npsu << " psu stored in " <<npsuracks<<" racks"<<std::endl;
00359 }
00360 }
00361
00362 TrackerMap::TrackerMap(const edm::ParameterSet & tkmapPset) {
00363 psetAvailable=true;
00364 xsize=340;ysize=200;
00365 title=" ";
00366 jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
00367 infilename="CommonTools/TrackerMap/data/tracker.dat";
00368 enableFedProcessing=true;ncrates=0;
00369 saveAsSingleLayer=false;
00370 if(tkmapPset.exists("trackermaptxtPath")){
00371 jsfilename=tkmapPset.getUntrackedParameter<std::string>("trackermaptxtPath","")+"trackermap.txt";
00372 std::cout << jsfilename << std::endl;
00373 infilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"tracker.dat";
00374 std::cout << infilename << std::endl;
00375 } else std::cout << "no parameters found" << std::endl;
00376 init();
00377 }
00378
00379 TrackerMap::TrackerMap(std::string s,int xsize1,int ysize1) {
00380 psetAvailable=false;
00381 xsize=xsize1;ysize=ysize1;
00382 title=s;
00383 jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
00384 infilename="CommonTools/TrackerMap/data/tracker.dat";
00385 enableFedProcessing=false;
00386 saveAsSingleLayer=false;
00387 init();
00388 }
00389
00390 void TrackerMap::reset() {
00391 std::map<int , TmModule *>::iterator i_mod;
00392 for( i_mod=imoduleMap.begin();i_mod !=imoduleMap.end(); i_mod++){
00393 TmModule * mod= i_mod->second;
00394 mod->count=0;mod->value=0;mod->red=-1;
00395 }
00396 }
00397
00398 void TrackerMap::init() {
00399
00400 int ntotmod=0;
00401 ix=0;iy=0;
00402 firstcall = true;
00403 minvalue=0.; maxvalue=minvalue;
00404 posrel=true;
00405 palette = 1;
00406 printflag=true;
00407 addPixelFlag=false;
00408 temporary_file=false;
00409 gminvalue=0.; gmaxvalue=0.;
00410
00411 ndet = 3;
00412 npart = 3;
00413
00414
00415 for (int subdet=1; subdet < ndet+1; subdet++){
00416 for (int detpart=1; detpart < npart+1; detpart++){
00417 int nlayers = getlayerCount(subdet,detpart);
00418 for(int layer=1; layer < nlayers+1; layer++){
00419 int nrings = getringCount(subdet,detpart,layer);
00420
00421 int layer_g = nlayer(subdet,detpart,layer);
00422 ntotRing[layer_g-1]=nrings;
00423 firstRing[layer_g-1]=1;
00424 if(subdet==3 && detpart!=2) firstRing[layer_g-1]= 8-nrings;
00425 for (int ring=firstRing[layer_g-1]; ring < ntotRing[layer_g-1]+firstRing[layer_g-1];ring++){
00426 int nmodules = getmoduleCount(subdet,detpart,layer,ring);
00427 int key=0;
00428 TmModule *smodule;
00429 for(int module=1; module < nmodules+1; module++){
00430 smodule = new TmModule(module,ring,layer_g);
00431 key=layer_g*100000+ring*1000+module;
00432 smoduleMap[key]=smodule;
00433 ntotmod++;
00434 }
00435 if(isRingStereo(key))for(int module=1; module < nmodules+1; module++){
00436 smodule = new TmModule(module+100,ring,layer_g);
00437 int key=layer_g*100000+ring*1000+module+100;
00438 smoduleMap[key]=smodule;
00439 ntotmod++;
00440 }
00441 }
00442 }
00443 }
00444 }
00445 build();
00446 }
00447
00448 TrackerMap::~TrackerMap() {
00449
00450 for (int layer=1; layer < 44; layer++){
00451 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
00452 for (int module=1;module<200;module++) {
00453 int key=layer*100000+ring*1000+module;
00454 TmModule * mod = smoduleMap[key];
00455 if(mod !=0 ) delete mod;
00456 }
00457 }
00458 }
00459
00460
00461
00462
00463
00464
00465 std::map<int , TmApvPair *>::iterator i_apv;
00466 for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
00467 TmApvPair * apvPair= i_apv->second;
00468 delete apvPair;
00469 }
00470
00471
00472 std::map<int , TmCcu *>::iterator i_ccu;
00473 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
00474 TmCcu * ccu= i_ccu->second;
00475 delete ccu;
00476 }
00477
00478 std::map<int , TmPsu *>::iterator ipsu;
00479 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
00480 TmPsu * psu= ipsu->second;
00481 delete psu;
00482 }
00483
00484 gROOT->Reset();
00485
00486
00487
00488
00489 }
00490
00491
00492
00493
00494
00495 void TrackerMap::drawModule(TmModule * mod, int key,int nlay, bool print_total, std::ofstream * svgfile){
00496
00497 double phi,r,dx,dy, dy1;
00498 double xp[4],yp[4],xp1,yp1;
00499 double vhbot,vhtop,vhapo;
00500 double rmedio[]={0.041,0.0701,0.0988,0.255,0.340,0.430,0.520,0.610,0.696,0.782,0.868,0.965,1.080};
00501 double xt1,yt1,xs1=0.,ys1=0.,xt2,yt2,xs2,ys2,pv1,pv2;
00502 int green = 0;
00503 int red = 0;
00504 int blue = 0;
00505 double xd[4],yd[4];
00506 int np = 4;
00507
00508 int numod=0;
00509 phi = phival(mod->posx,mod->posy);
00510 r = sqrt(mod->posx*mod->posx+mod->posy*mod->posy);
00511 vhbot = mod->width;
00512 vhtop=mod->width;
00513 vhapo=mod->length;
00514 if(nlay < 31){
00515 vhbot = mod->widthAtHalfLength/2.-(mod->width/2.-mod->widthAtHalfLength/2.);
00516 vhtop=mod->width/2.;
00517 vhapo=mod->length/2.;
00518 if(nlay >12 && nlay <19){
00519 if(posrel)r = r+r;
00520 xp[0]=r-vhtop;yp[0]=-vhapo;
00521 xp[1]=r+vhtop;yp[1]=-vhapo;
00522 xp[2]=r+vhtop;yp[2]=vhapo;
00523 xp[3]=r-vhtop;yp[3]=vhapo;
00524 }else{
00525 if(posrel)r = r + r/3.;
00526 xp[0]=r-vhapo;yp[0]=-vhbot;
00527 xp[1]=r+vhapo;yp[1]=-vhtop;
00528 xp[2]=r+vhapo;yp[2]=vhtop;
00529 xp[3]=r-vhapo;yp[3]=vhbot;
00530 }
00531 for(int j=0;j<4;j++){
00532 xp1 = xp[j]*cos(phi)-yp[j]*sin(phi);
00533 yp1 = xp[j]*sin(phi)+yp[j]*cos(phi);
00534 xp[j] = xp1;yp[j]=yp1;
00535 }
00536 } else {
00537 numod=mod->idModule;if(numod>100)numod=numod-100;
00538 int vane = mod->ring;
00539 if(posrel){
00540 dx = vhapo;
00541 phi=M_PI;
00542 xt1=rmedio[nlay-31]; yt1=-vhtop/2.;
00543 xs1 = xt1*cos(phi)-yt1*sin(phi);
00544 ys1 = xt1*sin(phi)+yt1*cos(phi);
00545 xt2=rmedio[nlay-31]; yt2=vhtop/2.;
00546 xs2 = xt2*cos(phi)-yt2*sin(phi);
00547 ys2 = xt2*sin(phi)+yt2*cos(phi);
00548 dy=phival(xs2,ys2)-phival(xs1,ys1);
00549 dy1 = dy;
00550 if(nlay==31)dy1=0.39;
00551 if(nlay==32)dy1=0.23;
00552 if(nlay==33)dy1=0.16;
00553 xp[0]=vane*(dx+dx/8.);yp[0]=numod*(dy1);
00554 xp[1]=vane*(dx+dx/8.)+dx;yp[1]=numod*(dy1);
00555 xp[2]=vane*(dx+dx/8.)+dx;yp[2]=numod*(dy1)+dy;
00556 xp[3]=vane*(dx+dx/8.);yp[3]=numod*(dy1)+dy;
00557 }else{
00558 xt1=r; yt1=-vhtop/2.;
00559 xs1 = xt1*cos(phi)-yt1*sin(phi);
00560 ys1 = xt1*sin(phi)+yt1*cos(phi);
00561 xt2=r; yt2=vhtop/2.;
00562 xs2 = xt2*cos(phi)-yt2*sin(phi);
00563 ys2 = xt2*sin(phi)+yt2*cos(phi);
00564 pv1=phival(xs1,ys1);
00565 pv2=phival(xs2,ys2);
00566 if(fabs(pv1-pv2)>M_PI && numod==1)pv1=pv1-2.*M_PI;
00567 if(fabs(pv1-pv2)>M_PI && numod!=1)pv2=pv2+2.*M_PI;
00568 xp[0]=mod->posz-vhapo/2.;yp[0]=4.2*pv1;
00569 xp[1]=mod->posz+vhapo/2.;yp[1]=4.2*pv1;
00570 xp[2]=mod->posz+vhapo/2. ;yp[2]=4.2*pv2;
00571 xp[3]=mod->posz-vhapo/2.;yp[3]=4.2*pv2;
00572 }
00573 }
00574 if(isRingStereo(key))
00575 {
00576 np = 3;
00577 if(mod->idModule>100 ){for(int j=0;j<3;j++){
00578 xd[j]=xdpixel(xp[j]);yd[j]=ydpixel(yp[j]);
00579 }
00580 }else {
00581 xd[0]=xdpixel(xp[2]);yd[0]=ydpixel(yp[2]);
00582 xd[1]=xdpixel(xp[3]);yd[1]=ydpixel(yp[3]);
00583 xd[2]=xdpixel(xp[0]);yd[2]=ydpixel(yp[0]);
00584 }
00585 } else {
00586 for(int j=0;j<4;j++){
00587 xd[j]=xdpixel(xp[j]);yd[j]=ydpixel(yp[j]);
00588 }
00589 }
00590 char buffer [20];
00591 sprintf(buffer,"%X",mod->idex);
00592
00593 if(mod->red < 0){
00594 int color = getcolor(mod->value,palette);
00595 red=(color>>16)&0xFF;
00596 green=(color>>8)&0xFF;
00597 blue=(color)&0xFF;
00598
00599 if(!print_total)mod->value=mod->value*mod->count;
00600
00601 if(mod->count > 0)
00602 if(temporary_file) *svgfile << red << " " << green << " " << blue << " "; else
00603 *svgfile <<"<svg:polygon detid=\""<<mod->idex<<"\" count=\""<<mod->count <<"\" value=\""<<mod->value<<"\" id=\""<<key<<"\" capvids=\""<<mod->capvids<<"\" lv=\""<<mod->psuIdex<<"\" hv=\""<<mod->psuIdex*10 + mod->HVchannel<<"\" fec=\""<<mod->CcuId<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\""<<mod->text<<"\" POS=\""<<mod->name<<" \" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" points=\"";
00604 else
00605 if(temporary_file) *svgfile << 255 << " " << 255 << " " << 255 << " "; else
00606 *svgfile <<"<svg:polygon detid=\""<<mod->idex<<"\" count=\""<<mod->count <<"\" value=\""<<mod->value<<"\" id=\""<<key<<"\" capvids=\""<<mod->capvids<<"\" lv=\""<<mod->psuIdex<<"\" hv=\""<<mod->psuIdex*10 + mod->HVchannel<<"\" fec=\""<<mod->CcuId<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\""<<mod->text<<"\" POS=\""<<mod->name<<" \" fill=\"white\" points=\"";
00607 if(temporary_file) *svgfile << np << " ";
00608 for(int k=0;k<np;k++){
00609 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ; else
00610 *svgfile << xd[k] << "," << yd[k] << " " ;
00611 }
00612 if(temporary_file)*svgfile << std::endl; else *svgfile <<"\" />" <<std::endl;
00613 } else {
00614 if(mod->red>255)mod->red=255;
00615 if(mod->green>255)mod->green=255;
00616 if(mod->blue>255)mod->blue=255;
00617 if(temporary_file) *svgfile << mod->red << " " << mod->green << " " << mod->blue << " "; else
00618 *svgfile <<"<svg:polygon detid=\""<<mod->idex<<"\" count=\""<<mod->count <<"\" value=\""<<mod->value<<"\" id=\""<<key<<"\" capvids=\""<<mod->capvids<<"\" lv=\""<<mod->psuIdex<<"\" hv=\""<<mod->psuIdex*10 + mod->HVchannel<<"\" fec=\""<<mod->CcuId<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\""<<mod->text<<"\" POS=\""<<mod->name<<" \" fill=\"rgb("<<mod->red<<","<<mod->green<<","<<mod->blue<<")\" points=\"";
00619 if(temporary_file) *svgfile << np << " ";
00620 for(int k=0;k<np;k++){
00621 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ; else
00622 *svgfile << xd[k] << "," << yd[k] << " " ;
00623 }
00624 if(temporary_file)*svgfile << std::endl; else *svgfile <<"\" />" <<std::endl;
00625 }
00626
00627 }
00628
00629
00630
00631
00632 void TrackerMap::save(bool print_total,float minval, float maxval,std::string s,int width, int height){
00633
00634 std::string filetype=s,outputfilename=s;
00635 std::vector<TPolyLine*> vp;
00636 TGaxis *axis = 0 ;
00637 size_t found=filetype.find_last_of(".");
00638 filetype=filetype.substr(found+1);
00639 found=outputfilename.find_last_of(".");
00640 outputfilename=outputfilename.substr(0,found);
00641
00642 temporary_file=true;
00643 if(filetype=="svg")temporary_file=false;
00644 std::ostringstream outs;
00645 minvalue=minval; maxvalue=maxval;
00646 outs << outputfilename << ".coor";
00647 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
00648 if(!print_total){
00649 for (int layer=1; layer < 44; layer++){
00650 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
00651 for (int module=1;module<200;module++) {
00652 int key=layer*100000+ring*1000+module;
00653 TmModule * mod = smoduleMap[key];
00654 if(mod !=0 && !mod->notInUse()){
00655 mod->value = mod->value / mod->count;
00656 }
00657 }
00658 }
00659 }
00660 }
00661
00662 if(minvalue>=maxvalue){
00663 minvalue=9999999.;
00664 maxvalue=-9999999.;
00665 for (int layer=1; layer < 44; layer++){
00666 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
00667 for (int module=1;module<200;module++) {
00668 int key=layer*100000+ring*1000+module;
00669 TmModule * mod = smoduleMap[key];
00670 if(mod !=0 && !mod->notInUse()){
00671 if (minvalue > mod->value)minvalue=mod->value;
00672 if (maxvalue < mod->value)maxvalue=mod->value;
00673 }
00674 }
00675 }
00676 }
00677 }
00678 if (maxvalue == minvalue) printflag = false;
00679 if(!temporary_file){
00680 *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
00681 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
00682 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
00683 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
00684 *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3100 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
00685 *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3100\" height=\"1600\" /> "<<std::endl;
00686 *savefile << "<svg:g id=\"tracker\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
00687 }
00688 for (int layer=1; layer < 44; layer++){
00689 nlay=layer;
00690 defwindow(nlay);
00691 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
00692 for (int module=1;module<200;module++) {
00693 int key=layer*100000+ring*1000+module;
00694 TmModule * mod = smoduleMap[key];
00695 if(mod !=0 && !mod->notInUse()){
00696 drawModule(mod,key,layer,print_total,savefile);
00697 }
00698 }
00699 }
00700 }
00701
00702 if(!temporary_file){
00703 *savefile << "</svg:g>"<<std::endl;
00704 *savefile << " <svg:text id=\"Title\" class=\"normalText\" x=\"300\" y=\"0\">"<<title<<"</svg:text>"<<std::endl;
00705 }
00706
00707 if(printflag)drawPalette(savefile);
00708 if(!temporary_file){
00709 *savefile << "</svg:svg>"<<std::endl;
00710 *savefile << "</svg>"<<std::endl;
00711 }
00712 savefile->close(); delete savefile;
00713
00714 const char * command1;
00715 std::string tempfilename = outputfilename + ".coor";
00716 if(filetype=="svg"){
00717 std::string command = "mv "+tempfilename +" " +outputfilename + ".svg";
00718 command1=command.c_str();
00719 std::cout << "Executing " << command1 << std::endl;
00720 system(command1);
00721 }
00722
00723 if (temporary_file){
00724 int red,green,blue,npoints,colindex,ncolor;
00725 double x[4],y[4];
00726 ifstream tempfile(tempfilename.c_str(),std::ios::in);
00727 TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
00728 gPad->SetFillColor(38);
00729
00730 if(addPixelFlag)gPad->Range(0,0,3800,1600);else gPad->Range(800,0,3800,1600);
00731
00732
00733 ncolor=0;
00734 typedef std::map<int,int> ColorList;
00735 ColorList colorList;
00736 ColorList::iterator pos;
00737 TColor *col, *c;
00738 std::cout<<"tempfilename "<<tempfilename<<std::endl;
00739 while(!tempfile.eof()) {
00740 tempfile >> red >> green >> blue >> npoints;
00741 colindex=red+green*1000+blue*1000000;
00742 pos=colorList.find(colindex);
00743 if(pos == colorList.end()){ colorList[colindex]=ncolor+100; col =gROOT->GetColor(ncolor+100);
00744 if(col) col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.)); else c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));vc.push_back(c); ncolor++;}
00745 for (int i=0;i<npoints;i++){
00746 tempfile >> x[i] >> y[i];
00747 }
00748 }
00749
00750 if(ncolor>0 && ncolor<10000){
00751 Int_t colors[10000];
00752 for(int i=0;i<ncolor;i++){colors[i]=i+100;}
00753 gStyle->SetPalette(ncolor,colors);
00754 }
00755
00756 tempfile.clear();
00757 tempfile.seekg(0,std::ios::beg);
00758 std::cout << "created palette with " << ncolor << " colors" << std::endl;
00759
00760 while(!tempfile.eof()) {
00761 tempfile >> red >> green >> blue >> npoints;
00762 for (int i=0;i<npoints;i++){
00763 tempfile >> x[i] >> y[i];
00764 }
00765 colindex=red+green*1000+blue*1000000;
00766 pos=colorList.find(colindex);
00767 if(pos != colorList.end()){
00768 TPolyLine* pline = new TPolyLine(npoints,y,x);
00769 vp.push_back(pline);
00770 pline->SetFillColor(colorList[colindex]);
00771 pline->SetLineWidth(0);
00772 pline->Draw("f");
00773 }
00774 }
00775 if (printflag) {
00776 axis = new TGaxis(3660,36,3660,1530,minvalue,maxvalue,510,"+L");
00777 axis->SetLabelSize(0.02);
00778 axis->Draw();
00779 }
00780 TLatex l;
00781 l.SetTextSize(0.03);
00782 l.DrawLatex(950,1330,"TID");
00783 l.DrawLatex(2300,1330,"TEC");
00784 l.DrawLatex(300,1330,"FPIX");
00785 l.DrawLatex(20,560,"BPIX L1");
00786 l.DrawLatex(500,385,"BPIX L2");
00787 l.DrawLatex(500,945,"BPIX L3");
00788 l.SetTextSize(0.04);
00789 l.DrawLatex(850,1500,title.c_str());
00790 l.DrawLatex(1730,40,"-z");
00791 l.DrawLatex(1730,1360,"+z");
00792 l.DrawLatex(1085,330,"TIB L1");
00793 l.DrawLatex(1085,1000,"TIB L2");
00794 l.DrawLatex(1585,330,"TIB L3");
00795 l.DrawLatex(1585,1000,"TIB L4");
00796 l.DrawLatex(2085,330,"TOB L1");
00797 l.DrawLatex(2085,1000,"TOB L2");
00798 l.DrawLatex(2585,330,"TOB L3");
00799 l.DrawLatex(2585,1000,"TOB L4");
00800 l.DrawLatex(3085,330,"TOB L5");
00801 l.DrawLatex(3085,1000,"TOB L6");
00802 TArrow arx(3448,1190,3448,1350,0.01,"|>");
00803 l.DrawLatex(3460,1350,"x");
00804 TArrow ary(3448,1190,3312,1190,0.01,"|>");
00805 l.DrawLatex(3312,1210,"y");
00806 TArrow arz(3485,373,3485,676,0.01,"|>");
00807 l.DrawLatex(3510,667,"z");
00808 TArrow arphi(3485,511,3037,511,0.01,"|>");
00809 l.DrawLatex(3023,520,"#Phi");
00810 arx.SetLineWidth(3);
00811 ary.SetLineWidth(3);
00812 arz.SetLineWidth(3);
00813 arphi.SetLineWidth(3);
00814 arx.Draw();
00815 ary.Draw();
00816 arz.Draw();
00817 arphi.Draw();
00818 MyC->Update();
00819 if(filetype=="png"){
00820
00821 std::string filename = outputfilename + ".png";
00822 std::cout << "printing " <<filename<< std::endl;
00823 MyC->Print(filename.c_str());
00824 }
00825 if(filetype=="jpg"){
00826 std::string filename = outputfilename + ".jpg";
00827 MyC->Print(filename.c_str());
00828 }
00829 if(filetype=="pdf"){
00830 std::string filename = outputfilename + ".pdf";
00831 MyC->Print(filename.c_str());
00832 }
00833 std::string command = "rm "+tempfilename ;
00834 command1=command.c_str();
00835 std::cout << "Executing " << command1 << std::endl;
00836 system(command1);
00837 MyC->Clear();
00838 delete MyC;
00839 if (printflag)delete axis;
00840 for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
00841 delete (*pos1);}
00842
00843 }
00844
00845
00846 }
00847 void TrackerMap::drawApvPair(int crate, int numfed_incrate, bool print_total, TmApvPair* apvPair,std::ofstream * svgfile,bool useApvPairValue)
00848 {
00849 double xp[4],yp[4];
00850 int color;
00851 int green = 0;
00852 int red = 0;
00853 int blue = 0;
00854 double xd[4],yd[4];
00855 int np = 4;
00856 double boxinitx=0., boxinity=0.;
00857 double dx=.9,dy=.9;
00858 int numfedch_incolumn = 12;
00859 int numfedch_inrow = 8;
00860 int numfed_incolumn = 5;
00861 int numfed_inrow = 4;
00862 boxinitx=boxinitx+(numfed_incolumn-(numfed_incrate-1)/numfed_inrow)*14.;
00863 boxinity=boxinity+(numfed_inrow-(numfed_incrate-1)%numfed_inrow)*9.;
00864 boxinity=boxinity+numfedch_inrow-(apvPair->getFedCh()/numfedch_incolumn);
00865 boxinitx = boxinitx+numfedch_incolumn-(int)(apvPair->getFedCh()%numfedch_incolumn);
00866
00867 xp[0]=boxinitx;yp[0]=boxinity;
00868 xp[1]=boxinitx+dx;yp[1]=boxinity;
00869 xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
00870 xp[3]=boxinitx;yp[3]=boxinity + dy;
00871 for(int j=0;j<4;j++){
00872 xd[j]=xdpixelc(xp[j]);yd[j]=ydpixelc(yp[j]);
00873
00874 }
00875
00876 char buffer [20];
00877 sprintf(buffer,"%X",apvPair->mod->idex);
00878 std::string s = apvPair->mod->name;
00879 s.erase(s.begin()+s.find("connected"),s.end());
00880
00881 if(useApvPairValue){
00882 if(apvPair->red < 0){
00883 if(apvPair->count > 0) {
00884 color = getcolor(apvPair->value,palette);
00885 red=(color>>16)&0xFF;
00886 green=(color>>8)&0xFF;
00887 blue=(color)&0xFF;
00888 if(!print_total)apvPair->value=apvPair->value*apvPair->count;
00889 if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
00890 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" points=\"";
00891 } else {
00892 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
00893 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"white\" points=\"";
00894 }
00895 } else {
00896 if(apvPair->red>255)apvPair->red=255;
00897 if(apvPair->green>255)apvPair->green=255;
00898 if(apvPair->blue>255)apvPair->blue=255;
00899 if(temporary_file)*svgfile << apvPair->red << " " << apvPair->green << " " << apvPair->blue << " ";
00900 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<apvPair->red<<","<<apvPair->green<<","<<apvPair->blue<<")\" points=\"";
00901 }
00902 }else{
00903 if(apvPair->mod->red < 0){
00904 if(apvPair->mod->count > 0) {
00905 color = getcolor(apvPair->mod->value,palette);
00906 red=(color>>16)&0xFF;
00907 green=(color>>8)&0xFF;
00908 blue=(color)&0xFF;
00909 if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
00910 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" points=\"";
00911 } else {
00912 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
00913 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"white\" points=\"";
00914 }
00915 } else {
00916 if(apvPair->mod->red>255)apvPair->mod->red=255;
00917 if(apvPair->mod->green>255)apvPair->mod->green=255;
00918 if(apvPair->mod->blue>255)apvPair->mod->blue=255;
00919 if(temporary_file)*svgfile << apvPair->mod->red << " " << apvPair->mod->green << " " << apvPair->mod->blue << " ";
00920 else *svgfile <<"<svg:polygon detid=\""<<apvPair->idex<<"\" count=\""<<apvPair->count <<"\" value=\""<<apvPair->value<<"\" id=\""<<apvPair->idex+crate*1000000<<"\" cmodid=\""<<apvPair->mod->getKey()<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Fed/Ch "<<apvPair->getFedId()<<"/"<<apvPair->getFedCh()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<apvPair->mod->red<<","<<apvPair->mod->green<<","<<apvPair->mod->blue<<")\" points=\"";
00921 }
00922 }
00923 if(temporary_file)*svgfile << np << " ";
00924 for(int k=0;k<np;k++){
00925 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
00926 else *svgfile << xd[k] << "," << yd[k] << " " ;
00927 }
00928 if(temporary_file)*svgfile << std::endl;
00929 else *svgfile <<"\" />" <<std::endl;
00930 }
00931 void TrackerMap::drawCcu(int crate, int numfec_incrate, bool print_total, TmCcu* ccu,std::ofstream * svgfile,bool useCcuValue)
00932 {
00933 double xp[4],yp[4];
00934 int color;
00935 int green = 0;
00936 int red = 0;
00937 int blue = 0;
00938 double xd[4],yd[4];
00939 int np = 4;
00940 double boxinitx=0., boxinity=0.;
00941 double dx=.9,dy=.9;
00942 int numccu_incolumn = 8;
00943 int numccu_inrow = 15;
00944 int numfed_incolumn = 5;
00945 int numfed_inrow = 4;
00946 boxinitx=boxinitx+(numfed_incolumn-(numfec_incrate-1)/numfed_inrow)*14.;
00947 boxinity=boxinity+(numfed_inrow-(numfec_incrate-1)%numfed_inrow)*16.;
00948 boxinity=boxinity+numccu_inrow-ccu->mpos;
00949 boxinitx = boxinitx+numccu_incolumn-(int)(ccu->getCcuRing()%numccu_incolumn);
00950
00951 xp[0]=boxinitx;yp[0]=boxinity;
00952 xp[1]=boxinitx+dx;yp[1]=boxinity;
00953 xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
00954 xp[3]=boxinitx;yp[3]=boxinity + dy;
00955 for(int j=0;j<4;j++){
00956 xd[j]=xdpixelfec(xp[j]);yd[j]=ydpixelfec(yp[j]);
00957
00958 }
00959
00960 char buffer [20];
00961 sprintf(buffer,"%X",ccu->idex);
00962
00963
00964 std::string s = ccu->text;
00965 s.erase(s.begin()+s.find("connected"),s.end());
00966
00967 if(ccu->red < 0){
00968 if(ccu->count > 0) {
00969 color = getcolor(ccu->value,palette);
00970 red=(color>>16)&0xFF;
00971 green=(color>>8)&0xFF;
00972 blue=(color)&0xFF;
00973 if(!print_total)ccu->value=ccu->value*ccu->count;
00974 if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
00975 else *svgfile <<"<svg:polygon detid=\""<<ccu->idex<<"\" count=\""<<ccu->count <<"\" value=\""<<ccu->value<<"\" id=\""<<ccu->idex+crate*1000000<<"\" cmodid=\""<<ccu->cmodid<<"\" layer=\""<<ccu->layer<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Slot/Ring"<<ccu->getCcuSlot()<<"/"<<ccu->getCcuRing()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" points=\"";
00976 } else {
00977 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
00978 else *svgfile <<"<svg:polygon detid=\""<<ccu->idex<<"\" count=\""<<ccu->count <<"\" value=\""<<ccu->value<<"\" id=\""<<ccu->idex+crate*1000000<<"\" cmodid=\""<<ccu->cmodid<<"\" layer=\""<<ccu->layer<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Slot/Ring "<<ccu->getCcuSlot()<<"/"<<ccu->getCcuRing()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"white\" points=\"";
00979 }
00980 } else {
00981 if(ccu->red>255)ccu->red=255;
00982 if(ccu->green>255)ccu->green=255;
00983 if(ccu->blue>255)ccu->blue=255;
00984 if(temporary_file)*svgfile << ccu->red << " " << ccu->green << " " << ccu->blue << " ";
00985 else *svgfile <<"<svg:polygon detid=\""<<ccu->idex<<"\" count=\""<<ccu->count <<"\" value=\""<<ccu->value<<"\" id=\""<<ccu->idex+crate*1000000<<"\" cmodid=\""<<ccu->cmodid<<"\" layer=\""<<ccu->layer<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"Slot/Ring "<<ccu->getCcuSlot()<<"/"<<ccu->getCcuRing()<<" connected to "<<s<<" Id "<<buffer<<" \" fill=\"rgb("<<ccu->red<<","<<ccu->green<<","<<ccu->blue<<")\" points=\"";
00986 }
00987 if(temporary_file)*svgfile << np << " ";
00988 for(int k=0;k<np;k++){
00989 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
00990 else *svgfile << xd[k] << "," << yd[k] << " " ;
00991 }
00992 if(temporary_file)*svgfile << std::endl;
00993 else *svgfile <<"\" />" <<std::endl;
00994
00995 }
00996 void TrackerMap::drawPsu(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
00997 {
00998 double xp[4],yp[4];
00999 int color;
01000 int green = 0;
01001 int red = 0;
01002 int blue = 0;
01003 double xd[4],yd[4];
01004 int np = 4;
01005 double boxinitx=35, boxinity=12;
01006 double dx=3,dy=1.3;
01007
01008 boxinitx= boxinitx+(5 - numcrate_inrack)*5;
01009 boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
01010
01011 xp[0]=boxinitx;yp[0]=boxinity;
01012 xp[1]=boxinitx+dx;yp[1]=boxinity;
01013 xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
01014 xp[3]=boxinitx;yp[3]=boxinity + dy;
01015
01016
01017 for(int j=0;j<4;j++){
01018 xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
01019
01020 }
01021
01022 char buffer [20];
01023 sprintf(buffer,"%X",psu->idex);
01024 std::string s = psu->text;
01025 s.erase(s.begin()+s.find("connected"),s.end());
01026
01027 if(psu->red < 0){
01028 if(psu->value > 0){
01029 color = getcolor(psu->value,palette);
01030 red=(color>>16)&0xFF;
01031 green=(color>>8)&0xFF;
01032 blue=(color)&0xFF;
01033 if(!print_total)psu->value=psu->value*psu->count;
01034 if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
01035 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->count <<"\" value=\""<<psu->value<<"\" id=\""<< psu->idex <<"\" cmodid=\""<<psu->cmodid_LV<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" points=\"";
01036 }
01037 else{
01038
01039 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
01040 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->count <<"\" value=\""<<psu->value<<"\" id=\""<< psu->idex <<"\" cmodid=\""<<psu->cmodid_LV<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"white\" points=\"";
01041 }
01042 }
01043
01044 else {
01045 if(psu->red>255)psu->red=255;
01046 if(psu->green>255)psu->green=255;
01047 if(psu->blue>255)psu->blue=255;
01048 if(temporary_file)*svgfile << psu->red << " " << psu->green << " " << psu->blue << " ";
01049 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->count <<"\" value=\""<<psu->value<<"\" id=\""<< psu->idex <<"\" cmodid=\""<<psu->cmodid_LV<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<psu->red<<","<<psu->green<<","<<psu->blue<<")\" points=\"";
01050 }
01051
01052 if(temporary_file)*svgfile << np << " ";
01053 for(int k=0;k<np;k++){
01054 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
01055 else *svgfile << xd[k] << "," << yd[k] << " " ;
01056 }
01057 if(temporary_file)*svgfile << std::endl;
01058 else *svgfile <<"\" />" <<std::endl;
01059
01060 }
01061
01062 void TrackerMap::drawHV2(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
01063 {
01064 double xp[4],yp[4];
01065 int color;
01066 int greenHV2 = 0;
01067 int redHV2 = 0;
01068 int blueHV2 = 0;
01069 double xd[4],yd[4];
01070 int np = 4;
01071 double boxinitx=35, boxinity=12;
01072 double dx=1.1,dy=1.3;
01073
01074 boxinitx= boxinitx+(5 - numcrate_inrack)*5;
01075 boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
01076
01077 xp[0]=boxinitx;yp[0]=boxinity;
01078 xp[1]=boxinitx+dx;yp[1]=boxinity;
01079 xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
01080 xp[3]=boxinitx;yp[3]=boxinity + dy;
01081
01082
01083 for(int j=0;j<4;j++){
01084 xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
01085
01086 }
01087
01088 char buffer [20];
01089 sprintf(buffer,"%X",psu->idex);
01090 std::string s = psu->textHV2;
01091 s.erase(s.begin()+s.find("connected"),s.end());
01092
01093 if(psu->redHV2 < 0){
01094
01095 if(psu->valueHV2 > 0){
01096 color = getcolor(psu->valueHV2,palette);
01097 redHV2=(color>>16)&0xFF;
01098 greenHV2=(color>>8)&0xFF;
01099 blueHV2=(color)&0xFF;
01100 if(!print_total)psu->valueHV2=psu->valueHV2*psu->countHV2;
01101 if(temporary_file)*svgfile << redHV2 << " " << greenHV2 << " " << blueHV2 << " ";
01102 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV2 <<"\" value=\""<<psu->valueHV2<<"\" id=\""<< psu->idex*10+2 <<"\" cmodid=\""<<psu->cmodid_HV2<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<redHV2<<","<<greenHV2<<","<<blueHV2<<")\" points=\"";
01103 }
01104 else{
01105 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
01106 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV2 <<"\" value=\""<<psu->valueHV2<<"\" id=\""<< psu->idex*10+2 <<"\" cmodid=\""<<psu->cmodid_HV2<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"white\" points=\"";
01107 }
01108 }
01109
01110 else {
01111 if(psu->redHV2>255)psu->redHV2=255;
01112 if(psu->greenHV2>255)psu->greenHV2=255;
01113 if(psu->blueHV2>255)psu->blueHV2=255;
01114 if(temporary_file)*svgfile << psu->redHV2 << " " << psu->greenHV2 << " " << psu->blueHV2 << " ";
01115 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV2 <<"\" value=\""<<psu->valueHV2<<"\" id=\""<< psu->idex*10+2 <<"\" cmodid=\""<<psu->cmodid_HV2<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<psu->redHV2<<","<<psu->greenHV2<<","<<psu->blueHV2<<")\" points=\"";
01116 }
01117
01118 if(temporary_file)*svgfile << np << " ";
01119 for(int k=0;k<np;k++){
01120 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
01121 else *svgfile << xd[k] << "," << yd[k] << " " ;
01122 }
01123 if(temporary_file)*svgfile << std::endl;
01124 else *svgfile <<"\" />" <<std::endl;
01125
01126 }
01127
01128
01129 void TrackerMap::drawHV3(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
01130 {
01131 double xp[4],yp[4];
01132 int color;
01133 int greenHV3 = 0;
01134 int redHV3 = 0;
01135 int blueHV3 = 0;
01136 double xd[4],yd[4];
01137 int np = 4;
01138 double boxinitx=36.5, boxinity=12;
01139 double dx=1.1,dy=1.3;
01140
01141 boxinitx= boxinitx+(5 - numcrate_inrack)*5;
01142 boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
01143
01144 xp[0]=boxinitx;yp[0]=boxinity;
01145 xp[1]=boxinitx+dx;yp[1]=boxinity;
01146 xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
01147 xp[3]=boxinitx;yp[3]=boxinity + dy;
01148
01149
01150 for(int j=0;j<4;j++){
01151 xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
01152
01153 }
01154
01155 char buffer [20];
01156 sprintf(buffer,"%X",psu->idex);
01157 std::string s = psu->textHV3;
01158 s.erase(s.begin()+s.find("connected"),s.end());
01159
01160 if(psu->redHV3 < 0){
01161 if(psu->valueHV3 > 0){
01162 color = getcolor(psu->valueHV3,palette);
01163 redHV3=(color>>16)&0xFF;
01164 greenHV3=(color>>8)&0xFF;
01165 blueHV3=(color)&0xFF;
01166 if(!print_total)psu->valueHV3=psu->valueHV3*psu->countHV3;
01167 if(temporary_file)*svgfile << redHV3 << " " << greenHV3 << " " << blueHV3 << " ";
01168 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV3 <<"\" value=\""<<psu->valueHV3<<"\" id=\""<< psu->idex*10+3 <<"\" cmodid=\""<<psu->cmodid_HV3<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard"<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<redHV3<<","<<greenHV3<<","<<blueHV3<<")\" points=\"";
01169 }
01170 else{
01171 if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
01172 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV3 <<"\" value=\""<<psu->valueHV3<<"\" id=\""<< psu->idex*10+3 <<"\" cmodid=\""<<psu->cmodid_HV3<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"white\" points=\"";
01173 }
01174 }
01175
01176 else {
01177 if(psu->redHV3>255)psu->redHV3=255;
01178 if(psu->greenHV3>255)psu->greenHV3=255;
01179 if(psu->blueHV3>255)psu->blueHV3=255;
01180 if(temporary_file)*svgfile << psu->redHV3 << " " << psu->greenHV3 << " " << psu->blueHV3 << " ";
01181 else *svgfile <<"<svg:polygon detid=\""<<psu->idex<<"\" count=\""<<psu->countHV3 <<"\" value=\""<<psu->valueHV3<<"\" id=\""<< psu->idex*10+3 <<"\" cmodid=\""<<psu->cmodid_HV3<<"\" onclick=\"showData(evt);\" onmouseover=\"showData(evt);\" onmouseout=\"showData(evt);\" MESSAGE=\"""\" POS=\"easyCrate/easyBoard "<<psu->getPsuCrate()<<"/"<<psu->getPsuBoard()<<" connected to "<<s<<" \" fill=\"rgb("<<psu->redHV3<<","<<psu->greenHV3<<","<<psu->blueHV3<<")\" points=\"";
01182 }
01183
01184 if(temporary_file)*svgfile << np << " ";
01185 for(int k=0;k<np;k++){
01186 if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
01187 else *svgfile << xd[k] << "," << yd[k] << " " ;
01188 }
01189 if(temporary_file)*svgfile << std::endl;
01190 else *svgfile <<"\" />" <<std::endl;
01191
01192 }
01193
01194 void TrackerMap::save_as_fectrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
01195 if(enableFecProcessing){
01196 std::string filetype=s,outputfilename=s;
01197 std::vector<TPolyLine*> vp;
01198 size_t found=filetype.find_last_of(".");
01199 filetype=filetype.substr(found+1);
01200 found=outputfilename.find_last_of(".");
01201 outputfilename=outputfilename.substr(0,found);
01202 temporary_file=true;
01203 if(filetype=="xml"||filetype=="svg")temporary_file=false;
01204 std::ostringstream outs;
01205 minvalue=minval; maxvalue=maxval;
01206 outs << outputfilename << ".coor";
01207 if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01208 std::map<int , TmCcu *>::iterator i_ccu;
01209 std::multimap<TmCcu*, TmModule*>::iterator it;
01210 std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
01211
01212 bool useCcuValue=false;
01213
01214
01215 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01216 TmCcu * ccu= i_ccu->second;
01217 if(ccu!=0) {
01218 if(ccu->count > 0 || ccu->red!=-1) { useCcuValue=true; break;}
01219 }
01220 }
01221
01222
01223 if(!useCcuValue)
01224 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01225 TmCcu * ccu= i_ccu->second;
01226 if(ccu!=0) {
01227 ret = fecModuleMap.equal_range(ccu);
01228 for (it = ret.first; it != ret.second; ++it)
01229 {
01230 if( (*it).second->count>0){ccu->value=ccu->value+(*it).second->value;ccu->count++;}
01231 }
01232 if(ccu->count>0)ccu->value=ccu->value/ccu->count;
01233 if(ccu->nmod==0) { ccu->red=0;ccu->green=0;ccu->blue=0;}
01234 }
01235 }
01236
01237
01238 if(title==" Tracker Map from QTestAlarm"){
01239 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01240 TmCcu * ccu= i_ccu->second;
01241 if(ccu!=0) {
01242 ret = fecModuleMap.equal_range(ccu);
01243 ccu->red=0;ccu->green=255;ccu->blue=0;
01244 for (it = ret.first; it != ret.second; ++it) {
01245 if( !( (*it).second->red==0 && (*it).second->green==255 && (*it).second->blue==0 ) && !( (*it).second->red==255 && (*it).second->green==255 && (*it).second->blue==255 ) ){
01246 ccu->red=255;ccu->green=0;ccu->blue=0;
01247 }
01248 }
01249 }
01250 }
01251 }
01252
01253
01254
01255 if(!print_total){
01256 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01257 TmCcu * ccu= i_ccu->second;
01258 if(ccu!=0) {
01259 if(useCcuValue) ccu->value = ccu->value / ccu->count;
01260
01261 }
01262 }
01263 }
01264
01265 if(minvalue>=maxvalue){
01266
01267 minvalue=9999999.;
01268 maxvalue=-9999999.;
01269 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01270 TmCcu * ccu= i_ccu->second;
01271 if(ccu!=0) {
01272 if (minvalue > ccu->value)minvalue=ccu->value;
01273 if (maxvalue < ccu->value)maxvalue=ccu->value;
01274 }
01275 }
01276 }
01277
01278
01279
01280 if(filetype=="svg"){
01281 saveAsSingleLayer=false;
01282 std::ostringstream outs;
01283 outs << outputfilename<<".svg";
01284 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01285 *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
01286 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01287 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
01288 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
01289 *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
01290 *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
01291 *savefile << "<svg:g id=\"fedtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
01292 }
01293 for (int crate=1; crate < (nfeccrates+1); crate++){
01294 if(filetype=="xml"){
01295 saveAsSingleLayer=true;
01296 std::ostringstream outs;
01297 outs << outputfilename<<"feccrate" <<crate<< ".xml";
01298 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01299 *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
01300 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01301 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
01302 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
01303 *savefile << "<script type=\"text/ecmascript\" xlink:href=\"feccrate.js\" />"<<std::endl;
01304 *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
01305 *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
01306 *savefile << "<g id=\"crate\" transform=\" translate(280,580) rotate(270) scale(.7,.8)\" > "<<std::endl;
01307 }
01308 ncrate=crate;
01309 deffecwindow(ncrate);
01310
01311 for ( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01312 TmCcu * ccu= i_ccu->second;
01313 if(ccu!=0){
01314 if(ccu->getCcuCrate() == crate){
01315
01316 drawCcu(crate,ccu->getCcuSlot()-2,print_total,ccu,savefile,useCcuValue);
01317 }
01318 }
01319 }
01320
01321 if(!temporary_file){
01322 if(filetype=="xml"){
01323 *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
01324 *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
01325 *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
01326 *savefile << " </text> </svg>" << std::endl;
01327 savefile->close();
01328 saveAsSingleLayer=false;
01329 }
01330 }
01331 }
01332 if(filetype=="svg"){
01333 *savefile << "</g> </svg> </svg> " << std::endl;
01334 savefile->close();
01335 }
01336 if(!print_total && !useCcuValue){
01337
01338 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
01339 TmCcu * ccu= i_ccu->second;
01340 if(ccu!=0) {
01341 ccu->value = ccu->value * ccu->count;
01342 }
01343 }
01344 }
01345 if(temporary_file){
01346
01347 savefile->close();
01348
01349 const char * command1;
01350 std::string tempfilename = outputfilename + ".coor";
01351 int red,green,blue,npoints,colindex,ncolor;
01352 double x[4],y[4];
01353 ifstream tempfile(tempfilename.c_str(),std::ios::in);
01354 TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
01355 gPad->SetFillColor(38);
01356
01357 gPad->Range(0,0,3700,1600);
01358
01359
01360 ncolor=0;
01361 typedef std::map<int,int> ColorList;
01362 ColorList colorList;
01363 ColorList::iterator pos;
01364 TColor *col,*c;
01365 while(!tempfile.eof()) {
01366 tempfile >> red >> green >> blue >> npoints;
01367 colindex=red+green*1000+blue*1000000;
01368 pos=colorList.find(colindex);
01369 if(pos == colorList.end()){
01370 colorList[colindex]=ncolor+100;
01371 col =gROOT->GetColor(ncolor+100);
01372 if(col)
01373 col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01374 else
01375 c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01376 vc.push_back(c);
01377 ncolor++;
01378 }
01379 for (int i=0;i<npoints;i++){
01380 tempfile >> x[i] >> y[i];
01381 }
01382 }
01383 if(ncolor>0 && ncolor<10000){
01384 Int_t colors[10000];
01385 for(int i=0;i<ncolor;i++){colors[i]=i+100;}
01386 gStyle->SetPalette(ncolor,colors);
01387 }
01388 tempfile.clear();
01389 tempfile.seekg(0,std::ios::beg);
01390 std::cout << "created palette with " << ncolor << " colors" << std::endl;
01391 while(!tempfile.eof()) {
01392 tempfile >> red >> green >> blue >> npoints;
01393 for (int i=0;i<npoints;i++){
01394 tempfile >> x[i] >> y[i];
01395 }
01396 colindex=red+green*1000+blue*1000000;
01397 pos=colorList.find(colindex);
01398 if(pos != colorList.end()){
01399 TPolyLine* pline = new TPolyLine(npoints,y,x);
01400 vp.push_back(pline);
01401 pline->SetFillColor(colorList[colindex]);
01402 pline->SetLineWidth(0);
01403 pline->Draw("f");
01404 }
01405 }
01406 MyC->Update();
01407 std::cout << "Filetype " << filetype << std::endl;
01408 if(filetype=="png"){
01409 std::string filename = outputfilename + ".png";
01410 MyC->Print(filename.c_str());
01411 }
01412 if(filetype=="jpg"){
01413 std::string filename = outputfilename + ".jpg";
01414 MyC->Print(filename.c_str());
01415 }
01416 if(filetype=="pdf"){
01417 std::string filename = outputfilename + ".pdf";
01418 MyC->Print(filename.c_str());
01419 }
01420 std::string command = "rm "+tempfilename ;
01421 command1=command.c_str();
01422 std::cout << "Executing " << command1 << std::endl;
01423 system(command1);
01424 MyC->Clear();
01425 delete MyC;
01426 for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
01427 delete (*pos1);}
01428
01429
01430
01431
01432 }
01433 }
01434 }
01435 void TrackerMap::save_as_HVtrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
01436
01437 if(enableHVProcessing){
01438 std::string filetype=s,outputfilename=s;
01439 std::vector<TPolyLine*> vp;
01440
01441 size_t found=filetype.find_last_of(".");
01442 filetype=filetype.substr(found+1);
01443 found=outputfilename.find_last_of(".");
01444 outputfilename=outputfilename.substr(0,found);
01445
01446 temporary_file=true;
01447
01448
01449 if(filetype=="xml"||filetype=="svg")temporary_file=false;
01450
01451 std::ostringstream outs;
01452 minvalue=minval; maxvalue=maxval;
01453 outs << outputfilename << ".coor";
01454 if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01455
01456 std::map<int , TmPsu *>::iterator ipsu;
01457 std::multimap<TmPsu*, TmModule*>::iterator it;
01458 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
01459
01460
01461 bool usePsuValue=false;
01462
01463 for( ipsu=psuMap.begin();ipsu!=psuMap.end(); ipsu++){
01464 TmPsu* psu= ipsu->second;
01465 if(psu!=0) {
01466 if(psu->countHV2 > 0 || psu->redHV2!=-1 || psu->countHV3 > 0 || psu->redHV3!=-1) { usePsuValue=true; break;}
01467 }
01468 }
01469
01470 if(!usePsuValue){
01471
01472 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01473 TmPsu * psu= ipsu->second;
01474 if(psu!=0) {
01475 ret = psuModuleMap.equal_range(psu);
01476 for(it = ret.first; it != ret.second; ++it){
01477 if((*it).second->HVchannel==2){ psu->valueHV2=psu->valueHV2+(*it).second->value;}
01478 if((*it).second->HVchannel==3){ psu->valueHV3=psu->valueHV3+(*it).second->value;}
01479 }
01480 if(psu->nmodHV2!=0){psu->valueHV2=psu->valueHV2/psu->nmodHV2;}
01481 if(psu->nmodHV3!=0){psu->valueHV3=psu->valueHV3/psu->nmodHV3;}
01482 psu->countHV2=1;
01483 psu->countHV3=1;
01484
01485 }
01486
01487 }
01488 }
01489
01490 if(title==" Tracker Map from QTestAlarm"){
01491 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01492 TmPsu * psu= ipsu->second;
01493 if(psu!=0) {
01494 ret = psuModuleMap.equal_range(psu);
01495 psu->redHV2=0;psu->greenHV2=255;psu->blueHV2=0;
01496 psu->redHV3=0;psu->greenHV3=255;psu->blueHV3=0;
01497 for (it = ret.first; it != ret.second; ++it) {
01498 if((*it).second->HVchannel==2){
01499 if( !( (*it).second->red==0 && (*it).second->green==255 && (*it).second->blue==0 ) && !( (*it).second->red==255 && (*it).second->green==255 && (*it).second->blue==255 ) ){
01500 psu->redHV2=255;psu->greenHV2=0;psu->blueHV2=0;
01501 }
01502 }
01503 if((*it).second->HVchannel==3){
01504 if( !( (*it).second->red==0 && (*it).second->green==255 && (*it).second->blue==0 ) && !( (*it).second->red==255 && (*it).second->green==255 && (*it).second->blue==255 ) ){
01505 psu->redHV3=255;psu->greenHV3=0;psu->blueHV3=0;
01506 }
01507 }
01508 }
01509 }
01510 }
01511 }
01512
01513 if(!print_total){
01514 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01515 TmPsu * psu= ipsu->second;
01516 if(psu!=0) {
01517 if(usePsuValue){
01518 psu->valueHV2 = psu->valueHV2 / psu->countHV2;
01519 psu->valueHV3 = psu->valueHV3 / psu->countHV3;
01520 }
01521 }
01522 }
01523 }
01524
01525 if(minvalue>=maxvalue){
01526
01527 minvalue=9999999.;
01528 maxvalue=-9999999.;
01529
01530 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01531 TmPsu * psu= ipsu->second;
01532 if(psu!=0) {
01533 if (minvalue > psu->valueHV2 || minvalue > psu->valueHV3)minvalue=std::min(psu->valueHV2,psu->valueHV3);
01534 if (maxvalue < psu->valueHV2 || maxvalue < psu->valueHV3)maxvalue=std::max(psu->valueHV2,psu->valueHV3);
01535
01536
01537 }
01538 }
01539 }
01540
01541 if(filetype=="svg"){
01542 saveAsSingleLayer=false;
01543 std::ostringstream outs;
01544 outs << outputfilename<<".svg";
01545 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01546 *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
01547 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01548 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
01549 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
01550 *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
01551 *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
01552 *savefile << "<svg:g id=\"HVtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
01553 }
01554
01555 for (int irack=1; irack < (npsuracks+1); irack++){
01556 if(filetype=="xml"){
01557 saveAsSingleLayer=true;
01558 std::ostringstream outs;
01559 outs << outputfilename<<"HVrack" <<irack<< ".xml";
01560 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01561 *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
01562 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01563 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
01564 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
01565 *savefile << "<script type=\"text/ecmascript\" xlink:href=\"rackhv.js\" />"<<std::endl;
01566 *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerRackhv.init()\">"<<std::endl;
01567 *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
01568 *savefile << "<g id=\"rackhv\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
01569 }
01570
01571 nrack=irack;
01572 defpsuwindow(nrack);
01573 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01574 TmPsu * psu= ipsu->second;
01575 if(psu->getPsuRack() == irack){
01576 drawHV2(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
01577 drawHV3(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
01578 }
01579 }
01580
01581
01582 if(!temporary_file){
01583 if(filetype=="xml"){
01584 *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
01585 *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
01586 *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
01587 *savefile << " </text> </svg>" << std::endl;
01588 savefile->close();
01589 saveAsSingleLayer=false;
01590 }
01591 }
01592 }
01593 if(filetype=="svg"){
01594 *savefile << "</g> </svg> </svg> " << std::endl;
01595 savefile->close();
01596 }
01597
01598
01599 if(!print_total && !usePsuValue){
01600 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01601 TmPsu *psu = ipsu->second;
01602 if(psu!=0) {
01603 psu->valueHV2 = psu->valueHV2 * psu->countHV2;
01604 psu->valueHV3 = psu->valueHV3 * psu->countHV3;
01605 }
01606 }
01607 }
01608
01609
01610 if(temporary_file){
01611
01612 savefile->close();
01613
01614 const char * command1;
01615 std::string tempfilename = outputfilename + ".coor";
01616 int red,green,blue,npoints,colindex,ncolor;
01617 double x[4],y[4];
01618 ifstream tempfile(tempfilename.c_str(),std::ios::in);
01619 TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
01620 gPad->SetFillColor(38);
01621
01622 gPad->Range(0,0,3700,1600);
01623
01624
01625 ncolor=0;
01626 typedef std::map<int,int> ColorList;
01627 ColorList colorList;
01628 ColorList::iterator pos;
01629 TColor *col,*c;
01630 while(!tempfile.eof()) {
01631 tempfile >> red >> green >> blue >> npoints;
01632 colindex=red+green*1000+blue*1000000;
01633 pos=colorList.find(colindex);
01634 if(pos == colorList.end()){
01635 colorList[colindex]=ncolor+100;
01636 col =gROOT->GetColor(ncolor+100);
01637 if(col)
01638 col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01639 else
01640 c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01641 vc.push_back(c);
01642 ncolor++;
01643 }
01644 for (int i=0;i<npoints;i++){
01645 tempfile >> x[i] >> y[i];
01646 }
01647 }
01648 if(ncolor>0 && ncolor<10000){
01649 Int_t colors[10000];
01650 for(int i=0;i<ncolor;i++){colors[i]=i+100;}
01651 gStyle->SetPalette(ncolor,colors);
01652 }
01653 tempfile.clear();
01654 tempfile.seekg(0,std::ios::beg);
01655 std::cout << "created palette with " << ncolor << " colors" << std::endl;
01656 while(!tempfile.eof()) {
01657 tempfile >> red >> green >> blue >> npoints;
01658 for (int i=0;i<npoints;i++){
01659 tempfile >> x[i] >> y[i];
01660 }
01661 colindex=red+green*1000+blue*1000000;
01662 pos=colorList.find(colindex);
01663 if(pos != colorList.end()){
01664 TPolyLine* pline = new TPolyLine(npoints,y,x);
01665 vp.push_back(pline);
01666 pline->SetFillColor(colorList[colindex]);
01667 pline->SetLineWidth(0);
01668 pline->Draw("f");
01669 }
01670 }
01671 MyC->Update();
01672 std::cout << "Filetype " << filetype << std::endl;
01673 if(filetype=="png"){
01674 std::string filename = outputfilename + ".png";
01675 MyC->Print(filename.c_str());
01676 }
01677 if(filetype=="jpg"){
01678 std::string filename = outputfilename + ".jpg";
01679 MyC->Print(filename.c_str());
01680 }
01681 if(filetype=="pdf"){
01682 std::string filename = outputfilename + ".pdf";
01683 MyC->Print(filename.c_str());
01684 }
01685 std::string command = "rm "+tempfilename ;
01686 command1=command.c_str();
01687 std::cout << "Executing " << command1 << std::endl;
01688 system(command1);
01689 MyC->Clear();
01690 delete MyC;
01691 for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
01692 delete (*pos1);}
01693
01694
01695 }
01696 }
01697 }
01698
01699
01700 void TrackerMap::save_as_psutrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
01701
01702 if(enableLVProcessing){
01703
01704 std::string filetype=s,outputfilename=s;
01705 std::vector<TPolyLine*> vp;
01706
01707 size_t found=filetype.find_last_of(".");
01708 filetype=filetype.substr(found+1);
01709 found=outputfilename.find_last_of(".");
01710 outputfilename=outputfilename.substr(0,found);
01711
01712 temporary_file=true;
01713
01714
01715
01716 if(filetype=="xml"||filetype=="svg")temporary_file=false;
01717
01718 std::ostringstream outs;
01719 minvalue=minval; maxvalue=maxval;
01720 outs << outputfilename << ".coor";
01721 if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01722
01723 std::map<int , TmPsu *>::iterator ipsu;
01724 std::multimap<TmPsu*, TmModule*>::iterator it;
01725 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
01726
01727
01728 bool usePsuValue=false;
01729
01730 for( ipsu=psuMap.begin();ipsu!=psuMap.end(); ipsu++){
01731 TmPsu* psu= ipsu->second;
01732 if(psu!=0) {
01733 if(psu->count > 0 || psu->red!=-1) { usePsuValue=true; break;}
01734 }
01735 }
01736
01737 if(!usePsuValue){
01738 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01739 TmPsu * psu= ipsu->second;
01740 if(psu!=0) {
01741 ret = psuModuleMap.equal_range(psu);
01742 for(it = ret.first; it != ret.second; ++it){
01743 psu->value=psu->value+(*it).second->value;
01744
01745 }
01746 psu->value=psu->value/psu->nmod;
01747 psu->count=1;
01748
01749 }
01750 }
01751 }
01752
01753 if(title==" Tracker Map from QTestAlarm"){
01754 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01755 TmPsu * psu= ipsu->second;
01756 if(psu!=0) {
01757 ret = psuModuleMap.equal_range(psu);
01758 psu->red=0;psu->green=255;psu->blue=0;
01759 for (it = ret.first; it != ret.second; ++it) {
01760 if( !( (*it).second->red==0 && (*it).second->green==255 && (*it).second->blue==0 ) && !( (*it).second->red==255 && (*it).second->green==255 && (*it).second->blue==255 ) ){
01761 psu->red=255;psu->green=0;psu->blue=0;
01762 }
01763 }
01764 }
01765 }
01766 }
01767
01768
01769
01770 if(!print_total){
01771 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01772 TmPsu * psu= ipsu->second;
01773 if(psu!=0) {
01774 if(usePsuValue) psu->value = psu->value / psu->count;
01775
01776 }
01777 }
01778 }
01779
01780 if(minvalue>=maxvalue){
01781
01782 minvalue=9999999.;
01783 maxvalue=-9999999.;
01784 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01785 TmPsu * psu= ipsu->second;
01786 if(psu!=0) {
01787 if (minvalue > psu->value)minvalue=psu->value;
01788 if (maxvalue < psu->value)maxvalue=psu->value;
01789 }
01790 }
01791 }
01792
01793 if(filetype=="svg"){
01794 saveAsSingleLayer=false;
01795 std::ostringstream outs;
01796 outs << outputfilename<<".svg";
01797 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01798 *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
01799 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01800 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
01801 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
01802 *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
01803 *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
01804 *savefile << "<svg:g id=\"psutrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
01805 }
01806
01807 for (int irack=1; irack < (npsuracks+1); irack++){
01808 if(filetype=="xml"){
01809 saveAsSingleLayer=true;
01810 std::ostringstream outs;
01811 outs << outputfilename<<"psurack" <<irack<< ".xml";
01812 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01813 *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
01814 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
01815 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
01816 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
01817 *savefile << "<script type=\"text/ecmascript\" xlink:href=\"rack.js\" />"<<std::endl;
01818 *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
01819 *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
01820 *savefile << "<g id=\"rack\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
01821 }
01822
01823
01824 nrack=irack;
01825 defpsuwindow(nrack);
01826 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01827 TmPsu * psu= ipsu->second;
01828 if(psu->getPsuRack() == irack){
01829
01830 drawPsu(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
01831 }
01832 }
01833
01834
01835 if(!temporary_file){
01836 if(filetype=="xml"){
01837 *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
01838 *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
01839 *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
01840 *savefile << " </text> </svg>" << std::endl;
01841 savefile->close();
01842 saveAsSingleLayer=false;
01843 }
01844 }
01845 }
01846 if(filetype=="svg"){
01847 *savefile << "</g> </svg> </svg> " << std::endl;
01848 savefile->close();
01849 }
01850
01851
01852 if(!print_total && !usePsuValue){
01853 for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
01854 TmPsu *psu = ipsu->second;
01855 if(psu!=0) {
01856 psu->value = psu->value * psu->count;
01857 }
01858 }
01859 }
01860
01861
01862 if(temporary_file){
01863
01864 savefile->close();
01865
01866 const char * command1;
01867 std::string tempfilename = outputfilename + ".coor";
01868 int red,green,blue,npoints,colindex,ncolor;
01869 double x[4],y[4];
01870 ifstream tempfile(tempfilename.c_str(),std::ios::in);
01871 TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
01872 gPad->SetFillColor(38);
01873
01874 gPad->Range(0,0,3700,1600);
01875
01876
01877 ncolor=0;
01878 typedef std::map<int,int> ColorList;
01879 ColorList colorList;
01880 ColorList::iterator pos;
01881 TColor *col,*c;
01882 while(!tempfile.eof()) {
01883 tempfile >> red >> green >> blue >> npoints;
01884 colindex=red+green*1000+blue*1000000;
01885 pos=colorList.find(colindex);
01886 if(pos == colorList.end()){
01887 colorList[colindex]=ncolor+100;
01888 col =gROOT->GetColor(ncolor+100);
01889 if(col)
01890 col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01891 else
01892 c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
01893 vc.push_back(c);
01894 ncolor++;
01895 }
01896 for (int i=0;i<npoints;i++){
01897 tempfile >> x[i] >> y[i];
01898 }
01899 }
01900 if(ncolor>0 && ncolor<10000){
01901 Int_t colors[10000];
01902 for(int i=0;i<ncolor;i++){colors[i]=i+100;}
01903 gStyle->SetPalette(ncolor,colors);
01904 }
01905 tempfile.clear();
01906 tempfile.seekg(0,std::ios::beg);
01907 std::cout << "created palette with " << ncolor << " colors" << std::endl;
01908 while(!tempfile.eof()) {
01909 tempfile >> red >> green >> blue >> npoints;
01910 for (int i=0;i<npoints;i++){
01911 tempfile >> x[i] >> y[i];
01912 }
01913 colindex=red+green*1000+blue*1000000;
01914 pos=colorList.find(colindex);
01915 if(pos != colorList.end()){
01916 TPolyLine* pline = new TPolyLine(npoints,y,x);
01917 vp.push_back(pline);
01918 pline->SetFillColor(colorList[colindex]);
01919 pline->SetLineWidth(0);
01920 pline->Draw("f");
01921 }
01922 }
01923 MyC->Update();
01924 std::cout << "Filetype " << filetype << std::endl;
01925 if(filetype=="png"){
01926 std::string filename = outputfilename + ".png";
01927 MyC->Print(filename.c_str());
01928 }
01929 if(filetype=="jpg"){
01930 std::string filename = outputfilename + ".jpg";
01931 MyC->Print(filename.c_str());
01932 }
01933 if(filetype=="pdf"){
01934 std::string filename = outputfilename + ".pdf";
01935 MyC->Print(filename.c_str());
01936 }
01937 std::string command = "rm "+tempfilename ;
01938 command1=command.c_str();
01939 std::cout << "Executing " << command1 << std::endl;
01940 system(command1);
01941 MyC->Clear();
01942 delete MyC;
01943 for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
01944 delete (*pos1);}
01945
01946 }
01947 }
01948 }
01949
01950 void TrackerMap::save_as_fedtrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
01951 if(enableFedProcessing){
01952 std::string filetype=s,outputfilename=s;
01953 std::vector<TPolyLine*> vp;
01954
01955 size_t found=filetype.find_last_of(".");
01956 filetype=filetype.substr(found+1);
01957 found=outputfilename.find_last_of(".");
01958 outputfilename=outputfilename.substr(0,found);
01959
01960 temporary_file=true;
01961 if(filetype=="xml"||filetype=="svg")temporary_file=false;
01962 std::ostringstream outs;
01963 minvalue=minval; maxvalue=maxval;
01964 outs << outputfilename << ".coor";
01965 if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
01966 std::map<int , TmApvPair *>::iterator i_apv;
01967 std::map<int , int>::iterator i_fed;
01968
01969 bool useApvPairValue=false;
01970 for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
01971 TmApvPair * apvPair= i_apv->second;
01972 if(apvPair!=0) {
01973 TmModule * apv_mod = apvPair->mod;
01974 if(apv_mod !=0 && !apv_mod->notInUse()){
01975 if(apvPair->count > 0 || apvPair->red!=-1) { useApvPairValue=true; break;}
01976 }
01977 }
01978 }
01979 if(!print_total){
01980 for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
01981 TmApvPair * apvPair= i_apv->second;
01982 if(apvPair!=0) {
01983 TmModule * apv_mod = apvPair->mod;
01984 if(apv_mod !=0 && !apv_mod->notInUse()){
01985 if(useApvPairValue) apvPair->value = apvPair->value / apvPair->count;
01986 else if(apvPair->mpos==0)apv_mod->value = apv_mod->value / apv_mod->count;
01987 }
01988 }
01989 }
01990 }
01991 if(minvalue>=maxvalue){
01992
01993 minvalue=9999999.;
01994 maxvalue=-9999999.;
01995 for(i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
01996 TmApvPair * apvPair= i_apv->second;
01997 if(apvPair!=0) {
01998 TmModule * apv_mod = apvPair->mod;
01999 if( apv_mod !=0 && !apv_mod->notInUse()){
02000 if(useApvPairValue){
02001 if (minvalue > apvPair->value)minvalue=apvPair->value;
02002 if (maxvalue < apvPair->value)maxvalue=apvPair->value;
02003 } else {
02004 if (minvalue > apv_mod->value)minvalue=apv_mod->value;
02005 if (maxvalue < apv_mod->value)maxvalue=apv_mod->value;
02006 }
02007 }
02008 }
02009 }
02010 }
02011 if(filetype=="svg"){
02012 saveAsSingleLayer=false;
02013 std::ostringstream outs;
02014 outs << outputfilename<<".svg";
02015 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
02016 *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
02017 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
02018 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
02019 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
02020 *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
02021 *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
02022 *savefile << "<svg:g id=\"fedtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
02023 }
02024 for (int crate=1; crate < (ncrates+1); crate++){
02025 if(filetype=="xml"){
02026 saveAsSingleLayer=true;
02027 std::ostringstream outs;
02028 outs << outputfilename<<"crate" <<crate<< ".xml";
02029 savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
02030 *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
02031 *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
02032 *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
02033 *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
02034 *savefile << "<script type=\"text/ecmascript\" xlink:href=\"crate.js\" />"<<std::endl;
02035 *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
02036 *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
02037 *savefile << "<g id=\"crate\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
02038 }
02039 ncrate=crate;
02040 defcwindow(ncrate);
02041 int numfed_incrate=0;
02042 for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
02043 if(i_fed->second == crate){
02044 int fedId = i_fed->first;
02045 numfed_incrate++;
02046 for (int nconn=0;nconn<96;nconn++){
02047 int key = fedId*1000+nconn;
02048 TmApvPair * apvPair= apvMap[key];
02049 if(apvPair !=0){
02050 TmModule * apv_mod = apvPair->mod;
02051 if(apv_mod !=0 && !apv_mod->notInUse()){
02052 drawApvPair(crate,numfed_incrate,print_total,apvPair,savefile,useApvPairValue);
02053 }
02054 }
02055 }
02056 }
02057 }
02058 if(!temporary_file){
02059 if(filetype=="xml"){
02060 *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
02061 *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
02062 *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
02063 *savefile << " </text> </svg>" << std::endl;
02064 savefile->close();delete savefile;
02065 saveAsSingleLayer=false;
02066 }
02067 }
02068 }
02069 if(filetype=="svg"){
02070 *savefile << "</g> </svg> </svg> " << std::endl;
02071 savefile->close();delete savefile;
02072 }
02073 if(!print_total && !useApvPairValue){
02074
02075 for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
02076 TmApvPair * apvPair= i_apv->second;
02077 if(apvPair!=0) {
02078 TmModule * apv_mod = apvPair->mod;
02079 if(apv_mod !=0 && apvPair->mpos==0 && !apv_mod->notInUse()){
02080 apv_mod->value = apv_mod->value * apv_mod->count;
02081 }
02082 }
02083 }
02084 }
02085
02086 if(temporary_file){
02087
02088 savefile->close(); delete savefile;
02089
02090 const char * command1;
02091 std::string tempfilename = outputfilename + ".coor";
02092 int red,green,blue,npoints,colindex,ncolor;
02093 double x[4],y[4];
02094 ifstream tempfile(tempfilename.c_str(),std::ios::in);
02095 TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
02096 gPad->SetFillColor(38);
02097
02098 gPad->Range(0,0,3750,1600);
02099
02100
02101 ncolor=0;
02102 typedef std::map<int,int> ColorList;
02103 ColorList colorList;
02104 ColorList::iterator pos;
02105 TColor *col,*c;
02106 while(!tempfile.eof()) {
02107 tempfile >> red >> green >> blue >> npoints;
02108 colindex=red+green*1000+blue*1000000;
02109 pos=colorList.find(colindex);
02110 if(pos == colorList.end()){
02111 colorList[colindex]=ncolor+100;
02112 col =gROOT->GetColor(ncolor+100);
02113 if(col)
02114 col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
02115 else
02116 c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
02117 vc.push_back(c);
02118 ncolor++;
02119 }
02120 for (int i=0;i<npoints;i++){
02121 tempfile >> x[i] >> y[i];
02122 }
02123 }
02124 if(ncolor>0 && ncolor<10000){
02125 Int_t colors[10000];
02126 for(int i=0;i<ncolor;i++){colors[i]=i+100;}
02127 gStyle->SetPalette(ncolor,colors);
02128 }
02129 tempfile.clear();
02130 tempfile.seekg(0,std::ios::beg);
02131 std::cout << "created palette with " << ncolor << " colors" << std::endl;
02132 while(!tempfile.eof()) {
02133 tempfile >> red >> green >> blue >> npoints;
02134 for (int i=0;i<npoints;i++){
02135 tempfile >> x[i] >> y[i];
02136 }
02137 colindex=red+green*1000+blue*1000000;
02138 pos=colorList.find(colindex);
02139 if(pos != colorList.end()){
02140 TPolyLine* pline = new TPolyLine(npoints,y,x);
02141 vp.push_back(pline);
02142 pline->SetFillColor(colorList[colindex]);
02143 pline->SetLineWidth(0);
02144 pline->Draw("f");
02145 }
02146 }
02147 MyC->Update();
02148 std::cout << "Filetype " << filetype << std::endl;
02149 if(filetype=="png"){
02150 std::string filename = outputfilename + ".png";
02151 MyC->Print(filename.c_str());
02152 }
02153 if(filetype=="jpg"){
02154 std::string filename = outputfilename + ".jpg";
02155 MyC->Print(filename.c_str());
02156 }
02157 if(filetype=="pdf"){
02158 std::string filename = outputfilename + ".pdf";
02159 MyC->Print(filename.c_str());
02160 }
02161 std::string command = "rm "+tempfilename ;
02162 command1=command.c_str();
02163 std::cout << "Executing " << command1 << std::endl;
02164 system(command1);
02165 MyC->Clear();
02166 delete MyC;
02167 for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
02168 delete (*pos1);}
02169
02170
02171 }
02172 }
02173 }
02174
02175 void TrackerMap::load(std::string inputfilename){
02176 inputfile = new ifstream(inputfilename.c_str(),std::ios::in);
02177 std::string line,value;
02178 int ipos,ipos1,ipos2,id=0,val=0;
02179 int nline=0;
02180 while (getline( *inputfile, line ))
02181 {
02182 ipos1 = line.find("value=\"");
02183 if(ipos1 > 0) {
02184 value = line.substr(ipos1+7,10);
02185 ipos = value.find("\"");
02186 value = value.substr(0,ipos);
02187 val=atoi(value.c_str());
02188 }
02189 ipos2 = line.find("detid=\"");
02190 if(ipos2 > 0) {
02191 value = line.substr(ipos2+7,10);
02192 ipos = value.find("\"");
02193 value = value.substr(0,ipos);
02194 id = atoi(value.c_str());
02195 }
02196 if(ipos1>0 && ipos2>0 && val>0)this->fill(id,val);
02197 if(ipos1>0 && ipos2>0)nline++;
02198
02199
02200 }
02201 std::cout << nline << " modules found in this svg file " << std::endl;
02202 inputfile->close();delete inputfile;
02203 }
02204
02205
02206
02207
02208
02209
02210 void TrackerMap::print(bool print_total, float minval, float maxval, std::string outputfilename){
02211 temporary_file=false;
02212 std::ostringstream outs;
02213 minvalue=minval; maxvalue=maxval;
02214 outs << outputfilename << ".xml";
02215 svgfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02216 jsfile = new ifstream(edm::FileInPath(jsfilename).fullPath().c_str(),std::ios::in);
02217
02218
02219 std::string line;
02220 while (getline( *jsfile, line ))
02221 {
02222 *svgfile << line << std::endl;
02223 }
02224 jsfile->close();delete jsfile;
02225
02226 if(!print_total){
02227 for (int layer=1; layer < 44; layer++){
02228 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
02229 for (int module=1;module<200;module++) {
02230 int key=layer*100000+ring*1000+module;
02231 TmModule * mod = smoduleMap[key];
02232 if(mod !=0 && !mod->notInUse()){
02233 mod->value = mod->value / mod->count;
02234 }
02235 }
02236 }
02237 }
02238 }
02239 if(minvalue>=maxvalue){
02240 minvalue=9999999.;
02241 maxvalue=-9999999.;
02242 for (int layer=1; layer < 44; layer++){
02243 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
02244 for (int module=1;module<200;module++) {
02245 int key=layer*100000+ring*1000+module;
02246 TmModule * mod = smoduleMap[key];
02247 if(mod !=0 && !mod->notInUse()){
02248 if (minvalue > mod->value)minvalue=mod->value;
02249 if (maxvalue < mod->value)maxvalue=mod->value;
02250 }
02251 }
02252 }
02253 }
02254 }
02255 for (int layer=1; layer < 44; layer++){
02256 nlay=layer;
02257 defwindow(nlay);
02258 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
02259 for (int module=1;module<200;module++) {
02260 int key=layer*100000+ring*1000+module;
02261 TmModule * mod = smoduleMap[key];
02262 if(mod !=0 && !mod->notInUse()){
02263 drawModule(mod,key,layer,print_total,svgfile);
02264 }
02265 }
02266 }
02267 }
02268 *svgfile << "</svg:g></svg:svg>"<<std::endl;
02269 *svgfile << " <svg:text id=\"Title\" class=\"normalText\" x=\"300\" y=\"0\">"<<title<<"</svg:text>"<<std::endl;
02270 if(printflag)drawPalette(svgfile);
02271 *svgfile << "</svg:svg>"<<std::endl;
02272 *svgfile << "</body></html>"<<std::endl;
02273 svgfile->close();delete svgfile;
02274
02275 }
02276
02277 void TrackerMap::drawPalette(std::ofstream * svgfile){
02278 int color,red, green, blue;
02279 float val=minvalue;
02280 int paletteLength = 250;
02281 float dval = (maxvalue-minvalue)/(float)paletteLength;
02282 for(int i=0;i<paletteLength;i++){
02283 color = getcolor(val,palette);
02284 red=(color>>16)&0xFF;
02285 green=(color>>8)&0xFF;
02286 blue=(color)&0xFF;
02287
02288
02289
02290
02291
02292
02293
02294
02295
02296
02297 if(!temporary_file)*svgfile <<"<svg:rect x=\"3610\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"6\" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" />\n";
02298 else *svgfile << red << " " << green << " " << blue << " 4 " << (6*i)+40 << " 3610. " <<
02299 (6*i)+40 << " 3660. " <<
02300 (6*(i-1))+40 << " 3660. " <<
02301 (6*(i-1))+40 <<" 3610. " << std::endl;
02302
02303 if(i%50 == 0){
02304 if(!temporary_file)*svgfile <<"<svg:rect x=\"3610\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"1\" fill=\"black\" />\n";
02305 if(i%50==0&&!temporary_file)*svgfile << " <svg:text class=\"normalText\" x=\"3660\" y=\""<<(1560-6*i)<<"\">" <<val<<"</svg:text>"<<std::endl;
02306 }
02307 val = val + dval;
02308 }
02309 }
02310 void TrackerMap::fillc_fed_channel(int fedId,int fedCh, int red, int green, int blue )
02311 {
02312 int key = fedId*1000+fedCh;
02313 TmApvPair* apvpair = apvMap[key];
02314
02315 if(apvpair!=0){
02316 apvpair->red=red; apvpair->green=green; apvpair->blue=blue;
02317 return;
02318 }
02319 std::cout << "*** error in FedTrackerMap fillc method ***";
02320 }
02321
02322 void TrackerMap::fill_fed_channel(int idmod, float qty )
02323 {
02324 std::multimap<const int, TmApvPair*>::iterator pos;
02325 for (pos = apvModuleMap.lower_bound(idmod);
02326 pos != apvModuleMap.upper_bound(idmod); ++pos) {
02327 TmApvPair* apvpair = pos->second;
02328 if(apvpair!=0){
02329 apvpair->value=apvpair->value+qty;
02330 apvpair->count++;
02331 }
02332 }
02333 return;
02334 std::cout << "*** error in FedTrackerMap fill by module method ***";
02335 }
02336
02337 void TrackerMap::fill_current_val_fed_channel(int fedId, int fedCh, float current_val )
02338 {
02339 int key = fedId*1000+fedCh;
02340 TmApvPair* apvpair = apvMap[key];
02341
02342 if(apvpair!=0) {apvpair->value=current_val; apvpair->count=1; apvpair->red=-1;}
02343 else
02344 std::cout << "*** error in FedTrackerMap fill_current_val method ***";
02345 }
02346
02347
02348 void TrackerMap::fillc_fec_channel(int crate,int slot, int ring, int addr, int red, int green, int blue )
02349 {
02350 int key =crate*10000000+slot*100000+ring*1000+addr;
02351
02352 TmCcu *ccu = ccuMap[key];
02353
02354 if(ccu!=0){
02355 ccu->red=red; ccu->green=green; ccu->blue=blue;
02356 return;
02357 }
02358 std::cout << "*** error in FecTrackerMap fillc method ***";
02359 }
02360
02361 void TrackerMap::fill_fec_channel(int crate,int slot, int ring, int addr, float qty )
02362 {
02363 int key =crate*10000000+slot*100000+ring*1000+addr;
02364 TmCcu *ccu = ccuMap[key];
02365 if(ccu!=0){
02366 ccu->count++; ccu->value=ccu->value+qty;
02367 return;
02368
02369 }
02370
02371 std::cout << "*** error in FecTrackerMap fill by module method ***";
02372 }
02373
02374
02375
02376 void TrackerMap::fillc_lv_channel(int rack,int crate, int board, int red, int green, int blue )
02377 {
02378
02379 int key = rack*1000+crate*100+board;
02380
02381 TmPsu *psu = psuMap[key];
02382
02383 if(psu!=0){
02384 psu->red=red; psu->green=green; psu->blue=blue;
02385 return;
02386 }
02387 std::cout << "*** error in LVTrackerMap fillc method ***";
02388 }
02389
02390 void TrackerMap::fill_lv_channel(int rack,int crate, int board, float qty )
02391 {
02392 int key = rack*1000+crate*100+board;
02393 TmPsu *psu = psuMap[key];
02394 if(psu!=0){
02395 psu->count++; psu->value=psu->value+qty;
02396 return;
02397
02398 }
02399
02400 std::cout << "*** error in LVTrackerMap fill by module method ***";
02401 }
02402
02403 void TrackerMap::fillc_hv_channel2(int rack,int crate, int board, int red, int green, int blue )
02404 {
02405
02406 int key = rack*1000+crate*100+board;
02407
02408 TmPsu *psu = psuMap[key];
02409
02410 if(psu!=0){
02411 psu->redHV2=red; psu->greenHV2=green; psu->blueHV2=blue;
02412 return;
02413 }
02414 std::cout << "*** error in HVTrackerMap (channel 2) fillc method ***";
02415 }
02416 void TrackerMap::fillc_hv_channel3(int rack,int crate, int board, int red, int green, int blue )
02417 {
02418
02419 int key = rack*1000+crate*100+board;
02420
02421 TmPsu *psu = psuMap[key];
02422
02423 if(psu!=0){
02424 psu->redHV3=red; psu->greenHV3=green; psu->blueHV3=blue;
02425 return;
02426 }
02427 std::cout << "*** error in HVTrackerMap (channel 3) fillc method ***";
02428 }
02429
02430
02431 void TrackerMap::fill_hv_channel2(int rack,int crate, int board, float qty )
02432 {
02433 int key = rack*1000+crate*100+board;
02434 TmPsu *psu = psuMap[key];
02435 if(psu!=0){
02436 psu->countHV2++; psu->valueHV2=psu->valueHV2+qty;
02437 return;
02438
02439 }
02440
02441 std::cout << "*** error in HVTrackerMap fill by module method ***";
02442 }
02443 void TrackerMap::fill_hv_channel3(int rack,int crate, int board, float qty )
02444 {
02445 int key = rack*1000+crate*100+board;
02446 TmPsu *psu = psuMap[key];
02447 if(psu!=0){
02448 psu->countHV3++; psu->valueHV3=psu->valueHV3+qty;
02449 return;
02450
02451 }
02452
02453 std::cout << "*** error in HVTrackerMap fill by module method ***";
02454 }
02455
02456
02457
02458
02459
02460 int TrackerMap::module(int fedId, int fedCh)
02461 {
02462 int key = fedId*1000+fedCh;
02463 TmApvPair* apvpair = apvMap[key];
02464 if(apvpair!=0){
02465 return(apvpair->mod->idex);
02466 }
02467 return(0);
02468 std::cout << "*** error in FedTrackerMap module method ***";
02469 }
02470 void TrackerMap::fill_fed_channel(int fedId, int fedCh, float qty )
02471 {
02472 int key = fedId*1000+fedCh;
02473 TmApvPair* apvpair = apvMap[key];
02474 if(apvpair!=0){
02475 apvpair->value=apvpair->value+qty;
02476 apvpair->count++;
02477 return;
02478 }
02479 std::cout << "*** error inFedTrackerMap fill method ***";
02480 }
02481
02482
02483 void TrackerMap::fillc(int idmod, int red, int green, int blue ){
02484
02485 TmModule * mod = imoduleMap[idmod];
02486 if(mod!=0){
02487 mod->red=red; mod->green=green; mod->blue=blue;
02488 return;
02489 }
02490 std::cout << "**************************error in fill method **************module "<<idmod<<std::endl;
02491 }
02492 void TrackerMap::fillc(int layer, int ring, int nmod, int red, int green, int blue ){
02493
02494 int key = layer*10000+ring*1000+nmod;
02495 TmModule * mod = smoduleMap[key];
02496
02497 if(mod!=0){
02498 mod->red=red; mod->green=green; mod->blue=blue;
02499 return;
02500 }
02501 std::cout << "**************************error in fill method **************"<< std::endl;
02502 }
02503
02504 void TrackerMap::fillc_all_blank(){
02505
02506 std::map<const int , TmModule *>::iterator imod;
02507 for( imod=imoduleMap.begin();imod !=imoduleMap.end(); imod++){
02508 fillc(imod->first,255,255,255);
02509 }
02510 }
02511
02512 void TrackerMap::fill_all_blank(){
02513
02514 std::map<const int , TmModule *>::iterator imod;
02515 for( imod=imoduleMap.begin();imod !=imoduleMap.end(); imod++){
02516 fill_current_val(imod->first,0);
02517 }
02518 }
02519
02520
02521
02522 void TrackerMap::fill_current_val(int idmod, float current_val ){
02523
02524 TmModule * mod = imoduleMap[idmod];
02525 if(mod!=0) {mod->value=current_val; mod->count=1; mod->red=-1;}
02526 else std::cout << "**error in fill_current_val method ***module "<<idmod<<std::endl;
02527 }
02528
02529 void TrackerMap::fill(int idmod, float qty ){
02530
02531 TmModule * mod = imoduleMap[idmod];
02532 if(mod!=0){
02533 mod->value=mod->value+qty;
02534 mod->count++;
02535 return;
02536 }else{
02537 TmModule * mod1 = imoduleMap[idmod+1];
02538 TmModule * mod2 = imoduleMap[idmod+2];
02539 if(mod1!=0 && mod2!=0){
02540 mod1->value=mod1->value+qty;
02541 mod1->count++;
02542 mod2->value=mod2->value+qty;
02543 mod2->count++;
02544 return;
02545 }}
02546 std::cout << "**************************error in fill method **************module "<<idmod<<std::endl;
02547 }
02548
02549 void TrackerMap::fill(int layer, int ring, int nmod, float qty){
02550
02551 int key = layer*100000+ring*1000+nmod;
02552 TmModule * mod = smoduleMap[key];
02553 if(mod!=0){
02554 mod->value=mod->value+qty;
02555 mod->count++;
02556 }
02557 else std::cout << "**************************error in SvgModuleMap **************";
02558 }
02559
02560 void TrackerMap::setText(int idmod, std::string s){
02561
02562 TmModule * mod = imoduleMap[idmod];
02563 if(mod!=0){
02564 mod->text=s;
02565 }
02566 else std::cout << "**************************error in IdModuleMap **************";
02567 }
02568
02569
02570 void TrackerMap::setText(int layer, int ring, int nmod, std::string s){
02571
02572 int key = layer*100000+ring*1000+nmod;
02573 TmModule * mod = smoduleMap[key];
02574 if(mod!=0){
02575 mod->text=s;
02576 }
02577 else std::cout << "**************************error in SvgModuleMap **************";
02578 }
02579
02580 void TrackerMap::build(){
02581
02582
02583 int nmods, pix_sil, fow_bar, ring, nmod, layer;
02584 unsigned int idex;
02585 float posx, posy, posz, length, width, thickness, widthAtHalfLength;
02586 int iModule=0,old_layer=0, ntotMod =0;
02587 std::string name,dummys;
02588 ifstream infile(edm::FileInPath(infilename).fullPath().c_str(),std::ios::in);
02589 while(!infile.eof()) {
02590 infile >> nmods >> pix_sil >> fow_bar >> layer >> ring >> nmod >> posx >> posy
02591 >> posz>> length >> width >> thickness
02592 >> widthAtHalfLength >> idex ;
02593 getline(infile,dummys);
02594 getline(infile,name);
02595 if(old_layer!=layer){old_layer=layer;iModule=0;}
02596 iModule++;
02597 ntotMod++;
02598 int key=layer*100000+ring*1000+nmod;
02599 TmModule * mod = smoduleMap[key];
02600
02601 imoduleMap[idex]=mod;
02602
02603 if(mod==0) std::cout << "error in module "<<key <<std::endl;
02604 else
02605 {
02606 mod->posx = posx;
02607 mod->posy = posy;
02608 mod->setUsed();
02609 mod->value=0;
02610 mod->count=0;
02611 mod->posz = posz;
02612 mod->length = length;
02613 mod->width = width;
02614 mod->thickness = thickness;
02615 mod->widthAtHalfLength = widthAtHalfLength;
02616 mod->idex = idex;
02617 mod->name = name;
02618 }
02619 }
02620 infile.close();
02621 number_modules = ntotMod-1;
02622 }
02623 int TrackerMap::getcolor(float value,int palette){
02624 int red,green,blue;
02625 red=0;green=0;blue=0;
02626 if(palette==1){
02627 float delta=(maxvalue-minvalue);
02628 float x =(value-minvalue);
02629 if(value<minvalue){red=0;green=0;blue=255;}
02630 if(value>maxvalue){red=255;green=0;blue=0;}
02631 if(value>=minvalue&&value<=maxvalue){
02632 red = (int) ( x<(delta/2) ? 0 : ( x > ((3./4.)*delta) ? 255 : 255/(delta/4) * (x-(2./4.)*delta) ) );
02633 green= (int) ( x<delta/4 ? (x*255/(delta/4)) : ( x > ((3./4.)*delta) ? 255-255/(delta/4) *(x-(3./4.)*delta) : 255 ) );
02634 blue = (int) ( x<delta/4 ? 255 : ( x > ((1./2.)*delta) ? 0 : 255-255/(delta/4) * (x-(1./4.)*delta) ) );
02635 }
02636 }
02637 if (palette==2){
02638 green = (int)((value-minvalue)/(maxvalue-minvalue)*256.);
02639 if (green > 255) green=255;
02640 red = 255; blue=0;green=255-green;
02641 }
02642 return(blue|(green<<8)|(red<<16));
02643 }
02644 void TrackerMap::printonline(){
02645
02646 std::ofstream * ofilename;
02647 std::ifstream * ifilename;
02648 std::ostringstream ofname;
02649 std::string ifname;
02650 std::string command;
02651 std::string line;
02652 std::string outputfilename="dqmtmap";
02653 ifilename=findfile("viewerHeader.xhtml");
02654 ofname << outputfilename << "viewer.html";
02655 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02656 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02657 *ofilename <<" var tmapname=\"" <<outputfilename << "\""<<std::endl;
02658 *ofilename <<" var tmaptitle=\"" <<title << "\""<<std::endl;
02659 *ofilename <<" var ncrates=" <<ncrates << ";"<<std::endl;
02660 *ofilename <<" var nfeccrates=" <<nfeccrates << ";"<<std::endl;
02661 *ofilename <<" var npsuracks=" <<npsuracks << ";"<<std::endl;
02662
02663 ifilename->close();delete ifilename;
02664
02665 ifilename=findfile("viewerTrailer.xhtml");
02666 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02667 ofilename->close();delete ofilename;
02668 command = "sed -i \"s/XtmapnameX/"+outputfilename+"/g\" "+ ofname.str();
02669 std::cout << "Executing " << command << std::endl;
02670 system(command.c_str());
02671 command = "sed -i \"s/XtmaptitleX/"+title+"/g\" "+ ofname.str();
02672 std::cout << "Executing " << command << std::endl;
02673 system(command.c_str());
02674 ofname.str("");
02675 ifilename->close();delete ifilename;
02676
02677 ifilename=findfile("jqviewer.js");
02678 ofname << "jqviewer.js";
02679 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02680 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02681 ofname.str("");
02682 ofilename->close();delete ofilename;
02683 ifilename->close();delete ifilename;
02684
02685 ifilename=findfile("crate.js");
02686 ofname << "crate.js";
02687 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02688 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02689 ofname.str("");
02690 ofilename->close();delete ofilename;
02691 ifilename->close();delete ifilename;
02692
02693 ifilename=findfile("feccrate.js");
02694 ofname << "feccrate.js";
02695 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02696 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02697 ofname.str("");
02698 ofilename->close();delete ofilename;
02699 ifilename->close();delete ifilename;
02700
02701 ifilename=findfile("layer.js");
02702 ofname << "layer.js";
02703 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02704 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02705 ofname.str("");
02706 ofilename->close();delete ofilename;
02707 ifilename->close();delete ifilename;
02708
02709 ifilename=findfile("rack.js");
02710 ofname << "rack.js";
02711 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02712 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02713 ofname.str("");
02714 ofilename->close();delete ofilename;
02715 ifilename->close();delete ifilename;
02716 ofname.str("");
02717
02718 ifilename=findfile("rackhv.js");
02719 ofname << "rackhv.js";
02720 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02721 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02722 ofname.str("");
02723 ofilename->close();delete ofilename;
02724 ifilename->close();delete ifilename;
02725
02726
02727
02728
02729 std::ostringstream outs,outs1,outs2;
02730 outs << outputfilename<<".png";
02731 save(true,gminvalue,gmaxvalue,outs.str(),3000,1600);
02732 temporary_file=false;
02733 printlayers(true,gminvalue,gmaxvalue,outputfilename);
02734
02735
02736 std::ofstream * txtfile;
02737 for (int layer=1; layer < 44; layer++){
02738 std::ostringstream outs;
02739 outs << outputfilename <<"layer"<<layer<< ".html";
02740 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02741 *txtfile << "<html><head></head> <body>" << std::endl;
02742 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
02743 for (int module=1;module<200;module++) {
02744 int key=layer*100000+ring*1000+module;
02745 TmModule * mod = smoduleMap[key];
02746 if(mod !=0 && !mod->notInUse()){
02747 int idmod=mod->idex;
02748 int nchan=0;
02749 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
02750 std::multimap<const int, TmApvPair*>::iterator pos;
02751 for (pos = apvModuleMap.lower_bound(idmod);
02752 pos != apvModuleMap.upper_bound(idmod); ++pos) {
02753 TmApvPair* apvpair = pos->second;
02754 if(apvpair!=0){
02755 nchan++;
02756 *txtfile << apvpair->text << std::endl;
02757 }
02758
02759 }
02760 *txtfile << "</pre><h3>"<< mod->name<<"</h3>"<<std::endl;
02761 }
02762 }
02763 }
02764 *txtfile << "</body></html>" << std::endl;
02765 txtfile->close();delete txtfile;
02766 }
02767 if(enableFedProcessing){
02768 outs1 << outputfilename<<"fed.png";
02769 save_as_fedtrackermap(true,gminvalue,gmaxvalue,outs1.str(),6000,3200);
02770 outs2 << outputfilename<<".xml";
02771 save_as_fedtrackermap(true,gminvalue,gmaxvalue,outs2.str(),3000,1600);
02772
02773 std::map<int , int>::iterator i_fed;
02774 std::ofstream * txtfile;
02775 for (int crate=1; crate < (ncrates+1); crate++){
02776 std::ostringstream outs;
02777 outs << outputfilename <<"crate"<<crate<< ".html";
02778 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02779 *txtfile << "<html><head></head> <body>" << std::endl;
02780 for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
02781 if(i_fed->second == crate){
02782 int fedId = i_fed->first;
02783 for (int nconn=0;nconn<96;nconn++){
02784 int key = fedId*1000+nconn;
02785 TmApvPair * apvPair= apvMap[key];
02786 if(apvPair !=0){
02787 int idmod=apvPair->idex;
02788 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
02789 *txtfile << apvPair->text << std::endl;
02790 std::ostringstream outs;
02791 outs << "fedchannel " <<apvPair->getFedId() << "/"<<apvPair->getFedCh()<<" connects to module " << apvPair->mod->idex ;
02792 *txtfile << "</pre><h3>"<< outs.str()<<"</h3>"<<std::endl;
02793 }
02794 }
02795 }
02796 }
02797 *txtfile << "</body></html>" << std::endl;
02798 txtfile->close();delete txtfile;
02799 }
02800 }
02801 if(enableFecProcessing){
02802 std::ostringstream outs1,outs2;
02803 outs1 << outputfilename<<"fec.png";
02804 save_as_fectrackermap(true,gminvalue,gmaxvalue,outs1.str(),6000,3200);
02805 outs2 << outputfilename<<".xml";
02806 save_as_fectrackermap(true,gminvalue,gmaxvalue,outs2.str(),3000,1600);
02807
02808 std::ofstream * txtfile;
02809 std::map<int , TmCcu *>::iterator i_ccu;
02810 std::multimap<TmCcu*, TmModule*>::iterator it;
02811 std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
02812 for (int crate=1; crate < (nfeccrates+1); crate++){
02813 std::ostringstream outs;
02814 outs << outputfilename <<"feccrate"<<crate<< ".html";
02815 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02816 *txtfile << "<html><head></head> <body>" << std::endl;
02817 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
02818 TmCcu * ccu= i_ccu->second;
02819 if(ccu!=0&&ccu->getCcuCrate() == crate){
02820 int idmod=ccu->idex;
02821 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
02822 *txtfile << ccu->text << std::endl;
02823 std::ostringstream outs;
02824 if(ccu->nmod==0)outs << "ccu is in position" << ccu->mpos<<"in ring but doesn't seem to have any module connected"; else
02825 {
02826 outs << "ccu is in position " << ccu->mpos<<" in ring and connects " <<ccu->nmod<< " modules" << std::endl;
02827 ret = fecModuleMap.equal_range(ccu);
02828 for (it = ret.first; it != ret.second; ++it)
02829 {
02830 outs << (*it).second->idex<<" " << (*it).second->name <<" value= "<< (*it).second->value<<"\n\n";
02831 }
02832
02833 *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
02834 }
02835 }
02836 }
02837 *txtfile << "</body></html>" << std::endl;
02838 txtfile->close();delete txtfile;
02839 }
02840 }
02841 if(enableLVProcessing){
02842 std::ostringstream outs3,outs4;
02843 outs3 << outputfilename<<"psu.png";
02844 save_as_psutrackermap(true,gminvalue,gmaxvalue,outs3.str(),6000,3200);
02845
02846 outs4 << outputfilename<<".xml";
02847 save_as_psutrackermap(true,gminvalue,gmaxvalue,outs4.str(),3000,1600);
02848
02849
02850 std::ofstream * txtfile;
02851 std::map<int , TmPsu *>::iterator ipsu;
02852 std::multimap<TmPsu*, TmModule*>::iterator it;
02853 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
02854 for (int rack=1; rack < (npsuracks+1); rack++){
02855 std::ostringstream outs;
02856
02857 outs << outputfilename <<"psurack"<<rack<< ".html";
02858 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02859 *txtfile << "<html><head></head> <body>" << std::endl;
02860 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
02861 TmPsu * psu= ipsu->second;
02862 if(psu!=0 && psu->getPsuRack() == rack){
02863 *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
02864 *txtfile << psu->text << std::endl;
02865 std::ostringstream outs;
02866 if(psu->nmod==0)outs << "Ps is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
02867 {
02868 outs<< "PS is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmod<<" modules. "<<std::endl;
02869
02870 ret = psuModuleMap.equal_range(psu);
02871 for (it = ret.first; it != ret.second; ++it)
02872 {
02873 outs <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;
02874
02875 }
02876 *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
02877 }
02878 }
02879 }
02880 *txtfile << "</body></html>" << std::endl;
02881 txtfile->close();delete txtfile;
02882 }
02883 }
02884
02885
02886 if(enableHVProcessing){
02887 std::ostringstream outs5,outs6;
02888 outs5 << outputfilename<<"hv.png";
02889 save_as_HVtrackermap(true,gminvalue,gmaxvalue,outs5.str(),6000,3200);
02890
02891 outs6 << outputfilename<<".xml";
02892 save_as_HVtrackermap(true,gminvalue,gmaxvalue,outs6.str(),3000,1600);
02893
02894
02895 std::ofstream * txtfile;
02896 std::map<int , TmPsu *>::iterator ipsu;
02897 std::multimap<TmPsu*, TmModule*>::iterator it;
02898 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
02899 for (int rack=1; rack < (npsuracks+1); rack++){
02900 std::ostringstream outs;
02901
02902 outs << outputfilename <<"HVrack"<<rack<< ".html";
02903 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
02904 *txtfile << "<html><head></head> <body>" << std::endl;
02905 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
02906 TmPsu * psu= ipsu->second;
02907 if(psu!=0 && psu->getPsuRack() == rack){
02908 *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
02909 *txtfile << psu->textHV2 << std::endl;
02910 std::ostringstream outsHV2;
02911 if(psu->nmodHV2==0)outsHV2 << "HV Channel002 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
02912 {
02913 outsHV2<< "HV Channel002 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV2<<" modules. "<<" <br>"<<std::endl;
02914
02915 ret = psuModuleMap.equal_range(psu);
02916 for (it = ret.first; it != ret.second; ++it)
02917 {
02918 if((*it).second->HVchannel==2){outsHV2 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
02919 }
02920 *txtfile << "</pre><h4>"<< outsHV2.str()<<"</h4>"<<std::endl;
02921 }
02922
02923 *txtfile << psu->textHV3 << std::endl;
02924 std::ostringstream outsHV3;
02925 if(psu->nmodHV3==0)outsHV3 << "HV Channel003 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
02926 {
02927 outsHV3<< "HV Channel003 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV3<<" modules. "<<" <br>"<<std::endl;
02928
02929 ret = psuModuleMap.equal_range(psu);
02930 for (it = ret.first; it != ret.second; ++it)
02931 {
02932 if((*it).second->HVchannel==3){outsHV3 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
02933 }
02934 *txtfile << "</pre><h4>"<< outsHV3.str()<<"</h4>"<<std::endl;
02935 }
02936
02937 }
02938 }
02939 *txtfile << "</body></html>" << std::endl;
02940 txtfile->close();delete txtfile;
02941 }
02942 }
02943
02944 }
02945 void TrackerMap::printall(bool print_total, float minval, float maxval, std::string outputfilename){
02946
02947 std::ofstream * ofilename;
02948 std::ifstream * ifilename;
02949 std::ostringstream ofname;
02950 std::string ifname;
02951 std::string line;
02952 std::string command;
02953
02954 ifilename=findfile("viewerHeader.xhtml");
02955 ofname << outputfilename << "viewer.html";
02956 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02957 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02958 *ofilename <<" var tmapname=\"" <<outputfilename << "\""<<std::endl;
02959 *ofilename <<" var tmaptitle=\"" <<title << "\""<<std::endl;
02960 *ofilename <<" var ncrates=" <<ncrates << ";"<<std::endl;
02961 *ofilename <<" var nfeccrates=" <<nfeccrates << ";"<<std::endl;
02962 *ofilename <<" var npsuracks=" <<npsuracks << ";"<<std::endl;
02963 ifilename->close();delete ifilename;
02964 ifilename=findfile("viewerTrailer.xhtml");
02965 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02966 ofilename->close();delete ofilename;
02967 ifilename->close();delete ifilename;
02968 command = "sed -i \"s/XtmapnameX/"+outputfilename+"/g\" "+ ofname.str();
02969 std::cout << "Executing " << command << std::endl;
02970 system(command.c_str());
02971 command = "sed -i \"s/XtmaptitleX/"+title+"/g\" "+ ofname.str();
02972 std::cout << "Executing " << command << std::endl;
02973 system(command.c_str());
02974 ofname.str("");
02975
02976 ifilename=findfile("jqviewer.js");
02977 ofname << "jqviewer.js";
02978 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02979 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02980 ofilename->close();delete ofilename;
02981 ifilename->close();delete ifilename;
02982
02983 ofname.str("");
02984 ifilename=findfile("crate.js");
02985 ofname << "crate.js";
02986 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02987 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02988 ofilename->close();delete ofilename;
02989 ifilename->close();delete ifilename;
02990
02991 ofname.str("");
02992 ifilename=findfile("feccrate.js");
02993 ofname << "feccrate.js";
02994 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
02995 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
02996 ofilename->close();delete ofilename;
02997 ifilename->close();delete ifilename;
02998
02999 ofname.str("");
03000 ifilename=findfile("rack.js");
03001 ofname << "rack.js";
03002 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
03003 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
03004 ofilename->close();delete ofilename;
03005 ifilename->close();delete ifilename;
03006
03007 ofname.str("");
03008 ifilename=findfile("rackhv.js");
03009 ofname << "rackhv.js";
03010 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
03011 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
03012 ofilename->close();delete ofilename;
03013 ifilename->close();delete ifilename;
03014
03015 ofname.str("");
03016 ifilename=findfile("layer.js");
03017 ofname << "layer.js";
03018 ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
03019 while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
03020 ofilename->close();delete ofilename;
03021 ifilename->close();delete ifilename;
03022
03023 command = "scp -r ../../DQM/TrackerCommon/test/jquery/ .";
03024 std::cout << "Executing " << command << std::endl;
03025 system(command.c_str());
03026 command = "scp -r ../../CommonTools/TrackerMap/data/images/ .";
03027 std::cout << "Executing " << command << std::endl;
03028 system(command.c_str());
03029
03030
03031 std::ostringstream outs;
03032 outs << outputfilename<<".png";
03033 save(true,minval,maxval,outs.str(),3000,1600);
03034 temporary_file=false;
03035 printlayers(true,minval,maxval,outputfilename);
03036
03037
03038 std::ofstream * txtfile;
03039 for (int layer=1; layer < 44; layer++){
03040 std::ostringstream outs;
03041 outs << outputfilename <<"layer"<<layer<< ".html";
03042 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03043 *txtfile << "<html><head></head> <body>" << std::endl;
03044 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
03045 for (int module=1;module<200;module++) {
03046 int key=layer*100000+ring*1000+module;
03047 TmModule * mod = smoduleMap[key];
03048 if(mod !=0 && !mod->notInUse()){
03049 int idmod=mod->idex;
03050 int nchan=0;
03051 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
03052 std::multimap<const int, TmApvPair*>::iterator pos;
03053 for (pos = apvModuleMap.lower_bound(idmod);
03054 pos != apvModuleMap.upper_bound(idmod); ++pos) {
03055 TmApvPair* apvpair = pos->second;
03056 if(apvpair!=0){
03057 nchan++;
03058 *txtfile << apvpair->text << std::endl;
03059 }
03060
03061 }
03062 *txtfile << "</pre><h3>"<< mod->name<<"</h3>"<<std::endl;
03063 }
03064 }
03065 }
03066 *txtfile << "</body></html>" << std::endl;
03067 txtfile->close();delete txtfile;
03068 }
03069 if(enableFedProcessing){
03070 std::ostringstream outs1,outs2;
03071 outs1 << outputfilename<<"fed.png";
03072 save_as_fedtrackermap(true,0.,0.,outs1.str(),6000,3200);
03073 outs2 << outputfilename<<".xml";
03074 save_as_fedtrackermap(true,0.,0.,outs2.str(),3000,1600);
03075
03076 std::map<int , int>::iterator i_fed;
03077 std::ofstream * txtfile;
03078 for (int crate=1; crate < (ncrates+1); crate++){
03079 std::ostringstream outs;
03080 outs << outputfilename <<"crate"<<crate<< ".html";
03081 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03082 *txtfile << "<html><head></head> <body>" << std::endl;
03083 for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
03084 if(i_fed->second == crate){
03085 int fedId = i_fed->first;
03086 for (int nconn=0;nconn<96;nconn++){
03087 int key = fedId*1000+nconn;
03088 TmApvPair * apvPair= apvMap[key];
03089 if(apvPair !=0){
03090 int idmod=apvPair->idex;
03091 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
03092 *txtfile << apvPair->text << std::endl;
03093 std::ostringstream outs;
03094 outs << "fedchannel " <<apvPair->getFedId() << "/"<<apvPair->getFedCh()<<" connects to module " << apvPair->mod->idex ;
03095 *txtfile << "</pre><h3>"<< outs.str()<<"</h3>"<<std::endl;
03096 }
03097 }
03098 }
03099 }
03100 *txtfile << "</body></html>" << std::endl;
03101 txtfile->close();delete txtfile;
03102 }
03103 }
03104 if(enableFecProcessing){
03105 std::ostringstream outs1,outs2;
03106 outs1 << outputfilename<<"fec.png";
03107 save_as_fectrackermap(true,0.,0.,outs1.str(),6000,3200);
03108 outs2 << outputfilename<<".xml";
03109 save_as_fectrackermap(true,0.,0.,outs2.str(),3000,1600);
03110
03111 std::ofstream * txtfile;
03112 std::map<int , TmCcu *>::iterator i_ccu;
03113 std::multimap<TmCcu*, TmModule*>::iterator it;
03114 std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
03115 for (int crate=1; crate < (nfeccrates+1); crate++){
03116 std::ostringstream outs;
03117 outs << outputfilename <<"feccrate"<<crate<< ".html";
03118 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03119 *txtfile << "<html><head></head> <body>" << std::endl;
03120 for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
03121 TmCcu * ccu= i_ccu->second;
03122 if(ccu!=0&&ccu->getCcuCrate() == crate){
03123 int idmod=ccu->idex;
03124 *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
03125 *txtfile << ccu->text << std::endl;
03126 std::ostringstream outs;
03127 if(ccu->nmod==0)outs << "ccu is in position" << ccu->mpos<<"in ring but doesn't seem to have any module connected"; else
03128 {
03129 outs << "ccu is in position " << ccu->mpos<<" in ring and connects " <<ccu->nmod<< " modules" << std::endl;
03130 ret = fecModuleMap.equal_range(ccu);
03131 for (it = ret.first; it != ret.second; ++it)
03132 {
03133 outs << (*it).second->idex<<" " << (*it).second->name <<" value= "<< (*it).second->value<<"\n\n";
03134 }
03135
03136 *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
03137 }
03138 }
03139 }
03140 *txtfile << "</body></html>" << std::endl;
03141 txtfile->close();
03142 }
03143 }
03144 if(enableLVProcessing){
03145 std::ostringstream outs3,outs4;
03146 outs3 << outputfilename<<"psu.png";
03147 save_as_psutrackermap(true,0.,0.,outs3.str(),6000,3200);
03148
03149 outs4 << outputfilename<<".xml";
03150 save_as_psutrackermap(true,0.,0.,outs4.str(),3000,1600);
03151
03152
03153 std::ofstream * txtfile;
03154 std::map<int , TmPsu *>::iterator ipsu;
03155 std::multimap<TmPsu*, TmModule*>::iterator it;
03156 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
03157 for (int rack=1; rack < (npsuracks+1); rack++){
03158 std::ostringstream outs;
03159
03160 outs << outputfilename <<"psurack"<<rack<< ".html";
03161 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03162 *txtfile << "<html><head></head> <body>" << std::endl;
03163 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
03164 TmPsu * psu= ipsu->second;
03165 if(psu!=0 && psu->getPsuRack() == rack){
03166 *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
03167 *txtfile << psu->text << std::endl;
03168 std::ostringstream outs;
03169 if(psu->nmod==0)outs << "Ps is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
03170 {
03171 outs<< "PS is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmod<<" modules. "<<std::endl;
03172
03173 ret = psuModuleMap.equal_range(psu);
03174 for (it = ret.first; it != ret.second; ++it)
03175 {
03176 outs <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;
03177
03178 }
03179 *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
03180 }
03181 }
03182 }
03183 *txtfile << "</body></html>" << std::endl;
03184 txtfile->close();
03185 }
03186 }
03187
03188
03189 if(enableHVProcessing){
03190 std::ostringstream outs5,outs6;
03191 outs5 << outputfilename<<"hv.png";
03192 save_as_HVtrackermap(true,0.,0.,outs5.str(),6000,3200);
03193
03194 outs6 << outputfilename<<".xml";
03195 save_as_HVtrackermap(true,0.,0.,outs6.str(),3000,1600);
03196
03197
03198 std::ofstream * txtfile;
03199 std::map<int , TmPsu *>::iterator ipsu;
03200 std::multimap<TmPsu*, TmModule*>::iterator it;
03201 std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
03202 for (int rack=1; rack < (npsuracks+1); rack++){
03203 std::ostringstream outs;
03204
03205 outs << outputfilename <<"HVrack"<<rack<< ".html";
03206 txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03207 *txtfile << "<html><head></head> <body>" << std::endl;
03208 for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
03209 TmPsu * psu= ipsu->second;
03210 if(psu!=0 && psu->getPsuRack() == rack){
03211 *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
03212 *txtfile << psu->textHV2 << std::endl;
03213 std::ostringstream outsHV2;
03214 if(psu->nmodHV2==0)outsHV2 << "HV Channel002 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
03215 {
03216 outsHV2<< "HV Channel002 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV2<<" modules. "<<" <br>"<<std::endl;
03217
03218 ret = psuModuleMap.equal_range(psu);
03219 for (it = ret.first; it != ret.second; ++it)
03220 {
03221 if((*it).second->HVchannel==2){outsHV2 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
03222 }
03223 *txtfile << "</pre><h4>"<< outsHV2.str()<<"</h4>"<<std::endl;
03224 }
03225
03226 *txtfile << psu->textHV3 << std::endl;
03227 std::ostringstream outsHV3;
03228 if(psu->nmodHV3==0)outsHV3 << "HV Channel003 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
03229 {
03230 outsHV3<< "HV Channel003 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV3<<" modules. "<<" <br>"<<std::endl;
03231
03232 ret = psuModuleMap.equal_range(psu);
03233 for (it = ret.first; it != ret.second; ++it)
03234 {
03235 if((*it).second->HVchannel==3){outsHV3 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
03236 }
03237 *txtfile << "</pre><h4>"<< outsHV3.str()<<"</h4>"<<std::endl;
03238 }
03239
03240 }
03241 }
03242 *txtfile << "</body></html>" << std::endl;
03243 txtfile->close();
03244 }
03245 }
03246
03247
03248 }
03249
03250
03251 std::ifstream * TrackerMap::findfile(std::string filename) {
03252 std::ifstream * ifilename;
03253 std::string ifname;
03254 if(jsPath!=""){
03255 ifname=jsPath+filename;
03256 ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
03257 if(!ifilename){
03258 ifname="CommonTools/TrackerMap/data/"+filename;
03259 ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
03260 }
03261 }else {
03262 ifname="CommonTools/TrackerMap/data/"+filename;
03263 ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
03264 }
03265 if(!ifilename)std::cout << "File " << filename << " missing" << std::endl;
03266 return ifilename;
03267 }
03268 void TrackerMap::printlayers(bool print_total, float minval, float maxval, std::string outputfilename){
03269 std::ofstream * xmlfile;
03270 saveAsSingleLayer=true;
03271 if(!print_total){
03272 for (int layer=1; layer < 44; layer++){
03273 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
03274 for (int module=1;module<200;module++) {
03275 int key=layer*100000+ring*1000+module;
03276 TmModule * mod = smoduleMap[key];
03277 if(mod !=0 && !mod->notInUse()){
03278 mod->value = mod->value / mod->count;
03279 }
03280 }
03281 }
03282 }
03283 }
03284 if(minvalue>=maxvalue){
03285 minvalue=9999999.;
03286 maxvalue=-9999999.;
03287 for (int layer=1; layer < 44; layer++){
03288 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
03289 for (int module=1;module<200;module++) {
03290 int key=layer*100000+ring*1000+module;
03291 TmModule * mod = smoduleMap[key];
03292 if(mod !=0 && !mod->notInUse()){
03293 if (minvalue > mod->value)minvalue=mod->value;
03294 if (maxvalue < mod->value)maxvalue=mod->value;
03295 }
03296 }
03297 }
03298 }
03299 }
03300 for (int layer=1; layer < 44; layer++){
03301 std::ostringstream outs;
03302 outs << outputfilename <<"layer"<<layer<< ".xml";
03303 xmlfile = new std::ofstream(outs.str().c_str(),std::ios::out);
03304 *xmlfile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
03305 *xmlfile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
03306 *xmlfile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
03307 *xmlfile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
03308 *xmlfile << "<script type=\"text/ecmascript\" xlink:href=\"layer.js\" />"<<std::endl;
03309 *xmlfile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerLayer.init()\">"<<std::endl;
03310 if(layer<31)*xmlfile << "<g id=\"layer\" transform=\" translate(0,400) rotate(270) scale(1.,1.)\" > "<<std::endl;
03311 else *xmlfile << "<g id=\"layer\" transform=\" translate(0,400) rotate(270) scale(1.,0.8)\" > "<<std::endl;
03312 *xmlfile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
03313 *xmlfile << "<svg:polygon id=\"fed\" mapAttribute=\"fed\" points=\"250,40 250,10 230,10 230,40\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" fill=\"rgb(0,127,255)\"/>"<<std::endl;
03314 *xmlfile << "<svg:polygon id=\"fec\" mapAttribute=\"fec\" points=\"228,40 228,10 208,10 208,40\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" fill=\"rgb(0,127,255)\"/>"<<std::endl;
03315 *xmlfile << "<svg:polygon id=\"lv\" mapAttribute=\"lv\" points=\"206,40 206,10 186,10 186,40\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" fill=\"rgb(0,127,255)\"/>"<<std::endl;
03316 *xmlfile << "<svg:polygon id=\"hv\" mapAttribute=\"hv\" points=\"184,40 184,10 164,10 164,40\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" fill=\"rgb(0,127,255)\"/>"<<std::endl;
03317 *xmlfile << "<svg:polygon id=\"plot\" mapAttribute=\"plot\" points=\"155,45 155,5 135,5 135,45\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" fill=\"rgb(200,0,0)\"/>"<<std::endl;
03318
03319 nlay=layer;
03320 defwindow(nlay);
03321 for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
03322 for (int module=1;module<200;module++) {
03323 int key=layer*100000+ring*1000+module;
03324 TmModule * mod = smoduleMap[key];
03325 if(mod !=0 && !mod->notInUse()){
03326 drawModule(mod,key,layer,print_total,xmlfile);
03327 }
03328 }
03329 }
03330 *xmlfile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\">" << std::endl;
03331 *xmlfile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
03332 *xmlfile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
03333 *xmlfile << "<tspan id=\"line3\" x=\"40\" y=\"90\"> </tspan> " << std::endl;
03334 *xmlfile << "<tspan id=\"line4\" x=\"40\" y=\"120\"> </tspan> " << std::endl;
03335 if(layer > 33){
03336 *xmlfile << "<tspan mapAttribute=\"fed\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"15\" y=\"228\" font-size=\"12\" font-family=\"arial\" fill=\"white\">FED</tspan> " <<std::endl;
03337 *xmlfile << "<tspan mapAttribute=\"fec\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"15\" y=\"258\" font-size=\"12\" font-family=\"arial\" fill=\"white\">FEC</tspan> " <<std::endl;
03338 *xmlfile << "<tspan mapAttribute=\"lv\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"18\" y=\"289\" font-size=\"12\" font-family=\"arial\" fill=\"white\">LV</tspan> " <<std::endl;
03339 *xmlfile << "<tspan mapAttribute=\"hv\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"18\" y=\"319\" font-size=\"12\" font-family=\"arial\" fill=\"white\">HV</tspan> " <<std::endl;
03340 *xmlfile << "<tspan mapAttribute=\"plot\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"12\" y=\"360\" font-size=\"12\" font-family=\"arial\" fill=\"white\">PLOT</tspan> " <<std::endl;
03341 }
03342 else{
03343 *xmlfile << "<tspan mapAttribute=\"fed\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"21\" y=\"228\" font-size=\"12\" font-family=\"arial\" fill=\"white\">FED</tspan> " <<std::endl;
03344 *xmlfile << "<tspan mapAttribute=\"fec\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"21\" y=\"258\" font-size=\"12\" font-family=\"arial\" fill=\"white\">FEC</tspan> " <<std::endl;
03345 *xmlfile << "<tspan mapAttribute=\"lv\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"24\" y=\"289\" font-size=\"12\" font-family=\"arial\" fill=\"white\">LV</tspan> " <<std::endl;
03346 *xmlfile << "<tspan mapAttribute=\"hv\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"24\" y=\"319\" font-size=\"12\" font-family=\"arial\" fill=\"white\">HV</tspan> " <<std::endl;
03347 *xmlfile << "<tspan mapAttribute=\"plot\" onclick=\"chooseMap(evt);\" onmouseover=\"chooseMap(evt);\" onmouseout=\"chooseMap(evt);\" x=\"17\" y=\"360\" font-size=\"12\" font-family=\"arial\" fill=\"white\">PLOT</tspan> " <<std::endl;
03348 }
03349 *xmlfile << " </text> </svg>" << std::endl;
03350 xmlfile->close();delete xmlfile;
03351 }
03352 saveAsSingleLayer=false;
03353 }