+ Int_t nElements = fTpcGrid->GetNEntries();
+ Float_t eta = 0., phi = 0., Deta = 0., Dphi = 0.;
+ if(fArrayInitialised) fUnitArray->Delete();
+
+ if(fTpcGrid->GetGridType()==0)
+ { // Fill the following quantities :
+ // Good track ID, (Eta,Phi) position ID, eta, phi, energy, px, py, pz, Deta, Dphi,
+ // detector flag, in/out jet, pt cut, mass, cluster ID)
+ for(Int_t nBin = 1; nBin < nElements+1; nBin++)
+ {
+ // fTpcGrid->GetEtaPhiFromIndex2(nBin,eta,phi);
+ fTpcGrid->GetEtaPhiFromIndex2(nBin,phi,eta);
+ phi = ((phi < 0) ? phi + 2. * TMath::Pi() : phi);
+ Deta = fTpcGrid->GetDeta();
+ Dphi = fTpcGrid->GetDphi();
+ new ((*fUnitArray)[nBin-1]) AliJetUnitArray(nBin-1,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ }
+
+ if(fTpcGrid->GetGridType()==1)
+ {
+ Int_t nGaps = 0;
+ Int_t n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0;
+
+ if(fDZ)
+ {
+ // Define a grid of cell for the gaps between SM
+ Double_t phimin0 = 0., phimin1 = 0., phimin2 = 0., phimin3 = 0., phimin4 = 0.;
+ Double_t phimax0 = 0., phimax1 = 0., phimax2 = 0., phimax3 = 0., phimax4 = 0.;
+ fGeom->GetPhiBoundariesOfSMGap(0,phimin0,phimax0);
+ fGrid0 = new AliJetGrid(0,95,phimin0,phimax0,-0.7,0.7); // 0.015 x 0.015
+ fGrid0->SetGridType(0);
+ fGrid0->SetMatrixIndexes();
+ fGrid0->SetIndexIJ();
+ n0 = fGrid0->GetNEntries();
+ fGeom->GetPhiBoundariesOfSMGap(1,phimin1,phimax1);
+ fGrid1 = new AliJetGrid(0,95,phimin1,phimax1,-0.7,0.7); // 0.015 x 0.015
+ fGrid1->SetGridType(0);
+ fGrid1->SetMatrixIndexes();
+ fGrid1->SetIndexIJ();
+ n1 = fGrid1->GetNEntries();
+ fGeom->GetPhiBoundariesOfSMGap(2,phimin2,phimax2);
+ fGrid2 = new AliJetGrid(0,95,phimin2,phimax2,-0.7,0.7); // 0.015 x 0.015
+ fGrid2->SetGridType(0);
+ fGrid2->SetMatrixIndexes();
+ fGrid2->SetIndexIJ();
+ n2 = fGrid2->GetNEntries();
+ fGeom->GetPhiBoundariesOfSMGap(3,phimin3,phimax3);
+ fGrid3 = new AliJetGrid(0,95,phimin3,phimax3,-0.7,0.7); // 0.015 x 0.015
+ fGrid3->SetGridType(0);
+ fGrid3->SetMatrixIndexes();
+ fGrid3->SetIndexIJ();
+ n3 = fGrid3->GetNEntries();
+ fGeom->GetPhiBoundariesOfSMGap(4,phimin4,phimax4);
+ fGrid4 = new AliJetGrid(0,95,phimin4,phimax4,-0.7,0.7); // 0.015 x 0.015
+ fGrid4->SetGridType(0);
+ fGrid4->SetMatrixIndexes();
+ fGrid4->SetIndexIJ();
+ n4 = fGrid4->GetNEntries();
+
+ if(fDebug>1)
+ {
+ cout << "n0 cells: " << n0 << "phimin0: " << phimin0 << ", phimax0: " << phimax0 << endl;
+ cout << "n1 cells: " << n1 << "phimin1: " << phimin1 << ", phimax1: " << phimax1 << endl;
+ cout << "n2 cells: " << n2 << "phimin2: " << phimin2 << ", phimax2: " << phimax2 << endl;
+ cout << "n3 cells: " << n3 << "phimin3: " << phimin3 << ", phimax3: " << phimax3 << endl;
+ cout << "n4 cells: " << n4 << "phimin4: " << phimin4 << ", phimax4: " << phimax4 << endl;
+ }
+
+ nGaps = n0+n1+n2+n3+n4;
+
+ }
+
+ for(Int_t nBin = 0; nBin < fNumUnits+nElements+nGaps; nBin++)
+ {
+ if(nBin<fNumUnits)
+ {
+ fGeom->EtaPhiFromIndex(nBin, eta, phi); // From EMCal geometry
+ // fEmcalGrid->GetEtaPhiFromIndex2(nBin,phi,eta); // My function from Grid
+ phi = ((phi < 0) ? phi + 2. * TMath::Pi() : phi);
+ Deta = fEmcalGrid->GetDeta(); // Modify with the exact detector values
+ Dphi = fEmcalGrid->GetDphi(); // Modify with the exact detector values
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else {
+ if(nBin>=fNumUnits && nBin<fNumUnits+nElements){
+ fTpcGrid->GetEtaPhiFromIndex2(nBin+1-fNumUnits,phi,eta);
+ phi = ((phi < 0) ? phi + 2. * TMath::Pi() : phi);
+ Deta = fTpcGrid->GetDeta();
+ Dphi = fTpcGrid->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else {
+ if(fDZ) {
+ if(nBin>=fNumUnits+nElements && nBin<fNumUnits+nElements+nGaps){
+ if(nBin<fNumUnits+nElements+n0)
+ {
+ Float_t phi = eta = 0.;
+ fGrid0->GetEtaPhiFromIndex2(nBin+1-(fNumUnits+nElements),phi,eta);
+ Deta = fGrid0->GetDeta();
+ Dphi = fGrid0->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else if(nBin>=fNumUnits+nElements+n0 && nBin<fNumUnits+nElements+n0+n1)
+ {
+ Float_t phi = eta = 0.;
+ fGrid1->GetEtaPhiFromIndex2(nBin+1-(fNumUnits+nElements+n0),phi,eta);
+ Deta = fGrid1->GetDeta();
+ Dphi = fGrid1->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else if(nBin>=fNumUnits+nElements+n0+n1 && nBin<fNumUnits+nElements+n0+n1+n2)
+ {
+ Float_t phi = eta = 0.;
+ fGrid2->GetEtaPhiFromIndex2(nBin+1-(fNumUnits+nElements+n0+n1),phi,eta);
+ Deta = fGrid2->GetDeta();
+ Dphi = fGrid2->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else if(nBin>=fNumUnits+nElements+n0+n1+n2 && nBin<fNumUnits+nElements+n0+n1+n2+n3)
+ {
+ Float_t phi = eta = 0.;
+ fGrid3->GetEtaPhiFromIndex2(nBin+1-(fNumUnits+nElements+n0+n1+n2),phi,eta);
+ Deta = fGrid3->GetDeta();
+ Dphi = fGrid3->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ else if(nBin>=fNumUnits+nElements+n0+n1+n2+n3 && nBin<fNumUnits+nElements+nGaps)
+ {
+ Float_t phi = eta = 0.;
+ fGrid4->GetEtaPhiFromIndex2(nBin+1-(fNumUnits+nElements+n0+n1+n2+n3),phi,eta);
+ Deta = fGrid4->GetDeta();
+ Dphi = fGrid4->GetDphi();
+ new ((*fUnitArray)[nBin]) AliJetUnitArray(nBin,0,eta,phi,0.,0.,0.,0.,Deta,Dphi,kTpc,kOutJet,kPtSmaller,0.,-1);
+ }
+ }
+ } // end if(fDZ)
+ } // end else 2
+ } // end else 1
+ } // end loop on nBin
+ } // end grid type == 1
+ fArrayInitialised = 1;