- gAlice->TreeD()->GetEvent(0);
- TClonesArray *FMDdigits=FMD->Digits();
- Int_t nDigits=FMDdigits->GetEntries();
- cout<<" nDigits "<<nDigits<<endl;
- Int_t RecParticles[6];
- Int_t nRecPart=0 ;
- Int_t ZeroPads=0;
- Int_t NumberOfPads=0; //To avoid warning
- Int_t pedestal;
- Float_t channelWidth=(22400*50)/1024;
- for (Int_t digit=0;digit<nDigits;digit++)
- {
- fmdDigit=(AliFMDdigit*)FMDdigits->UncheckedAt(digit);
- ivol=fmdDigit->Volume();
- iSector=fmdDigit->NumberOfSector();
- iRing=fmdDigit->NumberOfRing();
- pedestal=Int_t(gRandom->Gaus(500,250));
- PadADC[ivol-1][iSector-1][iRing-1]=
- fmdDigit->ADCsignal()
- -Int_t(Float_t(pedestal)/channelWidth);
- if (PadADC[ivol-1][iSector-1][iRing-1]<0)
- PadADC[ivol-1][iSector-1][iRing-1]=0;
- } //digit loop
- Int_t Rmin=0; Int_t Rmax=0; //To avoid warning
- Int_t Smin=0; Int_t Smax=0; //To avoid warning
- AliHeader *header = gAlice->GetHeader();
- AliGenEventHeader* genHeader = header->GenEventHeader();
- TArrayF *o = new TArrayF(3);
- genHeader->PrimaryVertex(*o);
- Float_t zVertex=o->At(2);
- for (ivol=0; ivol<NumVolums; ivol++)
- {
- Float_t realZ=zVertex+z[ivol];
- theta=TMath::ATan(rin[ivol]/TMath::Abs(realZ));
- etain = - TMath::Log( TMath::Tan(theta/2.));
- theta=TMath::ATan(rout[ivol]/TMath::Abs(realZ));
- etaout=- TMath::Log( TMath::Tan(theta/2.));
- NumberOfEtaIntervals[ivol]=Int_t ((etain-etaout)*10);
- eta=etain;
- for (Int_t e1=0;e1<=NumberOfEtaIntervals[ivol];e1++)
- {
- theta = 2.*TMath::ATan (TMath::Exp (-eta));
- Float_t radmin = TMath::Abs(realZ) * (TMath::Tan (theta));
- Rmin= Int_t ( (radmin-rin[ivol])*NumberOfRings[ivol]/(rout[ivol]-rin[ivol]));
- eta=eta-0.1;
- theta = 2.*TMath::ATan (TMath::Exp (-eta));
- rad = TMath::Abs(realZ) * (TMath::Tan (theta));
- Rmax=Int_t( (rad-rin[ivol])*NumberOfRings[ivol]/(rout[ivol]-rin[ivol]));
- ZeroPads=0;
- Smin=0;
- Smax=NumberOfSectors[ivol];
- for (Int_t iring=Rmin; iring<Rmax; iring++)
- {
- NumberOfPads=(Rmax-Rmin)*(Smax-Smin);
- for
- (Int_t isector=1;
- isector<=NumberOfSectors[ivol];
- isector++)
- if(PadADC[ivol][isector-1][iring-1]<zeroADC)
- ZeroPads++;
- } //ring
- Float_t zerosRatio=
- (Float_t)ZeroPads/(Float_t)NumberOfPads;
- RecParticles[0]=ivol;
- RecParticles[1]=Smin;
- RecParticles[2]=Smax;
- RecParticles[3]=Rmin;
- RecParticles[4]=Rmax;
- if (zerosRatio>0.1 ||(ivol==2||ivol==4))
- RecParticles[5]=
- Determination_by_Poisson
- (PadADC,ivol+1,Rmin,Rmax,Smin,Smax);
- else
- RecParticles[5]=
- Determination_by_thresholds
- (PadADC,ivol+1,Rmin,Rmax,Smin,Smax);
- new((*fReconParticles)[nRecPart++])
- AliFMDReconstParticles(RecParticles);
+ plFMD->TreeD()->GetEvent(0);
+
+ Int_t nDigits=fDigits->GetEntries();
+ Int_t recParticles[6];
+ Int_t nRecPart=0 ;
+ Int_t zeroPads=0;
+ Int_t numberOfPads=0;
+ Int_t pedestal;
+ Float_t channelWidth=(22400*50)/1024;
+ for (Int_t digit=0;digit<nDigits;digit++)
+ {
+ fmdDigit=(AliFMDdigit*)fDigits->UncheckedAt(digit);
+ ivol=fmdDigit->Volume();
+ iSector=fmdDigit->NumberOfSector();
+ iRing=fmdDigit->NumberOfRing();
+ pedestal=Int_t(gRandom->Gaus(500,250));
+ padADC= fmdDigit->ADCsignal()
+ -Int_t(Float_t(pedestal)/channelWidth);
+ if (padADC<0) padADC=0;
+ hTotal[ivol]->Fill(iSector,iRing,padADC);
+ } //digit loop
+
+ //reconstruct multiplicity in 0.1 eta according Poisson distribution
+
+ Int_t rmin=0; Int_t rmax=0;
+ Int_t smin=0; Int_t smax=0;
+ for (ivol=0; ivol<knumVolumes; ivol++)
+ {
+ Float_t ring2number=Float_t (numberOfRings[ivol])/
+ (rout[ivol]-rin[ivol]);
+ Float_t realZ=zVertex+z[ivol];
+ theta=TMath::ATan(rout[ivol]/TMath::Abs(realZ));
+ etain = - TMath::Log( TMath::Tan(theta/2.));
+ theta=TMath::ATan(rin[ivol]/TMath::Abs(realZ));
+ etaout=- TMath::Log( TMath::Tan(theta/2.));
+ numberOfEtaIntervals[ivol]=Int_t((etaout-etain)*10)-1;
+ eta=etain;
+ for (Int_t e1=0;e1<=numberOfEtaIntervals[ivol];e1++)
+ {
+ theta = 2.*TMath::ATan (TMath::Exp (-eta));
+ Float_t radmin = TMath::Abs(realZ) * (TMath::Tan (theta));
+ rmax= Int_t ( (radmin-rin[ivol])*ring2number+0.5);
+ eta=eta+0.1;
+ theta = 2.*TMath::ATan (TMath::Exp (-eta));
+ rad = TMath::Abs(realZ) * (TMath::Tan (theta));
+ rmin=Int_t( (rad-rin[ivol])*ring2number+0.5);
+
+ zeroPads=0;
+ smin=0;
+ smax=numberOfSectors[ivol];
+ numberOfPads=(rmax-rmin)*(smax-smin);
+ for (Int_t iring=rmin; iring<rmax; iring++)
+ {
+ for
+ (Int_t isector=0;
+ isector<numberOfSectors[ivol];
+ isector++)
+ {
+ if(hTotal[ivol+1]->GetBinContent(isector+1,iring+1)
+ <zeroADC) zeroPads++;}
+
+ } //ring
+ Float_t numberOfPads=Float_t(smax-smin)*Float_t(rmax-rmin);
+
+ Double_t lambda=-TMath::Log(Double_t(zeroPads)/numberOfPads);
+ Int_t fRecon=Int_t (lambda*numberOfPads+0.5);
+ recParticles[0]=ivol+1;
+ recParticles[1]=smin;
+ recParticles[2]=smax;
+ recParticles[3]=rmin;
+ recParticles[4]=rmax;
+ recParticles[5]= fRecon;
+ new((*fReconParticles)[nRecPart++]) AliFMDReconstParticles(recParticles);
+
+