////////////////////////////////////////////////////////////////////////
AliRecInfoMaker::AliRecInfoMaker(const char* fnGenTracks,
- const char* fnCmp,
- const char* fnGalice,
- Int_t nEvents, Int_t firstEvent)
+ const char* fnCmp,
+ const char* fnGalice,
+ Int_t nEvents, Int_t firstEvent):
+
+ fEventNr(0), //! current event number
+ fNEvents(0), //! number of events to process
+ fFirstEventNr(0), //! first event to process
+ fFileCmp(0), //! output file with cmp tracks
+ fTreeCmp(0), //! output tree with cmp tracks
+ fTreeCmpKinks(0), //! output tree with cmp Kinks
+ fTreeCmpV0(0), //! output tree with cmp V0
+ //
+ fFileGenTracks(0), //! input files with generated tracks
+ fTreeGenTracks(0), //! tree with generated tracks
+ fTreeGenKinks(0), // tree with gen kinks
+ fTreeGenV0(0), // tree with gen V0
+ //
+ fLoader(0), //! pointer to the run loader
+ //
+ fIndexRecTracks(0), //! index of particle label in the TreeT_ESD
+ fFakeRecTracks(0), //! number of fake tracks
+ fMultiRecTracks(0), //! number of multiple reconstructions
+ //
+ fIndexRecKinks(0), //! index of particle label in treeesd
+ fMultiRecKinks(0), //! number of multiple reconstructions
+ fSignedKinks(0), //! indicator that kink was not fake
+ //
+ fIndexRecV0(0), //! index of particle label in treeesd
+ fMultiRecV0(0), //! number of multiple reconstructions
+ fSignedV0(0), //! indicator that kink was not fake
+ //
+ fRecArray(0), // container with rec infos
+ fEvent(0), //!event
+ fESDfriend(0), //!event friend
+ //
+ fParamTPC(0), //! AliTPCParam
+ fNParticles(0), //! number of particles in the input tree genTracks
+ fDebug(0), //! debug flag
+ fNextTreeGenEntryToRead(0), //! last entry already read from genTracks tree
+ fNextKinkToRead(0), //! last entry already read from genKinks tree
+ fNextV0ToRead(0), //! last entry already read from genV0 tree
+ //
+ fMCInfo(0), //! MC information writen per particle
+ fGenKinkInfo(0), //! MC information writen per Kink
+ fGenV0Info(0), //! MC information writen per Kink
+ fRecInfo(0), //! Rec. information writen per particle
+ fFriend(0), //! friend track
+ fRecKinkInfo(0), //! reconstructed kink info
+ fRecV0Info(0) //! reconstructed kink info
{
// AliRecInfoMaker - connencts the MC information with reconstructed information
// fnGenTracks - file with MC to be created before using AliGenInfoMaker
}
+////////////////////////////////////////////////////////////////////////
+AliRecInfoMaker::AliRecInfoMaker(const AliRecInfoMaker& /*info*/):
+
+ fEventNr(0), //! current event number
+ fNEvents(0), //! number of events to process
+ fFirstEventNr(0), //! first event to process
+ fFileCmp(0), //! output file with cmp tracks
+ fTreeCmp(0), //! output tree with cmp tracks
+ fTreeCmpKinks(0), //! output tree with cmp Kinks
+ fTreeCmpV0(0), //! output tree with cmp V0
+ //
+ fFileGenTracks(0), //! input files with generated tracks
+ fTreeGenTracks(0), //! tree with generated tracks
+ fTreeGenKinks(0), // tree with gen kinks
+ fTreeGenV0(0), // tree with gen V0
+ //
+ fLoader(0), //! pointer to the run loader
+ //
+ fIndexRecTracks(0), //! index of particle label in the TreeT_ESD
+ fFakeRecTracks(0), //! number of fake tracks
+ fMultiRecTracks(0), //! number of multiple reconstructions
+ //
+ fIndexRecKinks(0), //! index of particle label in treeesd
+ fMultiRecKinks(0), //! number of multiple reconstructions
+ fSignedKinks(0), //! indicator that kink was not fake
+ //
+ fIndexRecV0(0), //! index of particle label in treeesd
+ fMultiRecV0(0), //! number of multiple reconstructions
+ fSignedV0(0), //! indicator that kink was not fake
+ //
+ fRecArray(0), // container with rec infos
+ fEvent(0), //!event
+ fESDfriend(0), //!event friend
+ //
+ fParamTPC(0), //! AliTPCParam
+ fNParticles(0), //! number of particles in the input tree genTracks
+ fDebug(0), //! debug flag
+ fNextTreeGenEntryToRead(0), //! last entry already read from genTracks tree
+ fNextKinkToRead(0), //! last entry already read from genKinks tree
+ fNextV0ToRead(0), //! last entry already read from genV0 tree
+ //
+ fMCInfo(0), //! MC information writen per particle
+ fGenKinkInfo(0), //! MC information writen per Kink
+ fGenV0Info(0), //! MC information writen per Kink
+ fRecInfo(0), //! Rec. information writen per particle
+ fFriend(0), //! friend track
+ fRecKinkInfo(0), //! reconstructed kink info
+ fRecV0Info(0) //! reconstructed kink info
+{
+ //
+ // Dummy copu constructor
+ //
+}
+
+
////////////////////////////////////////////////////////////////////////
if (fDebug>2) cout<<"\tStart loop over tree genTracks"<<endl;
if (TreeGenLoop(eventNr)>0) return 1;
//BuildKinkInfo0(eventNr);
- //BuildV0Info(eventNr); // no V0 info for a moment
+ BuildV0Info(eventNr); // no V0 info for a moment
fRecArray->Delete();
if (fDebug>2) cout<<"\tEnd loop over tree genTracks"<<endl;
}
// --sort reconstructed V0
//
-// AliV0 * v0MI=0;
-// for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
-// v0MI = (AliV0*)fEvent->GetV0(iEntry);
-// if (!v0MI) continue;
-// //
-// Int_t label0 = TMath::Abs(v0MI->GetLabel(0));
-// Int_t label1 = TMath::Abs(v0MI->GetLabel(1));
-// //
-// for (Int_t i=0;i<2;i++){
-// Int_t absLabel = TMath::Abs(v0MI->GetLabel(i));
-// if (absLabel < fNParticles) {
-// if (fMultiRecV0[absLabel]>0){
-// if (fMultiRecV0[absLabel]<20)
-// fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] = iEntry;
-// }
-// else
-// fIndexRecV0[absLabel*20] = iEntry;
-// fMultiRecV0[absLabel]++;
-// }
-// }
-// }
+ AliV0 * v0MI=0;
+ for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
+ v0MI = (AliV0*)fEvent->GetV0(iEntry);
+ if (!v0MI) continue;
+ //
+ //
+ //
+ //Int_t label0 = TMath::Abs(v0MI->GetLabel(0));
+ //Int_t label1 = TMath::Abs(v0MI->GetLabel(1));
+ AliESDtrack * trackn = fEvent->GetTrack((v0MI->GetNindex()));
+ AliESDtrack * trackp = fEvent->GetTrack((v0MI->GetPindex()));
+ Int_t labels[2]={-1,-1};
+ labels[0] = (trackn==0) ? -1 : trackn->GetLabel();
+ labels[1] = (trackp==0) ? -1 : trackp->GetLabel();
+ //
+ for (Int_t i=0;i<2;i++){
+ Int_t absLabel = labels[i];
+ if (absLabel < fNParticles) {
+ if (fMultiRecV0[absLabel]>0){
+ if (fMultiRecV0[absLabel]<20)
+ fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] = iEntry;
+ }
+ else
+ fIndexRecV0[absLabel*20] = iEntry;
+ fMultiRecV0[absLabel]++;
+ }
+ }
+ }
printf("Time spended in TreeTLoop\n");
cerr<<"fNParticles, nParticlesTR, fNextTreeGenEntryToRead: "<<fNParticles<<" "
<<nParticlesTR<<" "<<fNextTreeGenEntryToRead<<endl;
TBranch * branch = fTreeCmp->GetBranch("RC");
- TBranch * branchF = fTreeCmp->GetBranch("F");
+ // TBranch * branchF = fTreeCmp->GetBranch("F");
branch->SetAddress(&fRecInfo); // set all pointers
fRecArray = new TObjArray(fNParticles);
// loop over all entries for a given event, find corresponding
// rec. track and store in the fTreeCmp
//
+ static TDatabasePDG pdgtable;
+
TStopwatch timer;
timer.Start();
Int_t entry = fNextV0ToRead;
while (entry < nParticlesTR) {
fTreeGenV0->GetEntry(entry);
entry++;
+ fRecV0Info->Reset(); //reset all variables
if (eventNr < fGenV0Info->GetMinus().fEventNr) continue;
if (eventNr > fGenV0Info->GetMinus().fEventNr) continue;;
//
fRecV0Info->fV0its->Update(vertex);
}
}
+ //
+ // ????
+ //
if (TMath::Abs(fGenV0Info->GetMinus().fPdg)==11 &&TMath::Abs(fGenV0Info->GetPlus().fPdg)==11){
if (fRecV0Info->fDist2>10){
fRecV0Info->Update(vertex);
Int_t label = TMath::Min(fGenV0Info->GetMinus().fLabel,fGenV0Info->GetPlus().fLabel);
Int_t label2 = TMath::Max(fGenV0Info->GetMinus().fLabel,fGenV0Info->GetPlus().fLabel);
AliV0 *v0MI=0;
+ AliV0 *v0MIOff=0;
fRecV0Info->fRecStatus =0;
fRecV0Info->fMultiple = fMultiRecV0[label];
- fRecV0Info->fV0Multiple=0;
+ fRecV0Info->fV0MultipleOn=0;
+ fRecV0Info->fV0MultipleOff=0;
//
if (fMultiRecV0[label]>0 || fMultiRecV0[label2]>0){
// for (Int_t j=0;j<TMath::Min(fMultiRecV0s[label],100);j++){
- // for (Int_t j=TMath::Min(fMultiRecV0[label],Short_t(20))-1;j>=0;j--){
-// Int_t index = fIndexRecV0[label*20+j];
-// if (index<0) continue;
-// AliV0 *v0MI2 = (AliV0*)fEvent->GetV0(index);
-// if (TMath::Abs(v0MI2->GetLabel(0))==label &&TMath::Abs(v0MI2->GetLabel(1))==label2) {
-// v0MI =v0MI2;
-// fRecV0Info->fV0Multiple++;
-// fSignedV0[index]=1;
-// }
-// if (TMath::Abs(v0MI2->GetLabel(1))==label &&TMath::Abs(v0MI2->GetLabel(0))==label2) {
-// v0MI =v0MI2;
-// fRecV0Info->fV0Multiple++;
-// fSignedV0[index]=1;
-// }
-// }
+ for (Int_t j=TMath::Min(fMultiRecV0[label],Short_t(20))-1;j>=0;j--){
+ Int_t index = fIndexRecV0[label*20+j];
+ if (index<0) continue;
+ AliV0 *v0MI2 = (AliV0*)fEvent->GetV0(index);
+ // get track labels
+ AliESDtrack * trackn = fEvent->GetTrack((v0MI2->GetNindex()));
+ AliESDtrack * trackp = fEvent->GetTrack((v0MI2->GetPindex()));
+ Int_t vlabeln = (trackn==0) ? -1 : trackn->GetLabel();
+ Int_t vlabelp = (trackp==0) ? -1 : trackp->GetLabel();
+ fRecV0Info->fLab[0]=TMath::Abs(vlabelp);
+ fRecV0Info->fLab[1]=TMath::Abs(vlabeln);
+ //
+ if (TMath::Abs(vlabeln)==label &&TMath::Abs(vlabelp)==label2) {
+ if (v0MI2->GetOnFlyStatus()) {
+ v0MI =v0MI2;
+ fRecV0Info->fV0MultipleOn++;
+ }else {
+ v0MIOff = v0MI2;
+ fRecV0Info->fV0MultipleOff++;
+ }
+ fSignedV0[index]=1;
+ }
+ if (TMath::Abs(vlabelp)==label &&TMath::Abs(vlabeln)==label2) {
+ if (v0MI2->GetOnFlyStatus()){
+ v0MI =v0MI2;
+ fRecV0Info->fV0MultipleOn++;
+ }else {
+ v0MIOff = v0MI2;
+ fRecV0Info->fV0MultipleOff++;
+ }
+ fSignedV0[index]=1;
+ }
+ }
}
if (v0MI){
- fRecV0Info->fV0rec = v0MI;
+ new (fRecV0Info->fV0rec) AliV0(*v0MI);
fRecV0Info->fRecStatus=1;
}
-
+ if (v0MIOff){
+ new (fRecV0Info->fV0recOff) AliV0(*v0MIOff);
+ fRecV0Info->fRecStatus=1;
+ }
+ Int_t mpdg = fGenV0Info->GetMother().GetPdgCode();
+ Float_t mass = ( pdgtable.GetParticle(mpdg)==0) ? 0 :pdgtable.GetParticle(mpdg)->Mass();
+ fRecV0Info->UpdateKF(*esdvertex,
+ fGenV0Info->GetPlus().GetPdg(),
+ fGenV0Info->GetMinus().GetPdg(),
+ mass);
fTreeCmpV0->Fill();
}
//
// write fake v0s
-
+ //
Int_t nV0MIs = fEvent->GetNumberOfV0s();
for (Int_t i=0;i<nV0MIs;i++){
if (fSignedV0[i]==0){
AliV0 *v0MI = (AliV0*)fEvent->GetV0(i);
if (!v0MI) continue;
+ fRecV0Info->Reset(); //reset all variables
//
- fRecV0Info->fV0rec = v0MI;
+ new (fRecV0Info->fV0rec) AliV0(*v0MI);
fRecV0Info->fV0Status =-10;
fRecV0Info->fRecStatus =-2;
//
- // AliESDRecInfo* fRecInfo1 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(v0MI->GetLabel(0)));
-// AliESDRecInfo* fRecInfo2 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(v0MI->GetLabel(1)));
-// if (fRecInfo1 && fRecInfo2){
-// fRecV0Info->fT1 = (*fRecInfo1);
-// fRecV0Info->fT2 = (*fRecInfo2);
-// fRecV0Info->fRecStatus =-1;
-// }
+ AliESDtrack * trackn = fEvent->GetTrack((v0MI->GetNindex()));
+ AliESDtrack * trackp = fEvent->GetTrack((v0MI->GetPindex()));
+ Int_t vlabeln = (trackn==0) ? -1 : trackn->GetLabel();
+ Int_t vlabelp = (trackp==0) ? -1 : trackp->GetLabel();
+ fRecV0Info->fLab[0]=TMath::Abs(vlabelp);
+ fRecV0Info->fLab[1]=TMath::Abs(vlabeln);
+ if (TMath::Abs(fRecV0Info->fLab[0] - fRecV0Info->fLab[1])<2) continue;
+ AliESDRecInfo* fRecInfo1 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(vlabeln));
+ AliESDRecInfo* fRecInfo2 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(vlabelp));
+ if (fRecInfo1 && fRecInfo2){
+ fRecV0Info->fT1 = (*fRecInfo1);
+ fRecV0Info->fT2 = (*fRecInfo2);
+ fRecV0Info->fRecStatus =-1;
+ }
fRecV0Info->Update(vertex);
+ fRecV0Info->UpdateKF(*esdvertex,211,211,0.49767);
fTreeCmpV0->Fill();
}
}