Possibility to not write syswatch info to file (default)
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDMuonTrack.cxx
index 305f2e4..16d0391 100644 (file)
@@ -69,8 +69,10 @@ AliESDMuonTrack::AliESDMuonTrack ():
   fY4Pattern(0),
   fMuonClusterMap(0),
   fHitsPatternInTrigCh(0),
+  fHitsPatternInTrigChTrk(0),
   fNHit(0),
   fClusters(0x0),
+  fClustersId(0x0),
   fLabel(-1),
   fESDEvent(0)
 
@@ -116,8 +118,10 @@ AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& muonTrack):
   fY4Pattern(muonTrack.fY4Pattern),
   fMuonClusterMap(muonTrack.fMuonClusterMap),
   fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
+  fHitsPatternInTrigChTrk(muonTrack.fHitsPatternInTrigChTrk),
   fNHit(muonTrack.fNHit),
   fClusters(0x0),
+  fClustersId(0x0),
   fLabel(muonTrack.fLabel),
   fESDEvent(muonTrack.fESDEvent)
 {
@@ -136,6 +140,10 @@ AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& muonTrack):
       cluster = (AliESDMuonCluster*) muonTrack.fClusters->After(cluster);
     }
   }
+  
+  // copy of cluster Ids
+  if (muonTrack.fClustersId) fClustersId = new TArrayI(*(muonTrack.fClustersId));
+  
 }
 
 //_____________________________________________________________________________
@@ -188,6 +196,7 @@ AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
   fChi2MatchTrigger       = muonTrack.fChi2MatchTrigger; 
 
   fHitsPatternInTrigCh    = muonTrack.fHitsPatternInTrigCh;
+  fHitsPatternInTrigChTrk    = muonTrack.fHitsPatternInTrigChTrk;
  
   fMuonClusterMap        = muonTrack.fMuonClusterMap;
 
@@ -206,9 +215,19 @@ AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& muonTrack)
     }
   } else fClusters = 0x0;
   
+  // copy of cluster Ids
+  if (muonTrack.fClustersId) {
+    if (fClustersId) *fClustersId = *(muonTrack.fClustersId);
+    else fClustersId = new TArrayI(*(muonTrack.fClustersId));
+  } else {
+    delete fClustersId;
+    fClustersId = 0x0;
+  }
+  
   return *this;
 }
 
+//__________________________________________________________________________
 void AliESDMuonTrack::Copy(TObject &obj) const {
   
   /// This overwrites the virtual TOBject::Copy()
@@ -222,12 +241,12 @@ void AliESDMuonTrack::Copy(TObject &obj) const {
 
 }
 
-
 //__________________________________________________________________________
 AliESDMuonTrack::~AliESDMuonTrack()
 {
   /// Destructor
   delete fClusters;
+  delete fClustersId;
 }
 
 //__________________________________________________________________________
@@ -237,9 +256,10 @@ void AliESDMuonTrack::Clear(Option_t* opt)
   if (opt && opt[0] == 'C') {
     if (fClusters) fClusters->Clear("C");
   } else {
-    delete fClusters;
-    fClusters = 0x0;
+    delete fClusters; fClusters = 0x0;
   }
+  delete fClustersId; fClustersId = 0x0;
+  fNHit = 0;
 }
 
 //__________________________________________________________________________
@@ -278,8 +298,10 @@ void AliESDMuonTrack::Reset()
   fY4Pattern = 0;
   fMuonClusterMap = 0;
   fHitsPatternInTrigCh = 0;
+  fHitsPatternInTrigChTrk = 0;
   fNHit = 0;
   delete fClusters; fClusters = 0x0;
+  delete fClustersId; fClustersId = 0x0;
   for (Int_t i = 0; i < 15; i++) fCovariances[i] = 0.;
   fLabel = -1;
   fESDEvent = 0;
@@ -562,86 +584,85 @@ Int_t AliESDMuonTrack::GetMatchTrigger() const
 }
 
 //_____________________________________________________________________________
-Bool_t AliESDMuonTrack::MatchTriggerDigits() const
+Bool_t AliESDMuonTrack::MatchTriggerDigits(Bool_t fromTrack) const
 {
   // return kTRUE if the track matches a digit on both planes of at least 2 trigger chambers
   
+  UShort_t pattern = ( fromTrack ) ? fHitsPatternInTrigChTrk : fHitsPatternInTrigCh;
   Int_t nMatchedChambers = 0;
   for (Int_t ich=0; ich<4; ich++)
-    if (IsChamberHit(fHitsPatternInTrigCh, 0, ich) &&
-       IsChamberHit(fHitsPatternInTrigCh, 1, ich)) nMatchedChambers++;
+    if (IsChamberHit(pattern, 0, ich) &&
+       IsChamberHit(pattern, 1, ich)) nMatchedChambers++;
   
   return (nMatchedChambers >= 2);
 }
 
 //_____________________________________________________________________________
-Int_t AliESDMuonTrack::GetNClusters() const
+void AliESDMuonTrack::AddClusterId(UInt_t clusterId)
 {
-  /// return the number of clusters associated to the track
-  if (!fClusters) return 0;
-  
-  return fClusters->GetEntriesFast();
-}
-
-//_____________________________________________________________________________
-TClonesArray& AliESDMuonTrack::GetClusters() const
-{
-  /// return the array of clusters associated to the track
-  if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
-  
-  return *fClusters;
+  /// add the given cluster Id to the list associated to the track
+  if (!fClustersId) fClustersId = new TArrayI(5);
+  if (fClustersId->GetSize() <= fNHit) fClustersId->Set(fNHit+1);
+  fClustersId->AddAt(static_cast<Int_t>(clusterId), fNHit++);
 }
 
 //_____________________________________________________________________________
-void AliESDMuonTrack::AddCluster(const AliESDMuonCluster &cluster)
+void AliESDMuonTrack::MoveClustersToESD(AliESDEvent &esd)
 {
-  /// add a cluster to the TClonesArray of clusters associated to the track
-  if (!fClusters) fClusters = new TClonesArray("AliESDMuonCluster",10);
-  
-  new ((*fClusters)[fClusters->GetEntriesFast()]) AliESDMuonCluster(cluster);
-}
-
-//_____________________________________________________________________________
-Bool_t AliESDMuonTrack::ClustersStored() const
-{
-  /// return kTRUE if the clusters associated to the track are registered
-  if (GetNClusters() == 0) return kFALSE;
-  
-  return kTRUE;
+  /// move the clusters (and attached pads) to the new ESD structure
+  if (!fClusters) return;
+  fNHit = 0;
+  for (Int_t i = 0; i < fClusters->GetEntriesFast(); i++) {
+    AliESDMuonCluster *cluster = static_cast<AliESDMuonCluster*>(fClusters->UncheckedAt(i));
+    cluster->MovePadsToESD(esd);
+    AliESDMuonCluster *newCluster = esd.NewMuonCluster();
+    *newCluster = *cluster;
+    AddClusterId(newCluster->GetUniqueID());
+  }
+  delete fClusters;
+  fClusters = 0x0;
 }
 
 //_____________________________________________________________________________
-void AliESDMuonTrack::SetFiredChamber(UShort_t& pattern, Int_t cathode, Int_t chamber)
+void AliESDMuonTrack::SetFiredChamber(UInt_t& pattern, Int_t cathode, Int_t chamber)
 {
   /// Turn on the bit corresponding to fired chameber
   pattern |= (0x1 << ( 7 - ( 4*cathode + chamber )));
 }
 
 //_____________________________________________________________________________
-void AliESDMuonTrack::AddEffInfo(UShort_t& pattern, Int_t slatOrInfo, EAliTriggerChPatternFlag effType)
+void AliESDMuonTrack::AddEffInfo(UInt_t& pattern, Int_t slatOrInfo, Int_t board, EAliTriggerChPatternFlag effType)
 {
   /// Add efficiency flag and crossed RPC or info on rejected track
   pattern |= effType << 8;
   pattern |= slatOrInfo << 10;
+  pattern |= board << 15;
 }
 
 //_____________________________________________________________________________
-Bool_t AliESDMuonTrack::IsChamberHit(UShort_t pattern, Int_t cathode, Int_t chamber)
+Bool_t AliESDMuonTrack::IsChamberHit(UInt_t pattern, Int_t cathode, Int_t chamber)
 { 
   /// Check if chamber was was hit
   return (pattern >> (7 - ( 4*cathode + chamber ))) & 0x1;
 }
 
 //_____________________________________________________________________________
-Int_t AliESDMuonTrack::GetEffFlag(UShort_t pattern)
+Int_t AliESDMuonTrack::GetEffFlag(UInt_t pattern)
 {
   /// Get Efficiency flag
   return (pattern >> 8) & 0x03;
 }
 
 //_____________________________________________________________________________
-Int_t AliESDMuonTrack::GetSlatOrInfo(UShort_t pattern) 
+Int_t AliESDMuonTrack::GetSlatOrInfo(UInt_t pattern) 
 {
   /// Getting crossed slat or info
   return (pattern >> 10) & 0x1F;
 }
+
+//_____________________________________________________________________________
+Int_t AliESDMuonTrack::GetCrossedBoard(UInt_t pattern) 
+{
+  /// Getting crossed board
+  return ( pattern >> 15 ) & 0xFF;
+}