CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackerMap.cc
Go to the documentation of this file.
10 #include <fstream>
11 #include <vector>
12 #include <iostream>
13 #include <sstream>
14 #include "TCanvas.h"
15 #include "TPolyLine.h"
16 #include "TStyle.h"
17 #include "TColor.h"
18 #include "TROOT.h"
19 #include "TGaxis.h"
20 #include "TLatex.h"
21 #include "TArrow.h"
22 
23 
24 /**********************************************************
25 Allocate all the modules in a map of TmModule
26 The filling of the values for each module is done later
27 when the user starts to fill it.
28 **********************************************************/
29 
31 
32  psetAvailable=true;
33  xsize=340;ysize=200;
34  title=" ";
35  jsPath="";
36  jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
37  infilename="CommonTools/TrackerMap/data/tracker.dat";
38  saveAsSingleLayer=false;
39  if(tkmapPset.exists("trackermaptxtPath")){
40  jsPath=tkmapPset.getUntrackedParameter<std::string>("trackermaptxtPath",""
41 );
42  jsfilename=jsPath+"trackermap.txt";
43  std::cout << jsfilename << std::endl;
44  infilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"tracker.dat";
45  std::cout << infilename << std::endl;
46  ncrates=0;
47  enableFedProcessing=tkmapPset.getUntrackedParameter<bool>("loadFedCabling",false);
48  nfeccrates=0;
49  enableFecProcessing=tkmapPset.getUntrackedParameter<bool>("loadFecCabling",false);
50  // std::cout << "loadFecCabling " << enableFecProcessing << std::endl;
51  npsuracks=0;
52  enableLVProcessing=tkmapPset.getUntrackedParameter<bool>("loadLVCabling",false);
53  // std::cout << "loadLVCabling " << enableLVProcessing << std::endl;
54  enableHVProcessing=tkmapPset.getUntrackedParameter<bool>("loadHVCabling",false);
55  // std::cout << "loadHVCabling " << enableHVProcessing << std::endl;
56  } else std::cout << "no parameters found" << std::endl;
57 
58  init();
59 // Now load fed cabling information
61  const std::vector<unsigned short> feds = tkFed->feds();
62  std::cout<<"SiStripFedCabling has "<< feds.size()<<" active FEDS"<<std::endl;
63  int num_board=0;
64  int num_crate=0;
65  for(std::vector<unsigned short>::const_iterator ifed = feds.begin();ifed<feds.end();ifed++){
66  const std::vector<FedChannelConnection> theconn = tkFed->connections( *ifed );
67  int num_conn=0;
68  for(std::vector<FedChannelConnection>::const_iterator iconn = theconn.begin();iconn<theconn.end();iconn++){
69 
70  if( iconn->fedId()== sistrip::invalid_ ||
71  iconn->detId() == sistrip::invalid_ ||
72  iconn->detId() == sistrip::invalid32_ ||
73  iconn->apvPairNumber() == sistrip::invalid_ ||
74  iconn->nApvPairs() == sistrip::invalid_ ) {
75  continue;
76  }
77 
78  TmModule *imod = imoduleMap[iconn->detId()];
79  int key = iconn->fedId()*1000+iconn->fedCh();
80  TmApvPair* apvpair = apvMap[key];
81  if(apvpair!=0)std::cout << "Fed "<< iconn->fedId() << " channel " << iconn->fedCh() << " seem to be already loaded!"<<std::endl;
82  else
83  {
84  num_conn++;
85  if(num_conn==1){
86  if(fedMap[iconn->fedId()]==0){num_crate=num_board/18+1;fedMap[iconn->fedId()]=num_crate;num_board++;}
87  }
88  apvpair = new TmApvPair(key,num_crate);
89  apvpair->mod=imod;
90  apvpair->mpos=iconn->apvPairNumber();
91  apvMap[key] = apvpair;
92  apvModuleMap.insert(std::make_pair(iconn->detId(),apvpair));
93  std::stringstream s;
94  iconn->print(s);
95  apvpair->text=s.str();
96  }
97  }
98  }
99  ncrates=num_crate;
100  std::cout << num_crate << " crates used "<< std::endl;
101 //Now add APv information to module name
102  std::map<int , TmModule *>::iterator i_mod;
103  for( i_mod=imoduleMap.begin();i_mod !=imoduleMap.end(); i_mod++){
104  TmModule * mod= i_mod->second;
105  if(mod!=0) {
106  std::ostringstream outs,outs1;
107  outs << " connected to ";
108  outs1 << "(";
109 
110  int idmod=mod->idex;
111  int nchan=0;
112  std::multimap<const int, TmApvPair*>::iterator pos;
113  for (pos = apvModuleMap.lower_bound(idmod);
114  pos != apvModuleMap.upper_bound(idmod); ++pos) {
115  TmApvPair* apvpair = pos->second;
116  if(apvpair!=0){
117  outs << apvpair->mpos << " " <<apvpair->getFedId() << "/"<<apvpair->getFedCh()<<" ";
118  outs1 << apvpair->idex+apvpair->crate*1000000<<",";
119  nchan++;
120  }
121 
122  }
123  outs<< "("<<nchan<<")";
124  mod->name=mod->name + outs.str();
125  std::string s = outs1.str(); s.erase(s.end()-1,s.end());
126  mod->capvids=s+")";
127  }
128  }
129 }
130 // Now load fec cabling information
132  int nfec=0; int nccu; int nmod;
133  int crate,slot,ring,addr,pos;
134  SiStripFecCabling* fecCabling_;
135  fecCabling_ = new SiStripFecCabling( *tkFed );
136  std::string Ccufilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"cculist.txt";
137  ifstream Ccufile(edm::FileInPath(Ccufilename).fullPath().c_str(),std::ios::in);
138  std::string dummys;
139  while(!Ccufile.eof()) {
140  Ccufile >> crate >> slot >> ring >> addr >> pos;
141  getline(Ccufile,dummys);
142  int key =crate*10000000+slot*100000+ring*1000+addr;
143  TmCcu * ccu = ccuMap[key];
144  if(ccu==0){
145  ccu = new TmCcu(crate,slot,ring,addr);
146  ccu->mpos=pos,
147  ccuMap[key]=ccu;
148  }
149  }
150 
151  for ( std::vector<SiStripFecCrate>::const_iterator icrate = fecCabling_->crates().begin(); icrate != fecCabling_->crates().end(); icrate++ ) {
152  for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
153  for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
154  nccu=0;nfec++;
155  for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
156  nccu++; nmod=0;
157  int key = icrate->fecCrate()*10000000+ifec->fecSlot()*100000+iring->fecRing()*1000+iccu->ccuAddr();
158  int layer=0;
159  TmCcu * ccu = ccuMap[key];
160  for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
161  nmod++;
162  TmModule *imod1 = imoduleMap[imod->detId()];
163  layer=imod1->layer;
164  fecModuleMap.insert(std::make_pair(ccu,imod1));
165  if(imod1!=0)imod1->CcuId=key;//imod1->ccuId=key+Crate*1000000
166  }
167  if(ccu==0)std::cout <<key<< " This ccu seems to have not been stored! " << std::endl; else{ ccu->nmod=nmod;ccu->layer=layer;}
168  //std::cout <<nfec<<" "<< nccu << " " << nmod << std::endl;
169 
170  }
171  }
172  }
173  }
174 
175  std::map<int , TmCcu *>::iterator i_ccu;
176  std::multimap<TmCcu*, TmModule*>::iterator it;
177  std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
178  nccu=0;
179  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
180  TmCcu * ccu= i_ccu->second;
181  nccu++;
182  if(ccu!=0){
183  std::ostringstream outs;
184  std::ostringstream outs1;
185  outs << "CCU "<<ccu->idex <<" connected to fec,ring " << ccu->getCcuSlot() <<","<<ccu->getCcuRing()<< " in crate " <<ccu->getCcuCrate()<<" at position "<< ccu->mpos << " with " << ccu->nmod << " modules: ";
186  outs1<<"(";
187  ret = fecModuleMap.equal_range(ccu);
188  for (it = ret.first; it != ret.second; ++it)
189  {
190  outs << (*it).second->idex << " ";
191  outs1 << (*it).second->getKey() <<",";
192  }
193  outs1 << ")";
194  ccu->text=outs.str();
195  ccu->cmodid=outs1.str();
196  //std::cout << ccu->text << std::endl;
197  }
198 
199  }
200  nfeccrates=4;
201  std::cout << nccu << " ccu stored in " <<nfeccrates<< " crates"<< std::endl;
202 
203  delete fecCabling_ ;
204 
205  }
206 //load Psu cabling info
207  //load Psu cabling info
209  int npsu=0; int nmod,nmodHV2,nmodHV3;
210  int modId1,modId2, dcuId;
211  int dcs,branch,crate,board;
212  int rack=0;
213  std::string channelstr1;
214  short int channel;
215  std::string psinfo;
216  // ifstream *LVfile;
217  // ifstream *HVfile;
218 
219 
220 
221  std::string LVfilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"psdcumap.dat";
222  std::string HVfilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"hvmap.dat";
223 
224  ifstream LVfile(edm::FileInPath(LVfilename).fullPath().c_str(),std::ios::in);
225 
226  std::cout<<LVfilename<<" "<<HVfilename<<std::endl;
227 
228 
229  if(enableHVProcessing){
230 
231  ifstream HVfile(edm::FileInPath(HVfilename).fullPath().c_str(),std::ios::in);
232  while(!HVfile.eof()) {
233  HVfile >> modId2 >> channelstr1;
234  std::string channelstr2 = channelstr1.substr(9,1);
235  channel= atoi(channelstr2.c_str());
236  TmModule *imod = imoduleMap[modId2];
237  // if(modId1==modId2){
238  imod->HVchannel=channel;
239 
240  }
241 
242  }
243 
244 
245  while(!LVfile.eof()) {
246  LVfile >> modId1 >> dcuId >> psinfo;
247 
248  int length=psinfo.length();
249  std::string dcsinfo = psinfo.substr(39,1);
250  std::string branchinfo = psinfo.substr(57,2);
251  std::string crateinfo= psinfo.substr(69,1);
252  std::string boardinfo = psinfo.substr(80,2);
253  std::string psIdinfo = psinfo.substr(83,length-83);
254 
255  dcs= atoi(dcsinfo.c_str());
256  branch= atoi(branchinfo.c_str());
257  crate= atoi(crateinfo.c_str())+1;
258  board= atoi(boardinfo.c_str())+1;
259 
260  if(dcs==1)rack=(branch+1)/2;
261  if(dcs==2)rack=(branch+1)/2 + 7;
262  if(dcs==3)rack=(branch+1)/2 + 15;
263  if(dcs==4)rack=(branch+1)/2 + 22;
264 
265  int key = rack*1000+crate*100+board;
266 
267  TmPsu *psu = psuMap[key];
268  TmModule *imod = imoduleMap[modId1];
269  if(psu==0){
270  psu = new TmPsu(dcs,branch,rack,crate,board);
271  psuMap[key]=psu;
272  psu->psId=psIdinfo;
273  }
274 
275  psuModuleMap.insert(std::make_pair(psu,imod));
276  if(imod!=0)imod->PsuId=psIdinfo;imod->psuIdex=psu->idex;
277 
278  }
279 
280 
281  // int nmax=0;
282  std::map<int , TmPsu *>::iterator ipsu;
283  std::multimap<TmPsu*, TmModule*>::iterator it;
284  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
285  npsu=0;
286 
287  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
288  TmPsu * psu= ipsu->second;
289  npsu++;
290 
291  if(psu!=0){
292 
293  std::ostringstream outs;
294  std::ostringstream outs1;
295 
296  std::ostringstream outs3;
297  std::ostringstream outs4;
298 
299  std::ostringstream outs5;
300  std::ostringstream outs6;
301 
302  outs <<"PSU "<<psu->psId<<" connected to Mainframe "<<psu->getPsuDcs()<<" BranchController "<<psu->getPsuBranch()<<" (Rack "<<psu->getPsuRack()<<"), crate "<<psu->getPsuCrate()<<" in position "<< psu->getPsuBoard()<< " with modules: ";
303  outs1<<"(";
304 
305  if(enableHVProcessing){
306  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: ";
307  outs4<<"(";
308 
309  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: ";
310  outs6<<"(";}
311 
312 
313  ret = psuModuleMap.equal_range(psu);
314  nmod=0;
315  nmodHV2=0;
316  nmodHV3=0;
317  for (it = ret.first; it != ret.second; ++it)
318  {
319  nmod++;
320  outs << (*it).second->idex << ", ";
321  outs1 << (*it).second->getKey() <<",";
322 
323  if(enableHVProcessing){
324  if((*it).second->HVchannel==2){
325  nmodHV2++;
326  outs3 << (*it).second->idex << ", ";
327  outs4 << (*it).second->getKey() <<",";}
328  else if((*it).second->HVchannel==3){
329  nmodHV3++;
330  outs5 << (*it).second->idex << ", ";
331  outs6 << (*it).second->getKey() <<",";}
332 
333  }
334  }
335 
336  outs1 << ")";
337  psu->nmod=nmod;
338  outs << "(" << psu->nmod << ")";
339  psu->text=outs.str();
340  psu->cmodid_LV=outs1.str();
341  if(enableHVProcessing){
342  outs4 << ")";
343  outs6 << ")";
344  psu->nmodHV2=nmodHV2;
345  psu->nmodHV3=nmodHV3;
346  outs3 << "(" << psu->nmodHV2 << ")";
347  outs5 << "(" << psu->nmodHV3 << ")";
348  psu->textHV2=outs3.str();
349  psu->textHV3=outs5.str();
350  psu->cmodid_HV2=outs4.str();
351  psu->cmodid_HV3=outs6.str();
352  }
353  }
354  }
355 
356 
357  npsuracks=29;
358  std::cout << npsu << " psu stored in " <<npsuracks<<" racks"<<std::endl;
359  }
360 }
361 
363  psetAvailable=true;
364  xsize=340;ysize=200;
365  title=" ";
366  jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
367  infilename="CommonTools/TrackerMap/data/tracker.dat";
369  saveAsSingleLayer=false;
370  if(tkmapPset.exists("trackermaptxtPath")){
371  jsfilename=tkmapPset.getUntrackedParameter<std::string>("trackermaptxtPath","")+"trackermap.txt";
372  std::cout << jsfilename << std::endl;
373  infilename=tkmapPset.getUntrackedParameter<std::string>("trackerdatPath","")+"tracker.dat";
374  std::cout << infilename << std::endl;
375  } else std::cout << "no parameters found" << std::endl;
376  init();
377 }
378 
379 TrackerMap::TrackerMap(std::string s,int xsize1,int ysize1) {
380  psetAvailable=false;
381  xsize=xsize1;ysize=ysize1;
382  title=s;
383  jsfilename="CommonTools/TrackerMap/data/trackermap.txt";
384  infilename="CommonTools/TrackerMap/data/tracker.dat";
385  enableFedProcessing=false;
386  saveAsSingleLayer=false;
387  init();
388 }
389 
391 std::map<int , TmModule *>::iterator i_mod;
392  for( i_mod=imoduleMap.begin();i_mod !=imoduleMap.end(); i_mod++){
393  TmModule * mod= i_mod->second;
394  mod->count=0;mod->value=0;mod->red=-1;
395  }
396 }
397 
399 
400  int ntotmod=0;
401  ix=0;iy=0; //used to compute the place of each layer in the tracker map
402  firstcall = true;
404  posrel=true;
405  palette = 1;
406  printflag=true;
407  addPixelFlag=false;
408  temporary_file=false;
409  gminvalue=0.; gmaxvalue=0.;//default global range for online rendering
410 
411  ndet = 3; // number of detectors: pixel, inner silicon, outer silicon
412  npart = 3; // number of detector parts: endcap -z, barrel, endcap +z
413 
414  //allocate module map
415  for (int subdet=1; subdet < ndet+1; subdet++){//loop on subdetectors
416  for (int detpart=1; detpart < npart+1; detpart++){//loop on subdetectors parts
417  int nlayers = getlayerCount(subdet,detpart); // compute number of layers
418  for(int layer=1; layer < nlayers+1; layer++){//loop on layers
419  int nrings = getringCount(subdet,detpart,layer);// compute number of rings
420  //fill arrays used to do the loop on the rings
421  int layer_g = nlayer(subdet,detpart,layer);
422  ntotRing[layer_g-1]=nrings;
423  firstRing[layer_g-1]=1;
424  if(subdet==3 && detpart!=2) firstRing[layer_g-1]= 8-nrings; //special numbering for TEC
425  for (int ring=firstRing[layer_g-1]; ring < ntotRing[layer_g-1]+firstRing[layer_g-1];ring++){//loop on rings
426  int nmodules = getmoduleCount(subdet,detpart,layer,ring);// compute number of modules
427  int key=0;
428  TmModule *smodule;
429  for(int module=1; module < nmodules+1; module++){//loop on modules
430  smodule = new TmModule(module,ring,layer_g);
431  key=layer_g*100000+ring*1000+module;//key identifying module
432  smoduleMap[key]=smodule;
433  ntotmod++;
434  }
435  if(isRingStereo(key))for(int module=1; module < nmodules+1; module++){//loop on stereo modules
436  smodule = new TmModule(module+100,ring,layer_g);
437  int key=layer_g*100000+ring*1000+module+100;
438  smoduleMap[key]=smodule;
439  ntotmod++;
440  }
441  }
442  }
443  }
444  }
445  build();
446 }
447 
449 
450 for (int layer=1; layer < 44; layer++){
451  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
452  for (int module=1;module<200;module++) {
453  int key=layer*100000+ring*1000+module;
454  TmModule * mod = smoduleMap[key];
455  if(mod !=0 ) delete mod;
456  }
457  }
458  }
459 
460 //std::map<int , TmModule *>::iterator i_mod;
461 // for( i_mod=imoduleMap.begin();i_mod !=imoduleMap.end(); i_mod++){
462 // TmModule * mod= i_mod->second;
463 // delete mod;
464 // }
465 std::map<int , TmApvPair *>::iterator i_apv;
466  for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
467  TmApvPair * apvPair= i_apv->second;
468  delete apvPair;
469  }
470 
471 
472 std::map<int , TmCcu *>::iterator i_ccu;
473  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
474  TmCcu * ccu= i_ccu->second;
475  delete ccu;
476  }
477 
478 std::map<int , TmPsu *>::iterator ipsu;
479  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
480  TmPsu * psu= ipsu->second;
481  delete psu;
482  }
483 
484 gROOT->Reset();
485 
486 
487 //for(std::vector<TColor*>::iterator col1=vc.begin();col1!=vc.end();col1++){
488 // std::cout<<(*col1)<<std::endl;}
489 }
490 
491 
492 
493 
494 
495 void TrackerMap::drawModule(TmModule * mod, int key,int nlay, bool print_total, std::ofstream * svgfile){
496  //int x,y;
497  double phi,r,dx,dy, dy1;
498  double xp[4],yp[4],xp1,yp1;
499  double vhbot,vhtop,vhapo;
500  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};
501  double xt1,yt1,xs1=0.,ys1=0.,xt2,yt2,xs2,ys2,pv1,pv2;
502  int green = 0;
503  int red = 0;
504  int blue = 0;
505  double xd[4],yd[4];
506  int np = 4;
507  //int numrec=0;
508  int numod=0;
509  phi = phival(mod->posx,mod->posy);
510  r = sqrt(mod->posx*mod->posx+mod->posy*mod->posy);
511  vhbot = mod->width;
512  vhtop=mod->width;
513  vhapo=mod->length;
514  if(nlay < 31){ //endcap
515  vhbot = mod->widthAtHalfLength/2.-(mod->width/2.-mod->widthAtHalfLength/2.);
516  vhtop=mod->width/2.;
517  vhapo=mod->length/2.;
518  if(nlay >12 && nlay <19){
519  if(posrel)r = r+r;
520  xp[0]=r-vhtop;yp[0]=-vhapo;
521  xp[1]=r+vhtop;yp[1]=-vhapo;
522  xp[2]=r+vhtop;yp[2]=vhapo;
523  xp[3]=r-vhtop;yp[3]=vhapo;
524  }else{
525  if(posrel)r = r + r/3.;
526  xp[0]=r-vhapo;yp[0]=-vhbot;
527  xp[1]=r+vhapo;yp[1]=-vhtop;
528  xp[2]=r+vhapo;yp[2]=vhtop;
529  xp[3]=r-vhapo;yp[3]=vhbot;
530  }
531  for(int j=0;j<4;j++){
532  xp1 = xp[j]*cos(phi)-yp[j]*sin(phi);
533  yp1 = xp[j]*sin(phi)+yp[j]*cos(phi);
534  xp[j] = xp1;yp[j]=yp1;
535  }
536  } else { //barrel
537  numod=mod->idModule;if(numod>100)numod=numod-100;
538  int vane = mod->ring;
539  if(posrel){
540  dx = vhapo;
541  phi=M_PI;
542  xt1=rmedio[nlay-31]; yt1=-vhtop/2.;
543  xs1 = xt1*cos(phi)-yt1*sin(phi);
544  ys1 = xt1*sin(phi)+yt1*cos(phi);
545  xt2=rmedio[nlay-31]; yt2=vhtop/2.;
546  xs2 = xt2*cos(phi)-yt2*sin(phi);
547  ys2 = xt2*sin(phi)+yt2*cos(phi);
548  dy=phival(xs2,ys2)-phival(xs1,ys1);
549  dy1 = dy;
550  if(nlay==31)dy1=0.39;
551  if(nlay==32)dy1=0.23;
552  if(nlay==33)dy1=0.16;
553  xp[0]=vane*(dx+dx/8.);yp[0]=numod*(dy1);
554  xp[1]=vane*(dx+dx/8.)+dx;yp[1]=numod*(dy1);
555  xp[2]=vane*(dx+dx/8.)+dx;yp[2]=numod*(dy1)+dy;
556  xp[3]=vane*(dx+dx/8.);yp[3]=numod*(dy1)+dy;
557  }else{
558  xt1=r; yt1=-vhtop/2.;
559  xs1 = xt1*cos(phi)-yt1*sin(phi);
560  ys1 = xt1*sin(phi)+yt1*cos(phi);
561  xt2=r; yt2=vhtop/2.;
562  xs2 = xt2*cos(phi)-yt2*sin(phi);
563  ys2 = xt2*sin(phi)+yt2*cos(phi);
564  pv1=phival(xs1,ys1);
565  pv2=phival(xs2,ys2);
566  if(fabs(pv1-pv2)>M_PI && numod==1)pv1=pv1-2.*M_PI;
567  if(fabs(pv1-pv2)>M_PI && numod!=1)pv2=pv2+2.*M_PI;
568  xp[0]=mod->posz-vhapo/2.;yp[0]=4.2*pv1;
569  xp[1]=mod->posz+vhapo/2.;yp[1]=4.2*pv1;
570  xp[2]=mod->posz+vhapo/2. ;yp[2]=4.2*pv2;
571  xp[3]=mod->posz-vhapo/2.;yp[3]=4.2*pv2;
572  }
573  }
574  if(isRingStereo(key))
575  {
576  np = 3;
577  if(mod->idModule>100 ){for(int j=0;j<3;j++){
578  xd[j]=xdpixel(xp[j]);yd[j]=ydpixel(yp[j]);
579  }
580  }else {
581  xd[0]=xdpixel(xp[2]);yd[0]=ydpixel(yp[2]);
582  xd[1]=xdpixel(xp[3]);yd[1]=ydpixel(yp[3]);
583  xd[2]=xdpixel(xp[0]);yd[2]=ydpixel(yp[0]);
584  }
585  } else {
586  for(int j=0;j<4;j++){
587  xd[j]=xdpixel(xp[j]);yd[j]=ydpixel(yp[j]);
588  }
589  }
590  char buffer [20];
591  sprintf(buffer,"%X",mod->idex);
592 
593  if(mod->red < 0){ //use count to compute color
594  int color = getcolor(mod->value,palette);
595  red=(color>>16)&0xFF;
596  green=(color>>8)&0xFF;
597  blue=(color)&0xFF;
598 
599 if(!print_total)mod->value=mod->value*mod->count;//restore mod->value
600 
601  if(mod->count > 0)
602  if(temporary_file) *svgfile << red << " " << green << " " << blue << " "; else
603  *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=\"";
604  else
605  if(temporary_file) *svgfile << 255 << " " << 255 << " " << 255 << " "; else
606  *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=\"";
607  if(temporary_file) *svgfile << np << " ";
608  for(int k=0;k<np;k++){
609  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ; else
610  *svgfile << xd[k] << "," << yd[k] << " " ;
611  }
612  if(temporary_file)*svgfile << std::endl; else *svgfile <<"\" />" <<std::endl;
613  } else {//color defined with fillc
614  if(mod->red>255)mod->red=255;
615  if(mod->green>255)mod->green=255;
616  if(mod->blue>255)mod->blue=255;
617  if(temporary_file) *svgfile << mod->red << " " << mod->green << " " << mod->blue << " "; else
618  *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=\"";
619  if(temporary_file) *svgfile << np << " ";
620  for(int k=0;k<np;k++){
621  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ; else
622  *svgfile << xd[k] << "," << yd[k] << " " ;
623  }
624  if(temporary_file)*svgfile << std::endl; else *svgfile <<"\" />" <<std::endl;
625  }
626 
627 }
628 
629 //export tracker map
630 //print_total = true represent in color the total stored in the module
631 //print_total = false represent in color the average
632 void TrackerMap::save(bool print_total,float minval, float maxval,std::string s,int width, int height){
633 
634  std::string filetype=s,outputfilename=s;
635  std::vector<TPolyLine*> vp;
636  TGaxis *axis = 0 ;
637  size_t found=filetype.find_last_of(".");
638  filetype=filetype.substr(found+1);
639  found=outputfilename.find_last_of(".");
640  outputfilename=outputfilename.substr(0,found);
641  //outputfilename.erase(outputfilename.begin()+outputfilename.find("."),outputfilename.end());
642  temporary_file=true;
643  if(filetype=="svg")temporary_file=false;
644  std::ostringstream outs;
645  minvalue=minval; maxvalue=maxval;
646  outs << outputfilename << ".coor";
647  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
648  if(!print_total){
649  for (int layer=1; layer < 44; layer++){
650  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
651  for (int module=1;module<200;module++) {
652  int key=layer*100000+ring*1000+module;
653  TmModule * mod = smoduleMap[key];
654  if(mod !=0 && !mod->notInUse()){
655  mod->value = mod->value / mod->count;
656  }
657  }
658  }
659  }
660  }
661 
662  if(minvalue>=maxvalue){
663  minvalue=9999999.;
664  maxvalue=-9999999.;
665  for (int layer=1; layer < 44; layer++){
666  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
667  for (int module=1;module<200;module++) {
668  int key=layer*100000+ring*1000+module;
669  TmModule * mod = smoduleMap[key];
670  if(mod !=0 && !mod->notInUse()){
671  if (minvalue > mod->value)minvalue=mod->value;
672  if (maxvalue < mod->value)maxvalue=mod->value;
673  }
674  }
675  }
676  }
677 }
678  if (maxvalue == minvalue) printflag = false;
679  if(!temporary_file){
680  *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
681  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
682  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
683  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
684  *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3100 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
685  *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3100\" height=\"1600\" /> "<<std::endl;
686  *savefile << "<svg:g id=\"tracker\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
687  }
688  for (int layer=1; layer < 44; layer++){
689  nlay=layer;
690  defwindow(nlay);
691  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
692  for (int module=1;module<200;module++) {
693  int key=layer*100000+ring*1000+module;
694  TmModule * mod = smoduleMap[key];
695  if(mod !=0 && !mod->notInUse()){
696  drawModule(mod,key,layer,print_total,savefile);
697  }
698  }
699  }
700  }
701 
702  if(!temporary_file){
703  *savefile << "</svg:g>"<<std::endl;
704  *savefile << " <svg:text id=\"Title\" class=\"normalText\" x=\"300\" y=\"0\">"<<title<<"</svg:text>"<<std::endl;
705  }
706 
708  if(!temporary_file){
709  *savefile << "</svg:svg>"<<std::endl;
710  *savefile << "</svg>"<<std::endl;
711  }
712  savefile->close(); delete savefile;
713 
714  const char * command1;
715  std::string tempfilename = outputfilename + ".coor";
716  if(filetype=="svg"){
717  std::string command = "mv "+tempfilename +" " +outputfilename + ".svg";
718  command1=command.c_str();
719  std::cout << "Executing " << command1 << std::endl;
720  system(command1);
721  }
722 
723  if (temporary_file){ // create root trackermap image
724  int red,green,blue,npoints,colindex,ncolor;
725  double x[4],y[4];
726  ifstream tempfile(tempfilename.c_str(),std::ios::in);
727  TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
728  gPad->SetFillColor(38);
729 
730  if(addPixelFlag)gPad->Range(0,0,3800,1600);else gPad->Range(800,0,3800,1600);
731 
732  //First build palette
733  ncolor=0;
734  typedef std::map<int,int> ColorList;
735  ColorList colorList;
736  ColorList::iterator pos;
737  TColor *col, *c;
738  std::cout<<"tempfilename "<<tempfilename<<std::endl;
739  while(!tempfile.eof()) {
740  tempfile >> red >> green >> blue >> npoints;
741  colindex=red+green*1000+blue*1000000;
742  pos=colorList.find(colindex);
743  if(pos == colorList.end()){ colorList[colindex]=ncolor+100; col =gROOT->GetColor(ncolor+100);
744  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++;}
745  for (int i=0;i<npoints;i++){
746  tempfile >> x[i] >> y[i];
747  }
748  }
749 
750  if(ncolor>0 && ncolor<10000){
751  Int_t colors[10000];
752  for(int i=0;i<ncolor;i++){colors[i]=i+100;}
753  gStyle->SetPalette(ncolor,colors);
754  }
755 
756  tempfile.clear();
757  tempfile.seekg(0,std::ios::beg);
758  std::cout << "created palette with " << ncolor << " colors" << std::endl;
759 
760  while(!tempfile.eof()) {//create polylines
761  tempfile >> red >> green >> blue >> npoints;
762  for (int i=0;i<npoints;i++){
763  tempfile >> x[i] >> y[i];
764  }
765  colindex=red+green*1000+blue*1000000;
766  pos=colorList.find(colindex);
767  if(pos != colorList.end()){
768  TPolyLine* pline = new TPolyLine(npoints,y,x);
769  vp.push_back(pline);
770  pline->SetFillColor(colorList[colindex]);
771  pline->SetLineWidth(0);
772  pline->Draw("f");
773  }
774  }
775  if (printflag) {
776  axis = new TGaxis(3660,36,3660,1530,minvalue,maxvalue,510,"+L");
777  axis->SetLabelSize(0.02);
778  axis->Draw();
779  }
780  TLatex l;
781  l.SetTextSize(0.03);
782  l.DrawLatex(950,1330,"TID");
783  l.DrawLatex(2300,1330,"TEC");
784  l.DrawLatex(300,1330,"FPIX");
785  l.DrawLatex(20,560,"BPIX L1");
786  l.DrawLatex(500,385,"BPIX L2");
787  l.DrawLatex(500,945,"BPIX L3");
788  l.SetTextSize(0.04);
789  l.DrawLatex(850,1500,title.c_str());
790  l.DrawLatex(1730,40,"-z");
791  l.DrawLatex(1730,1360,"+z");
792  l.DrawLatex(1085,330,"TIB L1");
793  l.DrawLatex(1085,1000,"TIB L2");
794  l.DrawLatex(1585,330,"TIB L3");
795  l.DrawLatex(1585,1000,"TIB L4");
796  l.DrawLatex(2085,330,"TOB L1");
797  l.DrawLatex(2085,1000,"TOB L2");
798  l.DrawLatex(2585,330,"TOB L3");
799  l.DrawLatex(2585,1000,"TOB L4");
800  l.DrawLatex(3085,330,"TOB L5");
801  l.DrawLatex(3085,1000,"TOB L6");
802  TArrow arx(3448,1190,3448,1350,0.01,"|>");
803  l.DrawLatex(3460,1350,"x");
804  TArrow ary(3448,1190,3312,1190,0.01,"|>");
805  l.DrawLatex(3312,1210,"y");
806  TArrow arz(3485,373,3485,676,0.01,"|>");
807  l.DrawLatex(3510,667,"z");
808  TArrow arphi(3485,511,3037,511,0.01,"|>");
809  l.DrawLatex(3023,520,"#Phi");
810  arx.SetLineWidth(3);
811  ary.SetLineWidth(3);
812  arz.SetLineWidth(3);
813  arphi.SetLineWidth(3);
814  arx.Draw();
815  ary.Draw();
816  arz.Draw();
817  arphi.Draw();
818  MyC->Update();
819  if(filetype=="png"){
820 
821  std::string filename = outputfilename + ".png";
822  std::cout << "printing " <<filename<< std::endl;
823  MyC->Print(filename.c_str());
824  }
825  if(filetype=="jpg"){
826  std::string filename = outputfilename + ".jpg";
827  MyC->Print(filename.c_str());
828  }
829  if(filetype=="pdf"){
830  std::string filename = outputfilename + ".pdf";
831  MyC->Print(filename.c_str());
832  }
833  std::string command = "rm "+tempfilename ;
834  command1=command.c_str();
835  std::cout << "Executing " << command1 << std::endl;
836  system(command1);
837  MyC->Clear();
838  delete MyC;
839  if (printflag)delete axis;
840  for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
841  delete (*pos1);}
842 
843  }
844 
845 
846 }
847 void TrackerMap::drawApvPair(int crate, int numfed_incrate, bool print_total, TmApvPair* apvPair,std::ofstream * svgfile,bool useApvPairValue)
848 {
849  double xp[4],yp[4];
850  int color;
851  int green = 0;
852  int red = 0;
853  int blue = 0;
854  double xd[4],yd[4];
855  int np = 4;
856  double boxinitx=0., boxinity=0.;
857  double dx=.9,dy=.9;
858  int numfedch_incolumn = 12;
859  int numfedch_inrow = 8;
860  int numfed_incolumn = 5;
861  int numfed_inrow = 4;
862  boxinitx=boxinitx+(numfed_incolumn-(numfed_incrate-1)/numfed_inrow)*14.;
863  boxinity=boxinity+(numfed_inrow-(numfed_incrate-1)%numfed_inrow)*9.;
864  boxinity=boxinity+numfedch_inrow-(apvPair->getFedCh()/numfedch_incolumn);
865  boxinitx = boxinitx+numfedch_incolumn-(int)(apvPair->getFedCh()%numfedch_incolumn);
866  //std::cout << crate << " " << numfed_incrate << " " << apvPair->getFedCh()<<" "<<boxinitx<< " " << boxinity << std::endl; ;
867  xp[0]=boxinitx;yp[0]=boxinity;
868  xp[1]=boxinitx+dx;yp[1]=boxinity;
869  xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
870  xp[3]=boxinitx;yp[3]=boxinity + dy;
871  for(int j=0;j<4;j++){
872  xd[j]=xdpixelc(xp[j]);yd[j]=ydpixelc(yp[j]);
873  //std::cout << boxinity << " "<< ymax << " "<< yp[j] << std::endl;
874  }
875 
876  char buffer [20];
877  sprintf(buffer,"%X",apvPair->mod->idex);
878  std::string s = apvPair->mod->name;
879  s.erase(s.begin()+s.find("connected"),s.end());
880 
881  if(useApvPairValue){
882  if(apvPair->red < 0){ //use count to compute color
883  if(apvPair->count > 0) {
884  color = getcolor(apvPair->value,palette);
885  red=(color>>16)&0xFF;
886  green=(color>>8)&0xFF;
887  blue=(color)&0xFF;
888  if(!print_total)apvPair->value=apvPair->value*apvPair->count;//restore mod->value
889  if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
890  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=\"";
891  } else {
892  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
893  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=\"";
894  }
895  } else {//color defined with fillc
896  if(apvPair->red>255)apvPair->red=255;
897  if(apvPair->green>255)apvPair->green=255;
898  if(apvPair->blue>255)apvPair->blue=255;
899  if(temporary_file)*svgfile << apvPair->red << " " << apvPair->green << " " << apvPair->blue << " ";
900  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=\"";
901  }
902  }else{
903  if(apvPair->mod->red < 0){ //use count to compute color
904  if(apvPair->mod->count > 0) {
905  color = getcolor(apvPair->mod->value,palette);
906  red=(color>>16)&0xFF;
907  green=(color>>8)&0xFF;
908  blue=(color)&0xFF;
909  if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
910  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=\"";
911  } else {
912  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
913  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=\"";
914  }
915  } else {//color defined with fillc
916  if(apvPair->mod->red>255)apvPair->mod->red=255;
917  if(apvPair->mod->green>255)apvPair->mod->green=255;
918  if(apvPair->mod->blue>255)apvPair->mod->blue=255;
919  if(temporary_file)*svgfile << apvPair->mod->red << " " << apvPair->mod->green << " " << apvPair->mod->blue << " ";
920  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=\"";
921  }
922  }
923  if(temporary_file)*svgfile << np << " ";
924  for(int k=0;k<np;k++){
925  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
926  else *svgfile << xd[k] << "," << yd[k] << " " ;
927  }
928  if(temporary_file)*svgfile << std::endl;
929  else *svgfile <<"\" />" <<std::endl;
930 }
931 void TrackerMap::drawCcu(int crate, int numfec_incrate, bool print_total, TmCcu* ccu,std::ofstream * svgfile,bool useCcuValue)
932 {
933  double xp[4],yp[4];
934  int color;
935  int green = 0;
936  int red = 0;
937  int blue = 0;
938  double xd[4],yd[4];
939  int np = 4;
940  double boxinitx=0., boxinity=0.;
941  double dx=.9,dy=.9;
942  int numccu_incolumn = 8;
943  int numccu_inrow = 15;
944  int numfed_incolumn = 5;
945  int numfed_inrow = 4;
946  boxinitx=boxinitx+(numfed_incolumn-(numfec_incrate-1)/numfed_inrow)*14.;
947  boxinity=boxinity+(numfed_inrow-(numfec_incrate-1)%numfed_inrow)*16.;
948  boxinity=boxinity+numccu_inrow-ccu->mpos;
949  boxinitx = boxinitx+numccu_incolumn-(int)(ccu->getCcuRing()%numccu_incolumn);
950  //std::cout << crate << " " << numfec_incrate << " " << ccu->getCcuRing()<<" "<<ccu->mpos<<" "<<boxinitx<< " " << boxinity << std::endl; ;
951  xp[0]=boxinitx;yp[0]=boxinity;
952  xp[1]=boxinitx+dx;yp[1]=boxinity;
953  xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
954  xp[3]=boxinitx;yp[3]=boxinity + dy;
955  for(int j=0;j<4;j++){
956  xd[j]=xdpixelfec(xp[j]);yd[j]=ydpixelfec(yp[j]);
957  //std::cout << boxinity << " "<< ymax << " "<< yp[j] << std::endl;
958  }
959 
960  char buffer [20];
961  sprintf(buffer,"%X",ccu->idex);
962  //sprintf(buffer,"%X",ccu->mod->idex);
963  //std::string s = ccu->mod->name;
964  std::string s = ccu->text;
965  s.erase(s.begin()+s.find("connected"),s.end());
966 
967  if(ccu->red < 0){ //use count to compute color
968  if(ccu->count > 0) {
969  color = getcolor(ccu->value,palette);
970  red=(color>>16)&0xFF;
971  green=(color>>8)&0xFF;
972  blue=(color)&0xFF;
973  if(!print_total)ccu->value=ccu->value*ccu->count;//restore mod->value
974  if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
975  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=\"";
976  } else {
977  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
978  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=\"";
979  }
980  } else {//color defined with fillc
981  if(ccu->red>255)ccu->red=255;
982  if(ccu->green>255)ccu->green=255;
983  if(ccu->blue>255)ccu->blue=255;
984  if(temporary_file)*svgfile << ccu->red << " " << ccu->green << " " << ccu->blue << " ";
985  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=\"";
986  }
987 if(temporary_file)*svgfile << np << " ";
988 for(int k=0;k<np;k++){
989  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
990  else *svgfile << xd[k] << "," << yd[k] << " " ;
991 }
992 if(temporary_file)*svgfile << std::endl;
993 else *svgfile <<"\" />" <<std::endl;
994 
995 }
996 void TrackerMap::drawPsu(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
997 {
998  double xp[4],yp[4];
999  int color;
1000  int green = 0;
1001  int red = 0;
1002  int blue = 0;
1003  double xd[4],yd[4];
1004  int np = 4;
1005  double boxinitx=35, boxinity=12;
1006  double dx=3,dy=1.3;
1007 
1008  boxinitx= boxinitx+(5 - numcrate_inrack)*5;
1009  boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
1010 
1011  xp[0]=boxinitx;yp[0]=boxinity;
1012  xp[1]=boxinitx+dx;yp[1]=boxinity;
1013  xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
1014  xp[3]=boxinitx;yp[3]=boxinity + dy;
1015 
1016 
1017  for(int j=0;j<4;j++){
1018  xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
1019  //std::cout << boxinity << " "<< ymax << " "<< yp[j] << std::endl;
1020  }
1021 
1022  char buffer [20];
1023  sprintf(buffer,"%X",psu->idex);
1024  std::string s = psu->text;
1025  s.erase(s.begin()+s.find("connected"),s.end());
1026 
1027  if(psu->red < 0){ //use count to compute color
1028  if(psu->value > 0){
1029  color = getcolor(psu->value,palette);
1030  red=(color>>16)&0xFF;
1031  green=(color>>8)&0xFF;
1032  blue=(color)&0xFF;
1033  if(!print_total)psu->value=psu->value*psu->count;//restore mod->value
1034  if(temporary_file)*svgfile << red << " " << green << " " << blue << " ";
1035  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=\"";
1036  }
1037  else{
1038 
1039  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
1040  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=\"";
1041  }
1042  }
1043 
1044  else {//color defined with fillc
1045  if(psu->red>255)psu->red=255;
1046  if(psu->green>255)psu->green=255;
1047  if(psu->blue>255)psu->blue=255;
1048  if(temporary_file)*svgfile << psu->red << " " << psu->green << " " << psu->blue << " ";
1049  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=\"";
1050  }
1051 
1052 if(temporary_file)*svgfile << np << " ";
1053 for(int k=0;k<np;k++){
1054  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
1055  else *svgfile << xd[k] << "," << yd[k] << " " ;
1056 }
1057 if(temporary_file)*svgfile << std::endl;
1058 else *svgfile <<"\" />" <<std::endl;
1059 
1060 }
1061 
1062 void TrackerMap::drawHV2(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
1063 {
1064  double xp[4],yp[4];
1065  int color;
1066  int greenHV2 = 0;
1067  int redHV2 = 0;
1068  int blueHV2 = 0;
1069  double xd[4],yd[4];
1070  int np = 4;
1071  double boxinitx=35, boxinity=12;
1072  double dx=1.1,dy=1.3;
1073 
1074  boxinitx= boxinitx+(5 - numcrate_inrack)*5;
1075  boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
1076 
1077  xp[0]=boxinitx;yp[0]=boxinity;
1078  xp[1]=boxinitx+dx;yp[1]=boxinity;
1079  xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
1080  xp[3]=boxinitx;yp[3]=boxinity + dy;
1081 
1082 
1083  for(int j=0;j<4;j++){
1084  xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
1085  //std::cout << boxinity << " "<< ymax << " "<< yp[j] << std::endl;
1086  }
1087 
1088  char buffer [20];
1089  sprintf(buffer,"%X",psu->idex);
1090  std::string s = psu->textHV2;
1091  s.erase(s.begin()+s.find("connected"),s.end());
1092 
1093  if(psu->redHV2 < 0){ //use count to compute color
1094 
1095  if(psu->valueHV2 > 0){
1096  color = getcolor(psu->valueHV2,palette);
1097  redHV2=(color>>16)&0xFF;
1098  greenHV2=(color>>8)&0xFF;
1099  blueHV2=(color)&0xFF;
1100  if(!print_total)psu->valueHV2=psu->valueHV2*psu->countHV2;//restore mod->value
1101  if(temporary_file)*svgfile << redHV2 << " " << greenHV2 << " " << blueHV2 << " ";
1102  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=\"";
1103  }
1104  else{
1105  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
1106  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=\"";
1107  }
1108  }
1109 
1110  else {//color defined with fillc
1111  if(psu->redHV2>255)psu->redHV2=255;
1112  if(psu->greenHV2>255)psu->greenHV2=255;
1113  if(psu->blueHV2>255)psu->blueHV2=255;
1114  if(temporary_file)*svgfile << psu->redHV2 << " " << psu->greenHV2 << " " << psu->blueHV2 << " ";
1115  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=\"";
1116  }
1117 
1118 if(temporary_file)*svgfile << np << " ";
1119 for(int k=0;k<np;k++){
1120  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
1121  else *svgfile << xd[k] << "," << yd[k] << " " ;
1122 }
1123 if(temporary_file)*svgfile << std::endl;
1124 else *svgfile <<"\" />" <<std::endl;
1125 
1126 }
1127 
1128 
1129 void TrackerMap::drawHV3(int rack,int numcrate_inrack , bool print_total, TmPsu* psu,std::ofstream * svgfile,bool usePsuValue)
1130 {
1131  double xp[4],yp[4];
1132  int color;
1133  int greenHV3 = 0;
1134  int redHV3 = 0;
1135  int blueHV3 = 0;
1136  double xd[4],yd[4];
1137  int np = 4;
1138  double boxinitx=36.5, boxinity=12;
1139  double dx=1.1,dy=1.3;
1140 
1141  boxinitx= boxinitx+(5 - numcrate_inrack)*5;
1142  boxinity= boxinity+(18 - psu->getPsuBoard())*1.75;
1143 
1144  xp[0]=boxinitx;yp[0]=boxinity;
1145  xp[1]=boxinitx+dx;yp[1]=boxinity;
1146  xp[2]=boxinitx+dx;yp[2]=boxinity + dy;
1147  xp[3]=boxinitx;yp[3]=boxinity + dy;
1148 
1149 
1150  for(int j=0;j<4;j++){
1151  xd[j]=xdpixelpsu(xp[j]);yd[j]=ydpixelpsu(yp[j]);
1152  //std::cout << boxinity << " "<< ymax << " "<< yp[j] << std::endl;
1153  }
1154 
1155  char buffer [20];
1156  sprintf(buffer,"%X",psu->idex);
1157  std::string s = psu->textHV3;
1158  s.erase(s.begin()+s.find("connected"),s.end());
1159 
1160  if(psu->redHV3 < 0){ //use count to compute color
1161  if(psu->valueHV3 > 0){
1162  color = getcolor(psu->valueHV3,palette);
1163  redHV3=(color>>16)&0xFF;
1164  greenHV3=(color>>8)&0xFF;
1165  blueHV3=(color)&0xFF;
1166  if(!print_total)psu->valueHV3=psu->valueHV3*psu->countHV3;//restore mod->value
1167  if(temporary_file)*svgfile << redHV3 << " " << greenHV3 << " " << blueHV3 << " ";
1168  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=\"";
1169  }
1170  else{
1171  if(temporary_file)*svgfile << 255 << " " << 255 << " " << 255 << " ";
1172  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=\"";
1173  }
1174  }
1175 
1176  else {//color defined with fillc
1177  if(psu->redHV3>255)psu->redHV3=255;
1178  if(psu->greenHV3>255)psu->greenHV3=255;
1179  if(psu->blueHV3>255)psu->blueHV3=255;
1180  if(temporary_file)*svgfile << psu->redHV3 << " " << psu->greenHV3 << " " << psu->blueHV3 << " ";
1181  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=\"";
1182  }
1183 
1184 if(temporary_file)*svgfile << np << " ";
1185 for(int k=0;k<np;k++){
1186  if(temporary_file)*svgfile << xd[k] << " " << yd[k] << " " ;
1187  else *svgfile << xd[k] << "," << yd[k] << " " ;
1188 }
1189 if(temporary_file)*svgfile << std::endl;
1190 else *svgfile <<"\" />" <<std::endl;
1191 
1192 }
1193 
1194 void TrackerMap::save_as_fectrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
1195  if(enableFecProcessing){
1196  std::string filetype=s,outputfilename=s;
1197  std::vector<TPolyLine*> vp;
1198  size_t found=filetype.find_last_of(".");
1199  filetype=filetype.substr(found+1);
1200  found=outputfilename.find_last_of(".");
1201  outputfilename=outputfilename.substr(0,found);
1202  temporary_file=true;
1203  if(filetype=="xml"||filetype=="svg")temporary_file=false;
1204  std::ostringstream outs;
1205  minvalue=minval; maxvalue=maxval;
1206  outs << outputfilename << ".coor";
1207  if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1208  std::map<int , TmCcu *>::iterator i_ccu;
1209  std::multimap<TmCcu*, TmModule*>::iterator it;
1210  std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
1211  //Decide if we must use Module or Ccu value
1212  bool useCcuValue=false;
1213 
1214 
1215  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1216  TmCcu * ccu= i_ccu->second;
1217  if(ccu!=0) {
1218  if(ccu->count > 0 || ccu->red!=-1) { useCcuValue=true; break;}
1219  }
1220  }
1221 
1222 
1223  if(!useCcuValue)//store mean of connected modules value{
1224  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1225  TmCcu * ccu= i_ccu->second;
1226  if(ccu!=0) {
1227  ret = fecModuleMap.equal_range(ccu);
1228  for (it = ret.first; it != ret.second; ++it)
1229  {
1230  if( (*it).second->count>0){ccu->value=ccu->value+(*it).second->value;ccu->count++;}
1231  }
1232  if(ccu->count>0)ccu->value=ccu->value/ccu->count;
1233  if(ccu->nmod==0) { ccu->red=0;ccu->green=0;ccu->blue=0;}
1234  }
1235  }
1236 
1237 
1238  if(title==" Tracker Map from QTestAlarm"){
1239  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1240  TmCcu * ccu= i_ccu->second;
1241  if(ccu!=0) {
1242  ret = fecModuleMap.equal_range(ccu);
1243  ccu->red=0;ccu->green=255;ccu->blue=0;
1244  for (it = ret.first; it != ret.second; ++it) {
1245  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 ) ){
1246  ccu->red=255;ccu->green=0;ccu->blue=0;
1247  }
1248  }
1249  }
1250  }
1251  }
1252 
1253 
1254 
1255  if(!print_total){
1256  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1257  TmCcu * ccu= i_ccu->second;
1258  if(ccu!=0) {
1259  if(useCcuValue) ccu->value = ccu->value / ccu->count;
1260 
1261  }
1262  }
1263  }
1264 
1265  if(minvalue>=maxvalue){
1266 
1267  minvalue=9999999.;
1268  maxvalue=-9999999.;
1269  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1270  TmCcu * ccu= i_ccu->second;
1271  if(ccu!=0) {
1272  if (minvalue > ccu->value)minvalue=ccu->value;
1273  if (maxvalue < ccu->value)maxvalue=ccu->value;
1274  }
1275  }
1276  }
1277 
1278 
1279 
1280  if(filetype=="svg"){
1281  saveAsSingleLayer=false;
1282  std::ostringstream outs;
1283  outs << outputfilename<<".svg";
1284  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1285  *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
1286  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1287  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
1288  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
1289  *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
1290  *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
1291  *savefile << "<svg:g id=\"fedtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
1292  }
1293  for (int crate=1; crate < (nfeccrates+1); crate++){
1294  if(filetype=="xml"){
1295  saveAsSingleLayer=true;
1296  std::ostringstream outs;
1297  outs << outputfilename<<"feccrate" <<crate<< ".xml";
1298  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1299  *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
1300  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1301  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
1302  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
1303  *savefile << "<script type=\"text/ecmascript\" xlink:href=\"feccrate.js\" />"<<std::endl;
1304  *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
1305  *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
1306  *savefile << "<g id=\"crate\" transform=\" translate(280,580) rotate(270) scale(.7,.8)\" > "<<std::endl;
1307  }
1308  ncrate=crate;
1310 
1311  for ( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1312  TmCcu * ccu= i_ccu->second;
1313  if(ccu!=0){
1314  if(ccu->getCcuCrate() == crate){
1315 
1316  drawCcu(crate,ccu->getCcuSlot()-2,print_total,ccu,savefile,useCcuValue);
1317  }
1318  }
1319  }
1320 
1321  if(!temporary_file){
1322  if(filetype=="xml"){
1323  *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
1324  *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
1325  *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
1326  *savefile << " </text> </svg>" << std::endl;
1327  savefile->close();
1328  saveAsSingleLayer=false;
1329  }
1330  }
1331  }
1332  if(filetype=="svg"){
1333  *savefile << "</g> </svg> </svg> " << std::endl;
1334  savefile->close();
1335  }
1336  if(!print_total && !useCcuValue){
1337 //Restore ccu value
1338  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
1339  TmCcu * ccu= i_ccu->second;
1340  if(ccu!=0) {
1341  ccu->value = ccu->value * ccu->count;
1342  }
1343 }
1344 }
1345  if(temporary_file){
1346  // if(printflag)drawPalette(savefile);
1347  savefile->close();
1348 
1349  const char * command1;
1350  std::string tempfilename = outputfilename + ".coor";
1351  int red,green,blue,npoints,colindex,ncolor;
1352  double x[4],y[4];
1353  ifstream tempfile(tempfilename.c_str(),std::ios::in);
1354  TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
1355  gPad->SetFillColor(38);
1356 
1357  gPad->Range(0,0,3700,1600);
1358 
1359  //First build palette
1360  ncolor=0;
1361  typedef std::map<int,int> ColorList;
1362  ColorList colorList;
1363  ColorList::iterator pos;
1364  TColor *col,*c;
1365  while(!tempfile.eof()) {
1366  tempfile >> red >> green >> blue >> npoints;
1367  colindex=red+green*1000+blue*1000000;
1368  pos=colorList.find(colindex);
1369  if(pos == colorList.end()){
1370  colorList[colindex]=ncolor+100;
1371  col =gROOT->GetColor(ncolor+100);
1372  if(col)
1373  col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1374  else
1375  c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1376  vc.push_back(c);
1377  ncolor++;
1378  }
1379  for (int i=0;i<npoints;i++){
1380  tempfile >> x[i] >> y[i];
1381  }
1382  }
1383  if(ncolor>0 && ncolor<10000){
1384  Int_t colors[10000];
1385  for(int i=0;i<ncolor;i++){colors[i]=i+100;}
1386  gStyle->SetPalette(ncolor,colors);
1387  }
1388  tempfile.clear();
1389  tempfile.seekg(0,std::ios::beg);
1390  std::cout << "created palette with " << ncolor << " colors" << std::endl;
1391  while(!tempfile.eof()) {//create polylines
1392  tempfile >> red >> green >> blue >> npoints;
1393  for (int i=0;i<npoints;i++){
1394  tempfile >> x[i] >> y[i];
1395  }
1396  colindex=red+green*1000+blue*1000000;
1397  pos=colorList.find(colindex);
1398  if(pos != colorList.end()){
1399  TPolyLine* pline = new TPolyLine(npoints,y,x);
1400  vp.push_back(pline);
1401  pline->SetFillColor(colorList[colindex]);
1402  pline->SetLineWidth(0);
1403  pline->Draw("f");
1404  }
1405  }
1406  MyC->Update();
1407  std::cout << "Filetype " << filetype << std::endl;
1408  if(filetype=="png"){
1409  std::string filename = outputfilename + ".png";
1410  MyC->Print(filename.c_str());
1411  }
1412  if(filetype=="jpg"){
1413  std::string filename = outputfilename + ".jpg";
1414  MyC->Print(filename.c_str());
1415  }
1416  if(filetype=="pdf"){
1417  std::string filename = outputfilename + ".pdf";
1418  MyC->Print(filename.c_str());
1419  }
1420  std::string command = "rm "+tempfilename ;
1421  command1=command.c_str();
1422  std::cout << "Executing " << command1 << std::endl;
1423  system(command1);
1424  MyC->Clear();
1425  delete MyC;
1426  for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
1427  delete (*pos1);}
1428 
1429 
1430 
1431 
1432 }//if(temporary_file)
1433 }//if(enabledFecProcessing)
1434 }
1435 void TrackerMap::save_as_HVtrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
1436 
1437  if(enableHVProcessing){
1438  std::string filetype=s,outputfilename=s;
1439  std::vector<TPolyLine*> vp;
1440 
1441  size_t found=filetype.find_last_of(".");
1442  filetype=filetype.substr(found+1);
1443  found=outputfilename.find_last_of(".");
1444  outputfilename=outputfilename.substr(0,found);
1445 
1446  temporary_file=true;
1447 
1448 
1449  if(filetype=="xml"||filetype=="svg")temporary_file=false;
1450 
1451  std::ostringstream outs;
1452  minvalue=minval; maxvalue=maxval;
1453  outs << outputfilename << ".coor";
1454  if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1455 
1456  std::map<int , TmPsu *>::iterator ipsu;
1457  std::multimap<TmPsu*, TmModule*>::iterator it;
1458  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
1459 
1460 
1461  bool usePsuValue=false;
1462 
1463  for( ipsu=psuMap.begin();ipsu!=psuMap.end(); ipsu++){
1464  TmPsu* psu= ipsu->second;
1465  if(psu!=0) {
1466  if(psu->countHV2 > 0 || psu->redHV2!=-1 || psu->countHV3 > 0 || psu->redHV3!=-1) { usePsuValue=true; break;}
1467  }
1468  }
1469 
1470  if(!usePsuValue){//store mean of connected modules value{
1471 
1472  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1473  TmPsu * psu= ipsu->second;
1474  if(psu!=0) {
1475  ret = psuModuleMap.equal_range(psu);
1476  for(it = ret.first; it != ret.second; ++it){
1477  if((*it).second->HVchannel==2){ psu->valueHV2=psu->valueHV2+(*it).second->value;}
1478  if((*it).second->HVchannel==3){ psu->valueHV3=psu->valueHV3+(*it).second->value;}
1479  }
1480  if(psu->nmodHV2!=0){psu->valueHV2=psu->valueHV2/psu->nmodHV2;}
1481  if(psu->nmodHV3!=0){psu->valueHV3=psu->valueHV3/psu->nmodHV3;}
1482  psu->countHV2=1;
1483  psu->countHV3=1;
1484 
1485  }
1486 
1487  }
1488  }
1489 
1490  if(title==" Tracker Map from QTestAlarm"){
1491  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1492  TmPsu * psu= ipsu->second;
1493  if(psu!=0) {
1494  ret = psuModuleMap.equal_range(psu);
1495  psu->redHV2=0;psu->greenHV2=255;psu->blueHV2=0;
1496  psu->redHV3=0;psu->greenHV3=255;psu->blueHV3=0;
1497  for (it = ret.first; it != ret.second; ++it) {
1498  if((*it).second->HVchannel==2){
1499  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 ) ){
1500  psu->redHV2=255;psu->greenHV2=0;psu->blueHV2=0;
1501  }
1502  }
1503  if((*it).second->HVchannel==3){
1504  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 ) ){
1505  psu->redHV3=255;psu->greenHV3=0;psu->blueHV3=0;
1506  }
1507  }
1508  }
1509  }
1510  }
1511  }
1512 
1513  if(!print_total){
1514  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1515  TmPsu * psu= ipsu->second;
1516  if(psu!=0) {
1517  if(usePsuValue){
1518  psu->valueHV2 = psu->valueHV2 / psu->countHV2;
1519  psu->valueHV3 = psu->valueHV3 / psu->countHV3;
1520  }
1521  }
1522  }
1523  }
1524 
1525  if(minvalue>=maxvalue){
1526 
1527  minvalue=9999999.;
1528  maxvalue=-9999999.;
1529 
1530  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1531  TmPsu * psu= ipsu->second;
1532  if(psu!=0) {
1533  if (minvalue > psu->valueHV2 || minvalue > psu->valueHV3)minvalue=std::min(psu->valueHV2,psu->valueHV3);
1534  if (maxvalue < psu->valueHV2 || maxvalue < psu->valueHV3)maxvalue=std::max(psu->valueHV2,psu->valueHV3);
1535 
1536 
1537  }
1538  }
1539  }
1540 
1541  if(filetype=="svg"){
1542  saveAsSingleLayer=false;
1543  std::ostringstream outs;
1544  outs << outputfilename<<".svg";
1545  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1546  *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
1547  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1548  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
1549  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
1550  *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
1551  *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
1552  *savefile << "<svg:g id=\"HVtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
1553  }
1554 
1555  for (int irack=1; irack < (npsuracks+1); irack++){
1556  if(filetype=="xml"){
1557  saveAsSingleLayer=true;
1558  std::ostringstream outs;
1559  outs << outputfilename<<"HVrack" <<irack<< ".xml";
1560  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1561  *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
1562  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1563  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
1564  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
1565  *savefile << "<script type=\"text/ecmascript\" xlink:href=\"rackhv.js\" />"<<std::endl;
1566  *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerRackhv.init()\">"<<std::endl;
1567  *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
1568  *savefile << "<g id=\"rackhv\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
1569  }
1570 
1571  nrack=irack;
1573  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1574  TmPsu * psu= ipsu->second;
1575  if(psu->getPsuRack() == irack){
1576  drawHV2(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
1577  drawHV3(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
1578  }
1579  }
1580 
1581 
1582  if(!temporary_file){
1583  if(filetype=="xml"){
1584  *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
1585  *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
1586  *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
1587  *savefile << " </text> </svg>" << std::endl;
1588  savefile->close();
1589  saveAsSingleLayer=false;
1590  }
1591  }
1592  }
1593  if(filetype=="svg"){
1594  *savefile << "</g> </svg> </svg> " << std::endl;
1595  savefile->close();
1596  }
1597 
1598  //Restore psu value
1599  if(!print_total && !usePsuValue){
1600  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1601  TmPsu *psu = ipsu->second;
1602  if(psu!=0) {
1603  psu->valueHV2 = psu->valueHV2 * psu->countHV2;
1604  psu->valueHV3 = psu->valueHV3 * psu->countHV3;
1605  }
1606  }
1607  }
1608 
1609 
1610  if(temporary_file){
1611  // if(printflag)drawPalette(savefile);
1612  savefile->close();
1613 
1614  const char * command1;
1615  std::string tempfilename = outputfilename + ".coor";
1616  int red,green,blue,npoints,colindex,ncolor;
1617  double x[4],y[4];
1618  ifstream tempfile(tempfilename.c_str(),std::ios::in);
1619  TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
1620  gPad->SetFillColor(38);
1621 
1622  gPad->Range(0,0,3700,1600);
1623 
1624  //First build palette
1625  ncolor=0;
1626  typedef std::map<int,int> ColorList;
1627  ColorList colorList;
1628  ColorList::iterator pos;
1629  TColor *col,*c;
1630  while(!tempfile.eof()) {
1631  tempfile >> red >> green >> blue >> npoints;
1632  colindex=red+green*1000+blue*1000000;
1633  pos=colorList.find(colindex);
1634  if(pos == colorList.end()){
1635  colorList[colindex]=ncolor+100;
1636  col =gROOT->GetColor(ncolor+100);
1637  if(col)
1638  col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1639  else
1640  c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1641  vc.push_back(c);
1642  ncolor++;
1643  }
1644  for (int i=0;i<npoints;i++){
1645  tempfile >> x[i] >> y[i];
1646  }
1647  }
1648  if(ncolor>0 && ncolor<10000){
1649  Int_t colors[10000];
1650  for(int i=0;i<ncolor;i++){colors[i]=i+100;}
1651  gStyle->SetPalette(ncolor,colors);
1652  }
1653  tempfile.clear();
1654  tempfile.seekg(0,std::ios::beg);
1655  std::cout << "created palette with " << ncolor << " colors" << std::endl;
1656  while(!tempfile.eof()) {//create polylines
1657  tempfile >> red >> green >> blue >> npoints;
1658  for (int i=0;i<npoints;i++){
1659  tempfile >> x[i] >> y[i];
1660  }
1661  colindex=red+green*1000+blue*1000000;
1662  pos=colorList.find(colindex);
1663  if(pos != colorList.end()){
1664  TPolyLine* pline = new TPolyLine(npoints,y,x);
1665  vp.push_back(pline);
1666  pline->SetFillColor(colorList[colindex]);
1667  pline->SetLineWidth(0);
1668  pline->Draw("f");
1669  }
1670  }
1671  MyC->Update();
1672  std::cout << "Filetype " << filetype << std::endl;
1673  if(filetype=="png"){
1674  std::string filename = outputfilename + ".png";
1675  MyC->Print(filename.c_str());
1676  }
1677  if(filetype=="jpg"){
1678  std::string filename = outputfilename + ".jpg";
1679  MyC->Print(filename.c_str());
1680  }
1681  if(filetype=="pdf"){
1682  std::string filename = outputfilename + ".pdf";
1683  MyC->Print(filename.c_str());
1684  }
1685  std::string command = "rm "+tempfilename ;
1686  command1=command.c_str();
1687  std::cout << "Executing " << command1 << std::endl;
1688  system(command1);
1689  MyC->Clear();
1690  delete MyC;
1691  for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
1692  delete (*pos1);}
1693 
1694 
1695  }//if(temporary_file)
1696 }//if(enabledHVProcessing)
1697 }
1698 
1699 
1700 void TrackerMap::save_as_psutrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
1701 
1702  if(enableLVProcessing){
1703 
1704  std::string filetype=s,outputfilename=s;
1705  std::vector<TPolyLine*> vp;
1706 
1707  size_t found=filetype.find_last_of(".");
1708  filetype=filetype.substr(found+1);
1709  found=outputfilename.find_last_of(".");
1710  outputfilename=outputfilename.substr(0,found);
1711 
1712  temporary_file=true;
1713 
1714 
1715 
1716  if(filetype=="xml"||filetype=="svg")temporary_file=false;
1717 
1718  std::ostringstream outs;
1719  minvalue=minval; maxvalue=maxval;
1720  outs << outputfilename << ".coor";
1721  if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1722 
1723  std::map<int , TmPsu *>::iterator ipsu;
1724  std::multimap<TmPsu*, TmModule*>::iterator it;
1725  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
1726 
1727  //Decide if we must use Module or Power Psupply value
1728  bool usePsuValue=false;
1729 
1730  for( ipsu=psuMap.begin();ipsu!=psuMap.end(); ipsu++){
1731  TmPsu* psu= ipsu->second;
1732  if(psu!=0) {
1733  if(psu->count > 0 || psu->red!=-1) { usePsuValue=true; break;}
1734  }
1735  }
1736 
1737  if(!usePsuValue){//store mean of connected modules value{
1738  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1739  TmPsu * psu= ipsu->second;
1740  if(psu!=0) {
1741  ret = psuModuleMap.equal_range(psu);
1742  for(it = ret.first; it != ret.second; ++it){
1743  psu->value=psu->value+(*it).second->value;
1744 
1745  }
1746  psu->value=psu->value/psu->nmod;
1747  psu->count=1;
1748 
1749  }
1750  }
1751  }
1752 
1753  if(title==" Tracker Map from QTestAlarm"){
1754  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1755  TmPsu * psu= ipsu->second;
1756  if(psu!=0) {
1757  ret = psuModuleMap.equal_range(psu);
1758  psu->red=0;psu->green=255;psu->blue=0;
1759  for (it = ret.first; it != ret.second; ++it) {
1760  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 ) ){
1761  psu->red=255;psu->green=0;psu->blue=0;
1762  }
1763  }
1764  }
1765  }
1766  }
1767 
1768 
1769 
1770  if(!print_total){
1771  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1772  TmPsu * psu= ipsu->second;
1773  if(psu!=0) {
1774  if(usePsuValue) psu->value = psu->value / psu->count;
1775 
1776  }
1777  }
1778  }
1779 
1780  if(minvalue>=maxvalue){
1781 
1782  minvalue=9999999.;
1783  maxvalue=-9999999.;
1784  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1785  TmPsu * psu= ipsu->second;
1786  if(psu!=0) {
1787  if (minvalue > psu->value)minvalue=psu->value;
1788  if (maxvalue < psu->value)maxvalue=psu->value;
1789  }
1790  }
1791  }
1792 
1793  if(filetype=="svg"){
1794  saveAsSingleLayer=false;
1795  std::ostringstream outs;
1796  outs << outputfilename<<".svg";
1797  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1798  *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
1799  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1800  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
1801  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
1802  *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
1803  *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
1804  *savefile << "<svg:g id=\"psutrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
1805  }
1806 
1807  for (int irack=1; irack < (npsuracks+1); irack++){
1808  if(filetype=="xml"){
1809  saveAsSingleLayer=true;
1810  outs << outputfilename<<"psurack" <<irack<< ".xml";
1811  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1812  *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
1813  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
1814  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
1815  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
1816  *savefile << "<script type=\"text/ecmascript\" xlink:href=\"rack.js\" />"<<std::endl;
1817  *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
1818  *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
1819  *savefile << "<g id=\"rack\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
1820  }
1821 
1822 
1823  nrack=irack;
1825  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1826  TmPsu * psu= ipsu->second;
1827  if(psu->getPsuRack() == irack){
1828 
1829  drawPsu(irack,psu->getPsuCrate(),print_total,psu,savefile,usePsuValue);
1830  }
1831  }
1832 
1833 
1834  if(!temporary_file){
1835  if(filetype=="xml"){
1836  *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
1837  *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
1838  *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
1839  *savefile << " </text> </svg>" << std::endl;
1840  savefile->close();
1841  saveAsSingleLayer=false;
1842  }
1843  }
1844  }
1845  if(filetype=="svg"){
1846  *savefile << "</g> </svg> </svg> " << std::endl;
1847  savefile->close();
1848  }
1849 
1850  //Restore psu value
1851  if(!print_total && !usePsuValue){
1852  for( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
1853  TmPsu *psu = ipsu->second;
1854  if(psu!=0) {
1855  psu->value = psu->value * psu->count;
1856  }
1857  }
1858  }
1859 
1860 
1861  if(temporary_file){
1862  // if(printflag)drawPalette(savefile);
1863  savefile->close();
1864 
1865  const char * command1;
1866  std::string tempfilename = outputfilename + ".coor";
1867  int red,green,blue,npoints,colindex,ncolor;
1868  double x[4],y[4];
1869  ifstream tempfile(tempfilename.c_str(),std::ios::in);
1870  TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
1871  gPad->SetFillColor(38);
1872 
1873  gPad->Range(0,0,3700,1600);
1874 
1875  //First build palette
1876  ncolor=0;
1877  typedef std::map<int,int> ColorList;
1878  ColorList colorList;
1879  ColorList::iterator pos;
1880  TColor *col,*c;
1881  while(!tempfile.eof()) {
1882  tempfile >> red >> green >> blue >> npoints;
1883  colindex=red+green*1000+blue*1000000;
1884  pos=colorList.find(colindex);
1885  if(pos == colorList.end()){
1886  colorList[colindex]=ncolor+100;
1887  col =gROOT->GetColor(ncolor+100);
1888  if(col)
1889  col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1890  else
1891  c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
1892  vc.push_back(c);
1893  ncolor++;
1894  }
1895  for (int i=0;i<npoints;i++){
1896  tempfile >> x[i] >> y[i];
1897  }
1898  }
1899  if(ncolor>0 && ncolor<10000){
1900  Int_t colors[10000];
1901  for(int i=0;i<ncolor;i++){colors[i]=i+100;}
1902  gStyle->SetPalette(ncolor,colors);
1903  }
1904  tempfile.clear();
1905  tempfile.seekg(0,std::ios::beg);
1906  std::cout << "created palette with " << ncolor << " colors" << std::endl;
1907  while(!tempfile.eof()) {//create polylines
1908  tempfile >> red >> green >> blue >> npoints;
1909  for (int i=0;i<npoints;i++){
1910  tempfile >> x[i] >> y[i];
1911  }
1912  colindex=red+green*1000+blue*1000000;
1913  pos=colorList.find(colindex);
1914  if(pos != colorList.end()){
1915  TPolyLine* pline = new TPolyLine(npoints,y,x);
1916  vp.push_back(pline);
1917  pline->SetFillColor(colorList[colindex]);
1918  pline->SetLineWidth(0);
1919  pline->Draw("f");
1920  }
1921  }
1922  MyC->Update();
1923  std::cout << "Filetype " << filetype << std::endl;
1924  if(filetype=="png"){
1925  std::string filename = outputfilename + ".png";
1926  MyC->Print(filename.c_str());
1927  }
1928  if(filetype=="jpg"){
1929  std::string filename = outputfilename + ".jpg";
1930  MyC->Print(filename.c_str());
1931  }
1932  if(filetype=="pdf"){
1933  std::string filename = outputfilename + ".pdf";
1934  MyC->Print(filename.c_str());
1935  }
1936  std::string command = "rm "+tempfilename ;
1937  command1=command.c_str();
1938  std::cout << "Executing " << command1 << std::endl;
1939  system(command1);
1940  MyC->Clear();
1941  delete MyC;
1942  for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
1943  delete (*pos1);}
1944 
1945 }//if(temporary_file)
1946 }//if(enabledFedProcessing)
1947 }
1948 
1949 void TrackerMap::save_as_fedtrackermap(bool print_total,float minval, float maxval,std::string s,int width, int height){
1950  if(enableFedProcessing){
1951  std::string filetype=s,outputfilename=s;
1952  std::vector<TPolyLine*> vp;
1953 
1954  size_t found=filetype.find_last_of(".");
1955  filetype=filetype.substr(found+1);
1956  found=outputfilename.find_last_of(".");
1957  outputfilename=outputfilename.substr(0,found);
1958 
1959  temporary_file=true;
1960  if(filetype=="xml"||filetype=="svg")temporary_file=false;
1961  std::ostringstream outs;
1962  minvalue=minval; maxvalue=maxval;
1963  outs << outputfilename << ".coor";
1964  if(temporary_file)savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
1965  std::map<int , TmApvPair *>::iterator i_apv;
1966  std::map<int , int>::iterator i_fed;
1967  //Decide if we must use Module or ApvPair value
1968  bool useApvPairValue=false;
1969  for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
1970  TmApvPair * apvPair= i_apv->second;
1971  if(apvPair!=0) {
1972  TmModule * apv_mod = apvPair->mod;
1973  if(apv_mod !=0 && !apv_mod->notInUse()){
1974  if(apvPair->count > 0 || apvPair->red!=-1) { useApvPairValue=true; break;}
1975  }
1976  }
1977  }
1978  if(!print_total){
1979  for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
1980  TmApvPair * apvPair= i_apv->second;
1981  if(apvPair!=0) {
1982  TmModule * apv_mod = apvPair->mod;
1983  if(apv_mod !=0 && !apv_mod->notInUse()){
1984  if(useApvPairValue) apvPair->value = apvPair->value / apvPair->count;
1985  else if(apvPair->mpos==0)apv_mod->value = apv_mod->value / apv_mod->count;
1986  }
1987  }
1988  }
1989  }
1990  if(minvalue>=maxvalue){
1991 
1992  minvalue=9999999.;
1993  maxvalue=-9999999.;
1994  for(i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
1995  TmApvPair * apvPair= i_apv->second;
1996  if(apvPair!=0) {
1997  TmModule * apv_mod = apvPair->mod;
1998  if( apv_mod !=0 && !apv_mod->notInUse()){
1999  if(useApvPairValue){
2000  if (minvalue > apvPair->value)minvalue=apvPair->value;
2001  if (maxvalue < apvPair->value)maxvalue=apvPair->value;
2002  } else {
2003  if (minvalue > apv_mod->value)minvalue=apv_mod->value;
2004  if (maxvalue < apv_mod->value)maxvalue=apv_mod->value;
2005  }
2006  }
2007  }
2008  }
2009  }
2010  if(filetype=="svg"){
2011  saveAsSingleLayer=false;
2012  std::ostringstream outs;
2013  outs << outputfilename<<".svg";
2014  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
2015  *savefile << "<?xml version=\"1.0\" standalone=\"no\" ?>"<<std::endl;
2016  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
2017  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\" "<<std::endl;
2018  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\">"<<std::endl;
2019  *savefile << "<svg:svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 3000 1600"<<"\" width=\""<<width<<"\" height=\""<<height<<"\">"<<std::endl;
2020  *savefile << "<svg:rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"3000\" height=\"1600\" /> "<<std::endl;
2021  *savefile << "<svg:g id=\"fedtrackermap\" transform=\"translate(10,1500) rotate(270)\" style=\"fill:none;stroke:black;stroke-width:0;\"> "<<std::endl;
2022  }
2023  for (int crate=1; crate < (ncrates+1); crate++){
2024  if(filetype=="xml"){
2025  saveAsSingleLayer=true;
2026  std::ostringstream outs;
2027  outs << outputfilename<<"crate" <<crate<< ".xml";
2028  savefile = new std::ofstream(outs.str().c_str(),std::ios::out);
2029  *savefile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
2030  *savefile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
2031  *savefile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
2032  *savefile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
2033  *savefile << "<script type=\"text/ecmascript\" xlink:href=\"crate.js\" />"<<std::endl;
2034  *savefile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerCrate.init()\">"<<std::endl;
2035  *savefile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
2036  *savefile << "<g id=\"crate\" transform=\" translate(150,500) rotate(270) scale(1.,1.)\" > "<<std::endl;
2037  }
2038  ncrate=crate;
2039  defcwindow(ncrate);
2040  int numfed_incrate=0;
2041  for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
2042  if(i_fed->second == crate){
2043  int fedId = i_fed->first;
2044  numfed_incrate++;
2045  for (int nconn=0;nconn<96;nconn++){
2046  int key = fedId*1000+nconn;
2047  TmApvPair * apvPair= apvMap[key];
2048  if(apvPair !=0){
2049  TmModule * apv_mod = apvPair->mod;
2050  if(apv_mod !=0 && !apv_mod->notInUse()){
2051  drawApvPair(crate,numfed_incrate,print_total,apvPair,savefile,useApvPairValue);
2052  }
2053  }
2054  }
2055  }
2056  }
2057  if(!temporary_file){
2058  if(filetype=="xml"){
2059  *savefile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\"> " << std::endl;
2060  *savefile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
2061  *savefile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
2062  *savefile << " </text> </svg>" << std::endl;
2063  savefile->close();delete savefile;
2064  saveAsSingleLayer=false;
2065  }
2066  }
2067  }
2068  if(filetype=="svg"){
2069  *savefile << "</g> </svg> </svg> " << std::endl;
2070  savefile->close();delete savefile;
2071  }
2072  if(!print_total && !useApvPairValue){
2073 //Restore module value
2074  for( i_apv=apvMap.begin();i_apv !=apvMap.end(); i_apv++){
2075  TmApvPair * apvPair= i_apv->second;
2076  if(apvPair!=0) {
2077  TmModule * apv_mod = apvPair->mod;
2078  if(apv_mod !=0 && apvPair->mpos==0 && !apv_mod->notInUse()){
2079  apv_mod->value = apv_mod->value * apv_mod->count;
2080  }
2081  }
2082  }
2083 }
2084 
2085  if(temporary_file){
2086  //if(printflag)drawPalette(savefile);
2087  savefile->close(); delete savefile;
2088 
2089  const char * command1;
2090  std::string tempfilename = outputfilename + ".coor";
2091  int red,green,blue,npoints,colindex,ncolor;
2092  double x[4],y[4];
2093  ifstream tempfile(tempfilename.c_str(),std::ios::in);
2094  TCanvas *MyC = new TCanvas("MyC", "TrackerMap",width,height);
2095  gPad->SetFillColor(38);
2096 
2097  gPad->Range(0,0,3750,1600);
2098 
2099  //First build palette
2100  ncolor=0;
2101  typedef std::map<int,int> ColorList;
2102  ColorList colorList;
2103  ColorList::iterator pos;
2104  TColor *col,*c;
2105  while(!tempfile.eof()) {
2106  tempfile >> red >> green >> blue >> npoints;
2107  colindex=red+green*1000+blue*1000000;
2108  pos=colorList.find(colindex);
2109  if(pos == colorList.end()){
2110  colorList[colindex]=ncolor+100;
2111  col =gROOT->GetColor(ncolor+100);
2112  if(col)
2113  col->SetRGB((Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
2114  else
2115  c = new TColor(ncolor+100,(Double_t)(red/255.),(Double_t)(green/255.),(Double_t)(blue/255.));
2116  vc.push_back(c);
2117  ncolor++;
2118  }
2119  for (int i=0;i<npoints;i++){
2120  tempfile >> x[i] >> y[i];
2121  }
2122  }
2123  if(ncolor>0 && ncolor<10000){
2124  Int_t colors[10000];
2125  for(int i=0;i<ncolor;i++){colors[i]=i+100;}
2126  gStyle->SetPalette(ncolor,colors);
2127  }
2128  tempfile.clear();
2129  tempfile.seekg(0,std::ios::beg);
2130  std::cout << "created palette with " << ncolor << " colors" << std::endl;
2131  while(!tempfile.eof()) {//create polylines
2132  tempfile >> red >> green >> blue >> npoints;
2133  for (int i=0;i<npoints;i++){
2134  tempfile >> x[i] >> y[i];
2135  }
2136  colindex=red+green*1000+blue*1000000;
2137  pos=colorList.find(colindex);
2138  if(pos != colorList.end()){
2139  TPolyLine* pline = new TPolyLine(npoints,y,x);
2140  vp.push_back(pline);
2141  pline->SetFillColor(colorList[colindex]);
2142  pline->SetLineWidth(0);
2143  pline->Draw("f");
2144  }
2145  }
2146  MyC->Update();
2147  std::cout << "Filetype " << filetype << std::endl;
2148  if(filetype=="png"){
2149  std::string filename = outputfilename + ".png";
2150  MyC->Print(filename.c_str());
2151  }
2152  if(filetype=="jpg"){
2153  std::string filename = outputfilename + ".jpg";
2154  MyC->Print(filename.c_str());
2155  }
2156  if(filetype=="pdf"){
2157  std::string filename = outputfilename + ".pdf";
2158  MyC->Print(filename.c_str());
2159  }
2160  std::string command = "rm "+tempfilename ;
2161  command1=command.c_str();
2162  std::cout << "Executing " << command1 << std::endl;
2163  system(command1);
2164  MyC->Clear();
2165  delete MyC;
2166  for(std::vector<TPolyLine*>::iterator pos1=vp.begin();pos1!=vp.end();pos1++){
2167  delete (*pos1);}
2168 
2169 
2170 }//if(temporary_file)
2171 }//if(enabledFedProcessing)
2172 }
2173 
2174 void TrackerMap::load(std::string inputfilename){
2175  inputfile = new ifstream(inputfilename.c_str(),std::ios::in);
2176  std::string line,value;
2177  int ipos,ipos1,ipos2,id=0,val=0;
2178  int nline=0;
2179  while (getline( *inputfile, line ))
2180  {
2181  ipos1 = line.find("value=\"");
2182  if(ipos1 > 0) {
2183  value = line.substr(ipos1+7,10);
2184  ipos = value.find("\"");
2185  value = value.substr(0,ipos);
2186  val=atoi(value.c_str());
2187  }
2188  ipos2 = line.find("detid=\"");
2189  if(ipos2 > 0) {
2190  value = line.substr(ipos2+7,10);
2191  ipos = value.find("\"");
2192  value = value.substr(0,ipos);
2193  id = atoi(value.c_str());
2194  }
2195  if(ipos1>0 && ipos2>0 && val>0)this->fill(id,val);
2196  if(ipos1>0 && ipos2>0)nline++;
2197  //if(ipos1>0 && ipos2>0)std::cout << nline << " " << id << " " << val << std::endl;
2198 
2199  }
2200  std::cout << nline << " modules found in this svg file " << std::endl;
2201  inputfile->close();delete inputfile;
2202  }
2203 
2204 
2205 
2206 //print in svg format tracker map
2207 //print_total = true represent in color the total stored in the module
2208 //print_total = false represent in color the average
2209 void TrackerMap::print(bool print_total, float minval, float maxval, std::string outputfilename){
2210  temporary_file=false;
2211  std::ostringstream outs;
2212  minvalue=minval; maxvalue=maxval;
2213  outs << outputfilename << ".xml";
2214  svgfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2215  jsfile = new ifstream(edm::FileInPath(jsfilename).fullPath().c_str(),std::ios::in);
2216 
2217  //copy javascript interface from trackermap.txt file
2218  std::string line;
2219  while (getline( *jsfile, line ))
2220  {
2221  *svgfile << line << std::endl;
2222  }
2223  jsfile->close();delete jsfile;
2224  //
2225  if(!print_total){
2226  for (int layer=1; layer < 44; layer++){
2227  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
2228  for (int module=1;module<200;module++) {
2229  int key=layer*100000+ring*1000+module;
2230  TmModule * mod = smoduleMap[key];
2231  if(mod !=0 && !mod->notInUse()){
2232  mod->value = mod->value / mod->count;
2233  }
2234  }
2235  }
2236  }
2237  }
2238  if(minvalue>=maxvalue){
2239  minvalue=9999999.;
2240  maxvalue=-9999999.;
2241  for (int layer=1; layer < 44; layer++){
2242  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
2243  for (int module=1;module<200;module++) {
2244  int key=layer*100000+ring*1000+module;
2245  TmModule * mod = smoduleMap[key];
2246  if(mod !=0 && !mod->notInUse()){
2247  if (minvalue > mod->value)minvalue=mod->value;
2248  if (maxvalue < mod->value)maxvalue=mod->value;
2249  }
2250  }
2251  }
2252  }
2253 }
2254  for (int layer=1; layer < 44; layer++){
2255  nlay=layer;
2256  defwindow(nlay);
2257  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
2258  for (int module=1;module<200;module++) {
2259  int key=layer*100000+ring*1000+module;
2260  TmModule * mod = smoduleMap[key];
2261  if(mod !=0 && !mod->notInUse()){
2262  drawModule(mod,key,layer,print_total,svgfile);
2263  }
2264  }
2265  }
2266  }
2267  *svgfile << "</svg:g></svg:svg>"<<std::endl;
2268  *svgfile << " <svg:text id=\"Title\" class=\"normalText\" x=\"300\" y=\"0\">"<<title<<"</svg:text>"<<std::endl;
2270  *svgfile << "</svg:svg>"<<std::endl;
2271  *svgfile << "</body></html>"<<std::endl;
2272  svgfile->close();delete svgfile;
2273 
2274 }
2275 
2276 void TrackerMap::drawPalette(std::ofstream * svgfile){
2277  int color,red, green, blue;
2278  float val=minvalue;
2279  int paletteLength = 250;
2280  float dval = (maxvalue-minvalue)/(float)paletteLength;
2281  for(int i=0;i<paletteLength;i++){
2282  color = getcolor(val,palette);
2283  red=(color>>16)&0xFF;
2284  green=(color>>8)&0xFF;
2285  blue=(color)&0xFF;
2286  // if(!temporary_file)*svgfile <<"<svg:rect x=\"3010\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"6\" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" />\n";
2287  // else *svgfile << red << " " << green << " " << blue << " 4 " << (6*i)+40 << " 3010. " <<//
2288  // (6*i)+40 << " 3060. " <<//
2289  // (6*(i-1))+40 << " 3060. " <<//
2290  // (6*(i-1))+40 <<" 3010. " << std::endl; //
2291 
2292  // if(i%50 == 0){
2293  // if(!temporary_file)*svgfile <<"<svg:rect x=\"3010\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"1\" fill=\"black\" />\n";
2294  // if(i%50==0&&!temporary_file)*svgfile << " <svg:text class=\"normalText\" x=\"3060\" y=\""<<(1560-6*i)<<"\">" <<val<<"</svg:text>"<<std::endl;
2295 
2296  if(!temporary_file)*svgfile <<"<svg:rect x=\"3610\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"6\" fill=\"rgb("<<red<<","<<green<<","<<blue<<")\" />\n";
2297  else *svgfile << red << " " << green << " " << blue << " 4 " << (6*i)+40 << " 3610. " <<//
2298  (6*i)+40 << " 3660. " <<//
2299  (6*(i-1))+40 << " 3660. " <<//
2300  (6*(i-1))+40 <<" 3610. " << std::endl; //
2301 
2302  if(i%50 == 0){
2303  if(!temporary_file)*svgfile <<"<svg:rect x=\"3610\" y=\""<<(1550-6*i)<<"\" width=\"50\" height=\"1\" fill=\"black\" />\n";
2304  if(i%50==0&&!temporary_file)*svgfile << " <svg:text class=\"normalText\" x=\"3660\" y=\""<<(1560-6*i)<<"\">" <<val<<"</svg:text>"<<std::endl;
2305  }
2306  val = val + dval;
2307  }
2308 }
2309 void TrackerMap::fillc_fed_channel(int fedId,int fedCh, int red, int green, int blue )
2310 {
2311  int key = fedId*1000+fedCh;
2312  TmApvPair* apvpair = apvMap[key];
2313 
2314  if(apvpair!=0){
2315  apvpair->red=red; apvpair->green=green; apvpair->blue=blue;
2316  return;
2317  }
2318  std::cout << "*** error in FedTrackerMap fillc method ***";
2319 }
2320 
2321 void TrackerMap::fill_fed_channel(int idmod, float qty )
2322 {
2323  std::multimap<const int, TmApvPair*>::iterator pos;
2324  for (pos = apvModuleMap.lower_bound(idmod);
2325  pos != apvModuleMap.upper_bound(idmod); ++pos) {
2326  TmApvPair* apvpair = pos->second;
2327  if(apvpair!=0){
2328  apvpair->value=apvpair->value+qty;
2329  apvpair->count++;
2330  }
2331  }
2332  return;
2333  std::cout << "*** error in FedTrackerMap fill by module method ***";
2334  }
2335 
2336 void TrackerMap::fill_current_val_fed_channel(int fedId, int fedCh, float current_val )
2337 {
2338  int key = fedId*1000+fedCh;
2339  TmApvPair* apvpair = apvMap[key];
2340 
2341  if(apvpair!=0) {apvpair->value=current_val; apvpair->count=1; apvpair->red=-1;}
2342  else
2343  std::cout << "*** error in FedTrackerMap fill_current_val method ***";
2344 }
2345 
2346 
2347 void TrackerMap::fillc_fec_channel(int crate,int slot, int ring, int addr, int red, int green, int blue )
2348  {
2349  int key =crate*10000000+slot*100000+ring*1000+addr;
2350 
2351  TmCcu *ccu = ccuMap[key];
2352 
2353  if(ccu!=0){
2354  ccu->red=red; ccu->green=green; ccu->blue=blue;
2355  return;
2356  }
2357  std::cout << "*** error in FecTrackerMap fillc method ***";
2358 }
2359 
2360 void TrackerMap::fill_fec_channel(int crate,int slot, int ring, int addr, float qty )
2361 {
2362  int key =crate*10000000+slot*100000+ring*1000+addr;
2363  TmCcu *ccu = ccuMap[key];
2364  if(ccu!=0){
2365  ccu->count++; ccu->value=ccu->value+qty;
2366  return;
2367 
2368  }
2369 
2370  std::cout << "*** error in FecTrackerMap fill by module method ***";
2371  }
2372 
2373 
2374 
2375 void TrackerMap::fillc_lv_channel(int rack,int crate, int board, int red, int green, int blue )
2376 {
2377 
2378  int key = rack*1000+crate*100+board;
2379 
2380  TmPsu *psu = psuMap[key];
2381 
2382  if(psu!=0){
2383  psu->red=red; psu->green=green; psu->blue=blue;
2384  return;
2385  }
2386  std::cout << "*** error in LVTrackerMap fillc method ***";
2387 }
2388 
2389 void TrackerMap::fill_lv_channel(int rack,int crate, int board, float qty )
2390 {
2391  int key = rack*1000+crate*100+board;
2392  TmPsu *psu = psuMap[key];
2393  if(psu!=0){
2394  psu->count++; psu->value=psu->value+qty;
2395  return;
2396 
2397  }
2398 
2399  std::cout << "*** error in LVTrackerMap fill by module method ***";
2400  }
2401 
2402 void TrackerMap::fillc_hv_channel2(int rack,int crate, int board, int red, int green, int blue )
2403 {
2404 
2405  int key = rack*1000+crate*100+board;
2406 
2407  TmPsu *psu = psuMap[key];
2408 
2409  if(psu!=0){
2410  psu->redHV2=red; psu->greenHV2=green; psu->blueHV2=blue;
2411  return;
2412  }
2413  std::cout << "*** error in HVTrackerMap (channel 2) fillc method ***";
2414 }
2415 void TrackerMap::fillc_hv_channel3(int rack,int crate, int board, int red, int green, int blue )
2416 {
2417 
2418  int key = rack*1000+crate*100+board;
2419 
2420  TmPsu *psu = psuMap[key];
2421 
2422  if(psu!=0){
2423  psu->redHV3=red; psu->greenHV3=green; psu->blueHV3=blue;
2424  return;
2425  }
2426  std::cout << "*** error in HVTrackerMap (channel 3) fillc method ***";
2427 }
2428 
2429 
2430 void TrackerMap::fill_hv_channel2(int rack,int crate, int board, float qty )
2431 {
2432  int key = rack*1000+crate*100+board;
2433  TmPsu *psu = psuMap[key];
2434  if(psu!=0){
2435  psu->countHV2++; psu->valueHV2=psu->valueHV2+qty;
2436  return;
2437 
2438  }
2439 
2440  std::cout << "*** error in HVTrackerMap fill by module method ***";
2441  }
2442 void TrackerMap::fill_hv_channel3(int rack,int crate, int board, float qty )
2443 {
2444  int key = rack*1000+crate*100+board;
2445  TmPsu *psu = psuMap[key];
2446  if(psu!=0){
2447  psu->countHV3++; psu->valueHV3=psu->valueHV3+qty;
2448  return;
2449 
2450  }
2451 
2452  std::cout << "*** error in HVTrackerMap fill by module method ***";
2453  }
2454 
2455 
2456 
2457 
2458 
2459 int TrackerMap::module(int fedId, int fedCh)
2460 {
2461  int key = fedId*1000+fedCh;
2462  TmApvPair* apvpair = apvMap[key];
2463  if(apvpair!=0){
2464  return(apvpair->mod->idex);
2465  }
2466  return(0);
2467  std::cout << "*** error in FedTrackerMap module method ***";
2468 }
2469 void TrackerMap::fill_fed_channel(int fedId, int fedCh, float qty )
2470 {
2471  int key = fedId*1000+fedCh;
2472  TmApvPair* apvpair = apvMap[key];
2473  if(apvpair!=0){
2474  apvpair->value=apvpair->value+qty;
2475  apvpair->count++;
2476  return;
2477  }
2478  std::cout << "*** error inFedTrackerMap fill method ***";
2479 }
2480 
2481 
2482 void TrackerMap::fillc(int idmod, int red, int green, int blue ){
2483 
2484  TmModule * mod = imoduleMap[idmod];
2485  if(mod!=0){
2486  mod->red=red; mod->green=green; mod->blue=blue;
2487  return;
2488  }
2489  std::cout << "**************************error in fill method **************module "<<idmod<<std::endl;
2490 }
2491 void TrackerMap::fillc(int layer, int ring, int nmod, int red, int green, int blue ){
2492 
2493  int key = layer*10000+ring*1000+nmod;
2494  TmModule * mod = smoduleMap[key];
2495 
2496  if(mod!=0){
2497  mod->red=red; mod->green=green; mod->blue=blue;
2498  return;
2499  }
2500  std::cout << "**************************error in fill method **************"<< std::endl;
2501 }
2502 
2504 
2505  std::map<const int , TmModule *>::iterator imod;
2506  for( imod=imoduleMap.begin();imod !=imoduleMap.end(); imod++){
2507  fillc(imod->first,255,255,255);
2508  }
2509 }
2510 
2512 
2513  std::map<const int , TmModule *>::iterator imod;
2514  for( imod=imoduleMap.begin();imod !=imoduleMap.end(); imod++){
2515  fill_current_val(imod->first,0);
2516  }
2517 }
2518 
2519 
2520 
2521 void TrackerMap::fill_current_val(int idmod, float current_val ){
2522 
2523  TmModule * mod = imoduleMap[idmod];
2524  if(mod!=0) {mod->value=current_val; mod->count=1; mod->red=-1;}
2525  else std::cout << "**error in fill_current_val method ***module "<<idmod<<std::endl;
2526 }
2527 
2528 void TrackerMap::fill(int idmod, float qty ){
2529 
2530  TmModule * mod = imoduleMap[idmod];
2531  if(mod!=0){
2532  mod->value=mod->value+qty;
2533  mod->count++;
2534  return;
2535  }else{
2536  TmModule * mod1 = imoduleMap[idmod+1];
2537  TmModule * mod2 = imoduleMap[idmod+2];
2538  if(mod1!=0 && mod2!=0){
2539  mod1->value=mod1->value+qty;
2540  mod1->count++;
2541  mod2->value=mod2->value+qty;
2542  mod2->count++;
2543  return;
2544  }}
2545  std::cout << "**************************error in fill method **************module "<<idmod<<std::endl;
2546 }
2547 
2548 void TrackerMap::fill(int layer, int ring, int nmod, float qty){
2549 
2550  int key = layer*100000+ring*1000+nmod;
2551  TmModule * mod = smoduleMap[key];
2552  if(mod!=0){
2553  mod->value=mod->value+qty;
2554  mod->count++;
2555  }
2556  else std::cout << "**************************error in SvgModuleMap **************";
2557 }
2558 
2559 void TrackerMap::setText(int idmod, std::string s){
2560 
2561  TmModule * mod = imoduleMap[idmod];
2562  if(mod!=0){
2563  mod->text=s;
2564  }
2565  else std::cout << "**************************error in IdModuleMap **************";
2566 }
2567 
2568 
2569 void TrackerMap::setText(int layer, int ring, int nmod, std::string s){
2570 
2571  int key = layer*100000+ring*1000+nmod;
2572  TmModule * mod = smoduleMap[key];
2573  if(mod!=0){
2574  mod->text=s;
2575  }
2576  else std::cout << "**************************error in SvgModuleMap **************";
2577 }
2578 
2580  // ifstream* infile;
2581 
2582  int nmods, pix_sil, fow_bar, ring, nmod, layer;
2583  unsigned int idex;
2584  float posx, posy, posz, length, width, thickness, widthAtHalfLength;
2585  int iModule=0,old_layer=0, ntotMod =0;
2586  std::string name,dummys;
2587  ifstream infile(edm::FileInPath(infilename).fullPath().c_str(),std::ios::in);
2588  while(!infile.eof()) {
2589  infile >> nmods >> pix_sil >> fow_bar >> layer >> ring >> nmod >> posx >> posy
2590  >> posz>> length >> width >> thickness
2591  >> widthAtHalfLength >> idex ;
2592  getline(infile,dummys); //necessary to reach end of record
2593  getline(infile,name);
2594  if(old_layer!=layer){old_layer=layer;iModule=0;}
2595  iModule++;
2596  ntotMod++;
2597  int key=layer*100000+ring*1000+nmod;
2598  TmModule * mod = smoduleMap[key];
2599 
2600  imoduleMap[idex]=mod;
2601 
2602  if(mod==0) std::cout << "error in module "<<key <<std::endl;
2603  else
2604  {
2605  mod->posx = posx;
2606  mod->posy = posy;
2607  mod->setUsed();
2608  mod->value=0;
2609  mod->count=0;
2610  mod->posz = posz;
2611  mod->length = length;
2612  mod->width = width;
2613  mod->thickness = thickness;
2614  mod->widthAtHalfLength = widthAtHalfLength;
2615  mod->idex = idex;
2616  mod->name = name;
2617  }
2618  }
2619  infile.close();
2620  number_modules = ntotMod-1;
2621 }
2622 int TrackerMap::getcolor(float value,int palette){
2623  int red,green,blue;
2624  red=0;green=0;blue=0;
2625  if(palette==1){//palette1 1 - raibow
2626  float delta=(maxvalue-minvalue);
2627  float x =(value-minvalue);
2628  if(value<minvalue){red=0;green=0;blue=255;}
2629  if(value>maxvalue){red=255;green=0;blue=0;}
2630  if(value>=minvalue&&value<=maxvalue){
2631  red = (int) ( x<(delta/2) ? 0 : ( x > ((3./4.)*delta) ? 255 : 255/(delta/4) * (x-(2./4.)*delta) ) );
2632  green= (int) ( x<delta/4 ? (x*255/(delta/4)) : ( x > ((3./4.)*delta) ? 255-255/(delta/4) *(x-(3./4.)*delta) : 255 ) );
2633  blue = (int) ( x<delta/4 ? 255 : ( x > ((1./2.)*delta) ? 0 : 255-255/(delta/4) * (x-(1./4.)*delta) ) );
2634  }
2635  }
2636  if (palette==2){//palette 2 yellow-green
2637  green = (int)((value-minvalue)/(maxvalue-minvalue)*256.);
2638  if (green > 255) green=255;
2639  red = 255; blue=0;green=255-green;
2640  }
2641  return(blue|(green<<8)|(red<<16));
2642 }
2644 //Copy interface
2645  std::ofstream * ofilename;
2646  std::ifstream * ifilename;
2647  std::ostringstream ofname;
2648  std::string ifname;
2649  std::string command;
2650  std::string line;
2651  std::string outputfilename="dqmtmap";
2652  ifilename=findfile("viewerHeader.xhtml");
2653  ofname << outputfilename << "viewer.html";
2654  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2655  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2656 *ofilename <<" var tmapname=\"" <<outputfilename << "\""<<std::endl;
2657 *ofilename <<" var tmaptitle=\"" <<title << "\""<<std::endl;
2658 *ofilename <<" var ncrates=" <<ncrates << ";"<<std::endl;
2659 *ofilename <<" var nfeccrates=" <<nfeccrates << ";"<<std::endl;
2660  *ofilename <<" var npsuracks=" <<npsuracks << ";"<<std::endl;
2661 
2662  ifilename->close();delete ifilename;
2663 
2664  ifilename=findfile("viewerTrailer.xhtml");
2665  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2666  ofilename->close();delete ofilename;
2667  command = "sed -i \"s/XtmapnameX/"+outputfilename+"/g\" "+ ofname.str();
2668  std::cout << "Executing " << command << std::endl;
2669  system(command.c_str());
2670  command = "sed -i \"s/XtmaptitleX/"+title+"/g\" "+ ofname.str();
2671  std::cout << "Executing " << command << std::endl;
2672  system(command.c_str());
2673  ofname.str("");
2674  ifilename->close();delete ifilename;
2675 
2676  ifilename=findfile("jqviewer.js");
2677  ofname << "jqviewer.js";
2678  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2679  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2680  ofname.str("");
2681  ofilename->close();delete ofilename;
2682  ifilename->close();delete ifilename;
2683 
2684  ifilename=findfile("crate.js");
2685  ofname << "crate.js";
2686  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2687  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2688  ofname.str("");
2689  ofilename->close();delete ofilename;
2690  ifilename->close();delete ifilename;
2691 
2692  ifilename=findfile("feccrate.js");
2693  ofname << "feccrate.js";
2694  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2695  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2696  ofname.str("");
2697  ofilename->close();delete ofilename;
2698  ifilename->close();delete ifilename;
2699 
2700  ifilename=findfile("layer.js");
2701  ofname << "layer.js";
2702  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2703  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2704  ofname.str("");
2705  ofilename->close();delete ofilename;
2706  ifilename->close();delete ifilename;
2707 
2708  ifilename=findfile("rack.js");
2709  ofname << "rack.js";
2710  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2711  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2712  ofname.str("");
2713  ofilename->close();delete ofilename;
2714  ifilename->close();delete ifilename;
2715  ofname.str("");
2716 
2717  ifilename=findfile("rackhv.js");
2718  ofname << "rackhv.js";
2719  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2720  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2721  ofname.str("");
2722  ofilename->close();delete ofilename;
2723  ifilename->close();delete ifilename;
2724 
2725 
2726 
2727 
2728  std::ostringstream outs,outs1,outs2;
2729  outs << outputfilename<<".png";
2730 save(true,gminvalue,gmaxvalue,outs.str(),3000,1600);
2731 temporary_file=false;
2732 printlayers(true,gminvalue,gmaxvalue,outputfilename);
2733 
2734 //Now print a text file for each layer
2735  std::ofstream * txtfile;
2736 for (int layer=1; layer < 44; layer++){
2737  std::ostringstream outs;
2738  outs << outputfilename <<"layer"<<layer<< ".html";
2739  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2740  *txtfile << "<html><head></head> <body>" << std::endl;
2741  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
2742  for (int module=1;module<200;module++) {
2743  int key=layer*100000+ring*1000+module;
2744  TmModule * mod = smoduleMap[key];
2745  if(mod !=0 && !mod->notInUse()){
2746  int idmod=mod->idex;
2747  int nchan=0;
2748  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
2749  std::multimap<const int, TmApvPair*>::iterator pos;
2750  for (pos = apvModuleMap.lower_bound(idmod);
2751  pos != apvModuleMap.upper_bound(idmod); ++pos) {
2752  TmApvPair* apvpair = pos->second;
2753  if(apvpair!=0){
2754  nchan++;
2755  *txtfile << apvpair->text << std::endl;
2756  }
2757 
2758  }
2759  *txtfile << "</pre><h3>"<< mod->name<<"</h3>"<<std::endl;
2760  }
2761  }
2762  }
2763  *txtfile << "</body></html>" << std::endl;
2764  txtfile->close();delete txtfile;
2765  }
2767  outs1 << outputfilename<<"fed.png";
2768 save_as_fedtrackermap(true,gminvalue,gmaxvalue,outs1.str(),6000,3200);
2769  outs2 << outputfilename<<".xml";
2770 save_as_fedtrackermap(true,gminvalue,gmaxvalue,outs2.str(),3000,1600);
2771 //And a text file for each crate
2772  std::map<int , int>::iterator i_fed;
2773  std::ofstream * txtfile;
2774  for (int crate=1; crate < (ncrates+1); crate++){
2775  std::ostringstream outs;
2776  outs << outputfilename <<"crate"<<crate<< ".html";
2777  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2778  *txtfile << "<html><head></head> <body>" << std::endl;
2779  for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
2780  if(i_fed->second == crate){
2781  int fedId = i_fed->first;
2782  for (int nconn=0;nconn<96;nconn++){
2783  int key = fedId*1000+nconn;
2784  TmApvPair * apvPair= apvMap[key];
2785  if(apvPair !=0){
2786  int idmod=apvPair->idex;
2787  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
2788  *txtfile << apvPair->text << std::endl;
2789  std::ostringstream outs;
2790  outs << "fedchannel " <<apvPair->getFedId() << "/"<<apvPair->getFedCh()<<" connects to module " << apvPair->mod->idex ;
2791  *txtfile << "</pre><h3>"<< outs.str()<<"</h3>"<<std::endl;
2792  }
2793  }
2794  }
2795  }
2796  *txtfile << "</body></html>" << std::endl;
2797  txtfile->close();delete txtfile;
2798  }
2799  }
2801  std::ostringstream outs1,outs2;
2802  outs1 << outputfilename<<"fec.png";
2803 save_as_fectrackermap(true,gminvalue,gmaxvalue,outs1.str(),6000,3200);
2804  outs2 << outputfilename<<".xml";
2805 save_as_fectrackermap(true,gminvalue,gmaxvalue,outs2.str(),3000,1600);
2806 //And a text file for each crate
2807  std::ofstream * txtfile;
2808  std::map<int , TmCcu *>::iterator i_ccu;
2809  std::multimap<TmCcu*, TmModule*>::iterator it;
2810  std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
2811  for (int crate=1; crate < (nfeccrates+1); crate++){
2812  std::ostringstream outs;
2813  outs << outputfilename <<"feccrate"<<crate<< ".html";
2814  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2815  *txtfile << "<html><head></head> <body>" << std::endl;
2816  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
2817  TmCcu * ccu= i_ccu->second;
2818  if(ccu!=0&&ccu->getCcuCrate() == crate){
2819  int idmod=ccu->idex;
2820  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
2821  *txtfile << ccu->text << std::endl;
2822  std::ostringstream outs;
2823  if(ccu->nmod==0)outs << "ccu is in position" << ccu->mpos<<"in ring but doesn't seem to have any module connected"; else
2824  {
2825  outs << "ccu is in position " << ccu->mpos<<" in ring and connects " <<ccu->nmod<< " modules" << std::endl;
2826  ret = fecModuleMap.equal_range(ccu);
2827  for (it = ret.first; it != ret.second; ++it)
2828  {
2829  outs << (*it).second->idex<<" " << (*it).second->name <<" value= "<< (*it).second->value<<"\n\n";
2830  }
2831 
2832  *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
2833  }//ifccu->nmod==0
2834  }//if ccu!=0
2835  }//for i_ccu
2836  *txtfile << "</body></html>" << std::endl;
2837  txtfile->close();delete txtfile;
2838  }//for int crate
2839  }
2840 if(enableLVProcessing){
2841  std::ostringstream outs3,outs4;
2842  outs3 << outputfilename<<"psu.png";
2843 save_as_psutrackermap(true,gminvalue,gmaxvalue,outs3.str(),6000,3200);
2844 
2845  outs4 << outputfilename<<".xml";
2846 save_as_psutrackermap(true,gminvalue,gmaxvalue,outs4.str(),3000,1600);
2847 //And a text file for each rack
2848 
2849  std::ofstream * txtfile;
2850  std::map<int , TmPsu *>::iterator ipsu;
2851  std::multimap<TmPsu*, TmModule*>::iterator it;
2852  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
2853  for (int rack=1; rack < (npsuracks+1); rack++){
2854  std::ostringstream outs;
2855 
2856  outs << outputfilename <<"psurack"<<rack<< ".html";
2857  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2858  *txtfile << "<html><head></head> <body>" << std::endl;
2859  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
2860  TmPsu * psu= ipsu->second;
2861  if(psu!=0 && psu->getPsuRack() == rack){
2862  *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
2863  *txtfile << psu->text << std::endl;
2864  std::ostringstream outs;
2865  if(psu->nmod==0)outs << "Ps is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
2866  {
2867  outs<< "PS is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmod<<" modules. "<<std::endl;
2868 
2869  ret = psuModuleMap.equal_range(psu);
2870  for (it = ret.first; it != ret.second; ++it)
2871  {
2872  outs <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;
2873 
2874  }
2875  *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
2876  }
2877  }
2878  }
2879  *txtfile << "</body></html>" << std::endl;
2880  txtfile->close();delete txtfile;
2881  }
2882  }
2883 
2884 
2885 if(enableHVProcessing){
2886  std::ostringstream outs5,outs6;
2887  outs5 << outputfilename<<"hv.png";
2888 save_as_HVtrackermap(true,gminvalue,gmaxvalue,outs5.str(),6000,3200);
2889 
2890  outs6 << outputfilename<<".xml";
2891 save_as_HVtrackermap(true,gminvalue,gmaxvalue,outs6.str(),3000,1600);
2892 //And a text file for each rack
2893 
2894  std::ofstream * txtfile;
2895  std::map<int , TmPsu *>::iterator ipsu;
2896  std::multimap<TmPsu*, TmModule*>::iterator it;
2897  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
2898  for (int rack=1; rack < (npsuracks+1); rack++){
2899  std::ostringstream outs;
2900 
2901  outs << outputfilename <<"HVrack"<<rack<< ".html";
2902  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
2903  *txtfile << "<html><head></head> <body>" << std::endl;
2904  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
2905  TmPsu * psu= ipsu->second;
2906  if(psu!=0 && psu->getPsuRack() == rack){
2907  *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
2908  *txtfile << psu->textHV2 << std::endl;
2909  std::ostringstream outsHV2;
2910  if(psu->nmodHV2==0)outsHV2 << "HV Channel002 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
2911  {
2912  outsHV2<< "HV Channel002 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV2<<" modules. "<<" <br>"<<std::endl;
2913 
2914  ret = psuModuleMap.equal_range(psu);
2915  for (it = ret.first; it != ret.second; ++it)
2916  {
2917  if((*it).second->HVchannel==2){outsHV2 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
2918  }
2919  *txtfile << "</pre><h4>"<< outsHV2.str()<<"</h4>"<<std::endl;
2920  }
2921 
2922  *txtfile << psu->textHV3 << std::endl;
2923  std::ostringstream outsHV3;
2924  if(psu->nmodHV3==0)outsHV3 << "HV Channel003 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
2925  {
2926  outsHV3<< "HV Channel003 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV3<<" modules. "<<" <br>"<<std::endl;
2927 
2928  ret = psuModuleMap.equal_range(psu);
2929  for (it = ret.first; it != ret.second; ++it)
2930  {
2931  if((*it).second->HVchannel==3){outsHV3 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
2932  }
2933  *txtfile << "</pre><h4>"<< outsHV3.str()<<"</h4>"<<std::endl;
2934  }
2935 
2936  }
2937  }
2938  *txtfile << "</body></html>" << std::endl;
2939  txtfile->close();delete txtfile;
2940  }
2941  }
2942 
2943 }
2944 void TrackerMap::printall(bool print_total, float minval, float maxval, std::string outputfilename){
2945 //Copy interface
2946  std::ofstream * ofilename;
2947  std::ifstream * ifilename;
2948  std::ostringstream ofname;
2949  std::string ifname;
2950  std::string line;
2951  std::string command;
2952 
2953  ifilename=findfile("viewerHeader.xhtml");
2954  ofname << outputfilename << "viewer.html";
2955  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2956  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2957 *ofilename <<" var tmapname=\"" <<outputfilename << "\""<<std::endl;
2958 *ofilename <<" var tmaptitle=\"" <<title << "\""<<std::endl;
2959 *ofilename <<" var ncrates=" <<ncrates << ";"<<std::endl;
2960 *ofilename <<" var nfeccrates=" <<nfeccrates << ";"<<std::endl;
2961 *ofilename <<" var npsuracks=" <<npsuracks << ";"<<std::endl;
2962  ifilename->close();delete ifilename;
2963  ifilename=findfile("viewerTrailer.xhtml");
2964  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2965  ofilename->close();delete ofilename;
2966  ifilename->close();delete ifilename;
2967  command = "sed -i \"s/XtmapnameX/"+outputfilename+"/g\" "+ ofname.str();
2968  std::cout << "Executing " << command << std::endl;
2969  system(command.c_str());
2970  command = "sed -i \"s/XtmaptitleX/"+title+"/g\" "+ ofname.str();
2971  std::cout << "Executing " << command << std::endl;
2972  system(command.c_str());
2973  ofname.str("");
2974 
2975 ifilename=findfile("jqviewer.js");
2976  ofname << "jqviewer.js";
2977  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2978  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2979  ofilename->close();delete ofilename;
2980  ifilename->close();delete ifilename;
2981 
2982  ofname.str("");
2983  ifilename=findfile("crate.js");
2984  ofname << "crate.js";
2985  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2986  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2987  ofilename->close();delete ofilename;
2988  ifilename->close();delete ifilename;
2989 
2990  ofname.str("");
2991  ifilename=findfile("feccrate.js");
2992  ofname << "feccrate.js";
2993  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
2994  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
2995  ofilename->close();delete ofilename;
2996  ifilename->close();delete ifilename;
2997 
2998  ofname.str("");
2999  ifilename=findfile("rack.js");
3000  ofname << "rack.js";
3001  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
3002  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
3003  ofilename->close();delete ofilename;
3004  ifilename->close();delete ifilename;
3005 
3006  ofname.str("");
3007  ifilename=findfile("rackhv.js");
3008  ofname << "rackhv.js";
3009  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
3010  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
3011  ofilename->close();delete ofilename;
3012  ifilename->close();delete ifilename;
3013 
3014  ofname.str("");
3015  ifilename=findfile("layer.js");
3016  ofname << "layer.js";
3017  ofilename = new std::ofstream(ofname.str().c_str(),std::ios::out);
3018  while (getline( *ifilename, line )) { *ofilename << line << std::endl; }
3019  ofilename->close();delete ofilename;
3020  ifilename->close();delete ifilename;
3021 
3022  command = "scp -r ../../DQM/TrackerCommon/test/jquery/ .";
3023  std::cout << "Executing " << command << std::endl;
3024  system(command.c_str());
3025  command = "scp -r ../../CommonTools/TrackerMap/data/images/ .";
3026  std::cout << "Executing " << command << std::endl;
3027  system(command.c_str());
3028 
3029 
3030  std::ostringstream outs;
3031  outs << outputfilename<<".png";
3032 save(true,minval,maxval,outs.str(),3000,1600);
3033 temporary_file=false;
3034 printlayers(true,minval,maxval,outputfilename);
3035 
3036 //Now print a text file for each layer
3037  std::ofstream * txtfile;
3038 for (int layer=1; layer < 44; layer++){
3039  std::ostringstream outs;
3040  outs << outputfilename <<"layer"<<layer<< ".html";
3041  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3042  *txtfile << "<html><head></head> <body>" << std::endl;
3043  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
3044  for (int module=1;module<200;module++) {
3045  int key=layer*100000+ring*1000+module;
3046  TmModule * mod = smoduleMap[key];
3047  if(mod !=0 && !mod->notInUse()){
3048  int idmod=mod->idex;
3049  int nchan=0;
3050  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
3051  std::multimap<const int, TmApvPair*>::iterator pos;
3052  for (pos = apvModuleMap.lower_bound(idmod);
3053  pos != apvModuleMap.upper_bound(idmod); ++pos) {
3054  TmApvPair* apvpair = pos->second;
3055  if(apvpair!=0){
3056  nchan++;
3057  *txtfile << apvpair->text << std::endl;
3058  }
3059 
3060  }
3061  *txtfile << "</pre><h3>"<< mod->name<<"</h3>"<<std::endl;
3062  }
3063  }
3064  }
3065  *txtfile << "</body></html>" << std::endl;
3066  txtfile->close();delete txtfile;
3067  }
3069  std::ostringstream outs1,outs2;
3070  outs1 << outputfilename<<"fed.png";
3071 save_as_fedtrackermap(true,0.,0.,outs1.str(),6000,3200);
3072  outs2 << outputfilename<<".xml";
3073 save_as_fedtrackermap(true,0.,0.,outs2.str(),3000,1600);
3074 //And a text file for each crate
3075  std::map<int , int>::iterator i_fed;
3076  std::ofstream * txtfile;
3077  for (int crate=1; crate < (ncrates+1); crate++){
3078  std::ostringstream outs;
3079  outs << outputfilename <<"crate"<<crate<< ".html";
3080  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3081  *txtfile << "<html><head></head> <body>" << std::endl;
3082  for (i_fed=fedMap.begin();i_fed != fedMap.end(); i_fed++){
3083  if(i_fed->second == crate){
3084  int fedId = i_fed->first;
3085  for (int nconn=0;nconn<96;nconn++){
3086  int key = fedId*1000+nconn;
3087  TmApvPair * apvPair= apvMap[key];
3088  if(apvPair !=0){
3089  int idmod=apvPair->idex;
3090  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
3091  *txtfile << apvPair->text << std::endl;
3092  std::ostringstream outs;
3093  outs << "fedchannel " <<apvPair->getFedId() << "/"<<apvPair->getFedCh()<<" connects to module " << apvPair->mod->idex ;
3094  *txtfile << "</pre><h3>"<< outs.str()<<"</h3>"<<std::endl;
3095  }
3096  }
3097  }
3098  }
3099  *txtfile << "</body></html>" << std::endl;
3100  txtfile->close();delete txtfile;
3101  }
3102  }
3104  std::ostringstream outs1,outs2;
3105  outs1 << outputfilename<<"fec.png";
3106 save_as_fectrackermap(true,0.,0.,outs1.str(),6000,3200);
3107  outs2 << outputfilename<<".xml";
3108 save_as_fectrackermap(true,0.,0.,outs2.str(),3000,1600);
3109 //And a text file for each crate
3110  std::ofstream * txtfile;
3111  std::map<int , TmCcu *>::iterator i_ccu;
3112  std::multimap<TmCcu*, TmModule*>::iterator it;
3113  std::pair<std::multimap<TmCcu*, TmModule*>::iterator,std::multimap<TmCcu*, TmModule*>::iterator> ret;
3114  for (int crate=1; crate < (nfeccrates+1); crate++){
3115  std::ostringstream outs;
3116  outs << outputfilename <<"feccrate"<<crate<< ".html";
3117  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3118  *txtfile << "<html><head></head> <body>" << std::endl;
3119  for( i_ccu=ccuMap.begin();i_ccu !=ccuMap.end(); i_ccu++){
3120  TmCcu * ccu= i_ccu->second;
3121  if(ccu!=0&&ccu->getCcuCrate() == crate){
3122  int idmod=ccu->idex;
3123  *txtfile << "<a name="<<idmod<<"><pre>"<<std::endl;
3124  *txtfile << ccu->text << std::endl;
3125  std::ostringstream outs;
3126  if(ccu->nmod==0)outs << "ccu is in position" << ccu->mpos<<"in ring but doesn't seem to have any module connected"; else
3127  {
3128  outs << "ccu is in position " << ccu->mpos<<" in ring and connects " <<ccu->nmod<< " modules" << std::endl;
3129  ret = fecModuleMap.equal_range(ccu);
3130  for (it = ret.first; it != ret.second; ++it)
3131  {
3132  outs << (*it).second->idex<<" " << (*it).second->name <<" value= "<< (*it).second->value<<"\n\n";
3133  }
3134 
3135  *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
3136  }//ifccu->nmod==0
3137  }//if ccu!=0
3138  }//for i_ccu
3139  *txtfile << "</body></html>" << std::endl;
3140  txtfile->close();
3141  }//for int crate
3142  }
3143 if(enableLVProcessing){
3144  std::ostringstream outs3,outs4;
3145  outs3 << outputfilename<<"psu.png";
3146 save_as_psutrackermap(true,0.,0.,outs3.str(),6000,3200);
3147 
3148  outs4 << outputfilename<<".xml";
3149 save_as_psutrackermap(true,0.,0.,outs4.str(),3000,1600);
3150 //And a text file for each rack
3151 
3152  std::ofstream * txtfile;
3153  std::map<int , TmPsu *>::iterator ipsu;
3154  std::multimap<TmPsu*, TmModule*>::iterator it;
3155  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
3156  for (int rack=1; rack < (npsuracks+1); rack++){
3157  std::ostringstream outs;
3158 
3159  outs << outputfilename <<"psurack"<<rack<< ".html";
3160  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3161  *txtfile << "<html><head></head> <body>" << std::endl;
3162  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
3163  TmPsu * psu= ipsu->second;
3164  if(psu!=0 && psu->getPsuRack() == rack){
3165  *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
3166  *txtfile << psu->text << std::endl;
3167  std::ostringstream outs;
3168  if(psu->nmod==0)outs << "Ps is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
3169  {
3170  outs<< "PS is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmod<<" modules. "<<std::endl;
3171 
3172  ret = psuModuleMap.equal_range(psu);
3173  for (it = ret.first; it != ret.second; ++it)
3174  {
3175  outs <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;
3176 
3177  }
3178  *txtfile << "</pre><h4>"<< outs.str()<<"</h4>"<<std::endl;
3179  }
3180  }
3181  }
3182  *txtfile << "</body></html>" << std::endl;
3183  txtfile->close();
3184  }
3185  }
3186 
3187 
3188 if(enableHVProcessing){
3189  std::ostringstream outs5,outs6;
3190  outs5 << outputfilename<<"hv.png";
3191 save_as_HVtrackermap(true,0.,0.,outs5.str(),6000,3200);
3192 
3193  outs6 << outputfilename<<".xml";
3194 save_as_HVtrackermap(true,0.,0.,outs6.str(),3000,1600);
3195 //And a text file for each rack
3196 
3197  std::ofstream * txtfile;
3198  std::map<int , TmPsu *>::iterator ipsu;
3199  std::multimap<TmPsu*, TmModule*>::iterator it;
3200  std::pair<std::multimap<TmPsu*, TmModule*>::iterator,std::multimap<TmPsu*, TmModule*>::iterator> ret;
3201  for (int rack=1; rack < (npsuracks+1); rack++){
3202  std::ostringstream outs;
3203 
3204  outs << outputfilename <<"HVrack"<<rack<< ".html";
3205  txtfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3206  *txtfile << "<html><head></head> <body>" << std::endl;
3207  for ( ipsu=psuMap.begin();ipsu !=psuMap.end(); ipsu++){
3208  TmPsu * psu= ipsu->second;
3209  if(psu!=0 && psu->getPsuRack() == rack){
3210  *txtfile << "<a name="<<psu->idex<<"><pre>"<<std::endl;
3211  *txtfile << psu->textHV2 << std::endl;
3212  std::ostringstream outsHV2;
3213  if(psu->nmodHV2==0)outsHV2 << "HV Channel002 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
3214  {
3215  outsHV2<< "HV Channel002 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV2<<" modules. "<<" <br>"<<std::endl;
3216 
3217  ret = psuModuleMap.equal_range(psu);
3218  for (it = ret.first; it != ret.second; ++it)
3219  {
3220  if((*it).second->HVchannel==2){outsHV2 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
3221  }
3222  *txtfile << "</pre><h4>"<< outsHV2.str()<<"</h4>"<<std::endl;
3223  }
3224 
3225  *txtfile << psu->textHV3 << std::endl;
3226  std::ostringstream outsHV3;
3227  if(psu->nmodHV3==0)outsHV3 << "HV Channel003 is in position" << psu->getPsuBoard()<<"in crate but doesn't seem to have any module connected"; else
3228  {
3229  outsHV3<< "HV Channel003 is in position " <<psu->getPsuBoard()<< " in crate and connects to "<<psu->nmodHV3<<" modules. "<<" <br>"<<std::endl;
3230 
3231  ret = psuModuleMap.equal_range(psu);
3232  for (it = ret.first; it != ret.second; ++it)
3233  {
3234  if((*it).second->HVchannel==3){outsHV3 <<(*it).second->idex << " "<< (*it).second->name<<" value= "<<(*it).second->value<<" <br>"<<std::endl;}
3235  }
3236  *txtfile << "</pre><h4>"<< outsHV3.str()<<"</h4>"<<std::endl;
3237  }
3238 
3239  }
3240  }
3241  *txtfile << "</body></html>" << std::endl;
3242  txtfile->close();
3243  }
3244  }
3245 
3246 
3247 }
3248 
3249 
3250 std::ifstream * TrackerMap::findfile(std::string filename) {
3251  std::ifstream * ifilename;
3252  std::string ifname;
3253  if(jsPath!=""){
3254  ifname=jsPath+filename;
3255  ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
3256  if(!ifilename){
3257  ifname="CommonTools/TrackerMap/data/"+filename;
3258  ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
3259  }
3260  }else {
3261  ifname="CommonTools/TrackerMap/data/"+filename;
3262  ifilename = new ifstream(edm::FileInPath(ifname).fullPath().c_str(),std::ios::in);
3263  }
3264  if(!ifilename)std::cout << "File " << filename << " missing" << std::endl;
3265  return ifilename;
3266  }
3267 void TrackerMap::printlayers(bool print_total, float minval, float maxval, std::string outputfilename){
3268  std::ofstream * xmlfile;
3269 saveAsSingleLayer=true;
3270 if(!print_total){
3271  for (int layer=1; layer < 44; layer++){
3272  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
3273  for (int module=1;module<200;module++) {
3274  int key=layer*100000+ring*1000+module;
3275  TmModule * mod = smoduleMap[key];
3276  if(mod !=0 && !mod->notInUse()){
3277  mod->value = mod->value / mod->count;
3278  }
3279  }
3280  }
3281  }
3282  }
3283  if(minvalue>=maxvalue){
3284  minvalue=9999999.;
3285  maxvalue=-9999999.;
3286  for (int layer=1; layer < 44; layer++){
3287  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
3288  for (int module=1;module<200;module++) {
3289  int key=layer*100000+ring*1000+module;
3290  TmModule * mod = smoduleMap[key];
3291  if(mod !=0 && !mod->notInUse()){
3292  if (minvalue > mod->value)minvalue=mod->value;
3293  if (maxvalue < mod->value)maxvalue=mod->value;
3294  }
3295  }
3296  }
3297  }
3298  }
3299 for (int layer=1; layer < 44; layer++){
3300  std::ostringstream outs;
3301  outs << outputfilename <<"layer"<<layer<< ".xml";
3302  xmlfile = new std::ofstream(outs.str().c_str(),std::ios::out);
3303  *xmlfile << "<?xml version=\"1.0\" standalone=\"no\"?>"<<std::endl;
3304  *xmlfile << "<svg xmlns=\"http://www.w3.org/2000/svg\""<<std::endl;
3305  *xmlfile << "xmlns:svg=\"http://www.w3.org/2000/svg\""<<std::endl;
3306  *xmlfile << "xmlns:xlink=\"http://www.w3.org/1999/xlink\" >"<<std::endl;
3307  *xmlfile << "<script type=\"text/ecmascript\" xlink:href=\"layer.js\" />"<<std::endl;
3308  *xmlfile << "<svg id=\"mainMap\" x=\"0\" y=\"0\" viewBox=\"0 0 500 500\" width=\"700\" height=\"700\" onload=\"TrackerLayer.init()\">"<<std::endl;
3309  if(layer<31)*xmlfile << "<g id=\"layer\" transform=\" translate(0,400) rotate(270) scale(1.,1.)\" > "<<std::endl;
3310  else *xmlfile << "<g id=\"layer\" transform=\" translate(0,400) rotate(270) scale(1.,0.8)\" > "<<std::endl;
3311  *xmlfile << "<rect fill=\"lightblue\" stroke=\"none\" x=\"0\" y=\"0\" width=\"700\" height=\"700\" />"<<std::endl;
3312  *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;
3313  *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;
3314  *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;
3315  *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;
3316  *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;
3317 
3318  nlay=layer;
3319  defwindow(nlay);
3320  for (int ring=firstRing[layer-1]; ring < ntotRing[layer-1]+firstRing[layer-1];ring++){
3321  for (int module=1;module<200;module++) {
3322  int key=layer*100000+ring*1000+module;
3323  TmModule * mod = smoduleMap[key];
3324  if(mod !=0 && !mod->notInUse()){
3325  drawModule(mod,key,layer,print_total,xmlfile);
3326  }
3327  }
3328  }
3329  *xmlfile << "</g> </svg> <text id=\"currentElementText\" x=\"40\" y=\"30\">" << std::endl;
3330  *xmlfile << "<tspan id=\"line1\" x=\"40\" y=\"30\"> </tspan> " << std::endl;
3331  *xmlfile << "<tspan id=\"line2\" x=\"40\" y=\"60\"> </tspan> " << std::endl;
3332  *xmlfile << "<tspan id=\"line3\" x=\"40\" y=\"90\"> </tspan> " << std::endl;
3333  *xmlfile << "<tspan id=\"line4\" x=\"40\" y=\"120\"> </tspan> " << std::endl;
3334  if(layer > 33){
3335  *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;
3336  *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;
3337  *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;
3338  *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;
3339  *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;
3340  }
3341  else{
3342  *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;
3343  *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;
3344  *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;
3345  *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;
3346  *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;
3347  }
3348  *xmlfile << " </text> </svg>" << std::endl;
3349  xmlfile->close();delete xmlfile;
3350  }
3351 saveAsSingleLayer=false;
3352 }
TmModule * mod
Definition: TmApvPair.h:16
void drawHV3(int rack, int numcrate_inrack, bool print_total, TmPsu *psu, ofstream *svgfile, bool usePsuValue)
Definition: TrackerMap.cc:1129
void reset()
Definition: TrackerMap.cc:390
dbl * delta
Definition: mlp_gen.cc:36
void fill_hv_channel2(int rack, int crate, int board, float qty)
Definition: TrackerMap.cc:2430
std::string text
Definition: TmApvPair.h:12
T getUntrackedParameter(std::string const &, T const &) const
int getPsuBranch()
Definition: TmPsu.h:14
int i
Definition: DBlmapReader.cc:9
void build()
Definition: TrackerMap.cc:2579
float minvalue
Definition: TrackerMap.h:442
TrackerMap(std::string s=" ", int xsize1=340, int ysize1=200)
Definition: TrackerMap.cc:379
ModApvPair apvModuleMap
Definition: TrackerMap.h:89
double ydpixelc(double y)
Definition: TrackerMap.h:200
std::ifstream * findfile(std::string filename)
Definition: TrackerMap.cc:3250
int nfeccrates
Definition: TrackerMap.h:430
int redHV2
Definition: TmPsu.h:21
void fillc_all_blank()
Definition: TrackerMap.cc:2503
double ydpixelfec(double y)
Definition: TrackerMap.h:214
int getmoduleCount(int subdet, int partdet, int layer, int ring)
Definition: TrackerMap.h:349
float value
Definition: TmModule.h:12
MapCcu ccuMap
Definition: TrackerMap.h:93
int green
Definition: TmApvPair.h:10
int mpos
Definition: TmApvPair.h:17
std::string cmodid_HV2
Definition: TmPsu.h:33
void save_as_psutrackermap(bool print_total=true, float minval=0., float maxval=0., std::string s="psu_svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:1700
int nmodHV3
Definition: TmPsu.h:31
void fillc_hv_channel2(int rack, int crate, int board, int red, int green, int blue)
Definition: TrackerMap.cc:2402
SmoduleMap smoduleMap
Definition: TrackerMap.h:83
std::ifstream * inputfile
Definition: TrackerMap.h:439
std::ofstream * savefile
Definition: TrackerMap.h:437
void setUsed()
Definition: TmModule.h:25
bool psetAvailable
Definition: TrackerMap.h:111
int count
Definition: TmPsu.h:26
int idex
Definition: TmPsu.h:11
~TrackerMap()
default destructor
Definition: TrackerMap.cc:448
std::string cmodid
Definition: TmCcu.h:16
static const uint32_t invalid32_
Definition: Constants.h:16
int countHV2
Definition: TmPsu.h:27
void drawPsu(int rack, int numcrate_inrack, bool print_total, TmPsu *psu, ofstream *svgfile, bool usePsuValue)
Definition: TrackerMap.cc:996
int module(int fedId, int fedCh)
Definition: TrackerMap.cc:2459
bool enableFecProcessing
Definition: TrackerMap.h:103
int layer
Definition: TmCcu.h:17
void defwindow(int num_lay)
Definition: TrackerMap.h:273
int idModule
Definition: TmModule.h:26
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
void save_as_HVtrackermap(bool print_total=true, float minval=0., float maxval=0., std::string s="psu_svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:1435
float posz
Definition: TmModule.h:9
int getCcuRing()
Definition: TmCcu.h:21
double xdpixelc(double x)
Definition: TrackerMap.h:194
void defpsuwindow(int num_rack)
Definition: TrackerMap.h:256
bool addPixelFlag
Definition: TrackerMap.h:450
int number_modules
Definition: TrackerMap.h:443
std::string infilename
Definition: TrackerMap.h:109
int getlayerCount(int subdet, int partdet)
Definition: TrackerMap.h:152
bool exists(std::string const &parameterName) const
checks if a parameter exists
int npsuracks
Definition: TrackerMap.h:431
std::vector< Color_t > colors
Definition: eve_filter.cc:26
void fill_current_val_fed_channel(int fedId, int fedCh, float current_val)
Definition: TrackerMap.cc:2336
const std::vector< SiStripFecCrate > & crates() const
float value
Definition: TmPsu.h:23
int getPsuBoard()
Definition: TmPsu.h:17
int red
Definition: TmPsu.h:20
int greenHV3
Definition: TmPsu.h:22
bool enableFedProcessing
Definition: TrackerMap.h:102
#define min(a, b)
Definition: mlp_lapack.h:161
int layer
Definition: TmModule.h:28
ImoduleMap imoduleMap
Definition: TrackerMap.h:85
int count
Definition: TmCcu.h:12
int firstRing[43]
Definition: TrackerMap.h:423
float gminvalue
Definition: TrackerMap.h:441
int nmod
Definition: TmCcu.h:15
void fillc_fec_channel(int crate, int slot, int ring, int addr, int red, int green, int blue)
Definition: TrackerMap.cc:2347
float posx
Definition: TmModule.h:9
std::string jsPath
Definition: TrackerMap.h:110
bool enableHVProcessing
Definition: TrackerMap.h:105
double xdpixelfec(double x)
Definition: TrackerMap.h:208
bool posrel
Definition: TrackerMap.h:434
int getFedId()
Definition: TmApvPair.h:19
int getPsuDcs()
Definition: TmPsu.h:13
int getCcuSlot()
Definition: TmCcu.h:20
int red
Definition: TmApvPair.h:10
double phival(double x, double y)
Definition: TrackerMap.h:112
void fill_all_blank()
Definition: TrackerMap.cc:2511
void fillc_lv_channel(int rack, int crate, int board, int red, int green, int blue)
Definition: TrackerMap.cc:2375
unsigned int idex
Definition: TmModule.h:29
int getringCount(int subdet, int partdet, int layer)
Definition: TrackerMap.h:316
double xdpixelpsu(double x)
Definition: TrackerMap.h:222
int nmod
Definition: TmPsu.h:29
const T & max(const T &a, const T &b)
int nchan
Definition: TauolaWrapper.h:80
std::string text
Definition: TmModule.h:14
float posy
Definition: TmModule.h:9
std::string PsuId
Definition: TmModule.h:18
T sqrt(T t)
Definition: SSEVec.h:28
void save(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:632
void drawHV2(int rack, int numcrate_inrack, bool print_total, TmPsu *psu, ofstream *svgfile, bool usePsuValue)
Definition: TrackerMap.cc:1062
bool saveAsSingleLayer
Definition: TrackerMap.h:449
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int blueHV3
Definition: TmPsu.h:22
void deffecwindow(int num_crate)
Definition: TrackerMap.h:247
int j
Definition: DBlmapReader.cc:9
bool temporary_file
Definition: TrackerMap.h:444
void drawPalette(std::ofstream *file)
Definition: TrackerMap.cc:2276
std::ofstream * svgfile
Definition: TrackerMap.h:436
void load(std::string s="tmap.svg")
Definition: TrackerMap.cc:2174
int greenHV2
Definition: TmPsu.h:21
int getCcuCrate()
Definition: TmCcu.h:19
int green
Definition: TmCcu.h:9
int getPsuRack()
Definition: TmPsu.h:15
int nmodHV2
Definition: TmPsu.h:30
double ydpixel(double y)
Definition: TrackerMap.h:180
void drawModule(TmModule *mod, int key, int layer, bool total, std::ofstream *file)
Definition: TrackerMap.cc:495
int green
Definition: TmPsu.h:20
int blue
Definition: TmApvPair.h:10
void drawApvPair(int crate, int numfed_incrate, bool total, TmApvPair *apvPair, std::ofstream *file, bool useApvPairValue)
Definition: TrackerMap.cc:847
void init()
Definition: TrackerMap.cc:398
void fillc_fed_channel(int fedId, int fedCh, int red, int green, int blue)
Definition: TrackerMap.cc:2309
int getcolor(float value, int palette)
Definition: TrackerMap.cc:2622
int count
Definition: TmModule.h:13
float width
Definition: TmModule.h:10
std::string psId
Definition: TmPsu.h:12
void fillc(int idmod, int RGBcode)
Definition: TrackerMap.h:48
void printlayers(bool print_total=true, float minval=0., float maxval=0., std::string s="layer")
Definition: TrackerMap.cc:3267
int psuIdex
Definition: TmModule.h:19
int k[5][pyjets_maxn]
tuple out
Definition: dbtoconf.py:99
int mpos
Definition: TmCcu.h:18
int redHV3
Definition: TmPsu.h:22
std::string capvids
Definition: TmModule.h:16
void drawCcu(int crate, int numfed_incrate, bool total, TmCcu *ccu, std::ofstream *file, bool useCcuValue)
Definition: TrackerMap.cc:931
short int HVchannel
Definition: TmModule.h:20
float widthAtHalfLength
Definition: TmModule.h:10
int getKey()
Definition: TmModule.h:23
#define M_PI
Definition: BFit3D.cc:3
int green
Definition: TmModule.h:11
int CcuId
Definition: TmModule.h:17
int count
Definition: TmApvPair.h:13
SvgFed fedMap
Definition: TrackerMap.h:91
PsuModule psuModuleMap
Definition: TrackerMap.h:99
float value
Definition: TmCcu.h:10
std::string cmodid_HV3
Definition: TmPsu.h:34
void fill_hv_channel3(int rack, int crate, int board, float qty)
Definition: TrackerMap.cc:2442
float thickness
Definition: TmModule.h:10
float valueHV2
Definition: TmPsu.h:25
tuple branchinfo
Definition: dataDML.py:1278
bool printflag
Definition: TrackerMap.h:101
static const uint16_t invalid_
Definition: Constants.h:17
int crate
Definition: TmApvPair.h:15
FecModule fecModuleMap
Definition: TrackerMap.h:95
bool notInUse()
Definition: TmModule.h:24
int red
Definition: TmModule.h:11
int blue
Definition: TmModule.h:11
std::string title
Definition: TrackerMap.h:108
double xdpixel(double x)
Definition: TrackerMap.h:174
int idex
Definition: TmCcu.h:13
void printonline()
Definition: TrackerMap.cc:2643
int nlayer(int det, int part, int lay)
Definition: TrackerMap.h:393
list key
Definition: combine.py:13
std::string textHV3
Definition: TmPsu.h:37
int red
Definition: TmCcu.h:9
list infile
Definition: EdgesToViz.py:90
SvgApvPair apvMap
Definition: TrackerMap.h:87
void print(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap")
Definition: TrackerMap.cc:2209
tuple filename
Definition: lut2db_cfg.py:20
std::string text
Definition: TmPsu.h:35
void save_as_fedtrackermap(bool print_total=true, float minval=0., float maxval=0., std::string s="fed_svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:1949
int countHV3
Definition: TmPsu.h:28
void fill_fec_channel(int crate, int slot, int ring, int addr, float qty)
Definition: TrackerMap.cc:2360
float gmaxvalue
Definition: TrackerMap.h:441
int idex
Definition: TmApvPair.h:14
void fill_current_val(int idmod, float current_val)
Definition: TrackerMap.cc:2521
float maxvalue
Definition: TrackerMap.h:442
tuple cout
Definition: gather_cfg.py:41
std::string cmodid_LV
Definition: TmPsu.h:32
float valueHV3
Definition: TmPsu.h:24
void setText(int idmod, std::string s)
Definition: TrackerMap.cc:2559
string s
Definition: asciidump.py:422
int blue
Definition: TmCcu.h:9
bool enableLVProcessing
Definition: TrackerMap.h:104
bool firstcall
Definition: TrackerMap.h:435
Definition: DDAxes.h:10
std::string textHV2
Definition: TmPsu.h:36
int blue
Definition: TmPsu.h:20
MapPsu psuMap
Definition: TrackerMap.h:97
static bool isRingStereo(int key)
Definition: TrackerMap.h:384
Definition: TmCcu.h:5
int blueHV2
Definition: TmPsu.h:21
void defcwindow(int num_crate)
Definition: TrackerMap.h:237
std::ifstream * jsfile
Definition: TrackerMap.h:438
int ring
Definition: TmModule.h:27
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
std::string text
Definition: TmCcu.h:11
Definition: TmPsu.h:6
float length
Definition: TmModule.h:10
Definition: vlib.h:209
void fill_lv_channel(int rack, int crate, int board, float qty)
Definition: TrackerMap.cc:2389
std::vector< TColor * > vc
Definition: TrackerMap.h:80
float value
Definition: TmApvPair.h:11
void fill(int layer, int ring, int nmod, float x)
Definition: TrackerMap.cc:2548
double ydpixelpsu(double y)
Definition: TrackerMap.h:228
void save_as_fectrackermap(bool print_total=true, float minval=0., float maxval=0., std::string s="fec_svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:1194
std::string name
Definition: TmModule.h:15
void printall(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap")
Definition: TrackerMap.cc:2944
void fill_fed_channel(int fedId, int fedCh, float qty)
Definition: TrackerMap.cc:2469
int getFedCh()
Definition: TmApvPair.h:18
void fillc_hv_channel3(int rack, int crate, int board, int red, int green, int blue)
Definition: TrackerMap.cc:2415
int ntotRing[43]
Definition: TrackerMap.h:422
int getPsuCrate()
Definition: TmPsu.h:16
Definition: DDAxes.h:10
std::string jsfilename
Definition: TrackerMap.h:109