78a3dbfd66d36f5654b0ef7d32c174a4d3411295
[u/mrichter/AliRoot.git] / TDPMjet / AliGenDPMjet.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16
17 // Generator using DPMJET as an external generator
18 // The main DPMJET options are accessable for the user through this interface.
19 // Uses the TDPMjet implementation of TGenerator.
20
21 #include <TDPMjet.h>
22 #include "DPMcommon.h"
23 #include <TRandom.h>
24 #include <TArrayI.h>
25 #include <TParticle.h>
26 #include <TGraph.h>
27 #include <TDatabasePDG.h>
28 #include <TParticlePDG.h>
29 #include <TParticleClassPDG.h>
30 #include <TPDGCode.h>
31 #include <TLorentzVector.h>
32 #include <TClonesArray.h>
33 #include "AliRunLoader.h"
34 #include "AliGenDPMjet.h"
35 #include "AliGenDPMjetEventHeader.h"
36 #include "AliRun.h"
37 #include "AliDpmJetRndm.h"
38 #include "AliHeader.h"
39 #include "AliStack.h"
40 #include "AliMC.h"
41 #include "AliLog.h"
42
43 ClassImp(AliGenDPMjet)
44
45 //______________________________________________________________________________
46 AliGenDPMjet::AliGenDPMjet()
47     :AliGenMC(), 
48      fBeamEn(0.),
49      fMinImpactParam(0.),
50      fMaxImpactParam(100.),
51      fICentr(0),
52      fSelectAll(0),
53      fFlavor(0),
54      fTrials(0),
55      fSpectators(1),
56      fSpecn(0),
57      fSpecp(0),
58      fDPMjet(0),
59      fNoGammas(0),
60      fLHC(0),
61      fPi0Decay(1),
62      fDecayAll(0),
63      fGenImpPar(0.),
64      fProcess(kDpmMb),
65      fTriggerMultiplicity(0),
66      fTriggerMultiplicityEta(0),
67      fTriggerMultiplicityPtMin(0),
68      fkTuneForDiff(0),
69      fProcDiff(0),
70      fFragmentation(kFALSE),
71      fHeader(AliGenDPMjetEventHeader("DPMJET"))
72
73 {
74 // Constructor
75     fEnergyCMS = 5500.;
76     AliDpmJetRndm::SetDpmJetRandom(GetRandom());
77 }
78
79
80 //______________________________________________________________________________
81 AliGenDPMjet::AliGenDPMjet(Int_t npart)
82     :AliGenMC(npart),
83      fBeamEn(0.),
84      fMinImpactParam(0.),
85      fMaxImpactParam(100.),
86      fICentr(0),
87      fSelectAll(0),
88      fFlavor(0),
89      fTrials(0),
90      fSpectators(1),
91      fSpecn(0),
92      fSpecp(0),
93      fDPMjet(0),
94      fNoGammas(0),
95      fLHC(0),
96      fPi0Decay(1),
97      fDecayAll(0),
98      fGenImpPar(0.),
99      fProcess(kDpmMb),
100      fTriggerMultiplicity(0),
101      fTriggerMultiplicityEta(0),
102      fTriggerMultiplicityPtMin(0),
103      fkTuneForDiff(0),
104      fProcDiff(0),
105      fFragmentation(kFALSE),
106      fHeader(AliGenDPMjetEventHeader("DPMJET"))
107
108
109 {
110 // Default PbPb collisions at 5. 5 TeV
111 //
112     fEnergyCMS = 5500.;
113     fName = "DPMJET";
114     fTitle= "Particle Generator using DPMJET";
115     SetTarget();
116     SetProjectile();
117     fVertex.Set(3);
118     AliDpmJetRndm::SetDpmJetRandom(GetRandom());
119 }
120
121 AliGenDPMjet::AliGenDPMjet(const AliGenDPMjet &/*Dpmjet*/)
122     :AliGenMC(),
123      fBeamEn(0.),
124      fMinImpactParam(0.),
125      fMaxImpactParam(100.),
126      fICentr(0),
127      fSelectAll(0),
128      fFlavor(0),
129      fTrials(0),
130      fSpectators(1),
131      fSpecn(0),
132      fSpecp(0),
133      fDPMjet(0),
134      fNoGammas(0),
135      fLHC(0),
136      fPi0Decay(1),
137      fDecayAll(0),
138      fGenImpPar(0.),
139      fProcess(kDpmMb),
140      fTriggerMultiplicity(0),
141      fTriggerMultiplicityEta(0),
142      fTriggerMultiplicityPtMin(0),
143      fkTuneForDiff(0),
144      fProcDiff(0),
145      fFragmentation(kFALSE),
146      fHeader(0x0)
147
148
149 {
150     // Dummy copy constructor
151     fEnergyCMS = 5500.;
152 }
153
154 //______________________________________________________________________________
155 AliGenDPMjet::~AliGenDPMjet()
156 {
157 // Destructor
158 }
159 //______________________________________________________________________________
160 void AliGenDPMjet::Init()
161 {
162 // Initialization
163     
164     if(fEnergyCMS>0. && fBeamEn<0.1) fBeamEn = fEnergyCMS/2;
165     SetMC(new TDPMjet(fProcess, fAProjectile, fZProjectile, fATarget, fZTarget, 
166                       fBeamEn,fEnergyCMS));
167
168     fDPMjet=(TDPMjet*) fMCEvGen;
169     if (fAProjectile == 1 && TMath::Abs(fZProjectile == 1)) fDPMjet->SetfIdp(1);
170     
171     // **** Flag to force central production
172     // fICentr=1. central production forced 
173     // fICentr<0 && fICentr>-100 -> bmin = fMinImpactParam, bmax = fMaxImpactParam        
174     // fICentr<-99 -> fraction of x-sec. = XSFRAC                 
175     // fICentr=-1. -> evaporation/fzc suppressed                  
176     // fICentr<-1. -> evaporation/fzc allowed                 
177     fDPMjet->SetfFCentr(fICentr);  
178     
179     fDPMjet->SetbRange(fMinImpactParam, fMaxImpactParam); 
180     fDPMjet->SetPi0Decay(fPi0Decay);
181     fDPMjet->SetDecayAll(fDecayAll);
182     fDPMjet->SetFragmentProd(fFragmentation);
183     
184 //
185 //  Initialize DPMjet  
186 //    
187     fDPMjet->Initialize();
188 }
189
190
191 //______________________________________________________________________________
192 void AliGenDPMjet::Generate()
193 {
194 // Generate one event
195
196   Double_t polar[3]    =   {0,0,0};
197   Double_t origin[3]   =   {0,0,0};
198   Double_t p[4]        =   {0};
199   Float_t tof;
200
201 //  converts from mm/c to s
202   const Float_t kconv = 0.001/2.999792458e8;
203   Int_t nt  = 0;
204   Int_t jev = 0;
205   Int_t kf, ks, imo;
206   kf = 0;
207   fTrials = 0;
208   //  Set collision vertex position 
209   if (fVertexSmear == kPerEvent) Vertex();
210   
211   while(1)
212   {
213 //    Generate one event
214 // --------------------------------------------------------------------------
215       fSpecn = 0;  
216       fSpecp = 0;
217 // --------------------------------------------------------------------------
218       fDPMjet->GenerateEvent();
219       
220       fTrials++;
221
222       fDPMjet->ImportParticles(&fParticles,"All");      
223       if (fLHC) Boost();
224
225       // Temporaneo
226       fGenImpPar = fDPMjet->GetBImpac();
227
228       if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
229
230       Int_t np = fParticles.GetEntriesFast();
231       //
232       // Multiplicity Trigger
233       if (fTriggerMultiplicity > 0) {
234         Int_t multiplicity = 0;
235         for (Int_t i = 0; i < np; i++) {
236           TParticle *  iparticle = (TParticle *) fParticles.At(i);
237         
238           Int_t statusCode = iparticle->GetStatusCode();
239         
240           // Initial state particle
241           if (statusCode != 1)
242             continue;
243           // eta cut
244           if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
245             continue;
246           // pt cut
247           if (iparticle->Pt() < fTriggerMultiplicityPtMin) 
248             continue;
249           
250           TParticlePDG* pdgPart = iparticle->GetPDG();
251           if (pdgPart && pdgPart->Charge() == 0)
252             continue;
253           ++multiplicity;
254         }
255         //
256         //
257         if (multiplicity < fTriggerMultiplicity) continue;
258         Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
259       }    
260
261
262       if(fkTuneForDiff && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
263         if(!CheckDiffraction() ) continue;
264       }
265
266
267       Int_t nc = 0;
268       if (np == 0) continue;
269
270       Int_t i;
271       Int_t* newPos     = new Int_t[np];
272       Int_t* pSelected  = new Int_t[np];
273
274       for (i = 0; i<np; i++) {
275           newPos[i]    = i;
276           pSelected[i] = 0;
277       }
278       
279 //      First select parent particles
280
281       for (i = 0; i<np; i++) {
282           TParticle *iparticle = (TParticle *) fParticles.At(i);
283
284 // Is this a parent particle ?
285
286           if (Stable(iparticle)) continue;
287
288           Bool_t  selected             =  kTRUE;
289           Bool_t  hasSelectedDaughters =  kFALSE;
290           
291           kf = iparticle->GetPdgCode();
292           if (kf == 92 || kf == 99999) continue;
293           ks = iparticle->GetStatusCode();
294 // No initial state partons
295           if (ks==21) continue;
296           if (!fSelectAll) selected = KinematicSelection(iparticle, 0) && 
297                                SelectFlavor(kf);
298
299           
300           hasSelectedDaughters = DaughtersSelection(iparticle);
301
302
303 // Put particle on the stack if it is either selected or 
304 // it is the mother of at least one seleted particle
305
306           if (selected || hasSelectedDaughters) {
307               nc++;
308               pSelected[i] = 1;
309           } // selected
310       } // particle loop parents
311
312 // Now select the final state particles
313
314
315       for (i=0; i<np; i++) {
316           TParticle *iparticle = (TParticle *) fParticles.At(i);
317
318 // Is this a final state particle ?
319
320           if (!Stable(iparticle)) continue;
321       
322           Bool_t  selected =  kTRUE;
323           kf = iparticle->GetPdgCode();
324           ks = iparticle->GetStatusCode();
325
326 // --------------------------------------------------------------------------
327 // Count spectator neutrons and protons (ks == 13, 14)
328           if(ks == 13 || ks == 14){
329               if(kf == kNeutron) fSpecn += 1;
330               if(kf == kProton)  fSpecp += 1;
331           }
332 // --------------------------------------------------------------------------
333
334           if (!fSelectAll) {
335               selected = KinematicSelection(iparticle,0)&&SelectFlavor(kf);
336               if (!fSpectators && selected) selected = (ks == 13 || ks == 14);
337           }
338
339 // Put particle on the stack if selected
340
341           if (selected) {
342               nc++;
343               pSelected[i] = 1;
344           } // selected
345       } // particle loop final state
346
347 // Write particles to stack
348
349       for (i = 0; i<np; i++) {
350           TParticle *  iparticle = (TParticle *) fParticles.At(i);
351           Bool_t  hasMother   = (iparticle->GetFirstMother()>=0);
352           if (pSelected[i]) {
353               
354               kf   = iparticle->GetPdgCode();         
355               ks   = iparticle->GetStatusCode();              
356               
357               p[0] = iparticle->Px();
358               p[1] = iparticle->Py();
359               p[2] = iparticle->Pz();
360               p[3] = iparticle->Energy();
361               origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
362               origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
363               origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
364                     
365               tof = fTime + kconv*iparticle->T();
366               
367               imo = -1;
368               TParticle* mother = 0;
369               if (hasMother) {
370                   imo = iparticle->GetFirstMother();
371                   mother = (TParticle *) fParticles.At(imo);
372                   imo = (mother->GetPdgCode() != 92 && mother->GetPdgCode() != 99999) ? newPos[imo] : -1;
373               } // if has mother   
374
375
376               
377               Bool_t tFlag = (fTrackIt && (ks == 1));
378               PushTrack(tFlag, imo, kf, 
379                         p[0], p[1], p[2], p[3], 
380                         origin[0], origin[1], origin[2], tof,
381                         polar[0], polar[1], polar[2],
382                         kPNoProcess, nt, 1., ks);
383               KeepTrack(nt);
384               newPos[i] = nt;
385           } // if selected
386       } // particle loop
387       delete[] newPos;
388       delete[] pSelected;
389       if (nc>0) {
390           jev += nc;
391           if (jev >= fNpart || fNpart == -1) {
392               break;
393           }
394       }
395   } // event loop
396   MakeHeader();
397   SetHighWaterMark(nt);
398 }
399
400 //______________________________________________________________________________
401 Bool_t AliGenDPMjet::DaughtersSelection(TParticle* iparticle)
402 {
403 //
404 // Looks recursively if one of the daughters has been selected
405 //
406 //    printf("\n Consider daughters %d:",iparticle->GetPdgCode());
407     Int_t imin = -1;
408     Int_t imax = -1;
409     Int_t i;
410     Bool_t hasDaughters = (iparticle->GetFirstDaughter() >=0);
411     Bool_t selected = kFALSE;
412     if (hasDaughters) {
413         imin = iparticle->GetFirstDaughter();
414         imax = iparticle->GetLastDaughter();       
415         for (i = imin; i <= imax; i++){
416             TParticle *  jparticle = (TParticle *) fParticles.At(i);    
417             Int_t ip = jparticle->GetPdgCode();
418             if (KinematicSelection(jparticle,0)&&SelectFlavor(ip)) {
419                 selected=kTRUE; break;
420             }
421             if (DaughtersSelection(jparticle)) {selected=kTRUE; break; }
422         }
423     } else {
424         return kFALSE;
425     }
426     return selected;
427 }
428
429
430
431 //______________________________________________________________________________
432 Bool_t AliGenDPMjet::SelectFlavor(Int_t pid)
433 {
434 // Select flavor of particle
435 // 0: all
436 // 4: charm and beauty
437 // 5: beauty
438     Bool_t res = 0;
439     
440     if (fFlavor == 0) {
441         res = kTRUE;
442     } else {
443         Int_t ifl = TMath::Abs(pid/100);
444         if (ifl > 10) ifl/=10;
445         res = (fFlavor == ifl);
446     }
447 //
448 //  This part if gamma writing is inhibited
449     if (fNoGammas) 
450         res = res && (pid != kGamma && pid != kPi0);
451 //
452     return res;
453 }
454
455 //______________________________________________________________________________
456 Bool_t AliGenDPMjet::Stable(TParticle*  particle)
457 {
458 // Return true for a stable particle
459 //
460     
461 //    if (particle->GetFirstDaughter() < 0 ) return kTRUE;
462     if (particle->GetStatusCode() == 1) return kTRUE;
463     else return kFALSE;
464
465 }
466
467 //______________________________________________________________________________
468 void AliGenDPMjet::MakeHeader()
469 {
470 // Builds the event header, to be called after each event
471     fHeader.SetNProduced(fDPMjet->GetNumStablePc());
472     fHeader.SetImpactParameter(fDPMjet->GetBImpac());
473     fHeader.SetTotalEnergy(fDPMjet->GetTotEnergy());
474     fHeader.SetParticipants(fDPMjet->GetProjParticipants(), 
475                             fDPMjet->GetTargParticipants());
476
477     fHeader.SetCollisions(DTGLCP.ncp, DTGLCP.nct, 
478         fDPMjet->GetProjWounded(),fDPMjet->GetTargWounded());
479                 
480     if(fProcDiff>0)  fHeader.SetProcessType(fProcDiff);
481     else fHeader.SetProcessType(fDPMjet->GetProcessCode());
482
483     // Bookkeeping for kinematic bias
484     fHeader.SetTrials(fTrials);
485     // Event Vertex
486     fHeader.SetPrimaryVertex(fVertex);
487     fHeader.SetInteractionTime(fTime);
488     fHeader.SetNDiffractive(POEVT1.nsd1, POEVT1.nsd2, POEVT1.ndd);
489 //    gAlice->SetGenEventHeader(fHeader);    
490     AddHeader(&fHeader);
491     fCollisionGeometry = &fHeader;
492 }
493
494 //______________________________________________________________________________
495 /*void AliGenDPMjet::AddHeader(AliGenEventHeader* fHeader)
496 {
497     // Add fHeader to container or runloader
498     if (fContainer) {
499         fContainer->AddHeader(fHeader);
500     } else {
501         AliRunLoader::Instance()->GetHeader()->SetGenEventHeader(fHeader);
502     }
503 }*/
504
505
506 //______________________________________________________________________________
507 AliGenDPMjet& AliGenDPMjet::operator=(const  AliGenDPMjet& /*rhs*/)
508 {
509 // Assignment operator
510     return *this;
511 }
512
513
514 //______________________________________________________________________________
515 void AliGenDPMjet::FinishRun()
516 {
517     // Print run statistics
518     fDPMjet->Dt_Dtuout();
519 }
520
521
522 //______________________________________________________________________________
523 Bool_t AliGenDPMjet::CheckDiffraction()
524 {
525
526   //  printf("AAA\n");
527
528    Int_t np = fParticles.GetEntriesFast();
529
530    Int_t iPart1=-1;
531    Int_t iPart2=-1;
532
533    Double_t y1 = 1e10;
534    Double_t y2 = -1e10;
535
536   const Int_t kNstable=20;
537   const Int_t pdgStable[20] = {
538     22,             // Photon
539     11,             // Electron
540     12,             // Electron Neutrino 
541     13,             // Muon 
542     14,             // Muon Neutrino
543     15,             // Tau 
544     16,             // Tau Neutrino
545     211,            // Pion
546     321,            // Kaon
547     311,            // K0
548     130,            // K0s
549     310,            // K0l
550     2212,           // Proton 
551     2112,           // Neutron
552     3122,           // Lambda_0
553     3112,           // Sigma Minus
554     3222,           // Sigma Plus
555     3312,           // Xsi Minus 
556     3322,           // Xsi0
557     3334            // Omega
558   };
559     
560      for (Int_t i = 0; i < np; i++) {
561         TParticle *  part = (TParticle *) fParticles.At(i);
562         
563         Int_t statusCode = part->GetStatusCode();
564         
565         // Initial state particle
566         if (statusCode != 1)
567           continue;
568
569         Int_t pdg = TMath::Abs(part->GetPdgCode());
570         Bool_t isStable = kFALSE;
571         for (Int_t i1 = 0; i1 < kNstable; i1++) {
572           if (pdg == pdgStable[i1]) {
573             isStable = kTRUE;
574             break;
575           }
576         }
577         if(!isStable) 
578           continue;
579
580         Double_t y = part->Y();
581
582         if (y < y1)
583           {
584             y1 = y;
585             iPart1 = i;
586           }
587         if (y > y2)
588         {
589           y2 = y;
590           iPart2 = i;
591         }
592      }
593
594      if(iPart1<0 || iPart2<0) return kFALSE;
595
596      y1=TMath::Abs(y1);
597      y2=TMath::Abs(y2);
598
599      TParticle *  part1 = (TParticle *) fParticles.At(iPart1);
600      TParticle *  part2 = (TParticle *) fParticles.At(iPart2);
601
602      Int_t pdg1 = part1->GetPdgCode();
603      Int_t pdg2 = part2->GetPdgCode();
604
605
606      Int_t iPart = -1;
607      if (pdg1 == 2212 && pdg2 == 2212)
608        {
609          if(y1 > y2) 
610            iPart = iPart1;
611          else if(y1 < y2) 
612            iPart = iPart2;
613          else {
614            iPart = iPart1;
615            if((AliDpmJetRndm::GetDpmJetRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
616          }
617        }
618      else if (pdg1 == 2212)
619        iPart = iPart1;
620      else if (pdg2 == 2212)
621        iPart = iPart2;
622
623
624
625
626
627      Double_t M=-1.;
628      if(iPart>0) {
629        TParticle *  part = (TParticle *) fParticles.At(iPart);
630        Double_t E= part->Energy();
631        Double_t P= part->P();
632        M= TMath::Sqrt((fEnergyCMS-E-P)*(fEnergyCMS-E+P));
633      }
634
635      Double_t Mmin, Mmax, wSD, wDD, wND;
636
637      if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
638      if(M>-1 && M<Mmin) return kFALSE;
639      if(M>Mmax) M=-1;
640
641
642  Int_t procType=fDPMjet->GetProcessCode();//fPythia->GetMSTI(1);
643  if(procType== 4) return kFALSE;
644  Int_t proc0=2;
645  if(procType== 7) proc0=1;
646  if(procType== 5 || procType== 6) proc0=0;
647
648
649  Int_t proc=2;
650  if(M>0) proc=0;
651  else if(proc0==1) proc=1;
652
653  if(proc==1 && (AliDpmJetRndm::GetDpmJetRandom())->Uniform(0.,1.) > wDD) return kFALSE;
654  if(proc==2 && (AliDpmJetRndm::GetDpmJetRandom())->Uniform(0.,1.) > wND) return kFALSE;
655
656
657
658     if(proc!=0) {
659       if(proc0!=0) fProcDiff = procType;
660       else       fProcDiff = 1;
661       return kTRUE;
662     }
663
664     if(wSD<0)  AliError("wSD<0 ! \n");
665
666     if((AliDpmJetRndm::GetDpmJetRandom())->Uniform(0.,1.)> wSD) return kFALSE;
667
668     //    printf("iPart = %d\n", iPart);
669
670     if(iPart==iPart1) fProcDiff=5;
671     else if(iPart==iPart2) fProcDiff=6;
672     else {
673       printf("EROOR:  iPart!=iPart1 && iPart!=iPart2\n");
674
675     }
676
677     return kTRUE;
678 }
679
680
681
682 Bool_t AliGenDPMjet::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax, 
683                                                        Double_t &wSD, Double_t &wDD, Double_t &wND)
684 {
685
686   if(TMath::Abs(fEnergyCMS-900)<1 ){
687 const Int_t nbin=400;
688 Double_t bin[]={
689 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500, 
690 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300, 
691 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100, 
692 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900, 
693 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700, 
694 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500, 
695 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300, 
696 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100, 
697 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900, 
698 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700, 
699 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500, 
700 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300, 
701 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100, 
702 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900, 
703 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700, 
704 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500, 
705 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300, 
706 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100, 
707 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900, 
708 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700, 
709 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500, 
710 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300, 
711 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100, 
712 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900, 
713 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700, 
714 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500, 
715 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300, 
716 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100, 
717 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900, 
718 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700, 
719 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500, 
720 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300, 
721 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100, 
722 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900, 
723 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700, 
724 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500, 
725 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300, 
726 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100, 
727 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900, 
728 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700, 
729 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500, 
730 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300, 
731 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100, 
732 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900, 
733 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700, 
734 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500, 
735 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300, 
736 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100, 
737 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900, 
738 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700, 
739 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500, 
740 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300, 
741 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100, 
742 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900, 
743 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700, 
744 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500, 
745 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300, 
746 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100, 
747 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900, 
748 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700, 
749 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500, 
750 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300, 
751 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100, 
752 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900, 
753 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700, 
754 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500, 
755 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
756 Double_t w[]={
757 1.000000, 0.389079, 0.326612, 0.356363, 0.310726, 0.264037, 
758 0.253810, 0.224655, 0.207990, 0.198149, 0.186803, 0.180209, 
759 0.178928, 0.161772, 0.162314, 0.158409, 0.148379, 0.143557, 
760 0.140357, 0.136272, 0.136957, 0.136606, 0.129376, 0.127671, 
761 0.128406, 0.132239, 0.119311, 0.130227, 0.130233, 0.123312, 
762 0.115257, 0.120105, 0.119733, 0.117116, 0.110096, 0.117509, 
763 0.109149, 0.114372, 0.100322, 0.106227, 0.108696, 0.110352, 
764 0.106748, 0.101475, 0.101837, 0.098585, 0.094433, 0.100148, 
765 0.096505, 0.100155, 0.103526, 0.098161, 0.093647, 0.100121, 
766 0.097426, 0.093414, 0.090241, 0.097228, 0.098098, 0.098340, 
767 0.096779, 0.099265, 0.095101, 0.090342, 0.097469, 0.090663, 
768 0.093422, 0.093103, 0.089648, 0.096923, 0.088079, 0.089360, 
769 0.097772, 0.092932, 0.093554, 0.085784, 0.096395, 0.096304, 
770 0.090183, 0.089255, 0.090265, 0.086262, 0.087044, 0.088965, 
771 0.085825, 0.095073, 0.085933, 0.091005, 0.091707, 0.092428, 
772 0.091689, 0.091224, 0.095256, 0.083407, 0.087983, 0.090320, 
773 0.081580, 0.088077, 0.083478, 0.091309, 0.083734, 0.089906, 
774 0.100155, 0.092728, 0.086542, 0.078091, 0.085261, 0.094302, 
775 0.078063, 0.090070, 0.086566, 0.095020, 0.082124, 0.084791, 
776 0.090624, 0.090236, 0.086344, 0.085706, 0.085913, 0.083107, 
777 0.092557, 0.081144, 0.091254, 0.096139, 0.079458, 0.088124, 
778 0.088777, 0.076652, 0.085168, 0.082326, 0.080435, 0.085022, 
779 0.085693, 0.093957, 0.088134, 0.082347, 0.082139, 0.090980, 
780 0.078397, 0.093595, 0.091562, 0.081789, 0.085026, 0.080868, 
781 0.083455, 0.084590, 0.084124, 0.081486, 0.087242, 0.080928, 
782 0.096392, 0.078324, 0.092093, 0.074267, 0.082925, 0.090717, 
783 0.081467, 0.080435, 0.078825, 0.075843, 0.088940, 0.081451, 
784 0.096047, 0.088102, 0.091710, 0.095208, 0.086160, 0.091305, 
785 0.085406, 0.094432, 0.078227, 0.099870, 0.094140, 0.080130, 
786 0.090707, 0.083268, 0.082222, 0.088767, 0.084477, 0.088069, 
787 0.089382, 0.086164, 0.089123, 0.092799, 0.076710, 0.090727, 
788 0.077097, 0.099905, 0.089733, 0.088101, 0.093705, 0.089215, 
789 0.085110, 0.086032, 0.083719, 0.079693, 0.088116, 0.090519, 
790 0.091150, 0.090855, 0.090547, 0.077773, 0.081914, 0.080864, 
791 0.082935, 0.092952, 0.079390, 0.080255, 0.091123, 0.091331, 
792 0.095160, 0.089343, 0.083353, 0.087445, 0.094036, 0.084719, 
793 0.099665, 0.085104, 0.100912, 0.085958, 0.083972, 0.098284, 
794 0.078318, 0.082042, 0.088007, 0.085469, 0.089984, 0.081181, 
795 0.098850, 0.086409, 0.089070, 0.081579, 0.089622, 0.089396, 
796 0.093922, 0.089472, 0.090806, 0.075034, 0.090346, 0.083871, 
797 0.086931, 0.089207, 0.094425, 0.087830, 0.079537, 0.097316, 
798 0.096513, 0.092264, 0.082211, 0.083841, 0.081861, 0.092591, 
799 0.077785, 0.079646, 0.093721, 0.090735, 0.086910, 0.075837, 
800 0.090729, 0.092800, 0.098704, 0.092441, 0.086404, 0.089344, 
801 0.083650, 0.082569, 0.085753, 0.091430, 0.085460, 0.095210, 
802 0.083226, 0.094882, 0.084856, 0.093350, 0.084579, 0.096744, 
803 0.099211, 0.085142, 0.085499, 0.083395, 0.088352, 0.110418, 
804 0.093788, 0.096140, 0.082758, 0.097145, 0.089170, 0.090720, 
805 0.084708, 0.095927, 0.090330, 0.074239, 0.089532, 0.090514, 
806 0.089823, 0.089709, 0.101840, 0.082676, 0.087157, 0.079221, 
807 0.096460, 0.108192, 0.088904, 0.084510, 0.096624, 0.099242, 
808 0.094470, 0.092473, 0.091745, 0.090439, 0.095316, 0.087963, 
809 0.096400, 0.089479, 0.094880, 0.085964, 0.092775, 0.083200, 
810 0.095133, 0.090079, 0.088828, 0.087600, 0.094123, 0.089135, 
811 0.082617, 0.085109, 0.114091, 0.096331, 0.108465, 0.080318, 
812 0.106576, 0.089671, 0.092023, 0.090722, 0.086603, 0.091788, 
813 0.098375, 0.082712, 0.102681, 0.098869, 0.089051, 0.109972, 
814 0.080440, 0.097860, 0.093074, 0.097028, 0.107826, 0.117152, 
815 0.090968, 0.096790, 0.096725, 0.094641, 0.089535, 0.092561, 
816 0.095828, 0.084320, 0.089942, 0.105476, 0.087495, 0.089805, 
817 0.092238, 0.094141, 0.104390, 0.082958, 0.097449, 0.099594, 
818 0.092640, 0.097332, 0.093223, 0.100183, 0.092511, 0.087035, 
819 0.088741, 0.097856, 0.116682, 0.091732, 0.097753, 0.094283, 
820 0.094235, 0.082016, 0.098370, 0.085676, 0.104529, 0.087319, 
821 0.090289, 0.105314, 0.103634, 0.101261, 0.092764, 0.098217, 
822 0.098939, 0.096071, 0.096071, 0.094027, 0.092713, 0.089542, 
823 0.112293, 0.112293, 0.089531, 0.087752};
824 wDD = 0.188264;
825 wND = 0.102252;
826 wSD = -1;
827
828     Mmin = bin[0];
829     Mmax = bin[nbin];
830     if(M<Mmin || M>Mmax) return kTRUE;
831
832     Int_t ibin=nbin-1;
833     for(Int_t i=1; i<=nbin; i++) 
834       if(M<=bin[i]) {
835         ibin=i-1;
836         //      printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
837         break;
838       }
839     wSD=w[ibin];
840     return kTRUE;
841
842   }
843   else if(TMath::Abs(fEnergyCMS-2760)<1 ){
844    
845 const Int_t nbin=400;
846 Double_t bin[]={
847 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500, 
848 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300, 
849 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100, 
850 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900, 
851 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700, 
852 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500, 
853 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300, 
854 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100, 
855 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900, 
856 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700, 
857 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500, 
858 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300, 
859 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100, 
860 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900, 
861 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700, 
862 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500, 
863 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300, 
864 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100, 
865 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900, 
866 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700, 
867 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500, 
868 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300, 
869 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100, 
870 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900, 
871 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700, 
872 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500, 
873 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300, 
874 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100, 
875 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900, 
876 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700, 
877 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500, 
878 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300, 
879 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100, 
880 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900, 
881 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700, 
882 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500, 
883 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300, 
884 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100, 
885 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900, 
886 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700, 
887 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500, 
888 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300, 
889 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100, 
890 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900, 
891 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700, 
892 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500, 
893 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300, 
894 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100, 
895 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900, 
896 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700, 
897 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500, 
898 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300, 
899 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100, 
900 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900, 
901 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700, 
902 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500, 
903 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300, 
904 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100, 
905 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900, 
906 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700, 
907 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500, 
908 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300, 
909 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100, 
910 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900, 
911 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700, 
912 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500, 
913 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
914 Double_t w[]={
915 1.000000, 0.402402, 0.347976, 0.386866, 0.304413, 0.275746, 
916 0.256941, 0.250439, 0.228486, 0.219225, 0.203368, 0.196124, 
917 0.180551, 0.169230, 0.159021, 0.157136, 0.154743, 0.160522, 
918 0.153993, 0.143448, 0.148062, 0.136337, 0.130853, 0.127798, 
919 0.137576, 0.137530, 0.124175, 0.120225, 0.120774, 0.123584, 
920 0.121883, 0.114522, 0.118338, 0.119587, 0.106017, 0.125802, 
921 0.106256, 0.101585, 0.097737, 0.100817, 0.102279, 0.110935, 
922 0.101429, 0.107629, 0.105802, 0.095688, 0.096617, 0.100985, 
923 0.101521, 0.100450, 0.111836, 0.088828, 0.102264, 0.101012, 
924 0.097673, 0.097634, 0.091720, 0.096167, 0.084537, 0.104443, 
925 0.091966, 0.097204, 0.089456, 0.088273, 0.098220, 0.095151, 
926 0.088201, 0.085570, 0.088431, 0.077625, 0.088314, 0.084582, 
927 0.091545, 0.083774, 0.086183, 0.089195, 0.086255, 0.077167, 
928 0.096118, 0.089881, 0.086206, 0.086968, 0.079827, 0.082002, 
929 0.083081, 0.076587, 0.081820, 0.092382, 0.082964, 0.080901, 
930 0.093512, 0.082907, 0.086691, 0.093639, 0.089010, 0.082857, 
931 0.090795, 0.082403, 0.078602, 0.087284, 0.079638, 0.082905, 
932 0.077189, 0.084329, 0.075900, 0.082559, 0.084210, 0.070053, 
933 0.068453, 0.083369, 0.077659, 0.073286, 0.075396, 0.073946, 
934 0.083293, 0.076235, 0.082184, 0.080104, 0.073755, 0.077369, 
935 0.068281, 0.084593, 0.074923, 0.069467, 0.072094, 0.077973, 
936 0.067034, 0.080314, 0.087441, 0.071728, 0.072302, 0.076783, 
937 0.079931, 0.075557, 0.076318, 0.079029, 0.075126, 0.076859, 
938 0.080253, 0.074344, 0.083387, 0.087553, 0.084437, 0.076322, 
939 0.077748, 0.087559, 0.075649, 0.076615, 0.077098, 0.074559, 
940 0.075540, 0.085883, 0.079269, 0.079866, 0.068922, 0.069770, 
941 0.068024, 0.077783, 0.086620, 0.086769, 0.068433, 0.078059, 
942 0.084463, 0.072790, 0.073889, 0.079090, 0.081759, 0.069576, 
943 0.069160, 0.071695, 0.078569, 0.075727, 0.088055, 0.082395, 
944 0.079915, 0.075150, 0.073580, 0.069968, 0.071141, 0.065823, 
945 0.077270, 0.076229, 0.071735, 0.079271, 0.078209, 0.069503, 
946 0.064732, 0.076312, 0.088579, 0.087271, 0.080566, 0.073527, 
947 0.071376, 0.068785, 0.071812, 0.072680, 0.067252, 0.059543, 
948 0.072818, 0.071856, 0.083427, 0.080664, 0.077315, 0.066060, 
949 0.078772, 0.065442, 0.067255, 0.077676, 0.068306, 0.071578, 
950 0.059728, 0.073526, 0.078932, 0.070316, 0.067620, 0.067323, 
951 0.078316, 0.080366, 0.091194, 0.066739, 0.076238, 0.070382, 
952 0.077118, 0.073822, 0.072830, 0.062947, 0.077375, 0.076284, 
953 0.070951, 0.086127, 0.071074, 0.076621, 0.070502, 0.070897, 
954 0.058764, 0.065322, 0.073620, 0.062051, 0.074548, 0.083770, 
955 0.072502, 0.066823, 0.074192, 0.081570, 0.067340, 0.081896, 
956 0.080680, 0.072835, 0.069675, 0.078881, 0.072826, 0.069616, 
957 0.082744, 0.069138, 0.073333, 0.080881, 0.069091, 0.064266, 
958 0.062849, 0.072846, 0.067462, 0.067229, 0.071319, 0.071099, 
959 0.069381, 0.073799, 0.076106, 0.075006, 0.073074, 0.092589, 
960 0.074277, 0.061324, 0.069788, 0.070310, 0.063160, 0.073077, 
961 0.075447, 0.081013, 0.074102, 0.076565, 0.060192, 0.058326, 
962 0.071508, 0.072974, 0.065098, 0.060432, 0.062077, 0.075644, 
963 0.075417, 0.066947, 0.066744, 0.065111, 0.075468, 0.078185, 
964 0.073216, 0.066502, 0.079582, 0.065405, 0.069828, 0.072165, 
965 0.071112, 0.064656, 0.080396, 0.066505, 0.063419, 0.066128, 
966 0.080616, 0.071463, 0.064867, 0.074782, 0.063103, 0.068179, 
967 0.064911, 0.073029, 0.075746, 0.062264, 0.099126, 0.067890, 
968 0.074940, 0.070090, 0.073583, 0.056904, 0.063745, 0.063780, 
969 0.076876, 0.066519, 0.067164, 0.068668, 0.075065, 0.070983, 
970 0.075751, 0.066317, 0.077520, 0.073139, 0.073961, 0.085492, 
971 0.074629, 0.059555, 0.081026, 0.059274, 0.055448, 0.084269, 
972 0.066222, 0.078874, 0.062021, 0.075156, 0.090478, 0.066265, 
973 0.067845, 0.076653, 0.086671, 0.082362, 0.067246, 0.075975, 
974 0.072594, 0.068570, 0.095034, 0.065644, 0.070945, 0.066190, 
975 0.075906, 0.055154, 0.075575, 0.058078, 0.071004, 0.070850, 
976 0.064374, 0.058251, 0.069430, 0.072293, 0.065484, 0.084197, 
977 0.090119, 0.091619, 0.067620, 0.079462, 0.063025, 0.068128, 
978 0.056927, 0.076351, 0.073869, 0.061597, 0.083741, 0.063762, 
979 0.064489, 0.074269, 0.068832, 0.058648, 0.069536, 0.074824, 
980 0.081009, 0.073389, 0.076792, 0.084855, 0.075280, 0.061473, 
981 0.063840, 0.062891, 0.071328, 0.065250};
982 wDD = 0.077845;
983 wND = 0.066355;
984 wSD = -1;
985
986     Mmin = bin[0];
987     Mmax = bin[nbin];
988     if(M<Mmin || M>Mmax) return kTRUE;
989
990     Int_t ibin=nbin-1;
991     for(Int_t i=1; i<=nbin; i++) 
992       if(M<=bin[i]) {
993         ibin=i-1;
994         //      printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
995         break;
996       }
997     wSD=w[ibin];
998     return kTRUE;
999    
1000   }
1001   else if(TMath::Abs(fEnergyCMS-7000)<1 ){
1002     
1003 const Int_t nbin=400;
1004 Double_t bin[]={
1005 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500, 
1006 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300, 
1007 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100, 
1008 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900, 
1009 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700, 
1010 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500, 
1011 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300, 
1012 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100, 
1013 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900, 
1014 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700, 
1015 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500, 
1016 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300, 
1017 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100, 
1018 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900, 
1019 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700, 
1020 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500, 
1021 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300, 
1022 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100, 
1023 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900, 
1024 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700, 
1025 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500, 
1026 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300, 
1027 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100, 
1028 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900, 
1029 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700, 
1030 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500, 
1031 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300, 
1032 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100, 
1033 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900, 
1034 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700, 
1035 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500, 
1036 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300, 
1037 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100, 
1038 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900, 
1039 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700, 
1040 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500, 
1041 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300, 
1042 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100, 
1043 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900, 
1044 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700, 
1045 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500, 
1046 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300, 
1047 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100, 
1048 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900, 
1049 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700, 
1050 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500, 
1051 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300, 
1052 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100, 
1053 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900, 
1054 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700, 
1055 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500, 
1056 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300, 
1057 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100, 
1058 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900, 
1059 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700, 
1060 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500, 
1061 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300, 
1062 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100, 
1063 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900, 
1064 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700, 
1065 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500, 
1066 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300, 
1067 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100, 
1068 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900, 
1069 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700, 
1070 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500, 
1071 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1072 Double_t w[]={
1073 1.000000, 0.526293, 0.446686, 0.437789, 0.366854, 0.333320, 
1074 0.291931, 0.266464, 0.253870, 0.248706, 0.232788, 0.220736, 
1075 0.209886, 0.202741, 0.188617, 0.182767, 0.178748, 0.169039, 
1076 0.175911, 0.169098, 0.171256, 0.146728, 0.144543, 0.159470, 
1077 0.153171, 0.151883, 0.144693, 0.136307, 0.140226, 0.135388, 
1078 0.141317, 0.151121, 0.131209, 0.144039, 0.124688, 0.128020, 
1079 0.119122, 0.121868, 0.122332, 0.119561, 0.115744, 0.102504, 
1080 0.114726, 0.109518, 0.115418, 0.114860, 0.110026, 0.107693, 
1081 0.103005, 0.115985, 0.108629, 0.105937, 0.101056, 0.101228, 
1082 0.113305, 0.110302, 0.104696, 0.107447, 0.099095, 0.107378, 
1083 0.103090, 0.111384, 0.090821, 0.109806, 0.093639, 0.096655, 
1084 0.110416, 0.104446, 0.098530, 0.095105, 0.106641, 0.101804, 
1085 0.091798, 0.094775, 0.104130, 0.088436, 0.119692, 0.099160, 
1086 0.086163, 0.089250, 0.101898, 0.091786, 0.087346, 0.095312, 
1087 0.107186, 0.085671, 0.093283, 0.091992, 0.114654, 0.086172, 
1088 0.084559, 0.097862, 0.079417, 0.094737, 0.089678, 0.105265, 
1089 0.099092, 0.087901, 0.086828, 0.084756, 0.077769, 0.084254, 
1090 0.083262, 0.092935, 0.088858, 0.093377, 0.083569, 0.084771, 
1091 0.084957, 0.084033, 0.095007, 0.076690, 0.087726, 0.097913, 
1092 0.084119, 0.076361, 0.084172, 0.091068, 0.094564, 0.091406, 
1093 0.088405, 0.090355, 0.085388, 0.084586, 0.085752, 0.084298, 
1094 0.091294, 0.081491, 0.075024, 0.082543, 0.088048, 0.074621, 
1095 0.078514, 0.077249, 0.078378, 0.092945, 0.075859, 0.077602, 
1096 0.074592, 0.078181, 0.081527, 0.080865, 0.078854, 0.078237, 
1097 0.085506, 0.089823, 0.072738, 0.078430, 0.077162, 0.081495, 
1098 0.090878, 0.099417, 0.100966, 0.087960, 0.085556, 0.081661, 
1099 0.078066, 0.089059, 0.073564, 0.092704, 0.073148, 0.098057, 
1100 0.067906, 0.079452, 0.090567, 0.082454, 0.077851, 0.079694, 
1101 0.091272, 0.078628, 0.096906, 0.098779, 0.088906, 0.070174, 
1102 0.083822, 0.084241, 0.093237, 0.071062, 0.075771, 0.096405, 
1103 0.098441, 0.086007, 0.069599, 0.078400, 0.083481, 0.081054, 
1104 0.085552, 0.069582, 0.071336, 0.073207, 0.087913, 0.080125, 
1105 0.075189, 0.067217, 0.073509, 0.099694, 0.080781, 0.073943, 
1106 0.062822, 0.076611, 0.087672, 0.077632, 0.063959, 0.077754, 
1107 0.084651, 0.097348, 0.063909, 0.055053, 0.087616, 0.074428, 
1108 0.101165, 0.078446, 0.070683, 0.071162, 0.091516, 0.069641, 
1109 0.070969, 0.069778, 0.083318, 0.066703, 0.074027, 0.067589, 
1110 0.070620, 0.081307, 0.094406, 0.076188, 0.061663, 0.077561, 
1111 0.076159, 0.071851, 0.074417, 0.076136, 0.069073, 0.075450, 
1112 0.070218, 0.089709, 0.079974, 0.082077, 0.076979, 0.070497, 
1113 0.076296, 0.087347, 0.073508, 0.088073, 0.067186, 0.059898, 
1114 0.085495, 0.100152, 0.079468, 0.093783, 0.082680, 0.077272, 
1115 0.081995, 0.068240, 0.071881, 0.073737, 0.072346, 0.079034, 
1116 0.078721, 0.067518, 0.068196, 0.081738, 0.082814, 0.082480, 
1117 0.069072, 0.066853, 0.081523, 0.073588, 0.082308, 0.091641, 
1118 0.072747, 0.084317, 0.072190, 0.079372, 0.067424, 0.077450, 
1119 0.062343, 0.090708, 0.065470, 0.086588, 0.071172, 0.066705, 
1120 0.070670, 0.070407, 0.096111, 0.066738, 0.081249, 0.072882, 
1121 0.075144, 0.060331, 0.074589, 0.076968, 0.085913, 0.072561, 
1122 0.064645, 0.078742, 0.075670, 0.065984, 0.080932, 0.069898, 
1123 0.065303, 0.096856, 0.057690, 0.065720, 0.066545, 0.068521, 
1124 0.068278, 0.069245, 0.086643, 0.063401, 0.070933, 0.070752, 
1125 0.066978, 0.058891, 0.070073, 0.078031, 0.082691, 0.101414, 
1126 0.075814, 0.072790, 0.057622, 0.093002, 0.084660, 0.079216, 
1127 0.070371, 0.070141, 0.076944, 0.067285, 0.078016, 0.077807, 
1128 0.066668, 0.066459, 0.059962, 0.062774, 0.083450, 0.064554, 
1129 0.067887, 0.064165, 0.072782, 0.067285, 0.052710, 0.096824, 
1130 0.071931, 0.064190, 0.074442, 0.082647, 0.055797, 0.078632, 
1131 0.061116, 0.063092, 0.049131, 0.074517, 0.069915, 0.079021, 
1132 0.088656, 0.101045, 0.090432, 0.076460, 0.067451, 0.071381, 
1133 0.069790, 0.077330, 0.077115, 0.084403, 0.065138, 0.056436, 
1134 0.088024, 0.069893, 0.055985, 0.089655, 0.062911, 0.075311, 
1135 0.086679, 0.093645, 0.068632, 0.064498, 0.057677, 0.081391, 
1136 0.062781, 0.075467, 0.061314, 0.073394, 0.084462, 0.068470, 
1137 0.071267, 0.060556, 0.072487, 0.063785, 0.079164, 0.070406, 
1138 0.073394, 0.063168, 0.066968, 0.064125, 0.063954, 0.072504, 
1139 0.058948, 0.057740, 0.083383, 0.067262};
1140 wDD = 0.098024;
1141 wND = 0.053452;
1142 wSD = -1;
1143
1144     Mmin = bin[0];
1145     Mmax = bin[nbin];
1146     if(M<Mmin || M>Mmax) return kTRUE;
1147
1148     Int_t ibin=nbin-1;
1149     for(Int_t i=1; i<=nbin; i++) 
1150       if(M<=bin[i]) {
1151         ibin=i-1;
1152         //      printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
1153         break;
1154       }
1155     wSD=w[ibin];
1156     return kTRUE;
1157    
1158   }
1159
1160   return kFALSE;
1161 }
1162
1163
1164 //______________________________________________________________________________