X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSReconstructor.cxx;h=79036e5bdfb7329b4de26f94196b4db73f1f429f;hb=5dfd43f729829b46bc5cfdd8d7329c65dae681f2;hp=002290ce271b7122ed75ea3b75ebc7d209267de4;hpb=d22dd3b4c97413c1f0ade1f72953d155c0d315e1;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSReconstructor.cxx b/PHOS/AliPHOSReconstructor.cxx index 002290ce271..79036e5bdfb 100644 --- a/PHOS/AliPHOSReconstructor.cxx +++ b/PHOS/AliPHOSReconstructor.cxx @@ -55,7 +55,7 @@ Bool_t AliPHOSReconstructor::fgDebug = kFALSE ; } //____________________________________________________________________________ -void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader) const +void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader) const { // method called by AliReconstruction; // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track @@ -75,21 +75,26 @@ void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader) const } //____________________________________________________________________________ -void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader, AliRawReader* rawreader) const +void AliPHOSReconstructor::Reconstruct(AliRunLoader* runLoader, AliRawReader* rawreader) const { // method called by AliReconstruction; // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track // segment maker needs access to the AliESD object to retrieve the tracks reconstructed by // the global tracking. // Here we reconstruct from Raw Data - + rawreader->Reset() ; TString headerFile(runLoader->GetFileName()) ; TString branchName(runLoader->GetEventFolder()->GetName()) ; AliPHOSClusterizerv1 clu(headerFile, branchName); - clu.SetEventRange(0, 0) ; // reconstruct one events + clu.SetEventRange(0, -1) ; // do all the events clu.SetRawReader(rawreader); + + TString option = GetOption(); + if (option.Contains("OldRCUFormat")) + clu.SetOldRCUFormat(kTRUE); + if ( Debug() ) clu.ExecuteTask("deb all") ; else @@ -106,28 +111,60 @@ void AliPHOSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const Int_t eventNumber = runLoader->GetEventNumber() ; - AliPHOSGetter::Instance()->Event(eventNumber, "P") ; - TClonesArray *recParticles = AliPHOSGetter::Instance()->RecParticles(); + AliPHOSGetter *gime = AliPHOSGetter::Instance(); + gime->Event(eventNumber, "DRTP") ; + TClonesArray *recParticles = gime->RecParticles(); Int_t nOfRecParticles = recParticles->GetEntries(); - esd->SetNumberOfPHOSParticles(nOfRecParticles) ; - esd->SetFirstPHOSParticle(esd->GetNumberOfTracks()) ; + + esd->SetNumberOfPHOSClusters(nOfRecParticles) ; + esd->SetFirstPHOSCluster(esd->GetNumberOfCaloClusters()) ; for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) { AliPHOSRecParticle * rp = dynamic_cast(recParticles->At(recpart)); if (Debug()) rp->Print(); - AliESDtrack * et = new AliESDtrack() ; - // fills the ESDtrack - Double_t xyz[3]; + // Get track segment and EMC rec.point associated with this rec.particle + AliPHOSTrackSegment *ts = gime->TrackSegment(rp->GetPHOSTSIndex()); + AliPHOSEmcRecPoint *emcRP = gime->EmcRecPoint(ts->GetEmcIndex()); + AliESDCaloCluster *ec = new AliESDCaloCluster() ; + + // fills the ESDCaloCluster + Float_t xyz[3]; for (Int_t ixyz=0; ixyz<3; ixyz++) xyz[ixyz] = rp->GetPos()[ixyz]; - et->SetPHOSposition(xyz) ; - et->SetPHOSsignal (rp->Energy()) ; - et->SetPHOSpid (rp->GetPID()) ; - et->SetLabel (rp->GetPrimaryIndex()); + + Int_t digitMult = emcRP->GetDigitsMultiplicity(); + Int_t *digitsList = emcRP->GetDigitsList(); + UShort_t *amplList = new UShort_t[digitMult]; + UShort_t *timeList = 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; iDigitDigit(digitsList[iDigit]); + 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->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->SetPrimaryIndex (rp->GetPrimaryIndex());//index of primary particle (for simulations) + 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); //energies in 1/500 of GeV + ec->SetDigitTime(timeList); //times in 1/100 on ns + 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->AddTrack(et); - delete et; + esd->AddCaloCluster(ec); + delete ec; } }