// Dump to screen.
// If opt=="tracks", info on tracks are printed too.
//
- cout << "DetEle " << setw(5) << DetElemId()
+ cout << "<AliMUONDigit>: DetEle " << setw(5) << DetElemId()
<< " Cath " << setw(2) << Cathode()
<< " (Ix,Iy)=(" << setw(3) << PadX() << "," << setw(3) << PadY()
<< ") "
// Energy loss of the particle inside the gas active volume.
// Incident fTheta and fPhi angle with respect of the wire plane of the chamber.
//
+#include "Riostream.h"
#include <TMath.h>
+#include <TString.h>
+#include "AliLog.h"
#include "AliMUONHit.h"
#include "AliMUONGeometryStore.h"
-#include "AliLog.h"
+
ClassImp(AliMUONHit)
return AliMUONGeometryStore::GetModuleId(fDetElemId)+1;
}
+void AliMUONHit::Print(Option_t* opt) const
+{
+ //
+ // Printing hit information
+ // "full" option for printing all the information about the hit
+ //
+ TString sopt(opt);
+ sopt.ToUpper();
+
+ if ( sopt.Contains("FULL") ) {
+ cout <<"<AliMUONHit>: Geant track=" << setw(4) << Track() <<
+ ", DetEle=" << setw(4) << DetElemId() <<
+ ", (x,y,z)=(" << setw(7) << setprecision(5) << X() << "," << setw(7) << setprecision(5) << Y() << "," << setw(7) << setprecision(5) << Z() <<
+ " )cm, Delta E=" << setw(8) << setprecision(3) << Eloss() << " GeV" << endl;
+ }
+ else {
+ cout << "<AliMUONHit>: DetEle=" << setw(4) << DetElemId() <<
+ ", (x,y,z)=(" << setw(7) << setprecision(5) << X() << "," << setw(7) << setprecision(5) << Y() << "," << setw(7) << setprecision(5) << Z() <<
+ " ) cm" <<endl;
+ }
+
+}
Int_t DetElemId()const;
Int_t Chamber() const;
+ virtual void Print(Option_t* opt="") const;
+
Float_t Particle() const {return fParticle;}
Float_t Theta() const {return fTheta;}
Float_t Phi() const {return fPhi;}
Float_t Yref() const {return fYref;}
Float_t Zref() const {return fZref;}
+
private:
Bool_t fIsDetElemId; ///< False if fDetElemId contains Chamber Id (old code)
Int_t fDetElemId; ///< Detection element ID
// It contains the properties of the physics cluters found in the tracking chambers
// RawCluster contains also the information from the both cathode of the chambers.
+
+#include "Riostream.h"
+
#include <TArrayF.h>
+#include <TString.h>
#include "AliMUONRawCluster.h"
return 0;
}
}
+
+//____________________________________________________
+void AliMUONRawCluster::Print(Option_t* opt) const
+{
+ //
+ // Printing Raw Cluster (Rec Point) information
+ // "full" option for printing all the information about the raw cluster
+ //
+ TString sopt(opt);
+ sopt.ToUpper();
+
+ if ( sopt.Contains("FULL") ) {
+ cout << "<AliMUONRawCluster>: DetEle=" << setw(4) << GetDetElemId() <<
+ ", (x,y,z)=(" << setw(8) << setprecision(5) << GetX() << "," << setw(8) << setprecision(5) << GetY() << "," << setw(8) << setprecision(5) << GetZ() <<
+ ") cm, Chi2=" << setw(8) << setprecision(3) << GetChi2() <<
+ ", Q=" << setw(4) << GetCharge() <<
+ ", Hit=" << setw(4) << GetTrack(0) <<
+ ", Track1=" << setw(4) << GetTrack(1) <<
+ ", Track2=" << setw(4) << GetTrack(2) <<endl;
+ }
+ else {
+ cout << "<AliMUONRawCluster>: DetEle=" << setw(4) << GetDetElemId() <<
+ ", (x,y,z)=(" << setw(8) << setprecision(5) << GetX() << "," << setw(8) << setprecision(5) << GetY() << "," << setw(8) << setprecision(5) << GetZ()
+ << endl;
+ }
+}
//____________________________________________________
void AliMUONRawCluster::DumpIndex(void)
{
Bool_t IsSortable() const {return kTRUE;}
Int_t Compare(const TObject *obj) const;
Int_t PhysicsContribution() const;
+ virtual void Print(Option_t* opt="") const;
static Int_t BinarySearch(Float_t r, TArrayF ccord, Int_t from, Int_t upto);
static void SortMin(Int_t *idx,Float_t *xdarray, Float_t *xarray, Float_t *yarray, Float_t *qarray,Int_t ntr);
void DumpIndex();
Int_t AddY(Int_t i, Float_t Y);
Int_t AddZ(Int_t i, Float_t Z);
- Int_t GetCharge(Int_t i) const;
- Float_t GetX(Int_t i) const;
- Float_t GetY(Int_t i) const;
- Float_t GetZ(Int_t i) const;
- Int_t GetTrack(Int_t i) const;
- Int_t GetPeakSignal(Int_t i) const;
- Int_t GetMultiplicity(Int_t i) const;
+ Int_t GetCharge(Int_t i=0) const;
+ Float_t GetX(Int_t i=0) const;
+ Float_t GetY(Int_t i=0) const;
+ Float_t GetZ(Int_t i=0) const;
+ Int_t GetTrack(Int_t i=0) const;
+ Int_t GetPeakSignal(Int_t i=0) const;
+ Int_t GetMultiplicity(Int_t i=0) const;
Int_t GetClusterType() const;
Int_t GetGhost() const;
- Int_t GetNcluster(Int_t i) const;
- Float_t GetChi2(Int_t i) const;
+ Int_t GetNcluster(Int_t i=0) const;
+ Float_t GetChi2(Int_t i=0) const;
Int_t GetIndex(Int_t i, Int_t j) const;
Int_t GetOffset(Int_t i, Int_t j) const;
Float_t GetContrib(Int_t i, Int_t j) const;
ifail = 1;
} /* mnvertLocal */
+//_____________________________________________-
+void AliMUONTrack::Print(Option_t* opt) const
+{
+//
+ // Printing Track information
+ // "full" option for printing all the information about the track
+ //
+ TString sopt(opt);
+ sopt.ToUpper();
+
+ if ( sopt.Contains("FULL") ) {
+ cout << "<AliMUONTrack> No.Clusters=" << setw(2) << GetNTrackHits() <<
+ // ", Bending P="<< setw(8) << setprecision(5) << 1./GetInverseBendingMomentum() <<
+ //", NonBendSlope=" << setw(8) << setprecision(5) << GetNonBendingSlope()*180./TMath::Pi() <<
+ //", BendSlope=" << setw(8) << setprecision(5) << GetBendingSlope()*180./TMath::Pi() <<
+ ", Match2Trig=" << setw(1) << GetMatchTrigger() <<
+ ", Chi2-tracking-trigger=" << setw(8) << setprecision(5) << GetChi2MatchTrigger() << endl ;
+ GetTrackParamAtHit()->First()->Print("full");
+ }
+ else {
+ cout << "<AliMUONTrack>";
+ GetTrackParamAtHit()->First()->Print("");
+
+ }
+
+}
void Remove(void);
AliMUONTrackReconstructor* GetTrackReconstructor(void) const {return fTrackReconstructor;}
- AliMUONTrackParam* GetTrackParamAtVertex(void) {return &fTrackParamAtVertex;}
- void SetTrackParamAtVertex(void); // Set track parameters at vertex from last stations 4 & 5
- void SetTrackParamAtVertex(AliMUONTrackParam* TrackParam) {fTrackParamAtVertex = *TrackParam;}
- TClonesArray *GetTrackParamAtHit(void) const {return fTrackParamAtHit;}
- TClonesArray *GetHitForRecAtHit(void) const {return fHitForRecAtHit;}
- void ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); }
- void ResetHitForRecAtHit(void) { fHitForRecAtHit->Delete(); }
- void AddTrackParamAtHit(const AliMUONTrackParam *trackParam);
- void AddHitForRecAtHit(const AliMUONHitForRec *hitForRec);
-
- TObjArray* GetTrackHitsPtr(void) const {return fTrackHitsPtr;}
- Int_t GetNTrackHits(void) const {return fNTrackHits;}
- void SetNTrackHits(Int_t nTrackHits) {fNTrackHits = nTrackHits;}
- Int_t GetFitMCS(void) const {return fFitMCS;}
- Int_t GetFitNParam(void) const {return fFitNParam;}
- Int_t GetFitStart(void) const {return fFitStart;}
- Double_t GetFitFMin(void) const {return fFitFMin;}
- Bool_t GetMatchTrigger(void) const {return fMatchTrigger;}
- Double_t GetChi2MatchTrigger(void) const {return fChi2MatchTrigger;}
- void SetFitMCS(Int_t FitMCS);
- void SetFitNParam(Int_t FitNParam);
- void SetFitStart(Int_t FitStart);
- void SetFitFMin(Double_t chi2) { fFitFMin = chi2; } // set Chi2
-
- AliMUONTrackParam* GetTrackParamAtFirstHit(void) const;
-
- void RecursiveDump(void) const; // Recursive dump (with track hits)
- void Fit(); // Fit
- void AddSegment(AliMUONSegment* Segment); // Add Segment
- void AddHitForRec(AliMUONHitForRec* HitForRec); // Add HitForRec
- void SetTrackParamAtHit(Int_t indexHit, AliMUONTrackParam *TrackParam) const;
- Int_t HitsInCommon(AliMUONTrack* Track) const;
- void MatchTriggerTrack(TClonesArray* TriggerTrackArray);
- Bool_t* CompatibleTrack(AliMUONTrack* Track, Double_t Sigma2Cut) const; // return array of compatible chamber
+ AliMUONTrackParam* GetTrackParamAtVertex(void) {return &fTrackParamAtVertex;}
+ void SetTrackParamAtVertex(void); // Set track parameters at vertex from last stations 4 & 5
+ void SetTrackParamAtVertex(AliMUONTrackParam* TrackParam) {fTrackParamAtVertex = *TrackParam;}
+ TClonesArray* GetTrackParamAtHit(void) const {return fTrackParamAtHit;}
+ TClonesArray* GetHitForRecAtHit(void) const {return fHitForRecAtHit;}
+ void ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); }
+ void ResetHitForRecAtHit(void) { fHitForRecAtHit->Delete(); }
+ void AddTrackParamAtHit(const AliMUONTrackParam *trackParam);
+ void AddHitForRecAtHit(const AliMUONHitForRec *hitForRec);
+
+ TObjArray* GetTrackHitsPtr(void) const {return fTrackHitsPtr;}
+ Int_t GetNTrackHits(void) const {return fNTrackHits;}
+ void SetNTrackHits(Int_t nTrackHits) {fNTrackHits = nTrackHits;}
+ Int_t GetFitMCS(void) const {return fFitMCS;}
+ Int_t GetFitNParam(void) const {return fFitNParam;}
+ Int_t GetFitStart(void) const {return fFitStart;}
+ Double_t GetFitFMin(void) const {return fFitFMin;}
+ Bool_t GetMatchTrigger(void) const {return fMatchTrigger;}
+ Double_t GetChi2MatchTrigger(void) const {return fChi2MatchTrigger;}
+ void SetFitMCS(Int_t FitMCS);
+ void SetFitNParam(Int_t FitNParam);
+ void SetFitStart(Int_t FitStart);
+ void SetFitFMin(Double_t chi2) { fFitFMin = chi2; } // set Chi2
+
+ AliMUONTrackParam* GetTrackParamAtFirstHit(void) const;
+
+ void RecursiveDump(void) const; // Recursive dump (with track hits)
+ void Fit(); // Fit
+ void AddSegment(AliMUONSegment* Segment); // Add Segment
+ void AddHitForRec(AliMUONHitForRec* HitForRec); // Add HitForRec
+ void SetTrackParamAtHit(Int_t indexHit, AliMUONTrackParam *TrackParam) const;
+ Int_t HitsInCommon(AliMUONTrack* Track) const;
+ void MatchTriggerTrack(TClonesArray* TriggerTrackArray);
+ Bool_t* CompatibleTrack(AliMUONTrack* Track, Double_t Sigma2Cut) const; // return array of compatible chamber
- Int_t GetTrackID() const {return fTrackID;}
- void SetTrackID(Int_t trackID) {fTrackID = trackID;}
+ Int_t GetTrackID() const {return fTrackID;}
+ void SetTrackID(Int_t trackID) {fTrackID = trackID;}
+
+ virtual void Print(Option_t* opt="") const;
+
+ static TVirtualFitter* Fitter(void) {return fgFitter;}
+
- static TVirtualFitter* Fitter(void) {return fgFitter;}
protected:
private:
}
//__________________________________________________________________________
-Double_t AliMUONTrackParam::Px()
+Double_t AliMUONTrackParam::Px() const
{
// return px from track paramaters
Double_t pYZ, pZ, pX;
return pX;
}
//__________________________________________________________________________
-Double_t AliMUONTrackParam::Py()
+Double_t AliMUONTrackParam::Py() const
{
// return px from track paramaters
Double_t pYZ, pZ, pY;
return pY;
}
//__________________________________________________________________________
-Double_t AliMUONTrackParam::Pz()
+Double_t AliMUONTrackParam::Pz() const
{
// return px from track paramaters
Double_t pYZ, pZ;
return pZ;
}
//__________________________________________________________________________
-Double_t AliMUONTrackParam::P()
+Double_t AliMUONTrackParam::P() const
{
// return p from track paramaters
Double_t pYZ, pZ, p;
return;
}
+//_____________________________________________-
+void AliMUONTrackParam::Print(Option_t* opt) const
+{
+//
+ // Printing TrackParam information
+ // "full" option for printing all the information about the TrackParam
+ //
+ TString sopt(opt);
+ sopt.ToUpper();
+
+ if ( sopt.Contains("FULL") ) {
+ cout << "<AliMUONTrackParam> Bending P=" << setw(5) << setprecision(3) << 1./GetInverseBendingMomentum() <<
+ ", NonBendSlope=" << setw(5) << setprecision(3) << GetNonBendingSlope()*180./TMath::Pi() <<
+ ", BendSlope=" << setw(5) << setprecision(3) << GetBendingSlope()*180./TMath::Pi() <<
+ ", (x,y,z)_IP=(" << setw(5) << setprecision(3) << GetNonBendingCoor() <<
+ "," << setw(5) << setprecision(3) << GetBendingCoor() <<
+ "," << setw(5) << setprecision(3) << GetZ() <<
+ ") cm, (px,py,pz)=(" << setw(5) << setprecision(3) << Px() <<
+ "," << setw(5) << setprecision(3) << Py() <<
+ "," << setw(5) << setprecision(3) << Pz() << ") GeV/c" << endl;
+ }
+ else {
+ cout << "<AliMUONTrackParam>" << endl;
+ }
+
+}
AliMUONTrackParam& operator=(const AliMUONTrackParam& rhs);// (should be added per default !)
// Get and Set methods for data
Double_t GetInverseBendingMomentum(void) const {return fInverseBendingMomentum;}
- void SetInverseBendingMomentum(Double_t InverseBendingMomentum) {fInverseBendingMomentum = InverseBendingMomentum;}
+ void SetInverseBendingMomentum(Double_t InverseBendingMomentum) {fInverseBendingMomentum = InverseBendingMomentum;}
Double_t GetBendingSlope(void) const {return fBendingSlope;}
- void SetBendingSlope(Double_t BendingSlope) {fBendingSlope = BendingSlope;}
+ void SetBendingSlope(Double_t BendingSlope) {fBendingSlope = BendingSlope;}
Double_t GetNonBendingSlope(void) const {return fNonBendingSlope;}
- void SetNonBendingSlope(Double_t NonBendingSlope) {fNonBendingSlope = NonBendingSlope;}
+ void SetNonBendingSlope(Double_t NonBendingSlope) {fNonBendingSlope = NonBendingSlope;}
Double_t GetZ(void) const {return fZ;}
- void SetZ(Double_t Z) {fZ = Z;}
+ void SetZ(Double_t Z) {fZ = Z;}
Double_t GetBendingCoor(void) const {return fBendingCoor;}
- void SetBendingCoor(Double_t BendingCoor) {fBendingCoor = BendingCoor;}
+ void SetBendingCoor(Double_t BendingCoor) {fBendingCoor = BendingCoor;}
Double_t GetNonBendingCoor(void) const {return fNonBendingCoor;}
- void SetNonBendingCoor(Double_t NonBendingCoor) {fNonBendingCoor = NonBendingCoor;}
- Double_t Px(); // return px
- Double_t Py(); // return py
- Double_t Pz(); // return pz
- Double_t P(); // return total momentum
+ void SetNonBendingCoor(Double_t NonBendingCoor) {fNonBendingCoor = NonBendingCoor;}
+ Double_t Px() const; // return px
+ Double_t Py() const; // return py
+ Double_t Pz() const; // return pz
+ Double_t P() const; // return total momentum
void ExtrapToZ(Double_t Z);
void ExtrapToStation(Int_t Station, AliMUONTrackParam *TrackParam);
void ExtrapOneStepRungekutta(Double_t charge, Double_t step,
Double_t* vect, Double_t* vout) const;
+
+
+ virtual void Print(Option_t* opt="") const;
+
protected:
private:
Double_t fInverseBendingMomentum; ///< Inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion)
AliMUONHit* mHit;
for(ihit=0; ihit<nhits; ihit++) {
mHit = static_cast<AliMUONHit*>(muondata.Hits()->At(ihit));
- Int_t detele = mHit-> DetElemId(); // Detection element if defined
- Int_t hittrack = mHit->Track();
- Float_t x = mHit->X();
- Float_t y = mHit->Y();
- Float_t z = mHit->Z();
- Float_t elos = mHit->Eloss();
- Float_t momentum = mHit->Momentum();
- printf(">>> >>> Hit%4d DetEle %4d Track%4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Elost=%7.2gGeV P=%6.1fGeV/c\n",
- ihit, detele, hittrack,x,y,z,elos,momentum);
+ mHit->Print("full");
}
muondata.ResetHits();
} // end track loop
}
-
void MUONdigits(Int_t event2Check=0, char * filename="galice.root")
{
// Creating Run Loader and openning file containing Hits
// printf(">>> Chamber %2d, Number of recpoints = %6d \n",ichamber+1, nrecpoints);
for(irecpoint=0; irecpoint<nrecpoints; irecpoint++) {
mRecPoint = static_cast<AliMUONRawCluster*>(muondata.RawClusters(ichamber)->At(irecpoint));
- Int_t Track0 = mRecPoint->GetTrack(0);
- Int_t Track1 = mRecPoint->GetTrack(1);
- Int_t Track2 = mRecPoint->GetTrack(2);
- Int_t Q0 = mRecPoint->GetCharge(0);
- Int_t Q1 = mRecPoint->GetCharge(1);
- Float_t x0 = mRecPoint->GetX(0);
- Float_t x1 = mRecPoint->GetX(1);
- Float_t y0 = mRecPoint->GetY(0);
- Float_t y1 = mRecPoint->GetY(1);
- Float_t z0 = mRecPoint->GetZ(0);
- Float_t z1 = mRecPoint->GetZ(1);
- Float_t chi2_0 = mRecPoint->GetChi2(0);
- //Float_t chi2_1 = mRecPoint->GetChi2(1);
- Int_t de = mRecPoint->GetDetElemId();
- printf(">>> >>> RecPoint %4d DetEle %4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Q0=%4d Q1=%4d Hit=%4d Track1=%4d Track2=%4d Chi2=%6.3f \n",
- irecpoint,de,x0,y0,z0,Q0,Q1,Track0, Track1, Track2, chi2_0);
- if( (x0!=x1) || (y0!=y1) || (z0!=z1) )
- printf(">>> >>> Warning (X0,Y0,Z0)=(%7.2f, %7.2f, %8.2f)cm != (X1,Y1,Z1)=(%7.2f,%7.2f,%8.2f)cm \n",x0,y0,z0,x1,y1,z1);
+ mRecPoint->Print("full");
} // end recpoint loop
} // end chamber loop
muondata.ResetRawClusters();
printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
// loop over tracks
-
-
- Int_t nTrackHits;// nPrimary;
- Double_t fitFmin;
- Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum;
- Double_t xRec, yRec, zRec, chi2MatchTrigger;
- Bool_t matchTrigger;
- Double_t Pz,Px,Py,Pt,Ptot,Eta ;
-
- // setting pointer for tracks, triggertracks & trackparam at vertex
+
+ // setting pointer for tracks, triggertracks & trackparam at vertex
AliMUONTrack* recTrack = 0;
AliMUONTrackParam* trackParam = 0;
for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) {
- // reading info from tracks
- recTrack = (AliMUONTrack*) RecTracks->At(iRecTracks);
- trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
- trackParam->ExtrapToZ(0.0);
- 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();
-
- Px = trackParam->Px();
- Py = trackParam->Py();
- Pz = trackParam->Pz();
- Pt = TMath::Sqrt(Px*Px + Py*Py );
- Ptot = TMath::Sqrt(Px*Px + Py*Py + Pz*Pz);
- Eta = (Pt!=0) ? 0.5*log( (Ptot+Pz)/(Ptot-Pz) ) : 999999999.999 ;
-
- printf(">>> RecTrack %4d NofClusters=%2d BendMomentum=%7.2f NonBendSlope=%5.2f BendSlope=%5.2f Match2Trig=%1d (vertex@z=0)=(%5.2f,%5.2f,%5.1f)cm \n", iRecTracks, nTrackHits, 1/inverseBendingMomentum , nonBendingSlope*180./TMath::Pi(), bendingSlope*180./TMath::Pi(), matchTrigger, xRec,yRec,zRec);
- printf(" Px=%f Py =%f Pz =%f Pt=%f Ptot=%f PseudoRap=%f \n",Px,Py,Pz,Pt,Ptot,Eta);
+ // // reading info from tracks
+ recTrack = (AliMUONTrack*) RecTracks->At(iRecTracks);
+ trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
+ trackParam->ExtrapToZ(0.0);
+ recTrack->Print("full");
} // end loop tracks
muondata.ResetRecTracks();
MUONLoader->UnloadTracks();
}
-
-
-
-