diff --git a/convertRawToAnalyzed/analyse.cpp b/convertRawToAnalyzed/analyse.cpp index d4fdcd14b0f7a819ea90aebfb99cfc1ffbd1ad9d..0d979c61918ddac1326f5e5434a9cb5780879a46 100644 --- a/convertRawToAnalyzed/analyse.cpp +++ b/convertRawToAnalyzed/analyse.cpp @@ -23,9 +23,9 @@ int main(int argc, char* argv[]) - if ( (argc < 3) || (argc > 4) ) { + if ( (argc < 3) || (argc > 5) ) { // Tell the user how to run the program - std::cerr << "Usage: " << argv[0] << " [list with input files] [outputfile] [number of points in one event (1000)]" << std::endl; + std::cerr << "Usage: " << argv[0] << " [list with input files] [outputfile] [smoothParameter (1 - smoothed, 0 - not)] [number of points in one event (1000 or 1024)]" << std::endl; /* "Usage messages" are a conventional way of telling the user * how to run a program if they enter the command incorrectly. */ @@ -34,8 +34,10 @@ int main(int argc, char* argv[]) TString infiles = argv[1]; TString ofile = argv[2]; - TString Asize = argv[3]; - Int_t kEventSize; + TString smooth = argv[3]; + TString Asize = argv[4]; + Int_t kEventSize,intSmoth; + Bool_t smoothPar = kFALSE; if(argc==3) { kEventSize = 1024; @@ -43,10 +45,24 @@ int main(int argc, char* argv[]) noiseMax = 100.; Info("convertRawToAnalyzed", "Event size was set to %d", kEventSize); } - if(argc==4) { + + if(argc>3) { + intSmoth = smooth.Atoi(); + if((intSmoth!=1) && (intSmoth!=0)) { + std::cerr<< argv[3] << " smoothpar should be 1 or 0 " << std::endl; + return 1; + } + if( intSmoth == 1 ) { + smoothPar = kTRUE; + Info("convertRawToAnalyzed", "we gona SMOOTH"); + } + else {Info("convertRawToAnalyzed", "we NOT gonna SMOOTH");} + } + + if(argc==5) { kEventSize = Asize.Atoi(); - if(kEventSize!=1000) { - std::cerr<< argv[0] << " the size of Events should be 1000 in this case " << std::endl; + if((kEventSize!=1000) && ((kEventSize!=1024))) { + std::cerr<< argv[0] << " the size of Events should be 1000 or 1024 " << std::endl; return 1; } } @@ -54,7 +70,7 @@ int main(int argc, char* argv[]) TFile *f = new TFile(infiles.Data()); if (/*f == 0 || */f->IsZombie()) { Error("convertRawToAnalyzed", "Input file was not opened. Program will be terminated"); - return 2; + return 1; } TTree *tr = (TTree*)f->Get("rtree"); @@ -66,8 +82,6 @@ int main(int argc, char* argv[]) tr->SetBranchAddress(bName.Data(), &revent[j]); } - - TFile *fw = new TFile(ofile.Data(), "RECREATE"); //create .root file with somehow analyzed data TTree *tw = new TTree("atree", "title of drs4 analysis tree"); //create analysis tree atree in it @@ -90,7 +104,7 @@ int main(int argc, char* argv[]) //cout<<" Event "<Reset(); - wevent[j]->ProcessEvent(); //here all the analysis is going on so far + wevent[j]->ProcessEvent(smoothPar); //here all the analysis is going on so far } if ( !(i%100) ) { printf("Found event #%lld\n", i); } diff --git a/dataClasses/AEvent.cpp b/dataClasses/AEvent.cpp index fab8d2663b74dd5795af852e8816ec003e5b4f3d..07d29de21c28959806f6b1567ced2f10b1d684dd 100644 --- a/dataClasses/AEvent.cpp +++ b/dataClasses/AEvent.cpp @@ -50,19 +50,22 @@ void AEvent::ProcessEvent(Bool_t bSmooth) { SetMaxAmplitudes(); - SetGraphs(); - if (bSmooth == kTRUE) { SmoothGraphs(); } + else { + SetGraphs(); + } FindFrontProperties(); SetLED(); // SetGraphs(); + SetCFD(); SetChargeCFD(); SetChargeLED(); SetChargeTF(); + SetToT(); // SmoothGraphs(); @@ -84,6 +87,8 @@ void AEvent::Reset() { fTime10=0.; fTime90=0.; fTimeMid=0.; + fToT=-100.; + fAmpMid=0.; fAmpMax = 0.; fTimeAmpMax = 0.; fTimeCFD = -100.; @@ -110,7 +115,7 @@ void AEvent::Init() { fGraphSignal = new TGraph(); fGraphCFD = new TGraph(); - fGraphSmooth = new TGraph(); +// fGraphSmooth = new TGraph(); fInputEvent = 0; fCFratio = 0.; @@ -135,10 +140,8 @@ void AEvent::SetGraphs() { void AEvent::SmoothGraphs() { //smoothing graph + fGraphSignal->Set(fNPoints - fWinSize/2); - fGraphSmooth->Set(fNPoints - fWinSize/2); - - //Int_t winSize = 5; //number of smoothing points Int_t winMidSize = fWinSize / 2; Double_t tmin, tmax, meanTime, meanAmp, sumAmp; @@ -159,7 +162,7 @@ void AEvent::SmoothGraphs() { meanAmp = sumAmp / fWinSize; //cout<<"mean amp "<SetPoint(i, meanTime, meanAmp); + fGraphSignal->SetPoint(i, meanTime, meanAmp); } @@ -249,6 +252,7 @@ void AEvent::FindFrontProperties() { fEdgeXi = fit1->GetChisquare(); fTimeMid = (fTime90 -fTime10)*0.5 + fTime10; //time point between fTime90 and fTime10 + fAmpMid = fGraphSignal->Eval(fTimeMid); //adding point where fit function crosses zero Double_t a = 0, b = 0; @@ -427,3 +431,29 @@ void AEvent::SetLED(Double_t threshold) { // сделать через функцию getpoint и цикл по точкам от } + +void AEvent::SetToT() { + + Double_t time = fTimeMid; + Double_t timeBack = 0; + const Double_t ns = 15.; //withing this interval signal should end for sure, in nanosec + + const Double_t timeStep = 0.05; + + //cout<<"fAmpMid "<Eval(time) >= fAmpMid && time < fTimeMid + ns) { + //cout<<"timeback "<Eval(time) "<Eval(time)<150.) {return;} + timeBack = time; + time = time + timeStep; + } + //cout<<"timeback "<SetRange(t10[k], t90[k]); //gr[k]->Fit(f1, "RQ"); } - c1->Print(Form("../macros/picsDRS4/file%s/signals%s", foldername, ext)); + //c1->Print(Form("../macros/picsDRS4/file%s/signals%s", foldername, ext)); // c1->cd(2); // tr->Draw("gAmp.Draw()","","goff",1,124); }