Ignore:
Timestamp:
10/18/11 11:10:55 (13 years ago)
Author:
neise
Message:
erm .. not yet working.. but I want to submit it anyway
Location:
fact/tools/rootmacros
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • fact/tools/rootmacros/discriminator.C

    r12169 r12195  
    1111// it needs a threshold and the length of the falling edge
    1212
    13 typedef struct
    14 {
    15         int begin;
    16         int maxPos;
    17         int end;
    18         float maxVal;
    19 }
    20 DiscOut;
     13#include "discriminator.h"
    2114
    2215vector<DiscOut> * discriminator(
     
    2619{
    2720
    28         vector<DiscOut> result;
     21        vector<DiscOut> * result = new vector<DiscOut>;
    2922        DiscOut disc;
    3023        disc.begin = 0;
     
    3629
    3730
    38         bool debug = true; // switch to true in order to generate some output.
     31        bool debug = false; // switch to true in order to generate some output.
    3932
    40         // chech if by chance the first slice is already over thr
    41         if ( input[0] > thr )
    42                 start_under_thr = false;
    43         else
    44                 start_under_thr = true;
    45                
     33        for ( int sl = 0; sl < input.size() ; sl++ ){
    4634
    47        
    48         for ( int sl = 1; sl < input.size() ; sl++ ){
    4935
    50                 // normal case
    51         //      if ( start_under_thr )
    52                 {
    5336                        if ( input[sl] > thr ) {
    5437                               
     
    6851                                        disc.end = sl;
    6952                               
    70                                         result.push_back(disc);
     53                                        result->push_back(disc);
    7154                                        disc.begin = 0;
    7255                                        disc.end = 0;
     
    7659                                }
    7760                        }               
    78                 }
    79 //              else  // if we were already over thr, when starting.
    80                 {
     61        } // end of for llop over all slices
    8162
    82                 }
    83 
    84         } // end of for llop over all slices
    8563                if (debug){  // output the vector
    86                         for (int p=0; p<result.size(); p++ ){
     64                        for (int p=0; p<result->size(); p++ ){
    8765                                cout << p << ":\t";
    88                                 cout << result[p].begin << "\t";
    89                                 cout << result[p].end << "\t";
    90                                 cout << result[p].maxPos << "\t";
    91                                 cout << result[p].maxVal << endl;
     66                                cout << result->at(p).begin << "\t";
     67                                cout << result->at(p).end << "\t";
     68                                cout << result->at(p).maxPos << "\t";
     69                                cout << result->at(p).maxVal << endl;
    9270                        }
    9371                }
    9472
    95 return NULL;
     73DiscOut last;
     74vector<DiscOut> * realresult = new vector<DiscOut>;
     75       
     76if (result->size() > 0) {       
     77        while (!result->empty()){
     78
     79                last.begin = result->back().begin;
     80                last.end = result->back().end;
     81                last.maxPos = result->back().maxPos;
     82                last.maxVal = result->back().maxVal;
     83                result->pop_back();
     84
     85                if (result->empty()){
     86                        if (last.maxPos > 0)
     87                                realresult->push_back(last);
     88                        break;
     89                }
     90                if (last.maxPos - result->back().maxPos > fallingEdge)
     91                        realresult->push_back(last);
     92        }
     93}
     94/*
     95        vector<vector<DiscOut>::iterator> toBeDeleted;
     96
     97        for (vector<DiscOut>::iterator it=result->begin(); it != result->end()-1; ++it ){
     98                if ( (*it).begin==0 ){
     99                                toBeDeleted.push_back(it);
     100                }
     101                if ( ((*(it+1)).maxPos - (*it).maxPos) < fallingEdge ){
     102                        toBeDeleted.push_back(it);
     103                        }
     104        }               
     105
     106        for (int i=0; i<toBeDeleted.size(); i++) {
     107                result->erase(toBeDeleted[i]);
     108                if (debug)
     109                        cout << "erased peak at:" << (*toBeDeleted[i]).maxPos << endl;
     110        }
     111*/
     112
     113delete result;
     114return realresult;
    96115
    97116} // end of function - discriminator
Note: See TracChangeset for help on using the changeset viewer.