/* ======================================================================== *\ ! ! ! Author(s): Ester Aliu, 2/2004 ! ! \* ======================================================================== */ ///////////////////////////////////////////////////////////////////////////// // // MIslandCalc // // The Island Calc task calculates the some islands parameters for each // of the events such as: // // - fIslNum // number of islands // - fIslId[577] // island Id // - fPixNum[20]; // number of pixels in the island // - fSigToNoise[20]; // signal to noise of the island // - fTimeHi[20][577] // mean of the arrival time in the hi gain // - fTimeLo[20][577] // mean of the arrival time in the lo gain // - fTimeSpreadHi[20]; // mean arrival time spread of the island // - fTimeSpreadLo[20]; // mean arrival time spread of the island // // // Input Containers: // MGeomCam // MCerPhotEvt // MPedestalCam // MArrivalTimeCam // // Output Containers: // MIslands // ///////////////////////////////////////////////////////////////////////////// #include "MIslandCalc.h" #include // atof #include // ofstream, SavePrimitive #include "MLog.h" #include "MLogManip.h" #include "MIslands.h" #include "MParList.h" #include "MGeomPix.h" #include "MGeomCam.h" #include "MCerPhotPix.h" #include "MCerPhotEvt.h" #include "MPedestalCam.h" #include "MPedestalPix.h" #include "MArrivalTimeCam.h" #include "MArrivalTimePix.h" ClassImp(MIslandCalc); using namespace std; // -------------------------------------------------------------------------- // // Default constructor. // MIslandCalc::MIslandCalc(const char* name, const char* title) : fIsl(NULL) { fName = name ? name : "MIslandCalc"; fTitle = title ? title : "Calculate island parameters"; } // -------------------------------------------------------------------------- Int_t MIslandCalc::PreProcess (MParList *pList) { fCam = (MGeomCam*)pList->FindObject(AddSerialNumber("MGeomCam")); if (!fCam) { *fLog << dbginf << "MGeomCam not found (no geometry information available)... aborting." << endl; return kFALSE; } fEvt = (MCerPhotEvt*)pList->FindObject(AddSerialNumber("MCerPhotEvt")); if (!fEvt) { *fLog << dbginf << "MCerPhotEvt not found... aborting." << endl; return kFALSE; } fPed = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam")); if (!fPed) { *fLog << dbginf << "MPedestalCam not found... aborting." << endl; return kFALSE; } fTime = (MArrivalTimeCam*)pList->FindObject(AddSerialNumber("MArrivalTimeCam")); if (!fTime) { *fLog << dbginf << "MArrivalTimeCam not found... aborting." << endl; return kFALSE; } if (strlen(fIslName) > 0) { fIsl = (MIslands*)pList->FindCreateObj("MIslands", AddSerialNumber(fIslName)); cout << "kk1" << endl; } else { fIsl = (MIslands*)pList->FindCreateObj(AddSerialNumber("MIslands")); cout << "kk2" << endl; } if (!fIsl) return kFALSE; return kTRUE; } Int_t MIslandCalc::Process() { Float_t noise; Float_t signal; Int_t npix = 577; Int_t sflag; Int_t control; Int_t nvect = 0; Int_t fIslNum = 0; Int_t vect[50][577]; Int_t zeros[50]; for(Int_t m = 0; m < 50 ; m++) for(Int_t n = 0; n < npix ; n++) vect[m][n] = 0; for(Int_t n = 0; n < 50 ; n++) zeros[n] = 0; //loop over all pixels for(Int_t idx=0 ; idxSetIslNum(0); for(Int_t i = 0; i<20 ;i++) { fIsl->SetPixNum(i,-1); fIsl->SetSigToNoise(i,-1); fIsl->SetTimeSpread(i,-1); // fIsl->SetTimeSpreadHi(i,-1); // fIsl->SetTimeSpreadLo(i,-1); for(Int_t idx = 0; idxSetIslId(idx, -1); fIsl->SetArrivalTime(i, idx, -1 ); // fIsl->SetArrivalTimeHiGain(i, idx, -1 ); // fIsl->SetArrivalTimeLoGain(i, idx, -1); } } for(Int_t i = 1; i<=fIslNum ; i++) { Int_t n = 0; Int_t ncore = 0; Float_t MINhi = 10000; Float_t MINlo = 10000; Float_t MAXhi = 0; Float_t MAXlo = 0; Float_t MIN = 10000; Float_t MAX = 0; //cout << "Isl #" << i << endl; signal = 0; noise = 0; fPixNum[i-1] = 0; timeVariance[i-1] = 0; // timeVarianceHi[i-1] = 0; // timeVarianceLo[i-1] = 0; for(Int_t idx=0 ; idxGetPixRatio(idx)); noise += pow(ped.GetPedestalRms(),2); time[n] = timepix.IsLoGainUsed() ? timepix.GetArrivalTimeLoGain() : timepix.GetArrivalTimeHiGain(); // timeHi[n] = timepix.GetArrivalTimeHiGain(); // cout << "timeHi" << timeHi[n] << endl; //timeLo[n] = timepix.GetArrivalTimeLoGain(); //cout << "timeHi" << timeLo[n] << endl; if (fEvt->IsPixelCore(idx)){ /* if (timeHi[n] < MINhi) MINhi = timeHi[n]; if (timeLo[n] < MINlo) MINlo = timeLo[n]; if (timeHi[n] > MAXhi) MAXhi = timeHi[n]; if (timeLo[n] > MAXlo) MAXlo = timeLo[n]; */ if (time[n] > MAX) MAX = time[n]; if (time[n] < MIN) MIN = time[n]; //control2[n] = 1; //timeVarianceHi[i-1] += timeHi[n]; //timeVarianceLo[i-1] += timeLo[n]; ncore++; } fIsl->SetIslId(idx, i-1); fIsl->SetArrivalTime(i-1, idx, time[n]); // fIsl->SetArrivalTimeHiGain(i-1, idx, timeHi[n]); // fIsl->SetArrivalTimeLoGain(i-1, idx, timeLo[n]); n++; } } Float_t mean = timeVariance[i-1]/ncore; // Float_t meanHi = timeVarianceHi[i-1]/ncore; // Float_t meanLo = timeVarianceLo[i-1]/ncore; timeVariance[i-1] = 0; //timeVarianceHi[i-1] = 0; //timeVarianceLo[i-1] = 0; /* //old for (Int_t k = 0; k SetPixNum(i-1,fPixNum[i-1]); fIsl->SetSigToNoise(i-1,fSigToNoise[i-1]); fIsl->SetTimeSpread(i-1, timeVariance[i-1]); //fIsl->SetTimeSpreadHi(i-1, timeVarianceHi[i-1]); //fIsl->SetTimeSpreadLo(i-1, timeVarianceLo[i-1]); //cout << " TimeHi Spread: " << timeVarianceHi[i-1] << endl; //cout << " # core pixels: " << ncore << endl; //cout << " # used pixels: " << n << endl; //cout << " SigToNoise: " << fSigToNoise[i-1] << endl << endl; } fIsl->SetReadyToSave(); return 1; }