#include "AliHeader.h"
#include "AliHitMap.h"
#include "AliLoader.h"
+#include "AliRunDigitizer.h"
#include "AliESD.h"
#include "AliESDMuonTrack.h"
#include "AliMC.h"
#include "AliMUONTriggerDecision.h"
#include "AliMUONVGeometryBuilder.h"
#include "AliRun.h"
-#include "AliMUONDigitizerv1.h"
+#include "AliMUONDigitizerv2.h"
+#include "AliMUONSDigitizerv1.h"
// Defaults parameters for Z positions of chambers
void AliMUON::SetTreeAddress()
{
GetMUONData()->SetLoader(fLoader);
- // GetMUONData()->MakeBranch("D,RC");
- // GetMUONData()->SetTreeAddress("H,D,RC");
+ // GetMUONData()->MakeBranch("D,S,RC");
+ // GetMUONData()->SetTreeAddress("H,D,S,RC");
GetMUONData()->SetTreeAddress("H");
-
if (fHits != GetMUONData()->Hits()) {
- if (gAlice->GetMCApp())
- gAlice->GetMCApp()->AddHitList (fHits); // For purifyKine, only necessary when Hit list is created in AliMUONData
+ if ( gAlice->GetMCApp() )
+ if ( gAlice->GetMCApp()->GetHitLists() ) {
+ fHits = GetMUONData()->Hits();
+ gAlice->GetMCApp()->AddHitList(fHits); // For purifyKine, only necessary when Hit list is created in AliMUONData
+ }
}
- fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector
-
+ fHits = GetMUONData()->Hits(); // Added by Ivana to use the methods FisrtHit, NextHit of AliDetector
}
//____________________________________________________________________
//____________________________________________________________________
AliDigitizer* AliMUON::CreateDigitizer(AliRunDigitizer* manager) const
{
- return new AliMUONDigitizerv1(manager);
+ return new AliMUONDigitizerv2(manager);
}
//_____________________________________________________________________
void AliMUON::SDigits2Digits()
fLoader->TreeD()->Reset();
}
+//_____________________________________________________________________
+void AliMUON::Hits2SDigits()
+{
+ // Adaption of AliMUONSDigitizerv1 to be excuted by the AliSimulation framework
+ AliRunLoader* runLoader = fLoader->GetRunLoader();
+ AliRunDigitizer * manager = new AliRunDigitizer(1,1);
+ manager->SetInputStream(0,runLoader->GetFileName(),AliConfig::GetDefaultEventFolderName());
+ AliMUONDigitizer * dMUON = new AliMUONSDigitizerv1(manager);
+ fLoader->LoadHits("READ");
+ for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
+ runLoader->GetEvent(iEvent);
+ dMUON->Exec("");
+ }
+ fLoader->UnloadHits();
+}
//_______________________________________________________________________
AliLoader* AliMUON::MakeLoader(const char* topfoldername)
{
//---------------------------- Track & TriggerTrack ---------------------
if (!fLoader->TreeT()) fLoader->MakeTracksContainer();
- // tracking branch
- dataEvent->MakeBranch("RT"); //track
- dataEvent->SetTreeAddress("RT");
- recoEvent->EventReconstruct();
- dataEvent->Fill("RT");
// trigger branch
dataEvent->MakeBranch("RL"); //trigger track
recoEvent->EventReconstructTrigger();
dataEvent->Fill("RL");
+ // tracking branch
+ dataEvent->MakeBranch("RT"); //track
+ dataEvent->SetTreeAddress("RT");
+ recoEvent->EventReconstruct();
+ dataEvent->Fill("RT");
+
fLoader->WriteTracks("OVERWRITE");
//--------------------------- Resetting branches -----------------------
TClonesArray* recTrigTracksArray;
//YS AliLoader* loader = GetLoader();
- AliRunLoader* runLoader = fLoader->GetRunLoader(); //YS loader->GetRunLoader();
+ AliRunLoader* runLoader = fLoader->GetRunLoader();
fLoader->LoadTracks("READ"); //YS
// declaration
- Int_t ievent;
- Int_t ntrackhits;
- Double_t fitfmin;
+ Int_t iEvent;
+ Int_t nTrackHits;
+ Double_t fitFmin;
- Double_t bendingSlope, nonBendingSlope, fInverseBendingMomentum;
- Double_t fXRec, fYRec, fZRec;
-
- Float_t x11, y11, thetaX,thetaY ;
+ Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum;
+ Double_t xRec, yRec, zRec, chi2MatchTrigger;
+ Bool_t matchTrigger;
//YS Int_t nEvents = runLoader->GetNumberOfEvents();
// setting pointer for tracks, triggertracks& trackparam at vertex
- AliMUONTrack * rectrack;
- AliMUONTriggerTrack * rectriggertrack;
- AliMUONTrackParam *trackParam;
-
- ievent = runLoader->GetEventNumber() ; //YS, seems not to be implemented yet (Ch. F)
- //YS for (ievent = 0; ievent < nEvents; ievent++) {
- runLoader->GetEvent(ievent);
+ AliMUONTrack* recTrack;
+ AliMUONTrackParam* trackParam;
+ AliMUONTriggerTrack* recTriggerTrack;
- // setting ESD MUON class
- AliESDMuonTrack* ESDTrack = new AliESDMuonTrack() ;
+ iEvent = runLoader->GetEventNumber() ; //YS, seems not to be implemented yet (Ch. F)
+ runLoader->GetEvent(iEvent);
- // -------------------- tracks-------------
- fMUONData->SetTreeAddress("RT");
- fMUONData->GetRecTracks();
- recTracksArray = fMUONData->RecTracks();
-
- Int_t nrectracks = (Int_t) recTracksArray->GetEntriesFast(); //
-
- //-------------------- trigger tracks-------------
- Bool_t ifirst = true;
- Long_t trigPat = 0;
- fMUONData->SetTreeAddress("RL");
- fMUONData->GetRecTriggerTracks();
- recTrigTracksArray = fMUONData->RecTriggerTracks();
-
- Int_t ntrectracks = (Int_t) recTrigTracksArray->GetEntriesFast(); //YS
-
- //printf(">>> Event %d Number of Recconstructed tracks %d \n",ievent, nrectracks);
-
- Int_t ntracks = TMath::Max(nrectracks, ntrectracks);
-
- // loop over tracks
- for (Int_t irectracks = 0; irectracks < ntracks; irectracks++) {
-
- // -------------------- tracks-------------
- // not the best way to do, avoid creating two "branches" in fMuonTracks
- if (irectracks < nrectracks) {
- rectrack = (AliMUONTrack*) recTracksArray->At(irectracks);
-
- trackParam = rectrack->GetTrackParamAtVertex();
-
- bendingSlope = trackParam->GetBendingSlope();
- nonBendingSlope = trackParam->GetNonBendingSlope();
- fInverseBendingMomentum = trackParam->GetInverseBendingMomentum();
- fXRec = trackParam->GetNonBendingCoor();
- fYRec = trackParam->GetBendingCoor();
- fZRec = trackParam->GetZ();
-
- ntrackhits = rectrack->GetNTrackHits();
- fitfmin = rectrack->GetFitFMin();
-
- // setting data member of ESD MUON
- ESDTrack->SetInverseBendingMomentum(fInverseBendingMomentum);
- ESDTrack->SetThetaX(TMath::ATan(nonBendingSlope));
- ESDTrack->SetThetaY(TMath::ATan(bendingSlope));
- ESDTrack->SetZ(fZRec);
- ESDTrack->SetBendingCoor(fYRec);
- ESDTrack->SetNonBendingCoor(fXRec);
- ESDTrack->SetChi2(fitfmin);
- ESDTrack->SetNHit(ntrackhits);
- }
- // -------------------- trigger tracks-------------
- if (irectracks < ntrectracks) {
- rectriggertrack = (AliMUONTriggerTrack*) recTrigTracksArray->At(irectracks);
- if (ifirst) {
- ifirst = false;
- trigPat = rectriggertrack->GetGTPattern();
- }
+ // setting ESD MUON class
+ AliESDMuonTrack* ESDTrack = new AliESDMuonTrack() ;
- x11 = rectriggertrack->GetY11();
- y11 = rectriggertrack->GetY11();
- thetaX = rectriggertrack->GetThetax();
- thetaY = rectriggertrack->GetThetay();
+ //-------------------- trigger tracks-------------
+ Long_t trigPat = 0;
+ fMUONData->SetTreeAddress("RL");
+ fMUONData->GetRecTriggerTracks();
+ recTrigTracksArray = fMUONData->RecTriggerTracks();
- // setting data member of ESD MUON trigger
- ESDTrack->SetThetaX11(thetaX);
- ESDTrack->SetThetaY11(thetaY);
- ESDTrack->SetX11(x11);
- ESDTrack->SetY11(y11);
- }
- // storing ESD MUON Track into ESD Event & reset muondata
- if (ntrectracks+ntrectracks != 0)
- event->AddMuonTrack(ESDTrack);
- } // end loop tracks
-
- // if (ntrectracks+ntrectracks != 0)
- // event->SetTrigger(trigPat);
- // Waiting for STEER update
- fMUONData->ResetRecTracks();
- fMUONData->ResetRecTriggerTracks();
-
- //} // end loop on event
- fLoader->UnloadTracks();
+ // ready global trigger pattern from first track
+ recTriggerTrack = (AliMUONTriggerTrack*) recTrigTracksArray->First();
+ trigPat = recTriggerTrack->GetGTPattern();
+
+ //printf(">>> Event %d Number of Recconstructed tracks %d \n",iEvent, nrectracks);
+
+ // -------------------- tracks-------------
+ fMUONData->SetTreeAddress("RT");
+ fMUONData->GetRecTracks();
+ recTracksArray = fMUONData->RecTracks();
+
+ Int_t nRecTracks = (Int_t) recTracksArray->GetEntriesFast(); //
+
+ // loop over tracks
+ for (Int_t iRecTracks = 0; iRecTracks < nRecTracks; iRecTracks++) {
+
+ // reading info from tracks
+ recTrack = (AliMUONTrack*) recTracksArray->At(iRecTracks);
+
+ trackParam = recTrack->GetTrackParamAtVertex();
+
+ bendingSlope = trackParam->GetBendingSlope();
+ nonBendingSlope = trackParam->GetNonBendingSlope();
+ inverseBendingMomentum = trackParam->GetInverseBendingMomentum();
+ xRec = trackParam->GetNonBendingCoor();
+ yRec = trackParam->GetBendingCoor();
+ zRec = trackParam->GetZ();
+
+ nTrackHits = recTrack->GetNTrackHits();
+ fitFmin = recTrack->GetFitFMin();
+ matchTrigger = recTrack->GetMatchTrigger();
+ chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
+
+ // setting data member of ESD MUON
+ ESDTrack->SetInverseBendingMomentum(inverseBendingMomentum);
+ ESDTrack->SetThetaX(TMath::ATan(nonBendingSlope));
+ ESDTrack->SetThetaY(TMath::ATan(bendingSlope));
+ ESDTrack->SetZ(zRec);
+ ESDTrack->SetBendingCoor(yRec);
+ ESDTrack->SetNonBendingCoor(xRec);
+ ESDTrack->SetChi2(fitFmin);
+ ESDTrack->SetNHit(nTrackHits);
+ ESDTrack->SetMatchTrigger(matchTrigger);
+ ESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
+
+ // storing ESD MUON Track into ESD Event
+ if (nRecTracks != 0)
+ event->AddMuonTrack(ESDTrack);
+ } // end loop tracks
+
+ // add global trigger pattern
+ if (nRecTracks != 0)
+ event->SetTrigger(trigPat);
+
+ // reset muondata
+ fMUONData->ResetRecTracks();
+ fMUONData->ResetRecTriggerTracks();
+
+ //} // end loop on event
+ fLoader->UnloadTracks();
}