1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 Revision 1.22 2002/10/22 14:45:44 alibrary
19 Introducing Riostream.h
21 Revision 1.21 2002/10/14 14:57:08 hristov
22 Merging the VirtualMC branch to the main development branch (HEAD)
24 Revision 1.15.4.3 2002/10/14 13:14:08 hristov
25 Updating VirtualMC to v3-09-02
27 Revision 1.20 2002/09/11 10:32:41 hristov
28 Use new for arrays with variable size
30 Revision 1.19 2002/09/09 17:23:28 nilsen
31 Minor changes in support of changes to AliITSdigitS?D class'.
33 Revision 1.18 2002/08/21 22:11:13 nilsen
34 Debug output now settable via a DEBUG flag.
36 Revision 1.17 2002/07/16 17:00:17 barbera
37 Fixes added to make the slow simulation running with the current HEAD (from M. Masera)
39 Revision 1.16 2002/06/19 16:02:22 hristov
40 Division by zero corrected
42 Revision 1.15 2002/03/15 17:32:14 nilsen
43 Reintroduced SDigitization, and Digitization from SDigits, along with
44 functions InitSimulationModule, and FinishSDigitizModule.
46 Revision 1.14 2001/11/23 13:04:07 barbera
47 Some protection added in case of high multiplicity
49 Revision 1.13 2001/11/13 11:13:24 barbera
50 A protection against tracks with the same entrance and exit has been made more strict
52 Revision 1.12 2001/10/04 22:44:31 nilsen
53 Major changes in supppor of PreDigits (SDigits). Changes made with will make
54 it easier to suppor expected changes in AliITSHit class. Added use of new
55 class AliITSpList. Both SPD and SDD have added effects of Dead Channels. Both
56 of these will require addtional work as data bases of detectors and the like
60 #include <Riostream.h>
65 #include <TParticle.h>
69 #include "AliITShit.h"
70 #include "AliITSdigit.h"
71 #include "AliITSmodule.h"
72 #include "AliITSMapA2.h"
73 #include "AliITSpList.h"
74 #include "AliITSsimulationSPD.h"
75 #include "AliITSsegmentation.h"
76 #include "AliITSresponse.h"
77 #include "AliITSsegmentationSPD.h"
78 #include "AliITSresponseSPD.h"
82 ClassImp(AliITSsimulationSPD)
83 ////////////////////////////////////////////////////////////////////////
85 // Written by Rocco Caliandro
86 // from a model developed with T. Virgili and R.A. Fini
89 // AliITSsimulationSPD is the simulation of SPDs
91 //______________________________________________________________________
92 AliITSsimulationSPD::AliITSsimulationSPD(){
93 // Default constructor
106 //______________________________________________________________________
107 AliITSsimulationSPD::AliITSsimulationSPD(AliITSsegmentation *seg,
108 AliITSresponse *resp) {
109 // Standard constructor
121 Init((AliITSsegmentationSPD*)seg,(AliITSresponseSPD*)resp);
123 //______________________________________________________________________
124 void AliITSsimulationSPD::Init(AliITSsegmentationSPD *seg,
125 AliITSresponseSPD *resp) {
126 // Initilizes the variables of AliITSsimulation SPD.
131 fMapA2 = new AliITSMapA2(fSegmentation);
132 fpList = new AliITSpList(GetNPixelsZ()+1,GetNPixelsX()+1);
134 fResponse->Thresholds(fThresh,fSigma);
135 fResponse->GetNoiseParam(fCouplCol,fCouplRow);
136 fNPixelsZ = fSegmentation->Npz();
137 fNPixelsX = fSegmentation->Npx();
140 //______________________________________________________________________
141 AliITSsimulationSPD::~AliITSsimulationSPD() {
152 //______________________________________________________________________
153 AliITSsimulationSPD::AliITSsimulationSPD(const AliITSsimulationSPD &source){
156 if(&source == this) return;
158 this->fMapA2 = source.fMapA2;
159 this->fHis = source.fHis;
161 this->fThresh = source.fThresh;
162 this->fSigma = source.fSigma;
163 this->fCouplCol = source.fCouplCol;
164 this->fCouplRow = source.fCouplRow;
165 this->fNPixelsX = source.fNPixelsX;
166 this->fNPixelsZ = source.fNPixelsZ;
170 //______________________________________________________________________
171 AliITSsimulationSPD& AliITSsimulationSPD::operator=(const AliITSsimulationSPD
173 // Assignment operator
175 if(&source == this) return *this;
177 this->fMapA2 = source.fMapA2;
178 this->fHis = source.fHis;
180 this->fThresh = source.fThresh;
181 this->fSigma = source.fSigma;
182 this->fCouplCol = source.fCouplCol;
183 this->fCouplRow = source.fCouplRow;
184 this->fNPixelsX = source.fNPixelsX;
185 this->fNPixelsZ = source.fNPixelsZ;
189 //______________________________________________________________________
190 void AliITSsimulationSPD::InitSimulationModule(Int_t module,Int_t event){
191 // Creates maps to build the list of tracks for each sumable digit
193 // Int_t module // Module number to be simulated
194 // Int_t event // Event number to be simulated
205 //______________________________________________________________________
206 void AliITSsimulationSPD::FinishSDigitiseModule(){
207 // Does the Sdigits to Digits work
215 SDigitsToDigits(fModule,fpList);
217 //______________________________________________________________________
218 void AliITSsimulationSPD::SDigitiseModule(AliITSmodule *mod, Int_t dummy0,
220 // Sum digitize module
221 if (!(mod->GetNhits())) return; // if module has no hits then no Sdigits.
222 Int_t number = 10000;
223 Int_t *frowpixel = new Int_t[number];
224 Int_t *fcolpixel = new Int_t[number];
225 Double_t *fenepixel = new Double_t[number];
227 fModule = mod->GetIndex();
229 // Array of pointers to store the track index of the digits
230 // leave +1, otherwise pList crashes when col=256, row=192
232 HitsToAnalogDigits(mod,frowpixel,fcolpixel,fenepixel,fpList);
234 WriteSDigits(fpList);
243 //______________________________________________________________________
244 void AliITSsimulationSPD::DigitiseModule(AliITSmodule *mod, Int_t dummy0,
246 // digitize module. Also need to digitize modules with only noise.
248 Int_t number = 10000;
249 Int_t *frowpixel = new Int_t[number];
250 Int_t *fcolpixel = new Int_t[number];
251 Double_t *fenepixel = new Double_t[number];
253 // Array of pointers to store the track index of the digits
254 // leave +1, otherwise pList crashes when col=256, row=192
255 fModule = mod->GetIndex();
257 SetFluctuations(fpList,fModule);
259 HitsToAnalogDigits(mod,frowpixel,fcolpixel,fenepixel,fpList);
261 // apply mask to SPD module
264 CreateDigit(fModule,fpList);
273 //______________________________________________________________________
274 void AliITSsimulationSPD::SDigitsToDigits(Int_t module,AliITSpList *pList) {
275 // sum digits to Digits.
278 cout << "Entering AliITSsimulatinSPD::SDigitsToDigits for module=";
279 cout << module << endl;
284 SetFluctuations(pList,module);
286 fMapA2->ClearMap(); // since noise is in pList aready. Zero Map so that
287 // noise is not doubled when calling FillMapFrompList.
289 FillMapFrompList(pList);
291 // apply mask to SPD module
294 CreateDigit(module,pList);
299 //______________________________________________________________________
300 void AliITSsimulationSPD::UpdateMapSignal(Int_t row,Int_t col,Int_t trk,
301 Int_t hit,Int_t mod,Double_t ene,
302 AliITSpList *pList) {
303 // updates the Map of signal, adding the energy (ene) released by
306 fMapA2->AddSignal(row,col,ene);
307 pList->AddSignal(row,col,trk,hit,mod,ene);
309 //______________________________________________________________________
310 void AliITSsimulationSPD::UpdateMapNoise(Int_t row,Int_t col,Int_t mod,
311 Double_t ene,AliITSpList *pList) {
312 // updates the Map of noise, adding the energy (ene) give my noise
314 fMapA2->AddSignal(row,col,ene);
315 pList->AddNoise(row,col,mod,ene);
317 //______________________________________________________________________
318 void AliITSsimulationSPD::HitsToAnalogDigits(AliITSmodule *mod,
319 Int_t *frowpixel,Int_t *fcolpixel,
321 AliITSpList *pList) {
322 // Loops over all hits to produce Analog/floting point digits. This
323 // is also the first task in producing standard digits.
325 // loop over hits in the module
326 Int_t hitpos,nhits = mod->GetNhits();
327 for (hitpos=0;hitpos<nhits;hitpos++) {
328 HitToDigit(mod,hitpos,frowpixel,fcolpixel,fenepixel,pList);
329 }// end loop over digits
331 //______________________________________________________________________
332 void AliITSsimulationSPD::HitToDigit(AliITSmodule *mod,Int_t hitpos,
333 Int_t *frowpixel,Int_t *fcolpixel,
334 Double_t *fenepixel,AliITSpList *pList) {
335 // Steering function to determine the digits associated to a given
337 // The digits are created by charge sharing (ChargeSharing) and by
338 // capacitive coupling (SetCoupling). At all the created digits is
339 // associated the track number of the hit (ntrack)
340 Double_t x1l=0.0,y1l=0.0,z1l=0.0,x2l=0.0,y2l=0.0,z2l=0.0;
341 Int_t r1,r2,c1,c2,row,col,npixel = 0;
343 Double_t ene=0.0,etot=0.0;
344 const Float_t kconv = 10000.; // cm -> microns
345 const Float_t kconv1= 0.277e9; // GeV -> electrons equivalent
347 if(!(mod->LineSegmentL(hitpos,x1l,x2l,y1l,y2l,z1l,z2l,etot,ntrack)))return;
349 x2l += x1l; y2l += y1l; z2l += z1l; // Convert to ending coordinate.
350 // positions shifted and converted in microns
351 x1l = x1l*kconv + fSegmentation->Dx()/2.;
352 z1l = z1l*kconv + fSegmentation->Dz()/2.;
353 // positions shifted and converted in microns
354 x2l = x2l*kconv + fSegmentation->Dx()/2.;
355 z2l = z2l*kconv + fSegmentation->Dz()/2.;
356 etot *= kconv1; // convert from GeV to electrons equivalent.
357 Int_t module = mod->GetIndex();
359 // to account for the effective sensitive area
360 // introduced in geometry
361 if (z1l<0 || z1l>fSegmentation->Dz()) return;
362 if (z2l<0 || z2l>fSegmentation->Dz()) return;
363 if (x1l<0 || x1l>fSegmentation->Dx()) return;
364 if (x2l<0 || x2l>fSegmentation->Dx()) return;
366 //Get the col and row number starting from 1
367 // the x direction is not inverted for the second layer!!!
368 fSegmentation->GetPadIxz(x1l, z1l, c1, r1);
369 fSegmentation->GetPadIxz(x2l, z2l, c2, r2);
371 // to account for unexpected equal entrance and
373 if (x1l==x2l) x2l=x2l+x2l*0.1;
374 if (z1l==z2l) z2l=z2l+z2l*0.1;
376 if ((r1==r2) && (c1==c2)){
379 frowpixel[npixel-1] = r1;
380 fcolpixel[npixel-1] = c1;
381 fenepixel[npixel-1] = etot;
384 ChargeSharing(x1l,z1l,x2l,z2l,c1,r1,c2,r2,etot,
385 npixel,frowpixel,fcolpixel,fenepixel);
386 } // end if r1==r2 && c1==c2.
388 for (Int_t npix=0;npix<npixel;npix++){
389 row = frowpixel[npix];
390 col = fcolpixel[npix];
391 ene = fenepixel[npix];
392 UpdateMapSignal(row,col,ntrack,hitpos,module,ene,pList);
393 // Starting capacitive coupling effect
394 SetCoupling(row,col,ntrack,hitpos,module,pList);
397 //______________________________________________________________________
398 void AliITSsimulationSPD::ChargeSharing(Float_t x1l,Float_t z1l,Float_t x2l,
399 Float_t z2l,Int_t c1,Int_t r1,Int_t c2,
400 Int_t r2,Float_t etot,
401 Int_t &npixel,Int_t *frowpixel,
402 Int_t *fcolpixel,Double_t *fenepixel){
403 // Take into account the geometrical charge sharing when the track
404 // crosses more than one pixel.
408 <img src="picts/ITS/barimodel_2.gif">
411 <font size=+2 color=red>
412 <a href="mailto:Rocco.Caliandro@ba.infn.it"></a>.
418 Float_t xa,za,xb,zb,dx,dz,dtot,refr,refm,refc;
420 Float_t arefm, arefr, arefn, arefc, azb, az2l, axb, ax2l;
421 Int_t dirx,dirz,rb,cb;
422 Int_t flag,flagrow,flagcol;
432 dtot = TMath::Sqrt((dx*dx)+(dz*dz));
433 if (dtot==0.0) dtot = 0.01;
434 dirx = (Int_t) TMath::Sign((Float_t)1,dx);
435 dirz = (Int_t) TMath::Sign((Float_t)1,dz);
437 // calculate the x coordinate of the pixel in the next column
438 // and the z coordinate of the pixel in the next row
441 fSegmentation->GetPadCxz(c1, r1-1, xpos, zpos);
443 Float_t xsize = fSegmentation->Dpx(0);
444 Float_t zsize = fSegmentation->Dpz(r1-1);
446 if (dirx == 1) refr = xpos+xsize/2.;
447 else refr = xpos-xsize/2.;
449 if (dirz == 1) refn = zpos+zsize/2.;
450 else refn = zpos-zsize/2.;
456 // calculate the x coordinate of the intersection with the pixel
457 // in the next cell in row direction
459 refm = dx*((refn - z1l)/dz) + x1l;
461 refm = refr+dirx*xsize;
463 // calculate the z coordinate of the intersection with the pixel
464 // in the next cell in column direction
466 refc = dz*((refr - x1l)/dx) + z1l;
468 refc = refn+dirz*zsize;
475 if ((arefm < arefr) && (arefn < arefc)){
476 // the track goes in the pixel in the next cell in row direction
483 if (rb == r2) flagrow=1;
488 // shift to the pixel in the next cell in row direction
489 Float_t zsizeNext = fSegmentation->Dpz(rb-1);
490 //to account for cell at the borders of the detector
491 if(zsizeNext==0) zsizeNext = zsize;
492 refn += zsizeNext*dirz;
494 // the track goes in the pixel in the next cell in column direction
501 if (cb == c2) flagcol=1;
505 } // end ifaxb > ax2l
507 // shift to the pixel in the next cell in column direction
508 Float_t xsizeNext = fSegmentation->Dpx(cb-1);
509 //to account for cell at the borders of the detector
510 if(xsizeNext==0) xsizeNext = xsize;
511 refr += xsizeNext*dirx;
512 } // end if (arefm < arefr) && (arefn < arefc)
514 //calculate the energy lost in the crossed pixel
515 epar = TMath::Sqrt((xb-xa)*(xb-xa)+(zb-za)*(zb-za));
516 epar = etot*(epar/dtot);
518 //store row, column and energy lost in the crossed pixel
519 frowpixel[npixel] = r1;
520 fcolpixel[npixel] = c1;
521 fenepixel[npixel] = epar;
524 // the exit point of the track is reached
525 if (epar == 0) flag = 1;
526 if ((r1 == r2) && (c1 == c2)) flag = 1;
535 //______________________________________________________________________
536 void AliITSsimulationSPD::SetCoupling(Int_t row, Int_t col, Int_t ntrack,
537 Int_t idhit,Int_t module,
538 AliITSpList *pList) {
539 // Take into account the coupling between adiacent pixels.
540 // The parameters probcol and probrow are the probability of the
541 // signal in one pixel shared in the two adjacent pixels along
542 // the column and row direction, respectively.
546 <img src="picts/ITS/barimodel_3.gif">
549 <font size=+2 color=red>
550 <a href="mailto:tiziano.virgili@cern.ch"></a>.
556 Double_t pulse1,pulse2;
557 Float_t couplR=0.0,couplC=0.0;
560 GetCouplings(couplR,couplC);
563 pulse1 = fMapA2->GetSignal(row,col);
565 for (Int_t isign=-1;isign<=1;isign+=2){// loop in row direction
569 xr = gRandom->Rndm();
570 // if ((j1<0) || (j1>GetNPixelsZ()-1) || (pulse1<GetThreshold())){
571 if ((j1<0) || (j1>GetNPixelsZ()-1) || (xr>couplR)){
575 UpdateMapSignal(j1,col,ntrack,idhit,module,pulse1,pList);
577 flag = 1; // only first next!!
580 // loop in column direction
584 xr = gRandom->Rndm();
585 // if ((j2<0) || (j2>(GetNPixelsX()-1)) || (pulse2<GetThreshold())){
586 if ((j2<0) || (j2>GetNPixelsX()-1) || (xr>couplC)){
590 UpdateMapSignal(row,j2,ntrack,idhit,module,pulse2,pList);
592 flag = 1; // only first next!!
597 //______________________________________________________________________
598 void AliITSsimulationSPD::SetCouplingOld(Int_t row, Int_t col, Int_t ntrack,
599 Int_t idhit,Int_t module,
600 AliITSpList *pList) {
601 // Take into account the coupling between adiacent pixels.
602 // The parameters probcol and probrow are the fractions of the
603 // signal in one pixel shared in the two adjacent pixels along
604 // the column and row direction, respectively.
608 <img src="picts/ITS/barimodel_3.gif">
611 <font size=+2 color=red>
612 <a href="mailto:Rocco.Caliandro@ba.infn.it"></a>.
618 Double_t pulse1,pulse2;
619 Float_t couplR=0.0,couplC=0.0;
621 GetCouplings(couplR,couplC);
624 pulse1 = fMapA2->GetSignal(row,col);
626 for (Int_t isign=-1;isign<=1;isign+=2){// loop in row direction
630 if ((j1<0) || (j1>GetNPixelsZ()-1) || (pulse1<GetThreshold())){
631 pulse1 = fMapA2->GetSignal(row,col);
635 UpdateMapSignal(j1,col,ntrack,idhit,module,pulse1,pList);
639 // loop in column direction
643 if ((j2<0) || (j2>(GetNPixelsX()-1)) || (pulse2<GetThreshold())){
644 pulse2 = fMapA2->GetSignal(row,col);
648 UpdateMapSignal(row,j2,ntrack,idhit,module,pulse2,pList);
654 //______________________________________________________________________
655 void AliITSsimulationSPD::CreateDigit(Int_t module,AliITSpList *pList) {
656 // The pixels are fired if the energy deposited inside them is above
657 // the threshold parameter ethr. Fired pixed are interpreted as digits
658 // and stored in the file digitfilename. One also needs to write out
659 // cases when there is only noise (nhits==0).
661 static AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
663 Int_t size = AliITSdigitSPD::GetNTracks();
664 Int_t * digits = new Int_t[size];
665 Int_t * tracks = new Int_t[size];
666 Int_t * hits = new Int_t[size];
667 Float_t * charges = new Float_t[size];
670 for(j1=0;j1<size;j1++){tracks[j1]=-3;hits[j1]=-1;charges[j1]=0.0;}
671 for (Int_t r=1;r<=GetNPixelsZ();r++) {
672 for (Int_t c=1;c<=GetNPixelsX();c++) {
673 // check if the deposited energy in a pixel is above the
675 Float_t signal = (Float_t) fMapA2->GetSignal(r,c);
676 if ( signal > GetThreshold()) {
677 digits[0] = r-1; // digits starts from 0
678 digits[1] = c-1; // digits starts from 0
680 digits[2] = (Int_t) signal; // the signal is stored in
682 for(j1=0;j1<size;j1++){
683 if(j1<pList->GetNEnteries()){
684 tracks[j1] = pList->GetTrack(r,c,j1);
685 hits[j1] = pList->GetHit(r,c,j1);
693 aliITS->AddSimDigit(0,phys,digits,tracks,hits,charges);
695 cout << " CreateSPDDigit mod=" << fModule << " r,c=" << r;
696 cout <<","<<c<< " sig=" << fpList->GetSignalOnly(r,c);
697 cout << " noise=" << fpList->GetNoise(r,c);
698 cout << " Msig="<< signal << " Thres=" << GetThreshold()<<endl;
700 } // end if of threshold condition
709 //______________________________________________________________________
710 void AliITSsimulationSPD::SetFluctuations(AliITSpList *pList,Int_t module) {
711 // Set the electronic noise and threshold non-uniformities to all the
712 // pixels in a detector.
713 // The parameter fSigma is the squared sum of the sigma due to noise
714 // and the sigma of the threshold distribution among pixels.
718 <img src="picts/ITS/barimodel_1.gif">
721 <font size=+2 color=red>
722 <a href="mailto:Rocco.Caliandro@ba.infn.it"></a>.
727 Float_t thr=0.0,sigm=0.0;
728 Double_t signal,sigma;
731 GetThresholds(thr,sigm);
732 sigma = (Double_t) sigm;
733 for(iz=1;iz<=GetNPixelsZ();iz++){
734 for(ix=1;ix<=GetNPixelsX();ix++){
735 signal = sigma*gRandom->Gaus();
736 fMapA2->SetHit(iz,ix,signal);
737 // insert in the label-signal-hit list the pixels fired
739 pList->AddNoise(iz,ix,module,signal);
740 } // end of loop on pixels
741 } // end of loop on pixels
743 //______________________________________________________________________
744 void AliITSsimulationSPD::SetMask() {
745 // Apply a mask to the SPD module. 1% of the pixel channels are
746 // masked. When the database will be ready, the masked pixels
747 // should be read from it.
751 Float_t perc = ((AliITSresponseSPD*)fResponse)->GetFractionDead();
752 // in this way we get the same set of random numbers for all runs.
753 // This is a cluge for now.
754 static TRandom *rnd = new TRandom();
756 totMask= perc*GetNPixelsZ()*GetNPixelsX();
757 for(im=1;im<totMask;im++){
759 ix=(Int_t)(rnd->Rndm()*(GetNPixelsX()-1.) + 1.);
760 } while(ix<=0 || ix>GetNPixelsX());
762 iz=(Int_t)(rnd->Rndm()*(GetNPixelsZ()-1.) + 1.);
763 } while(iz<=0 || iz>GetNPixelsZ());
765 fMapA2->SetHit(iz,ix,signal);
766 } // end loop on masked pixels
768 //______________________________________________________________________
769 void AliITSsimulationSPD::CreateHistograms() {
773 fHis=new TObjArray(GetNPixelsZ());
774 for(i=0;i<GetNPixelsZ();i++) {
775 TString spdname("spd_");
777 sprintf(candnum,"%d",i+1);
778 spdname.Append(candnum);
779 (*fHis)[i] = new TH1F(spdname.Data(),"SPD maps",
780 GetNPixelsX(),0.,(Float_t) GetNPixelsX());
783 //______________________________________________________________________
784 void AliITSsimulationSPD::ResetHistograms() {
785 // Reset histograms for this detector
788 for(i=0;i<GetNPixelsZ();i++ ) {
789 if ((*fHis)[i]) ((TH1F*)(*fHis)[i])->Reset();
792 //______________________________________________________________________
793 void AliITSsimulationSPD::WriteSDigits(AliITSpList *pList){
794 // Fills the Summable digits Tree
796 static AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
798 pList->GetMaxMapIndex(ni,nj);
799 for(i=0;i<ni;i++)for(j=0;j<nj;j++){
800 if(pList->GetSignalOnly(i,j)>0.0){
801 aliITS->AddSumDigit(*(pList->GetpListItem(i,j)));
803 cout << "pListSPD: " << *(pList->GetpListItem(i,j)) << endl;
804 cout << " CreateSPDSDigit mod=" << fModule << " r,c=";
805 cout << i <<","<< j << " sig=" << fpList->GetSignalOnly(i,j);
806 cout << " noise=" << fpList->GetNoise(i,j) <<endl;
812 //______________________________________________________________________
813 void AliITSsimulationSPD::FillMapFrompList(AliITSpList *pList){
814 // Fills fMap2A from the pList of Summable digits
817 for(iz=0;iz<GetNPixelsZ();iz++)for(ix=0;ix<GetNPixelsX();ix++)
818 fMapA2->AddSignal(iz,ix,pList->GetSignal(iz,ix));