Added bit for average of particle and antiparticle
authormfloris <michele.floris@cern.ch>
Mon, 28 Apr 2014 14:39:22 +0000 (16:39 +0200)
committermfloris <michele.floris@cern.ch>
Tue, 13 May 2014 12:06:30 +0000 (14:06 +0200)
* AliParticleYield.h: Added type bit for average of particles and antiparticles
* AliParticleYield.cxx (CheckTypeConsistency): Fixed problem: was not returning kFALSE when needed
  (CheckTypeConsistency): Added check on part anti part average.

PWGLF/ThermalFits/AliParticleYield.cxx
PWGLF/ThermalFits/AliParticleYield.h

index b3a73db..42bf072 100644 (file)
@@ -615,9 +615,15 @@ Bool_t AliParticleYield::CheckTypeConsistency() const {
     isOK= kFALSE;
   } else if (!(fMeasurementType & kTypeOnlyTotError) && (!GetStatError() || !GetSystError())) {
     AliError("Stat or syst errors are null");
+    isOK = kFALSE;
   } 
   if((fMeasurementType & kTypeLinearInterpolation) && (fMeasurementType & kTypeAverageAndRefit) && (fMeasurementType & kTypeExtrPionRatio)) {
     AliError("Only one out of the \"Liner interpolation\",  \"Average and refit\", \"Extrapolated with constant ratio to pions\" bits can be set"); 
+    isOK = kFALSE;
+  }
+  if((fMeasurementType & kTypeAveragePartAntiPart) && !fIsSum) {
+    AliError("Average part antipart set, but fIsSum is 0! This type bit should only be set for sums.");
+    isOK = kFALSE;
   }
 
   return isOK;
@@ -644,11 +650,14 @@ void AliParticleYield::Print (Option_t *opt) const {
   } else {
     Printf("-------------------------------");
     CheckTypeConsistency();
+    TString sumType = "";
+    if      (fIsSum && (fMeasurementType & kTypeAveragePartAntiPart)) sumType = "(particle + antiparticle)/2";
+    else if (fIsSum && !(fMeasurementType & kTypeAveragePartAntiPart)) sumType = "particle + antiparticle";
     if(fMeasurementType & kTypeParticleRatio) {
-      Printf("%s [%s] (%d/%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fPdgCode2, fIsSum ? "particle + antiparticle" : "", fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
+      Printf("%s [%s] (%d/%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fPdgCode2, sumType.Data(), fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
     }
     else{ 
-      Printf("%s [%s] (%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fIsSum ? "particle + antiparticle" : "", fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
+      Printf("%s [%s] (%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, sumType.Data(), fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
     }
     TString measurementType = IsTypeMeasured() ? "Measured" : ""; 
     if(fMeasurementType & kTypeLinearInterpolation) measurementType += "Interpolated";
@@ -923,7 +932,10 @@ AliParticleYield * AliParticleYield::Divide (AliParticleYield * part1, AliPartic
   }
   
   if(correlatedError) {
+    std::cout << "Subtracting correlated error " << correlatedError << std::endl;
+    std::cout << "Before : " << syst << "[" << syst/value*100 <<"%]"<< std::endl;    
     syst = TMath::Sqrt(syst/value*syst/value -correlatedError*correlatedError)*value; // FIXME: this line was never tested
+    std::cout << "After  : " << syst << "[" << syst/value*100 <<"%]"<< std::endl;    
   }
 
   AliParticleYield * part = new AliParticleYield();
index bf74a70..17f92e6 100644 (file)
@@ -5,7 +5,7 @@
 // This class implements a container for particle yields results, to
 // be used e.g. in thermal model fits, with utility methods to
 // read/write to ASCII files or root trees
-// Author: Michele FLoris, michele.floris@cern.ch
+// Author: Michele Floris, michele.floris@cern.ch
 
 #include "TObject.h"
 #include "TString.h"
@@ -42,6 +42,10 @@ public:
 
     // Type of errors
     kTypeOnlyTotError        = 0x10, // If on, only the total error is returned as "GetSystError". GetStatError should be set to 0;
+
+    // Additional flags
+    kTypeAveragePartAntiPart = 0x100, // Can only be set if isSum = 1. It indicates that it is an averrage rather than a sum TODO: add separate bits for different averages (e.g. quadratic)?           
+
   };
   
   AliParticleYield();