reconstruction updates
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 20 Nov 2012 17:12:45 +0000 (17:12 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 20 Nov 2012 17:12:45 +0000 (17:12 +0000)
13 files changed:
ITS/UPGRADE/AliITSUGeomTGeo.cxx
ITS/UPGRADE/AliITSURecoDet.cxx
ITS/UPGRADE/AliITSURecoDet.h
ITS/UPGRADE/AliITSURecoLayer.cxx
ITS/UPGRADE/AliITSURecoLayer.h
ITS/UPGRADE/AliITSURecoParam.cxx
ITS/UPGRADE/AliITSURecoParam.h
ITS/UPGRADE/AliITSUReconstructor.cxx
ITS/UPGRADE/AliITSUSimuParam.cxx
ITS/UPGRADE/AliITSUTrackerGlo.cxx
ITS/UPGRADE/AliITSUTrackerGlo.h
ITS/UPGRADE/testITSU/itsupcdb.tar.gz
ITS/UPGRADE/testITSU/rec.C

index 8affb45..f87ce3e 100644 (file)
@@ -346,6 +346,7 @@ TGeoHMatrix* AliITSUGeomTGeo::GetMatrix(Int_t index)  const
 {
   // Get the transformation matrix for a given module 'index'
   // by quering the TGeoManager
+  static TGeoHMatrix matTmp;
   TGeoPNEntry *pne = GetPNEntry(index);
   if (!pne) return NULL;
 
@@ -359,9 +360,9 @@ TGeoHMatrix* AliITSUGeomTGeo::GetMatrix(Int_t index)  const
     AliError(Form("Volume path %s not valid!",path));
     return NULL;
   }
-  TGeoHMatrix *mat = gGeoManager->GetCurrentMatrix();
+  matTmp = *gGeoManager->GetCurrentMatrix();
   gGeoManager->PopPath();
-  return mat;
+  return &matTmp;
 }
 
 //______________________________________________________________________
index ef2c106..7bff734 100644 (file)
@@ -69,6 +69,19 @@ Bool_t AliITSURecoDet::Build()
                                                 ilr,fGeom);
     AddLayer(lra);
   }
+  //
+  // build passive ITS layers
+  //
+  IndexLayers();
+  Print("lr");
   return kTRUE;
 }
 
+//______________________________________________________
+void AliITSURecoDet::IndexLayers()
+{
+  fLayersActive.Sort();
+  for (int i=0;i<fNLayersActive;i++) GetLayerActive(i)->SetActiveID(i);
+  fLayers.Sort();
+  for (int i=0;i<fNLayers;i++) GetLayer(i)->SetID(i);
+}
index edb63bc..2f25733 100644 (file)
@@ -41,6 +41,7 @@ class AliITSURecoDet : public TNamed
   //
  protected:
   Bool_t             Build();
+  void               IndexLayers();
   //
  protected:
   Int_t              fNLayers;        // total number of layers
index 7d33104..d83daa4 100644 (file)
@@ -75,7 +75,8 @@ AliITSURecoLayer::~AliITSURecoLayer()
 void AliITSURecoLayer::Print(Option_t* opt) const                            
 {
   //print 
-  printf("Layer %s %d (active:%+d), NSensors: %d\n",GetName(),GetID(),GetActiveID(),GetNSensors());
+  printf("Lr %s %d (act:%+d), NSens: %4d | MaxStep:%.2f ",GetName(),GetID(),GetActiveID(),GetNSensors(),fMaxStep);
+  printf("%6.3f<R<%6.3f | %+8.3f<Z<%+8.3f dZ:%6.3f\n",fRMin,fRMax,fZMin,fZMax,fSensDZInv>0 ? 1/fSensDZInv : 0);
   TString opts = opt; opts.ToLower();
   if (opts.Contains("sn")) for (int i=0;i<GetNSensors();i++) GetSensor(i)->Print(opt);
 }
@@ -108,7 +109,7 @@ void AliITSURecoLayer::Build()
     //
     for (int idt=0;idt<fNSensInLadder;idt++) {
       AliITSURecoSens* sens = new AliITSURecoSens(fNSensors++);
-      fSensors[idt] = sens;
+      fSensors[ild*fNSensInLadder+idt] = sens;
       //
       double phiMin=1e9,phiMax=-1e9,zMin=1e9,zMax=-1e9;
       mmod = *fITSGeom->GetMatrix(fActiveID,ild,idt);
@@ -129,12 +130,11 @@ void AliITSURecoLayer::Build()
            else if (!OKforPhiMin(phiMin,phi)) phiMin=phi;
            if      (phiMax<-1e8) phiMax=phi;
            else if (!OKforPhiMax(phiMax,phi)) phiMax=phi;            
-           if (glo[2]>zMax) zMax=glo[2]; else if (glo[2]<zMin) zMin=glo[2];
+           if (glo[2]>zMax) zMax=glo[2];
+           if (glo[2]<zMin) zMin=glo[2];
          }
        }
       }
-      printf("%d %d (%d)  %f %f\n",ild,idt, ild*fNSensInLadder+idt,phiMin,phiMax);
-
       sens->SetBoundaries(phiMin,phiMax,zMin,zMax);
       mt2l = fITSGeom->GetMatrixT2L(fActiveID,ild,idt);
       mmod.Multiply(mt2l);     
@@ -154,7 +154,7 @@ void AliITSURecoLayer::Build()
       if (fZMin>zMin) fZMin = zMin;
       if (fZMax<zMax) fZMax = zMax;
       //
-      if (idt>0) fSensDZInv += zMax - GetSensor(fNSensors-2)->GetZMax(); // z interval to previoud
+      if (idt>0) fSensDZInv += zMax - GetSensor(ild,idt-1)->GetZMax(); // z interval to previous
     }
   }
   //
@@ -213,7 +213,6 @@ void AliITSURecoLayer::Build()
     } // sensors
   } // ladders
   //
-  //
 }
 
 //______________________________________________________
@@ -290,3 +289,22 @@ void AliITSURecoLayer::ProcessClusters(Int_t mode)
   if (curSens) curSens->ProcessClusters(mode); // last sensor was not processed yet
   //
 }
+
+//______________________________________________________
+Bool_t AliITSURecoLayer::IsEqual(const TObject* obj) const
+{
+  // check if layers are equal in R
+  const AliITSURecoLayer* lr = dynamic_cast<const AliITSURecoLayer*>(obj);
+  return Abs(lr->GetR()-GetR())<1e-6 ? kTRUE : kFALSE;
+}
+
+//______________________________________________________
+Int_t  AliITSURecoLayer::Compare(const TObject* obj) const
+{
+  // compare two layers
+  const AliITSURecoLayer* lr = dynamic_cast<const AliITSURecoLayer*>(obj);
+  double dr = GetR() - lr->GetR();
+  if (Abs(dr)<1e-6) return 0;
+  return dr>0 ? 1:-1;
+  //      
+}
index cb8fe17..4ca7f9d 100644 (file)
@@ -57,6 +57,9 @@ class AliITSURecoLayer : public TNamed
   Int_t              FindSensors(const double* impPar, AliITSURecoSens *sensors[AliITSURecoSens::kNNeighbors]);
   //
   virtual void       Print(Option_t* option = "")  const;
+  virtual Bool_t     IsSortable()                  const {return kTRUE;}
+  virtual Bool_t     IsEqual(const TObject* obj)   const;
+  virtual Int_t      Compare(const TObject* obj)   const;
   //
  protected:
   void               Build();
index c1adfeb..758425c 100644 (file)
@@ -44,7 +44,7 @@ AliITSURecoParam::AliITSURecoParam()
   ,fMaxDforV0dghtrForProlongation(fgkMaxDforV0dghtrForProlongation)
   ,fMaxDForProlongation(fgkMaxDForProlongation)
   ,fMaxDZForProlongation(fgkMaxDZForProlongation)
-  ,fMinPtForProlongation(fgkMaxDForProlongation)
+  ,fMinPtForProlongation(fgkMinPtForProlongation)
   ,fNSigmaRoadY(fgkNSigmaRoadY)
   ,fNSigmaRoadZ(fgkNSigmaRoadZ)
      //
@@ -64,7 +64,7 @@ AliITSURecoParam::AliITSURecoParam(Int_t nLr)
   ,fMaxDforV0dghtrForProlongation(fgkMaxDforV0dghtrForProlongation)
   ,fMaxDForProlongation(fgkMaxDForProlongation)
   ,fMaxDZForProlongation(fgkMaxDZForProlongation)
-  ,fMinPtForProlongation(fgkMaxDForProlongation)
+  ,fMinPtForProlongation(fgkMinPtForProlongation)
   ,fNSigmaRoadY(fgkNSigmaRoadY)
   ,fNSigmaRoadZ(fgkNSigmaRoadZ)
      //
@@ -169,3 +169,27 @@ void  AliITSURecoParam::SetMaxTr2ClChi2(Int_t lr, Double_t v)
   if (lr>=fNLayers) AliFatal(Form("Number of defined layers is %d",fNLayers));
   fMaxTr2ClChi2[lr] = v;
 }
+
+//========================================================================
+//_____________________________________________________________________________
+void AliITSURecoParam::Print(Option_t *opt) const
+{
+  // print params
+  printf("%s: %s %s\n",ClassName(),GetName(),GetTitle());
+  printf("%-30s\t%f\n","fMaxDforV0dghtrForProlongation",fMaxDforV0dghtrForProlongation);
+  printf("%-30s\t%f\n","fMaxDForProlongation",fMaxDForProlongation); 
+  printf("%-30s\t%f\n","fMaxDZForProlongation",fMaxDZForProlongation);
+  printf("%-30s\t%f\n","fMinPtForProlongation",fMinPtForProlongation);
+  printf("%-30s\t%f\n","fNSigmaRoadY",fNSigmaRoadY);
+  printf("%-30s\t%f\n","fNSigmaRoadZ",fNSigmaRoadZ);
+  //
+  printf("N.Layers: %d\n",fNLayers);
+  if (fNLayers>0) {
+    printf("Layer-wise data:\n");
+    printf("%-30s\t:","fTanLorentzAngle");  for (int i=0;i<fNLayers;i++) printf(" %+.2e",fTanLorentzAngle[i]); printf("\n");
+    printf("%-30s\t:","fSigmaY2");          for (int i=0;i<fNLayers;i++) printf(" %+.2e",fSigmaY2[i]); printf("\n");
+    printf("%-30s\t:","fSigmaZ2");          for (int i=0;i<fNLayers;i++) printf(" %+.2e",fSigmaZ2[i]); printf("\n");
+    printf("%-30s\t:","fMaxTr2ClChi2");     for (int i=0;i<fNLayers;i++) printf(" %+.2e",fMaxTr2ClChi2[i]); printf("\n");
+  }
+  //
+}
index 24002d1..0a069f1 100644 (file)
@@ -49,7 +49,8 @@ class AliITSURecoParam : public AliDetectorRecoParam
   void        SetMinPtForProlongation(Double_t v)                     {fMinPtForProlongation = v;}
   void        SetNSigmaRoadY(Double_t v)                              {fNSigmaRoadY=v;}
   void        SetNSigmaRoadZ(Double_t v)                              {fNSigmaRoadZ=v;}
-
+  //
+  virtual void Print(Option_t *opt="")  const;
 
  protected:
   Int_t          fNLayers;          // number of layers 
@@ -90,28 +91,28 @@ class AliITSURecoParam : public AliDetectorRecoParam
 inline Double_t AliITSURecoParam::GetTanLorentzAngle(Int_t lr) const 
 {
   // get tg of Lorentz Angle for the layer
-  return lr<fNLayers ? fTanLorentzAngle[lr]:0;
+  return (lr<fNLayers)&&fTanLorentzAngle ? fTanLorentzAngle[lr]:0;
 }
 
 //_____________________________________________________________________________
 inline Double_t AliITSURecoParam::GetSigmaY2(Int_t lr) const 
 {
   // get tg of Lorentz Angle for the layer
-  return lr<fNLayers ? fSigmaY2[lr]:fgkSigmaRoadY*fgkSigmaRoadY; //0;
+  return (lr<fNLayers)&&fSigmaY2 ? fSigmaY2[lr]:fgkSigmaRoadY*fgkSigmaRoadY; //0;
 }
 
 //_____________________________________________________________________________
 inline Double_t AliITSURecoParam::GetSigmaZ2(Int_t lr) const 
 {
   // get tg of Lorentz Angle for the layer
-  return lr<fNLayers ? fSigmaZ2[lr]:fgkSigmaRoadZ*fgkSigmaRoadZ;//0;
+  return (lr<fNLayers)&&fSigmaZ2 ? fSigmaZ2[lr]:fgkSigmaRoadZ*fgkSigmaRoadZ;//0;
 }
 
 //_____________________________________________________________________________
 inline Double_t AliITSURecoParam::GetMaxTr2ClChi2(Int_t lr) const
 {
   // get tg of Lorentz Angle for the layer
-  return lr<fNLayers ? fMaxTr2ClChi2[lr]:fgkMaxTr2ClChi2; //0;
+  return (lr<fNLayers)&&fMaxTr2ClChi2 ? fMaxTr2ClChi2[lr]:fgkMaxTr2ClChi2; //0;
 }
 
 #endif
index d4ce30e..edbb731 100644 (file)
@@ -28,7 +28,7 @@
 #include "AliESDEvent.h"
 
 #include "AliTracker.h"
-#include "AliITStrackerMI.h"
+#include "AliITSUTrackerGlo.h"
 
 #include "AliITSUGeomTGeo.h"
 #include "AliITSUSegmentationPix.h"
@@ -171,41 +171,10 @@ void AliITSUReconstructor::Reconstruct(TTree *digitsTree, TTree *clustersTree) c
 AliTracker* AliITSUReconstructor::CreateTracker() const
 {
   // create a ITS tracker
-
-  AliDebug(1,"ITSU tracking initialization will be done here\n");
+  AliITSUTrackerGlo* tracker = new AliITSUTrackerGlo((AliITSUReconstructor*)this);
  
-  return 0;
-
-  /* // from Current ITS
-  Int_t trackerOpt = GetRecoParam()->GetTracker();
-  AliTracker* tracker;    
-  if (trackerOpt==1) {
-    tracker = new AliITStrackerMI(0);
-    AliITStrackerMI *mit=(AliITStrackerMI*)tracker;
-    mit->SetDetTypeRec(fDetTypeRec);
-  }  
-  else if (trackerOpt==2) {
-    tracker = new AliITStrackerV2(0);
-  }
-  else {
-    tracker =  new AliITStrackerSA(0);  // inherits from AliITStrackerMI
-    AliITStrackerSA *sat=(AliITStrackerSA*)tracker;
-    sat->SetDetTypeRec(fDetTypeRec);
-    if(GetRecoParam()->GetTrackerSAOnly()) sat->SetSAFlag(kTRUE);
-    if(sat->GetSAFlag())AliDebug(1,"Tracking Performed in ITS only\n");
-    if(GetRecoParam()->GetInwardFindingSA()){
-      sat->SetInwardFinding();
-      sat->SetInnerStartLayer(GetRecoParam()->GetInnerStartLayerSA());
-    }else{
-      sat->SetOutwardFinding();
-      sat->SetOuterStartLayer(GetRecoParam()->GetOuterStartLayerSA());
-    }
-    sat->SetMinNPoints(GetRecoParam()->GetMinNPointsSA());
-  }
-
   return tracker;
-  */
-  
 }
 
 //_____________________________________________________________________________
index a9c9676..c60972d 100644 (file)
@@ -28,8 +28,8 @@ using namespace TMath;
 
 
 const Double_t  AliITSUSimuParam::fgkPixBiasVoltageDefault = 18.182;
-const Double_t  AliITSUSimuParam::fgkPixThreshDefault = 2000.;
-const Double_t  AliITSUSimuParam::fgkPixThrSigmaDefault = 200.;
+const Double_t  AliITSUSimuParam::fgkPixThreshDefault = 300.;
+const Double_t  AliITSUSimuParam::fgkPixThrSigmaDefault = 30.;
 const Double_t  AliITSUSimuParam::fgkPixMinElToAddDefault = 2.;
 const UInt_t    AliITSUSimuParam::fgkPixCouplingOptDefault = AliITSUSimuParam::kOldCouplingPix;
 const Double_t  AliITSUSimuParam::fgkPixCouplColDefault = 0.;
index 31af7a7..126ca69 100644 (file)
@@ -85,10 +85,13 @@ Int_t AliITSUTrackerGlo::Clusters2Tracks(AliESDEvent *esdEv)
 {
   //
   //
+  AliITSUReconstructor::GetRecoParam()->Print();
+
   fITS->ProcessClusters();
   // select ESD tracks to propagate
   int nTrESD = esdEv->GetNumberOfTracks();
   for (int itr=0;itr<nTrESD;itr++) {
+    printf("Processing track %d\n",itr);
     AliESDtrack *esdTr = esdEv->GetTrack(itr);
     FindTrack(esdTr);
   }
@@ -186,13 +189,16 @@ void AliITSUTrackerGlo::FindTrack(AliESDtrack* esdTr)
   for (int ila=fITS->GetNLayersActive();ila--;) {
     int ilaUp = ila+1;                         // prolong seeds from layer above
     int nSeedsUp = GetNSeeds(ilaUp);
+    printf("NSeeds %d\n",nSeedsUp);
     for (int isd=0;isd<nSeedsUp;isd++) {
       AliITSUSeed* seedU = GetSeed(ilaUp,isd);  // seed on prev.active layer to prolong
       seedUC = *seedU;
       seedUC.SetParent(seedU);
       // go till next active layer
+      printf("Lr:%d Seed:%d\n",ila,isd);
       if (!TransportToLayer(&seedUC, fITS->GetLrIDActive(ilaUp), fITS->GetLrIDActive(ila)) ) {
        //
+       printf("Tr failed\n");
        // Check if the seed satisfies to track definition
        if (NeedToKill(&seedUC,kTransportFailed)) KillSeed(ilaUp,isd); 
        continue; // RS TODO: decide what to do with tracks stopped on higher layers w/o killing
@@ -203,6 +209,7 @@ void AliITSUTrackerGlo::FindTrack(AliESDtrack* esdTr)
        continue;
       }
       int nsens = lrA->FindSensors(&fTrImpData[kTrPhi0], hitSens);  // find detectors which may be hit by the track (max 4)
+      printf("Lr:%d Ns:%d\n",ila, nsens);
       //
       for (int isn=nsens;isn--;) {
        seedT = seedUC;
@@ -210,6 +217,7 @@ void AliITSUTrackerGlo::FindTrack(AliESDtrack* esdTr)
        //
        if (!seedT.Propagate(sens->GetPhiTF(),sens->GetXTF(),GetBz())) continue; // propagation failed, seedT is intact
        int clID0 = sens->GetFirstClusterId();
+       printf("Sn:%d Ncl:%d\n",isn,sens->GetNClusters());
        for (int icl=sens->GetNClusters();icl--;) {
          int res = CheckCluster(&seedT,ila,clID0+icl);
          //
@@ -235,6 +243,7 @@ Bool_t AliITSUTrackerGlo::InitSeed(AliESDtrack *esdTr)
   if (fCurrMass<kPionMass*0.9) fCurrMass = kPionMass; // don't trust to mu, e identification from TPCin
   //
   AliITSUSeed* seed = NewSeedFromPool();
+  seed->SetLr(fITS->GetNLayersActive());   // fake layer
   seed->AliExternalTrackParam::operator=(*esdTr);
   seed->SetParent(esdTr);
   AddProlongationHypothesis(seed,fITS->GetNLayersActive());
@@ -280,7 +289,7 @@ Bool_t AliITSUTrackerGlo::TransportToLayer(AliITSUSeed* seed, Int_t lFrom, Int_t
     //
     // go the entrance of the layer, assuming no materials in between
     double xToGo = dir>0 ? lrTo->GetRMin() : lrTo->GetRMax();
-    if (seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) return kFALSE;
+    if (!seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) return kFALSE;
     if (!seed->PropagateTo(xToGo, GetBz())) return kFALSE; // RS: do we need BxByBz?
     lrFr = lrTo;
   }
index a06f4b7..512ad9f 100644 (file)
@@ -87,6 +87,7 @@ inline void AliITSUTrackerGlo::AddProlongationHypothesis(AliITSUSeed* seed, Int_
 {
   // add new seed prolongation hypothesis 
   fSeedsLr[lr].AddLast(seed);
+  seed->Print("par");
 }
 
 
index f54f776..c632c4f 100644 (file)
Binary files a/ITS/UPGRADE/testITSU/itsupcdb.tar.gz and b/ITS/UPGRADE/testITSU/itsupcdb.tar.gz differ
index 8660412..89472aa 100644 (file)
@@ -9,7 +9,7 @@ void rec() {
   gSystem->Load("libITSUpgradeSim.so");
   gSystem->Load("libITSUpgradeRec.so");
 
-  gSystem->Exec("rm -rf *RecPoints* AliESD*");
+  //  gSystem->Exec("rm -rf *RecPoints* AliESD*");
 
   // Set ITS upgrade reconstructor
   gPluginMgr->AddHandler("AliReconstructor", "ITS",
@@ -17,8 +17,11 @@ void rec() {
   
   AliReconstruction rec;
 
-  rec.SetRunReconstruction("ITS"); // run cluster finder
-  rec.SetRunTracking(""); // Turn on with ITS when tracker is implemented
+  //  rec.SetRunReconstruction("ITS TPC"); // run cluster finder
+  //  rec.SetRunTracking(""); // Turn on with ITS when tracker is implemented
+
+  rec.SetRunReconstruction("");//ITS TPC"); // run cluster finder
+  rec.SetRunTracking("ITS TPC"); // Turn on with ITS when tracker is implemented
 
   rec.SetRunVertexFinder(kFALSE); // to be implemented - CreateVertexer
   rec.SetRunMultFinder(kFALSE);   // to be implemented - CreateMultFinder