X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSFastRecParticle.cxx;h=6ef6bfbf9b0a7a5fd07e583a557662cac5d89618;hb=e4f085eb5fdd3fdf4f496fdabe5953cea469a2ae;hp=12bcaca3e53dbb36e9d564e3ac783d171e39f0a4;hpb=9ec9156782e803b3bac716ca7410a1b4378d6d67;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSFastRecParticle.cxx b/PHOS/AliPHOSFastRecParticle.cxx index 12bcaca3e53..6ef6bfbf9b0 100644 --- a/PHOS/AliPHOSFastRecParticle.cxx +++ b/PHOS/AliPHOSFastRecParticle.cxx @@ -15,32 +15,57 @@ /* $Id$ */ +/* History of cvs commits: + * + * $Log$ + * Revision 1.39 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ + //_________________________________________________________________________ // A Particle modified by PHOS response and produced by AliPHOSvFast // To become a general class of AliRoot ? -// +//-- +// This is also a base class for AliPHOSRecParticle produced by AliPHOSPIDv1 +// The rec.particle type is to be defined by AliPHOSvFast or AliPHOSPIDv1 +//-- //*-- Author: Yves Schutz (SUBATECH) // --- ROOT system --- // --- Standard library --- -#include - // --- AliRoot header files --- - +#include "AliLog.h" #include "AliPHOSFastRecParticle.h" #include "TPad.h" #include "TPaveText.h" -ClassImp(AliPHOSFastRecParticle) ; +ClassImp(AliPHOSFastRecParticle) + +//____________________________________________________________________________ +AliPHOSFastRecParticle::AliPHOSFastRecParticle() : + fIndexInList(0), + fTof(0.f), + fType(0) +{ + // ctor + + for(Int_t i=0; iIsEditable()) return ; - + static TPaveText * clustertext = 0 ; - + switch (event) { case kButton1Down: { @@ -138,8 +181,8 @@ void AliPHOSFastRecParticle::ExecuteEvent(Int_t event, Int_t px, Int_t py) clustertext = new TPaveText(x-1, y+1, x+5, y+3, "") ; Text_t line1[40] ; Text_t line2[40] ; - sprintf( line1, "PID: %s ", (const char*)Name() ) ; - sprintf( line2, "ENERGY: %f ", Energy() ) ; + snprintf( line1,40, "PID: %s ", (const char*)Name() ) ; + snprintf( line2,40, "ENERGY: %f ", Energy() ) ; clustertext ->AddText(line1) ; clustertext ->AddText(line2) ; clustertext ->Draw(""); @@ -151,55 +194,312 @@ void AliPHOSFastRecParticle::ExecuteEvent(Int_t event, Int_t px, Int_t py) delete clustertext ; clustertext = 0 ; gPad->Update() ; - break ; + break ; } - } + +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsPhoton(TString purity) const +{ + // Rec.Particle is a photon if it has a photon-like shape, fast and neutral + // photon-like shape is defined with a purity "low", "medium" or "high" + purity.ToLower(); + Bool_t photonLike = kFALSE; + if (purity == "low" ) photonLike = TestPIDBit(6); + else if (purity == "medium") photonLike = TestPIDBit(7); + else if (purity == "high" ) photonLike = TestPIDBit(8); + if (photonLike && // photon by PCA + (TestPIDBit(5)||TestPIDBit(4)||TestPIDBit(3))&& // fast by TOF + (TestPIDBit(2)||TestPIDBit(1)||TestPIDBit(0))&& // neutral by CPV + !TestPIDBit(14)) // no charged track + return kTRUE ; + else + return kFALSE; } //____________________________________________________________________________ -Int_t * AliPHOSFastRecParticle::GetPrimaries(Int_t & number) +Bool_t AliPHOSFastRecParticle::IsPi0(TString purity) const { - // Retrieves the unique primary particle at the origine of the present reconstruced particle + // Rec.Particle is a pi0 if it has a pi0-like shape, fast and neutral + // pi0-like shape is defined with a purity "low", "medium" or "high" + + purity.ToLower(); + Bool_t pi0Like = kFALSE; + if (purity == "low" ) pi0Like = TestPIDBit(9); + else if (purity == "medium") pi0Like = TestPIDBit(10); + else if (purity == "high" ) pi0Like = TestPIDBit(11); + else + AliError(Form("Wrong purity type: %s",purity.Data())); + if (pi0Like && // pi0 by PCA + (TestPIDBit(5)||TestPIDBit(4)||TestPIDBit(3))&& // fast by TOF + (TestPIDBit(2)||TestPIDBit(1)||TestPIDBit(0))&& // neutral by CPV + !TestPIDBit(14)) // no charged track + return kTRUE ; + else + return kFALSE; +} - number = 1 ; - Int_t * list = new Int_t[1] ; - list[0] = fPrimary ; +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsElectron(TString purity) const +{ + // Rec.Particle is an electron if it has a photon-like shape, fast and charged + // photon-like shape is defined with a purity "low", "medium" or "high" + + purity.ToLower(); + Bool_t photonLike = kFALSE; + if (purity == "low" ) photonLike = TestPIDBit(6); + else if (purity == "medium") photonLike = TestPIDBit(7); + else if (purity == "high" ) photonLike = TestPIDBit(8); + else + AliError(Form("Wrong purity type: %s",purity.Data())); - return list ; + if (photonLike && // photon by PCA + (TestPIDBit(5)|| TestPIDBit(4)|| TestPIDBit(3))&& // fast by TOF + (!TestPIDBit(2)||!TestPIDBit(1)||!TestPIDBit(0))&& // charged by CPV + TestPIDBit(14)) // no charged track + return kTRUE ; + else + return kFALSE; } //____________________________________________________________________________ -TString AliPHOSFastRecParticle::Name() +Bool_t AliPHOSFastRecParticle::IsEleCon(TString purity) const { - // Returns the name of the particle type + // Rec.Particle is an electron if it has a photon-like shape, fast and charged + // photon-like shape is defined with a purity "low", "medium" or "high" + + purity.ToLower(); + Bool_t photonLike = kFALSE; + if (purity == "low" ) photonLike = TestPIDBit(6); + else if (purity == "medium") photonLike = TestPIDBit(7); + else if (purity == "high" ) photonLike = TestPIDBit(8); + else + AliError(Form("Wrong purity type: %s",purity.Data())); + if (photonLike && // photon by PCA + (TestPIDBit(5)|| TestPIDBit(4)|| TestPIDBit(3))&& // fast by TOF + (!TestPIDBit(2)||!TestPIDBit(1)||!TestPIDBit(0))&& // charged by CPV + !TestPIDBit(14)) // no charged track + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsHardPhoton() const +{ + // Rec.Particle is a hard photon (E > 30 GeV) if its second moment M2x + // corresponds to photons + if (TestPIDBit(12) && !TestPIDBit(14)) + return kTRUE; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsHardPi0() const +{ + // Rec.Particle is a hard pi0 (E > 30 GeV) if its second moment M2x + // corresponds to pi0 + if (TestPIDBit(13)&& !TestPIDBit(14)) + return kTRUE; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsHadron() const +{ + // Rec.Particle is an hadron if it does not look like + // a low-purity photon nor low-purity pi0 + + if ( !TestPIDBit(6) && !TestPIDBit(9) ) // not photon nor pi0 + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsChargedHadron() const +{ + // Rec.Particle is a charged hadron if it does not look like + // a low-purity photon nor low-purity pi0 and is low-purity charged + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + !TestPIDBit(2)) // charged by CPV + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsNeutralHadron() const +{ + // Rec.Particle is a neutral hadron if it does not look like + // a low-purity photon nor low-purity pi0 and is high-purity neutral + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + TestPIDBit(2)) // neutral by CPV + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsFastChargedHadron() const +{ + // Rec.Particle is a fast charged hadron if it does not look like + // a low-purity photon nor low-purity pi0, is low-purity charged + // and is high-purity fast + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + !TestPIDBit(2) && // charged by CPV + TestPIDBit(5)) // fast by TOF + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsSlowChargedHadron() const +{ + // Rec.Particle is a slow neutral hadron if it does not look like + // a low-purity photon nor low-purity pi0, is high-purity neutral + // and is not high-purity fast + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + !TestPIDBit(2) && // charged by CPV + !TestPIDBit(5)) // slow by TOF + return kTRUE ; + else + return kFALSE; + +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsFastNeutralHadron() const +{ + // Rec.Particle is a fast neutral hadron if it does not look like + // a low-purity photon nor low-purity pi0, is high-purity neutral + // and is high-purity fast + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + TestPIDBit(2) && // neutral by CPV + TestPIDBit(5)) // fast by TOF + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +Bool_t AliPHOSFastRecParticle::IsSlowNeutralHadron() const +{ + // Rec.Particle is a slow neutral hadron if it does not look like + // a low-purity photon nor low-purity pi0, is high-purity neutral + // and is not high-purity fast + + if ( !TestPIDBit(6) && !TestPIDBit(9) && // not photon nor pi0 + TestPIDBit(2) && // neutral by CPV + !TestPIDBit(5)) // slow by TOF + return kTRUE ; + else + return kFALSE; +} + +//____________________________________________________________________________ +TString AliPHOSFastRecParticle::Name() const +{ + // Returns the name of the particle type (only valid if PIDv1 is employed) + TString name ; - switch (fType) { - case kGAMMA: - name = "PHOTON" ; - break ; - case kELECTRON: - name = "ELECTRON" ; - break ; - case kCHARGEDHA: - name = "CHARGED_HA" ; - break ; - case kNEUTRALHA: - name = "NEUTRAL_HA" ; - break ; - case kNEUTRALEM: - name = "NEUTRAL_EM" ; - break ; - case kGAMMAHA: - name = "PHOTON_HA" ; - break ; + name = "Undefined particle" ; + + if (IsPhoton("low")) + name = "Photon low purity, "; + else if (IsPhoton("medium")) + name = "Photon medium purity, "; + else if (IsPhoton("high")) + name = "Photon high purity, "; + + if (IsPi0("low")) + name = "Pi0 low purity, "; + else if (IsPi0("medium")) + name = "Pi0 medium purity, "; + else if (IsPi0("high")) + name = "Pi0 high purity, "; + + if (IsElectron("low")) + name = "Electron low purity, "; + else if (IsElectron("medium")) + name = "Electron medium purity, "; + else if (IsElectron("high")) + name = "Electron high purity, "; + + if (IsHadron()) { + name = "hadron"; + if (IsChargedHadron()) { + name.Prepend("charged, "); + if (IsFastChargedHadron()) + name.Prepend("fast, "); + else if (IsSlowChargedHadron()) + name.Prepend("slow, "); + } + else if (IsNeutralHadron()) { + name.Prepend("neutral, "); + if (IsFastNeutralHadron()) + name.Prepend("fast, "); + else if (IsSlowNeutralHadron()) + name.Prepend("slow, "); + } } + return name ; } + +//______________________________________________________________________________ +void AliPHOSFastRecParticle::SetType(Int_t type) { + // sets the particle type + // bit-mask of the particle type means the following: + // bits 0,1,2 - neutral particle with low, medium and high purity + // bits 3.4,5 - fast particle with low, medium and high purity + // bits 6.7,8 - photon shower with low, medium and high purity + // bits 9,10,11 - hard-pi0 shower with low, medium and high purity + + fType = type ; + + if((type == 127) || (fType == 511) || (fType == 255) ||(fType == 383)||(fType == 447)){ + fPdgCode = 22 ; + return ; + } + + if ((fType == 63)|| ((fType < 8)&&(fType > 0)) ){ + fPdgCode = 2112 ; + return ; + } + if ( ((fType == 504) || (fType == 505) ||(fType == 248)||(fType == 249)||(fType == 120)||(fType == 121)) ){ + fPdgCode = 11 ; + return ; + } + if ((fType == 448) || (fType == 449) ||(fType == 192)||(fType == 193)||(fType == 64)||(fType == 64)){ + fPdgCode = 13 ; + return ; + } + if((fType == 56)||(fType == 57)){ + fPdgCode = 211 ; + return ; + } + if (fType == 0){ + fPdgCode = 2212 ; + return ; + } + +} + //______________________________________________________________________________ void AliPHOSFastRecParticle::Paint(Option_t *) { @@ -222,13 +522,35 @@ void AliPHOSFastRecParticle::Paint(Option_t *) } //____________________________________________________________________________ -void AliPHOSFastRecParticle::Print() +void AliPHOSFastRecParticle::Print(const Option_t *)const { - // Print the typr, energy and momentum - - cout << "AliPHOSFastRecParticle > " << "type is " << Name() << endl - << " " << "Energy = " << fE << endl - << " " << "Px = " << fPx << endl - << " " << "Py = " << fPy << endl - << " " << "Pz = " << fPz << endl ; + // Print the type, energy and momentum of the reconstructed particle + + AliInfo(Form("Print -----------------------------")) ; + printf("PID bits are %d%d%d %d%d%d %d%d%d %d%d%d", + TestPIDBit(0),TestPIDBit(1), + TestPIDBit(2),TestPIDBit(3), + TestPIDBit(4),TestPIDBit(5), + TestPIDBit(6),TestPIDBit(7), + TestPIDBit(8),TestPIDBit(9), + TestPIDBit(10),TestPIDBit(11)) ; + printf(", type is \"%s\"\n", Name().Data()) ; + printf(" (E,Px,Py,Pz) = (% .3e, % .3e, % .3e, % .3e) GeV\n", + Energy(), + Px(), + Py(), + Pz() ) ; + printf(" TOF = %.3e ns\n", ToF() ) ; + printf(" PID weight: \n" ) ; + printf(" photon -> %f\n", fPID[AliPID::kPhoton] ) ; + printf(" electron -> %f\n", fPID[AliPID::kElectron] ) ; + printf(" Conversion electron -> %f\n", fPID[AliPID::kEleCon] ) ; + printf(" muon -> %f\n", fPID[AliPID::kMuon] ) ; + printf(" neutral pion -> %f\n", fPID[AliPID::kPi0] ) ; + printf(" charged pion -> %f\n", fPID[AliPID::kPion] ) ; + printf(" charged kaon -> %f\n", fPID[AliPID::kKaon] ) ; + printf(" neutral kaon -> %f\n", fPID[AliPID::kKaon0] ) ; + printf(" proton -> %f\n", fPID[AliPID::kProton] ) ; + printf(" neutron -> %f\n", fPID[AliPID::kNeutron] ) ; + }