]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Fill ESD MUON clusters with additional informations (including pads)
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 18 Dec 2007 11:37:09 +0000 (11:37 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 18 Dec 2007 11:37:09 +0000 (11:37 +0000)
(Philippe P.)

MUON/AliMUONReconstructor.cxx
MUON/AliMUONSimpleClusterServer.cxx
MUON/AliMUONTracker.cxx
MUON/AliMUONTracker.h

index de4773e2be2784c07a48d1355dec48bbfb38a31a..13084e40b76c2cb18cccdee95fb3e008d0b094ea 100644 (file)
@@ -312,9 +312,8 @@ AliMUONReconstructor::CreateTracker() const
     return 0x0;
   }
   
-  fClusterServer->UseDigitStore(*(DigitStore()));
-  
   AliMUONTracker* tracker = new AliMUONTracker(*fClusterServer,
+                                              *DigitStore(),
                                                fDigitMaker,
                                                fTransformer,
                                                fTriggerCircuit);
index 542661be70ea50ed888569b3d244d0028fda1004..75be8736a6e0870ebbf9bb22046582acb1ac260e 100644 (file)
@@ -229,11 +229,16 @@ AliMUONSimpleClusterServer::Clusterize(Int_t chamberId,
           for (Int_t iPad=0; iPad<nPad; iPad++) 
           {
             AliMUONPad *pad = cluster->Pad(iPad);
-            rawCluster->AddDigitId(pad->GetUniqueID());
+           
+           // skip virtual pads
+           if (!pad->IsReal()) continue;
+            
+           rawCluster->AddDigitId(pad->GetUniqueID());
           }
           
           // fill charge and other cluster informations
           rawCluster->SetCharge(cluster->Charge());
+          rawCluster->SetChi2(cluster->Chi2());
           
           Double_t xg, yg, zg;
           fTransformer.Local2Global(detElemId, 
@@ -242,7 +247,7 @@ AliMUONSimpleClusterServer::Clusterize(Int_t chamberId,
           rawCluster->SetXYZ(xg, yg, zg);
           
           AliDebug(1,Form("Adding RawCluster detElemId %4d mult %2d charge %e (xl,yl,zl)=(%e,%e,%e) (xg,yg,zg)=(%e,%e,%e)",
-                          detElemId,nPad,cluster->Charge(),
+                          detElemId,rawCluster->GetNDigits(),rawCluster->GetCharge(),
                           cluster->Position().X(),cluster->Position().Y(),0.0,
                           xg,yg,zg));
         }
index 797b4dc8c4e274fe4be19f354df8c722b982298c..af0c7242927bbb43d550d6589f86387e67a6f7f6 100644 (file)
@@ -41,6 +41,7 @@
 #include "AliMUONTrackParam.h"
 #include "AliMUONVCluster.h"
 #include "AliMUONVClusterServer.h"
+#include "AliMUONVDigitStore.h"
 #include "AliMUONTrackReconstructor.h"
 #include "AliMUONTrackReconstructorK.h"
 #include "AliMUONTrackStoreV1.h"
 #include "AliESDEvent.h"
 #include "AliESDMuonTrack.h"
 #include "AliESDMuonCluster.h"
+#include "AliESDMuonPad.h"
 #include "AliESDVertex.h"
 #include "AliLog.h"
 #include "AliCodeTimer.h"
 
 #include <Riostream.h>
 #include <TTree.h>
+#include <TRandom.h>
 
 /// \cond CLASSIMP
 ClassImp(AliMUONTracker)
@@ -65,6 +68,7 @@ ClassImp(AliMUONTracker)
 
 //_____________________________________________________________________________
 AliMUONTracker::AliMUONTracker(AliMUONVClusterServer& clusterServer,
+                              const AliMUONVDigitStore& digitStore,
                                const AliMUONDigitMaker* digitMaker,
                                const AliMUONGeometryTransformer* transformer,
                                const AliMUONTriggerCircuit* triggerCircuit)
@@ -76,11 +80,14 @@ AliMUONTracker::AliMUONTracker(AliMUONVClusterServer& clusterServer,
   fTrackReco(0x0),
   fClusterStore(0x0),
   fTriggerStore(0x0),
-  fClusterServer(clusterServer)
+  fClusterServer(clusterServer), // not owner
+  fDigitStore(digitStore) // not owner
 {
   /// constructor
   if (fTransformer && fDigitMaker)
     fTrackHitPatternMaker = new AliMUONTrackHitPattern(*fTransformer,*fDigitMaker);
+  
+  fClusterServer.UseDigitStore(fDigitStore);
 }
 
 //_____________________________________________________________________________
@@ -191,6 +198,10 @@ void AliMUONTracker::FillESD(AliMUONVTrackStore& trackStore, AliESDEvent* esd) c
   AliDebug(1,"");
   AliCodeTimerAuto("")
   
+  // Random number to decide whether to save additional cluster info or not for the current event
+  Double_t rand = 0.;
+  if (AliMUONReconstructor::GetRecoParam()->SaveFullClusterInESD()) rand = gRandom->Uniform(0.,100.);
+  
   // Get vertex 
   Double_t vertex[3] = {0};
   Double_t errXVtx = 0., errYVtx = 0.;
@@ -203,18 +214,18 @@ void AliMUONTracker::FillESD(AliMUONVTrackStore& trackStore, AliESDEvent* esd) c
     AliDebug(1,Form("found vertex (%e,%e,%e)",vertex[0],vertex[1],vertex[2]));
   }
   
-  // setting ESD MUON class
-  AliESDMuonTrack esdTrack;
-  AliESDMuonCluster esdCluster;
-  
   AliMUONTrack* track;
   AliMUONVCluster* cluster;
+  AliMUONVDigit* digit;
   TIter next(trackStore.CreateIterator());
   
   while ( ( track = static_cast<AliMUONTrack*>(next()) ) )
   {
     AliMUONTrackParam* trackParam = static_cast<AliMUONTrackParam*>((track->GetTrackParamAtCluster())->First());
     
+    // new ESD muon track
+    AliESDMuonTrack esdTrack;
+    
     /// Extrapolate to vertex (which is set to (0,0,0) if not available, see above)
     AliMUONTrackParam trackParamAtVtx(*trackParam);
     AliMUONTrackExtrap::ExtrapToVertex(&trackParamAtVtx, vertex[0], vertex[1], vertex[2], errXVtx, errYVtx);
@@ -223,31 +234,63 @@ void AliMUONTracker::FillESD(AliMUONVTrackStore& trackStore, AliESDEvent* esd) c
     AliMUONTrackParam trackParamAtDCA(*trackParam);
     AliMUONTrackExtrap::ExtrapToVertexWithoutBranson(&trackParamAtDCA, vertex[2]);
     
-    // setting data member of ESD MUON
-    esdTrack.Clear("C");           // remove already attached clusters
-    esdTrack.SetMuonClusterMap(0); // important to use the Add..() methods
-    
     // at first station
     trackParam->SetParamForUncorrected(esdTrack);
     trackParam->SetCovFor(esdTrack);
+    
     // at vertex
     trackParamAtVtx.SetParamFor(esdTrack);
+    
     // at Distance of Closest Approach
     trackParamAtDCA.SetParamForDCA(esdTrack);
+    
     // global info
     esdTrack.SetChi2(track->GetGlobalChi2());
     esdTrack.SetNHit(track->GetNClusters());
     esdTrack.SetLocalTrigger(track->GetLocalTrigger());
     esdTrack.SetChi2MatchTrigger(track->GetChi2MatchTrigger());
     esdTrack.SetHitsPatternInTrigCh(track->GetHitsPatternInTrigCh());
+    
     // muon cluster info
     while (trackParam) {
       cluster = trackParam->GetClusterPtr();
+      
+      // new ESD muon cluster
+      AliESDMuonCluster esdCluster;
+      
+      // fill minimum info in ESD cluster
       esdCluster.SetUniqueID(cluster->GetUniqueID());
       esdCluster.SetXYZ(cluster->GetX(), cluster->GetY(), cluster->GetZ());
       esdCluster.SetErrXY(cluster->GetErrX(), cluster->GetErrY());
+      
+      // fill additional info in ESD cluster if required and only for a fraction of events
+      if (AliMUONReconstructor::GetRecoParam()->SaveFullClusterInESD() && 
+         rand <= AliMUONReconstructor::GetRecoParam()->GetPercentOfFullClusterInESD()) {
+       
+       esdCluster.SetCharge(cluster->GetCharge());
+       esdCluster.SetChi2(cluster->GetChi2());
+       
+       // fill ESD pad with digit info
+       for (Int_t i=0; i<cluster->GetNDigits(); i++) {
+         digit = fDigitStore.FindObject(cluster->GetDigitId(i));
+         
+         // new ESD muon pad
+         AliESDMuonPad esdPad;
+         
+         esdPad.SetUniqueID(digit->GetUniqueID());
+         esdPad.SetADC(digit->ADC());
+         esdPad.SetCharge(digit->Charge());
+         
+         // add pad info in ESD cluster
+         esdCluster.AddPad(esdPad);
+       }
+       
+      }
+      
+      // add cluster info in ESD track
       esdTrack.AddCluster(esdCluster);
       esdTrack.AddInMuonClusterMap(cluster->GetChamberId());
+      
       trackParam = static_cast<AliMUONTrackParam*>(track->GetTrackParamAtCluster()->After(trackParam));
     }
     
index d320c9edc67296c45136b5cdcaeb42174cf0c447..21fa72f369ce35f0fe03dd951346400878d3c20f 100644 (file)
@@ -23,12 +23,14 @@ class AliMUONVTrackReconstructor;
 class AliMUONVTrackStore;
 class AliMUONVTriggerStore;
 class AliMUONVClusterServer;
+class AliMUONVDigitStore;
 
 class AliMUONTracker : public AliTracker
 {
  public:
 
   AliMUONTracker(AliMUONVClusterServer& clusterServer,
+                const AliMUONVDigitStore& digitStore,
                  const AliMUONDigitMaker* digitMaker=0,
                  const AliMUONGeometryTransformer* transformer=0,
                  const AliMUONTriggerCircuit* triggerCircuit=0);
@@ -68,6 +70,7 @@ private:
   mutable AliMUONVClusterStore* fClusterStore; //!< cluster container
   AliMUONVTriggerStore* fTriggerStore; //!< trigger information
   AliMUONVClusterServer& fClusterServer; //!< to get clusters
+  const AliMUONVDigitStore& fDigitStore; //!< digit info to fill in ESD
   
   ClassDef(AliMUONTracker,0)  //tracker base class for MUON
 };