#include "AliMUONClusterFinderSimpleFit.h"
#include "AliLog.h"
#include "AliMpDEManager.h"
#include "AliMUONCluster.h"
#include "AliMUONConstants.h"
#include "AliMUONVDigit.h"
#include "AliMUONMathieson.h"
#include "AliMUONPad.h"
#include "AliMpArea.h"
#include "TObjArray.h"
#include "TVector2.h"
#include "TVirtualFitter.h"
#include "TF1.h"
#include "AliMUONVDigitStore.h"
#include <Riostream.h>
ClassImp(AliMUONClusterFinderSimpleFit)
namespace
{
void
FitFunction(Int_t& , Double_t* ,
Double_t& f, Double_t* par,
Int_t )
{
TObjArray* userObjects = static_cast<TObjArray*>(TVirtualFitter::GetFitter()->GetObjectFit());
AliMUONCluster* cluster = static_cast<AliMUONCluster*>(userObjects->At(0));
AliMUONMathieson* mathieson = static_cast<AliMUONMathieson*>(userObjects->At(1));
f = 0.0;
Float_t qTot = cluster->Charge();
for ( Int_t i = 0 ; i < cluster->Multiplicity(); ++i )
{
AliMUONPad* pad = cluster->Pad(i);
if ( pad->Status() ) continue;
TVector2 lowerLeft = TVector2(par[0],par[1]) - pad->Position() - pad->Dimensions();
TVector2 upperRight(lowerLeft + pad->Dimensions()*2.0);
Float_t estimatedCharge = mathieson->IntXY(lowerLeft.X(),lowerLeft.Y(),
upperRight.X(),upperRight.Y());
Float_t actualCharge = pad->Charge()/qTot;
Float_t delta = (estimatedCharge - actualCharge);
f += delta*delta;
}
}
}
AliMUONClusterFinderSimpleFit::AliMUONClusterFinderSimpleFit(AliMUONVClusterFinder* clusterFinder)
: AliMUONVClusterFinder(),
fClusterFinder(clusterFinder),
fMathieson(0x0),
fLowestClusterCharge(0)
{
}
AliMUONClusterFinderSimpleFit::~AliMUONClusterFinderSimpleFit()
{
delete fClusterFinder;
delete fMathieson;
}
Bool_t
AliMUONClusterFinderSimpleFit::Prepare(Int_t detElemId,
TObjArray* pads[2],
const AliMpArea& area)
{
AliMq::Station12Type stationType = AliMpDEManager::GetStation12Type(detElemId);
Float_t kx3 = AliMUONConstants::SqrtKx3();
Float_t ky3 = AliMUONConstants::SqrtKy3();
Float_t pitch = AliMUONConstants::Pitch();
if ( stationType == AliMq::kStation1 )
{
kx3 = AliMUONConstants::SqrtKx3St1();
ky3 = AliMUONConstants::SqrtKy3St1();
pitch = AliMUONConstants::PitchSt1();
}
delete fMathieson;
fMathieson = new AliMUONMathieson;
fMathieson->SetPitch(pitch);
fMathieson->SetSqrtKx3AndDeriveKx2Kx4(kx3);
fMathieson->SetSqrtKy3AndDeriveKy2Ky4(ky3);
return fClusterFinder->Prepare(detElemId,pads,area);
}
AliMUONCluster*
AliMUONClusterFinderSimpleFit::NextCluster()
{
if ( !fClusterFinder ) return 0x0;
AliMUONCluster* cluster = fClusterFinder->NextCluster();
if ( cluster )
{
ComputePosition(*cluster);
if ( cluster->Charge() < fLowestClusterCharge )
{
return NextCluster();
}
}
return cluster;
}
void
AliMUONClusterFinderSimpleFit::ComputePosition(AliMUONCluster& cluster)
{
TVirtualFitter* fitter = TVirtualFitter::Fitter(0,2);
fitter->SetFCN(FitFunction);
if ( cluster.Multiplicity() < 3 ) return;
Double_t xCOG = cluster.Position().X();
Double_t yCOG = cluster.Position().Y();
Float_t stepX = 0.01;
Float_t stepY = 0.01;
Double_t arg(-1);
fitter->ExecuteCommand("SET PRINT",&arg,1);
fitter->SetParameter(0,"cluster X position",xCOG,stepX,0,0);
fitter->SetParameter(1,"cluster Y position",yCOG,stepY,0,0);
TObjArray userObjects;
userObjects.Add(&cluster);
userObjects.Add(fMathieson);
fitter->SetObjectFit(&userObjects);
Int_t val = fitter->ExecuteCommand("MIGRAD",0,0);
AliDebug(1,Form("ExecuteCommand returned value=%d",val));
if ( val )
{
AliWarning("Fit failed. Using COG results for cluster=");
StdoutToAliWarning(cluster.Print());
cluster.SetPosition(TVector2(xCOG,yCOG),TVector2(TMath::Abs(xCOG),TMath::Abs(yCOG)));
cluster.SetChi2(1E3);
}
Double_t results[] = { fitter->GetParameter(0),
fitter->GetParameter(1) };
Double_t errors[] = { fitter->GetParError(0),
fitter->GetParError(1) };
cluster.SetPosition(TVector2(results[0],results[1]),
TVector2(errors[0],errors[1]));
Double_t amin, edm, errdef;
Int_t nvpar, nparx;
fitter->GetStats(amin, edm, errdef, nvpar, nparx);
Double_t chi2 = amin;
AliDebug(1,Form("Cluster fitted to (x,y)=(%e,%e) (xerr,yerr)=(%e,%e) \n chi2=%e ndf=%d",
results[0],results[1],
errors[0],errors[1],chi2,fitter->GetNumberFreeParameters()));
cluster.SetChi2(chi2);
}
AliMUONClusterFinderSimpleFit.cxx:1 AliMUONClusterFinderSimpleFit.cxx:2 AliMUONClusterFinderSimpleFit.cxx:3 AliMUONClusterFinderSimpleFit.cxx:4 AliMUONClusterFinderSimpleFit.cxx:5 AliMUONClusterFinderSimpleFit.cxx:6 AliMUONClusterFinderSimpleFit.cxx:7 AliMUONClusterFinderSimpleFit.cxx:8 AliMUONClusterFinderSimpleFit.cxx:9 AliMUONClusterFinderSimpleFit.cxx:10 AliMUONClusterFinderSimpleFit.cxx:11 AliMUONClusterFinderSimpleFit.cxx:12 AliMUONClusterFinderSimpleFit.cxx:13 AliMUONClusterFinderSimpleFit.cxx:14 AliMUONClusterFinderSimpleFit.cxx:15 AliMUONClusterFinderSimpleFit.cxx:16 AliMUONClusterFinderSimpleFit.cxx:17 AliMUONClusterFinderSimpleFit.cxx:18 AliMUONClusterFinderSimpleFit.cxx:19 AliMUONClusterFinderSimpleFit.cxx:20 AliMUONClusterFinderSimpleFit.cxx:21 AliMUONClusterFinderSimpleFit.cxx:22 AliMUONClusterFinderSimpleFit.cxx:23 AliMUONClusterFinderSimpleFit.cxx:24 AliMUONClusterFinderSimpleFit.cxx:25 AliMUONClusterFinderSimpleFit.cxx:26 AliMUONClusterFinderSimpleFit.cxx:27 AliMUONClusterFinderSimpleFit.cxx:28 AliMUONClusterFinderSimpleFit.cxx:29 AliMUONClusterFinderSimpleFit.cxx:30 AliMUONClusterFinderSimpleFit.cxx:31 AliMUONClusterFinderSimpleFit.cxx:32 AliMUONClusterFinderSimpleFit.cxx:33 AliMUONClusterFinderSimpleFit.cxx:34 AliMUONClusterFinderSimpleFit.cxx:35 AliMUONClusterFinderSimpleFit.cxx:36 AliMUONClusterFinderSimpleFit.cxx:37 AliMUONClusterFinderSimpleFit.cxx:38 AliMUONClusterFinderSimpleFit.cxx:39 AliMUONClusterFinderSimpleFit.cxx:40 AliMUONClusterFinderSimpleFit.cxx:41 AliMUONClusterFinderSimpleFit.cxx:42 AliMUONClusterFinderSimpleFit.cxx:43 AliMUONClusterFinderSimpleFit.cxx:44 AliMUONClusterFinderSimpleFit.cxx:45 AliMUONClusterFinderSimpleFit.cxx:46 AliMUONClusterFinderSimpleFit.cxx:47 AliMUONClusterFinderSimpleFit.cxx:48 AliMUONClusterFinderSimpleFit.cxx:49 AliMUONClusterFinderSimpleFit.cxx:50 AliMUONClusterFinderSimpleFit.cxx:51 AliMUONClusterFinderSimpleFit.cxx:52 AliMUONClusterFinderSimpleFit.cxx:53 AliMUONClusterFinderSimpleFit.cxx:54 AliMUONClusterFinderSimpleFit.cxx:55 AliMUONClusterFinderSimpleFit.cxx:56 AliMUONClusterFinderSimpleFit.cxx:57 AliMUONClusterFinderSimpleFit.cxx:58 AliMUONClusterFinderSimpleFit.cxx:59 AliMUONClusterFinderSimpleFit.cxx:60 AliMUONClusterFinderSimpleFit.cxx:61 AliMUONClusterFinderSimpleFit.cxx:62 AliMUONClusterFinderSimpleFit.cxx:63 AliMUONClusterFinderSimpleFit.cxx:64 AliMUONClusterFinderSimpleFit.cxx:65 AliMUONClusterFinderSimpleFit.cxx:66 AliMUONClusterFinderSimpleFit.cxx:67 AliMUONClusterFinderSimpleFit.cxx:68 AliMUONClusterFinderSimpleFit.cxx:69 AliMUONClusterFinderSimpleFit.cxx:70 AliMUONClusterFinderSimpleFit.cxx:71 AliMUONClusterFinderSimpleFit.cxx:72 AliMUONClusterFinderSimpleFit.cxx:73 AliMUONClusterFinderSimpleFit.cxx:74 AliMUONClusterFinderSimpleFit.cxx:75 AliMUONClusterFinderSimpleFit.cxx:76 AliMUONClusterFinderSimpleFit.cxx:77 AliMUONClusterFinderSimpleFit.cxx:78 AliMUONClusterFinderSimpleFit.cxx:79 AliMUONClusterFinderSimpleFit.cxx:80 AliMUONClusterFinderSimpleFit.cxx:81 AliMUONClusterFinderSimpleFit.cxx:82 AliMUONClusterFinderSimpleFit.cxx:83 AliMUONClusterFinderSimpleFit.cxx:84 AliMUONClusterFinderSimpleFit.cxx:85 AliMUONClusterFinderSimpleFit.cxx:86 AliMUONClusterFinderSimpleFit.cxx:87 AliMUONClusterFinderSimpleFit.cxx:88 AliMUONClusterFinderSimpleFit.cxx:89 AliMUONClusterFinderSimpleFit.cxx:90 AliMUONClusterFinderSimpleFit.cxx:91 AliMUONClusterFinderSimpleFit.cxx:92 AliMUONClusterFinderSimpleFit.cxx:93 AliMUONClusterFinderSimpleFit.cxx:94 AliMUONClusterFinderSimpleFit.cxx:95 AliMUONClusterFinderSimpleFit.cxx:96 AliMUONClusterFinderSimpleFit.cxx:97 AliMUONClusterFinderSimpleFit.cxx:98 AliMUONClusterFinderSimpleFit.cxx:99 AliMUONClusterFinderSimpleFit.cxx:100 AliMUONClusterFinderSimpleFit.cxx:101 AliMUONClusterFinderSimpleFit.cxx:102 AliMUONClusterFinderSimpleFit.cxx:103 AliMUONClusterFinderSimpleFit.cxx:104 AliMUONClusterFinderSimpleFit.cxx:105 AliMUONClusterFinderSimpleFit.cxx:106 AliMUONClusterFinderSimpleFit.cxx:107 AliMUONClusterFinderSimpleFit.cxx:108 AliMUONClusterFinderSimpleFit.cxx:109 AliMUONClusterFinderSimpleFit.cxx:110 AliMUONClusterFinderSimpleFit.cxx:111 AliMUONClusterFinderSimpleFit.cxx:112 AliMUONClusterFinderSimpleFit.cxx:113 AliMUONClusterFinderSimpleFit.cxx:114 AliMUONClusterFinderSimpleFit.cxx:115 AliMUONClusterFinderSimpleFit.cxx:116 AliMUONClusterFinderSimpleFit.cxx:117 AliMUONClusterFinderSimpleFit.cxx:118 AliMUONClusterFinderSimpleFit.cxx:119 AliMUONClusterFinderSimpleFit.cxx:120 AliMUONClusterFinderSimpleFit.cxx:121 AliMUONClusterFinderSimpleFit.cxx:122 AliMUONClusterFinderSimpleFit.cxx:123 AliMUONClusterFinderSimpleFit.cxx:124 AliMUONClusterFinderSimpleFit.cxx:125 AliMUONClusterFinderSimpleFit.cxx:126 AliMUONClusterFinderSimpleFit.cxx:127 AliMUONClusterFinderSimpleFit.cxx:128 AliMUONClusterFinderSimpleFit.cxx:129 AliMUONClusterFinderSimpleFit.cxx:130 AliMUONClusterFinderSimpleFit.cxx:131 AliMUONClusterFinderSimpleFit.cxx:132 AliMUONClusterFinderSimpleFit.cxx:133 AliMUONClusterFinderSimpleFit.cxx:134 AliMUONClusterFinderSimpleFit.cxx:135 AliMUONClusterFinderSimpleFit.cxx:136 AliMUONClusterFinderSimpleFit.cxx:137 AliMUONClusterFinderSimpleFit.cxx:138 AliMUONClusterFinderSimpleFit.cxx:139 AliMUONClusterFinderSimpleFit.cxx:140 AliMUONClusterFinderSimpleFit.cxx:141 AliMUONClusterFinderSimpleFit.cxx:142 AliMUONClusterFinderSimpleFit.cxx:143 AliMUONClusterFinderSimpleFit.cxx:144 AliMUONClusterFinderSimpleFit.cxx:145 AliMUONClusterFinderSimpleFit.cxx:146 AliMUONClusterFinderSimpleFit.cxx:147 AliMUONClusterFinderSimpleFit.cxx:148 AliMUONClusterFinderSimpleFit.cxx:149 AliMUONClusterFinderSimpleFit.cxx:150 AliMUONClusterFinderSimpleFit.cxx:151 AliMUONClusterFinderSimpleFit.cxx:152 AliMUONClusterFinderSimpleFit.cxx:153 AliMUONClusterFinderSimpleFit.cxx:154 AliMUONClusterFinderSimpleFit.cxx:155 AliMUONClusterFinderSimpleFit.cxx:156 AliMUONClusterFinderSimpleFit.cxx:157 AliMUONClusterFinderSimpleFit.cxx:158 AliMUONClusterFinderSimpleFit.cxx:159 AliMUONClusterFinderSimpleFit.cxx:160 AliMUONClusterFinderSimpleFit.cxx:161 AliMUONClusterFinderSimpleFit.cxx:162 AliMUONClusterFinderSimpleFit.cxx:163 AliMUONClusterFinderSimpleFit.cxx:164 AliMUONClusterFinderSimpleFit.cxx:165 AliMUONClusterFinderSimpleFit.cxx:166 AliMUONClusterFinderSimpleFit.cxx:167 AliMUONClusterFinderSimpleFit.cxx:168 AliMUONClusterFinderSimpleFit.cxx:169 AliMUONClusterFinderSimpleFit.cxx:170 AliMUONClusterFinderSimpleFit.cxx:171 AliMUONClusterFinderSimpleFit.cxx:172 AliMUONClusterFinderSimpleFit.cxx:173 AliMUONClusterFinderSimpleFit.cxx:174 AliMUONClusterFinderSimpleFit.cxx:175 AliMUONClusterFinderSimpleFit.cxx:176 AliMUONClusterFinderSimpleFit.cxx:177 AliMUONClusterFinderSimpleFit.cxx:178 AliMUONClusterFinderSimpleFit.cxx:179 AliMUONClusterFinderSimpleFit.cxx:180 AliMUONClusterFinderSimpleFit.cxx:181 AliMUONClusterFinderSimpleFit.cxx:182 AliMUONClusterFinderSimpleFit.cxx:183 AliMUONClusterFinderSimpleFit.cxx:184 AliMUONClusterFinderSimpleFit.cxx:185 AliMUONClusterFinderSimpleFit.cxx:186 AliMUONClusterFinderSimpleFit.cxx:187 AliMUONClusterFinderSimpleFit.cxx:188 AliMUONClusterFinderSimpleFit.cxx:189 AliMUONClusterFinderSimpleFit.cxx:190 AliMUONClusterFinderSimpleFit.cxx:191 AliMUONClusterFinderSimpleFit.cxx:192 AliMUONClusterFinderSimpleFit.cxx:193 AliMUONClusterFinderSimpleFit.cxx:194 AliMUONClusterFinderSimpleFit.cxx:195 AliMUONClusterFinderSimpleFit.cxx:196 AliMUONClusterFinderSimpleFit.cxx:197 AliMUONClusterFinderSimpleFit.cxx:198 AliMUONClusterFinderSimpleFit.cxx:199 AliMUONClusterFinderSimpleFit.cxx:200 AliMUONClusterFinderSimpleFit.cxx:201 AliMUONClusterFinderSimpleFit.cxx:202 AliMUONClusterFinderSimpleFit.cxx:203 AliMUONClusterFinderSimpleFit.cxx:204 AliMUONClusterFinderSimpleFit.cxx:205 AliMUONClusterFinderSimpleFit.cxx:206 AliMUONClusterFinderSimpleFit.cxx:207 AliMUONClusterFinderSimpleFit.cxx:208 AliMUONClusterFinderSimpleFit.cxx:209 AliMUONClusterFinderSimpleFit.cxx:210 AliMUONClusterFinderSimpleFit.cxx:211 AliMUONClusterFinderSimpleFit.cxx:212 AliMUONClusterFinderSimpleFit.cxx:213 AliMUONClusterFinderSimpleFit.cxx:214 AliMUONClusterFinderSimpleFit.cxx:215 AliMUONClusterFinderSimpleFit.cxx:216 AliMUONClusterFinderSimpleFit.cxx:217 AliMUONClusterFinderSimpleFit.cxx:218 AliMUONClusterFinderSimpleFit.cxx:219 AliMUONClusterFinderSimpleFit.cxx:220 AliMUONClusterFinderSimpleFit.cxx:221 AliMUONClusterFinderSimpleFit.cxx:222 AliMUONClusterFinderSimpleFit.cxx:223 AliMUONClusterFinderSimpleFit.cxx:224 AliMUONClusterFinderSimpleFit.cxx:225 AliMUONClusterFinderSimpleFit.cxx:226 AliMUONClusterFinderSimpleFit.cxx:227 AliMUONClusterFinderSimpleFit.cxx:228 AliMUONClusterFinderSimpleFit.cxx:229 AliMUONClusterFinderSimpleFit.cxx:230 AliMUONClusterFinderSimpleFit.cxx:231 AliMUONClusterFinderSimpleFit.cxx:232 AliMUONClusterFinderSimpleFit.cxx:233 AliMUONClusterFinderSimpleFit.cxx:234 AliMUONClusterFinderSimpleFit.cxx:235