// Parameters
// - chamber : pointer to tracking chamber container used to search the tracklet
// - tilt : switch for tilt correction during road building [default true]
+// - chgPos : mark same[kFALSE] and opposite[kTRUE] sign tracks with respect to Bz field sign [default true]
+// - ev : event number for debug purposes [default = -1]
// Output
// - true : if tracklet found successfully. Failure can happend because of the following:
// -
if(fkReconstructor->IsHLT()) cp.SetRPhiMethod(AliTRDcluster::kCOG);
if(!IsCalibrated()) Calibrate();
- Int_t kroadyShift(0);
+/* Int_t kroadyShift(0);
Float_t bz(AliTrackerBase::GetBz());
if(TMath::Abs(bz)>2.){
if(bz<0.) kroadyShift = chgPos ? +1 : -1;
else kroadyShift = chgPos ? -1 : +1;
- }
- AliDebug(4, Form("\n syTrk[cm]=%4.2f dydxTrk[deg]=%+6.2f rs[%d] Chg[%c] rY[cm]=%4.2f rZ[cm]=%5.2f TC[%c]", syRef, TMath::ATan(fYref[1])*TMath::RadToDeg(), kroadyShift, chgPos?'+':'-', kroady, kroadz, tilt?'y':'n'));
+ }*/
+ AliDebug(4, Form("\n syTrk[cm]=%4.2f dydxTrk[deg]=%+6.2f Chg[%c] rY[cm]=%4.2f rZ[cm]=%5.2f TC[%c]", syRef, TMath::ATan(fYref[1])*TMath::RadToDeg(), chgPos?'+':'-', kroady, kroadz, tilt?'y':'n'));
Double_t phiTrk(TMath::ATan(fYref[1])),
thtTrk(TMath::ATan(fZref[1]));
} else {
kScalePulls = attach->GetScaleCov();//*lyScaler;
}
+ // Retrieve chamber status
+ SetChmbGood(calibration->IsChamberGood(fDet));
+ if(!IsChmbGood()) kScalePulls*=10.;
}
Double_t xc[kNclusters], yc[kNclusters], sy[kNclusters];
Int_t n(0), // clusters used in fit
,kKink = BIT(18) // kink prolongation tracklet
,kStandAlone = BIT(19) // tracklet build during stand alone track finding
,kPrimary = BIT(20) // tracklet from a primary track candidate
+ ,kChmbGood = BIT(21) // status of the detector from calibration view point
};
enum ETRDtrackletError { // up to 8 bits
void Init(const AliRieman *fit);
Bool_t IsEqual(const TObject *inTracklet) const;
Bool_t IsCalibrated() const { return TestBit(kCalib);}
+ Bool_t IsChmbGood() const { return TestBit(kChmbGood);}
Bool_t IsOwner() const { return TestBit(kOwner);}
Bool_t IsKink() const { return TestBit(kKink);}
Bool_t IsPrimary() const { return TestBit(kPrimary);}
void Reset(Option_t *opt="");
void SetC(Float_t c, Int_t typ=0) { fC[typ] = c;}
+ void SetChmbGood(Bool_t k = kTRUE){ SetBit(kChmbGood, k);}
void SetChi2(Float_t chi2) { fChi2 = chi2;}
inline void SetCovRef(const Double_t *cov);
void SetErrorMsg(ETRDtrackletError err) { SETBIT(fErrorMsg, err);}
// first implementation store no. of time bins filled in tracklet (5bits see "y" bits) and
// no. of double clusters in case of pad row cross (4bits see "x" bits)
// bit map for tracklet quality xxxxyyyyy
+ // 27.10.11 A.Bercuci
+ // add chamber status bit "z" bit
+ // bit map for tracklet quality zxxxxyyyyy
Int_t nCross(fTracklet[ip]->IsRowCross()?fTracklet[ip]->GetTBcross():0);
- spd = Double_t(fTracklet[ip]->GetTBoccupancy() | (nCross<<5));
+ spd = Double_t(fTracklet[ip]->GetTBoccupancy() | (nCross<<5) | (fTracklet[ip]->IsChmbGood()<<9));
track->SetTRDmomentum(p, ip, &spd);
track->SetTRDslice(fTracklet[ip]->GetdQdl(), ip, 0); // Set Summed dEdx into the first slice
}
AliDebug(4, "Failed Tracklet Init");
break;
}
- if(!ptrTracklet->AttachClusters(chamber, kTRUE, t.Charge()>0?kTRUE:kFALSE, fEventInFile)){
+ // Select attachment base on track to B field sign not only track charge which is buggy
+ // mark kFALSE same sign tracks and kTRUE opposite sign tracks
+ // A.Bercuci 3.11.2011
+ Float_t prod(t.GetBz()*t.Charge());
+ if(!ptrTracklet->AttachClusters(chamber, kTRUE, prod<0.?kTRUE:kFALSE, fEventInFile)){
t.SetStatus(AliTRDtrackV1::kNoAttach, ily);
if(debugLevel>3){
AliTRDseedV1 trackletCp(*ptrTracklet);
// register tracklet with the tracker and track
- ptrTracklet->Update(&t);
+ // Save inside the tracklet the track parameters BEFORE track update.
+ // Commented out their overwriting AFTER track update
+ // A.Bercuci 3.11.2011
+ //ptrTracklet->Update(&t);
ptrTracklet = SetTracklet(ptrTracklet);
Int_t index(fTracklets->GetEntriesFast()-1);
t.SetTracklet(ptrTracklet, index);
,fCalPRFROC(0x0)
,fkCalVdriftDet(0x0)
,fkCalT0Det(0x0)
+ ,fkCalExBDet(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
+ ,fCalExBDetValue(0)
,fSamplingFrequency(0)
,fPadPlane(0x0)
,fZShiftIdeal(0)
// Get the calibration objects for the global calibration
fkCalVdriftDet = fCalibration->GetVdriftDet();
fkCalT0Det = fCalibration->GetT0Det();
+ fkCalExBDet = fCalibration->GetExBDet();
}
,fCalPRFROC(0x0)
,fkCalVdriftDet(0x0)
,fkCalT0Det(0x0)
+ ,fkCalExBDet(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
+ ,fCalExBDetValue(0)
,fSamplingFrequency(0)
,fPadPlane(0x0)
,fZShiftIdeal(0)
// Get the calibration objects for the global calibration
fkCalVdriftDet = fCalibration->GetVdriftDet();
fkCalT0Det = fCalibration->GetT0Det();
+ fkCalExBDet = fCalibration->GetExBDet();
SetDetector(det);
,fCalPRFROC(0x0)
,fkCalVdriftDet(0x0)
,fkCalT0Det(0x0)
+ ,fkCalExBDet(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
+ ,fCalExBDetValue(0)
,fSamplingFrequency(0)
,fPadPlane(0x0)
,fZShiftIdeal(0)
}
fkCalVdriftDet = fCalibration->GetVdriftDet();
fkCalT0Det = fCalibration->GetT0Det();
-
+ fkCalExBDet = fCalibration->GetExBDet();
}
//_____________________________________________________________________________
if (fCalibration) {
((AliTRDtransform &) t).fkCalVdriftDet = fCalibration->GetVdriftDet();
((AliTRDtransform &) t).fkCalT0Det = fCalibration->GetT0Det();
+ ((AliTRDtransform &) t).fkCalExBDet = fCalibration->GetExBDet();
}
else {
((AliTRDtransform &) t).fkCalVdriftDet = 0;
((AliTRDtransform &) t).fkCalT0Det = 0;
+ ((AliTRDtransform &) t).fkCalExBDet = 0;
}
((AliTRDtransform &) t).fCalVdriftROC = 0x0;
((AliTRDtransform &) t).fCalT0ROC = 0x0;
((AliTRDtransform &) t).fCalPRFROC = 0x0;
((AliTRDtransform &) t).fCalVdriftDetValue = 0;
((AliTRDtransform &) t).fCalT0DetValue = 0;
+ ((AliTRDtransform &) t).fCalExBDetValue = 0;
((AliTRDtransform &) t).fSamplingFrequency = 0;
((AliTRDtransform &) t).fPadPlane = 0x0;
((AliTRDtransform &) t).fZShiftIdeal = 0;
// Get the detector wise defined calibration values
fCalVdriftDetValue = fkCalVdriftDet->GetValue(det);
fCalT0DetValue = fkCalT0Det->GetValue(det);
+ fCalExBDetValue = fkCalExBDet->GetValue(det);
// Shift needed to define Z-position relative to middle of chamber
Int_t layer = Geometry().GetLayer(det);
Double_t t0 = fCalT0DetValue + fCalT0ROC->GetValue(col,row);
t0 /= fSamplingFrequency;
// ExB correction
- Double_t exb = AliTRDCommonParam::Instance()->GetOmegaTau(vd);
+ Double_t exb = fCalExBDetValue;//AliTRDCommonParam::Instance()->GetOmegaTau(vd);
Float_t x = c->GetXloc(t0, vd);
AliTRDCalROC *fCalPRFROC; // Pad wise PRF calibration object
const AliTRDCalDet *fkCalVdriftDet; // ROC wise Vdrift calibration object
const AliTRDCalDet *fkCalT0Det; // ROC wise T0 calibration object
+ const AliTRDCalDet *fkCalExBDet; // ROC wise ExB calibration object
Double_t fCalVdriftDetValue; // ROC wise Vdrift calibration value
Double_t fCalT0DetValue; // ROC wise T0 calibration value
+ Double_t fCalExBDetValue; // Det wise ExB calibration value
Double_t fSamplingFrequency; // ADC sampling frequency
#include "AliLog.h"
-#include "AliTRDCalTrkAttach.h"
#include "AliTRDcalibDB.h"
+#include "AliTRDgeometry.h"
+#include "AliTRDCalTrkAttach.h"
ClassImp(AliTRDCalTrkAttach)
return 0.;
}
//check likelihood array
- if (!fLike || fLike->GetEntries() != 6*2*kNcalib) {
+ if (!fLike || fLike->GetEntries() != AliTRDgeometry::kNlayer*kNcharge*kNcalib) {
AliError("No usable AttachClusters calib object.");
return 0.;
}
-
+ Int_t offset(ly*kNcalib*kNcharge); // offset for layer
TGraphErrors *g(NULL);
- if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kResPos)+Int_t(chg)))){
+ if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kResPos)*kNcharge+Int_t(chg)))){
AliError("Failed retrieving AttachClusters graph.");
return 0.;
}
dd = (dyr - dym)/sym; dd*=dd;
f[0] = TMath::Exp(-0.5*dd);
// +++ process dphi
- if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kResAng)+Int_t(chg)))){
+ if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kResAng)*kNcharge+Int_t(chg)))){
AliError("Failed retrieving AttachClusters graph.");
return 0.;
}
dd = (dphi - dpm)/spm; dd*=dd;
f[1] = TMath::Exp(-0.5*dd);
// +++ process no of clusters
- if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kNclMean)+Int_t(chg)))){
+ if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kNclMean)*kNcharge+Int_t(chg)))){
AliError("Failed retrieving AttachClusters graph.");
return 0.;
}
// process phi dependences
// +++ process <s>/s
- if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kSigma)+Int_t(chg)))){
+ if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kSigma)*kNcharge+Int_t(chg)))){
AliError("Failed retrieving AttachClusters graph.");
return 0.;
}
Double_t sm = boundary?y1:((phiTrk*(y0-y1) + (x0*y1-x1*y0))*invdx),
ssm = 0.5*(g->GetErrorY(ip)+g->GetErrorY(jp));
dd = (sr - sm)/ssm; dd*=dd;
- f[3] = TMath::Exp(-0.5*dd);
+ f[3] = 1.;//TMath::Exp(-0.5*dd);
// Calculate likelihood
Double_t length = f[0]*f[0]+f[1]*f[1]+f[2]*f[2]+f[3]*f[3];
cs[2] = {'n', 'p'};
if(fLike) fLike->Clear();
- else fLike = new TObjArray(6*2*kNcalib);
- for(Int_t ily(0); ily<6; ily++){
+ else fLike = new TObjArray(AliTRDgeometry::kNlayer*kNcharge*kNcalib);
+ for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t icalib(0); icalib<kNcalib; icalib++){
- for(Int_t isgn(0); isgn<2; isgn++){
+ for(Int_t isgn(0); isgn<kNcharge; isgn++){
if(!(g = (TGraphErrors*)gFile->Get(Form("%c%c%d", co[icalib], cs[isgn], ily)))) return kFALSE;
- fLike->AddAt(g, ily*8+2*icalib+isgn);
+ fLike->AddAt(g, kNcharge*(ily*kNcalib+icalib)+isgn);
}
}
}
class AliTRDCalTrkAttach : public TNamed
{
public:
- enum ETRDCalTrkAttachCalib {
+ enum ETRDCalTrkAttachCalib {
kResPos = 0 // relative position residual location
,kResAng // angular residual location
,kSigma // relative error location
,kNclMean // mean no. of clusters/tracklet location
,kNcalib // no. of calib objects
};
+ enum ETRDCalTrkAttachParam {
+ kNcharge = 2
+ };
AliTRDCalTrkAttach();
virtual ~AliTRDCalTrkAttach();
metaData->SetObjectClassName("TObjArray");\r
metaData->SetResponsible("Alexandru Bercuci");\r
metaData->SetBeamPeriod(1);\r
- metaData->SetAliRootVersion("05-27-06b"); //root version\r
+ metaData->SetAliRootVersion("05-30-02"); //root version\r
metaData->SetComment(\r
"Likelihoods for Attach Cluster.\n"\r
- " Tunned on Pb-Pb run 137161.");\r
- AliCDBId id("TRD/Calib/TrkAttach", 95352, AliCDBRunRange::Infinity()); \r
+ " Tunned on p-p run 159580.");\r
+ AliCDBId id("TRD/Calib/TrkAttach", 151536, AliCDBRunRange::Infinity());\r
AliTRDCalTrkAttach attach;\r
if(!attach.LoadReferences(file)) return;\r
// attach.SetNsgmDy(Int_t ns0, Int_t ns1);\r