]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSclusterTable.cxx
Fix for the bug coming from currend SPD simulation: coupling may mess up the ditis...
[u/mrichter/AliRoot.git] / ITS / AliITSclusterTable.cxx
index 27734c49288da9b1e1c3f2e1e5e9c18dc59fc6bf..96780d4b50ec09f906ca6555bb6a1d8f603a572e 100644 (file)
 
 #include <stdlib.h>
 #include "AliITSclusterTable.h"
-#include "AliITSclusterV2.h"
-#include "AliITSgeom.h"
-#include "AliITStrackerSA.h"
-#include<TBranch.h>
-#include<TClonesArray.h>
-#include<TTree.h>
 ClassImp(AliITSclusterTable)
 
-//__________________________________________________________
-AliITSclusterTable::AliITSclusterTable(){
-// Default constructor
-  fDet=0;
-  fNCl = 0;
-  fLbl=0;
-  fGeom = 0;
-  fTracker = 0;
-  fPhiList = 0; 
-  fLambdaList = 0;
-  fXList = 0;
-  fYList =0;
-  fZList =0;
-  fSxList = 0;
-  fSyList =0;
-  fSzList =0;
-  for(Int_t i=0;i<3;i++){fPrimaryVertex[i]=0;}
-}
-
-//__________________________________________________________
-AliITSclusterTable::AliITSclusterTable(AliITSgeom* geom, AliITStrackerSA* tracker,Double_t* primaryVertex) {
-// Standard constructor
-  fDet=0;
-  Int_t nm = geom->GetIndexMax();
-  fNCl = new Int_t[nm];
-  for(Int_t i=0;i<nm;i++){fNCl[i]=0;}
-  fLbl=0;
-  fGeom = geom;
-  fTracker = tracker;
-  for(Int_t i=0;i<3;i++){fPrimaryVertex[i]=primaryVertex[i];}
-  fPhiList = 0;
-  fLambdaList = 0;
-  fXList = 0;
-  fYList = 0;
-  fZList =0;
-  fSxList = 0;
-  fSyList =0;
-  fSzList =0;
-}
-
-//______________________________________________________________________
-AliITSclusterTable::AliITSclusterTable(const AliITSclusterTable &tab) : 
-                    TObject(tab) {
-  // Copy constructor
-  // Copies are not allowed. The method is protected to avoid misuse.
-  Error("AliITSclusterTable","Copy constructor not allowed\n");
-}
-
-//______________________________________________________________________
-AliITSclusterTable& AliITSclusterTable::operator=(const 
-                    AliITSclusterTable& /* tab */){
-  // Assignment operator
-  // Assignment is not allowed. The method is protected to avoid misuse.
-  Error("= operator","Assignment operator not allowed\n");
-  return *this;
-}
-
-//__________________________________________________________
-AliITSclusterTable::~AliITSclusterTable(){
-// Destructor
-  Int_t nm = fGeom->GetIndexMax();
-  if(fDet){
-    for (Int_t i=0; i<nm; i++){
-      delete fDet[i];
-    }
-    delete[] fDet;
-  }
-  if (fLbl)delete [] fLbl; // memory leak!
-  if (fNCl)delete [] fNCl;
-  for (Int_t i = 0; i < fGeom->GetNlayers(); i++) {
-    if (fPhiList) delete fPhiList[i];
-    if (fLambdaList) delete fLambdaList[i];
-    if (fXList) delete fXList[i];
-    if (fYList) delete fYList[i];
-    if (fZList) delete fZList[i];
-    if (fSxList) delete fSxList[i];
-    if (fSyList) delete fSyList[i];
-    if (fSzList) delete fSzList[i];
-  }
-  if (fPhiList) delete[] fPhiList;
-  if (fLambdaList) delete[] fLambdaList;
-  if (fXList) delete[] fXList;
-  if (fYList) delete[] fYList;
-  if (fZList) delete[] fZList;
-  if (fSxList) delete[] fSxList;
-  if (fSyList) delete[] fSyList;
-  if (fSzList) delete[] fSzList;
-}
-
-//__________________________________________________________
-
-void AliITSclusterTable::FillArray(TTree* clusterTree){
-  
-  //
-  Int_t nm = fGeom->GetIndexMax();
-  fDet = new TArrayI*[nm];
-
-  TArrayI** vect = new TArrayI*[fGeom->GetNlayers()];
-  
-  Int_t * firstmod = new Int_t[fGeom->GetNlayers()+1];
-  firstmod[fGeom->GetNlayers()]=fGeom->GetIndexMax();  // upper limit
-  for(Int_t nlayer=0;nlayer<fGeom->GetNlayers();nlayer++){
-    firstmod[nlayer] = fGeom->GetModuleIndex(nlayer+1,1,1);
-    Int_t ncl = fTracker->GetNumberOfClustersLayer(nlayer);
-    vect[nlayer]=new TArrayI(ncl); 
-    for(Int_t j=0;j<ncl;j++){
-      AliITSclusterV2* cl = fTracker->GetClusterLayer(nlayer,j);
-      vect[nlayer]->AddAt(cl->GetDetectorIndex()+firstmod[nlayer],j);
-    }
-  }
-    
-  TBranch *brancht=(TBranch*)clusterTree->GetBranch("Clusters");
-  if(!brancht) Warning("FillArray","No cluster branch");
-  TClonesArray* clus = new TClonesArray("AliITSclusterV2",10000);
-  brancht->SetAddress(&clus);
-  
-  for(Int_t mod=0;mod<nm;mod++){
-    Int_t nc=0;
-    clusterTree->GetEvent(mod);
-    Int_t ncl = clus->GetEntries();
-    fDet[mod] = new TArrayI(ncl);
-    fNCl[mod]= ncl;
-    Int_t nlr = FindIndex(fGeom->GetNlayers(),firstmod,mod);
-    if(nlr<0){
-      Fatal("FillArray","Wrong module number %d . Limits: %d , %d",mod,firstmod[0],firstmod[fGeom->GetNlayers()+1]);
-      exit(1);
-    }
-    else {
-      for(Int_t n=0;n<vect[nlr]->GetSize();n++){
-       Int_t mm=vect[nlr]->At(n);
-       if(mm==mod) {fDet[mod]->AddAt(n,nc); nc+=1; }
-      }
-    }
-  }
-
-
-  clus->Delete();
-  delete clus;
-  for(Int_t n=0;n<fGeom->GetNlayers();n++)delete vect[n];
-  delete [] vect;
-  delete [] firstmod;
-}
-
-//_________________________________________________________________
-void AliITSclusterTable::FillArrayLabel(Int_t numberofparticles){
-  //
-
-
-  fLbl = new TArrayI*[numberofparticles];
-  const Int_t knm =fGeom->GetNlayers();
-  for(Int_t nlab=0;nlab<numberofparticles;nlab++){
-    fLbl[nlab] = new TArrayI(knm);
-    Int_t * nn = new Int_t[knm]; 
-    for(Int_t i=0;i<knm;i++)nn[i]=0;
-    for(Int_t nlayer=0;nlayer<knm;nlayer++){
-      Int_t ncl = fTracker->GetNumberOfClustersLayer(nlayer);
-      while(ncl--){
-       AliITSclusterV2* cl = fTracker->GetClusterLayer(nlayer,ncl);
-       if(cl->IsUsed()==1) continue;
-       if(cl->GetLabel(0)==nlab || cl->GetLabel(1)==nlab || cl->GetLabel(2)==nlab){
-         nn[nlayer]+=1;
-         cl->Use();
-         break;
-       }
-      }     
-      fLbl[nlab]->AddAt(nn[nlayer],nlayer);
-    }
-    delete [] nn;
-  }
-
-}
-
 //_______________________________________________________________
-Int_t AliITSclusterTable::ThisParticleIsTrackable(Int_t label,Int_t numberofpoints){
-
-  //Returns 1 if particle with label "label" is trackable. 
-   
-  Int_t nb=0;
-  for(Int_t i=0;i<fGeom->GetNlayers();i++){
-    Int_t ncl = fLbl[label]->At(i);
-    if(ncl>0) nb++;
-  }
-  if(nb>=numberofpoints) return 1;
-  else return 0;
+AliITSclusterTable::AliITSclusterTable():TObject(),
+fOrInd(0),
+fX(0),
+fY(0),
+fZ(0),
+fSx(0),
+fSy(0),
+fSz(0),
+fPhi(0),
+fLam(0){
+  //Default constructor
 
 }
-
 //_______________________________________________________________
-Int_t AliITSclusterTable::FindIndex(Int_t ndim, Int_t *ptr, Int_t value){
-// ptr[ndim+1] is an array of integers
-// ndim is its dimension minus 1
-// value is a number such as:  ptr[0]<=value < ptr[ndim]
-// if ptr[i]<=value<ptr[i+1] the index i is returned;  -1 if out of bounds
-  Int_t retval = -1;
-  for(Int_t k=0;k<ndim;k++){
-    if(value>=ptr[k] && value <ptr[k+1]){
-      retval = k;
-      break;
-    }
-  }
-  return retval;
-}
+AliITSclusterTable::AliITSclusterTable(Double_t x, Double_t y, Double_t z, Double_t sx, Double_t sy, Double_t sz, Double_t phi, Double_t lambda, Int_t index):
+fOrInd(index),
+fX(x),
+fY(y),
+fZ(z),
+fSx(sx),
+fSy(sy),
+fSz(sz),
+fPhi(phi),
+fLam(lambda){
+  //Default constructor
 
-void AliITSclusterTable::FillArrayCoorAngles(){
-  //Fill arrays with phi,lambda and indices of clusters for each layer
-  Info("FillArrayCoorAngles","Filling Array...");
-
-  fPhiList = new TArrayD*[fGeom->GetNlayers()];
-  fLambdaList = new TArrayD*[fGeom->GetNlayers()];
-  fXList = new TArrayD*[fGeom->GetNlayers()];
-  fYList = new TArrayD*[fGeom->GetNlayers()];
-  fZList = new TArrayD*[fGeom->GetNlayers()];
-  fSxList = new TArrayD*[fGeom->GetNlayers()];
-  fSyList = new TArrayD*[fGeom->GetNlayers()];
-  fSzList = new TArrayD*[fGeom->GetNlayers()];
-
-  Int_t * firstmod = new Int_t[fGeom->GetNlayers()+1];
-  firstmod[fGeom->GetNlayers()]=fGeom->GetIndexMax();  // upper limit
-
-  for(Int_t nlay=0;nlay<fGeom->GetNlayers();nlay++){
-    firstmod[nlay] = fGeom->GetModuleIndex(nlay+1,1,1);
-    Int_t ncl = fTracker->GetNumberOfClustersLayer(nlay);
-    fPhiList[nlay] = new TArrayD(ncl);
-    fLambdaList[nlay]=new TArrayD(ncl);
-    fXList[nlay]=new TArrayD(ncl);
-    fYList[nlay]=new TArrayD(ncl);
-    fZList[nlay]=new TArrayD(ncl);
-    fSxList[nlay]=new TArrayD(ncl);
-    fSyList[nlay]=new TArrayD(ncl);
-    fSzList[nlay]=new TArrayD(ncl);
-
-    for(Int_t j=0;j<ncl;j++){
-      AliITSclusterV2* cl = fTracker->GetClusterLayer(nlay,j);
-      Double_t phi=0;Double_t lambda=0;
-      Double_t x=0;Double_t y=0;Double_t z=0;
-      Double_t sx=0;Double_t sy=0;Double_t sz=0;
-      Int_t module = cl->GetDetectorIndex()+firstmod[nlay];
-      GetCoorAngles(cl,module,phi,lambda,x,y,z);
-      GetCoorErrors(cl,module,sx,sy,sz);
-      fPhiList[nlay]->AddAt(phi,j);
-      fLambdaList[nlay]->AddAt(lambda,j);
-      fXList[nlay]->AddAt(x,j);
-      fYList[nlay]->AddAt(y,j);
-      fZList[nlay]->AddAt(z,j);
-      fSxList[nlay]->AddAt(sx,j);
-      fSyList[nlay]->AddAt(sy,j);
-      fSzList[nlay]->AddAt(sz,j);
-      
-    }
-    
-  }
-  
-  delete [] firstmod;
 }
 
-void AliITSclusterTable::GetCoorAngles(AliITSclusterV2* cl,Int_t module,Double_t &phi,Double_t &lambda, Double_t &x, Double_t &y,Double_t &z){
-  //Returns values of phi (azimuthal) and lambda angles for a given cluster
-  
-  Double_t rot[9];     fGeom->GetRotMatrix(module,rot);
-  Int_t lay,lad,det; fGeom->GetModuleId(module,lay,lad,det);
-  Float_t tx,ty,tz;  fGeom->GetTrans(lay,lad,det,tx,ty,tz);     
-
-  Double_t alpha=TMath::ATan2(rot[1],rot[0])+TMath::Pi();
-  Double_t phi1=TMath::Pi()/2+alpha;
-  if (lay==1) phi1+=TMath::Pi();
 
-  Double_t cp=TMath::Cos(phi1), sp=TMath::Sin(phi1);
-  Double_t r=tx*cp+ty*sp;
-
-  x= r*cp - cl->GetY()*sp;
-  y= r*sp + cl->GetY()*cp;
-  z=cl->GetZ();
-  
-  phi=TMath::ATan2(y,x);
-  lambda=TMath::ATan2(z-fPrimaryVertex[2],TMath::Sqrt((x-fPrimaryVertex[0])*(x-fPrimaryVertex[0])+(y-fPrimaryVertex[1])*(y-fPrimaryVertex[1])));
-}
-
-void AliITSclusterTable::GetCoorErrors(AliITSclusterV2* cl, Int_t module,Double_t &sx,Double_t &sy, Double_t &sz){
-
-  //returns x,y,z of cluster in global coordinates
-
-  Double_t rot[9];     fGeom->GetRotMatrix(module,rot);
-  Int_t lay,lad,det; fGeom->GetModuleId(module,lay,lad,det);
-  Double_t alpha=TMath::ATan2(rot[1],rot[0])+TMath::Pi();
-  Double_t phi=TMath::Pi()/2+alpha;
-  if (lay==1) phi+=TMath::Pi();
-
-  Double_t cp=TMath::Cos(phi), sp=TMath::Sin(phi);
-
-  sx = TMath::Sqrt(sp*sp*cl->GetSigmaY2());
-  sy = TMath::Sqrt(cp*cp*cl->GetSigmaY2());
-  sz = TMath::Sqrt(cl->GetSigmaZ2());
-
-}