+Bool_t AliFMDBackgroundCorrection::AliFMDInputBG::End() {
+
+ Bool_t retval = AliFMDInput::End();
+
+ AliGenEventHeader* genHeader = fLoader->GetHeader()->GenEventHeader();
+ TArrayF vertex;
+ genHeader->PrimaryVertex(vertex);
+
+ if(TMath::Abs(vertex.At(2)) > fZvtxCut)
+ return kTRUE;
+
+ Double_t delta = 2*fZvtxCut/fNvtxBins;
+ Double_t vertexBinDouble = (vertex.At(2) + fZvtxCut) / delta;
+ Int_t vertexBin = Int_t(vertexBinDouble);
+ //Primaries
+ TObjArray* innerArray = static_cast<TObjArray*>(fPrimaryArray.At(0));
+ TObjArray* outerArray = static_cast<TObjArray*>(fPrimaryArray.At(1));
+
+ TH2F* hPrimaryInner = static_cast<TH2F*>(innerArray->At(vertexBin));
+ TH2F* hPrimaryOuter = static_cast<TH2F*>(outerArray->At(vertexBin));
+
+ hPrimaryInner->Add(&fPrimaryMapInner);
+ hPrimaryOuter->Add(&fPrimaryMapOuter);
+
+ //Hits
+ for(UShort_t det=1;det<=3;det++) {
+ Int_t nRings = (det==1 ? 1 : 2);
+ for (UShort_t ir = 0; ir < nRings; ir++) {
+ Char_t ring = (ir == 0 ? 'I' : 'O');
+ UShort_t nsec = (ir == 0 ? 20 : 40);
+ UShort_t nstr = (ir == 0 ? 512 : 256);
+
+ for(UShort_t sec =0; sec < nsec; sec++) {
+
+ for(UShort_t strip = 0; strip < nstr; strip++) {
+
+ if(fHitMap(det,ring,sec,strip) > 0) {
+ //std::cout<<fHitMap.operator()(det,ring,sec,strip)<<std::endl;
+ Double_t x,y,z;
+ AliFMDGeometry* fmdgeo = AliFMDGeometry::Instance();
+ fmdgeo->Detector2XYZ(det,ring,sec,strip,x,y,z);
+
+ Int_t iring = (ring == 'I' ? 0 : 1);
+
+ TObjArray* detArray = static_cast<TObjArray*>(fHitArray.At(det));
+ TObjArray* vtxArray = static_cast<TObjArray*>(detArray->At(iring));
+ TH2F* hHits = static_cast<TH2F*>(vtxArray->At(vertexBin));
+
+ Float_t phi = TMath::ATan2(y,x);
+ if(phi<0) phi = phi+2*TMath::Pi();
+ Float_t r = TMath::Sqrt(TMath::Power(x,2)+TMath::Power(y,2));
+ Float_t theta = TMath::ATan2(r,z-vertex.At(2));
+ Float_t eta = -1*TMath::Log(TMath::Tan(0.5*theta));
+ hHits->Fill(eta,phi,fHitMap.operator()(det,ring,sec,strip));
+ }
+
+ }
+ }
+ }
+ }
+
+ fPrimaryMapInner.Reset();
+ fPrimaryMapOuter.Reset();
+ fHitMap.Reset(0);
+ fLastTrackByStrip.Reset(-1);
+
+ return retval;
+}
+