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();
}
void AliESDMuonTest(char * filename="galice.root", Int_t run=0){
- TClonesArray * recTracksArray;
-
+ TClonesArray* recTracksArray;
+ TClonesArray* recTrigTracksArray;
+ TTree* treeE;
// Creating Run Loader and openning file containing Hits
AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
if (RunLoader ==0x0) {
TFile *ef=TFile::Open("AliESD.Muon.root","RECREATE");
if (!ef->IsOpen()) cerr<<"Can't open AliESD.root file!\n";
- AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
+ treeE = new TTree("ESD", "ESD");
+
+ AliLoader* MUONLoader = RunLoader->GetLoader("MUONLoader");
MUONLoader->LoadTracks("READ");
// Creating MUON data container
Int_t nrectracks;
Double_t bendingSlope, nonBendingSlope, fInverseBendingMomentum;
- Double_t fXRec, fYRec, fZRec;
-
- Float_t x11, y11, thetaX,thetaY ;
+ Double_t fXRec, fYRec, fZRec, chi2MatchTrigger;
+ Bool_t matchTrigger;
nevents = RunLoader->GetNumberOfEvents();
-
+
// setting pointer for tracks, triggertracks& trackparam at vertex
- AliMUONTrack * rectrack;
- AliMUONTriggerTrack * rectriggertrack;
- AliMUONTrackParam *trackParam;
+ AliMUONTrack* rectrack;
+ AliMUONTriggerTrack* rectriggertrack;
+ AliMUONTrackParam* trackParam;
for (ievent = 0; ievent < nevents; ievent++) {
- RunLoader->GetEvent(ievent);
- // cerr<<"\n\nProcessing event number : "<<ievent<<endl;
+ RunLoader->GetEvent(ievent);
// setting ESD class pointer
- AliESD *event = new AliESD();
+ AliESD* event = new AliESD();
+ char name[255];
+ sprintf(name,"%s","AliESD");
+ treeE->Branch(name,"AliESD", &event);
+
event->SetRunNumber(run);
event->SetEventNumber(ievent);
- // -------------------- tracks-------------
-
// setting ESD MUON class
AliESDMuonTrack* ESDTrack = new AliESDMuonTrack() ;
+
+ // ---------------- tracks ----------------
muondata.SetTreeAddress("RT");
muondata.GetRecTracks();
recTracksArray = muondata.RecTracks();
-
- nrectracks = (Int_t) recTracksArray->GetEntriesFast(); //
-
- printf(">>> Event %d Number of Recconstructed tracks %d \n",ievent, nrectracks);
-
- // read track infos
- for (Int_t irectracks = 0; irectracks < nrectracks; irectracks++) {
+ nrectracks = (Int_t) recTracksArray->GetEntriesFast();
- 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 ----------
+ Long_t trigPat = 0;
- // -------------------- trigger tracks-------------
muondata.SetTreeAddress("RL");
muondata.GetRecTriggerTracks();
- recTracksArray = muondata.RecTriggerTracks();
-
- nrectracks = (Int_t) recTracksArray->GetEntriesFast(); //
-
+ recTrigTracksArray = muondata.RecTriggerTracks();
+ rectriggertrack = (AliMUONTriggerTrack*) recTrigTracksArray->First();
+ trigPat = rectriggertrack->GetGTPattern();
+
printf(">>> Event %d Number of Recconstructed tracks %d \n",ievent, nrectracks);
-
- // read trigger track infos
+
for (Int_t irectracks = 0; irectracks < nrectracks; irectracks++) {
- rectriggertrack = (AliMUONTriggerTrack*) recTracksArray->At(irectracks);
-
- x11 = rectriggertrack->GetY11();
- y11 = rectriggertrack->GetY11();
- thetaX = rectriggertrack->GetThetax();
- thetaY = rectriggertrack->GetThetay();
-
- // setting data member of ESD MUON trigger
- ESDTrack->SetThetaX11(thetaX);
- ESDTrack->SetThetaY11(thetaY);
- ESDTrack->SetX11(x11);
- ESDTrack->SetY11(y11);
- }
+ // ---------------- tracks ----------------
+ rectrack = (AliMUONTrack*) recTracksArray->At(irectracks);
+ trackParam = rectrack->GetTrackParamAtVertex();
+
+ bendingSlope = trackParam->GetBendingSlope();
+ nonBendingSlope = trackParam->GetNonBendingSlope();
+ // printf(" SlopeX %f SlopeY %f\n",bendingSlope ,nonBendingSlope);
+
+ fInverseBendingMomentum = trackParam->GetInverseBendingMomentum();
+ fXRec = trackParam->GetNonBendingCoor();
+ fYRec = trackParam->GetBendingCoor();
+ // printf(" X %f Y %f\n", fXRec, fYRec);
+
+ fZRec = trackParam->GetZ();
+ // printf(" Z %f\n", fZRec);
+
+ ntrackhits = rectrack->GetNTrackHits();
+ fitfmin = rectrack->GetFitFMin();
+ matchTrigger = rectrack->GetMatchTrigger();
+ chi2MatchTrigger = rectrack->GetChi2MatchTrigger();
+
+ // 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);
+ ESDTrack->SetMatchTrigger(matchTrigger);
+ ESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
+
+ // storing ESD MUON Track into ESD Event & reset muondata
+ event->AddMuonTrack(ESDTrack);
+ }// track loop
+
+ event->SetTrigger(trigPat);
- // storing ESD MUON Track into ESD Event & reset muondata
- event->AddMuonTrack(ESDTrack);
+ for (Int_t iTrack = 0; iTrack < event->GetNumberOfMuonTracks(); iTrack++) {
+ AliESDMuonTrack* muonTrack = event->GetMuonTrack(iTrack);
+ Double_t ptInv = TMath::Abs(muonTrack->GetInverseBendingMomentum());
+ cout << " ptInv: "<<ptInv <<" nb track: "<< event->GetNumberOfMuonTracks() << endl;
+ }
+ treeE->SetBranchAddress(name, &event);
+ treeE->Fill();
+ delete event;
+
muondata.ResetRecTracks();
muondata.ResetRecTriggerTracks();
- // writting ESD event
- Char_t ename[100];
- sprintf(ename,"%d",ievent);
- ef->cd();
- if (!event->Write(ename)) cerr<<"Something bad happened...\n";
- delete event;
-
} // end loop on event
+ ef->Write();
ef->Close();
MUONLoader->UnloadTracks();
- MUONLoader->UnloadTriggerTracks();
+ // delete event;
}
AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& MUONTrack):TObject(MUONTrack)
{
fInverseBendingMomentum = MUONTrack.fInverseBendingMomentum;
- fThetaX = MUONTrack.fThetaX;
- fThetaY = MUONTrack.fThetaY ;
- fZ = MUONTrack.fZ;
- fBendingCoor = MUONTrack.fBendingCoor;
- fNonBendingCoor = MUONTrack.fNonBendingCoor;
- fChi2 = MUONTrack.fChi2;
- fNHit= MUONTrack.fNHit ;
-
- fX11 = MUONTrack.fX11;
- fY11 = MUONTrack.fY11;
- fThetaX11 = MUONTrack.fThetaX11;
- fThetaY11 = MUONTrack.fThetaY11;
+ fThetaX = MUONTrack.fThetaX;
+ fThetaY = MUONTrack.fThetaY ;
+ fZ = MUONTrack.fZ;
+ fBendingCoor = MUONTrack.fBendingCoor;
+ fNonBendingCoor = MUONTrack.fNonBendingCoor;
+ fChi2 = MUONTrack.fChi2;
+ fNHit = MUONTrack.fNHit ;
+
+ fMatchTrigger = MUONTrack.fMatchTrigger;
+ fChi2MatchTrigger = MUONTrack.fChi2MatchTrigger;
}
AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& MUONTrack)
return *this;
fInverseBendingMomentum = MUONTrack.fInverseBendingMomentum;
- fThetaX = MUONTrack.fThetaX;
- fThetaY = MUONTrack.fThetaY ;
- fZ = MUONTrack.fZ;
- fBendingCoor = MUONTrack.fBendingCoor;
- fNonBendingCoor = MUONTrack.fNonBendingCoor;
- fChi2 = MUONTrack.fChi2;
- fNHit= MUONTrack.fNHit ;
-
- fX11 = MUONTrack.fX11;
- fY11 = MUONTrack.fY11;
- fThetaX11 = MUONTrack.fThetaX11;
- fThetaY11 = MUONTrack.fThetaY11;
-
+ fThetaX = MUONTrack.fThetaX;
+ fThetaY = MUONTrack.fThetaY ;
+ fZ = MUONTrack.fZ;
+ fBendingCoor = MUONTrack.fBendingCoor;
+ fNonBendingCoor = MUONTrack.fNonBendingCoor;
+ fChi2 = MUONTrack.fChi2;
+ fNHit = MUONTrack.fNHit ;
+
+ fMatchTrigger = MUONTrack.fMatchTrigger;
+ fChi2MatchTrigger = MUONTrack.fChi2MatchTrigger;
+
return *this;
}
UInt_t GetNHit(void) const {return fNHit;}
void SetNHit(UInt_t NHit) {fNHit = NHit;}
- Float_t GetX11() const {return fX11;}
- void SetX11(Float_t X11) {fX11 = X11;}
- Float_t GetY11() const {return fY11;}
- void SetY11(Float_t Y11) {fY11 = Y11;}
- Float_t GetThetaX11() const {return fThetaX11;}
- void SetThetaX11(Float_t ThetaX) {fThetaX11 = ThetaX;}
- Float_t GetThetaY11() const {return fThetaY11;}
- void SetThetaY11(Float_t ThetaY) {fThetaY11 = ThetaY;}
+ Bool_t GetMatchTrigger() const {return fMatchTrigger;}
+ void SetMatchTrigger(Bool_t MatchTrigger) {fMatchTrigger = MatchTrigger;}
+ Double_t GetChi2MatchTrigger() const {return fChi2MatchTrigger;}
+ void SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger;}
protected:
// tracking chamber
Double_t fChi2; // chi2 in the MUON track fit
UInt_t fNHit; // number of hit in the track
- // trigger chamber
- Float_t fX11; // x position of fired Y strip in MC11
- Float_t fY11; // y position of fired X strip in MC11
- Float_t fThetaX11; // track theta angle in X
- Float_t fThetaY11; // track theta angle in Y
+ // trigger matching
+ Bool_t fMatchTrigger; // 1 if track matches with trigger track, 0 if not
+ Double_t fChi2MatchTrigger; // chi2 of trigger/track matching
- ClassDef(AliESDMuonTrack,1) //MUON ESD track class
+
+ ClassDef(AliESDMuonTrack,2) //MUON ESD track class
};
#endif