/** * >> Testing Macro to compare FlatESDEvents from output files << ** * Primary Authors : Steffen Weber * * Usage: * aliroot -b -l -q LoadLibs.C CompareFlatESDs.C++ * **************************************************************************/ #if !defined(__CINT__) || defined(__MAKECINT__) #include "AliESDEvent.h" #include "AliESD.h" #include "AliESDfriend.h" #include #include #include #include "./AliFlatESDEvent.h" #include "./AliFlatESDTrack.h" #include "./AliFlatTPCCluster.h" #include "./AliFlatExternalTrackParam.h" #include "Riostream.h" #include "THnSparse.h" #endif Double_t printDiff(string name, double val1, double val2); Double_t printDiff(string name, TString val1, TString val2); void CompareFlatESDs(const char* filename1="outFlatESD1.dat",const char* filename2="outFlatESD2.dat", Bool_t verbose=kFALSE) { // Create output histograms TString outputFilename = "$PWD/compare.root"; cout<< "creating histograms"< (curr1)<<" "< (endBuff1)<<" "< (curr2)<<" "< (endBuff2)<(curr1); AliFlatESDEvent *flatEsd2 = reinterpret_cast(curr2); flatEsd1->Reinitialize(); flatEsd2->Reinitialize(); cout<GetMagneticField(), flatEsd2->GetMagneticField()), printDiff("GetPeriodNumber", flatEsd1->GetPeriodNumber(), flatEsd2->GetPeriodNumber()), printDiff("GetRunNumber", flatEsd1->GetRunNumber(), flatEsd2->GetRunNumber()), printDiff("GetOrbitNumber", flatEsd1->GetOrbitNumber(), flatEsd2->GetOrbitNumber()), printDiff("GetBunchCrossNumber",flatEsd1->GetBunchCrossNumber(),flatEsd2->GetBunchCrossNumber()), printDiff("GetTriggerMask", flatEsd1->GetTriggerMask(), flatEsd2->GetTriggerMask()), printDiff("GetTriggerMaskNext50",flatEsd1->GetTriggerMaskNext50(), flatEsd2->GetTriggerMaskNext50()), printDiff("GetFiredTriggerClasses", flatEsd1->GetFiredTriggerClasses(), flatEsd2->GetFiredTriggerClasses()), printDiff("GetNumberOfTracks", flatEsd1->GetNumberOfTracks(), flatEsd2->GetNumberOfTracks()), printDiff("GetNumberOfV0s", flatEsd1->GetNumberOfV0s(), flatEsd2->GetNumberOfV0s()), printDiff("GetTimeStamp", flatEsd1->GetTimeStamp(), flatEsd2->GetTimeStamp()), printDiff("GetEventSpecie", flatEsd1->GetEventSpecie(), flatEsd2->GetEventSpecie()) }; hDiff->Fill(diffs); /* if( (Bool_t) flatEsd1->GetFlatPrimaryVertexTracks() != (Bool_t) flatEsd2->GetFlatPrimaryVertexTracks() ){ cout<<"\t\tDIFFERENCE!: "<GetFlatPrimaryVertexTracks()<< " | " << (Bool_t) flatEsd2->GetFlatPrimaryVertexTracks()<Fill( (Bool_t) flatEsd1->GetFlatPrimaryVertexTracks(), (Bool_t) flatEsd2->GetFlatPrimaryVertexTracks()); if( (Bool_t) flatEsd1->GetFlatPrimaryVertexSPD() != (Bool_t) flatEsd2->GetFlatPrimaryVertexSPD() ){ cout<<"\t\tDIFFERENCE!: "<GetFlatPrimaryVertexSPD() << " | " << (Bool_t) flatEsd2->GetFlatPrimaryVertexSPD()<Fill( (Bool_t) flatEsd1->GetFlatPrimaryVertexSPD(), (Bool_t) flatEsd2->GetFlatPrimaryVertexSPD()); if((Bool_t)flatEsd1->GetFlatPrimaryVertexTracks() && (Bool_t)flatEsd2->GetFlatPrimaryVertexTracks() ){ cout< X,Y,Z:\t" << flatEsd1->GetFlatPrimaryVertexTracks()->GetX() <<","<< flatEsd1->GetFlatPrimaryVertexTracks()->GetY() <<","<< flatEsd1->GetFlatPrimaryVertexTracks()->GetZ() <<" | " <GetFlatPrimaryVertexTracks()->GetX() <<","<< flatEsd2->GetFlatPrimaryVertexTracks()->GetY() <<","<< flatEsd2->GetFlatPrimaryVertexTracks()->GetZ()< (flatEsd1->GetTracks()); AliFlatESDTrack *track2 = const_cast (flatEsd2->GetTracks()); for (Int_t idxTrack = 0; idxTrack < flatEsd1->GetNumberOfTracks() && track1 && track2; ++idxTrack) { //track2->Reinitialize(); const AliFlatExternalTrackParam* ext[2][nExt] ={ { track1->GetFlatTrackParamRefitted(), track1->GetFlatTrackParamIp(), track1->GetFlatTrackParamTPCInner(), track1->GetFlatTrackParamOp(), // track1->GetFlatTrackParamCp(), // track1->GetFlatTrackParamITSOut() }, { track2->GetFlatTrackParamRefitted(), track2->GetFlatTrackParamIp(), track2->GetFlatTrackParamTPCInner(), track2->GetFlatTrackParamOp(), // track2->GetFlatTrackParamCp(), // track2->GetFlatTrackParamITSOut() } }; //Printf(" TEST: FlatTrack1 %d > FlatExternalTrackParam1 > %p %p %p %p", idxTrack, exp11, exp21, exp31, exp41); //Printf(" TEST: FlatTrack2 %d > FlatExternalTrackParam2 > %p %p %p %p", idxTrack, exp12, exp22, exp32, exp42); for(int iExt=0; iExtGetAlpha() != ext[1][iExt]->GetAlpha() ) { cout<<"\t\tDIFFERENCE!: "<GetAlpha() : -99.) << "\t\t" << (ext[1][iExt] ? ext[1][iExt]->GetAlpha(): -99.)<GetAlpha() : -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetAlpha(): -99.)<GetX() != ext[1][iExt]->GetX() ) { cout<<"\t\tDIFFERENCE!: "<GetX(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetX(): -99.)<GetX(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetX(): -99.)<GetSigned1Pt() != ext[0][iExt]->GetSigned1Pt() ) { cout<<"\t\tDIFFERENCE!: "<GetSigned1Pt(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetSigned1Pt(): -99.)<GetSigned1Pt(): -99.) << " | " << (ext[1][iExt] ? ext[1][iExt]->GetSigned1Pt(): -99.)<GetNumberOfTPCClusters() != track2->GetNumberOfTPCClusters() ){ cout<<"DIFFERENCE!: "; cout<<" nTPCclusters: "<GetNumberOfTPCClusters()<< " | " <GetNumberOfTPCClusters()<< endl; diff[4]=1; } if( track1->GetNumberOfITSClusters() != track2->GetNumberOfITSClusters() ){ cout<<"DIFFERENCE!: "; cout<<" nITSclusters: "<GetNumberOfITSClusters()<< " | " <GetNumberOfITSClusters()<< endl; diff[4]=1; } */ #if 0 // compare clusters if( verbose && track1->GetNumberOfTPCClusters() == track2->GetNumberOfTPCClusters()){ for (Int_t idxCluster = 0; idxCluster < track1->GetNumberOfTPCClusters(); ++idxCluster){ AliFlatTPCCluster * cl1 = track1->GetTPCCluster(idxCluster); AliFlatTPCCluster * cl2 = track2->GetTPCCluster(idxCluster); /* if( cl1->GetX()&& cl2->GetX() && cl1->GetX() != cl2->GetX() ){ cout<<"DIFFERENCE!: "; cout<<" cluster: "<GetX()<< " | " <GetX()<< endl; diff=kTRUE; } cout<<" cluster: "<GetX()<< " | " <GetX()<< endl; cout<<" cluster: "<GetY()<< " | " <GetY()<< endl; if( cl1 && cl2 && cl1->GetY() != cl2->GetY() ){ cout<<"DIFFERENCE!: "; cout<<" cluster: "<GetY()<< " | " <GetY()<< endl; diff=kTRUE; } if( cl1->GetZ()&& cl2->GetZ() && cl1->GetZ() != cl2->GetZ() ){ cout<<"DIFFERENCE!: "; cout<<" cluster: "<GetZ()<< " | " <GetZ()<< endl; diff=kTRUE; } */ if( cl1->GetPadRow()&& cl2->GetPadRow() && cl1->GetPadRow() != cl2->GetPadRow() ){ cout<<"DIFFERENCE!: "; cout<<" cluster: "<GetPadRow()<< " | " <GetPadRow()<< endl; diff[5]=1; } } } #endif track1 = const_cast (track1->GetNextTrack()); track2 = const_cast (track2->GetNextTrack()); } } /* // hStat->Fill(0); Bool_t diffs=kFALSE; for(int iDiff=0; iDiff<5;++iDiff){ if(diff[iDiff]){ // hStat->Fill(iDiff+2); diffs = kTRUE; } } if(!diffs) hStat->Fill(1); */ curr1=curr1+ flatEsd1->GetSize(); curr2=curr2+ flatEsd2->GetSize(); iEvent++; } delete[] buffer1; delete[] buffer2; } else { cout << "File could not be read" << endl; } TList histosList; histosList.Add(hDiff); histosList.SaveAs(outputFilename); return; } Double_t printDiff(string name, double val1, double val2){ double relDiff = ( val1 != 0 || val2!=0 ) ? fabs(val1-val2)/(fabs(val1) + fabs(val2)): 0; cout< 1e-6 ? 1:0; } Double_t printDiff(string name, TString val1, TString val2){ cout<