]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSReconstructor.cxx
Class to produce PHOS digits from raw data stream.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSReconstructor.cxx
index 8d99cb83d6b9f80f6d7f551ac33424206484fff7..cdd3cae2cabac351952b60ef25c1a4eed0e32bf5 100644 (file)
@@ -117,7 +117,9 @@ void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
   Int_t nOfRecParticles = recParticles->GetEntries();
 
   esd->SetNumberOfPHOSClusters(nOfRecParticles) ; 
-  esd->SetFirstPHOSCluster(esd->GetNumberOfCaloClusters()) ; 
+  esd->SetFirstPHOSCluster(esd->GetNumberOfCaloClusters()) ;
+  
+  AliDebug(2,Form("%d digits and %d rec. particles in event %d, option %s",gime->Digits()->GetEntries(),nOfRecParticles,eventNumber,GetOption()));
 
   for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) {
     AliPHOSRecParticle * rp = dynamic_cast<AliPHOSRecParticle*>(recParticles->At(recpart));
@@ -132,7 +134,9 @@ void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
     Float_t xyz[3];
     for (Int_t ixyz=0; ixyz<3; ixyz++) 
       xyz[ixyz] = rp->GetPos()[ixyz];
-
+    
+    AliDebug(2,Form("Global position xyz=(%f,%f,%f)",xyz[0],xyz[1],xyz[2]));
+    
     Int_t  digitMult  = emcRP->GetDigitsMultiplicity();
     Int_t *digitsList = emcRP->GetDigitsList();
     UShort_t *amplList  = new UShort_t[digitMult];
@@ -142,10 +146,12 @@ void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
     // Convert Float_t* and Int_t* to UShort_t* to save memory
     for (Int_t iDigit=0; iDigit<digitMult; iDigit++) {
       AliPHOSDigit *digit = gime->Digit(digitsList[iDigit]);
-      amplList[iDigit] = (UShort_t)(digit->GetEnergy()*500);
-      amplList[iDigit] = (UShort_t)(digit->GetTime()*1e9*100);
+      amplList[iDigit] = (UShort_t)(digit->GetEnergy()*500); // Energy in units of GeV/500
+      timeList[iDigit] = (UShort_t)(digit->GetTime()*1e9*100); // time in units of 0.01 ns
       digiList[iDigit] = (UShort_t)(digit->GetId());
     }
+
+    ec->SetPHOS(kTRUE);
     ec->SetGlobalPosition(xyz);                 //rec.point position in MARS
     ec->SetClusterEnergy(rp->Energy());         //total particle energy
     ec->SetClusterDisp(emcRP->GetDispersion()); //cluster dispersion
@@ -164,8 +170,84 @@ void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
 
     // add the track to the esd object
     esd->AddCaloCluster(ec);
-    delete ec;
+    delete ec;    
+  }  
+}
+
+//____________________________________________________________________________
+void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader,
+                                  AliRawReader* rawReader, AliESD* esd) const
+{
+  //This function creates AliESDtracks from AliPHOSRecParticles 
+  //and writes them to the ESD in the case of raw data reconstruction.
+
+  Int_t eventNumber = runLoader->GetEventNumber() ;
+
+  AliPHOSGetter *gime = AliPHOSGetter::Instance();
+  gime->Event(eventNumber, "DRTP") ; 
+
+  TClonesArray *recParticles  = gime->RecParticles();
+  Int_t nOfRecParticles = recParticles->GetEntries();
+
+  esd->SetNumberOfPHOSClusters(nOfRecParticles) ; 
+  esd->SetFirstPHOSCluster(esd->GetNumberOfCaloClusters()) ;
+  
+  AliDebug(2,Form("%d digits and %d rec. particles in event %d, option %s",gime->Digits()->GetEntries(),nOfRecParticles,eventNumber,GetOption()));
+
+  for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) {
+    AliPHOSRecParticle * rp = dynamic_cast<AliPHOSRecParticle*>(recParticles->At(recpart));
+
+    if(rp) {
+    Float_t xyz[3];
+    for (Int_t ixyz=0; ixyz<3; ixyz++) 
+      xyz[ixyz] = rp->GetPos()[ixyz];
+
+    AliDebug(2,Form("Global position xyz=(%f,%f,%f)",xyz[0],xyz[1],xyz[2]));
+    
+    AliPHOSTrackSegment *ts    = gime->TrackSegment(rp->GetPHOSTSIndex());
+    AliPHOSEmcRecPoint  *emcRP = gime->EmcRecPoint(ts->GetEmcIndex());
+    AliESDCaloCluster   *ec    = new AliESDCaloCluster() ; 
+
+    Int_t  digitMult  = emcRP->GetDigitsMultiplicity();
+    Int_t *digitsList = emcRP->GetDigitsList();
+    UShort_t *amplList  = new UShort_t[digitMult];
+    UShort_t *digiList  = new UShort_t[digitMult];
+
+    // Convert Float_t* and Int_t* to UShort_t* to save memory
+    for (Int_t iDigit=0; iDigit<digitMult; iDigit++) {
+      AliPHOSDigit *digit = gime->Digit(digitsList[iDigit]);
+      if(!digit) {
+       AliFatal(Form("Digit not found at the expected position %d!",iDigit));
+      }
+      else {
+       amplList[iDigit] = (UShort_t)digit->GetEnergy();
+       digiList[iDigit] = (UShort_t)(digit->GetId());
+      }
+    }
+
+    ec->SetPHOS(kTRUE);
+    ec->SetGlobalPosition(xyz);                 //rec.point position in MARS
+    ec->SetClusterEnergy(rp->Energy());         //total particle energy
+    ec->SetClusterDisp(emcRP->GetDispersion()); //cluster dispersion
+    ec->SetPid          (rp->GetPID()) ;        //array of particle identification
+    ec->SetM02(emcRP->GetM2x()) ;               //second moment M2x
+    ec->SetM20(emcRP->GetM2z()) ;               //second moment M2z
+    ec->SetNExMax(emcRP->GetNExMax());          //number of local maxima
+    ec->SetNumberOfDigits(digitMult);           //digit multiplicity
+    ec->SetDigitAmplitude(amplList);            //digit energies
+    ec->SetDigitIndex(digiList);                //abs id of the cell
+    ec->SetEmcCpvDistance(-1);                  //not yet implemented
+    ec->SetClusterChi2(-1);                     //not yet implemented
+    ec->SetM11(-1) ;                            //not yet implemented
+
+    // add the track to the esd object
+    esd->AddCaloCluster(ec);
+    delete ec;    
+
+    }
   }
+
+
 }
 
 AliTracker* AliPHOSReconstructor::CreateTracker(AliRunLoader* runLoader) const