]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONVTrackReconstructor.cxx
Make the Scan method public
[u/mrichter/AliRoot.git] / MUON / AliMUONVTrackReconstructor.cxx
index fac2deadee013d10996662f0749199104c13e81b..c4aa0e59b40852151d8e39d44e2fcb8282207878 100644 (file)
@@ -94,6 +94,8 @@
 
 #include <Riostream.h>
 
+using std::cout;
+using std::endl;
 /// \cond CLASSIMP
 ClassImp(AliMUONVTrackReconstructor) // Class implementation in ROOT context
 /// \endcond
@@ -280,8 +282,7 @@ Bool_t AliMUONVTrackReconstructor::IsAcceptable(AliMUONTrackParam &trackParam)
 TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliMUONVClusterStore& clusterStore, Int_t ch1, Int_t ch2)
 {
   /// To make the list of segments from the list of clusters in the 2 given chambers.
-  /// Return a new TClonesArray of segments.
-  /// It is the responsibility of the user to delete it afterward.
+  /// Return a TClonesArray of new segments (segments made in a previous call of this function are removed).
   AliDebug(1,Form("Enter MakeSegmentsBetweenChambers (1..) %d-%d", ch1+1, ch2+1));
   AliCodeTimerAuto("",0);
   
@@ -305,7 +306,8 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
   TIter nextInCh2(clusterStore.CreateChamberIterator(ch2,ch2));
   
   // list of segments
-  TClonesArray *segments = new TClonesArray("AliMUONObjectPair", 100);
+  static TClonesArray *segments = new TClonesArray("AliMUONObjectPair", 100);
+  segments->Clear("C");
   
   // Loop over clusters in the first chamber of the station
   while ( ( cluster1 = static_cast<AliMUONVCluster*>(nextInCh1()) ) ) {
@@ -1266,12 +1268,13 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(AliMUONVTrackStore& t
   trackHitPattern.ExecuteValidation(trackStore, triggerTrackStore, triggerStore);
 }
 
-  //__________________________________________________________________________
+
+//__________________________________________________________________________
 void AliMUONVTrackReconstructor::EventReconstructTrigger(const AliMUONTriggerCircuit& circuit,
                                                          const AliMUONVTriggerStore& triggerStore,
                                                          AliMUONVTriggerTrackStore& triggerTrackStore)
 {
-  /// To make the trigger tracks from Local Trigger
+  /// Fill trigger track store from local trigger
   AliDebug(1, "");
   AliCodeTimerAuto("",0);
 
@@ -1284,64 +1287,75 @@ void AliMUONVTrackReconstructor::EventReconstructTrigger(const AliMUONTriggerCir
     gloTrigPat = globalTrigger->GetGlobalResponse();
   }
   
+  AliMUONTriggerTrack triggerTrack;
+  
   TIter next(triggerStore.CreateIterator());
   AliMUONLocalTrigger* locTrg(0x0);
-
-  const Double_t kTrigNonBendReso = AliMUONConstants::TriggerNonBendingReso();
-  const Double_t kTrigBendReso = AliMUONConstants::TriggerBendingReso();
-  const Double_t kSqrt12 = TMath::Sqrt(12.);
-      
-  AliMUONTriggerTrack triggerTrack;
-  TMatrixD trigCov(3,3);
   
   while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) )
   {
     if ( locTrg->IsTrigX() && locTrg->IsTrigY() ) 
     { // make Trigger Track if trigger in X and Y
-
-      Int_t localBoardId = locTrg->LoCircuit();
-
-      Float_t y11 = circuit.GetY11Pos(localBoardId, locTrg->LoStripX()); 
-      Float_t z11 = circuit.GetZ11Pos(localBoardId, locTrg->LoStripX());
-      // need first to convert deviation to [0-30] 
-      // (see AliMUONLocalTriggerBoard::LocalTrigger)
-      Int_t deviation = locTrg->GetDeviation(); 
-      Int_t stripX21 = locTrg->LoStripX()+deviation+1;
-      Float_t y21 = circuit.GetY21Pos(localBoardId, stripX21);       
-      Float_t z21 = circuit.GetZ21Pos(localBoardId, stripX21);
-      Float_t x11 = circuit.GetX11Pos(localBoardId, locTrg->LoStripY());
       
-      AliDebug(1, Form(" MakeTriggerTrack %3d %2d %2d %2d (%f %f %f) (%f %f)\n",locTrg->LoCircuit(),
-                       locTrg->LoStripX(),locTrg->LoStripX()+deviation+1,locTrg->LoStripY(),x11, y11, z11, y21, z21));
-
-      Double_t deltaZ = z11 - z21;
-      
-      Float_t slopeX = x11/z11;
-      Float_t slopeY = (y11-y21) / deltaZ;
-
-      Float_t sigmaX = circuit.GetX11Width(localBoardId, locTrg->LoStripY()) / kSqrt12;
-      Float_t sigmaY = circuit.GetY11Width(localBoardId, locTrg->LoStripX()) / kSqrt12;
-      Float_t sigmaY21 = circuit.GetY21Width(localBoardId, locTrg->LoStripX()) / kSqrt12;
-
-      trigCov.Zero();
-      trigCov(0,0) = kTrigNonBendReso * kTrigNonBendReso + sigmaX * sigmaX;
-      trigCov(1,1) = kTrigBendReso * kTrigBendReso + sigmaY * sigmaY;
-      trigCov(2,2) = 
-       (2. * kTrigBendReso * kTrigBendReso + sigmaY * sigmaY + sigmaY21 * sigmaY21 ) / deltaZ / deltaZ;
-      trigCov(1,2) = trigCov(2,1) = trigCov(1,1) / deltaZ;
-
-      triggerTrack.SetX11(x11);
-      triggerTrack.SetY11(y11);
-      triggerTrack.SetZ11(z11);
-      triggerTrack.SetZ21(z21);
-      triggerTrack.SetSlopeX(slopeX);
-      triggerTrack.SetSlopeY(slopeY);
-      triggerTrack.SetGTPattern(gloTrigPat);
-      triggerTrack.SetLoTrgNum(localBoardId);
-      triggerTrack.SetCovariances(trigCov);
+      TriggerToTrack(circuit, *locTrg, triggerTrack, gloTrigPat);
 
       triggerTrackStore.Add(triggerTrack);
     } // board is fired 
   } // end of loop on Local Trigger
 }
+
+//__________________________________________________________________________
+void AliMUONVTrackReconstructor::TriggerToTrack(const AliMUONTriggerCircuit& circuit,
+                                                const AliMUONLocalTrigger& locTrg,
+                                                AliMUONTriggerTrack& triggerTrack,
+                                                UChar_t globalTriggerPattern)
+{
+  /// To make the trigger tracks from Local Trigger
+  const Double_t kTrigNonBendReso = AliMUONConstants::TriggerNonBendingReso();
+  const Double_t kTrigBendReso = AliMUONConstants::TriggerBendingReso();
+  const Double_t kSqrt12 = TMath::Sqrt(12.);
+  
+  TMatrixD trigCov(3,3);
+
+  Int_t localBoardId = locTrg.LoCircuit();
+      
+  Float_t y11 = circuit.GetY11Pos(localBoardId, locTrg.LoStripX()); 
+  Float_t z11 = circuit.GetZ11Pos(localBoardId, locTrg.LoStripX());
+  // need first to convert deviation to [0-30] 
+  // (see AliMUONLocalTriggerBoard::LocalTrigger)
+  Int_t deviation = locTrg.GetDeviation(); 
+  Int_t stripX21 = locTrg.LoStripX()+deviation+1;
+  Float_t y21 = circuit.GetY21Pos(localBoardId, stripX21);       
+  Float_t z21 = circuit.GetZ21Pos(localBoardId, stripX21);
+  Float_t x11 = circuit.GetX11Pos(localBoardId, locTrg.LoStripY());
+      
+  AliDebug(1, Form(" MakeTriggerTrack %3d %2d %2d %2d (%f %f %f) (%f %f)\n",locTrg.LoCircuit(),
+                   locTrg.LoStripX(),locTrg.LoStripX()+deviation+1,locTrg.LoStripY(),x11, y11, z11, y21, z21));
+      
+  Double_t deltaZ = z11 - z21;
+      
+  Float_t slopeX = x11/z11;
+  Float_t slopeY = (y11-y21) / deltaZ;
+      
+  Float_t sigmaX = circuit.GetX11Width(localBoardId, locTrg.LoStripY()) / kSqrt12;
+  Float_t sigmaY = circuit.GetY11Width(localBoardId, locTrg.LoStripX()) / kSqrt12;
+  Float_t sigmaY21 = circuit.GetY21Width(localBoardId, locTrg.LoStripX()) / kSqrt12;
+      
+  trigCov.Zero();
+  trigCov(0,0) = kTrigNonBendReso * kTrigNonBendReso + sigmaX * sigmaX;
+  trigCov(1,1) = kTrigBendReso * kTrigBendReso + sigmaY * sigmaY;
+  trigCov(2,2) = 
+    (2. * kTrigBendReso * kTrigBendReso + sigmaY * sigmaY + sigmaY21 * sigmaY21 ) / deltaZ / deltaZ;
+    trigCov(1,2) = trigCov(2,1) = trigCov(1,1) / deltaZ;
+      
+  triggerTrack.SetX11(x11);
+  triggerTrack.SetY11(y11);
+  triggerTrack.SetZ11(z11);
+  triggerTrack.SetZ21(z21);
+  triggerTrack.SetSlopeX(slopeX);
+  triggerTrack.SetSlopeY(slopeY);
+  triggerTrack.SetGTPattern(globalTriggerPattern);
+  triggerTrack.SetLoTrgNum(localBoardId);
+  triggerTrack.SetCovariances(trigCov);
+  triggerTrack.SetUniqueID(locTrg.GetUniqueID());
+}