ITS cluster-finders (V2) and trackers (V2 and MI) are now initialized from the new...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Mar 2007 14:30:37 +0000 (14:30 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Mar 2007 14:30:37 +0000 (14:30 +0000)
13 files changed:
HLT/ITS/AliHLTITStracker.h
ITS/AliITSClusterFinder.cxx
ITS/AliITSClusterFinder.h
ITS/AliITSClusterFinderV2.cxx
ITS/AliITSClusterFinderV2.h
ITS/AliITSClusterFinderV2SPD.cxx
ITS/AliITSClusterFinderV2SPD.h
ITS/AliITSClusterFinderV2SSD.cxx
ITS/AliITStrackerMI.cxx
ITS/AliITStrackerMI.h
ITS/AliITStrackerV2.cxx
ITS/AliITStrackerV2.h
MONITOR/monitorGDC.cxx

index ba6a728..d6bfe61 100644 (file)
 #include "AliITStrackerV2.h"
 
 class AliESD;
-class AliITSgeomTGeo;
 class AliHLTITStrack;
 
 //-------------------------------------------------------------------------
 class AliHLTITStracker : public AliITStrackerV2 {
 public:
   AliHLTITStracker():AliITStrackerV2(){ fConstraint[0]=1; fConstraint[1]=0; }
-  AliHLTITStracker(const AliITSgeomTGeo *geom) : AliITStrackerV2(geom){ fConstraint[0]=1; fConstraint[1]=0; }
+  AliHLTITStracker(const Char_t *geom) : AliITStrackerV2(geom){ fConstraint[0]=1; fConstraint[1]=0; }
 
   Int_t Clusters2Tracks(AliESD *event);
   Int_t PropagateBack(AliESD *event);
index 3855d6f..e4306ea 100644 (file)
@@ -25,6 +25,7 @@
 #include "AliITSdigit.h"
 #include "AliITSDetTypeRec.h"
 #include "AliITSMap.h"
+#include "AliITSgeomTGeo.h"
 
 ClassImp(AliITSClusterFinder)
 
@@ -152,27 +153,16 @@ AliITSClusterFinder::~AliITSClusterFinder(){
 }
 //__________________________________________________________________________
 void AliITSClusterFinder::InitGeometry(){
-
-
- //Initialisation of ITS geometry
-  if(!fDetTypeRec->GetITSgeom()) {
-    Error("InitGeometry","ITS geom is null!");
-    return;
-  }
-  Int_t mmax=fDetTypeRec->GetITSgeom()->GetIndexMax();
-  if (mmax>2200) {
-    Fatal("AliITSClusterFinder","Too many ITS subdetectors !"); 
-  }
-  Int_t m;
-  for (m=0; m<mmax; m++) {
-    Int_t lay,lad,det; fDetTypeRec->GetITSgeom()->GetModuleId(m,lay,lad,det);
-    Float_t x,y,z;     fDetTypeRec->GetITSgeom()->GetTrans(lay,lad,det,x,y,z); 
-    Double_t rot[9];   fDetTypeRec->GetITSgeom()->GetRotMatrix(lay,lad,det,rot);
-    Double_t alpha=TMath::ATan2(rot[1],rot[0])+TMath::Pi();
-    Double_t ca=TMath::Cos(alpha), sa=TMath::Sin(alpha);
-    fYshift[m] = x*ca + y*sa;
-    fZshift[m] = (Double_t)z;
-    fNdet[m] = (lad-1)*fDetTypeRec->GetITSgeom()->GetNdetectors(lay) + (det-1);
+ //
+ // Initialisation of ITS geometry
+ //
+  Int_t mmax=AliITSgeomTGeo::GetNModules();
+  for (Int_t m=0; m<mmax; m++) {
+    Int_t lay,lad,det; AliITSgeomTGeo::GetModuleId(m,lay,lad,det);
+    const TGeoHMatrix *tm=AliITSgeomTGeo::GetTracking2LocalMatrix(m);
+    fYshift[m] = (tm->Inverse()).GetTranslation()[1];
+    fZshift[m] = (tm->Inverse()).GetTranslation()[2];
+    fNdet[m] = (lad-1)*AliITSgeomTGeo::GetNDetectors(lay) + (det-1);
     fNlayer[m] = lay-1;
   }
 }
index eb52a92..76cd75a 100644 (file)
@@ -19,7 +19,6 @@ class AliITSMap;
 class AliITSresponse;
 class AliITSsegmentation;
 class AliITSRawCluster;
-class AliITSgeom;
 class AliITSdigit;
 class AliITSRecPoint;
 class AliITSDetTypeRec;
index 0a1cd6a..c12045d 100644 (file)
@@ -23,8 +23,8 @@
 #include "AliRun.h"
 #include "AliITSClusterFinderV2.h"
 #include "AliITSRecPoint.h"
+#include "AliITSgeomTGeo.h"
 #include "AliITSDetTypeRec.h"
-//#include "AliITSgeom.h"
 #include <TParticle.h>
 #include "AliMC.h"
 
@@ -33,11 +33,9 @@ ClassImp(AliITSClusterFinderV2)
 extern AliRun *gAlice;
 
 AliITSClusterFinderV2::AliITSClusterFinderV2(AliITSDetTypeRec* dettyp):AliITSClusterFinder(dettyp),
-fNModules(0),
+fNModules(AliITSgeomTGeo::GetNModules()),
 fEvent(0){
-
   //Default constructor
-  fNModules = dettyp->GetITSgeom()->GetIndexMax();
 }
 /*
 //______________________________________________________________________
index a765aaa..d4c74c0 100644 (file)
@@ -11,7 +11,6 @@
 
 class AliITSRecPoint;
 class AliRawReader;
-class AliITSgeom;
 
 class AliITSClusterFinderV2 : public AliITSClusterFinder {
 public:
index c0f11d4..3fe8cb9 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "AliITSClusterFinderV2SPD.h"
 #include "AliITSRecPoint.h"
+#include "AliITSgeomTGeo.h"
 #include "AliITSDetTypeRec.h"
 #include "AliRawReader.h"
 #include "AliITSRawStreamSPD.h"
 
 ClassImp(AliITSClusterFinderV2SPD)
 
-extern AliRun *gAlice;
-
 AliITSClusterFinderV2SPD::AliITSClusterFinderV2SPD(AliITSDetTypeRec* dettyp):AliITSClusterFinderV2(dettyp),
-fLastSPD1(0),
+fLastSPD1(AliITSgeomTGeo::GetModuleIndex(2,1,1)-1),
 fNySPD(256),
 fNzSPD(160),
 fYpitchSPD(0.0050),
@@ -44,7 +43,6 @@ fHlSPD(3.48){
 
   //Default constructor
 
-  fLastSPD1=fDetTypeRec->GetITSgeom()->GetModuleIndex(2,1,1)-1;
   fYSPD[0]=0.5*fYpitchSPD;
   for (Int_t m=1; m<fNySPD; m++) fYSPD[m]=fYSPD[m-1]+fYpitchSPD; 
   fZSPD[0]=fZ1pitchSPD;
@@ -190,8 +188,10 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T
        y -= fHwSPD;
        z -= fHlSPD;
        Float_t hit[5]; //y,z,sigma(y)^2, sigma(z)^2, charge
-       hit[0] = -(-y+fYshift[iModule]);
-       if(iModule <= fLastSPD1) hit[0] = -hit[0];
+
+       if (iModule <= fLastSPD1) hit[0] = -y+fYshift[iModule];
+        else hit[0] = y+fYshift[iModule];
+
        hit[1] = -z+fZshift[iModule];
        hit[2] = fYpitchSPD*fYpitchSPD/12.;
        hit[3] = fZ1pitchSPD*fZ1pitchSPD/12.;
index a6be455..205ef4b 100644 (file)
@@ -14,7 +14,6 @@
 class TClonesArray;
 class AliRawReader;
 class AliITSRawStream;
-class AliITSgeom;
 
 class AliITSClusterFinderV2SPD : public AliITSClusterFinderV2 {
 public:
index 5dd5452..25b19c8 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "AliITSClusterFinderV2SSD.h"
 #include "AliITSRecPoint.h"
+#include "AliITSgeomTGeo.h"
 #include "AliITSDetTypeRec.h"
 #include "AliRawReader.h"
 #include "AliITSRawStreamSSD.h"
@@ -32,7 +33,7 @@ ClassImp(AliITSClusterFinderV2SSD)
 
 
 AliITSClusterFinderV2SSD::AliITSClusterFinderV2SSD(AliITSDetTypeRec* dettyp):AliITSClusterFinderV2(dettyp),
-fLastSSD1(0),
+fLastSSD1(AliITSgeomTGeo::GetModuleIndex(6,1,1)-1),
 fYpitchSSD(0.0095),
 fHwSSD(3.65),
 fHlSSD(2.00),
@@ -41,8 +42,6 @@ fTanN(0.0075){
 
   //Default constructor
 
-  fLastSSD1=fDetTypeRec->GetITSgeom()->GetModuleIndex(6,1,1)-1;
-
 }
  
 
index 3ec35bf..9cf7090 100644 (file)
@@ -61,7 +61,7 @@ fDebugStreamer(0){
 }
 
 
-AliITStrackerMI::AliITStrackerMI(const AliITSgeomTGeo *geom) : AliTracker(),
+AliITStrackerMI::AliITStrackerMI(const Char_t *geom) : AliTracker(),
 fI(kMaxLayer),
 fBestTrack(),
 fTrackToFollow(),
@@ -108,19 +108,16 @@ fDebugStreamer(0){
     for (Int_t j=1; j<nlad+1; j++) {
       for (Int_t k=1; k<ndet+1; k++) { //Fill this layer with detectors
         TGeoHMatrix m; AliITSgeomTGeo::GetOrigMatrix(i,j,k,m);
-        Double_t *xyz=m.GetTranslation(), x=xyz[0], y=xyz[1];
-        Double_t *rot=m.GetRotationMatrix(); 
-
-        Double_t phi=TMath::ATan2(rot[1],rot[0])+TMath::Pi();
-        phi+=TMath::Pi()/2;
-        if (i==1) phi+=TMath::Pi();
+        const TGeoHMatrix *tm=AliITSgeomTGeo::GetTracking2LocalMatrix(i,j,k);
+        m.Multiply(tm);
+        Double_t txyz[3]={0.}, xyz[3]={0.};
+        m.LocalToMaster(txyz,xyz);
+        Double_t r=TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
+        Double_t phi=TMath::ATan2(xyz[1],xyz[0]);
 
         if (phi<0) phi+=TMath::TwoPi();
         else if (phi>=TMath::TwoPi()) phi-=TMath::TwoPi();
 
-        Double_t cp=TMath::Cos(phi), sp=TMath::Sin(phi);
-        Double_t r=x*cp+y*sp;
-
         AliITSdetector &det=fgLayers[i-1].GetDetector((j-1)*ndet + k-1); 
         new(&det) AliITSdetector(r,phi); 
       } 
@@ -212,17 +209,30 @@ Int_t AliITStrackerMI::LoadClusters(TTree *cTree) {
       if (!cTree->GetEvent(j)) continue;
       Int_t ncl=clusters->GetEntriesFast();
       SignDeltas(clusters,GetZ());
+      //*** The Delta transformation
+      TGeoHMatrix delta; 
+      AliITSgeomTGeo::GetTrackingMatrix(j,delta);
+      TGeoHMatrix m;
+      AliITSgeomTGeo::GetOrigMatrix(j,m);
+      delta.MultiplyLeft(&(m.Inverse()));
+      const TGeoHMatrix *tm = AliITSgeomTGeo::GetTracking2LocalMatrix(j);
+      delta.MultiplyLeft(&(tm->Inverse())); 
+      //***
+
       while (ncl--) {
         AliITSRecPoint *c=(AliITSRecPoint*)clusters->UncheckedAt(ncl);
 
-       detector = c->GetDetectorIndex();
-        AliITSdetector &det=fgLayers[i].GetDetector(detector);
-   
-        //Shift the cluster to the misaligned position (temporary solution)
-        Double_t x=det.GetR();
-        if      (i==0) x-=0.0075; 
-        else if (i==1) x+=0.0075;
-        c->SetX(x);           
+        //*** Shift the cluster to the misaligned position
+        Double_t  xyz[3]={c->GetX(),c->GetY(),c->GetZ()};
+        Double_t mxyz[3]={0.};                    
+        
+        delta.LocalToMaster(xyz,mxyz);
+
+        c->SetX(mxyz[0]);
+        c->AliCluster::SetY(mxyz[1]);
+        c->AliCluster::SetZ(mxyz[2]);
+       //***
 
         fgLayers[i].InsertCluster(new AliITSRecPoint(*c));
       }
@@ -3255,9 +3265,12 @@ Int_t    AliITStrackerMI::UpdateMI(AliITStrackMI* track, const AliITSRecPoint* c
     track->SetdEdxMismatch(track->GetdEdxMismatch()+(0.5-track->GetNormQ(layer)/track->GetExpQ())*10.);
   }
 
-  if (cl->GetQ()>0)  // ingore the "virtual" clusters
-     if (!track->PropagateTo(cl->GetX(),0.,0.)) return 0; // Alignment
+  if (cl->GetQ()<=0) return 0;  // ingore the "virtual" clusters
 
+  // Take into account the mis-alignment
+  Double_t x=track->GetX()+cl->GetX();
+  if (!track->PropagateTo(x,0.,0.)) return 0;
+  
   return track->UpdateMI(cl->GetY(),cl->GetZ(),track->GetSigmaY(layer),track->GetSigmaZ(layer),chi2,index);
 }
 
index d364327..7c6ea58 100644 (file)
@@ -14,8 +14,6 @@
 class TTree;
 class TTreeSRedirector;
 class AliESD;
-class AliHelix;
-class AliITSgeomTGeo;
 
 #include <TObjArray.h>
 #include "AliITSRecPoint.h"
@@ -26,7 +24,7 @@ class AliITSgeomTGeo;
 class AliITStrackerMI : public AliTracker {
 public:
   AliITStrackerMI();
-  AliITStrackerMI(const AliITSgeomTGeo *geom);
+  AliITStrackerMI(const Char_t *geom);
   virtual ~AliITStrackerMI();
   AliCluster *GetCluster(Int_t index) const;
   virtual Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const;
index 915d3f8..996488a 100644 (file)
@@ -87,7 +87,7 @@ AliITStrackerV2::AliITStrackerV2(const AliITStrackerV2 &t):
 
 }
 
-AliITStrackerV2::AliITStrackerV2(const AliITSgeomTGeo *geom) : 
+AliITStrackerV2::AliITStrackerV2(const Char_t *geom) : 
   AliTracker(), 
   fI(kMaxLayer),
   fBestTrack(),
@@ -125,19 +125,16 @@ AliITStrackerV2::AliITStrackerV2(const AliITSgeomTGeo *geom) :
     for (Int_t j=1; j<nlad+1; j++) {
       for (Int_t k=1; k<ndet+1; k++) { //Fill this layer with detectors
         TGeoHMatrix m; AliITSgeomTGeo::GetOrigMatrix(i,j,k,m);
-        Double_t *xyz=m.GetTranslation(), x=xyz[0], y=xyz[1];
-        Double_t *rot=m.GetRotationMatrix(); 
-
-        Double_t phi=TMath::ATan2(rot[1],rot[0])+TMath::Pi();
-        phi+=TMath::Pi()/2;
-        if (i==1) phi+=TMath::Pi();
+        const TGeoHMatrix *tm=AliITSgeomTGeo::GetTracking2LocalMatrix(i,j,k);
+        m.Multiply(tm);
+        Double_t txyz[3]={0.}, xyz[3]={0.};
+        m.LocalToMaster(txyz,xyz);
+        Double_t r=TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
+        Double_t phi=TMath::ATan2(xyz[1],xyz[0]);
 
         if (phi<0) phi+=TMath::TwoPi();
         else if (phi>=TMath::TwoPi()) phi-=TMath::TwoPi();
 
-        Double_t cp=TMath::Cos(phi), sp=TMath::Sin(phi);
-        Double_t r=x*cp+y*sp;
-
         AliITSdetector &det=fgLayers[i-1].GetDetector((j-1)*ndet + k-1); 
         new(&det) AliITSdetector(r,phi); 
       } 
@@ -185,18 +182,34 @@ Int_t AliITStrackerV2::LoadClusters(TTree *cTree) {
     for (; j<jmax; j++) {           
       if (!cTree->GetEvent(j)) continue;
       Int_t ncl=clusters->GetEntriesFast();
+      //*** The Delta transformation
+      TGeoHMatrix delta; 
+      AliITSgeomTGeo::GetTrackingMatrix(j,delta);
+      TGeoHMatrix m;
+      AliITSgeomTGeo::GetOrigMatrix(j,m);
+      delta.MultiplyLeft(&(m.Inverse()));
+      const TGeoHMatrix *tm = AliITSgeomTGeo::GetTracking2LocalMatrix(j);
+      delta.MultiplyLeft(&(tm->Inverse())); 
+      //***
+
       while (ncl--) {
         AliITSRecPoint *c=(AliITSRecPoint*)clusters->UncheckedAt(ncl);
 
+        //*** Shift the cluster to the misaligned position
+        Double_t  xyz[3]={c->GetX(),c->GetY(),c->GetZ()};
+        Double_t mxyz[3]={0.};                    
+        
+        delta.LocalToMaster(xyz,mxyz);
+
+        c->SetX(mxyz[0]);
+        c->AliCluster::SetY(mxyz[1]);
+        c->AliCluster::SetZ(mxyz[2]);
+       //***
+
         Int_t idx=c->GetDetectorIndex();
         AliITSdetector &det=fgLayers[i].GetDetector(idx);
    
-        //Shift the cluster to the misaligned position (temporary solution)
-        Double_t x=det.GetR();
-        if      (i==0) x-=0.0075; 
-        else if (i==1) x+=0.0075;
-        c->SetX(x);           
-
         Double_t y=r*det.GetPhi()+c->GetY();
         if (y>circ) y-=circ; else if (y<0) y+=circ;
         c->SetPhiR(y);
@@ -609,7 +622,10 @@ Int_t AliITStrackerV2::TakeNextProlongation() {
 
   if (!cc) return 0;
 
-  if (!fTrackToFollow.PropagateTo(cc->GetX(),0.,0.)) return 0; // Alignment
+  {// Take into account the mis-alignment
+    Double_t x = fTrackToFollow.GetX() + cc->GetX();
+    if (!fTrackToFollow.PropagateTo(x,0.,0.)) return 0;
+  }
   if (!fTrackToFollow.Update(cc,chi2,(fI<<28)+cci)) {
      //Warning("TakeNextProlongation","filtering failed !\n");
      return 0;
@@ -1062,7 +1078,9 @@ Bool_t AliITStrackerV2::RefitAt(Double_t xx,AliITStrackV2 *t,
      }
  
      if (cl) {
-       if (!t->PropagateTo(cl->GetX(),0.,0.)) return kFALSE; //Alignment
+       // Take into account the mis-alignment
+       Double_t x=t->GetX()+cl->GetX();
+       if (!t->PropagateTo(x,0.,0.)) return kFALSE;
        if (!t->Update(cl,maxchi2,idx)) {
           return kFALSE;
        }
index dd514a7..f2f9cc5 100644 (file)
@@ -14,7 +14,6 @@
 
 class AliITSRecPoint;
 class AliESD;
-class AliITSgeomTGeo;
 class TTree;
 
 
@@ -22,7 +21,7 @@ class TTree;
 class AliITStrackerV2 : public AliTracker {
 public:
   AliITStrackerV2();
-  AliITStrackerV2(const AliITSgeomTGeo *geom);
+  AliITStrackerV2(const Char_t *geom);
   ~AliITStrackerV2(){}
   AliCluster *GetCluster(Int_t index) const;
   AliITSRecPoint *GetCluster(Int_t l, Int_t c) const {
index 748c7f3..c5e0c50 100644 (file)
@@ -269,7 +269,7 @@ int main(int argc, char** argv)
        nglobaltracks += hough2->FillESD(esd);
 
        // ITS tracker
-       AliHLTITStracker itsTracker((AliITSgeomTGeo *)0x0);
+       AliHLTITStracker itsTracker(0);
        itsTracker.SetVertex(vtxPos,vtxErr);
 
        itsTracker.LoadClusters(treeClusters);