]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
added the charged track reference in the construction of the links
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 Apr 2004 14:13:42 +0000 (14:13 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 Apr 2004 14:13:42 +0000 (14:13 +0000)
PHOS/AliPHOSTrackSegmentMakerv1.cxx
PHOS/AliPHOSTrackSegmentMakerv1.h

index 51e0af564ab1900aacc5df87b5d5a47d74f10727..339cbce62e765786319da4928df3c7a5bffc1e2c 100644 (file)
 //_________________________________________________________________________
 // Implementation version 1 of algorithm class to construct PHOS track segments
 // Track segment for PHOS is list of 
-//        EMC RecPoint + (possibly) CPV RecPoint + (possibly) PPSD RecPoint
+//        EMC RecPoint + (possibly) CPV RecPoint
 // To find TrackSegments we do the following: 
 //  for each EMC RecPoints we look at
-//   CPV/PPSD RecPoints in the radious fRcpv. 
+//   CPV RecPoints in the radious fRcpv. 
 //  If there is such a CPV RecPoint, 
-//   we make "Link" it is just indexes of EMC and CPV/PPSD RecPoint and distance
+//   we make "Link" it is just indexes of EMC and CPV RecPoint and distance
 //   between them in the PHOS plane. 
 //  Then we sort "Links" and starting from the 
 //   least "Link" pointing to the unassined EMC and CPV RecPoints assing them to 
 //   new TrackSegment. 
-// If there is no CPV/PPSD RecPoint we make TrackSegment 
+// If there is no CPV RecPoint we make TrackSegment 
 // consisting from EMC alone. There is no TrackSegments without EMC RecPoint.
 //// In principle this class should be called from AliPHOSReconstructor, but 
 // one can use it as well in standalone mode.
@@ -36,7 +36,6 @@
 //               // reads gAlice from header file "galice.root", uses recpoints stored in the branch names "recpointsname" (default = "Default")
 //               // and saves recpoints in branch named "tracksegmentsname" (default = "recpointsname")                       
 //  root [1] t->ExecuteTask()
-//  root [2] t->SetMaxEmcPpsdDistance(5)
 //  root [3] t->SetTrackSegmentsBranch("max distance 5 cm")
 //  root [4] t->ExecuteTask("deb all time") 
 //                 
@@ -48,7 +47,7 @@
 #include "TBenchmark.h"
 
 // --- Standard library ---
-
+#include "Riostream.h"
 // --- AliRoot header files ---
 #include "AliPHOSGeometry.h"
 #include "AliPHOSTrackSegmentMakerv1.h"
@@ -126,15 +125,18 @@ void  AliPHOSTrackSegmentMakerv1::FillOneModule()
 }
 
 //____________________________________________________________________________
-Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * emcClu,AliPHOSCpvRecPoint * cpvClu, Bool_t &toofar) const
+Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * emcClu,AliPHOSCpvRecPoint * cpvClu, Int_t &trackindex) const
 {
-  // Calculates the distance between the EMC RecPoint and the PPSD RecPoint
+  // Calculates the distance between the EMC RecPoint and the CPV RecPoint
   // Clusters are sorted in "rows" and "columns" of width 1 cm
 
   Float_t delta = 1 ;  // Width of the rows in sorting of RecPoints (in cm)
                        // if you change this value, change it as well in xxxRecPoint::Compare()
-  Float_t distance = fRcpv ;
+  Float_t distance2Cpv   = fRcpv ;
+  Float_t distance2Track = fRcpv ; 
+
+  trackindex = -1 ; // closest track within fRCpv 
+
   TVector3 vecEmc ;   // Local position of EMC recpoint
   TVector3 vecCpv ;   // Local position of CPV recpoint propagated to EMC
   TVector3 vecDist ;  // Distance between local positions of two points
@@ -142,9 +144,12 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
   emcClu->GetLocalPosition(vecEmc) ;
   cpvClu->GetLocalPosition(vecCpv) ;
 
-  toofar = kTRUE ;
+  //toofar = kTRUE ;
   if(emcClu->GetPHOSMod() == cpvClu->GetPHOSMod()){ 
 
+    // Find EMC-CPV distance
+    distance2Cpv = (vecCpv - vecEmc).Mag() ;
+    
     if (fESD != 0x0) {
       // Extrapolate the global track direction if any to CPV and find the closest track
       Int_t nTracks = fESD->GetNumberOfTracks();
@@ -154,18 +159,20 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
       AliESDtrack *track;
       for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
        track = fESD->GetTrack(iTrack);
+       if (track->IsPHOS()) 
+         continue ; 
        track->GetOuterXYZ(xyz);     // track coord on the cylinder of PHOS radius
        if ((TMath::Abs(xyz[0])+TMath::Abs(xyz[1])+TMath::Abs(xyz[2]))<=0)
          continue;
        track->GetOuterPxPyPz(pxyz); // track momentum ibid.
        vecDist = PropagateToPlane(xyz,pxyz,"CPV",cpvClu->GetPHOSMod());
-//     Info("GetDistanceInPHOSPlane","Track %d propagation to CPV = (%f,%f,%f)",
-//          iTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
+       Info("GetDistanceInPHOSPlane","Track %d propagation to CPV = (%f,%f,%f)",
+            iTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
        vecDist -= vecCpv;
-       distance = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
+       distance2Track = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
        // Find the closest track to the EMC recpoint
-       if (distance < minDistance) {
-         minDistance = distance;
+       if (distance2Track < minDistance) {
+         minDistance = distance2Track;
          iClosestTrack = iTrack;
        }
       }
@@ -183,19 +190,21 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
 //     Info("GetDistanceInPHOSPlane","Track %d propagation to EMC = (%f,%f,%f)",
 //          iClosestTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
        vecDist -= vecEmc;
-       distance = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
+       distance2Track = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
       }
-    } else {
-      // If no ESD exists, than simply find EMC-CPV distance
-      distance = (vecCpv - vecEmc).Mag() ;
+//     } else {
+//       // If no ESD exists, than simply find EMC-CPV distance
+//       distance = (vecCpv - vecEmc).Mag() ;
+    
+      if(distance2Track < fRcpv + 2*delta )
+       trackindex = iClosestTrack ; 
+      //      toofar = kFALSE ;
     }
-//     Info("GetDistanceInPHOSPlane","cpv-emc distance is %f cm",
-//      distance);
-    if(distance < fRcpv + 2*delta )
-      toofar = kFALSE ;
+    //     Info("GetDistanceInPHOSPlane","cpv-emc distance is %f cm",
+    //          distance);
   }
   
-  return distance ;
+  return distance2Cpv ;
 }
 
 //____________________________________________________________________________
@@ -252,7 +261,7 @@ void  AliPHOSTrackSegmentMakerv1::InitParameters()
 //____________________________________________________________________________
 void  AliPHOSTrackSegmentMakerv1::MakeLinks()const
 { 
-  // Finds distances (links) between all EMC and PPSD clusters, 
+  // Finds distances (links) between all EMC and CPV clusters, 
   // which are not further apart from each other than fRcpv 
   // and sort them in accordance with this distance
   
@@ -271,17 +280,17 @@ void  AliPHOSTrackSegmentMakerv1::MakeLinks()const
   for(iEmcRP = fEmcFirst; iEmcRP < fEmcLast; iEmcRP++ ) {
     emcclu = dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(iEmcRP)) ;
 
-    Bool_t toofar ;        
+    //Bool_t toofar ;        
     Int_t iCpv = 0 ;    
     for(iCpv = fCpvFirst; iCpv < fCpvLast;iCpv++ ) { 
       
       cpv = dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(iCpv)) ;
-      Float_t r = GetDistanceInPHOSPlane(emcclu, cpv, toofar) ;
-      
-      if(toofar)
-        break ;         
+      Int_t track = -1 ; 
+      Float_t r = GetDistanceInPHOSPlane(emcclu, cpv, track) ;     
+      //      if(toofar)
+      //       continue ;       
       if(r < fRcpv) { 
-        new ((*fLinkUpArray)[iLinkUp++])  AliPHOSLink(r, iEmcRP, iCpv) ;
+        new ((*fLinkUpArray)[iLinkUp++])  AliPHOSLink(r, iEmcRP, iCpv, track) ;
       }      
     }
   } 
@@ -328,24 +337,25 @@ void  AliPHOSTrackSegmentMakerv1::MakePairs()
   
   while ( (linkUp =  static_cast<AliPHOSLink *>(nextUp()) ) ){  
 
-    if(emcExist[linkUp->GetEmc()-fEmcFirst] != -1){ //without ppsd Up yet 
+    if(emcExist[linkUp->GetEmc()-fEmcFirst] != -1){
 
-      if(cpvExist[linkUp->GetPpsd()-fCpvFirst]){ //CPV still exist
-       
-       new ((* trackSegments)[fNTrackSegments]) 
-         AliPHOSTrackSegment(dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(linkUp->GetEmc())) , 
-                            dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(linkUp->GetPpsd()))) ;
+      if(cpvExist[linkUp->GetCpv()-fCpvFirst]){ //CPV still exist
+        new ((* trackSegments)[fNTrackSegments]) 
+          AliPHOSTrackSegment(dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(linkUp->GetEmc())) , 
+                              dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(linkUp->GetCpv())) , 
+                              linkUp->GetTrack()) ;
+        
        (dynamic_cast<AliPHOSTrackSegment *>(trackSegments->At(fNTrackSegments)))->SetIndexInList(fNTrackSegments);
        fNTrackSegments++ ;
        
        emcExist[linkUp->GetEmc()-fEmcFirst] = -1 ; //Mark emc  that Cpv was found 
        //mark CPV recpoint as already used 
-       cpvExist[linkUp->GetPpsd()-fCpvFirst] = kFALSE ;
-      } //if ppsdUp still exist
+       cpvExist[linkUp->GetCpv()-fCpvFirst] = kFALSE ;
+      } //if CpvUp still exist
     } 
   }        
 
-  //look through emc recPoints left without CPV/PPSD
+  //look through emc recPoints left without CPV
   if(emcExist){ //if there is emc rec point
     Int_t iEmcRP ;
     for(iEmcRP = 0; iEmcRP < fEmcLast-fEmcFirst  ; iEmcRP++ ){
@@ -444,7 +454,7 @@ void AliPHOSTrackSegmentMakerv1::Print()const
     message = "\n======== AliPHOSTrackSegmentMakerv1 ========\n" ; 
     message += "Making Track segments\n" ;
     message += "with parameters:\n" ; 
-    message += "     Maximal EMC - CPV (PPSD) distance (cm) %f\n" ;
+    message += "     Maximal EMC - CPV distance (cm) %f\n" ;
     message += "============================================\n" ;
     Info("Print", message.Data(),fRcpv) ;
   }
index d280e3edd439f28cbb45a29a95e371d2a24e1037..0cfe7f8f46827d848d6e50650cae7880681b356f 100644 (file)
@@ -7,7 +7,7 @@
 
 //_________________________________________________________________________
 // Implementation version 1 of algorithm class to construct PHOS track segments
-// Associates EMC and PPSD clusters
+// Associates EMC and CPV lusters
 // Unfolds the EMC cluster   
 //                  
 //*-- Author: Dmitri Peressounko (RRC Ki & SUBATECH)
@@ -42,7 +42,7 @@ public:
   virtual void   Exec(Option_t *option); // Does the job
           void   FillOneModule() ;       // Finds range in which RecPoints belonging current PHOS module are
 
-          void   MakeLinks() const;      //Evaluates distances(links) between EMC and PPSD
+          void   MakeLinks() const;      //Evaluates distances(links) between EMC and CPV
           void   MakePairs() ;           //Finds pairs(triplets) with smallest link
   virtual void   Print() const ;
   virtual void   SetMaxEmcCPVDistance(Float_t r){ fRcpv = r ;} //Maximal distance (in PHOS plane) 
@@ -63,7 +63,7 @@ public:
 private:
 
   const TString BranchName() const ; 
-  Float_t GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * EmcClu , AliPHOSCpvRecPoint * Ppsd , Bool_t & TooFar ) const ; // see R0
+  Float_t GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * EmcClu , AliPHOSCpvRecPoint * Cpv , Int_t & track ) const ; // see R0
   TVector3 PropagateToPlane(Double_t *x, Double_t *p, char *det, Int_t module) const;
   void    Init() ;
   void    InitParameters() ;